diff options
author | Damien George <damien.p.george@gmail.com> | 2015-02-21 10:33:20 +0000 |
---|---|---|
committer | Damien George <damien.p.george@gmail.com> | 2015-02-21 10:33:20 +0000 |
commit | d09a5b51c2c96e0315ec000589fdf81ca41c3fec (patch) | |
tree | bae8802dce4789da6d7e25ef1fe4076cb1b416e0 /extmod/re1.5/compilecode.c | |
parent | 2e24034c3f90f9111d1f07cf1ff6276e7c6809a2 (diff) | |
download | micropython-d09a5b51c2c96e0315ec000589fdf81ca41c3fec.tar.gz micropython-d09a5b51c2c96e0315ec000589fdf81ca41c3fec.zip |
extmod: Pull in upstream changes to re1.5; fixes bug, adds named class.
Diffstat (limited to 'extmod/re1.5/compilecode.c')
-rw-r--r-- | extmod/re1.5/compilecode.c | 15 |
1 files changed, 12 insertions, 3 deletions
diff --git a/extmod/re1.5/compilecode.c b/extmod/re1.5/compilecode.c index 2ed38d02c3..42672a756b 100644 --- a/extmod/re1.5/compilecode.c +++ b/extmod/re1.5/compilecode.c @@ -78,6 +78,13 @@ const char *_compilecode(const char *re, ByteProg *prog) switch (*re) { case '\\': re++; + if ((*re | 0x20) == 'd' || (*re | 0x20) == 's' || (*re | 0x20) == 'w') { + term = pc; + EMIT(pc++, NamedClass); + EMIT(pc++, *re); + prog->len++; + break; + } default: term = pc; EMIT(pc++, Char); @@ -112,11 +119,12 @@ const char *_compilecode(const char *re, ByteProg *prog) EMIT(term + 1, cnt); break; } - case '(': + case '(': { term = pc; + int sub = ++prog->sub; EMIT(pc++, Save); - EMIT(pc++, 2 * ++prog->sub); + EMIT(pc++, 2 * sub); prog->len++; prog->bytelen = pc; @@ -124,10 +132,11 @@ const char *_compilecode(const char *re, ByteProg *prog) pc = prog->bytelen; EMIT(pc++, Save); - EMIT(pc++, 2 * prog->sub + 1); + EMIT(pc++, 2 * sub + 1); prog->len++; break; + } case '?': insert_code(code, term, 2, &pc); EMIT(term, Split); |