Пример #1
0
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;
}
Пример #2
0
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;
}
Пример #3
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;
}
Пример #4
0
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;
}