bugfix: remaining bugs from `use` change
authorBrendan Hansen <brendan.f.hansen@gmail.com>
Tue, 28 Mar 2023 01:35:45 +0000 (20:35 -0500)
committerBrendan Hansen <brendan.f.hansen@gmail.com>
Tue, 28 Mar 2023 01:35:45 +0000 (20:35 -0500)
compiler/include/parser.h
compiler/src/parser.c
core/encoding/ini.onyx
core/onyx/cbindgen.onyx

index 76961fd98e2080f7bb240052bddab9e8203c4cce..0501ab87ea2de96cfda7fc0a6038319abc790b58 100644 (file)
@@ -51,6 +51,9 @@ typedef struct OnyxParser {
 
     b32 hit_unexpected_token : 1;
     b32 parse_calls : 1;
+
+    // Currently, package expressions are only allowed in certain places.
+    b32 allow_package_expressions : 1;
 } OnyxParser;
 
 const char* onyx_ast_node_kind_string(AstKind kind);
index 948c2388059c3a3800f710c4a7c332f7a138ac94..02a646218a09d3cc1e47af9b2d90d10f7f1f37d2 100644 (file)
@@ -565,7 +565,9 @@ static AstTyped* parse_factor(OnyxParser* parser) {
         }
 
         case Token_Type_Keyword_Package: {
-            onyx_report_warning(peek_token(-1)->pos, "Use of deprecated feature: package expression.");
+            if (!parser->allow_package_expressions)
+                onyx_report_warning(peek_token(-1)->pos, "Use of deprecated feature: package expression.");
+
             retval = (AstTyped *) parse_package_expression(parser);
             break;
         }
@@ -738,9 +740,11 @@ static AstTyped* parse_factor(OnyxParser* parser) {
                 defined->token = parser->curr - 1;
                 defined->type_node = (AstType *) &basic_type_bool;
 
+                parser->allow_package_expressions = 1;
                 expect_token(parser, '(');
                 defined->expr = parse_expression(parser, 0);
                 expect_token(parser, ')');
+                parser->allow_package_expressions = 0;
 
                 retval = (AstTyped *) defined;
                 break;
@@ -3746,6 +3750,7 @@ OnyxParser onyx_parser_create(bh_allocator alloc, OnyxTokenizer *tokenizer) {
     parser.tag_depth = 0;
     parser.overload_count = 0;
     parser.injection_point = NULL;
+    parser.allow_package_expressions = 0;
 
     parser.polymorph_context = (PolymorphicContext) {
         .root_node = NULL,
index 537123a3d83c9a3c02d227208c549ec520895ffb..fed04d1b22b4fd6aa6c1eb1cc83b14844ca906a4 100644 (file)
@@ -39,6 +39,7 @@ use core.io
 
 use core { aprintf }
 use core.intrinsics.types { type_is_struct }
+use runtime
 
 //
 // Represents if the parsing was successful or encountered an error.
index 66d8ba5d4c2a089030e34645c63f4a079238bf99..f2802ead8a4d1d59f171910b19003466babc43ce 100644 (file)
@@ -11,14 +11,15 @@ package cbindgen
 // #load "core/std"
 // #load "./module"
 //
-// use core
+// use core {*}
+// use your_module
 //
 // main :: () {
 //     path := module_path(#file);
 //     c_file_path := string.concat(path, "temporary.c");
 //     success := cbindgen.generate_c_binding(.{
 //         output_file            = c_file_path,
-//         foreign_block          = something.foreign_block,
+//         foreign_block          = your_module.foreign_block,
 //         cast_map               = .[],
 //         custom_implementations = .[],
 //         preamble               = .[
@@ -39,10 +40,12 @@ package cbindgen
 // }
 //
 
+use runtime
+
 #if #defined (runtime.Generated_Foreign_Info) {
 
-use core
-use runtime
+use core {package, *}
+use simd {*}
 
 #if runtime.compiler_os == .Linux {
     #if #defined (runtime.vars.CC) {
@@ -53,8 +56,6 @@ use runtime
 }
 
 
-use core
-use simd
 
 Cast_Mapping :: struct {
     type: type_expr;
@@ -193,7 +194,7 @@ compile_c_file :: (
     }
 
     write_function_body :: (writer, ff, cast_map, name_map) => {
-        use runtime.info;
+        use runtime.info {*};
 
         method_type := ff.type;
         method_info := cast (&Type_Info_Function) get_type_info(method_type);
@@ -232,7 +233,7 @@ compile_c_file :: (
     }
 
     print_body :: (writer, method_name, method_info, cast_map) => {
-        use runtime.info;
+        use runtime.info {*};
         callw, call := io.string_builder();
         defer io.buffer_stream_free(call);
         defer cfree(call);
@@ -278,7 +279,7 @@ compile_c_file :: (
     }
 
     type_to_wasm_type :: (t: type_expr, for_return := false) -> str {
-        use runtime.info;
+        use runtime.info {*};
 
         param_info := get_type_info(t);
         switch param_info.kind {
@@ -330,7 +331,7 @@ compile_c_file :: (
     }
 
     type_encoding :: (t: type_expr) -> str {
-        use runtime.info;
+        use runtime.info {*};
 
         param_info := get_type_info(t);
         switch param_info.kind {