From ad16a9d01867f521ab70bd4847fc613ee56fc2e5 Mon Sep 17 00:00:00 2001 From: Brendan Hansen Date: Tue, 18 Apr 2023 20:38:18 -0500 Subject: [PATCH] added: flag for if function is lambda --- compiler/include/astnodes.h | 2 ++ compiler/src/checker.c | 2 ++ compiler/src/parser.c | 3 +++ 3 files changed, 7 insertions(+) diff --git a/compiler/include/astnodes.h b/compiler/include/astnodes.h index 7f2c8e10..74c6b48a 100644 --- a/compiler/include/astnodes.h +++ b/compiler/include/astnodes.h @@ -292,6 +292,8 @@ typedef enum AstFlags { Ast_Flag_Poly_Call_From_Auto = BH_BIT(24), Ast_Flag_Binding_Isnt_Captured = BH_BIT(25), + + Ast_Flag_Function_Is_Lambda = BH_BIT(26) } AstFlags; typedef enum UnaryOp { diff --git a/compiler/src/checker.c b/compiler/src/checker.c index 9d30c077..ca4ceb89 100644 --- a/compiler/src/checker.c +++ b/compiler/src/checker.c @@ -2587,6 +2587,8 @@ CheckStatus check_overloaded_function(AstOverloadedFunction* ofunc) { return Check_Error; } + node->flags &= ~Ast_Flag_Function_Is_Lambda; + if (node->kind == Ast_Kind_Function) { AstFunction* func = (AstFunction *) node; diff --git a/compiler/src/parser.c b/compiler/src/parser.c index e456b8a7..423f0256 100644 --- a/compiler/src/parser.c +++ b/compiler/src/parser.c @@ -393,10 +393,12 @@ static AstTyped* parse_factor(OnyxParser* parser) { switch ((u16) parser->curr->type) { case '(': { if (parse_possible_function_definition(parser, &retval)) { + retval->flags |= Ast_Flag_Function_Is_Lambda; ENTITY_SUBMIT(retval); break; } if (parse_possible_quick_function_definition(parser, &retval)) { + retval->flags |= Ast_Flag_Function_Is_Lambda; ENTITY_SUBMIT(retval); break; } @@ -3160,6 +3162,7 @@ static AstBinding* parse_top_level_binding(OnyxParser* parser, OnyxToken* symbol if (func->intrinsic_name == NULL) func->intrinsic_name = symbol; func->name = generate_name_within_scope(parser, symbol); + func->flags &= ~Ast_Flag_Function_Is_Lambda; break; } -- 2.25.1