summaryrefslogtreecommitdiff
path: root/lib/re1.5/dumpcode.c
diff options
context:
space:
mode:
authorDamien George <damien@micropython.org>2021-07-12 16:33:19 +1000
committerDamien George <damien@micropython.org>2021-07-12 16:36:26 +1000
commitd1d172f536247df4716b76b105a875477ea75d65 (patch)
tree9a3ce8a5f35dd3e7799cdd833bf63710659767c9 /lib/re1.5/dumpcode.c
parente2f0b181f94c7f0843102b02912680d916b0b7d0 (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.c65
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);
+}