summaryrefslogtreecommitdiffstatshomepage
path: root/extmod/re1.5/compilecode.c
diff options
context:
space:
mode:
authorDamien George <damien.p.george@gmail.com>2015-02-21 10:33:20 +0000
committerDamien George <damien.p.george@gmail.com>2015-02-21 10:33:20 +0000
commitd09a5b51c2c96e0315ec000589fdf81ca41c3fec (patch)
treebae8802dce4789da6d7e25ef1fe4076cb1b416e0 /extmod/re1.5/compilecode.c
parent2e24034c3f90f9111d1f07cf1ff6276e7c6809a2 (diff)
downloadmicropython-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.c15
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);