mirror of
https://github.com/ziglang/zig.git
synced 2024-11-15 16:45:27 +00:00
array type syntax implies comptime
This commit is contained in:
parent
8e69a18d8c
commit
ef5d7ce463
@ -181,7 +181,6 @@ ScopeFnDef *create_fndef_scope(CodeGen *g, AstNode *node, Scope *parent, ZigFn *
|
||||
}
|
||||
|
||||
Scope *create_comptime_scope(CodeGen *g, AstNode *node, Scope *parent) {
|
||||
assert(node->type == NodeTypeCompTime || node->type == NodeTypeSwitchExpr);
|
||||
ScopeCompTime *scope = allocate<ScopeCompTime>(1);
|
||||
init_scope(g, &scope->base, ScopeIdCompTime, node, parent);
|
||||
return &scope->base;
|
||||
|
@ -5433,6 +5433,7 @@ static IrInstruction *ir_gen_array_type(IrBuilder *irb, Scope *scope, AstNode *n
|
||||
bool is_volatile = node->data.array_type.is_volatile;
|
||||
AstNode *align_expr = node->data.array_type.align_expr;
|
||||
|
||||
Scope *comptime_scope = create_comptime_scope(irb->codegen, node, scope);
|
||||
if (size_node) {
|
||||
if (is_const) {
|
||||
add_node_error(irb->codegen, node, buf_create_from_str("const qualifier invalid on array type"));
|
||||
@ -5447,11 +5448,11 @@ static IrInstruction *ir_gen_array_type(IrBuilder *irb, Scope *scope, AstNode *n
|
||||
return irb->codegen->invalid_instruction;
|
||||
}
|
||||
|
||||
IrInstruction *size_value = ir_gen_node(irb, size_node, scope);
|
||||
IrInstruction *size_value = ir_gen_node(irb, size_node, comptime_scope);
|
||||
if (size_value == irb->codegen->invalid_instruction)
|
||||
return size_value;
|
||||
|
||||
IrInstruction *child_type = ir_gen_node(irb, child_type_node, scope);
|
||||
IrInstruction *child_type = ir_gen_node(irb, child_type_node, comptime_scope);
|
||||
if (child_type == irb->codegen->invalid_instruction)
|
||||
return child_type;
|
||||
|
||||
@ -5459,14 +5460,14 @@ static IrInstruction *ir_gen_array_type(IrBuilder *irb, Scope *scope, AstNode *n
|
||||
} else {
|
||||
IrInstruction *align_value;
|
||||
if (align_expr != nullptr) {
|
||||
align_value = ir_gen_node(irb, align_expr, scope);
|
||||
align_value = ir_gen_node(irb, align_expr, comptime_scope);
|
||||
if (align_value == irb->codegen->invalid_instruction)
|
||||
return align_value;
|
||||
} else {
|
||||
align_value = nullptr;
|
||||
}
|
||||
|
||||
IrInstruction *child_type = ir_gen_node(irb, child_type_node, scope);
|
||||
IrInstruction *child_type = ir_gen_node(irb, child_type_node, comptime_scope);
|
||||
if (child_type == irb->codegen->invalid_instruction)
|
||||
return child_type;
|
||||
|
||||
|
@ -162,3 +162,12 @@ test "comptime evalutating function that takes array by value" {
|
||||
_ = comptime testArrayByValAtComptime(arr);
|
||||
_ = comptime testArrayByValAtComptime(arr);
|
||||
}
|
||||
|
||||
test "implicit comptime in array type size" {
|
||||
var arr: [plusOne(10)]bool = undefined;
|
||||
assert(arr.len == 11);
|
||||
}
|
||||
|
||||
fn plusOne(x: u32) u32 {
|
||||
return x + 1;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user