aboutsummaryrefslogtreecommitdiff
path: root/src/server
diff options
context:
space:
mode:
authorBrad Lewis <22850972+BradLewis@users.noreply.github.com>2025-11-06 05:15:13 -0500
committerBrad Lewis <22850972+BradLewis@users.noreply.github.com>2025-11-06 05:15:13 -0500
commit0b7271488d9f339f0be3a0f7ccb81dd2d5dfb7df (patch)
tree39cb7ca9b1fceffc8fd9758c3992e038f372d053 /src/server
parent10ea97356964e04bfe522a8ad276528bdac35d48 (diff)
Resolve implicit selector switch statements before index expressions
Diffstat (limited to 'src/server')
-rw-r--r--src/server/analysis.odin46
-rw-r--r--src/server/file_resolve.odin11
2 files changed, 23 insertions, 34 deletions
diff --git a/src/server/analysis.odin b/src/server/analysis.odin
index 1b14497..4a1980c 100644
--- a/src/server/analysis.odin
+++ b/src/server/analysis.odin
@@ -2367,29 +2367,6 @@ resolve_implicit_selector :: proc(
}
}
- if position_context.index != nil {
- symbol: Symbol
- ok := false
- if position_context.previous_index != nil {
- symbol, ok = resolve_type_expression(ast_context, position_context.previous_index)
- if !ok {
- return {}, false
- }
- } else {
- symbol, ok = resolve_type_expression(ast_context, position_context.index.expr)
- if !ok {
- return {}, false
- }
- }
-
- #partial switch value in symbol.value {
- case SymbolFixedArrayValue:
- return resolve_type_expression(ast_context, value.len)
- case SymbolMapValue:
- return resolve_type_expression(ast_context, value.key)
- }
- }
-
if position_context.comp_lit != nil && position_context.parent_comp_lit != nil {
if symbol, ok := resolve_comp_literal(ast_context, position_context); ok {
return resolve_implicit_selector_comp_literal(ast_context, position_context, symbol)
@@ -2430,6 +2407,29 @@ resolve_implicit_selector :: proc(
}
}
+ if position_context.index != nil {
+ symbol: Symbol
+ ok := false
+ if position_context.previous_index != nil {
+ symbol, ok = resolve_type_expression(ast_context, position_context.previous_index)
+ if !ok {
+ return {}, false
+ }
+ } else {
+ symbol, ok = resolve_type_expression(ast_context, position_context.index.expr)
+ if !ok {
+ return {}, false
+ }
+ }
+
+ #partial switch value in symbol.value {
+ case SymbolFixedArrayValue:
+ return resolve_type_expression(ast_context, value.len)
+ case SymbolMapValue:
+ return resolve_type_expression(ast_context, value.key)
+ }
+ }
+
if position_context.returns != nil && position_context.function != nil {
return_index: int
diff --git a/src/server/file_resolve.odin b/src/server/file_resolve.odin
index 22d2d63..1b7a5c5 100644
--- a/src/server/file_resolve.odin
+++ b/src/server/file_resolve.odin
@@ -1,19 +1,8 @@
package server
-import "core:fmt"
-import "core:log"
-import "core:mem"
import "core:odin/ast"
-import "core:odin/parser"
import "core:odin/tokenizer"
-import "core:path/filepath"
-import path "core:path/slashpath"
-import "core:reflect"
-import "core:slice"
-import "core:sort"
-import "core:strconv"
import "core:strings"
-import "core:unicode/utf8"
import "src:common"