fprintf(stderr, "\t --dump-records Display rules parsing records.\n");
fprintf(stderr, "\t --no-optimizations Disable optimizations.\n");
fprintf(stderr, "\t --exec-debug Execute in debug mode.\n");
- fprintf(stderr, "\t --dissable-cache Dissable execution cache.\n");
+ fprintf(stderr, "\t --no-cache Disable execution cache.\n");
+ fprintf(stderr, "\t --no-bitmap Disable expression bitmap use.\n");
return 0;
}
}
for (i = 1; i < argc; i++) {
+ if (strcmp(argv[i], "--no-bitmap") == 0) {
+ rpa_dbex_cfgset(pGrep->hDbex, RPA_DBEXCFG_BITMAP, 0);
+ }
+ }
+
+ for (i = 1; i < argc; i++) {
if (strcmp(argv[i], "--no-optimizations") == 0) {
rpa_grep_optimizations(pGrep, 0);
}
}
for (i = 1; i < argc; i++) {
+ if (strcmp(argv[i], "--exec-debug") == 0) {
+ pGrep->execdebug = 1;
+ }
+ }
+
+ for (i = 1; i < argc; i++) {
+ if (strcmp(argv[i], "--no-cache") == 0) {
+ pGrep->disablecache = 1;
+ }
+ }
+
+ for (i = 1; i < argc; i++) {
if (strcmp(argv[i], "--dump-code") == 0) {
if (rpa_dbex_compile(pGrep->hDbex) == 0) {
if (++i < argc) {
}
}
-
for (i = 1; i < argc; i++) {
if (strcmp(argv[i], "--dump-alias") == 0) {
rpa_grep_dump_alias_info(pGrep);
}
}
- for (i = 1; i < argc; i++) {
- if (strcmp(argv[i], "--exec-debug") == 0) {
- pGrep->execdebug = 1;
- }
- }
-
- for (i = 1; i < argc; i++) {
- if (strcmp(argv[i], "--dissable-cache") == 0) {
- pGrep->disablecache = 1;
- }
- }
-
-
if (rpa_dbex_compile(pGrep->hDbex) < 0) {
rpa_errinfo_t errinfo;
rpa_dbex_lasterrorinfo(pGrep->hDbex, &errinfo);
fwprintf(stderr, L"\t --dump-records Display rules parsing records.\n");
fwprintf(stderr, L"\t --no-optimizations Disable optimizations.\n");
fwprintf(stderr, L"\t --exec-debug Execute in debug mode.\n");
- fwprintf(stderr, L"\t --dissable-cache Dissable execution cache.\n");
-
+ fwprintf(stderr, L"\t --no-cache Disable execution cache.\n");
+ fwprintf(stderr, L"\t --no-bitmap Disable expression bitmap use.\n");
+
return 0;
}
goto end;
}
}
+
+ for (i = 1; i < argc; i++) {
+ if (wcscmp(argv[i], L"--no-bitmap") == 0) {
+ rpa_dbex_cfgset(pGrep->hDbex, RPA_DBEXCFG_BITMAP, 0);
+ }
+ }
+
+ for (i = 1; i < argc; i++) {
+ if (wstrcmp(argv[i], L"--no-optimizations") == 0) {
+ rpa_grep_optimizations(pGrep, 0);
+ }
+ }
+
for (i = 1; i < argc; i++) {
if (wcscmp(argv[i], L"-c") == 0) {
if (++i < argc) {
}
}
-
for (i = 1; i < argc; i++) {
if (wcscmp(argv[i], L"--dump-alias") == 0) {
rpa_grep_dump_alias_info(pGrep);
}
for (i = 1; i < argc; i++) {
- if (wcscmp(argv[i], L"--dissable-cache") == 0) {
+ if (wcscmp(argv[i], L"--no-cache") == 0) {
pGrep->disablecache = 1;
}
}
static long rpa_bitmap_set(rarray_t *records, long rec, rpointer userdata);
+static long rpa_bitmap_set_startrec(rarray_t *records, long rec, rpabitmap_t bitmap)
+{
+ rparecord_t *record = rpa_record_get(records, rpa_recordtree_get(records, rec, RPA_RECORD_START));
+ record->userdata = bitmap;
+
+ return 0;
+}
+
void rpa_dbex_buildbitmapinfo_for_rule(rpadbex_t *dbex, rparule_t rid)
{
bc.dbex = dbex;
if ((info = (rpa_ruleinfo_t *)r_harray_get(rules, rid)) != NULL) {
rparecord_t *record = rpa_record_get(dbex->records, info->startrec);
- RPA_BITMAP_SETALL(record);
+ RPA_BITMAP_SETALL(RPA_RECORD2BITMAP(record));
rpa_recordtree_walk(dbex->records, info->startrec, 0, rpa_bitmap_set, (rpointer)&bc);
}
if ((info = (rpa_ruleinfo_t *)r_harray_get(rules, rid)) != NULL) {
rparecord_t *record = rpa_record_get(dbex->records, info->startrec);
if (record) {
- if (!record->userdata) {
+ if (!RPA_BITMAP_GETVAL(RPA_RECORD2BITMAP(record))) {
rpa_dbex_buildbitmapinfo_for_rule(dbex, rid);
}
- bitmap = record->userdata;
+ bitmap = RPA_BITMAP_GETVAL(RPA_RECORD2BITMAP(record));
}
}
return bitmap;
return -1;
}
- RPA_BITMAP_SETBIT(record, wc % RPA_BITMAP_BITS);
+ RPA_BITMAP_SETBIT(RPA_RECORD2BITMAP(record), wc % RPA_BITMAP_BITS);
return 0;
}
wc1 = bc->endchar;
}
for (wc = wc1; wc <= wc2 && (wc - wc1) < RPA_BITMAP_BITS; wc++) {
- RPA_BITMAP_SETBIT(record, (wc % RPA_BITMAP_BITS));
+ RPA_BITMAP_SETBIT(RPA_RECORD2BITMAP(record), (wc % RPA_BITMAP_BITS));
}
-
-
}
return 0;
}
*/
return -1;
}
- RPA_BITMAP_SETBIT(record, wc % RPA_BITMAP_BITS);
+ RPA_BITMAP_SETBIT(RPA_RECORD2BITMAP(record), wc % RPA_BITMAP_BITS);
}
return 0;
}
for (child = rpa_recordtree_firstchild(records, rec, RPA_RECORD_END); child >= 0; child = rpa_recordtree_next(records, child, RPA_RECORD_END)) {
rparecord_t *childrecord = rpa_record_get(records, child);
- RPA_BITMAP_ORBITS(record, childrecord);
+ RPA_BITMAP_ORBITS(RPA_RECORD2BITMAP(record), RPA_RECORD2BITMAP(childrecord));
}
return 0;
static long rpa_bitmap_set_namedrule(rarray_t *records, rparecord_t *record, long rec, rpointer userdata)
{
if (record->type & RPA_RECORD_END) {
- rparecord_t *startrecord;
long child;
child = rpa_recordtree_firstchild(records, rec, RPA_RECORD_END);
for (child = rpa_recordtree_next(records, child, RPA_RECORD_END); child >= 0; child = rpa_recordtree_next(records, child, RPA_RECORD_END)) {
rparecord_t *childrecord = rpa_record_get(records, child);
- RPA_BITMAP_ORBITS(record, childrecord);
+ RPA_BITMAP_ORBITS(RPA_RECORD2BITMAP(record), RPA_RECORD2BITMAP(childrecord));
if (!(childrecord->usertype & RPA_MATCH_OPTIONAL))
break;
}
- startrecord = rpa_record_get(records, rpa_recordtree_get(records, rec, RPA_RECORD_START));
- if (startrecord)
- startrecord->userdata = record->userdata;
- return 0;
}
return 0;
}
for (child = rpa_recordtree_firstchild(records, rec, RPA_RECORD_END); child >= 0; child = rpa_recordtree_next(records, child, RPA_RECORD_END)) {
rparecord_t *childrecord = rpa_record_get(records, child);
- RPA_BITMAP_ORBITS(record, childrecord);
+ RPA_BITMAP_ORBITS(RPA_RECORD2BITMAP(record), RPA_RECORD2BITMAP(childrecord));
if (!(childrecord->usertype & RPA_MATCH_OPTIONAL))
break;
}
for (child = rpa_recordtree_firstchild(records, rec, RPA_RECORD_END); child >= 0; child = rpa_recordtree_next(records, child, RPA_RECORD_END)) {
rparecord_t *childrecord = rpa_record_get(records, child);
- RPA_BITMAP_ORBITS(record, childrecord);
+ RPA_BITMAP_ORBITS(RPA_RECORD2BITMAP(record), RPA_RECORD2BITMAP(childrecord));
}
return 0;
child = rpa_recordtree_firstchild(records, rec, RPA_RECORD_END);
if (child >= 0) {
rparecord_t *childrecord = rpa_record_get(records, child);
- RPA_BITMAP_SETVAL(record, RPA_BITMAP_GETVAL(childrecord));
+ RPA_BITMAP_SETVAL(RPA_RECORD2BITMAP(record), RPA_BITMAP_GETVAL(RPA_RECORD2BITMAP(childrecord)));
}
return 0;
wc = rpa_special_char(wc);
if (wc == '.') {
- RPA_BITMAP_SETALL(record);
+ RPA_BITMAP_SETALL(RPA_RECORD2BITMAP(record));
} else {
- RPA_BITMAP_SETBIT(record, wc % RPA_BITMAP_BITS);
+ RPA_BITMAP_SETBIT(RPA_RECORD2BITMAP(record), wc % RPA_BITMAP_BITS);
}
return 0;
}
long child = rpa_recordtree_firstchild(records, rec, RPA_RECORD_END);
if (child >= 0) {
rparecord_t *childrecord = rpa_record_get(records, child);
- RPA_BITMAP_SETBIT(record, childrecord->userdata % RPA_BITMAP_BITS);
+ RPA_BITMAP_SETBIT(RPA_RECORD2BITMAP(record), childrecord->userdata % RPA_BITMAP_BITS);
}
}
return 0;
wc1 = secondrecord->userdata;
}
for (wc = wc1; wc <= wc2 && (wc - wc1) < RPA_BITMAP_BITS; wc++) {
- RPA_BITMAP_SETBIT(record, (wc % RPA_BITMAP_BITS));
+ RPA_BITMAP_SETBIT(RPA_RECORD2BITMAP(record), (wc % RPA_BITMAP_BITS));
}
}
}
rparecord_t *childrecord = rpa_record_get(records, child);
rparule_t rid = rpa_dbex_lookup(bc->dbex, childrecord->input, childrecord->inputsiz);
if (rid >= 0) {
- record->userdata = rpa_dbex_getrulebitmap(bc->dbex, rid);
+ RPA_BITMAP_SETVAL(RPA_RECORD2BITMAP(record), rpa_dbex_getrulebitmap(bc->dbex, rid));
}
}
if (record->type & RPA_RECORD_END) {
long child = rpa_recordtree_firstchild(records, rec, RPA_RECORD_END);
if (child >= 0) {
- rparecord_t *childrecord = rpa_record_get(records, child);
- RPA_BITMAP_SETVAL(record, ~RPA_BITMAP_GETVAL(childrecord));
+ RPA_BITMAP_SETALL(RPA_RECORD2BITMAP(record));
}
}
return 0;
break;
};
+ if (record->type & RPA_RECORD_END) {
+ rpa_bitmap_set_startrec(records, rec, RPA_BITMAP_GETVAL(RPA_RECORD2BITMAP(record)));
+ }
return 0;
}
typedef rword rpabitmap_t;
-#define RPA_BITMAP_SIZE (sizeof(rword))
-#define RPA_BITMAP_BITS (RPA_BITMAP_SIZE*8)
-#define RPA_BITMAP_SETBIT(__r__, __b__) do { (__r__)->userdata |= ((rword)1) << (__b__); } while (0)
-#define RPA_BITMAP_GETBIT(__r__, __b__) ((__r__)->userdata & (((rword)1) << (__b__)) ? 1 : 0)
-#define RPA_BITMAP_CLRBIT(__r__, __b__) do { (__r__)->userdata &= ~(((rword)1) << (__b__)); } while (0)
-#define RPA_BITMAP_CLRALL(__r__) do { (__r__)->userdata = (rword)0; } while (0)
-#define RPA_BITMAP_SETALL(__r__) do { (__r__)->userdata = (rword)-1; } while (0)
-#define RPA_BITMAP_ORBITS(__r__, __c__) do { (__r__)->userdata |= (__c__)->userdata; } while (0)
-#define RPA_BITMAP_SETVAL(__r__, __v__) do { (__r__)->userdata = __v__; } while (0)
-#define RPA_BITMAP_GETVAL(__r__) ((__r__)->userdata)
-#define RPA_BMAP_GETBIT(__bitmap__, __bit__) ((__bitmap__) & (((rpabitmap_t)1) << (__bit__)) ? 1 : 0)
+#define RPA_BITMAP_SIZE (sizeof(rpabitmap_t))
+#define RPA_BITMAP_BITS (RPA_BITMAP_SIZE * 8)
+#define RPA_RECORD2BITMAP(__r__) (&(__r__)->userdata)
+#define RPA_BITMAP_SETBIT(__pbmp__, __b__) do { *(__pbmp__) |= ((rpabitmap_t)1) << (__b__); } while (0)
+#define RPA_BITMAP_GETBIT(__pbmp__, __b__) (*(__pbmp__) & (((rpabitmap_t)1) << (__b__)) ? 1 : 0)
+#define RPA_BITMAP_CLRBIT(__pbmp__, __b__) do { *(__pbmp__) &= ~(((rpabitmap_t)1) << (__b__)); } while (0)
+#define RPA_BITMAP_CLRALL(__pbmp__) do { *(__pbmp__) = (rpabitmap_t)0; } while (0)
+#define RPA_BITMAP_SETALL(__pbmp__) do { *(__pbmp__) = (rpabitmap_t)-1; } while (0)
+#define RPA_BITMAP_ORBITS(__pbmp1__, __pbmp2__) do { *(__pbmp1__) |= *(__pbmp2__); } while (0)
+#define RPA_BITMAP_SETVAL(__pbmp__, __v__) do { *(__pbmp__) = __v__; } while (0)
+#define RPA_BITMAP_GETVAL(__pbmp__) *(__pbmp__)
+
+
+//#define RPA_BITMAP_SETBIT(__r__, __b__) do { (__r__)->userdata |= ((rword)1) << (__b__); } while (0)
+//#define RPA_BITMAP_GETBIT(__r__, __b__) ((__r__)->userdata & (((rword)1) << (__b__)) ? 1 : 0)
+//#define RPA_BITMAP_CLRBIT(__r__, __b__) do { (__r__)->userdata &= ~(((rword)1) << (__b__)); } while (0)
+//#define RPA_BITMAP_CLRALL(__r__) do { (__r__)->userdata = (rword)0; } while (0)
+//#define RPA_BITMAP_SETALL(__r__) do { (__r__)->userdata = (rword)-1; } while (0)
+//#define RPA_BITMAP_ORBITS(__r__, __c__) do { (__r__)->userdata |= (__c__)->userdata; } while (0)
+//#define RPA_BITMAP_SETVAL(__r__, __v__) do { (__r__)->userdata = __v__; } while (0)
+//#define RPA_BITMAP_GETVAL(__r__) ((__r__)->userdata)
+//#define RPA_BMAP_GETBIT(__bitmap__, __bit__) ((__bitmap__) & (((rpabitmap_t)1) << (__bit__)) ? 1 : 0)
typedef struct rpa_bitmapcompiler_s {
}
-int rpa_compiler_rule_begin(rpa_compiler_t *co, const char *name, unsigned int namesize)
+int rpa_compiler_rule_begin(rpa_compiler_t *co, const char *name, unsigned int namesize, rpabitmap_t bitmap)
{
rpa_ruledef_t exp;
long ruleuid = 0;
exp.startidx = rvm_codegen_addlabel_default(co->cg, name, namesize);
exp.endidx = rpa_codegen_invalid_add_numlabel_s(co->cg, "__end", exp.start);
exp.dataidx = rpa_compiler_addblob(co, ruleid, ruleuid, flags, name, namesize);
-
+ 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(RPA_CHECKCACHE, DA, R_TOP, XX, exp.start));
rvm_codegen_addins(co->cg, rvm_asm(RVM_BXNEQ, LR, XX, XX, 0));
rvm_codegen_addins(co->cg, rvm_asm(RVM_PUSH, R_REC, XX, XX, 0));
}
-int rpa_compiler_rule_begin_s(rpa_compiler_t *co, const char *name)
+int rpa_compiler_rule_begin_s(rpa_compiler_t *co, const char *name, rpabitmap_t bitmap)
{
- return rpa_compiler_rule_begin(co, name, r_strlen(name));
+ return rpa_compiler_rule_begin(co, name, r_strlen(name), bitmap);
}
}
-int rpa_compiler_altexp_begin(rpa_compiler_t *co, unsigned int flags)
+int rpa_compiler_altexp_begin(rpa_compiler_t *co, unsigned int flags, rpabitmap_t bitmap)
{
+
rpa_ruledef_t exp;
exp.flags = 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_TOP, XX, XX, 0));
rvm_codegen_addins(co->cg, rvm_asm(RVM_PUSH, LR, XX, XX, 0));
rvm_codegen_redefinelabel_default(co->cg, exp.endidx);
rvm_codegen_addins(co->cg, rvm_asm(RVM_POP, LR, XX, XX, 0));
rvm_codegen_addins(co->cg, rvm_asm(RVM_POP, R1, XX, XX, 0));
-
rvm_codegen_addins(co->cg, rvm_asm(RVM_SUBS, R0, R_TOP, R1, 0));
rvm_codegen_addins(co->cg, rvm_asm(RVM_BX, LR, XX, XX, 0));
rvm_codegen_replaceins(co->cg, exp.branch, rvm_asm(RVM_B, DA, XX, XX, rvm_codegen_getcodesize(co->cg) - exp.branch));
rpa_compiler_index_reference(co, exp.startidx, (exp.flags & RPA_MATCH_MASK));
+// rvm_codegen_addins(co->cg, rvm_asm(RPA_VERIFYBITMAP, DA, XX, XX, exp.bitmap));
return 0;
}
#include "rvm/rvmcodegen.h"
#include "rvm/rvmscope.h"
#include "rpa/rpavm.h"
+#include "rpa/rpabitmap.h"
#ifdef __cplusplus
extern "C" {
long againidx;
unsigned int ruleuid;
unsigned int flags;
+ rpabitmap_t bitmap;
rpa_rulepref_t *rulepref;
} rpa_ruledef_t;
int rpa_compiler_loop_begin_s(rpa_compiler_t *co, const char *name);
int rpa_compiler_loop_end(rpa_compiler_t *co);
-int rpa_compiler_rule_begin(rpa_compiler_t *co, const char *name, unsigned int namesize);
-int rpa_compiler_rule_begin_s(rpa_compiler_t *co, const char *name);
+int rpa_compiler_rule_begin(rpa_compiler_t *co, const char *name, unsigned int namesize, rpabitmap_t bitmap);
+int rpa_compiler_rule_begin_s(rpa_compiler_t *co, const char *name, rpabitmap_t bitmap);
int rpa_compiler_rule_end(rpa_compiler_t *co);
int rpa_compiler_inlinerule_begin(rpa_compiler_t *co, const char *name, unsigned int namesize, unsigned int flags);
int rpa_compiler_exp_begin(rpa_compiler_t *co, unsigned int flags);
int rpa_compiler_exp_end(rpa_compiler_t *co);
-int rpa_compiler_altexp_begin(rpa_compiler_t *co, unsigned int flags);
+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);
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));
- rpa_compiler_rule_begin(dbex->co, name, namesize);
+#endif
+ rpa_compiler_rule_begin(dbex->co, name, namesize, RPA_BITMAP_GETVAL(RPA_RECORD2BITMAP(prec)));
}
}
r_array_add(dbex->inlinestack, &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_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;
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_compiler_altexp_begin(dbex->co, prec->usertype & RPA_MATCH_MASK, 0);
rpa_dbex_debug_recordtail(dbex, rec);
if (rpa_dbex_playchildrecords(dbex, rec) < 0)
return -1;
dbex->inlinestack = r_array_create(sizeof(unsigned long));
dbex->handlers = r_zmalloc(sizeof(rpa_dbex_recordhandler) * RPA_PRODUCTION_COUNT);
rpa_dbex_cfgset(dbex, RPA_DBEXCFG_OPTIMIZATIONS, 1);
+ rpa_dbex_cfgset(dbex, RPA_DBEXCFG_BITMAP, 1);
dbex->handlers[RPA_PRODUCTION_NONE] = rpa_dbex_rh_default;
dbex->handlers[RPA_PRODUCTION_NAMEDRULE] = rpa_dbex_rh_namedrule;
return;
rpa_dbex_buildruleinfo(dbex);
rpa_dbex_buildloopinfo(dbex);
- rpa_dbex_buildbitmapinfo(dbex);
+ if (dbex->bitmap)
+ rpa_dbex_buildbitmapinfo(dbex);
}
if (!prec)
return;
r_memset(buffer, 0, sizeof(buffer));
+ r_printf("[ 0x%016lx ] ", prec->userdata);
for (i = 0; i < level + 1; i++)
r_printf(" ");
r_printf("(");
} else if(cfg == RPA_DBEXCFG_DEBUG) {
dbex->debug = val;
return 0;
+ } else if(cfg == RPA_DBEXCFG_BITMAP) {
+ dbex->bitmap = val;
+ return 0;
}
return -1;
}
return dbex->optimizations;
} else if(cfg == RPA_DBEXCFG_DEBUG) {
return dbex->debug;
+ } else if(cfg == RPA_DBEXCFG_BITMAP) {
+ return dbex->bitmap;
}
return -1;
}
#define RPA_DBEXCFG_OPTIMIZATIONS 1
#define RPA_DBEXCFG_DEBUG 2
+#define RPA_DBEXCFG_BITMAP 3
/**
* @brief Return the version string of the RPA library.
*
* Supported configuration IDs / Values:
* - RPA_DBEXCFG_OPTIMIZATIONS
- * - 0 Dissable optimizations
+ * - 0 Disable optimizations
* - 1 Enable optimizations
* - RPA_DBEXCFG_DEBUG
- * - 0 Dissable debugging
+ * - 0 Disable debugging
* - 1 Enable debugging
+ * - RPA_DBEXCFG_BITMAP
+ * - 0 Disable bitmap
+ * - 1 Enable bitmap
*/
long rpa_dbex_cfgset(rpadbex_t *dbex, unsigned long cfg, unsigned long val);
* Supported configuration IDs
* - RPA_DBEXCFG_OPTIMIZATIONS
* - RPA_DBEXCFG_DEBUG
+ * - RPA_DBEXCFG_BITMAP
*/
long rpa_dbex_cfgget(rpadbex_t *dbex, unsigned long cfg);
unsigned long optimizations:1;
unsigned long debug:1;
unsigned long compiled:1;
+ unsigned long bitmap:1;
};
int rpa_record2long(rparecord_t *prec, ruint32 *num);
{
rpa_compiler_t *co = pa->co;
- rpa_compiler_rule_begin_s(co, "directives");
+ rpa_compiler_rule_begin_s(co, "directives", 0);
- rpa_compiler_altexp_begin(co, RPA_MATCH_MULTIPLE);
+ rpa_compiler_altexp_begin(co, RPA_MATCH_MULTIPLE, 0);
rpa_compiler_branch_begin(co, RPA_MATCH_NONE);
rpa_compiler_reference_nan_s(co, "emit");
rpa_compiler_t *co = pa->co;
// rpa_compiler_rulepref_set_s(co, "bnf", 0, RPA_PRODUCTION_BNF);
- rpa_compiler_rule_begin_s(co, "bnf");
+ rpa_compiler_rule_begin_s(co, "bnf", 0);
- rpa_compiler_altexp_begin(co, RPA_MATCH_MULTIPLE);
+ rpa_compiler_altexp_begin(co, RPA_MATCH_MULTIPLE, 0);
rpa_compiler_branch_begin(co, RPA_MATCH_NONE);
rpa_compiler_reference_nan_s(co, "space");
rpa_compiler_t *co = pa->co;
rpa_compiler_rulepref_set_s(co, "emitid", 0, RPA_PRODUCTION_DIRECTIVEEMITID, RPA_RFLAG_EMITRECORD);
- rpa_compiler_rule_begin_s(co, "emitid");
+ rpa_compiler_rule_begin_s(co, "emitid", 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));
rpa_compiler_t *co = pa->co;
rpa_compiler_rulepref_set_s(co, "emit", 0, RPA_PRODUCTION_DIRECTIVEEMIT, RPA_RFLAG_EMITRECORD);
- rpa_compiler_rule_begin_s(co, "emit");
+ rpa_compiler_rule_begin_s(co, "emit", 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));
rpa_compiler_t *co = pa->co;
rpa_compiler_rulepref_set_s(co, "abort", 0, RPA_PRODUCTION_DIRECTIVEABORT, RPA_RFLAG_EMITRECORD);
- rpa_compiler_rule_begin_s(co, "abort");
+ rpa_compiler_rule_begin_s(co, "abort", 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));
rpa_compiler_t *co = pa->co;
rpa_compiler_rulepref_set_s(co, "emitall", 0, RPA_PRODUCTION_DIRECTIVEEMITALL, RPA_RFLAG_EMITRECORD);
- rpa_compiler_rule_begin_s(co, "emitall");
+ rpa_compiler_rule_begin_s(co, "emitall", 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));
rpa_compiler_t *co = pa->co;
rpa_compiler_rulepref_set_s(co, "emitnone", 0, RPA_PRODUCTION_DIRECTIVEEMITNONE, RPA_RFLAG_EMITRECORD);
- rpa_compiler_rule_begin_s(co, "emitnone");
+ rpa_compiler_rule_begin_s(co, "emitnone", 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));
rpa_compiler_t *co = pa->co;
rpa_compiler_rulepref_set_s(co, "noemit", 0, RPA_PRODUCTION_DIRECTIVENOEMIT, RPA_RFLAG_EMITRECORD);
- rpa_compiler_rule_begin_s(co, "noemit");
+ rpa_compiler_rule_begin_s(co, "noemit", 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));
{
rpa_compiler_t *co = pa->co;
- rpa_compiler_rule_begin_s(co, "comment");
+ rpa_compiler_rule_begin_s(co, "comment", 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));
rpa_compiler_t *co = pa->co;
rpa_compiler_rulepref_set_s(co, "namedrule", 0, RPA_PRODUCTION_NAMEDRULE, RPA_RFLAG_EMITRECORD);
- rpa_compiler_rule_begin_s(co, "namedrule");
+ rpa_compiler_rule_begin_s(co, "namedrule", 0);
rpa_compiler_reference_opt_s(co, "space");
rpa_compiler_t *co = pa->co;
rpa_compiler_rulepref_set_s(co, "anonymousrule", 0, RPA_PRODUCTION_ANONYMOUSRULE, RPA_RFLAG_EMITRECORD);
- rpa_compiler_rule_begin_s(co, "anonymousrule");
+ rpa_compiler_rule_begin_s(co, "anonymousrule", 0);
rpa_compiler_reference_opt_s(co, "space");
{
rpa_compiler_t *co = pa->co;
- rpa_compiler_rule_begin_s(co, "space");
+ rpa_compiler_rule_begin_s(co, "space", 0);
rpa_compiler_class_begin(co, RPA_MATCH_MULTIPLE);
rvm_codegen_addins(co->cg, rvm_asm(RPA_MATCHCHR_NAN, DA, XX, XX, ' '));
rpa_compiler_t *co = pa->co;
rpa_compiler_rulepref_set_s(co, "rulename", 0, RPA_PRODUCTION_RULENAME, RPA_RFLAG_EMITRECORD);
- rpa_compiler_rule_begin_s(co, "rulename");
+ rpa_compiler_rule_begin_s(co, "rulename", 0);
rpa_compiler_class_begin(co, RPA_MATCH_NONE);
rvm_codegen_addins(co->cg, rvm_asm2(RPA_MATCHRNG_NAN, DA, XX, XX, 'a', 'z'));
rpa_compiler_t *co = pa->co;
rpa_compiler_rulepref_set_s(co, "aliasname", 0, RPA_PRODUCTION_ALIASNAME, RPA_RFLAG_EMITRECORD);
- rpa_compiler_rule_begin_s(co, "aliasname");
+ rpa_compiler_rule_begin_s(co, "aliasname", 0);
rpa_compiler_class_begin(co, RPA_MATCH_NONE);
rvm_codegen_addins(co->cg, rvm_asm2(RPA_MATCHRNG_NAN, DA, XX, XX, 'a', 'z'));
{
rpa_compiler_t *co = pa->co;
- rpa_compiler_rule_begin_s(co, "assign");
+ rpa_compiler_rule_begin_s(co, "assign", 0);
rpa_compiler_exp_begin(co, RPA_MATCH_NONE);
rpa_compiler_reference_opt_s(co, "space");
static void rpa_production_regexchar(rpa_parser_t *pa)
{
rpa_compiler_t *co = pa->co;
- rpa_compiler_rule_begin_s(co, "regexchar");
+ rpa_compiler_rule_begin_s(co, "regexchar", 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_t *co = pa->co;
rpa_compiler_rulepref_set_s(co, "char", 0, RPA_PRODUCTION_CHAR, RPA_RFLAG_EMITRECORD);
- rpa_compiler_rule_begin_s(co, "char");
+ rpa_compiler_rule_begin_s(co, "char", 0);
rvm_codegen_addins(co->cg, rvm_asm(RPA_MATCHSPCHR_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_rule_end(co);
{
rpa_compiler_t *co = pa->co;
- rpa_compiler_rule_begin_s(co, "escapedchar");
+ rpa_compiler_rule_begin_s(co, "escapedchar", 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));
- rpa_compiler_altexp_begin(co, RPA_MATCH_NONE);
+ rpa_compiler_altexp_begin(co, RPA_MATCH_NONE, 0);
rpa_compiler_branch_begin(co, RPA_MATCH_NONE);
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_t *co = pa->co;
rpa_compiler_rulepref_set_s(co, "specialchar", 0, RPA_PRODUCTION_SPECIALCHAR, RPA_RFLAG_EMITRECORD);
- rpa_compiler_rule_begin_s(co, "specialchar");
+ rpa_compiler_rule_begin_s(co, "specialchar", 0);
rpa_compiler_class_begin(co, RPA_MATCH_NONE);
rvm_codegen_addins(co->cg, rvm_asm(RPA_MATCHCHR_NAN, DA, XX, XX, 'r'));
rpa_compiler_t *co = pa->co;
rpa_compiler_rulepref_set_s(co, "clschar", 0, RPA_PRODUCTION_CLSCHAR, RPA_RFLAG_EMITRECORD);
- rpa_compiler_rule_begin_s(co, "clschar");
+ rpa_compiler_rule_begin_s(co, "clschar", 0);
rpa_production_clschars(pa);
rvm_codegen_addins(co->cg, rvm_asm(RPA_MATCHSPCHR_NAN, DA, XX, XX, '.'));
rpa_compiler_t *co = pa->co;
rpa_compiler_rulepref_set_s(co, "beginchar", 0, RPA_PRODUCTION_BEGINCHAR, RPA_RFLAG_EMITRECORD);
- rpa_compiler_rule_begin_s(co, "beginchar");
+ rpa_compiler_rule_begin_s(co, "beginchar", 0);
// rpa_compiler_class_begin(co, RPA_MATCH_NONE);
rpa_production_clschars(pa);
rpa_compiler_t *co = pa->co;
rpa_compiler_rulepref_set_s(co, "endchar", 0, RPA_PRODUCTION_ENDCHAR, RPA_RFLAG_EMITRECORD);
- rpa_compiler_rule_begin_s(co, "endchar");
+ rpa_compiler_rule_begin_s(co, "endchar", 0);
// rpa_compiler_class_begin(co, RPA_MATCH_NONE);
rpa_production_clschars(pa);
rpa_compiler_t *co = pa->co;
rpa_compiler_rulepref_set_s(co, "occurence", 0, RPA_PRODUCTION_OCCURENCE, RPA_RFLAG_EMITRECORD);
- rpa_compiler_rule_begin_s(co, "occurence");
+ rpa_compiler_rule_begin_s(co, "occurence", 0);
rpa_compiler_class_begin(co, RPA_MATCH_NONE);
rvm_codegen_addins(co->cg, rvm_asm(RPA_MATCHCHR_NAN, DA, XX, XX, '?'));
rpa_compiler_t *co = pa->co;
rpa_compiler_rulepref_set_s(co, "charrng", 0, RPA_PRODUCTION_CHARRNG, RPA_RFLAG_EMITRECORD);
- rpa_compiler_rule_begin_s(co, "charrng");
+ rpa_compiler_rule_begin_s(co, "charrng", 0);
rpa_compiler_reference_nan_s(co, "beginchar");
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, '-'));
rpa_compiler_t *co = pa->co;
rpa_compiler_rulepref_set_s(co, "numrng", 0, RPA_PRODUCTION_NUMRNG, RPA_RFLAG_EMITRECORD);
- rpa_compiler_rule_begin_s(co, "numrng");
+ rpa_compiler_rule_begin_s(co, "numrng", 0);
rpa_compiler_reference_nan_s(co, "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_t *co = pa->co;
- rpa_compiler_rule_begin_s(co, "sqstr");
+ rpa_compiler_rule_begin_s(co, "sqstr", 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));
{
rpa_compiler_t *co = pa->co;
- rpa_compiler_rule_begin_s(co, "dqstr");
+ rpa_compiler_rule_begin_s(co, "dqstr", 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));
{
rpa_compiler_t *co = pa->co;
- rpa_compiler_rule_begin_s(co, "alphacls");
+ rpa_compiler_rule_begin_s(co, "alphacls", 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));
- rpa_compiler_altexp_begin(co, RPA_MATCH_MULTIPLE);
+ rpa_compiler_altexp_begin(co, RPA_MATCH_MULTIPLE, 0);
rpa_compiler_branch_begin(co, RPA_MATCH_NONE);
rpa_compiler_reference_nan_s(co, "charrng");
rpa_compiler_t *co = pa->co;
rpa_compiler_rulepref_set_s(co, "clsnum", 0, RPA_PRODUCTION_CLSNUM, RPA_RFLAG_EMITRECORD);
- rpa_compiler_rule_begin_s(co, "clsnum");
+ rpa_compiler_rule_begin_s(co, "clsnum", 0);
rpa_compiler_reference_nan_s(co, "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_t *co = pa->co;
- rpa_compiler_rule_begin_s(co, "numcls");
+ rpa_compiler_rule_begin_s(co, "numcls", 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));
- rpa_compiler_altexp_begin(co, RPA_MATCH_MULTIPLE);
+ rpa_compiler_altexp_begin(co, RPA_MATCH_MULTIPLE, 0);
rpa_compiler_branch_begin(co, RPA_MATCH_NONE);
rpa_compiler_reference_nan_s(co, "numrng");
rpa_compiler_t *co = pa->co;
rpa_compiler_rulepref_set_s(co, "cls", 0, RPA_PRODUCTION_CLS, RPA_RFLAG_EMITRECORD);
- rpa_compiler_rule_begin_s(co, "cls");
+ rpa_compiler_rule_begin_s(co, "cls", 0);
- rpa_compiler_altexp_begin(co, RPA_MATCH_NONE);
+ rpa_compiler_altexp_begin(co, RPA_MATCH_NONE, 0);
rpa_compiler_branch_begin(co, RPA_MATCH_NONE);
rpa_compiler_reference_nan_s(co, "numcls");
rpa_compiler_t *co = pa->co;
rpa_compiler_rulepref_set_s(co, "dec", 0, RPA_PRODUCTION_DEC, RPA_RFLAG_EMITRECORD);
- rpa_compiler_rule_begin_s(co, "dec");
+ rpa_compiler_rule_begin_s(co, "dec", 0);
rvm_codegen_addins(co->cg, rvm_asm2(RPA_MATCHRNG_NAN, DA, XX, XX, '1', '9'));
rvm_codegen_index_addrelocins(co->cg, RVM_RELOC_BRANCH, RPA_COMPILER_CURRENTEXP(co)->endidx, rvm_asm(RVM_BLES, DA, XX, XX, 0));
rpa_compiler_t *co = pa->co;
rpa_compiler_rulepref_set_s(co, "hex", 0, RPA_PRODUCTION_HEX, RPA_RFLAG_EMITRECORD);
- rpa_compiler_rule_begin_s(co, "hex");
+ rpa_compiler_rule_begin_s(co, "hex", 0);
rpa_compiler_class_begin(co, RPA_MATCH_MULTIPLE);
rvm_codegen_addins(co->cg, rvm_asm2(RPA_MATCHRNG_NAN, DA, XX, XX, '0', '9'));
{
rpa_compiler_t *co = pa->co;
- rpa_compiler_rule_begin_s(co, "num");
+ rpa_compiler_rule_begin_s(co, "num", 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));
- rpa_compiler_altexp_begin(co, RPA_MATCH_NONE);
+ rpa_compiler_altexp_begin(co, RPA_MATCH_NONE, 0);
rpa_compiler_branch_begin(co, RPA_MATCH_NONE);
rvm_codegen_addins(co->cg, rvm_asm(RPA_MATCHCHR_OPT, DA, XX, XX, '0'));
rpa_compiler_t *co = pa->co;
rpa_compiler_rulepref_set_s(co, "aref", 0, RPA_PRODUCTION_AREF, RPA_RFLAG_EMITRECORD);
- rpa_compiler_rule_begin_s(co, "aref");
+ rpa_compiler_rule_begin_s(co, "aref", 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));
rpa_compiler_t *co = pa->co;
rpa_compiler_rulepref_set_s(co, "cref", 0, RPA_PRODUCTION_CREF, RPA_RFLAG_EMITRECORD);
- rpa_compiler_rule_begin_s(co, "cref");
+ rpa_compiler_rule_begin_s(co, "cref", 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));
{
rpa_compiler_t *co = pa->co;
- rpa_compiler_rule_begin_s(co, "terminal");
+ rpa_compiler_rule_begin_s(co, "terminal", 0);
- rpa_compiler_altexp_begin(co, RPA_MATCH_NONE);
+ rpa_compiler_altexp_begin(co, RPA_MATCH_NONE, 0);
rpa_compiler_branch_begin(co, RPA_MATCH_NONE);
rpa_compiler_reference_nan_s(co, "cls");
{
rpa_compiler_t *co = pa->co;
- rpa_compiler_rule_begin_s(co, "qchar");
+ rpa_compiler_rule_begin_s(co, "qchar", 0);
- rpa_compiler_altexp_begin(co, RPA_MATCH_NONE);
+ rpa_compiler_altexp_begin(co, RPA_MATCH_NONE, 0);
rpa_compiler_branch_begin(co, RPA_MATCH_NONE);
rpa_compiler_reference_nan_s(co, "escapedchar");
{
rpa_compiler_t *co = pa->co;
- rpa_compiler_rule_begin_s(co, "qexp");
+ rpa_compiler_rule_begin_s(co, "qexp", 0);
- rpa_compiler_altexp_begin(co, RPA_MATCH_NONE);
+ rpa_compiler_altexp_begin(co, RPA_MATCH_NONE, 0);
rpa_compiler_branch_begin(co, RPA_MATCH_NONE);
rpa_compiler_reference_nan_s(co, "terminal");
rpa_compiler_t *co = pa->co;
rpa_compiler_rulepref_set_s(co, "anchorop", 0, RPA_PRODUCTION_ANCHOROP, RPA_RFLAG_EMITRECORD);
- rpa_compiler_rule_begin_s(co, "anchorop");
+ rpa_compiler_rule_begin_s(co, "anchorop", 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));
rpa_compiler_reference_opt_s(co, "space");
{
rpa_compiler_t *co = pa->co;
- rpa_compiler_rule_begin_s(co, "anchorexp");
- rpa_compiler_altexp_begin(co, RPA_MATCH_NONE);
+ 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_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_t *co = pa->co;
rpa_compiler_rulepref_set_s(co, "notop", 0, RPA_PRODUCTION_NOTOP, RPA_RFLAG_EMITRECORD);
- rpa_compiler_rule_begin_s(co, "notop");
+ rpa_compiler_rule_begin_s(co, "notop", 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));
rpa_compiler_reference_opt_s(co, "space");
{
rpa_compiler_t *co = pa->co;
- rpa_compiler_rule_begin_s(co, "notexp");
- rpa_compiler_altexp_begin(co, RPA_MATCH_NONE);
+ 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_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_t *co = pa->co;
// rpa_compiler_rulepref_set_s(co, "exp", 0, RPA_PRODUCTION_EXP);
- rpa_compiler_rule_begin_s(co, "exp");
+ rpa_compiler_rule_begin_s(co, "exp", 0);
rpa_compiler_reference_mul_s(co, "notexp");
rvm_codegen_index_addrelocins(co->cg, RVM_RELOC_BRANCH, RPA_COMPILER_CURRENTEXP(co)->endidx, rvm_asm(RVM_BLES, DA, XX, XX, 0));
rpa_compiler_rule_end(co);
rpa_compiler_t *co = pa->co;
rpa_compiler_rulepref_set_s(co, "bracketexp", 0, RPA_PRODUCTION_BRACKETEXP, RPA_RFLAG_EMITRECORD);
- rpa_compiler_rule_begin_s(co, "bracketexp");
+ rpa_compiler_rule_begin_s(co, "bracketexp", 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));
rpa_compiler_t *co = pa->co;
rpa_compiler_rulepref_set_s(co, "negbranch", 0, RPA_PRODUCTION_NEGBRANCH, RPA_RFLAG_EMITRECORD);
- rpa_compiler_rule_begin_s(co, "negbranch");
+ rpa_compiler_rule_begin_s(co, "negbranch", 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_t *co = pa->co;
rpa_compiler_rulepref_set_s(co, "norop", 0, RPA_PRODUCTION_NOROP, RPA_RFLAG_EMITRECORD);
- rpa_compiler_rule_begin_s(co, "norop");
+ rpa_compiler_rule_begin_s(co, "norop", 0);
rpa_compiler_exp_begin(co, RPA_MATCH_MULTIPLE);
rpa_compiler_reference_opt_s(co, "space");
rpa_compiler_t *co = pa->co;
rpa_compiler_rulepref_set_s(co, "reqop", 0, RPA_PRODUCTION_REQOP, RPA_RFLAG_EMITRECORD);
- rpa_compiler_rule_begin_s(co, "reqop");
+ rpa_compiler_rule_begin_s(co, "reqop", 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_t *co = pa->co;
rpa_compiler_rulepref_set_s(co, "minop", 0, RPA_PRODUCTION_MINOP, RPA_RFLAG_EMITRECORD);
- rpa_compiler_rule_begin_s(co, "minop");
+ rpa_compiler_rule_begin_s(co, "minop", 0);
rpa_compiler_reference_nan_s(co, "reqop");
rvm_codegen_index_addrelocins(co->cg, RVM_RELOC_BRANCH, RPA_COMPILER_CURRENTEXP(co)->endidx, rvm_asm(RVM_BLES, DA, XX, XX, 0));
{
rpa_compiler_t *co = pa->co;
- rpa_compiler_rule_begin_s(co, "minexp");
- rpa_compiler_altexp_begin(co, RPA_MATCH_NONE);
+ 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_reference_nan_s(co, "minop");
rpa_compiler_t *co = pa->co;
rpa_compiler_rulepref_set_s(co, "altbranch", 0, RPA_PRODUCTION_ALTBRANCH, RPA_RFLAG_EMITRECORD);
- rpa_compiler_rule_begin_s(co, "altbranch");
+ rpa_compiler_rule_begin_s(co, "altbranch", 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_t *co = pa->co;
rpa_compiler_rulepref_set_s(co, "orop", 0, RPA_PRODUCTION_OROP, RPA_RFLAG_EMITRECORD);
- rpa_compiler_rule_begin_s(co, "orop");
+ rpa_compiler_rule_begin_s(co, "orop", 0);
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_t *co = pa->co;
- rpa_compiler_rule_begin_s(co, "orexp");
- rpa_compiler_altexp_begin(co, RPA_MATCH_NONE);
+ 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_reference_nan_s(co, "orop");
{
rpa_compiler_t *co = pa->co;
- rpa_compiler_rule_begin_s(co, "");
+ rpa_compiler_rule_begin_s(co, "", 0);
rpa_compiler_rule_end(co);
}
if (in->eof)
return 0;
if (stat->encoding & RPA_ENCODING_ICASE) {
- ret = (RPA_BMAP_GETBIT(bitmap, in->wc % RPA_BITMAP_BITS) || RPA_BMAP_GETBIT(bitmap, in->iwc % RPA_BITMAP_BITS)) ? TRUE : FALSE;
+ ret = (RPA_BITMAP_GETBIT(&bitmap, in->wc % RPA_BITMAP_BITS) || RPA_BITMAP_GETBIT(&bitmap, in->iwc % RPA_BITMAP_BITS)) ? TRUE : FALSE;
} else {
- ret = (RPA_BMAP_GETBIT(bitmap, in->wc % RPA_BITMAP_BITS)) ? TRUE : FALSE;
+ ret = (RPA_BITMAP_GETBIT(&bitmap, in->wc % RPA_BITMAP_BITS)) ? TRUE : FALSE;
}
return ret;
}
}
+static void rpavm_swi_verifybitmap(rvmcpu_t *cpu, rvm_asmins_t *ins)
+{
+ rpastat_t *stat = (rpastat_t *)cpu->userdata1;
+ rpabitmap_t bitmap = RVM_CPUREG_GETU(cpu, ins->op1);
+ long r0 = RVM_CPUREG_GETU(cpu, R0);
+
+ if (bitmap && r0 > 0) {
+ if (!rpa_stat_matchbitmap(stat, RVM_CPUREG_GETL(cpu, R_TOP) - r0, bitmap)) {
+ if ((cpu->status & RVM_STATUS_N) == 0)
+ rvm_cpu_abort(cpu);
+ }
+ }
+}
+
+
static void rpavm_swi_matchchr_nan(rvmcpu_t *cpu, rvm_asmins_t *ins)
{
rpastat_t *stat = (rpastat_t *)cpu->userdata1;
{"RPA_ABORT", rpavm_swi_abort},
{"RPA_PRNINFO", rpavm_swi_prninfo},
{"RPA_MATCHBITMAP", rpavm_swi_matchbitmap},
+ {"RPA_VERIFYBITMAP", rpavm_swi_verifybitmap},
{NULL, NULL},
};
#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))
#!emitall
+#!emit STag
+#!emit ETag
+#!emit Attribute
+#!abort ETag
+
# BNF productsions from the XML spcification.
Char ::= [#x9] | [#xA] | [#xD] | [#x20-#xD7FF] |
[#x370-#x37D] | [#x37F-#x1FFF] | [#x200C-#x200D] | [#x2070-#x218F] |
[#x2C00-#x2FEF] | [#x3001-#xD7FF] | [#xF900-#xFDCF] |
[#xFDF0-#xFFFD] | [#x10000-#xEFFFF] # [4]
-NameChar ::= <:NameStartChar:> | [\-\.]|[0-9]|[#xB7]|[#x0300-#x036F]|[#x203F-#x2040] # [4a]
-Name ::= <:NameStartChar:><:NameChar:>* # [5]
-Names ::= <:Name:>([#x20]<:Name:>)* # [6]
-Nmtoken ::= <:NameChar:>+ # [7]
-Nmtokens ::= <:Nmtoken:>([#x20]<:Nmtoken:>)* # [8]
+NameChar ::= <NameStartChar> | [\-\.]|[0-9]|[#xB7]|[#x0300-#x036F]|[#x203F-#x2040] # [4a]
+Name ::= <NameStartChar><NameChar>* # [5]
+Names ::= <Name>([#x20]<Name>)* # [6]
+Nmtoken ::= <NameChar>+ # [7]
+Nmtokens ::= <Nmtoken>([#x20]<Nmtoken>)* # [8]
# Literals
-EntityValue ::= ( '"' ( ^[%&"] | <:PEReference:> | <:Reference:> )* '"' ) |
- ( "'" ( ^[%&'] | <:PEReference:> | <:Reference:> )* "'" ) # [9]
-AttValue ::= '"' (^[<&"] | <:Reference:>)* '"' | "'" (^[<&'] | <:Reference:>)* "'" # [10]
+EntityValue ::= ( '"' ( ^[%&"] | <PEReference> | <Reference> )* '"' ) |
+ ( "'" ( ^[%&'] | <PEReference> | <Reference> )* "'" ) # [9]
+AttValue ::= '"' (^[<&"] | <Reference>)* '"' | "'" (^[<&'] | <Reference>)* "'" # [10]
SystemLiteral ::= ('"' ^["]* '"') | ("'" ^[']* "'") # [11]
-PubidLiteral ::= (\"<:PubidChar:>*\") | (\'(<:PubidChar:> - \')*\') # [12]
+PubidLiteral ::= (\"<PubidChar>*\") | (\'(<PubidChar> - \')*\') # [12]
PubidChar ::= [#x20] | [#xD] | [#xA] | [a-zA-Z0-9] | '-' | '#' | ['()+,./::=?;!*@$_%] # [13]
# Character Data
CharData ::= ^[<&]
-Comment ::= '<!--' ((<:Char:> - '-') | ('-' (<:Char:> - '-')))* '-->' # [15]
+Comment ::= '<!--' ((<Char> - '-') | ('-' (<Char> - '-')))* '-->' # [15]
# Processing Instructions
-PI ::= '<?' <:PITarget:> (<:S:> ((<:Char:> - '?>')*))? '?>' # [16]
-PITarget ::= <:Name:> - [Xx][Mm][Ll] # [17]
+PI ::= '<?' <PITarget> (<S> ((<Char> - '?>')*))? '?>' # [16]
+PITarget ::= <Name> - [Xx][Mm][Ll] # [17]
# CDATA Section
-CDSect ::= <:CDStart:> <:CData:> <:CDEnd:> # [18]
+CDSect ::= <CDStart> <CData> <CDEnd> # [18]
CDStart ::= '<![CDATA[' # [19]
-CData ::= (<:Char:> - ']]>')* # [20]
+CData ::= (<Char> - ']]>')* # [20]
CDEnd ::= ']]>' # [21]
# Prolog
-XMLDecl ::= '<?xml' <:VersionInfo:> <:EncodingDecl:>? <:SDDecl:>? <:S:>? '?>' # [23]
-VersionInfo ::= <:S:> 'version' <:Eq:> ("'" <:VersionNum:> "'" | '"' <:VersionNum:> '"') # [24]
-Eq ::= <:S:>? = <:S:>? # [25]
+XMLDecl ::= '<?xml' <VersionInfo> <EncodingDecl>? <SDDecl>? <S>? '?>' # [23]
+VersionInfo ::= <S> 'version' <Eq> ("'" <VersionNum> "'" | '"' <VersionNum> '"') # [24]
+Eq ::= <S>? = <S>? # [25]
VersionNum ::= '1.' [0-9]+ # [26]
-Misc ::= <:Comment:> | <:PI:> | <:S:> # [27]
-doctypedecl ::= '<!DOCTYPE'<S><:Name:>(<S><:ExternalID:>)?<S>?('['<:intSubset:>']'<S>?)?'>' # [28]
-DeclSep ::= <:PEReference:> | <:S:> # [28a]
-intSubset ::= ( <:markupdecl:> | <:DeclSep:> )* # [28b]
+Misc ::= <Comment> | <PI> | <S> # [27]
+doctypedecl ::= '<!DOCTYPE'<S><Name>(<S><ExternalID>)?<S>?('['<intSubset>']'<S>?)?'>' # [28]
+DeclSep ::= <PEReference> | <S> # [28a]
+intSubset ::= ( <markupdecl> | <DeclSep> )* # [28b]
-markupdecl ::= <:elementdecl:> | <:AttlistDecl:> |
- <:EntityDecl:> | <:NotationDecl:> | <:PI:> | <:Comment:> # [29]
-prolog ::= (<:XMLDecl:> | <:doctypedecl:>)<:Misc:>* (<:doctypedecl:> <:Misc:>*)? # [22]
+markupdecl ::= <elementdecl> | <AttlistDecl> |
+ <EntityDecl> | <NotationDecl> | <PI> | <Comment> # [29]
+prolog ::= (<XMLDecl> | <doctypedecl>)<Misc>* (<doctypedecl> <Misc>*)? # [22]
# External Subset
-extSubset ::= <:TextDecl:>? <:extSubsetDecl:> # [30]
-extSubsetDecl ::= (<:markupdecl:> | <:conditionalSect:> | <:DeclSep:>)* # [31]
-SDDecl ::= <:S:> 'standalone' <:Eq:>(("'" ('yes' | 'no') "'") |
+extSubset ::= <TextDecl>? <extSubsetDecl> # [30]
+extSubsetDecl ::= (<markupdecl> | <conditionalSect> | <DeclSep>)* # [31]
+SDDecl ::= <S> 'standalone' <Eq>(("'" ('yes' | 'no') "'") |
('"' ('yes' | 'no') '"')) # [32]
#Start-tag
-STag ::= '<' <:Name:> (<:S:><:Attribute:>)* <:S:>? '>' # [40]
-Attribute ::= <:Name:> <:Eq:> <:AttValue:> # [41]
-ETag ::= '</' <:Name:> <:S:>? '>' # [42]
-content ::= <:CharData:>?((<:element:>|<:Reference:>|<:CDSect:>|<:PI:>|
- <:Comment:>)<:CharData:>?)* # [43]
-EmptyElemTag ::= '<' <:Name:> (<:S:><:Attribute:>)* <:S:>? '/>' # [44]
+STag ::= '<' <Name> (<S><Attribute>)* <S>? '>' # [40]
+Attribute ::= <Name> <Eq> <AttValue> # [41]
+ETag ::= '</' <Name> <S>? '>' # [42]
+content ::= <CharData>?((<element>|<Reference>|<CDSect>|<PI>|
+ <Comment>)<CharData>?)* # [43]
+EmptyElemTag ::= '<' <Name> (<S><Attribute>)* <S>? '/>' # [44]
# Element
-element ::= <:EmptyElemTag:> | (<:STag:> <:content:>* (<:ETag:>)) # [39]
-
-elementdecl ::= '<!ELEMENT'<:S:><:Name:><:S:><:contentspec:><:S:>? '>' # [45]
-contentspec ::= 'EMPTY' | 'ANY' | <:Mixed:> | <:children:> # [46]
-children ::= (<:choice:> | <:seq:>) ('?' | '*' | '+')? # [47]
-cp ::= (<:Name:>|<:choice:>|<:seq:>) ('?' | '*' | '+')? # [48]
-choice ::= '(' <:S:>? <:cp:> (<:S:>? '|' <:S:>? <:cp:>)+ <:S:>? ')' # [49]
-seq ::= '(' <:S:>? <:cp:> (<:S:>? ',' <:S:>? <:cp:>)* <:S:>? ')' # [50]
-Mixed ::= '(' <:S:>? '#PCDATA' (<:S:>? '|' <:S:>? <:Name:>)* <:S:>? ')*'|
- '(' <:S:>? '#PCDATA' <:S:>? ')' # [51]
-
-AttlistDecl ::= '<!ATTLIST' <:S:> <:Name:> <:AttDef:>* <:S:>? '>' # [52]
-AttDef ::= <:S:> <:Name:> <:S:> <:AttType:> <:S:> <:DefaultDecl:> # [53]
-AttType ::= <:StringType:> | <:TokenizedType:> | <:EnumeratedType:> # [54]
+element ::= <EmptyElemTag> | (<STag> <content>* (<ETag>)) # [39]
+
+elementdecl ::= '<!ELEMENT'<S><Name><S><contentspec><S>? '>' # [45]
+contentspec ::= 'EMPTY' | 'ANY' | <Mixed> | <children> # [46]
+children ::= (<choice> | <seq>) ('?' | '*' | '+')? # [47]
+cp ::= (<Name>|<choice>|<seq>) ('?' | '*' | '+')? # [48]
+choice ::= '(' <S>? <cp> (<S>? '|' <S>? <cp>)+ <S>? ')' # [49]
+seq ::= '(' <S>? <cp> (<S>? ',' <S>? <cp>)* <S>? ')' # [50]
+Mixed ::= '(' <S>? '#PCDATA' (<S>? '|' <S>? <Name>)* <S>? ')*'|
+ '(' <S>? '#PCDATA' <S>? ')' # [51]
+
+AttlistDecl ::= '<!ATTLIST' <S> <Name> <AttDef>* <S>? '>' # [52]
+AttDef ::= <S> <Name> <S> <AttType> <S> <DefaultDecl> # [53]
+AttType ::= <StringType> | <TokenizedType> | <EnumeratedType> # [54]
StringType ::= 'CDATA' # [55]
TokenizedType ::= 'ID' | 'IDREF' | 'IDREFS' | 'ENTITY' | 'ENTITIES' | 'NMTOKEN' | 'NMTOKENS' # [56]
-EnumeratedType ::= <:NotationType:> | <:Enumeration:> # [57]
-NotationType ::= 'NOTATION' <:S:> '(' <:S:>? <:Name:>(<:S:>? '|' <:S:>?<:Name:>)*<:S:>? ')' # [58]
-Enumeration ::= '(' <:S:>? <:Nmtoken:> (<:S:>? '|' <:S:>? <:Nmtoken:>)* <:S:>? ')' # [59]
-DefaultDecl ::= '#REQUIRED' | '#IMPLIED' | (('#FIXED' <:S:>)? <:AttValue:>) # [60]
-conditionalSect ::= <:includeSect:> | <:ignoreSect:> # [61]
-includeSect ::= '<![' <:S:>? 'INCLUDE' <:S:>? '[' <:extSubsetDecl:> ']]>' # [62]
-ignoreSect ::= '<![' <:S:>? 'IGNORE' <:S:>? '[' <:ignoreSectContents:>* ']]>' # [63]
-ignoreSectContents ::= <:Ignore:>? ('<![' <:ignoreSectContents:> ']]>' <:Ignore:>? )* # [64]
-Ignore ::= (<:Char:> - ('<![' | ']]>'))+
+EnumeratedType ::= <NotationType> | <Enumeration> # [57]
+NotationType ::= 'NOTATION' <S> '(' <S>? <Name>(<S>? '|' <S>?<Name>)*<S>? ')' # [58]
+Enumeration ::= '(' <S>? <Nmtoken> (<S>? '|' <S>? <Nmtoken>)* <S>? ')' # [59]
+DefaultDecl ::= '#REQUIRED' | '#IMPLIED' | (('#FIXED' <S>)? <AttValue>) # [60]
+conditionalSect ::= <includeSect> | <ignoreSect> # [61]
+includeSect ::= '<![' <S>? 'INCLUDE' <S>? '[' <extSubsetDecl> ']]>' # [62]
+ignoreSect ::= '<![' <S>? 'IGNORE' <S>? '[' <ignoreSectContents>* ']]>' # [63]
+ignoreSectContents ::= <Ignore>? ('<![' <ignoreSectContents> ']]>' <Ignore>? )* # [64]
+Ignore ::= (<Char> - ('<![' | ']]>'))+
CharRef ::= '&#' [0-9]+ ';' | '&#x' [0-9a-fA-F]+ ';' # [66]
-Reference ::= <:EntityRef:> | <:CharRef:> # [67]
-EntityRef ::= '&' <:Name:> ';' # [68]
-PEReference ::= '%' <:Name:> ';' # [69]
-EntityDecl ::= <:GEDecl:> | <:PEDecl:> # [70]
-GEDecl ::= '<!ENTITY' <:S:> <:Name:> <:S:> <:EntityDef:> <:S:>? '>' # [71]
-PEDecl ::= '<!ENTITY' <:S:> '%' <:S:> <:Name:> <:S:> <:PEDef:> <:S:>? '>' # [72]
-EntityDef ::= <:EntityValue:> | (<:ExternalID:> <:NDataDecl:>?) # [73]
-PEDef ::= <:EntityValue:> | <:ExternalID:> # [74]
-ExternalID ::= 'SYSTEM' <:S:> <:SystemLiteral:> |
- 'PUBLIC' <:S:> <:PubidLiteral:> <:S:> <:SystemLiteral:> # [75]
-NDataDecl ::= <:S:> 'NDATA' <:S:> <:Name:> # [76]
-TextDecl ::= '<?xml' <:VersionInfo:>? <:EncodingDecl:> <:S:>? '?>' # [77]
-extParsedEnt ::= <:TextDecl:>? <:content:> # [78]
+Reference ::= <EntityRef> | <CharRef> # [67]
+EntityRef ::= '&' <Name> ';' # [68]
+PEReference ::= '%' <Name> ';' # [69]
+EntityDecl ::= <GEDecl> | <PEDecl> # [70]
+GEDecl ::= '<!ENTITY' <S> <Name> <S> <EntityDef> <S>? '>' # [71]
+PEDecl ::= '<!ENTITY' <S> '%' <S> <Name> <S> <PEDef> <S>? '>' # [72]
+EntityDef ::= <EntityValue> | (<ExternalID> <NDataDecl>?) # [73]
+PEDef ::= <EntityValue> | <ExternalID> # [74]
+ExternalID ::= 'SYSTEM' <S> <SystemLiteral> |
+ 'PUBLIC' <S> <PubidLiteral> <S> <SystemLiteral> # [75]
+NDataDecl ::= <S> 'NDATA' <S> <Name> # [76]
+TextDecl ::= '<?xml' <VersionInfo>? <EncodingDecl> <S>? '?>' # [77]
+extParsedEnt ::= <TextDecl>? <content> # [78]
EncName ::= [A-Za-z] ([A-Za-z0-9._] | '-')* # [81]
-NotationDecl ::= '<!NOTATION' <:S:> <:Name:> <:S:> (<:ExternalID:> | <:PublicID:>)<:S:>? '>' # [82]
-PublicID ::= 'PUBLIC' <:S:> <:PubidLiteral:> # [83]
-EncodingDecl ::= <:S:> 'encoding' <:Eq:> ('"' <:EncName:> '"' | "'" <:EncName:> "'" ) # [80]
+NotationDecl ::= '<!NOTATION' <S> <Name> <S> (<ExternalID> | <PublicID>)<S>? '>' # [82]
+PublicID ::= 'PUBLIC' <S> <PubidLiteral> # [83]
+EncodingDecl ::= <S> 'encoding' <Eq> ('"' <EncName> '"' | "'" <EncName> "'" ) # [80]
-document ::= <:prolog:>? <:element:> <:Misc:>* # [1]
-exec ::= <:document:>
+document ::= <prolog>? <element> <Misc>* # [1]
+exec ::= <document>
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);
+ rpa_compiler_altexp_begin(co, RPA_MATCH_NONE, 0);
rpa_compiler_branch_begin(co, RPA_MATCH_NONE);
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));
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_altexp_begin(co, RPA_MATCH_MULTIPLE);
+ rpa_compiler_altexp_begin(co, RPA_MATCH_MULTIPLE, 0);
rpa_compiler_branch_begin(co, RPA_MATCH_NONE);
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));
void code_rpa_matchabc(rpa_compiler_t *co, rpastat_t *stat)
{
- rpa_compiler_rule_begin_s(co, "rpa_matchabc");
+ rpa_compiler_rule_begin_s(co, "rpa_matchabc", 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'));
void code_rpa_matchxyz(rpa_compiler_t *co, rpastat_t *stat)
{
- rpa_compiler_rule_begin_s(co, "rpa_matchxyz");
+ rpa_compiler_rule_begin_s(co, "rpa_matchxyz", 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'));
void code_rpa_match_num(rpa_compiler_t *co, rpastat_t *stat)
{
- rpa_compiler_rule_begin_s(co, "rpa_match_num");
+ rpa_compiler_rule_begin_s(co, "rpa_match_num", 0);
rpa_compiler_class_begin(co, RPA_MATCH_MULTIPLE);
rvm_codegen_addins(co->cg, rvm_asm2(RPA_MATCHRNG_NAN, DA, XX, XX, '0', '9'));
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);
+ rpa_compiler_altexp_begin(co, RPA_MATCH_NONE, 0);
rpa_compiler_branch_begin(co, RPA_MATCH_NONE);
rpa_compiler_reference_nan_s(co, "rpa_match_loopnum");
void code_rpa_match_mathop(rpa_compiler_t *co, rpastat_t *stat)
{
- rpa_compiler_rule_begin_s(co, "rpa_match_mathop");
+ rpa_compiler_rule_begin_s(co, "rpa_match_mathop", 0);
- rpa_compiler_altexp_begin(co, RPA_MATCH_NONE);
+ rpa_compiler_altexp_begin(co, RPA_MATCH_NONE, 0);
rpa_compiler_branch_begin(co, RPA_MATCH_NONE);
rpa_compiler_reference_nan_s(co, "rpa_match_num");
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);
+ rpa_compiler_altexp_begin(co, RPA_MATCH_NONE, 0);
rpa_compiler_branch_begin(co, RPA_MATCH_NONE);
rpa_compiler_reference_nan_s(co, "rpa_match_aloop");
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);
+ rpa_compiler_altexp_begin(co, RPA_MATCH_NONE, 0);
rpa_compiler_branch_begin(co, RPA_MATCH_NONE);
rpa_compiler_reference_nan_s(co, "rpa_match_xloop");
*/
void code_rpa_match_num(rpa_compiler_t *co, rpastat_t *stat)
{
- rpa_compiler_rule_begin_s(co, "rpa_match_num");
+ rpa_compiler_rule_begin_s(co, "rpa_match_num", 0);
rpa_compiler_class_begin(co, RPA_MATCH_MULTIPLE);
rvm_codegen_addins(co->cg, rvm_asm2(RPA_MATCHRNG_NAN, DA, XX, XX, '0', '9'));
void code_rpa_match_var(rpa_compiler_t *co, rpastat_t *stat)
{
- rpa_compiler_rule_begin_s(co, "rpa_match_var");
+ rpa_compiler_rule_begin_s(co, "rpa_match_var", 0);
rpa_compiler_class_begin(co, RPA_MATCH_NONE);
rvm_codegen_addins(co->cg, rvm_asm2(RPA_MATCHRNG_NAN, DA, XX, XX, 'a', 'z'));
void code_rpa_match_term(rpa_compiler_t *co, rpastat_t *stat)
{
- rpa_compiler_rule_begin_s(co, "rpa_match_term");
- rpa_compiler_altexp_begin(co, RPA_MATCH_NONE);
+ 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_reference_nan_s(co, "rpa_match_num");
void code_rpa_match_mulop(rpa_compiler_t *co, rpastat_t *stat)
{
- rpa_compiler_rule_begin_s(co, "rpa_match_mulop");
+ rpa_compiler_rule_begin_s(co, "rpa_match_mulop", 0);
rpa_compiler_reference_nan_s(co, "rpa_match_mulexp");
rvm_codegen_index_addrelocins(co->cg, RVM_RELOC_BRANCH, RPA_COMPILER_CURRENTEXP(co)->endidx, rvm_asm(RVM_BLES, DA, XX, XX, 0));
void code_rpa_match_divop(rpa_compiler_t *co, rpastat_t *stat)
{
- rpa_compiler_rule_begin_s(co, "rpa_match_divop");
+ rpa_compiler_rule_begin_s(co, "rpa_match_divop", 0);
rpa_compiler_reference_nan_s(co, "rpa_match_mulexp");
rvm_codegen_index_addrelocins(co->cg, RVM_RELOC_BRANCH, RPA_COMPILER_CURRENTEXP(co)->endidx, rvm_asm(RVM_BLES, DA, XX, XX, 0));
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);
+ rpa_compiler_altexp_begin(co, RPA_MATCH_NONE, 0);
rpa_compiler_branch_begin(co, RPA_MATCH_NONE);
rpa_compiler_reference_nan_s(co, "rpa_match_mulop");
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);
+ rpa_compiler_altexp_begin(co, RPA_MATCH_NONE, 0);
rpa_compiler_branch_begin(co, RPA_MATCH_NONE);
rpa_compiler_reference_nan_s(co, "rpa_match_addexp");
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);
+ rpa_compiler_altexp_begin(co, RPA_MATCH_NONE, 0);
rpa_compiler_branch_begin(co, RPA_MATCH_NONE);
rpa_compiler_reference_nan_s(co, "rpa_match_orexp");
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);
+ rpa_compiler_altexp_begin(co, RPA_MATCH_NONE, 0);
rpa_compiler_branch_begin(co, RPA_MATCH_NONE);
rpa_compiler_reference_nan_s(co, "rpa_match_andexp");
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);
+ rpa_compiler_altexp_begin(co, RPA_MATCH_NONE, 0);
rpa_compiler_branch_begin(co, RPA_MATCH_NONE);
rpa_compiler_reference_nan_s(co, "rpa_match_xorexp");
void code_rpa_matchabc(rpa_compiler_t *co, rpastat_t *stat)
{
- rpa_compiler_rule_begin_s(co, "rpa_matchabc");
+ rpa_compiler_rule_begin_s(co, "rpa_matchabc", 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'));
void code_rpa_matchxyz(rpa_compiler_t *co, rpastat_t *stat)
{
- rpa_compiler_rule_begin_s(co, "rpa_matchxyz");
+ rpa_compiler_rule_begin_s(co, "rpa_matchxyz", 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'));
void code_rpa_match_abcorxyz(rpa_compiler_t *co, rpastat_t *stat)
{
- rpa_compiler_rule_begin_s(co, "rpa_match_abcorxyz");
- rpa_compiler_altexp_begin(co, RPA_MATCH_NONE);
+ 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_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));