summaryrefslogtreecommitdiffstatshomepage
path: root/extmod/re1.5/compilecode.c
diff options
context:
space:
mode:
authorPaul Sokolovsky <pfalcon@users.sourceforge.net>2014-10-16 13:56:13 +0300
committerPaul Sokolovsky <pfalcon@users.sourceforge.net>2014-10-17 22:25:18 +0300
commit297d8469b8fcaa072630c9561695edb001d96232 (patch)
tree04e7bfb9ddb60a8a8b84feb59c95c9d7cf4627b4 /extmod/re1.5/compilecode.c
parent391db8669b77e50eebe4d1583749430a3549fab7 (diff)
downloadmicropython-297d8469b8fcaa072630c9561695edb001d96232.tar.gz
micropython-297d8469b8fcaa072630c9561695edb001d96232.zip
modure: Update to re1.5 v0.6.1, fixed and extended character class support.
Diffstat (limited to 'extmod/re1.5/compilecode.c')
-rw-r--r--extmod/re1.5/compilecode.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/extmod/re1.5/compilecode.c b/extmod/re1.5/compilecode.c
index a7942b1216..2ed38d02c3 100644
--- a/extmod/re1.5/compilecode.c
+++ b/extmod/re1.5/compilecode.c
@@ -48,6 +48,7 @@ int re1_5_sizecode(const char *re)
case '[': {
pc += 2;
re++;
+ if (*re == '^') re++;
while (*re != ']') {
if (!*re) return -1;
if (re[1] == '-') {
@@ -91,10 +92,15 @@ const char *_compilecode(const char *re, ByteProg *prog)
case '[': {
int cnt;
term = pc;
- EMIT(pc++, Class);
+ re++;
+ if (*re == '^') {
+ EMIT(pc++, ClassNot);
+ re++;
+ } else {
+ EMIT(pc++, Class);
+ }
pc++; // Skip # of pair byte
prog->len++;
- re++;
for (cnt = 0; *re != ']'; re++, cnt++) {
if (!*re) return NULL;
EMIT(pc++, *re);