Exemplo n.º 1
0
    int check_func(ast::Func* func) {
        assert(func != nullptr);

        for (auto it = func->arguments.begin(); it != func->arguments.end(); ++it) {
            declare_variable(*it);
        }
        // Allocate memory on stack for local variables
        for (auto it = func->local_variables.begin(); it != func->local_variables.end(); ++it) {
            declare_variable(*it);
        }
        this->current_function = func;
        check_body(func->body);

        // TODO: check for return value?
        auto return_ = std::make_shared<ast::Return>();
        return_->value =
            std::make_shared<ast::Constant>(default_value_for(func->return_value));
        func->body.push_back(return_);
        this->current_function = nullptr;
        variables.clear();
        return EXIT_SUCCESS;
    }
int main(int argc, char **argv) {
    if (argc < 2) {
        error_message();
        exit(0);
    }

    char *inputName;
    char *destName;
    char *titleString;
    char *destTitleString;

    declare_variable(&inputName, &destName, &titleString, &destTitleString, argv[1]);
    data_relocate(inputName, destName, titleString, destTitleString);    
    print_data(destName, destTitleString);

    return 0;
}
Exemplo n.º 3
0
static plc_t declare_names(int operand,
                    const variable_t var,                      
                    plc_t plc){

    char * name = var->name;
    if(name){
        unsigned char index = var->index;
        char * byte = get_param_val("BYTE", var->params);
        if(byte){
            int idx = atoi(byte) * BYTESIZE;
            char * bit = get_param_val("BIT", var->params);
            if(bit){
                idx += atoi(bit);
            } 
       
            if(idx>=0 && idx < 256){
                index = (unsigned char)idx;
            }
        }
        return declare_variable(plc, operand, index, name); 
    } else return plc;
} 
Exemplo n.º 4
0
Arquivo: interp.c Projeto: mdoug/FIAL
int FIAL_interpret (struct FIAL_exec_env *env)
{
	block *b = NULL;
	node *stmt = NULL;

	if(!env || !env->block_stack)
		return -1;
	if(!env->block_stack->stmt)
		return 1;


	for(;;) {
		b = env->block_stack;
		stmt = b->stmt->left;

		assert(stmt);
		switch(stmt->type) {
		case AST_VAR_DECL:
			ER(declare_variable(stmt, env));
			break;
		case AST_ASSIGN:
			ER(assign_variable(stmt, env));
			break;
		case AST_IF:
			ER(execute_if(stmt, env));
			break;
		case AST_BLOCK:
			ER(push_block(env, stmt));
			env->skip_advance = 1;
			break;
		case AST_CALL_A:
			ER(execute_call_A(stmt, env));
			break;
		case AST_CALL_B:
			ER(execute_call_B(stmt, env));
			break;
		case AST_BREAK:
			ER(execute_break(stmt, env));
			break;
		case AST_CONTINUE:
			ER(execute_continue(stmt, env));
			break;
		default:
			assert(0);
			/*is this an error?  I could just skip unknown
			 * statements...*/
			break;
		}
		if(!env->block_stack)
			break;
		if(env->skip_advance)
			env->skip_advance = 0;
		else
			env->block_stack->stmt = env->block_stack->stmt->right;
		while(!env->block_stack->stmt) {
			pop_block(env);
			if(!env->block_stack) {
				return 0;
			}
			assert(env->block_stack->stmt);
			env->block_stack->stmt = env->block_stack->stmt->right;
		}
	}
	return 0;
}
Exemplo n.º 5
0
void dynamic_context::add_variable(ulong varid, store::Item_t& value)
{
  declare_variable(varid, false);
  set_variable(varid, NULL, QueryLoc::null, value);
}