added top-level procs without binding to symbol
authorBrendan Hansen <brendan.f.hansen@gmail.com>
Sat, 18 Jul 2020 04:53:09 +0000 (23:53 -0500)
committerBrendan Hansen <brendan.f.hansen@gmail.com>
Sat, 18 Jul 2020 04:53:09 +0000 (23:53 -0500)
onyx
progs/arrays.onyx
src/onyxparser.c

diff --git a/onyx b/onyx
index ccc9e93004e4a2f09bf42ac628b28351e302d621..0dd2270d77c0ac22e81e5a8033b1d8390916c712 100755 (executable)
Binary files a/onyx and b/onyx differ
index c4f6bd4c694f0b1d54db518bfede4922339d7c68..d0d56b65bf813735a532743103cd5f6c7cc29045 100644 (file)
@@ -47,7 +47,8 @@ printarr :: proc (arr: ^i32, len: i32) {
     }
 }
 
-main :: proc #export {
+// Don't need to bind this function to a symbol
+proc #export "main" {
     print(min(10.0, 12.0));
 
     global_arr = 0 as ^i32;
index 2110bfedc63f8d4111dc580bd2ddb16a09bc2cc7..8895cc427400eee5cfe7fb3e8abbcec2fafe0956 100644 (file)
@@ -125,7 +125,6 @@ static AstNumLit* parse_numeric_literal(OnyxParser* parser) {
 // ( <expr> )
 // - <factor>
 // ! <factor>
-// proc ...
 // <symbol> ( '(' <exprlist> ')' )?
 // <numlit>
 // 'true'
@@ -330,6 +329,7 @@ static inline i32 get_precedence(BinaryOp kind) {
 // <expr> *= <expr>
 // <expr> /= <expr>
 // <expr> %= <expr>
+// <factor>
 // With expected precedence rules
 static AstTyped* parse_expression(OnyxParser* parser) {
     bh_arr(AstBinaryOp*) tree_stack = NULL;
@@ -885,6 +885,9 @@ static AstTyped* parse_global_declaration(OnyxParser* parser) {
     return (AstTyped *) global_node;
 }
 
+// <proc>
+// <global>
+// <expr>
 static AstTyped* parse_top_level_expression(OnyxParser* parser) {
     if (parser->curr->type == Token_Type_Keyword_Proc) {
         AstFunction* func_node = parse_function_definition(parser);
@@ -914,6 +917,10 @@ static AstNode* parse_top_level_statement(OnyxParser* parser) {
                 return (AstNode *) use_node;
             }
 
+        case Token_Type_Keyword_Proc:
+            parse_top_level_expression(parser);
+            return NULL;
+
         case Token_Type_Symbol:
             {
                 OnyxToken* symbol = parser->curr;