Skip to content

Commit 6774451

Browse files
committed
Converted statements
1 parent a10ea9f commit 6774451

File tree

3 files changed

+60
-57
lines changed

3 files changed

+60
-57
lines changed

src/interpreter.c

Lines changed: 15 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ void execute(program_state* prog)
4242
statement* stmt;
4343

4444
while (*prog->pc < prog->stmt_list->size) {
45-
stmt = GET_STMT(prog->stmt_list, *prog->pc);
45+
stmt = &prog->stmt_list->a[*prog->pc];
4646
//print_statement(stmt);
4747

4848
switch (stmt->type) {
@@ -119,7 +119,7 @@ void execute(program_state* prog)
119119

120120
case END_COMPOUND_STMT:
121121
pop_scope(prog);//freeing all bindings with cur_parent
122-
prog->cur_parent = GET_STMT(prog->stmt_list, stmt->parent)->parent;
122+
prog->cur_parent = prog->stmt_list->a[stmt->parent].parent;
123123
break;
124124

125125
case CASE_STMT:
@@ -215,7 +215,7 @@ var_value execute_expr(program_state* prog, expression* e)
215215
var_value* var;
216216

217217
function* old_func, *func;
218-
cvector_void* old_stmt_list;
218+
cvector_statement* old_stmt_list;
219219
size_t* old_pc;
220220

221221
var_value result, left, right;
@@ -630,7 +630,7 @@ void execute_expr_list(program_state* prog, function* callee, expression* e)
630630
void execute_goto(program_state* prog, statement* stmt)
631631
{
632632
int ancestor;
633-
statement* target = GET_STMT(prog->stmt_list, stmt->jump_to);
633+
statement* target = &prog->stmt_list->a[stmt->jump_to];
634634
if (stmt->parent != target->parent) {
635635
if (is_ancestor(prog, stmt->parent, target->parent)) {
636636
apply_scope(prog, stmt->jump_to, target->parent, stmt->parent);
@@ -644,7 +644,7 @@ void execute_goto(program_state* prog, statement* stmt)
644644
} else {
645645
if (stmt->jump_to > *prog->pc) {
646646
binding* b;
647-
target = GET_STMT(prog->stmt_list, stmt->parent);
647+
target = &prog->stmt_list->a[stmt->parent];
648648
for (int i=0; i<target->bindings->size; ++i) {
649649
b = GET_BINDING(target->bindings, i);
650650
if (b->decl_stmt > *prog->pc) {
@@ -704,7 +704,7 @@ void clear_bindings(program_state* prog)
704704
binding* b;
705705

706706
while (prog->cur_parent >= 0) {
707-
stmt = GET_STMT(prog->stmt_list, prog->cur_parent);
707+
stmt = &prog->stmt_list->a[prog->cur_parent];
708708
for (int i=0; i<stmt->bindings->size; ++i) {
709709
b = GET_BINDING(stmt->bindings, i);
710710
if (b->decl_stmt > *prog->pc)
@@ -738,7 +738,7 @@ int is_ancestor(program_state* prog, int parent, int child)
738738
statement* stmt;
739739
int tmp = child;
740740
do {
741-
stmt = GET_STMT(prog->stmt_list, tmp);
741+
stmt = &prog->stmt_list->a[tmp];
742742
tmp = stmt->parent;
743743
} while (tmp >= 0 && tmp != parent);
744744

@@ -749,7 +749,7 @@ int is_ancestor(program_state* prog, int parent, int child)
749749
//to jump_to statement
750750
void apply_scope(program_state* prog, int jump_to, int child, int parent)
751751
{
752-
statement* stmt = GET_STMT(prog->stmt_list, child);
752+
statement* stmt = &prog->stmt_list->a[child];
753753
binding* b;
754754

755755
if (child != parent)
@@ -777,14 +777,14 @@ void remove_scope(program_state* prog, int jump_to, int child, int parent)
777777
binding *b;
778778

779779
while (child != parent) {
780-
stmt = GET_STMT(prog->stmt_list, child);
780+
stmt = &prog->stmt_list->a[child];
781781
child = stmt->parent;
782782
pop_scope(prog);
783783
}
784784

785785
prog->cur_parent = parent;
786786

787-
stmt = GET_STMT(prog->stmt_list, parent);
787+
stmt = &prog->stmt_list->a[parent];
788788

789789
for (int i=0; i<stmt->bindings->size; ++i) {
790790
b = GET_BINDING(stmt->bindings, i);
@@ -802,10 +802,11 @@ int find_lowest_common_ancestor(program_state* prog, int parent1, int parent2)
802802
//I can't think of a better way right now so just brute forcing it
803803
//parent stmt/block with highest index is lowest common ancestor
804804
int max = 0;
805-
stmt1 = GET_STMT(prog->stmt_list, parent1);
806-
stmt2 = GET_STMT(prog->stmt_list, parent2);
807-
for (statement* s1 = stmt1; s1 != (statement*)prog->stmt_list->a; s1 = GET_STMT(prog->stmt_list, s1->parent)) {
808-
for (statement* s2 = stmt1; s2 != (statement*)prog->stmt_list->a ; s2 = GET_STMT(prog->stmt_list, s2->parent)) {
805+
stmt1 = &prog->stmt_list->a[parent1];
806+
stmt2 = &prog->stmt_list->a[parent2];
807+
for (statement* s1 = stmt1; s1 != prog->stmt_list->a; s1 = &prog->stmt_list->a[s1->parent]) {
808+
// TODO typo? stmt2? also convert all these pointers to indices?
809+
for (statement* s2 = stmt1; s2 != prog->stmt_list->a ; s2 = &prog->stmt_list->a[s2->parent]) {
809810
if (s1->parent == s2->parent) {
810811
max = (s1->parent > max) ? s1->parent : max;
811812
}

0 commit comments

Comments
 (0)