aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorTadeo Kondrak <me@tadeo.ca>2020-09-26 14:42:43 -0600
committerTadeo Kondrak <me@tadeo.ca>2020-10-01 15:01:28 -0600
commita12203d2be2ff1021d8faa9b87c53af091f0bd01 (patch)
tree8bb97c39c47b4bdad7fb7b34d8c3c684361dad46 /src
parent70c507911a738538b8ef4df2b52184512e7d86a8 (diff)
downloadzig-a12203d2be2ff1021d8faa9b87c53af091f0bd01.tar.gz
zig-a12203d2be2ff1021d8faa9b87c53af091f0bd01.zip
Switch TypeInfo alignment fields from u29 to comptime_int
Diffstat (limited to 'src')
-rw-r--r--src/stage1/ir.cpp37
1 files changed, 17 insertions, 20 deletions
diff --git a/src/stage1/ir.cpp b/src/stage1/ir.cpp
index 5c58b0cb5a..8da207cab7 100644
--- a/src/stage1/ir.cpp
+++ b/src/stage1/ir.cpp
@@ -25027,9 +25027,9 @@ static ZigValue *create_ptr_like_type_info(IrAnalyze *ira, IrInst *source_instr,
fields[2]->special = ConstValSpecialStatic;
fields[2]->type = ira->codegen->builtin_types.entry_bool;
fields[2]->data.x_bool = attrs_type->data.pointer.is_volatile;
- // alignment: u32
+ // alignment: comptime_int
ensure_field_index(result->type, "alignment", 3);
- fields[3]->type = ira->codegen->builtin_types.entry_u29;
+ fields[3]->type = ira->codegen->builtin_types.entry_num_lit_int;
if (attrs_type->data.pointer.explicit_alignment != 0) {
fields[3]->special = ConstValSpecialStatic;
bigint_init_unsigned(&fields[3]->data.x_bigint, attrs_type->data.pointer.explicit_alignment);
@@ -25432,12 +25432,14 @@ static Error ir_make_type_info_value(IrAnalyze *ira, IrInst* source_instr, ZigTy
union_field_val->type = type_info_union_field_type;
ZigValue **inner_fields = alloc_const_vals_ptrs(ira->codegen, 3);
+ // field_type: type
inner_fields[1]->special = ConstValSpecialStatic;
inner_fields[1]->type = ira->codegen->builtin_types.entry_type;
inner_fields[1]->data.x_type = union_field->type_entry;
+ // alignment: comptime_int
inner_fields[2]->special = ConstValSpecialStatic;
- inner_fields[2]->type = ira->codegen->builtin_types.entry_u29;
+ inner_fields[2]->type = ira->codegen->builtin_types.entry_num_lit_int;
bigint_init_unsigned(&inner_fields[2]->data.x_bigint, union_field->align);
ZigValue *name = create_const_str_lit(ira->codegen, union_field->name)->data.x_ptr.data.ref.pointee;
@@ -25522,12 +25524,14 @@ static Error ir_make_type_info_value(IrAnalyze *ira, IrInst* source_instr, ZigTy
}
set_optional_payload(inner_fields[2], struct_field->init_val);
+ // is_comptime: bool
inner_fields[3]->special = ConstValSpecialStatic;
inner_fields[3]->type = ira->codegen->builtin_types.entry_bool;
inner_fields[3]->data.x_bool = struct_field->is_comptime;
+ // alignment: comptime_int
inner_fields[4]->special = ConstValSpecialStatic;
- inner_fields[4]->type = ira->codegen->builtin_types.entry_u29;
+ inner_fields[4]->type = ira->codegen->builtin_types.entry_num_lit_int;
bigint_init_unsigned(&inner_fields[4]->data.x_bigint, struct_field->align);
ZigValue *name = create_const_str_lit(ira->codegen, struct_field->name)->data.x_ptr.data.ref.pointee;
@@ -25748,17 +25752,6 @@ static Error get_const_field_bool(IrAnalyze *ira, AstNode *source_node, ZigValue
return ErrorNone;
}
-static Error get_const_field_u29(IrAnalyze *ira, AstNode *source_node, ZigValue *struct_value,
- const char *name, size_t field_index, uint32_t *out)
-{
- ZigValue *value = get_const_field(ira, source_node, struct_value, name, field_index);
- if (value == nullptr)
- return ErrorSemanticAnalyzeFail;
- assert(value->type == ira->codegen->builtin_types.entry_u29);
- *out = bigint_as_u32(&value->data.x_bigint);
- return ErrorNone;
-}
-
static BigInt *get_const_field_lit_int(IrAnalyze *ira, AstNode *source_node, ZigValue *struct_value, const char *name, size_t field_index)
{
ZigValue *value = get_const_field(ira, source_node, struct_value, name, field_index);
@@ -25888,8 +25881,8 @@ static ZigType *type_info_to_type(IrAnalyze *ira, IrInst *source_instr, ZigTypeI
return ira->codegen->invalid_inst_gen->value->type;
}
- uint32_t alignment;
- if ((err = get_const_field_u29(ira, source_instr->source_node, payload, "alignment", 3, &alignment)))
+ BigInt *alignment = get_const_field_lit_int(ira, source_instr->source_node, payload, "alignment", 3);
+ if (alignment == nullptr)
return ira->codegen->invalid_inst_gen->value->type;
bool is_const;
@@ -25916,7 +25909,7 @@ static ZigType *type_info_to_type(IrAnalyze *ira, IrInst *source_instr, ZigTypeI
is_const,
is_volatile,
ptr_len,
- alignment,
+ bigint_as_u32(alignment),
0, // bit_offset_in_host
0, // host_int_bytes
is_allowzero,
@@ -26153,8 +26146,10 @@ static ZigType *type_info_to_type(IrAnalyze *ira, IrInst *source_instr, ZigTypeI
}
if ((err = get_const_field_bool(ira, source_instr->source_node, field_value, "is_comptime", 3, &field->is_comptime)))
return ira->codegen->invalid_inst_gen->value->type;
- if ((err = get_const_field_u29(ira, source_instr->source_node, field_value, "alignment", 4, &field->align)))
+ BigInt *alignment = get_const_field_lit_int(ira, source_instr->source_node, field_value, "alignment", 4);
+ if (alignment == nullptr)
return ira->codegen->invalid_inst_gen->value->type;
+ field->align = bigint_as_u32(alignment);
}
return entry;
@@ -26324,8 +26319,10 @@ static ZigType *type_info_to_type(IrAnalyze *ira, IrInst *source_instr, ZigTypeI
return ira->codegen->invalid_inst_gen->value->type;
field->type_val = type_value;
field->type_entry = type_value->data.x_type;
- if ((err = get_const_field_u29(ira, source_instr->source_node, field_value, "alignment", 2, &field->align)))
+ BigInt *alignment = get_const_field_lit_int(ira, source_instr->source_node, field_value, "alignment", 2);
+ if (alignment == nullptr)
return ira->codegen->invalid_inst_gen->value->type;
+ field->align = bigint_as_u32(alignment);
}
return entry;
}