node = *pnode;
}
+ if (node->kind == Ast_Kind_Function) {
+ if (maybe_create_capture_builder_for_function_expression(pnode)) {
+ return TYPE_MATCH_SPECIAL;
+ }
+ }
+
+
// HACK: NullProcHack
// The null_proc matches any procedure, and because of that, will cause a runtime error if you
// try to call it.
TypeMatch type_name; \
type_name = unify_node_and_type(expr, type); \
if (type_name == TYPE_MATCH_YIELD) YIELD((*expr)->token->pos, "Waiting on type checking."); \
+ if (type_name == TYPE_MATCH_SPECIAL) return Check_Return_To_Symres; \
if (type_name == TYPE_MATCH_FAILED)
#define CONCAT(a, b) a##_##b
return Check_Error;
}
+ if (tm == TYPE_MATCH_SPECIAL) {
+ return Check_Return_To_Symres;
+ }
+
if (tm == TYPE_MATCH_YIELD) YIELD(call->token->pos, "Waiting on argument type checking.");
call->flags |= Ast_Flag_Has_Been_Checked;
}
AstTyped* option = parse_expression(parser, 0);
+ option->flags &= ~Ast_Flag_Function_Is_Lambda;
add_overload_option(&ofunc->overloads, order++, option);
if (parser->curr->type != '}')
}
add_overload->overload = parse_expression(parser, 0);
+ add_overload->overload->flags &= ~Ast_Flag_Function_Is_Lambda;
ENTITY_SUBMIT(add_overload);
return;
assert(arg_arr[arg_pos]->kind == Ast_Kind_Argument);
TypeMatch tm = unify_node_and_type_(&arg_arr[arg_pos]->value, formal_params[arg_pos], permanent);
if (tm == TYPE_MATCH_YIELD) return tm;
+ if (tm == TYPE_MATCH_SPECIAL) return tm;
if (tm == TYPE_MATCH_FAILED) {
if (error != NULL) {
error->pos = arg_arr[arg_pos]->token->pos;