first pass at assignment

This commit is contained in:
Stephen Dolan committed 2012-08-27 10:12:02 +01:00
1 parent a847d2250f
commit 6c8b55793a
8 files changed
+117 -11

No files matched your search

+19
View File
@@ -288,6 +288,25 @@ block gen_collect(block expr) {
return c;
}
block gen_assign(block expr) {
block c = gen_noop();
block_append(&c, gen_op_simple(DUP));
block result_var = block_bind(gen_op_var_unbound(STOREV, "result"),
gen_noop(), OP_HAS_VARIABLE);
block_append(&c, result_var);
block loop = gen_noop();
block_append(&loop, gen_op_simple(DUP));
block_append(&loop, expr);
block_append(&loop, gen_op_var_bound(ASSIGN, result_var));
block_append(&loop, gen_op_simple(BACKTRACK));
block_append(&c, gen_op_target(FORK, loop));
block_append(&c, loop);
block_append(&c, gen_op_var_bound(LOADV, result_var));
return c;
}
block gen_else(block a, block b) {
assert(0);
}