for i: 0 .. 10 {
array_param[i] = 1000 + i;
}
- };
+ }
array_proc(arr);
for element: arr {
Entity_Type_File_Contents,
Entity_Type_Enum,
Entity_Type_Type_Alias,
- Entity_Type_Memory_Reservation,
+ Entity_Type_Memory_Reservation_Type,
Entity_Type_Use,
Entity_Type_Polymorphic_Proc,
Entity_Type_Foreign_Function_Header,
Entity_Type_Foreign_Global_Header,
Entity_Type_Function_Header,
Entity_Type_Global_Header,
+ Entity_Type_Memory_Reservation,
Entity_Type_Expression,
Entity_Type_Global,
Entity_Type_Overloaded_Function,
}
case Ast_Kind_Memres: {
+ ent.type = Entity_Type_Memory_Reservation_Type;
+ ent.mem_res = (AstMemRes *) node;
+ entity_heap_insert(&compiler_state->prog_info.entities, ent);
+
ent.type = Entity_Type_Memory_Reservation;
ent.mem_res = (AstMemRes *) node;
entity_heap_insert(&compiler_state->prog_info.entities, ent);
CHECK(overloaded_function, AstOverloadedFunction* func);
CHECK(struct, AstStructType* s_node);
CHECK(function_header, AstFunction* func);
+CHECK(memres_type, AstMemRes* memres);
CHECK(memres, AstMemRes* memres);
static inline void fill_in_array_count(AstType* type_node) {
return 0;
}
-b32 check_memres(AstMemRes* memres) {
+b32 check_memres_type(AstMemRes* memres) {
fill_in_type((AstTyped *) memres);
+ return 0;
+}
+b32 check_memres(AstMemRes* memres) {
if (memres->initial_value != NULL) {
fill_in_type(memres->initial_value);
check_expression(&memres->initial_value);
if (check_struct((AstStructType *) ent->type_alias)) return;
break;
+ case Entity_Type_Memory_Reservation_Type:
+ if (check_memres_type(ent->mem_res)) return;
+ break;
+
case Entity_Type_Memory_Reservation:
if (check_memres(ent->mem_res)) return;
break;
static void symres_overloaded_function(AstOverloadedFunction* ofunc);
static void symres_use_package(AstUsePackage* package);
static void symres_enum(AstEnumType* enum_node);
+static void symres_memres_type(AstMemRes** memres);
static void symres_memres(AstMemRes** memres);
static AstFieldAccess* make_field_access(AstTyped* node, char* field) {
if (func->scope == NULL)
func->scope = scope_create(semstate.node_allocator, semstate.curr_scope, func->token->pos);
+ func->flags |= Ast_Flag_Comptime;
+
bh_arr_each(AstParam, param, func->params) {
if (param->default_value != NULL) {
symres_expression(¶m->default_value);
}
}
-static void symres_memres(AstMemRes** memres) {
+static void symres_memres_type(AstMemRes** memres) {
(*memres)->type_node = symres_type((*memres)->type_node);
+}
+static void symres_memres(AstMemRes** memres) {
if ((*memres)->initial_value != NULL) {
symres_expression(&(*memres)->initial_value);
-
- // if ((*memres)->type_node == NULL)
- // (*memres)->type_node = (*memres)->initial_value->type_node;
}
}
next_state = Entity_State_Finalized;
break;
- case Entity_Type_Overloaded_Function: symres_overloaded_function(ent->overloaded_function); break;
- case Entity_Type_Expression: symres_expression(&ent->expr); break;
- case Entity_Type_Type_Alias: ent->type_alias = symres_type(ent->type_alias); break;
- case Entity_Type_Enum: symres_enum(ent->enum_type); break;
- case Entity_Type_Memory_Reservation: symres_memres(&ent->mem_res); break;
- case Entity_Type_Polymorphic_Proc: symres_polyproc(ent->poly_proc); break;
- case Entity_Type_String_Literal: symres_expression(&ent->expr); break;
+ case Entity_Type_Overloaded_Function: symres_overloaded_function(ent->overloaded_function); break;
+ case Entity_Type_Expression: symres_expression(&ent->expr); break;
+ case Entity_Type_Type_Alias: ent->type_alias = symres_type(ent->type_alias); break;
+ case Entity_Type_Enum: symres_enum(ent->enum_type); break;
+ case Entity_Type_Memory_Reservation_Type: symres_memres_type(&ent->mem_res); break;
+ case Entity_Type_Memory_Reservation: symres_memres(&ent->mem_res); break;
+ case Entity_Type_Polymorphic_Proc: symres_polyproc(ent->poly_proc); break;
+ case Entity_Type_String_Literal: symres_expression(&ent->expr); break;
default: break;
}
"File Contents",
"Enum",
"Type Alias",
- "Memory Reservation",
+ "Memory Reservation Type",
"Use",
"Polymorphic Proc",
"Foreign_Function Header",
"Foreign_Global Header",
"Function Header",
"Global Header",
+ "Memory Reservation",
"Expression",
"Global",
"Overloaded_Function",
break;
}
+ case Ast_Kind_Function: {
+ AstFunction* func = (AstFunction *) node;
+ *((u32 *) data) = get_element_idx(mod, func);
+ break;
+ }
+
case Ast_Kind_NumLit: {
// NOTE: This makes a big assumption that we are running on a
// little endian machine, since WebAssembly is little endian