diff options
author | ben <ben@rana> | 2016-04-26 22:23:44 -0500 |
---|---|---|
committer | ben <ben@rana> | 2016-04-26 22:23:44 -0500 |
commit | 0a460e1722c50e31653359f8a86fe0b606d2b513 (patch) | |
tree | b5a00bbfc883aa98709db012e0a7bacc67e234af /sys/src/libregexp/regprint.c | |
parent | 651d6c2bc68e7e5224c3ba41b094e37b1c1890ed (diff) |
New libregexp and APE ported to native
Diffstat (limited to 'sys/src/libregexp/regprint.c')
-rw-r--r-- | sys/src/libregexp/regprint.c | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/sys/src/libregexp/regprint.c b/sys/src/libregexp/regprint.c new file mode 100644 index 000000000..673ca1f7b --- /dev/null +++ b/sys/src/libregexp/regprint.c @@ -0,0 +1,66 @@ +#include <u.h> +#include <libc.h> +#include <regexp.h> +#include <regimpl.h> + +static int +fmtprinst(Fmt *f, Reinst *inst) +{ + int r; + + r = fmtprint(f, "%p ", inst); + switch(inst->op) { + case ORUNE: + r += fmtprint(f, "ORUNE\t%C\n", inst->r); + break; + case ONOTNL: + r += fmtprint(f, "ONOTNL\n"); + break; + case OCLASS: + r += fmtprint(f, "OCLASS\t%C-%C %p\n", inst->r, inst->r1, inst->a); + break; + case OSPLIT: + r += fmtprint(f, "OSPLIT\t%p %p\n", inst->a, inst->b); + break; + case OJMP: + r += fmtprint(f, "OJMP \t%p\n", inst->a); + break; + case OSAVE: + r += fmtprint(f, "OSAVE\t%d\n", inst->sub); + break; + case OUNSAVE: + r += fmtprint(f, "OUNSAVE\t%d\n", inst->sub); + break; + case OANY: + r += fmtprint(f, "OANY \t.\n"); + break; + case OEOL: + r += fmtprint(f, "OEOL \t$\n"); + break; + case OBOL: + r += fmtprint(f, "OBOL \t^\n"); + break; + } + return r; +} + +static int +fmtprprog(Fmt *f, Reprog *reprog) +{ + Reinst *inst; + int r; + + r = 0; + for(inst = reprog->startinst; inst < reprog->startinst + reprog->len; inst++) + r += fmtprinst(f, inst); + return r; +} + +int +reprogfmt(Fmt *f) +{ + Reprog *r; + + r = va_arg(f->args, Reprog*); + return fmtprprog(f, r); +} |