From b04a1b30903636bf97a8e04efe88e8a177855bcb Mon Sep 17 00:00:00 2001 From: Bruce Hill Date: Sat, 9 Mar 2024 16:03:38 -0500 Subject: Implement lambdas and closures --- types.c | 21 ++------------------- 1 file changed, 2 insertions(+), 19 deletions(-) (limited to 'types.c') diff --git a/types.c b/types.c index 0b08cf95..10a5a7a8 100644 --- a/types.c +++ b/types.c @@ -28,7 +28,7 @@ CORD type_to_cord(type_t *t) { return CORD_asprintf("{%r=>%r}", type_to_cord(table->key_type), type_to_cord(table->value_type)); } case ClosureType: { - return CORD_all("~", type_to_cord(Match(t, ClosureType)->fn)); + return type_to_cord(Match(t, ClosureType)->fn); } case FunctionType: { CORD c = "func("; @@ -261,24 +261,7 @@ bool can_promote(type_t *actual, type_t *needed) } if (needed->tag == ClosureType && actual->tag == FunctionType) - return can_promote(actual, Match(needed, ClosureType)->fn); - - // Function promotion: - if (needed->tag == FunctionType && actual->tag == FunctionType) { - auto needed_fn = Match(needed, FunctionType); - auto actual_fn = Match(actual, FunctionType); - for (arg_t *needed_arg = needed_fn->args, *actual_arg = actual_fn->args; - needed_arg || actual_arg; - needed_arg = needed_arg->next, actual_arg = actual_arg->next) { - - if (!needed_arg || !actual_arg) - return false; - - if (!type_eq(needed_arg->type, actual_arg->type)) - return false; - } - return true; - } + return type_eq(actual, Match(needed, ClosureType)->fn); return false; } -- cgit v1.2.3