added: flag for if function is lambda
authorBrendan Hansen <brendan.f.hansen@gmail.com>
Wed, 19 Apr 2023 01:38:18 +0000 (20:38 -0500)
committerBrendan Hansen <brendan.f.hansen@gmail.com>
Wed, 19 Apr 2023 01:38:18 +0000 (20:38 -0500)
compiler/include/astnodes.h
compiler/src/checker.c
compiler/src/parser.c

index 7f2c8e10ff3178f34f063a4974c76e3180745a02..74c6b48a7efca511a6c5b656b8705fbfd98a25ef 100644 (file)
@@ -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 {
index 9d30c0775f3b8ab963b3e7d755bccc9d5d22f2e3..ca4ceb898d41f52cbdd5d143b636750e224cc154 100644 (file)
@@ -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;
 
index e456b8a7e96b4b0c41ec37ed64dc1c21ca964841..423f0256188a1aefa70455065bcbda0aeae90352 100644 (file)
@@ -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;
         }