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);
}
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;
}
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;
parser.tag_depth = 0;
parser.overload_count = 0;
parser.injection_point = NULL;
+ parser.allow_package_expressions = 0;
parser.polymorph_context = (PolymorphicContext) {
.root_node = NULL,
// #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 = .[
// }
//
+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) {
}
-use core
-use simd
Cast_Mapping :: struct {
type: type_expr;
}
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);
}
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);
}
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 {
}
type_encoding :: (t: type_expr) -> str {
- use runtime.info;
+ use runtime.info {*};
param_info := get_type_info(t);
switch param_info.kind {