RPA Toolkit
added bitmap operations for branches, named rules, anonymous rules.
authorMartin Stoilov <martin@rpasearch.com>
Thu, 21 Jul 2011 04:28:40 +0000 (21:28 -0700)
committerMartin Stoilov <martin@rpasearch.com>
Thu, 21 Jul 2011 04:28:40 +0000 (21:28 -0700)
14 files changed:
rpa/rpacompiler.c
rpa/rpacompiler.h
rpa/rpadbex.c
rpa/rpaparser.c
rpa/rpastat.c
rpa/rpavm.c
rpa/rpavm.h
tests/testrpa/rpacompiler-altexp.c
tests/testrpa/rpacompiler-exp.c
tests/testrpa/rpacompiler-minusexp.c
tests/testrpa/rpacompiler-rulealtrec.c
tests/testrpa/rpacompiler-ruleloop.c
tests/testrpa/rpacompiler-ruleloopcls.c
tests/testrpa/rpacompiler-rulerec.c

index f8f20af..13931f3 100644 (file)
@@ -571,7 +571,7 @@ int rpa_compiler_inlinerule_end(rpa_compiler_t *co)
 }
 
 
-int rpa_compiler_exp_begin(rpa_compiler_t *co, unsigned int flags)
+int rpa_compiler_exp_begin(rpa_compiler_t *co, unsigned int flags, rpabitmap_t bitmap)
 {
        rpa_ruledef_t exp;
 
@@ -580,6 +580,11 @@ int rpa_compiler_exp_begin(rpa_compiler_t *co, unsigned int flags)
        exp.start = rvm_codegen_getcodesize(co->cg);
        exp.startidx = rpa_codegen_add_numlabel_s(co->cg, "__begin", exp.start);
        exp.endidx = rpa_codegen_invalid_add_numlabel_s(co->cg, "__end", exp.start);
+       exp.bitmap = bitmap;
+       if (exp.bitmap) {
+               rvm_codegen_addins(co->cg, rvm_asm(RPA_MATCHBITMAP, DA, XX, XX, exp.bitmap));
+               rvm_codegen_addins(co->cg, rvm_asm(RVM_BXLES, LR, XX, XX, 0));
+       }
        rvm_codegen_addins(co->cg, rvm_asm(RVM_PUSH, R_REC, XX, XX, 0));
        rvm_codegen_addins(co->cg, rvm_asm(RVM_PUSH, R_TOP, XX, XX, 0));
        rvm_codegen_addins(co->cg, rvm_asm(RVM_PUSH, LR, XX, XX, 0));
@@ -653,7 +658,7 @@ int rpa_compiler_altexp_end(rpa_compiler_t *co)
 }
 
 
-int rpa_compiler_branch_begin(rpa_compiler_t *co, unsigned int flags)
+int rpa_compiler_branch_begin(rpa_compiler_t *co, unsigned int flags, rpabitmap_t bitmap)
 {
        rpa_ruledef_t exp;
 
@@ -662,6 +667,11 @@ int rpa_compiler_branch_begin(rpa_compiler_t *co, unsigned int flags)
        exp.start = rvm_codegen_getcodesize(co->cg);
        exp.startidx = rpa_codegen_add_numlabel_s(co->cg, "__begin", exp.start);
        exp.endidx = rpa_codegen_invalid_add_numlabel_s(co->cg, "__end", exp.start);
+       exp.bitmap = bitmap;
+       if (exp.bitmap) {
+               rvm_codegen_addins(co->cg, rvm_asm(RPA_MATCHBITMAP, DA, XX, XX, exp.bitmap));
+               rvm_codegen_addins(co->cg, rvm_asm(RVM_BXLES, LR, XX, XX, 0));
+       }
        rvm_codegen_addins(co->cg, rvm_asm(RVM_PUSH, R_REC, XX, XX, 0));
        rvm_codegen_addins(co->cg, rvm_asm(RVM_PUSH, R_TOP, XX, XX, 0));
        rvm_codegen_addins(co->cg, rvm_asm(RVM_PUSH, LR, XX, XX, 0));
index 047e1a2..4a93625 100644 (file)
@@ -93,13 +93,13 @@ int rpa_compiler_inlinerule_begin(rpa_compiler_t *co, const char *name, unsigned
 int rpa_compiler_inlinerule_begin_s(rpa_compiler_t *co, const char *name, unsigned int flags);
 int rpa_compiler_inlinerule_end(rpa_compiler_t *co);
 
-int rpa_compiler_exp_begin(rpa_compiler_t *co, unsigned int flags);
+int rpa_compiler_exp_begin(rpa_compiler_t *co, unsigned int flags, rpabitmap_t bitmap);
 int rpa_compiler_exp_end(rpa_compiler_t *co);
 
 int rpa_compiler_altexp_begin(rpa_compiler_t *co, unsigned int flags, rpabitmap_t bitmap);
 int rpa_compiler_altexp_end(rpa_compiler_t *co);
 
-int rpa_compiler_branch_begin(rpa_compiler_t *co, unsigned int flags);
+int rpa_compiler_branch_begin(rpa_compiler_t *co, unsigned int flags, rpabitmap_t bitmap);
 int rpa_compiler_branch_end(rpa_compiler_t *co);
 
 int rpa_compiler_nonloopybranch_begin(rpa_compiler_t *co, unsigned int flags);
index 8af01bb..696898d 100644 (file)
@@ -407,6 +407,9 @@ static int rpa_dbex_rh_namedrule(rpadbex_t *dbex, long rec)
                rpa_compiler_inlinerule_begin(dbex->co, name, namesize, 0);
        } else {
                rvm_codegen_addins(dbex->co->cg, rvm_asm(RPA_SHIFT, XX, XX, XX, 0));
+               if (RPA_BITMAP_GETVAL(RPA_RECORD2BITMAP(prec))) {
+                       rvm_codegen_addins(dbex->co->cg, rvm_asm(RPA_EXITONBITMAP, DA, XX, XX, RPA_BITMAP_GETVAL(RPA_RECORD2BITMAP(prec))));
+               }
                rvm_codegen_addins(dbex->co->cg, rvm_asm(RVM_BL, DA, XX, XX, 3));
                rvm_codegen_addins(dbex->co->cg, rvm_asm(RPA_EMITTAIL, XX, XX, XX, 0));
                rvm_codegen_addins(dbex->co->cg, rvm_asm(RVM_EXT, XX, XX, XX, 0));
@@ -414,10 +417,6 @@ static int rpa_dbex_rh_namedrule(rpadbex_t *dbex, long rec)
                if ((prec->usertype & RPA_LOOP_PATH)) {
                        rpa_compiler_loop_begin(dbex->co, name, namesize);
                } else {
-#if 0
-                       rvm_codegen_addins(dbex->co->cg, rvm_asm(RPA_MATCHBITMAP, DA, XX, XX, prec->userdata));
-                       rvm_codegen_addins(dbex->co->cg, rvm_asm(RVM_BXLES, LR, XX, XX, 0));
-#endif
                        rpa_compiler_rule_begin(dbex->co, name, namesize, RPA_BITMAP_GETVAL(RPA_RECORD2BITMAP(prec)));
                }
        }
@@ -454,7 +453,10 @@ static int rpa_dbex_rh_anonymousrule(rpadbex_t *dbex, long rec)
        R_ASSERT(prec);
        rpa_dbex_debug_recordhead(dbex, rec);
        rvm_codegen_addins(dbex->co->cg, rvm_asm(RPA_SHIFT, XX, XX, XX, 0));
-       rpa_compiler_exp_begin(dbex->co, RPA_MATCH_NONE);
+       if (RPA_BITMAP_GETVAL(RPA_RECORD2BITMAP(prec))) {
+               rvm_codegen_addins(dbex->co->cg, rvm_asm(RPA_EXITONBITMAP, DA, XX, XX, RPA_BITMAP_GETVAL(RPA_RECORD2BITMAP(prec))));
+       }
+       rpa_compiler_exp_begin(dbex->co, RPA_MATCH_NONE, RPA_BITMAP_GETVAL(RPA_RECORD2BITMAP(prec)));
        rpa_dbex_debug_recordtail(dbex, rec);
        if (rpa_dbex_playchildrecords(dbex, rec) < 0)
                return -1;
@@ -588,7 +590,7 @@ static int rpa_dbex_rh_minexp(rpadbex_t *dbex, long rec)
        prec = rpa_dbex_record(dbex, rec);
        R_ASSERT(prec);
        rpa_dbex_debug_recordhead(dbex, rec);
-       rpa_compiler_exp_begin(dbex->co, prec->usertype & RPA_MATCH_MASK);
+       rpa_compiler_exp_begin(dbex->co, prec->usertype & RPA_MATCH_MASK, RPA_BITMAP_GETVAL(RPA_RECORD2BITMAP(prec)));
        rpa_dbex_debug_recordtail(dbex, rec);
        if (rpa_dbex_playreversechildrecords(dbex, rec) < 0)
                return -1;
@@ -612,7 +614,7 @@ static int rpa_dbex_rh_exp(rpadbex_t *dbex, long rec)
        prec = rpa_dbex_record(dbex, rec);
        R_ASSERT(prec);
        rpa_dbex_debug_recordhead(dbex, rec);
-       rpa_compiler_exp_begin(dbex->co, prec->usertype & RPA_MATCH_MASK);
+       rpa_compiler_exp_begin(dbex->co, (prec->usertype & RPA_MATCH_MASK), 0);
        rpa_dbex_debug_recordtail(dbex, rec);
        if (rpa_dbex_playchildrecords(dbex, rec) < 0)
                return -1;
@@ -636,7 +638,7 @@ static int rpa_dbex_rh_orop(rpadbex_t *dbex, long rec)
        prec = rpa_dbex_record(dbex, rec);
        R_ASSERT(prec);
        rpa_dbex_debug_recordhead(dbex, rec);
-       rpa_compiler_altexp_begin(dbex->co, prec->usertype & RPA_MATCH_MASK, RPA_BITMAP_GETVAL(RPA_RECORD2BITMAP(prec)));
+       rpa_compiler_altexp_begin(dbex->co, (prec->usertype & RPA_MATCH_MASK), RPA_BITMAP_GETVAL(RPA_RECORD2BITMAP(prec)));
        rpa_dbex_debug_recordtail(dbex, rec);
        if (rpa_dbex_playchildrecords(dbex, rec) < 0)
                return -1;
@@ -856,9 +858,9 @@ static int rpa_dbex_rh_branch(rpadbex_t *dbex, long rec)
        R_ASSERT(prec);
        rpa_dbex_debug_recordhead(dbex, rec);
        if (prec->usertype & RPA_NONLOOP_PATH) {
-               rpa_compiler_nonloopybranch_begin(dbex->co, prec->usertype & RPA_MATCH_MASK);
+               rpa_compiler_nonloopybranch_begin(dbex->co, (prec->usertype & RPA_MATCH_MASK));
        } else {
-               rpa_compiler_branch_begin(dbex->co, prec->usertype & RPA_MATCH_MASK);
+               rpa_compiler_branch_begin(dbex->co, (prec->usertype & RPA_MATCH_MASK), RPA_BITMAP_GETVAL(RPA_RECORD2BITMAP(prec)));
        }
        rpa_dbex_debug_recordtail(dbex, rec);
        if (rpa_dbex_playchildrecords(dbex, rec) < 0)
@@ -883,7 +885,7 @@ static void rpa_dbex_rh_loopref(rpadbex_t *dbex, rparecord_t *prec)
         * We ignore, it doesn't make sense for loops:
         * RPA_MATCH_MULTIPLE
         */
-       rpa_compiler_exp_begin(dbex->co, (prec->usertype & RPA_MATCH_OPTIONAL));
+       rpa_compiler_exp_begin(dbex->co, (prec->usertype & RPA_MATCH_OPTIONAL), 0);
        rvm_codegen_addins(dbex->co->cg, rvm_asm(RVM_CMP, R_LOO, DA, XX, 0));
        rvm_codegen_addins(dbex->co->cg, rvm_asm(RVM_BGRE, DA, XX, XX, 3));
        rvm_codegen_addins(dbex->co->cg, rvm_asm(RVM_MOVS, R0, DA, XX, -1));
@@ -932,7 +934,7 @@ static int rpa_dbex_rh_aref(rpadbex_t *dbex, long rec)
                                 * We ignore, it doesn't make sense for loops:
                                 * RPA_MATCH_MULTIPLE
                                 */
-                               rpa_compiler_exp_begin(dbex->co, RPA_MATCH_OPTIONAL);
+                               rpa_compiler_exp_begin(dbex->co, RPA_MATCH_OPTIONAL, 0);
                                rpa_dbex_playrecord(dbex, info->startrec);
                                rvm_codegen_index_addrelocins(dbex->co->cg, RVM_RELOC_BRANCH, RPA_COMPILER_CURRENTEXP(dbex->co)->endidx, rvm_asm(RVM_BLES, DA, XX, XX, 0));
                                rpa_compiler_exp_end(dbex->co);
index d750e9c..cc9c254 100644 (file)
@@ -85,33 +85,33 @@ static void rpa_production_directives(rpa_parser_t *pa)
 
        rpa_compiler_altexp_begin(co, RPA_MATCH_MULTIPLE, 0);
 
-       rpa_compiler_branch_begin(co, RPA_MATCH_NONE);
+       rpa_compiler_branch_begin(co, RPA_MATCH_NONE, 0);
        rpa_compiler_reference_nan_s(co, "emit");
        rvm_codegen_index_addrelocins(co->cg, RVM_RELOC_BRANCH, RPA_COMPILER_CURRENTEXP(co)->endidx, rvm_asm(RVM_BLES, DA, XX, XX, 0));
        rpa_compiler_branch_end(co);
 
-       rpa_compiler_branch_begin(co, RPA_MATCH_NONE);
+       rpa_compiler_branch_begin(co, RPA_MATCH_NONE, 0);
        rpa_compiler_reference_nan_s(co, "noemit");
        rvm_codegen_index_addrelocins(co->cg, RVM_RELOC_BRANCH, RPA_COMPILER_CURRENTEXP(co)->endidx, rvm_asm(RVM_BLES, DA, XX, XX, 0));
        rpa_compiler_branch_end(co);
 
-       rpa_compiler_branch_begin(co, RPA_MATCH_NONE);
+       rpa_compiler_branch_begin(co, RPA_MATCH_NONE, 0);
        rpa_compiler_reference_nan_s(co, "emitall");
        rvm_codegen_index_addrelocins(co->cg, RVM_RELOC_BRANCH, RPA_COMPILER_CURRENTEXP(co)->endidx, rvm_asm(RVM_BLES, DA, XX, XX, 0));
        rpa_compiler_branch_end(co);
 
-       rpa_compiler_branch_begin(co, RPA_MATCH_NONE);
+       rpa_compiler_branch_begin(co, RPA_MATCH_NONE, 0);
        rpa_compiler_reference_nan_s(co, "emitnone");
        rvm_codegen_index_addrelocins(co->cg, RVM_RELOC_BRANCH, RPA_COMPILER_CURRENTEXP(co)->endidx, rvm_asm(RVM_BLES, DA, XX, XX, 0));
        rpa_compiler_branch_end(co);
 
-       rpa_compiler_branch_begin(co, RPA_MATCH_NONE);
+       rpa_compiler_branch_begin(co, RPA_MATCH_NONE, 0);
        rpa_compiler_reference_nan_s(co, "abort");
        rvm_codegen_index_addrelocins(co->cg, RVM_RELOC_BRANCH, RPA_COMPILER_CURRENTEXP(co)->endidx, rvm_asm(RVM_BLES, DA, XX, XX, 0));
        rpa_compiler_branch_end(co);
 
 
-       rpa_compiler_branch_begin(co, RPA_MATCH_NONE);
+       rpa_compiler_branch_begin(co, RPA_MATCH_NONE, 0);
        rpa_compiler_reference_nan_s(co, "emitid");
        rvm_codegen_index_addrelocins(co->cg, RVM_RELOC_BRANCH, RPA_COMPILER_CURRENTEXP(co)->endidx, rvm_asm(RVM_BLES, DA, XX, XX, 0));
        rpa_compiler_branch_end(co);
@@ -144,22 +144,22 @@ static void rpa_production_bnf(rpa_parser_t *pa)
 
        rpa_compiler_altexp_begin(co, RPA_MATCH_MULTIPLE, 0);
 
-       rpa_compiler_branch_begin(co, RPA_MATCH_NONE);
+       rpa_compiler_branch_begin(co, RPA_MATCH_NONE, 0);
        rpa_compiler_reference_nan_s(co, "space");
        rvm_codegen_index_addrelocins(co->cg, RVM_RELOC_BRANCH, RPA_COMPILER_CURRENTEXP(co)->endidx, rvm_asm(RVM_BLES, DA, XX, XX, 0));
        rpa_compiler_branch_end(co);
 
-       rpa_compiler_branch_begin(co, RPA_MATCH_NONE);
+       rpa_compiler_branch_begin(co, RPA_MATCH_NONE, 0);
        rpa_compiler_reference_nan_s(co, "directives");
        rvm_codegen_index_addrelocins(co->cg, RVM_RELOC_BRANCH, RPA_COMPILER_CURRENTEXP(co)->endidx, rvm_asm(RVM_BLES, DA, XX, XX, 0));
        rpa_compiler_branch_end(co);
 
-       rpa_compiler_branch_begin(co, RPA_MATCH_NONE);
+       rpa_compiler_branch_begin(co, RPA_MATCH_NONE, 0);
        rpa_compiler_reference_nan_s(co, "comment");
        rvm_codegen_index_addrelocins(co->cg, RVM_RELOC_BRANCH, RPA_COMPILER_CURRENTEXP(co)->endidx, rvm_asm(RVM_BLES, DA, XX, XX, 0));
        rpa_compiler_branch_end(co);
 
-       rpa_compiler_branch_begin(co, RPA_MATCH_NONE);
+       rpa_compiler_branch_begin(co, RPA_MATCH_NONE, 0);
        rpa_compiler_class_begin(co, RPA_MATCH_MULTIPLE);
        rvm_codegen_addins(co->cg, rvm_asm(RPA_MATCHCHR_NAN, DA, XX, XX, '\r'));
        rvm_codegen_index_addrelocins(co->cg, RVM_RELOC_BRANCH, RPA_COMPILER_CURRENTEXP(co)->endidx, rvm_asm(RVM_BGRE, DA, XX, XX, 0));
@@ -171,12 +171,12 @@ static void rpa_production_bnf(rpa_parser_t *pa)
        rvm_codegen_index_addrelocins(co->cg, RVM_RELOC_BRANCH, RPA_COMPILER_CURRENTEXP(co)->endidx, rvm_asm(RVM_BLES, DA, XX, XX, 0));
        rpa_compiler_branch_end(co);
 
-       rpa_compiler_branch_begin(co, RPA_MATCH_NONE);
+       rpa_compiler_branch_begin(co, RPA_MATCH_NONE, 0);
        rpa_compiler_reference_nan_s(co, "namedrule");
        rvm_codegen_index_addrelocins(co->cg, RVM_RELOC_BRANCH, RPA_COMPILER_CURRENTEXP(co)->endidx, rvm_asm(RVM_BLES, DA, XX, XX, 0));
        rpa_compiler_branch_end(co);
 
-       rpa_compiler_branch_begin(co, RPA_MATCH_NONE);
+       rpa_compiler_branch_begin(co, RPA_MATCH_NONE, 0);
        rpa_compiler_reference_nan_s(co, "anonymousrule");
        rvm_codegen_index_addrelocins(co->cg, RVM_RELOC_BRANCH, RPA_COMPILER_CURRENTEXP(co)->endidx, rvm_asm(RVM_BLES, DA, XX, XX, 0));
        rpa_compiler_branch_end(co);
@@ -394,8 +394,8 @@ static void rpa_production_comment(rpa_parser_t *pa)
        rvm_codegen_addins(co->cg, rvm_asm(RPA_MATCHCHR_NAN, DA, XX, XX, '#'));
        rvm_codegen_index_addrelocins(co->cg, RVM_RELOC_BRANCH, RPA_COMPILER_CURRENTEXP(co)->endidx, rvm_asm(RVM_BLES, DA, XX, XX, 0));
 
-       rpa_compiler_exp_begin(co, RPA_MATCH_MULTIOPT);
-       rpa_compiler_branch_begin(co, RPA_MATCH_NONE);
+       rpa_compiler_exp_begin(co, RPA_MATCH_MULTIOPT, 0);
+       rpa_compiler_branch_begin(co, RPA_MATCH_NONE, 0);
        rpa_compiler_class_begin(co, RPA_MATCH_NONE);
        rvm_codegen_addins(co->cg, rvm_asm(RPA_MATCHCHR_NAN, DA, XX, XX, '\r'));
        rvm_codegen_index_addrelocins(co->cg, RVM_RELOC_BRANCH, RPA_COMPILER_CURRENTEXP(co)->endidx, rvm_asm(RVM_BGRE, DA, XX, XX, 0));
@@ -540,7 +540,7 @@ static void rpa_production_assign(rpa_parser_t *pa)
        rpa_compiler_t *co = pa->co;
 
        rpa_compiler_rule_begin_s(co, "assign", 0);
-       rpa_compiler_exp_begin(co, RPA_MATCH_NONE);
+       rpa_compiler_exp_begin(co, RPA_MATCH_NONE, 0);
 
        rpa_compiler_reference_opt_s(co, "space");
 
@@ -637,11 +637,11 @@ static void rpa_production_escapedchar(rpa_parser_t *pa)
        rvm_codegen_addins(co->cg, rvm_asm(RPA_MATCHCHR_NAN, DA, XX, XX, '\\'));
        rvm_codegen_index_addrelocins(co->cg, RVM_RELOC_BRANCH, RPA_COMPILER_CURRENTEXP(co)->endidx, rvm_asm(RVM_BLES, DA, XX, XX, 0));
        rpa_compiler_altexp_begin(co, RPA_MATCH_NONE, 0);
-       rpa_compiler_branch_begin(co, RPA_MATCH_NONE);
+       rpa_compiler_branch_begin(co, RPA_MATCH_NONE, 0);
        rpa_compiler_reference_nan_s(co, "specialchar");
        rvm_codegen_index_addrelocins(co->cg, RVM_RELOC_BRANCH, RPA_COMPILER_CURRENTEXP(co)->endidx, rvm_asm(RVM_BLES, DA, XX, XX, 0));
        rpa_compiler_branch_end(co);
-       rpa_compiler_branch_begin(co, RPA_MATCH_NONE);
+       rpa_compiler_branch_begin(co, RPA_MATCH_NONE, 0);
        rpa_compiler_reference_nan_s(co, "char");
        rvm_codegen_index_addrelocins(co->cg, RVM_RELOC_BRANCH, RPA_COMPILER_CURRENTEXP(co)->endidx, rvm_asm(RVM_BLES, DA, XX, XX, 0));
        rpa_compiler_branch_end(co);
@@ -819,7 +819,7 @@ static void rpa_production_sqstr(rpa_parser_t *pa)
        rvm_codegen_addins(co->cg, rvm_asm(RPA_MATCHCHR_NAN, DA, XX, XX, '\''));
        rvm_codegen_index_addrelocins(co->cg, RVM_RELOC_BRANCH, RPA_COMPILER_CURRENTEXP(co)->endidx, rvm_asm(RVM_BLES, DA, XX, XX, 0));
 
-       rpa_compiler_exp_begin(co, RPA_MATCH_MULTIPLE);
+       rpa_compiler_exp_begin(co, RPA_MATCH_MULTIPLE, 0);
        rvm_codegen_addins(co->cg, rvm_asm(RPA_MATCHCHR_NAN, DA, XX, XX, '\''));
        rvm_codegen_index_addrelocins(co->cg, RVM_RELOC_BRANCH, RPA_COMPILER_CURRENTEXP(co)->endidx, rvm_asm(RVM_BGRE, DA, XX, XX, 0));
        rpa_compiler_reference_nan_s(co, "char");
@@ -842,7 +842,7 @@ static void rpa_production_dqstr(rpa_parser_t *pa)
        rvm_codegen_addins(co->cg, rvm_asm(RPA_MATCHCHR_NAN, DA, XX, XX, '"'));
        rvm_codegen_index_addrelocins(co->cg, RVM_RELOC_BRANCH, RPA_COMPILER_CURRENTEXP(co)->endidx, rvm_asm(RVM_BLES, DA, XX, XX, 0));
 
-       rpa_compiler_exp_begin(co, RPA_MATCH_MULTIPLE);
+       rpa_compiler_exp_begin(co, RPA_MATCH_MULTIPLE, 0);
        rvm_codegen_addins(co->cg, rvm_asm(RPA_MATCHCHR_NAN, DA, XX, XX, '"'));
        rvm_codegen_index_addrelocins(co->cg, RVM_RELOC_BRANCH, RPA_COMPILER_CURRENTEXP(co)->endidx, rvm_asm(RVM_BGRE, DA, XX, XX, 0));
        rpa_compiler_reference_nan_s(co, "char");
@@ -868,17 +868,17 @@ static void rpa_production_alphacls(rpa_parser_t *pa)
 
        rpa_compiler_altexp_begin(co, RPA_MATCH_MULTIPLE, 0);
 
-       rpa_compiler_branch_begin(co, RPA_MATCH_NONE);
+       rpa_compiler_branch_begin(co, RPA_MATCH_NONE, 0);
        rpa_compiler_reference_nan_s(co, "charrng");
        rvm_codegen_index_addrelocins(co->cg, RVM_RELOC_BRANCH, RPA_COMPILER_CURRENTEXP(co)->endidx, rvm_asm(RVM_BLES, DA, XX, XX, 0));
        rpa_compiler_branch_end(co);
 
-       rpa_compiler_branch_begin(co, RPA_MATCH_NONE);
+       rpa_compiler_branch_begin(co, RPA_MATCH_NONE, 0);
        rpa_compiler_reference_nan_s(co, "clschar");
        rvm_codegen_index_addrelocins(co->cg, RVM_RELOC_BRANCH, RPA_COMPILER_CURRENTEXP(co)->endidx, rvm_asm(RVM_BLES, DA, XX, XX, 0));
        rpa_compiler_branch_end(co);
 
-       rpa_compiler_branch_begin(co, RPA_MATCH_NONE);
+       rpa_compiler_branch_begin(co, RPA_MATCH_NONE, 0);
        rpa_compiler_reference_nan_s(co, "escapedchar");
        rvm_codegen_index_addrelocins(co->cg, RVM_RELOC_BRANCH, RPA_COMPILER_CURRENTEXP(co)->endidx, rvm_asm(RVM_BLES, DA, XX, XX, 0));
        rpa_compiler_branch_end(co);
@@ -918,13 +918,13 @@ static void rpa_production_numcls(rpa_parser_t *pa)
 
        rpa_compiler_altexp_begin(co, RPA_MATCH_MULTIPLE, 0);
 
-       rpa_compiler_branch_begin(co, RPA_MATCH_NONE);
+       rpa_compiler_branch_begin(co, RPA_MATCH_NONE, 0);
        rpa_compiler_reference_nan_s(co, "numrng");
        rvm_codegen_index_addrelocins(co->cg, RVM_RELOC_BRANCH, RPA_COMPILER_CURRENTEXP(co)->endidx, rvm_asm(RVM_BLEQ, DA, XX, XX, 0));
        rpa_compiler_branch_end(co);
 
 
-       rpa_compiler_branch_begin(co, RPA_MATCH_NONE);
+       rpa_compiler_branch_begin(co, RPA_MATCH_NONE, 0);
        rpa_compiler_reference_nan_s(co, "clsnum");
        rvm_codegen_index_addrelocins(co->cg, RVM_RELOC_BRANCH, RPA_COMPILER_CURRENTEXP(co)->endidx, rvm_asm(RVM_BLES, DA, XX, XX, 0));
        rpa_compiler_branch_end(co);
@@ -948,12 +948,12 @@ static void rpa_production_cls(rpa_parser_t *pa)
 
        rpa_compiler_altexp_begin(co, RPA_MATCH_NONE, 0);
 
-       rpa_compiler_branch_begin(co, RPA_MATCH_NONE);
+       rpa_compiler_branch_begin(co, RPA_MATCH_NONE, 0);
        rpa_compiler_reference_nan_s(co, "numcls");
        rvm_codegen_index_addrelocins(co->cg, RVM_RELOC_BRANCH, RPA_COMPILER_CURRENTEXP(co)->endidx, rvm_asm(RVM_BLES, DA, XX, XX, 0));
        rpa_compiler_branch_end(co);
 
-       rpa_compiler_branch_begin(co, RPA_MATCH_NONE);
+       rpa_compiler_branch_begin(co, RPA_MATCH_NONE, 0);
        rpa_compiler_reference_nan_s(co, "alphacls");
        rvm_codegen_index_addrelocins(co->cg, RVM_RELOC_BRANCH, RPA_COMPILER_CURRENTEXP(co)->endidx, rvm_asm(RVM_BLES, DA, XX, XX, 0));
        rpa_compiler_branch_end(co);
@@ -1013,7 +1013,7 @@ static void rpa_production_num(rpa_parser_t *pa)
 
        rpa_compiler_altexp_begin(co, RPA_MATCH_NONE, 0);
 
-       rpa_compiler_branch_begin(co, RPA_MATCH_NONE);
+       rpa_compiler_branch_begin(co, RPA_MATCH_NONE, 0);
        rvm_codegen_addins(co->cg, rvm_asm(RPA_MATCHCHR_OPT, DA, XX, XX, '0'));
        rpa_compiler_class_begin(co, RPA_MATCH_NONE);
        rvm_codegen_addins(co->cg, rvm_asm(RPA_MATCHCHR_NAN, DA, XX, XX, 'x'));
@@ -1027,7 +1027,7 @@ static void rpa_production_num(rpa_parser_t *pa)
        rvm_codegen_index_addrelocins(co->cg, RVM_RELOC_BRANCH, RPA_COMPILER_CURRENTEXP(co)->endidx, rvm_asm(RVM_BLES, DA, XX, XX, 0));
        rpa_compiler_branch_end(co);
 
-       rpa_compiler_branch_begin(co, RPA_MATCH_NONE);
+       rpa_compiler_branch_begin(co, RPA_MATCH_NONE, 0);
        rpa_compiler_reference_nan_s(co, "dec");
        rvm_codegen_index_addrelocins(co->cg, RVM_RELOC_BRANCH, RPA_COMPILER_CURRENTEXP(co)->endidx, rvm_asm(RVM_BLES, DA, XX, XX, 0));
        rpa_compiler_branch_end(co);
@@ -1092,32 +1092,32 @@ static void rpa_production_terminal(rpa_parser_t *pa)
 
        rpa_compiler_altexp_begin(co, RPA_MATCH_NONE, 0);
 
-       rpa_compiler_branch_begin(co, RPA_MATCH_NONE);
+       rpa_compiler_branch_begin(co, RPA_MATCH_NONE, 0);
        rpa_compiler_reference_nan_s(co, "cls");
        rvm_codegen_index_addrelocins(co->cg, RVM_RELOC_BRANCH, RPA_COMPILER_CURRENTEXP(co)->endidx, rvm_asm(RVM_BLES, DA, XX, XX, 0));
        rpa_compiler_branch_end(co);
 
-       rpa_compiler_branch_begin(co, RPA_MATCH_NONE);
+       rpa_compiler_branch_begin(co, RPA_MATCH_NONE, 0);
        rpa_compiler_reference_nan_s(co, "sqstr");
        rvm_codegen_index_addrelocins(co->cg, RVM_RELOC_BRANCH, RPA_COMPILER_CURRENTEXP(co)->endidx, rvm_asm(RVM_BLES, DA, XX, XX, 0));
        rpa_compiler_branch_end(co);
 
-       rpa_compiler_branch_begin(co, RPA_MATCH_NONE);
+       rpa_compiler_branch_begin(co, RPA_MATCH_NONE, 0);
        rpa_compiler_reference_nan_s(co, "dqstr");
        rvm_codegen_index_addrelocins(co->cg, RVM_RELOC_BRANCH, RPA_COMPILER_CURRENTEXP(co)->endidx, rvm_asm(RVM_BLES, DA, XX, XX, 0));
        rpa_compiler_branch_end(co);
 
-       rpa_compiler_branch_begin(co, RPA_MATCH_NONE);
+       rpa_compiler_branch_begin(co, RPA_MATCH_NONE, 0);
        rpa_compiler_reference_nan_s(co, "cref");
        rvm_codegen_index_addrelocins(co->cg, RVM_RELOC_BRANCH, RPA_COMPILER_CURRENTEXP(co)->endidx, rvm_asm(RVM_BLES, DA, XX, XX, 0));
        rpa_compiler_branch_end(co);
 
-       rpa_compiler_branch_begin(co, RPA_MATCH_NONE);
+       rpa_compiler_branch_begin(co, RPA_MATCH_NONE, 0);
        rpa_compiler_reference_nan_s(co, "aref");
        rvm_codegen_index_addrelocins(co->cg, RVM_RELOC_BRANCH, RPA_COMPILER_CURRENTEXP(co)->endidx, rvm_asm(RVM_BLES, DA, XX, XX, 0));
        rpa_compiler_branch_end(co);
 
-       rpa_compiler_branch_begin(co, RPA_MATCH_NONE);
+       rpa_compiler_branch_begin(co, RPA_MATCH_NONE, 0);
        rpa_compiler_reference_nan_s(co, "bracketexp");
        rvm_codegen_index_addrelocins(co->cg, RVM_RELOC_BRANCH, RPA_COMPILER_CURRENTEXP(co)->endidx, rvm_asm(RVM_BLES, DA, XX, XX, 0));
        rpa_compiler_branch_end(co);
@@ -1138,17 +1138,17 @@ static void rpa_production_qchar(rpa_parser_t *pa)
 
        rpa_compiler_altexp_begin(co, RPA_MATCH_NONE, 0);
 
-       rpa_compiler_branch_begin(co, RPA_MATCH_NONE);
+       rpa_compiler_branch_begin(co, RPA_MATCH_NONE, 0);
        rpa_compiler_reference_nan_s(co, "escapedchar");
        rvm_codegen_index_addrelocins(co->cg, RVM_RELOC_BRANCH, RPA_COMPILER_CURRENTEXP(co)->endidx, rvm_asm(RVM_BLES, DA, XX, XX, 0));
        rpa_compiler_branch_end(co);
 
-       rpa_compiler_branch_begin(co, RPA_MATCH_NONE);
+       rpa_compiler_branch_begin(co, RPA_MATCH_NONE, 0);
        rpa_compiler_reference_nan_s(co, "regexchar");
        rvm_codegen_index_addrelocins(co->cg, RVM_RELOC_BRANCH, RPA_COMPILER_CURRENTEXP(co)->endidx, rvm_asm(RVM_BLES, DA, XX, XX, 0));
        rpa_compiler_branch_end(co);
 
-       rpa_compiler_branch_begin(co, RPA_MATCH_NONE);
+       rpa_compiler_branch_begin(co, RPA_MATCH_NONE, 0);
        rpa_compiler_reference_nan_s(co, "specialchar");
        rvm_codegen_index_addrelocins(co->cg, RVM_RELOC_BRANCH, RPA_COMPILER_CURRENTEXP(co)->endidx, rvm_asm(RVM_BLES, DA, XX, XX, 0));
        rpa_compiler_branch_end(co);
@@ -1169,7 +1169,7 @@ static void rpa_production_qexp(rpa_parser_t *pa)
 
        rpa_compiler_altexp_begin(co, RPA_MATCH_NONE, 0);
 
-       rpa_compiler_branch_begin(co, RPA_MATCH_NONE);
+       rpa_compiler_branch_begin(co, RPA_MATCH_NONE, 0);
        rpa_compiler_reference_nan_s(co, "terminal");
        rvm_codegen_index_addrelocins(co->cg, RVM_RELOC_BRANCH, RPA_COMPILER_CURRENTEXP(co)->endidx, rvm_asm(RVM_BLES, DA, XX, XX, 0));
        rpa_compiler_reference_opt_s(co, "space");
@@ -1178,7 +1178,7 @@ static void rpa_production_qexp(rpa_parser_t *pa)
        rpa_compiler_reference_opt_s(co, "space");
        rpa_compiler_branch_end(co);
 
-       rpa_compiler_branch_begin(co, RPA_MATCH_NONE);
+       rpa_compiler_branch_begin(co, RPA_MATCH_NONE, 0);
        rpa_compiler_reference_nan_s(co, "qchar");
        rvm_codegen_index_addrelocins(co->cg, RVM_RELOC_BRANCH, RPA_COMPILER_CURRENTEXP(co)->endidx, rvm_asm(RVM_BLES, DA, XX, XX, 0));
        rpa_compiler_branch_end(co);
@@ -1210,11 +1210,11 @@ static void rpa_production_anchorexp(rpa_parser_t *pa)
 
        rpa_compiler_rule_begin_s(co, "anchorexp", 0);
        rpa_compiler_altexp_begin(co, RPA_MATCH_NONE, 0);
-       rpa_compiler_branch_begin(co, RPA_MATCH_NONE);
+       rpa_compiler_branch_begin(co, RPA_MATCH_NONE, 0);
        rpa_compiler_reference_nan_s(co, "anchorop");
        rvm_codegen_index_addrelocins(co->cg, RVM_RELOC_BRANCH, RPA_COMPILER_CURRENTEXP(co)->endidx, rvm_asm(RVM_BLES, DA, XX, XX, 0));
        rpa_compiler_branch_end(co);
-       rpa_compiler_branch_begin(co, RPA_MATCH_NONE);
+       rpa_compiler_branch_begin(co, RPA_MATCH_NONE, 0);
        rpa_compiler_reference_nan_s(co, "qexp");
        rvm_codegen_index_addrelocins(co->cg, RVM_RELOC_BRANCH, RPA_COMPILER_CURRENTEXP(co)->endidx, rvm_asm(RVM_BLES, DA, XX, XX, 0));
        rpa_compiler_branch_end(co);
@@ -1248,11 +1248,11 @@ static void rpa_production_notexp(rpa_parser_t *pa)
 
        rpa_compiler_rule_begin_s(co, "notexp", 0);
        rpa_compiler_altexp_begin(co, RPA_MATCH_NONE, 0);
-       rpa_compiler_branch_begin(co, RPA_MATCH_NONE);
+       rpa_compiler_branch_begin(co, RPA_MATCH_NONE, 0);
        rpa_compiler_reference_nan_s(co, "notop");
        rvm_codegen_index_addrelocins(co->cg, RVM_RELOC_BRANCH, RPA_COMPILER_CURRENTEXP(co)->endidx, rvm_asm(RVM_BLES, DA, XX, XX, 0));
        rpa_compiler_branch_end(co);
-       rpa_compiler_branch_begin(co, RPA_MATCH_NONE);
+       rpa_compiler_branch_begin(co, RPA_MATCH_NONE, 0);
 //     rpa_compiler_reference_nan_s(co, "qexp");
        rpa_compiler_reference_nan_s(co, "anchorexp");
        rvm_codegen_index_addrelocins(co->cg, RVM_RELOC_BRANCH, RPA_COMPILER_CURRENTEXP(co)->endidx, rvm_asm(RVM_BLES, DA, XX, XX, 0));
@@ -1322,7 +1322,7 @@ static void rpa_production_norop(rpa_parser_t *pa)
        rpa_compiler_rulepref_set_s(co, "norop", 0, RPA_PRODUCTION_NOROP, RPA_RFLAG_EMITRECORD);
        rpa_compiler_rule_begin_s(co, "norop", 0);
 
-       rpa_compiler_exp_begin(co, RPA_MATCH_MULTIPLE);
+       rpa_compiler_exp_begin(co, RPA_MATCH_MULTIPLE, 0);
        rpa_compiler_reference_opt_s(co, "space");
        rvm_codegen_addins(co->cg, rvm_asm(RPA_MATCHCHR_NAN, DA, XX, XX, '-'));
        rvm_codegen_index_addrelocins(co->cg, RVM_RELOC_BRANCH, RPA_COMPILER_CURRENTEXP(co)->endidx, rvm_asm(RVM_BLES, DA, XX, XX, 0));
@@ -1374,12 +1374,12 @@ static void rpa_production_minexp(rpa_parser_t *pa)
        rpa_compiler_rule_begin_s(co, "minexp", 0);
        rpa_compiler_altexp_begin(co, RPA_MATCH_NONE, 0);
 
-       rpa_compiler_branch_begin(co, RPA_MATCH_NONE);
+       rpa_compiler_branch_begin(co, RPA_MATCH_NONE, 0);
        rpa_compiler_reference_nan_s(co, "minop");
        rvm_codegen_index_addrelocins(co->cg, RVM_RELOC_BRANCH, RPA_COMPILER_CURRENTEXP(co)->endidx, rvm_asm(RVM_BLES, DA, XX, XX, 0));
        rpa_compiler_branch_end(co);
 
-       rpa_compiler_branch_begin(co, RPA_MATCH_NONE);
+       rpa_compiler_branch_begin(co, RPA_MATCH_NONE, 0);
        rpa_compiler_reference_nan_s(co, "exp");
        rvm_codegen_index_addrelocins(co->cg, RVM_RELOC_BRANCH, RPA_COMPILER_CURRENTEXP(co)->endidx, rvm_asm(RVM_BLES, DA, XX, XX, 0));
        rpa_compiler_branch_end(co);
@@ -1413,7 +1413,7 @@ static void rpa_production_orop(rpa_parser_t *pa)
        rpa_compiler_reference_nan_s(co, "altbranch");
        rvm_codegen_index_addrelocins(co->cg, RVM_RELOC_BRANCH, RPA_COMPILER_CURRENTEXP(co)->endidx, rvm_asm(RVM_BLES, DA, XX, XX, 0));
 
-       rpa_compiler_exp_begin(co, RPA_MATCH_MULTIPLE);
+       rpa_compiler_exp_begin(co, RPA_MATCH_MULTIPLE, 0);
        rpa_compiler_reference_opt_s(co, "space");
        rvm_codegen_addins(co->cg, rvm_asm(RPA_MATCHCHR_OPT, DA, XX, XX, '\r'));
        rvm_codegen_addins(co->cg, rvm_asm(RPA_MATCHCHR_OPT, DA, XX, XX, '\n'));
@@ -1441,12 +1441,12 @@ static void rpa_production_orexp(rpa_parser_t *pa)
        rpa_compiler_rule_begin_s(co, "orexp", 0);
        rpa_compiler_altexp_begin(co, RPA_MATCH_NONE, 0);
 
-       rpa_compiler_branch_begin(co, RPA_MATCH_NONE);
+       rpa_compiler_branch_begin(co, RPA_MATCH_NONE, 0);
        rpa_compiler_reference_nan_s(co, "orop");
        rvm_codegen_index_addrelocins(co->cg, RVM_RELOC_BRANCH, RPA_COMPILER_CURRENTEXP(co)->endidx, rvm_asm(RVM_BLES, DA, XX, XX, 0));
        rpa_compiler_branch_end(co);
 
-       rpa_compiler_branch_begin(co, RPA_MATCH_NONE);
+       rpa_compiler_branch_begin(co, RPA_MATCH_NONE, 0);
        rpa_compiler_reference_nan_s(co, "minexp");
        rvm_codegen_index_addrelocins(co->cg, RVM_RELOC_BRANCH, RPA_COMPILER_CURRENTEXP(co)->endidx, rvm_asm(RVM_BLES, DA, XX, XX, 0));
        rpa_compiler_branch_end(co);
index 5b26d25..df418be 100644 (file)
@@ -178,24 +178,67 @@ static long rpa_stat_exec_rid(rpastat_t *stat, rparule_t rid, unsigned int encod
 long rpa_stat_scan(rpastat_t *stat, rparule_t rid, unsigned int encoding, const char *input, const char *start, const char *end, const char **where)
 {
        long ret;
+       long topsiz = 0;
+       rpainput_t *ptp;
+       long offset;
+       rvm_asmins_t *exec;
+
+       exec = rpa_dbex_executable(stat->dbex);
+       if (!exec) {
+               RPA_STAT_SETERROR_CODE(stat, RPA_E_EXECUTION);
+               return -1;
+       }
+       offset = rpa_dbex_executableoffset(stat->dbex, rid);
+       if (offset < 0) {
+               RPA_STAT_SETERROR_CODE(stat, RPA_E_EXECUTION);
+               return -1;
+       }
 
        while (input < end) {
-               ret = rpa_stat_exec_rid(stat, rid, encoding, input, start, end, NULL);
-               if (ret < 0) {
+               topsiz = rpa_stat_exec(stat, exec, offset, encoding, input, start, end, NULL);
+               if (topsiz < 0) {
                        if (rpa_stat_lasterror(stat) != RPA_E_RULEABORT) {
                                return -1;
                        }
                }
-               if (ret > 0) {
+               if (topsiz > 0) {
+                       ptp = &stat->instack[topsiz];
+                       ret = (ptp->input - input);
                        *where = input;
                        return ret;
                }
-               input += 1;
+               if (topsiz == 0) {
+                       ptp = &stat->instack[0];
+                       input += stat->ip.input - ptp->input;
+               } else {
+                       input += 1;
+               }
        }
-       return ret;
+       return 0;
 }
 
 
+//long rpa_stat_scan(rpastat_t *stat, rparule_t rid, unsigned int encoding, const char *input, const char *start, const char *end, const char **where)
+//{
+//     long ret;
+//
+//     while (input < end) {
+//             ret = rpa_stat_exec_rid(stat, rid, encoding, input, start, end, NULL);
+//             if (ret < 0) {
+//                     if (rpa_stat_lasterror(stat) != RPA_E_RULEABORT) {
+//                             return -1;
+//                     }
+//             }
+//             if (ret > 0) {
+//                     *where = input;
+//                     return ret;
+//             }
+//             input += 1;
+//     }
+//     return ret;
+//}
+
+
 long rpa_stat_match(rpastat_t *stat, rparule_t rid, unsigned int encoding, const char *input, const char *start, const char *end)
 {
        return rpa_stat_exec_rid(stat, rid, encoding, input, start, end, NULL);
index 0c37162..498cc1b 100644 (file)
@@ -48,6 +48,21 @@ static void rpavm_swi_matchbitmap(rvmcpu_t *cpu, rvm_asmins_t *ins)
 }
 
 
+static void rpavm_swi_exitonbitmap(rvmcpu_t *cpu, rvm_asmins_t *ins)
+{
+       rpastat_t *stat = (rpastat_t *)cpu->userdata1;
+       rpabitmap_t bitmap = RVM_CPUREG_GETU(cpu, ins->op1);
+
+       if (rpa_stat_matchbitmap(stat, RVM_CPUREG_GETL(cpu, R_TOP), bitmap)) {
+               cpu->status = 0;
+       } else {
+               cpu->status = RVM_STATUS_N;
+               RVM_CPUREG_SETU(cpu, R0, (rword)-1);
+               cpu->abort = 1;
+       }
+}
+
+
 static void rpavm_swi_verifybitmap(rvmcpu_t *cpu, rvm_asmins_t *ins)
 {
        rpastat_t *stat = (rpastat_t *)cpu->userdata1;
@@ -456,6 +471,7 @@ static rvm_switable_t rpavm_swi_table[] = {
                {"RPA_ABORT", rpavm_swi_abort},
                {"RPA_PRNINFO", rpavm_swi_prninfo},
                {"RPA_MATCHBITMAP", rpavm_swi_matchbitmap},
+               {"RPA_EXITONBITMAP", rpavm_swi_exitonbitmap},
                {"RPA_VERIFYBITMAP", rpavm_swi_verifybitmap},
                {NULL, NULL},
 };
index ec824cb..e272d9f 100644 (file)
@@ -74,7 +74,8 @@ extern "C" {
 #define RPA_ABORT                      RVM_OPSWI(RVM_SWI_ID(RPAVM_SWI_TABLEID, 19))
 #define RPA_PRNINFO                    RVM_OPSWI(RVM_SWI_ID(RPAVM_SWI_TABLEID, 20))
 #define RPA_MATCHBITMAP                RVM_OPSWI(RVM_SWI_ID(RPAVM_SWI_TABLEID, 21))
-#define RPA_VERIFYBITMAP       RVM_OPSWI(RVM_SWI_ID(RPAVM_SWI_TABLEID, 22))
+#define RPA_EXITONBITMAP       RVM_OPSWI(RVM_SWI_ID(RPAVM_SWI_TABLEID, 22))
+#define RPA_VERIFYBITMAP       RVM_OPSWI(RVM_SWI_ID(RPAVM_SWI_TABLEID, 23))
 
 
 
index acc016f..3fa8587 100644 (file)
@@ -17,7 +17,7 @@ void code_rpa_matchaltexp(rpa_compiler_t *co, rpastat_t *stat)
 {
        rvm_codegen_addins(co->cg, rvm_asm(RVM_MOV, R_TOP, DA, XX, 0));
        rpa_compiler_altexp_begin(co, RPA_MATCH_NONE, 0);
-       rpa_compiler_branch_begin(co, RPA_MATCH_NONE);
+       rpa_compiler_branch_begin(co, RPA_MATCH_NONE, 0);
        rvm_codegen_addins(co->cg, rvm_asm(RPA_MATCHCHR_NAN, DA, XX, XX, 'd'));
        rvm_codegen_index_addrelocins(co->cg, RVM_RELOC_BRANCH, RPA_COMPILER_CURRENTEXP(co)->endidx, rvm_asm(RVM_BLES, DA, XX, XX, 0));
        rvm_codegen_addins(co->cg, rvm_asm(RPA_MATCHCHR_NAN, DA, XX, XX, 'e'));
@@ -25,7 +25,7 @@ void code_rpa_matchaltexp(rpa_compiler_t *co, rpastat_t *stat)
        rvm_codegen_addins(co->cg, rvm_asm(RPA_MATCHCHR_NAN, DA, XX, XX, 'f'));
        rvm_codegen_index_addrelocins(co->cg, RVM_RELOC_BRANCH, RPA_COMPILER_CURRENTEXP(co)->endidx, rvm_asm(RVM_BLES, DA, XX, XX, 0));
        rpa_compiler_branch_end(co);
-       rpa_compiler_branch_begin(co, RPA_MATCH_NONE);
+       rpa_compiler_branch_begin(co, RPA_MATCH_NONE, 0);
        rvm_codegen_addins(co->cg, rvm_asm(RPA_MATCHCHR_NAN, DA, XX, XX, 'a'));
        rvm_codegen_index_addrelocins(co->cg, RVM_RELOC_BRANCH, RPA_COMPILER_CURRENTEXP(co)->endidx, rvm_asm(RVM_BLES, DA, XX, XX, 0));
        rvm_codegen_addins(co->cg, rvm_asm(RPA_MATCHCHR_NAN, DA, XX, XX, 'b'));
@@ -39,7 +39,7 @@ void code_rpa_matchaltexp(rpa_compiler_t *co, rpastat_t *stat)
 
        rvm_codegen_addins(co->cg, rvm_asm(RVM_MOV, R_TOP, DA, XX, 0));
        rpa_compiler_altexp_begin(co, RPA_MATCH_MULTIPLE, 0);
-       rpa_compiler_branch_begin(co, RPA_MATCH_NONE);
+       rpa_compiler_branch_begin(co, RPA_MATCH_NONE, 0);
        rvm_codegen_addins(co->cg, rvm_asm(RPA_MATCHCHR_NAN, DA, XX, XX, 'g'));
        rvm_codegen_index_addrelocins(co->cg, RVM_RELOC_BRANCH, RPA_COMPILER_CURRENTEXP(co)->endidx, rvm_asm(RVM_BLES, DA, XX, XX, 0));
        rvm_codegen_addins(co->cg, rvm_asm(RPA_MATCHCHR_NAN, DA, XX, XX, 'h'));
@@ -47,7 +47,7 @@ void code_rpa_matchaltexp(rpa_compiler_t *co, rpastat_t *stat)
        rvm_codegen_addins(co->cg, rvm_asm(RPA_MATCHCHR_NAN, DA, XX, XX, 'i'));
        rvm_codegen_index_addrelocins(co->cg, RVM_RELOC_BRANCH, RPA_COMPILER_CURRENTEXP(co)->endidx, rvm_asm(RVM_BLES, DA, XX, XX, 0));
        rpa_compiler_branch_end(co);
-       rpa_compiler_branch_begin(co, RPA_MATCH_NONE);
+       rpa_compiler_branch_begin(co, RPA_MATCH_NONE, 0);
        rvm_codegen_addins(co->cg, rvm_asm(RPA_MATCHCHR_NAN, DA, XX, XX, 'd'));
        rvm_codegen_index_addrelocins(co->cg, RVM_RELOC_BRANCH, RPA_COMPILER_CURRENTEXP(co)->endidx, rvm_asm(RVM_BLES, DA, XX, XX, 0));
        rvm_codegen_addins(co->cg, rvm_asm(RPA_MATCHCHR_NAN, DA, XX, XX, 'e'));
@@ -55,7 +55,7 @@ void code_rpa_matchaltexp(rpa_compiler_t *co, rpastat_t *stat)
        rvm_codegen_addins(co->cg, rvm_asm(RPA_MATCHCHR_NAN, DA, XX, XX, 'f'));
        rvm_codegen_index_addrelocins(co->cg, RVM_RELOC_BRANCH, RPA_COMPILER_CURRENTEXP(co)->endidx, rvm_asm(RVM_BLES, DA, XX, XX, 0));
        rpa_compiler_branch_end(co);
-       rpa_compiler_branch_begin(co, RPA_MATCH_NONE);
+       rpa_compiler_branch_begin(co, RPA_MATCH_NONE, 0);
        rvm_codegen_addins(co->cg, rvm_asm(RPA_MATCHCHR_NAN, DA, XX, XX, 'a'));
        rvm_codegen_index_addrelocins(co->cg, RVM_RELOC_BRANCH, RPA_COMPILER_CURRENTEXP(co)->endidx, rvm_asm(RVM_BLES, DA, XX, XX, 0));
        rvm_codegen_addins(co->cg, rvm_asm(RPA_MATCHCHR_NAN, DA, XX, XX, 'b'));
index 967e1d4..ad402b2 100644 (file)
@@ -16,7 +16,7 @@
 void code_rpa_matchexp(rpa_compiler_t *co, rpastat_t *stat)
 {
        rvm_codegen_addins(co->cg, rvm_asm(RVM_MOV, R_TOP, DA, XX, 0));
-       rpa_compiler_exp_begin(co, RPA_MATCH_NONE);
+       rpa_compiler_exp_begin(co, RPA_MATCH_NONE, 0);
        rvm_codegen_addins(co->cg, rvm_asm(RPA_MATCHCHR_NAN, DA, XX, XX, 'a'));
        rvm_codegen_index_addrelocins(co->cg, RVM_RELOC_BRANCH, RPA_COMPILER_CURRENTEXP(co)->endidx, rvm_asm(RVM_BLES, DA, XX, XX, 0));
        rvm_codegen_addins(co->cg, rvm_asm(RPA_MATCHCHR_NAN, DA, XX, XX, 'b'));
@@ -34,7 +34,7 @@ void code_rpa_matchexp(rpa_compiler_t *co, rpastat_t *stat)
        VMTEST_STATUS(co->cg, 0, "RPA_MATCH_NONE STATUS");
 
        rvm_codegen_addins(co->cg, rvm_asm(RVM_MOV, R_TOP, DA, XX, 0));
-       rpa_compiler_exp_begin(co, RPA_MATCH_NONE);
+       rpa_compiler_exp_begin(co, RPA_MATCH_NONE, 0);
        rvm_codegen_addins(co->cg, rvm_asm(RPA_MATCHCHR_NAN, DA, XX, XX, 'x'));
        rvm_codegen_index_addrelocins(co->cg, RVM_RELOC_BRANCH, RPA_COMPILER_CURRENTEXP(co)->endidx, rvm_asm(RVM_BLES, DA, XX, XX, 0));
        rvm_codegen_addins(co->cg, rvm_asm(RPA_MATCHCHR_NAN, DA, XX, XX, 'y'));
@@ -47,7 +47,7 @@ void code_rpa_matchexp(rpa_compiler_t *co, rpastat_t *stat)
 
 
        rvm_codegen_addins(co->cg, rvm_asm(RVM_MOV, R_TOP, DA, XX, 0));
-       rpa_compiler_exp_begin(co, RPA_MATCH_OPTIONAL);
+       rpa_compiler_exp_begin(co, RPA_MATCH_OPTIONAL, 0);
        rpa_compiler_class_begin(co, RPA_MATCH_NONE);
        rvm_codegen_addins(co->cg, rvm_asm(RPA_MATCHCHR_NAN, DA, XX, XX, 'a'));
        rvm_codegen_index_addrelocins(co->cg, RVM_RELOC_BRANCH, RPA_COMPILER_CURRENTEXP(co)->endidx, rvm_asm(RVM_BGRE, DA, XX, XX, 0));
@@ -66,7 +66,7 @@ void code_rpa_matchexp(rpa_compiler_t *co, rpastat_t *stat)
 
 
        rvm_codegen_addins(co->cg, rvm_asm(RVM_MOV, R_TOP, DA, XX, 0));
-       rpa_compiler_exp_begin(co, RPA_MATCH_OPTIONAL);
+       rpa_compiler_exp_begin(co, RPA_MATCH_OPTIONAL, 0);
        rvm_codegen_addins(co->cg, rvm_asm(RPA_MATCHCHR_NAN, DA, XX, XX, 'x'));
        rvm_codegen_index_addrelocins(co->cg, RVM_RELOC_BRANCH, RPA_COMPILER_CURRENTEXP(co)->endidx, rvm_asm(RVM_BLES, DA, XX, XX, 0));
        rvm_codegen_addins(co->cg, rvm_asm(RPA_MATCHCHR_NAN, DA, XX, XX, 'y'));
@@ -79,7 +79,7 @@ void code_rpa_matchexp(rpa_compiler_t *co, rpastat_t *stat)
 
 
        rvm_codegen_addins(co->cg, rvm_asm(RVM_MOV, R_TOP, DA, XX, 0));
-       rpa_compiler_exp_begin(co, RPA_MATCH_MULTIOPT);
+       rpa_compiler_exp_begin(co, RPA_MATCH_MULTIOPT, 0);
        rvm_codegen_addins(co->cg, rvm_asm(RPA_MATCHCHR_NAN, DA, XX, XX, 'a'));
        rvm_codegen_index_addrelocins(co->cg, RVM_RELOC_BRANCH, RPA_COMPILER_CURRENTEXP(co)->endidx, rvm_asm(RVM_BLES, DA, XX, XX, 0));
        rpa_compiler_class_begin(co, RPA_MATCH_NONE);
@@ -98,7 +98,7 @@ void code_rpa_matchexp(rpa_compiler_t *co, rpastat_t *stat)
 
 
        rvm_codegen_addins(co->cg, rvm_asm(RVM_MOV, R_TOP, DA, XX, 0));
-       rpa_compiler_exp_begin(co, RPA_MATCH_MULTIOPT);
+       rpa_compiler_exp_begin(co, RPA_MATCH_MULTIOPT, 0);
        rvm_codegen_addins(co->cg, rvm_asm(RPA_MATCHCHR_NAN, DA, XX, XX, 'x'));
        rvm_codegen_index_addrelocins(co->cg, RVM_RELOC_BRANCH, RPA_COMPILER_CURRENTEXP(co)->endidx, rvm_asm(RVM_BLES, DA, XX, XX, 0));
        rvm_codegen_addins(co->cg, rvm_asm(RPA_MATCHCHR_NAN, DA, XX, XX, 'y'));
@@ -111,7 +111,7 @@ void code_rpa_matchexp(rpa_compiler_t *co, rpastat_t *stat)
 
 
        rvm_codegen_addins(co->cg, rvm_asm(RVM_MOV, R_TOP, DA, XX, 0));
-       rpa_compiler_exp_begin(co, RPA_MATCH_MULTIPLE);
+       rpa_compiler_exp_begin(co, RPA_MATCH_MULTIPLE, 0);
        rvm_codegen_addins(co->cg, rvm_asm(RPA_MATCHCHR_NAN, DA, XX, XX, 'a'));
        rvm_codegen_index_addrelocins(co->cg, RVM_RELOC_BRANCH, RPA_COMPILER_CURRENTEXP(co)->endidx, rvm_asm(RVM_BLES, DA, XX, XX, 0));
        rvm_codegen_addins(co->cg, rvm_asm(RPA_MATCHCHR_NAN, DA, XX, XX, 'b'));
@@ -124,7 +124,7 @@ void code_rpa_matchexp(rpa_compiler_t *co, rpastat_t *stat)
 
 
        rvm_codegen_addins(co->cg, rvm_asm(RVM_MOV, R_TOP, DA, XX, 0));
-       rpa_compiler_exp_begin(co, RPA_MATCH_MULTIPLE);
+       rpa_compiler_exp_begin(co, RPA_MATCH_MULTIPLE, 0);
        rvm_codegen_addins(co->cg, rvm_asm(RPA_MATCHCHR_NAN, DA, XX, XX, 'x'));
        rvm_codegen_index_addrelocins(co->cg, RVM_RELOC_BRANCH, RPA_COMPILER_CURRENTEXP(co)->endidx, rvm_asm(RVM_BLES, DA, XX, XX, 0));
        rvm_codegen_addins(co->cg, rvm_asm(RPA_MATCHCHR_NAN, DA, XX, XX, 'y'));
index abe4747..532c309 100644 (file)
@@ -16,8 +16,8 @@
 void code_rpa_matchminusexp(rpa_compiler_t *co, rpastat_t *stat)
 {
        rvm_codegen_addins(co->cg, rvm_asm(RVM_MOV, R_TOP, DA, XX, 0));
-       rpa_compiler_exp_begin(co, RPA_MATCH_NONE);
-       rpa_compiler_branch_begin(co, RPA_MATCH_NONE);
+       rpa_compiler_exp_begin(co, RPA_MATCH_NONE, 0);
+       rpa_compiler_branch_begin(co, RPA_MATCH_NONE, 0);
        rvm_codegen_addins(co->cg, rvm_asm(RPA_MATCHCHR_NAN, DA, XX, XX, 'd'));
        rvm_codegen_index_addrelocins(co->cg, RVM_RELOC_BRANCH, RPA_COMPILER_CURRENTEXP(co)->endidx, rvm_asm(RVM_BLES, DA, XX, XX, 0));
        rvm_codegen_addins(co->cg, rvm_asm(RPA_MATCHCHR_NAN, DA, XX, XX, 'e'));
@@ -26,7 +26,7 @@ void code_rpa_matchminusexp(rpa_compiler_t *co, rpastat_t *stat)
        rvm_codegen_index_addrelocins(co->cg, RVM_RELOC_BRANCH, RPA_COMPILER_CURRENTEXP(co)->endidx, rvm_asm(RVM_BLES, DA, XX, XX, 0));
        rpa_compiler_branch_end(co);
 
-       rpa_compiler_branch_begin(co, RPA_MATCH_NONE);
+       rpa_compiler_branch_begin(co, RPA_MATCH_NONE, 0);
        rvm_codegen_addins(co->cg, rvm_asm(RPA_MATCHCHR_NAN, DA, XX, XX, 'x'));
        rvm_codegen_index_addrelocins(co->cg, RVM_RELOC_BRANCH, RPA_COMPILER_CURRENTEXP(co)->endidx, rvm_asm(RVM_BLES, DA, XX, XX, 0));
        rvm_codegen_addins(co->cg, rvm_asm(RPA_MATCHCHR_NAN, DA, XX, XX, 'y'));
@@ -47,8 +47,8 @@ void code_rpa_matchminusexp(rpa_compiler_t *co, rpastat_t *stat)
 
 
        rvm_codegen_addins(co->cg, rvm_asm(RVM_MOV, R_TOP, DA, XX, 0));
-       rpa_compiler_exp_begin(co, RPA_MATCH_MULTIPLE);
-       rpa_compiler_branch_begin(co, RPA_MATCH_NONE);
+       rpa_compiler_exp_begin(co, RPA_MATCH_MULTIPLE, 0);
+       rpa_compiler_branch_begin(co, RPA_MATCH_NONE, 0);
        rvm_codegen_addins(co->cg, rvm_asm(RPA_MATCHCHR_NAN, DA, XX, XX, 'd'));
        rvm_codegen_index_addrelocins(co->cg, RVM_RELOC_BRANCH, RPA_COMPILER_CURRENTEXP(co)->endidx, rvm_asm(RVM_BLES, DA, XX, XX, 0));
        rvm_codegen_addins(co->cg, rvm_asm(RPA_MATCHCHR_NAN, DA, XX, XX, 'e'));
@@ -57,7 +57,7 @@ void code_rpa_matchminusexp(rpa_compiler_t *co, rpastat_t *stat)
        rvm_codegen_index_addrelocins(co->cg, RVM_RELOC_BRANCH, RPA_COMPILER_CURRENTEXP(co)->endidx, rvm_asm(RVM_BLES, DA, XX, XX, 0));
        rpa_compiler_branch_end(co);
 
-       rpa_compiler_branch_begin(co, RPA_MATCH_NONE);
+       rpa_compiler_branch_begin(co, RPA_MATCH_NONE, 0);
        rvm_codegen_addins(co->cg, rvm_asm(RPA_MATCHCHR_NAN, DA, XX, XX, 'x'));
        rvm_codegen_index_addrelocins(co->cg, RVM_RELOC_BRANCH, RPA_COMPILER_CURRENTEXP(co)->endidx, rvm_asm(RVM_BLES, DA, XX, XX, 0));
        rvm_codegen_addins(co->cg, rvm_asm(RPA_MATCHCHR_NAN, DA, XX, XX, 'y'));
index 2f25188..dcf79b2 100644 (file)
@@ -31,7 +31,7 @@ void code_rpa_match_loopnum(rpa_compiler_t *co, rpastat_t *stat)
        rpa_compiler_loop_begin_s(co, "rpa_match_loopnum");
        rpa_compiler_altexp_begin(co, RPA_MATCH_NONE, 0);
 
-       rpa_compiler_branch_begin(co, RPA_MATCH_NONE);
+       rpa_compiler_branch_begin(co, RPA_MATCH_NONE, 0);
        rpa_compiler_reference_nan_s(co, "rpa_match_loopnum");
        rvm_codegen_index_addrelocins(co->cg, RVM_RELOC_BRANCH, RPA_COMPILER_CURRENTEXP(co)->endidx, rvm_asm(RVM_BLES, DA, XX, XX, 0));
 
@@ -64,7 +64,7 @@ void code_rpa_match_mathop(rpa_compiler_t *co, rpastat_t *stat)
 
        rpa_compiler_altexp_begin(co, RPA_MATCH_NONE, 0);
 
-       rpa_compiler_branch_begin(co, RPA_MATCH_NONE);
+       rpa_compiler_branch_begin(co, RPA_MATCH_NONE, 0);
        rpa_compiler_reference_nan_s(co, "rpa_match_num");
        rvm_codegen_index_addrelocins(co->cg, RVM_RELOC_BRANCH, RPA_COMPILER_CURRENTEXP(co)->endidx, rvm_asm(RVM_BLES, DA, XX, XX, 0));
        rvm_codegen_addins(co->cg, rvm_asm(RPA_MATCHCHR_NAN, DA, XX, XX, '*'));
@@ -73,7 +73,7 @@ void code_rpa_match_mathop(rpa_compiler_t *co, rpastat_t *stat)
        rvm_codegen_index_addrelocins(co->cg, RVM_RELOC_BRANCH, RPA_COMPILER_CURRENTEXP(co)->endidx, rvm_asm(RVM_BLES, DA, XX, XX, 0));
        rpa_compiler_branch_end(co);
 
-       rpa_compiler_branch_begin(co, RPA_MATCH_NONE);
+       rpa_compiler_branch_begin(co, RPA_MATCH_NONE, 0);
        rpa_compiler_reference_nan_s(co, "rpa_match_num");
        rvm_codegen_index_addrelocins(co->cg, RVM_RELOC_BRANCH, RPA_COMPILER_CURRENTEXP(co)->endidx, rvm_asm(RVM_BLES, DA, XX, XX, 0));
        rvm_codegen_addins(co->cg, rvm_asm(RPA_MATCHCHR_NAN, DA, XX, XX, '/'));
@@ -82,7 +82,7 @@ void code_rpa_match_mathop(rpa_compiler_t *co, rpastat_t *stat)
        rvm_codegen_index_addrelocins(co->cg, RVM_RELOC_BRANCH, RPA_COMPILER_CURRENTEXP(co)->endidx, rvm_asm(RVM_BLES, DA, XX, XX, 0));
        rpa_compiler_branch_end(co);
 
-       rpa_compiler_branch_begin(co, RPA_MATCH_NONE);
+       rpa_compiler_branch_begin(co, RPA_MATCH_NONE, 0);
        rpa_compiler_reference_nan_s(co, "rpa_match_num");
        rvm_codegen_index_addrelocins(co->cg, RVM_RELOC_BRANCH, RPA_COMPILER_CURRENTEXP(co)->endidx, rvm_asm(RVM_BLES, DA, XX, XX, 0));
        rvm_codegen_addins(co->cg, rvm_asm(RPA_MATCHCHR_NAN, DA, XX, XX, '+'));
@@ -91,7 +91,7 @@ void code_rpa_match_mathop(rpa_compiler_t *co, rpastat_t *stat)
        rvm_codegen_index_addrelocins(co->cg, RVM_RELOC_BRANCH, RPA_COMPILER_CURRENTEXP(co)->endidx, rvm_asm(RVM_BLES, DA, XX, XX, 0));
        rpa_compiler_branch_end(co);
 
-       rpa_compiler_branch_begin(co, RPA_MATCH_NONE);
+       rpa_compiler_branch_begin(co, RPA_MATCH_NONE, 0);
        rpa_compiler_reference_nan_s(co, "rpa_match_num");
        rvm_codegen_index_addrelocins(co->cg, RVM_RELOC_BRANCH, RPA_COMPILER_CURRENTEXP(co)->endidx, rvm_asm(RVM_BLES, DA, XX, XX, 0));
        rvm_codegen_addins(co->cg, rvm_asm(RPA_MATCHCHR_NAN, DA, XX, XX, '-'));
@@ -112,7 +112,7 @@ void code_rpa_matchmnode(rpa_compiler_t *co, rpastat_t *stat)
 {
        rvm_codegen_addins(co->cg, rvm_asm(RVM_MOV, R_TOP, DA, XX, 0));
 
-       rpa_compiler_exp_begin(co, RPA_MATCH_NONE);
+       rpa_compiler_exp_begin(co, RPA_MATCH_NONE, 0);
 
        rpa_compiler_reference_nan_s(co, "rpa_match_mathop");
        rvm_codegen_index_addrelocins(co->cg, RVM_RELOC_BRANCH, RPA_COMPILER_CURRENTEXP(co)->endidx, rvm_asm(RVM_BLES, DA, XX, XX, 0));
index 8b6b482..1277fb7 100644 (file)
@@ -18,7 +18,7 @@ void code_rpa_match_aloop(rpa_compiler_t *co, rpastat_t *stat)
        rpa_compiler_loop_begin_s(co, "rpa_match_aloop");
        rpa_compiler_altexp_begin(co, RPA_MATCH_NONE, 0);
 
-       rpa_compiler_branch_begin(co, RPA_MATCH_NONE);
+       rpa_compiler_branch_begin(co, RPA_MATCH_NONE, 0);
        rpa_compiler_reference_nan_s(co, "rpa_match_aloop");
        rvm_codegen_index_addrelocins(co->cg, RVM_RELOC_BRANCH, RPA_COMPILER_CURRENTEXP(co)->endidx, rvm_asm(RVM_BLES, DA, XX, XX, 0));
 
@@ -50,7 +50,7 @@ void code_rpa_match_xloop(rpa_compiler_t *co, rpastat_t *stat)
        rpa_compiler_loop_begin_s(co, "rpa_match_xloop");
        rpa_compiler_altexp_begin(co, RPA_MATCH_NONE, 0);
 
-       rpa_compiler_branch_begin(co, RPA_MATCH_NONE);
+       rpa_compiler_branch_begin(co, RPA_MATCH_NONE, 0);
        rpa_compiler_reference_nan_s(co, "rpa_match_xloop");
        rvm_codegen_index_addrelocins(co->cg, RVM_RELOC_BRANCH, RPA_COMPILER_CURRENTEXP(co)->endidx, rvm_asm(RVM_BLES, DA, XX, XX, 0));
 
@@ -82,7 +82,7 @@ void code_rpa_matchmnode(rpa_compiler_t *co, rpastat_t *stat)
 {
        rvm_codegen_addins(co->cg, rvm_asm(RVM_MOV, R_TOP, DA, XX, 0));
 
-       rpa_compiler_exp_begin(co, RPA_MATCH_NONE);
+       rpa_compiler_exp_begin(co, RPA_MATCH_NONE, 0);
 
        rvm_codegen_addins(co->cg, rvm_asm(RPA_MATCHCHR_NAN, DA, XX, XX, 'X'));
        rvm_codegen_index_addrelocins(co->cg, RVM_RELOC_BRANCH, RPA_COMPILER_CURRENTEXP(co)->endidx, rvm_asm(RVM_BLES, DA, XX, XX, 0));
index f285822..2676e01 100644 (file)
@@ -60,17 +60,17 @@ void code_rpa_match_term(rpa_compiler_t *co, rpastat_t *stat)
        rpa_compiler_rule_begin_s(co, "rpa_match_term", 0);
        rpa_compiler_altexp_begin(co, RPA_MATCH_NONE, 0);
 
-       rpa_compiler_branch_begin(co, RPA_MATCH_NONE);
+       rpa_compiler_branch_begin(co, RPA_MATCH_NONE, 0);
        rpa_compiler_reference_nan_s(co, "rpa_match_num");
        rvm_codegen_index_addrelocins(co->cg, RVM_RELOC_BRANCH, RPA_COMPILER_CURRENTEXP(co)->endidx, rvm_asm(RVM_BLES, DA, XX, XX, 0));
        rpa_compiler_branch_end(co);
 
-       rpa_compiler_branch_begin(co, RPA_MATCH_NONE);
+       rpa_compiler_branch_begin(co, RPA_MATCH_NONE, 0);
        rpa_compiler_reference_nan_s(co, "rpa_match_var");
        rvm_codegen_index_addrelocins(co->cg, RVM_RELOC_BRANCH, RPA_COMPILER_CURRENTEXP(co)->endidx, rvm_asm(RVM_BLES, DA, XX, XX, 0));
        rpa_compiler_branch_end(co);
 
-       rpa_compiler_branch_begin(co, RPA_MATCH_NONE);
+       rpa_compiler_branch_begin(co, RPA_MATCH_NONE, 0);
        rvm_codegen_addins(co->cg, rvm_asm(RPA_MATCHCHR_NAN, DA, XX, XX, '('));
        rvm_codegen_index_addrelocins(co->cg, RVM_RELOC_BRANCH, RPA_COMPILER_CURRENTEXP(co)->endidx, rvm_asm(RVM_BLES, DA, XX, XX, 0));
 
@@ -135,12 +135,12 @@ void code_rpa_match_mulexp(rpa_compiler_t *co, rpastat_t *stat)
        rpa_compiler_loop_begin_s(co, "rpa_match_mulexp");
        rpa_compiler_altexp_begin(co, RPA_MATCH_NONE, 0);
 
-       rpa_compiler_branch_begin(co, RPA_MATCH_NONE);
+       rpa_compiler_branch_begin(co, RPA_MATCH_NONE, 0);
        rpa_compiler_reference_nan_s(co, "rpa_match_mulop");
        rvm_codegen_index_addrelocins(co->cg, RVM_RELOC_BRANCH, RPA_COMPILER_CURRENTEXP(co)->endidx, rvm_asm(RVM_BLES, DA, XX, XX, 0));
        rpa_compiler_branch_end(co);
 
-       rpa_compiler_branch_begin(co, RPA_MATCH_NONE);
+       rpa_compiler_branch_begin(co, RPA_MATCH_NONE, 0);
        rpa_compiler_reference_nan_s(co, "rpa_match_divop");
        rvm_codegen_index_addrelocins(co->cg, RVM_RELOC_BRANCH, RPA_COMPILER_CURRENTEXP(co)->endidx, rvm_asm(RVM_BLES, DA, XX, XX, 0));
        rpa_compiler_branch_end(co);
@@ -161,7 +161,7 @@ void code_rpa_match_addexp(rpa_compiler_t *co, rpastat_t *stat)
        rpa_compiler_loop_begin_s(co, "rpa_match_addexp");
        rpa_compiler_altexp_begin(co, RPA_MATCH_NONE, 0);
 
-       rpa_compiler_branch_begin(co, RPA_MATCH_NONE);
+       rpa_compiler_branch_begin(co, RPA_MATCH_NONE, 0);
        rpa_compiler_reference_nan_s(co, "rpa_match_addexp");
        rvm_codegen_index_addrelocins(co->cg, RVM_RELOC_BRANCH, RPA_COMPILER_CURRENTEXP(co)->endidx, rvm_asm(RVM_BLES, DA, XX, XX, 0));
 
@@ -173,7 +173,7 @@ void code_rpa_match_addexp(rpa_compiler_t *co, rpastat_t *stat)
        rpa_compiler_branch_end(co);
 
 
-       rpa_compiler_branch_begin(co, RPA_MATCH_NONE);
+       rpa_compiler_branch_begin(co, RPA_MATCH_NONE, 0);
        rpa_compiler_reference_nan_s(co, "rpa_match_addexp");
        rvm_codegen_index_addrelocins(co->cg, RVM_RELOC_BRANCH, RPA_COMPILER_CURRENTEXP(co)->endidx, rvm_asm(RVM_BLES, DA, XX, XX, 0));
 
@@ -200,7 +200,7 @@ void code_rpa_match_orexp(rpa_compiler_t *co, rpastat_t *stat)
        rpa_compiler_loop_begin_s(co, "rpa_match_orexp");
        rpa_compiler_altexp_begin(co, RPA_MATCH_NONE, 0);
 
-       rpa_compiler_branch_begin(co, RPA_MATCH_NONE);
+       rpa_compiler_branch_begin(co, RPA_MATCH_NONE, 0);
        rpa_compiler_reference_nan_s(co, "rpa_match_orexp");
        rvm_codegen_index_addrelocins(co->cg, RVM_RELOC_BRANCH, RPA_COMPILER_CURRENTEXP(co)->endidx, rvm_asm(RVM_BLES, DA, XX, XX, 0));
 
@@ -226,7 +226,7 @@ void code_rpa_match_andexp(rpa_compiler_t *co, rpastat_t *stat)
        rpa_compiler_loop_begin_s(co, "rpa_match_andexp");
        rpa_compiler_altexp_begin(co, RPA_MATCH_NONE, 0);
 
-       rpa_compiler_branch_begin(co, RPA_MATCH_NONE);
+       rpa_compiler_branch_begin(co, RPA_MATCH_NONE, 0);
        rpa_compiler_reference_nan_s(co, "rpa_match_andexp");
        rvm_codegen_index_addrelocins(co->cg, RVM_RELOC_BRANCH, RPA_COMPILER_CURRENTEXP(co)->endidx, rvm_asm(RVM_BLES, DA, XX, XX, 0));
 
@@ -252,7 +252,7 @@ void code_rpa_match_xorexp(rpa_compiler_t *co, rpastat_t *stat)
        rpa_compiler_loop_begin_s(co, "rpa_match_xorexp");
        rpa_compiler_altexp_begin(co, RPA_MATCH_NONE, 0);
 
-       rpa_compiler_branch_begin(co, RPA_MATCH_NONE);
+       rpa_compiler_branch_begin(co, RPA_MATCH_NONE, 0);
        rpa_compiler_reference_nan_s(co, "rpa_match_xorexp");
        rvm_codegen_index_addrelocins(co->cg, RVM_RELOC_BRANCH, RPA_COMPILER_CURRENTEXP(co)->endidx, rvm_asm(RVM_BLES, DA, XX, XX, 0));
 
@@ -277,7 +277,7 @@ void code_rpa_matchmnode(rpa_compiler_t *co, rpastat_t *stat)
 {
        rvm_codegen_addins(co->cg, rvm_asm(RVM_MOV, R_TOP, DA, XX, 0));
 
-       rpa_compiler_exp_begin(co, RPA_MATCH_NONE);
+       rpa_compiler_exp_begin(co, RPA_MATCH_NONE, 0);
 
        rpa_compiler_reference_nan_s(co, "rpa_match_xorexp");
        rvm_codegen_index_addrelocins(co->cg, RVM_RELOC_BRANCH, RPA_COMPILER_CURRENTEXP(co)->endidx, rvm_asm(RVM_BLES, DA, XX, XX, 0));
index a7c1b3e..a964166 100644 (file)
@@ -43,12 +43,12 @@ void code_rpa_match_abcorxyz(rpa_compiler_t *co, rpastat_t *stat)
 {
        rpa_compiler_rule_begin_s(co, "rpa_match_abcorxyz", 0);
        rpa_compiler_altexp_begin(co, RPA_MATCH_NONE, 0);
-       rpa_compiler_branch_begin(co, RPA_MATCH_NONE);
+       rpa_compiler_branch_begin(co, RPA_MATCH_NONE, 0);
        rpa_compiler_reference_nan_s(co, "rpa_matchxyz");
        rvm_codegen_index_addrelocins(co->cg, RVM_RELOC_BRANCH, RPA_COMPILER_CURRENTEXP(co)->endidx, rvm_asm(RVM_BLES, DA, XX, XX, 0));
        rpa_compiler_branch_end(co);
 
-       rpa_compiler_branch_begin(co, RPA_MATCH_NONE);
+       rpa_compiler_branch_begin(co, RPA_MATCH_NONE, 0);
        rpa_compiler_reference_nan_s(co, "rpa_matchabc");
        rvm_codegen_index_addrelocins(co->cg, RVM_RELOC_BRANCH, RPA_COMPILER_CURRENTEXP(co)->endidx, rvm_asm(RVM_BLES, DA, XX, XX, 0));
        rpa_compiler_branch_end(co);