represents a procedure that matches every type; used for having a 'null' procedure when one isn't necessary
return true;
}
-null :: cast(rawptr) 0;
+// HACK: NullProcHack
+null_proc :: proc () #null ---
+null :: cast(rawptr) 0;
OnyxContext :: struct {
allocator : Allocator;
Ast_Flag_Cannot_Take_Addr = BH_BIT(20),
Ast_Flag_Struct_Mem_Used = BH_BIT(21),
+
+ // HACK: NullProcHack
+ Ast_Flag_Proc_Is_Null = BH_BIT(22),
} AstFlags;
typedef enum UnaryOp {
if (ent.expr->token) {
OnyxFilePos pos = ent.expr->token->pos;
- printf("\e[0K%s on %s:%d:%d\n", entity_state_strings[ent.state], pos.filename, pos.line, pos.column);
+ printf("\e[0K%s on %s in %s:%d:%d\n", entity_state_strings[ent.state], entity_type_strings[ent.type], pos.filename, pos.line, pos.column);
}
}
}
}
+ // HACK: NullProcHack
+ else if (parse_possible_directive(parser, "null")) {
+ func_def->flags |= Ast_Flag_Proc_Is_Null;
+ }
+
else {
OnyxToken* directive_token = expect_token(parser, '#');
OnyxToken* symbol_token = expect_token(parser, Token_Type_Symbol);
node = *pnode;
}
+ // HACK: NullProcHack
+ if (type->kind == Type_Kind_Function && (node->flags & Ast_Flag_Proc_Is_Null) != 0) return 1;
+
if (types_are_compatible(node->type, type)) return 1;
if (node_is_auto_cast((AstNode *) node)) {
// If the node is an auto cast, we convert it to a cast node which will reports errors if