diff options
author | cinap_lenrek <cinap_lenrek@felloff.net> | 2016-04-28 20:53:53 +0200 |
---|---|---|
committer | cinap_lenrek <cinap_lenrek@felloff.net> | 2016-04-28 20:53:53 +0200 |
commit | 4c21da2ededfb5fc628dbee0d75b0aa5263ef97b (patch) | |
tree | 1d3e8ab7c177b55c74e03c5f4c26f31b523abfbc /sys/src/libregexp/regprint.c | |
parent | ca5b491753ad363da8d9deb5978b56231ec27bf5 (diff) | |
parent | eb168924840977fe0941d4fc90e56db0d484a6e4 (diff) |
merge
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); +} |