int check_operation(ast::abstract::Operation* op) { assert(op != nullptr); switch(*op) { case ast::VariableNode: return check_variable(dynamic_cast<ast::Variable*>(op)); break; case ast::ConstantNode: return check_constant(dynamic_cast<ast::Constant*>(op)); break; case ast::CastNode: return check_cast(dynamic_cast<ast::Cast*>(op)); break; case ast::UnOpNode: return check_un_op(dynamic_cast<ast::UnOp*>(op)); break; case ast::BinOpNode: return check_bin_op(dynamic_cast<ast::BinOp*>(op)); break; case ast::CallNode: return check_call(dynamic_cast<ast::Call*>(op)); break; } assert(false); return EXIT_FAILURE; }
void polish_varnum_interpret(program *prog, player *user, polish_stack *pol_stack) { ////////////////////////// Testing static int first_pass = 0; if(first_pass == 0){ set_up_test("Polish Varnum Interpret Suite", "Test of polish_varnum_interpret()", test_polish_varnum_interpret); ++first_pass; } ////////////////////////// if(user -> constant_checker == on){ push_to_stack(pol_stack, user -> current_constant); } else if(user -> variable_checker == on){ check_variable(user); push_to_stack(pol_stack, user -> variable_values[ user -> current_variable ]); } }
void fd_interpret(player *user) { ////////////////////////// Testing static int first_pass = 0; if(first_pass == 0){ set_up_test("FD Suite (Interpreting)", "Test of fd_interpret()", test_fd_interpret); ++first_pass; } ////////////////////////// if(user -> constant_checker == on){ draw_angled_line(user, user -> current_constant); } else if(user -> variable_checker == on){ check_variable(user); draw_angled_line(user, user -> variable_values[ user -> current_variable ]); } else{ clear_screen(); ERROR("\nNeither a constant nor variable was assigned before attempting to move forward.\n\n"); } }
void polish_varnum_interpret(program *prog, player *user, polish_stack *pol_stack) { if(user -> constant_checker == on){ push_to_stack(pol_stack, user -> current_constant); } else if(user -> variable_checker == on){ check_variable(user); push_to_stack(pol_stack, user -> variable_values[ user -> current_variable ]); } }
void fd_interpret(player *user) { if(user -> constant_checker == on){ draw_angled_line(user, user -> current_constant); } else if(user -> variable_checker == on){ check_variable(user); draw_angled_line(user, user -> variable_values[ user -> current_variable ]); } }
void lt_rt_interpret(player *user, rt_lt direction) { if(user -> constant_checker == on){ lt_rt_interpret_case(user, direction, user -> current_constant); } else if(user -> variable_checker == on){ check_variable(user); lt_rt_interpret_case(user, direction, user -> variable_values[ user -> current_variable ]); } }
void lt_rt_interpret(player *user, rt_lt direction) { ////////////////////////// Testing static int first_pass = 0; if(first_pass == 0){ set_up_test("LT/ RT Interpreting Suite", "Test of lt_rt_interpret()", test_lt_rt_interpret); ++first_pass; } ////////////////////////// if(user -> constant_checker == on){ if(direction == lt_dir){ user -> angle += user -> current_constant; adjust_angle(user); } else{ user -> angle -= user -> current_constant; adjust_angle(user); } } else if(user -> variable_checker == on){ check_variable(user); if(direction == lt_dir){ user -> angle += user -> variable_values[ user -> current_variable ]; adjust_angle(user); } else{ user -> angle -= user -> variable_values[ user -> current_variable ]; adjust_angle(user); } } }
struct code* create_code_var (char *name, struct symbol *params, struct symbol *vars) { struct code *c; struct symbol *s; check_variable (name, params, vars); s = table_find_symbol (name, vars); if (s != NULL) { c = create_code (TT_VARIABLE, NULL, NULL); c->name = strdup (name); c->reg = s->reg; return c; } s = table_find_symbol (name, params); assert (s != NULL); c = create_code (TT_VARIABLE, NULL, NULL); c->name = strdup (name); c->reg = s->reg; return c; }
code_ptr* create_code_var(char* name, symbol* params, symbol* vars) { char* reg; code_ptr* c; check_variable(name, params, vars); // First look for params reg = tbl_find_reg(name, params); if (reg == NULL) { // 'name' not found @params, look @vars reg = tbl_find_reg(name, vars); if (reg == NULL) { printf("THIS SHOULD NEVER HAPPEN: create_code_var(%s)\n", name); tbl_print(params); tbl_print(vars); exit(3); } } c = create_code(TT_VARIABLE, (code_ptr *)NULL, (code_ptr *)NULL); c->name = strdup(name); c->reg = reg; return c; }