diff options
| author | Brad Lewis <22850972+BradLewis@users.noreply.github.com> | 2025-06-30 13:29:35 -0400 |
|---|---|---|
| committer | Brad Lewis <22850972+BradLewis@users.noreply.github.com> | 2025-07-02 07:54:29 -0400 |
| commit | b0c738ee087a57eebaa4c7626c29434a3b7fc524 (patch) | |
| tree | ee417d73faa92ad9fb0d8194b725f84485d716e0 /src/server | |
| parent | b4d62b99f906bf9adb3b3cc71c9be8c374855f81 (diff) | |
Fix issue with struct field names being resolved as a proceeding struct
Diffstat (limited to 'src/server')
| -rw-r--r-- | src/server/analysis.odin | 2 | ||||
| -rw-r--r-- | src/server/file_resolve.odin | 10 |
2 files changed, 9 insertions, 3 deletions
diff --git a/src/server/analysis.odin b/src/server/analysis.odin index 611bf4b..95c3a82 100644 --- a/src/server/analysis.odin +++ b/src/server/analysis.odin @@ -1717,7 +1717,7 @@ resolve_comp_literal :: proc( symbol: Symbol, ok: bool, ) { - if position_context.parent_comp_lit.type != nil { + if position_context.parent_comp_lit != nil && position_context.parent_comp_lit.type != nil { symbol = resolve_type_expression(ast_context, position_context.parent_comp_lit.type) or_return } else if position_context.call != nil { if call_expr, ok := position_context.call.derived.(^ast.Call_Expr); ok { diff --git a/src/server/file_resolve.odin b/src/server/file_resolve.odin index ea594e3..a63161d 100644 --- a/src/server/file_resolve.odin +++ b/src/server/file_resolve.odin @@ -308,14 +308,20 @@ resolve_node :: proc(node: ^ast.Node, data: ^FileResolveData) { case ^Ellipsis: resolve_node(n.expr, data) case ^Comp_Lit: + // We only want to resolve the values, not the types + resolve_node(n.type, data) + //only set this for the parent comp literal, since we will need to walk through it to infer types. + set := false if data.position_context.parent_comp_lit == nil { + set = true data.position_context.parent_comp_lit = n } + defer if set { + data.position_context.parent_comp_lit = nil + } data.position_context.comp_lit = n - - resolve_node(n.type, data) resolve_nodes(n.elems, data) case ^Tag_Expr: resolve_node(n.expr, data) |