comptime-state propagation through generated struct field resolution
This commit is contained in:
@@ -1150,7 +1150,7 @@ ct_eval_expr :: proc(
|
||||
resolved := type_from_syntax(checker, expr.type, state.pkg, state.file)
|
||||
return ct_add_value(state, Ct_Value{kind=.Type, type=types.INVALID, index=u64(resolved)}), ct_flow(.Normal), types.is_valid(resolved)
|
||||
case .Anonymous_Struct_Type:
|
||||
resolved := resolve_generated_struct_type(checker, expr_id, state.pkg, state.file)
|
||||
resolved := resolve_generated_struct_type(checker, expr_id, state.pkg, state.file, state)
|
||||
return ct_add_value(state, Ct_Value{kind=.Type, type=types.INVALID, index=u64(resolved)}), ct_flow(.Normal), types.is_valid(resolved)
|
||||
case .Enum_Literal:
|
||||
return ct_eval_enum_literal(state, expr, expected, depth+1)
|
||||
@@ -4451,7 +4451,17 @@ eval_integer_constant_in_context :: proc(
|
||||
}
|
||||
state := ct_state_make(checker, pkg, file, types.INVALID, values, diagnose=false)
|
||||
defer ct_state_destroy(&state)
|
||||
value, flow, ok := ct_eval_expr(&state, expr_id, types.INVALID, depth)
|
||||
return eval_integer_constant_in_state(&state, expr_id, depth)
|
||||
}
|
||||
|
||||
eval_integer_constant_in_state :: proc(state: ^Ct_State, expr_id: ast.Expr_Id, depth := 0) -> Constant {
|
||||
if depth > 64 || expr_id == ast.INVALID_EXPR || int(expr_id) >= len(state.checker.ast_module.exprs) {
|
||||
return Constant{kind=.Not_Constant}
|
||||
}
|
||||
previous_silent := state.silent
|
||||
state.silent = true
|
||||
defer state.silent = previous_silent
|
||||
value, flow, ok := ct_eval_expr(state, expr_id, types.INVALID, depth)
|
||||
if !ok || flow.kind != .Normal {
|
||||
#partial switch state.error {
|
||||
case .Overflow:
|
||||
@@ -4465,7 +4475,7 @@ eval_integer_constant_in_context :: proc(
|
||||
}
|
||||
return Constant{kind=.Not_Constant}
|
||||
}
|
||||
integer, integer_ok := ct_integer_value(&state, value)
|
||||
integer, integer_ok := ct_integer_value(state, value)
|
||||
if !integer_ok {
|
||||
return Constant{kind=.Not_Constant}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user