mirror of
https://github.com/GrammaticalFramework/gf-core.git
synced 2026-04-13 14:59:32 -06:00
bugfix in the pattern matching compiler and a number of other fixes that I somehow did not push before
This commit is contained in:
@@ -119,7 +119,8 @@ typedef enum {
|
||||
PGF_INSTR_PUSH = 9,
|
||||
PGF_INSTR_EVAL = 10,
|
||||
PGF_INSTR_RET = 13,
|
||||
PGF_INSTR_FAIL = 15
|
||||
PGF_INSTR_DROP = 15,
|
||||
PGF_INSTR_FAIL = 16
|
||||
} PgfInstruction;
|
||||
|
||||
struct PgfPGF {
|
||||
|
||||
@@ -1093,6 +1093,28 @@ pgf_jit_function(PgfReader* rdr, PgfAbstr* abstr,
|
||||
jit_bare_ret(a*sizeof(PgfClosure*));
|
||||
break;
|
||||
}
|
||||
case PGF_INSTR_DROP: {
|
||||
size_t n = pgf_read_int(rdr);
|
||||
size_t target = pgf_read_int(rdr);
|
||||
|
||||
#ifdef PGF_JIT_DEBUG
|
||||
gu_printf(out, err, "DROP %d %03d\n", n, target);
|
||||
#endif
|
||||
|
||||
if (n > 0)
|
||||
jit_addi_p(JIT_SP, JIT_SP, n*sizeof(PgfClosure*));
|
||||
|
||||
jit_insn *jump =
|
||||
jit_jmpi(jit_forward());
|
||||
|
||||
PgfSegmentPatch label_patch;
|
||||
label_patch.segment = target;
|
||||
label_patch.ref = jump;
|
||||
label_patch.is_abs = false;
|
||||
gu_buf_push(rdr->jit_state->segment_patches, PgfSegmentPatch, label_patch);
|
||||
|
||||
break;
|
||||
}
|
||||
case PGF_INSTR_FAIL:
|
||||
#ifdef PGF_JIT_DEBUG
|
||||
gu_printf(out, err, "FAIL\n");
|
||||
|
||||
Reference in New Issue
Block a user