RPA Toolkit
fixed the rpagen-test (JavaScript)
authorMartin Stoilov <martin@rpasearch.com>
Mon, 2 May 2011 04:04:03 +0000 (21:04 -0700)
committerMartin Stoilov <martin@rpasearch.com>
Mon, 2 May 2011 04:04:03 +0000 (21:04 -0700)
rvm/rvmcpu.c
tests/build/linux/robject-tests.mk
tests/rpagen-test.c

index 808427b..7dcf7bd 100644 (file)
@@ -2057,7 +2057,26 @@ skipexec:
 }
 
 
-rint rvm_cpu_swilookup(rvmcpu_t *cpu, const rchar *tabname, const rchar *swiname, rsize_t size)
+rint rvm_cpu_global_swilookup(rvmcpu_t *cpu, const rchar *swiname, rsize_t size)
+{
+       rint nswi;
+       rvm_switable_t *swientry;
+       rlong ntable;
+
+       for (ntable = 0; ntable < r_harray_length(cpu->switables); ntable++) {
+               swientry = r_harray_index(cpu->switables, ntable, rvm_switable_t*);
+               if (!swientry)
+                       return -1;
+               for (nswi = 0; swientry[nswi].name; nswi++) {
+                       if (r_strncmp(swientry[nswi].name, swiname, size) == 0 && r_strlen(swientry[nswi].name) == size)
+                               return (rint)RVM_SWI_ID(ntable, nswi);
+               }
+       }
+       return -1;
+}
+
+
+rint rvm_cpu_table_swilookup(rvmcpu_t *cpu, const rchar *tabname, const rchar *swiname, rsize_t size)
 {
        rint nswi;
        rvm_switable_t *swientry;
@@ -2076,6 +2095,12 @@ rint rvm_cpu_swilookup(rvmcpu_t *cpu, const rchar *tabname, const rchar *swiname
 }
 
 
+rint rvm_cpu_swilookup(rvmcpu_t *cpu, const rchar *tabname, const rchar *swiname, rsize_t size)
+{
+       return tabname ? rvm_cpu_table_swilookup(cpu, tabname, swiname, size) : rvm_cpu_global_swilookup(cpu, swiname, size);
+}
+
+
 rint rvm_cpu_swilookup_s(rvmcpu_t *cpu, const rchar *tabname, const rchar *swiname)
 {
        return rvm_cpu_swilookup(cpu, tabname, swiname, r_strlen(swiname));
index d86a83a..37275c0 100644 (file)
@@ -1,7 +1,7 @@
 ROBJECT_SRCDIR = $(SRCDIR)/robject
 RLIB_SRCDIR = $(SRCDIR)/rlib
 RVM_SRCDIR = $(SRCDIR)/rvm
-RPA_SRCDIR = $(SRCDIR)/rpa
+RPA_SRCDIR = $(SRCDIR)/rpa1
 RPA2_SRCDIR = $(SRCDIR)/rpa2
 RAST_SRCDIR = $(SRCDIR)/rast
 TESTS_SRCDIR = $(SRCDIR)/tests
@@ -20,7 +20,7 @@ LIBS += -lrvm -lrast -lrlib -lpthread -lm --static
 
 ;TESTS += $(OUTDIR)/calc-test
 ;TESTS += $(OUTDIR)/rast-test
-;TESTS += $(OUTDIR)/rpagen-test
+TESTS  += $(OUTDIR)/rpagen-test
 TESTS  += $(OUTDIR)/funcarg-test
 TESTS   += $(OUTDIR)/codegen-test
 TESTS   += $(OUTDIR)/codemap-test
index 740b0b2..9f88ab0 100644 (file)
@@ -339,7 +339,7 @@ int codegen_opcode_unary_callback(rpa_stat_handle stat, const char *name, void *
        rvm_compiler_t *co = (rvm_compiler_t *)userdata;
 
        if (r_stringncmp("-", input, size))
-               r_array_push(co->opcodes, RVM_OPSWI(rvm_cpu_swilookup_s(co->cpu, "RVM_SWI_NEG")), ruint);
+               r_array_push(co->opcodes, RVM_OPSWI(rvm_cpu_swilookup_s(co->cpu, NULL, "RVM_SWI_NEG")), ruint);
        else if (r_stringncmp("+", input, size))
                r_array_push(co->opcodes, RVM_NOP, ruint);
        else if (r_stringncmp("!", input, size))
@@ -826,7 +826,7 @@ int codegen_h_arrayelementvalue_callback(rpa_stat_handle stat, const char *name,
 int codegen_swiidexist_callback(rpa_stat_handle stat, const char *name, void *userdata, const char *input, unsigned int size, unsigned int reason)
 {
        rvm_compiler_t *co = (rvm_compiler_t *)userdata;
-       rint swi = rvm_cpu_swilookup(co->cpu, input, size);
+       rint swi = rvm_cpu_swilookup(co->cpu, NULL, input, size);
 
        if (swi < 0)
                return 0;
@@ -840,7 +840,7 @@ int codegen_swiid_callback(rpa_stat_handle stat, const char *name, void *userdat
 {
        rvm_compiler_t *co = (rvm_compiler_t *)userdata;
        rulong off = rvm_codegen_getcodesize(co->cg);
-       rint swi = rvm_cpu_swilookup(co->cpu, input, size);
+       rint swi = rvm_cpu_swilookup(co->cpu, NULL, input, size);
 
        if (swi < 0)
                return 0;
@@ -1836,8 +1836,8 @@ int main(int argc, char *argv[])
        rvm_compiler_t *co = rvm_compiler_create(dbex);
 
        cpu = rvm_cpu_create_default();
-       ntable = rvm_cpu_addswitable(vm, "switable", switable);
-       rvm_cpu_addswitable(cpu, switable_js);
+       ntable = rvm_cpu_addswitable(cpu, "switable", switable);
+       rvm_cpu_addswitable(cpu, "switable_js", switable_js);
        co->cpu = cpu;
 
        thisptr = rvm_cpu_alloc_global(cpu);