self-hosted: implement Decl lookup
* Take advantage of coercing anonymous struct literals to struct types. * Reworks Module to favor Zig source as the primary use case. Breaks ZIR compilation, which will have to be restored in a future commit. * Decl uses src_index rather then src, pointing to an AST Decl node index, or ZIR Module Decl index, rather than a byte offset. * ZIR instructions have an `analyzed_inst` field instead of Module having a hash table. * Module.Fn loses the `fn_type` field since it is redundant with its `owner_decl` `TypedValue` type. * Implement Type and Value copying. A ZIR Const instruction's TypedValue is copied to the Decl arena during analysis, which allows freeing the ZIR text instructions post-analysis. * Don't flush the ELF file if there are compilation errors. * Function return types allow arbitrarily complex expressions. * AST->ZIR for function calls and return statements.
This commit is contained in:
@@ -7473,6 +7473,12 @@ static LLVMValueRef gen_const_val(CodeGen *g, ZigValue *const_val, const char *n
|
||||
continue;
|
||||
}
|
||||
ZigValue *field_val = const_val->data.x_struct.fields[i];
|
||||
if (field_val == nullptr) {
|
||||
add_node_error(g, type_struct_field->decl_node,
|
||||
buf_sprintf("compiler bug: generating const value for struct field '%s'",
|
||||
buf_ptr(type_struct_field->name)));
|
||||
codegen_report_errors_and_exit(g);
|
||||
}
|
||||
ZigType *field_type = field_val->type;
|
||||
assert(field_type != nullptr);
|
||||
if ((err = ensure_const_val_repr(nullptr, g, nullptr, field_val, field_type))) {
|
||||
|
||||
Reference in New Issue
Block a user