This commit is contained in:
Krzosa Karol
2022-09-30 20:07:24 +02:00
parent 6cd0596fd5
commit 4c6497c5d6
2 changed files with 15 additions and 11 deletions

View File

@@ -971,14 +971,13 @@ try_propagating_resolved_type_to_untyped_literals(Ast *ast, Ast_Type *type, Ast_
} }
} }
// @todo: Remove compound context
function Ast_Type * function Ast_Type *
resolve_typespec(Ast_Expr *ast, Resolve_Flag flags, Ast_Type *compound_context = 0){ resolve_typespec(Ast_Expr *ast, Resolve_Flag flags){
if(!ast && is_flag_set(flags, AST_CAN_BE_NULL)) if(!ast && is_flag_set(flags, AST_CAN_BE_NULL))
return 0; return 0;
Scratch scratch; Scratch scratch;
Operand resolved = resolve_expr(ast, flags | RESOLVE_TYPESPEC, compound_context, 0); Operand resolved = resolve_expr(ast, flags | RESOLVE_TYPESPEC, 0, 0);
if(is_flag_set(flags, RESOLVE_TYPESPEC_COMPLETE)) if(is_flag_set(flags, RESOLVE_TYPESPEC_COMPLETE))
type_complete(resolved.type_val); type_complete(resolved.type_val);
if(resolved.type != type_type) if(resolved.type != type_type)
@@ -986,9 +985,8 @@ resolve_typespec(Ast_Expr *ast, Resolve_Flag flags, Ast_Type *compound_context =
return resolved.type_val; return resolved.type_val;
} }
// @todo: Remove compound context
function Operand function Operand
resolve_and_require_bool(const char *error, Ast_Expr *expr, Resolve_Flag flags, Ast_Type *compound_context = 0){ resolve_and_require_bool(const char *error, Ast_Expr *expr, Resolve_Flag flags){
if(!expr){ if(!expr){
if(flags == AST_CAN_BE_NULL) if(flags == AST_CAN_BE_NULL)
return {}; return {};
@@ -996,7 +994,7 @@ resolve_and_require_bool(const char *error, Ast_Expr *expr, Resolve_Flag flags,
} }
Scratch scratch; Scratch scratch;
Operand op = resolve_expr(expr, flags, compound_context, 0); Operand op = resolve_expr(expr, flags, 0, 0);
if(!is_bool(op.type)){ if(!is_bool(op.type)){
compiler_error(expr->pos, "Expected type [Bool] got instead type %Q :: %s", typestring(op.type), error); compiler_error(expr->pos, "Expected type [Bool] got instead type %Q :: %s", typestring(op.type), error);
} }
@@ -1004,10 +1002,9 @@ resolve_and_require_bool(const char *error, Ast_Expr *expr, Resolve_Flag flags,
return op; return op;
} }
// @todo: Remove compound context
function Operand function Operand
require_const_int(Ast_Expr *expr, Resolve_Flag flags, Ast_Type *compound_context = 0){ require_const_int(Ast_Expr *expr, Resolve_Flag flags){
Operand op = resolve_expr(expr, flags, compound_context, 0); Operand op = resolve_expr(expr, flags, 0, 0);
if(expr == 0 && flags) if(expr == 0 && flags)
return op; return op;

View File

@@ -4,6 +4,13 @@ main :: (): int
b := 20 b := 20
values := []Any{a, b} values := []Any{a, b}
c := values[0].data for values
Assert(it.type == S64)
Assert(*(values[0].data->*S64) == 10)
Assert(*(values[1].data->*S64) == 20)
// @todo: maybe this is better? Assert(*cast(*S64)values[0].data == 10)
return 0 return 0