Exemplo n.º 1
0
 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);
		}

	}
}
Exemplo n.º 8
0
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;
}
Exemplo n.º 9
0
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;	
}