diff options
author | Damien George <damien@micropython.org> | 2021-07-12 16:33:19 +1000 |
---|---|---|
committer | Damien George <damien@micropython.org> | 2021-07-12 16:36:26 +1000 |
commit | d1d172f536247df4716b76b105a875477ea75d65 (patch) | |
tree | 9a3ce8a5f35dd3e7799cdd833bf63710659767c9 /lib/re1.5/dumpcode.c | |
parent | e2f0b181f94c7f0843102b02912680d916b0b7d0 (diff) |
lib/re1.5: Move re1.5 code from extmod to lib.
It's third-party code, and not necessarily tied to extmod.
Signed-off-by: Damien George <damien@micropython.org>
Diffstat (limited to 'lib/re1.5/dumpcode.c')
-rw-r--r-- | lib/re1.5/dumpcode.c | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/lib/re1.5/dumpcode.c b/lib/re1.5/dumpcode.c new file mode 100644 index 000000000..d7781d849 --- /dev/null +++ b/lib/re1.5/dumpcode.c @@ -0,0 +1,65 @@ +// Copyright 2014 Paul Sokolovsky. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +#include "re1.5.h" + +void re1_5_dumpcode(ByteProg *prog) +{ + int pc = 0; + char *code = prog->insts; + while (pc < prog->bytelen) { + printf("%2d: ", pc); + switch(code[pc++]) { + default: + assert(0); +// re1_5_fatal("printprog"); + case Split: + printf("split %d (%d)\n", pc + (signed char)code[pc] + 1, (signed char)code[pc]); + pc++; + break; + case RSplit: + printf("rsplit %d (%d)\n", pc + (signed char)code[pc] + 1, (signed char)code[pc]); + pc++; + break; + case Jmp: + printf("jmp %d (%d)\n", pc + (signed char)code[pc] + 1, (signed char)code[pc]); + pc++; + break; + case Char: + printf("char %c\n", code[pc++]); + break; + case Any: + printf("any\n"); + break; + case Class: + case ClassNot: { + int num = code[pc]; + printf("class%s %d", (code[pc - 1] == ClassNot ? "not" : ""), num); + pc++; + while (num--) { + printf(" 0x%02x-0x%02x", code[pc], code[pc + 1]); + pc += 2; + } + printf("\n"); + break; + } + case NamedClass: + printf("namedclass %c\n", code[pc++]); + break; + case Match: + printf("match\n"); + break; + case Save: + printf("save %d\n", (unsigned char)code[pc++]); + break; + case Bol: + printf("assert bol\n"); + break; + case Eol: + printf("assert eol\n"); + break; + } + } + printf("Bytes: %d, insts: %d\n", prog->bytelen, prog->len); +} |