Expression * crb_create_assign_expression(CRB_Boolean is_final, Expression *left, AssignmentOperator operator, Expression *operand) { Expression *exp; exp = crb_alloc_expression(ASSIGN_EXPRESSION); if (is_final) { if (left->type == INDEX_EXPRESSION) { crb_compile_error(ARRAY_ELEMENT_CAN_NOT_BE_FINAL_ERR, CRB_MESSAGE_ARGUMENT_END); } else if (operator != NORMAL_ASSIGN) { crb_compile_error(COMPLEX_ASSIGNMENT_OPERATOR_TO_FINAL_ERR, CRB_MESSAGE_ARGUMENT_END); } } exp->u.assign_expression.is_final = is_final; exp->u.assign_expression.left = left; exp->u.assign_expression.operator = operator; exp->u.assign_expression.operand = operand; return exp; }
int yyerror(char const *str) { char *near_token; if (yytext[0] == '\0') { near_token = "EOF"; } else { near_token = yytext; } crb_compile_error(PARSE_ERR, STRING_MESSAGE_ARGUMENT, "token", near_token, MESSAGE_ARGUMENT_END); return 0; }
void crb_function_define(char *identifier, CRB_ParameterList *parameter_list, CRB_Block *block) { CRB_FunctionDefinition *f; CRB_Interpreter *inter; if (crb_search_function_in_compile(identifier)) { crb_compile_error(FUNCTION_MULTIPLE_DEFINE_ERR, CRB_STRING_MESSAGE_ARGUMENT, "name", identifier, CRB_MESSAGE_ARGUMENT_END); return; } f = create_function_definition(identifier, parameter_list, CRB_FALSE, block); inter = crb_get_current_interpreter(); f->next = inter->function_list; inter->function_list = f; }
void crb_function_define(char *identifier, ParameterList *parameter_list, Block *block) { FunctionDefinition *f; CRB_Interpreter *iter; if (crb_search_function(identifier)) { crb_compile_error(FUNCTION_MULTIPLE_DEFINE_ERR, STRING_MESSAGE_ARGUMENT, "name", identifier, MESSAGE_ARGUMENT_END); return; } inter = crb_get_current_interpreter(); f = crb_malloc(sizeof(FunctionDefinition)); f->name = identifier; f->type = CROWBAR_FUNCTION_DEFINITION; f->u.crowbar_f.parameter = parameter_list; f->u.crowbar_f.block = block; f->next = inter->function_list; inter->function_list = f; }