anonymous struct payloads
This commit is contained in:
@@ -1417,6 +1417,9 @@ infer_compound_expr :: proc(
|
||||
for keyed in expr.args {
|
||||
_ = infer_nested_expr(checker, checker.ast_module.exprs[keyed].left, locals, pkg, file, demanded, local_types)
|
||||
}
|
||||
if !symbol.is_valid(expr.name) {
|
||||
return types.INVALID
|
||||
}
|
||||
target_pkg, available := expr_package(checker, expr, pkg, file)
|
||||
value := types.find_named(store, u32(target_pkg), u32(expr.name)) if available else types.INVALID
|
||||
return types.resolve_alias(value, store)
|
||||
@@ -3659,12 +3662,21 @@ build_compound_expr :: proc(
|
||||
target=hir.INVALID_REF, diagnostic=source.INVALID_DIAGNOSTIC,
|
||||
})
|
||||
case .Struct_Literal:
|
||||
target_pkg, available := expr_package(checker, expr, pkg, file, true)
|
||||
struct_type := types.find_named(store, u32(target_pkg), u32(expr.name)) if available else types.INVALID
|
||||
struct_type = types.resolve_alias(struct_type, store)
|
||||
if !types.is_record(struct_type, store) || types.is_opaque_struct(struct_type, store) {
|
||||
id := source.addf(checker.diagnostics, expr.span, "unknown or opaque record type '%s'", symbol_text(checker, expr.name))
|
||||
return invalid_hir_expr(checker, expr.span, id)
|
||||
struct_type := types.INVALID
|
||||
if symbol.is_valid(expr.name) {
|
||||
target_pkg, available := expr_package(checker, expr, pkg, file, true)
|
||||
struct_type = types.find_named(store, u32(target_pkg), u32(expr.name)) if available else types.INVALID
|
||||
struct_type = types.resolve_alias(struct_type, store)
|
||||
if !types.is_record(struct_type, store) || types.is_opaque_struct(struct_type, store) {
|
||||
id := source.addf(checker.diagnostics, expr.span, "unknown or opaque record type '%s'", symbol_text(checker, expr.name))
|
||||
return invalid_hir_expr(checker, expr.span, id)
|
||||
}
|
||||
} else {
|
||||
struct_type = types.resolve_alias(expected, store)
|
||||
if !types.is_struct(struct_type, store) || types.is_opaque_struct(struct_type, store) {
|
||||
id := source.add(checker.diagnostics, expr.span, "keyed contextual payload requires a struct payload")
|
||||
return invalid_hir_expr(checker, expr.span, id, expected)
|
||||
}
|
||||
}
|
||||
fields := types.fields_for(store, struct_type)
|
||||
union_record := types.is_union(struct_type, store)
|
||||
|
||||
Reference in New Issue
Block a user