summaryrefslogtreecommitdiff
path: root/src/runtime/c/pgf/jit.c
diff options
context:
space:
mode:
authorkrasimir <krasimir@chalmers.se>2016-05-25 09:36:05 +0000
committerkrasimir <krasimir@chalmers.se>2016-05-25 09:36:05 +0000
commitfaebebc8f4b4587c9c1849e20473ef9ef6678ded (patch)
tree4f3cc25fac14432315630ba5ca8235591c717769 /src/runtime/c/pgf/jit.c
parent41a3054e9be03f7496fdbe7d0716e7986524bb35 (diff)
pgf_generate_all now works with literals as well
Diffstat (limited to 'src/runtime/c/pgf/jit.c')
-rw-r--r--src/runtime/c/pgf/jit.c51
1 files changed, 51 insertions, 0 deletions
diff --git a/src/runtime/c/pgf/jit.c b/src/runtime/c/pgf/jit.c
index 011d10899..4fd80dac0 100644
--- a/src/runtime/c/pgf/jit.c
+++ b/src/runtime/c/pgf/jit.c
@@ -154,6 +154,57 @@ pgf_jit_predicate(PgfReader* rdr, PgfAbstr* abstr,
abscat->predicate = (PgfFunction) jit_get_ip().ptr;
+ if (strcmp(abscat->name, "String") == 0) {
+ gu_printf(out, err, " MK_STRING\n");
+
+ jit_prepare(2);
+ jit_pusharg_p(JIT_VCLOS);
+ jit_pusharg_p(JIT_VSTATE);
+ jit_finish(pgf_reasoner_mk_string);
+
+#ifdef PGF_JIT_DEBUG
+ gu_puts(" RET\n", out, err);
+#endif
+ // compile RET
+ jit_bare_ret();
+
+ return;
+ }
+
+ if (strcmp(abscat->name, "Int") == 0) {
+ gu_printf(out, err, " MK_INT\n");
+
+ jit_prepare(2);
+ jit_pusharg_p(JIT_VCLOS);
+ jit_pusharg_p(JIT_VSTATE);
+ jit_finish(pgf_reasoner_mk_int);
+
+#ifdef PGF_JIT_DEBUG
+ gu_puts(" RET\n", out, err);
+#endif
+ // compile RET
+ jit_bare_ret();
+
+ return;
+ }
+
+ if (strcmp(abscat->name, "Float") == 0) {
+ gu_printf(out, err, " MK_FLOAT\n");
+
+ jit_prepare(2);
+ jit_pusharg_p(JIT_VCLOS);
+ jit_pusharg_p(JIT_VSTATE);
+ jit_finish(pgf_reasoner_mk_float);
+
+#ifdef PGF_JIT_DEBUG
+ gu_puts(" RET\n", out, err);
+#endif
+ // compile RET
+ jit_bare_ret();
+
+ return;
+ }
+
PgfAbsFun* absfun = NULL;
PgfAbsFun* next_absfun = NULL;