aboutsummaryrefslogtreecommitdiff
path: root/src/server
diff options
context:
space:
mode:
authorDanielGavin <danielgavin5@hotmail.com>2024-08-10 18:36:21 +0200
committerDanielGavin <danielgavin5@hotmail.com>2024-08-10 18:36:21 +0200
commit62a7d1d93da8499fa5e85489842d25ab54e0fac2 (patch)
tree3c218e9c4107eade9298d2d1b00209a89f63f4ce /src/server
parent7c29d7fa223e4ae6baddadc6b24798098fdba98a (diff)
Add support for enumerated arrays in range loop.
Diffstat (limited to 'src/server')
-rw-r--r--src/server/analysis.odin45
1 files changed, 32 insertions, 13 deletions
diff --git a/src/server/analysis.odin b/src/server/analysis.odin
index c088d11..d2f52f5 100644
--- a/src/server/analysis.odin
+++ b/src/server/analysis.odin
@@ -3121,19 +3121,38 @@ get_locals_for_range_stmt :: proc(
if len(stmt.vals) >= 2 {
if ident, ok := unwrap_ident(stmt.vals[1]); ok {
- store_local(
- ast_context,
- ident,
- make_int_ast(ast_context, ident.pos, ident.end),
- ident.pos.offset,
- ident.name,
- ast_context.local_id,
- ast_context.non_mutable_only,
- false,
- true,
- symbol.pkg,
- false,
- )
+ //Look for enumarated arrays
+ if len_symbol, ok := resolve_type_expression(ast_context, v.len); ok {
+ if _, is_enum := len_symbol.value.(SymbolEnumValue); is_enum {
+ store_local(
+ ast_context,
+ ident,
+ v.len,
+ ident.pos.offset,
+ ident.name,
+ ast_context.local_id,
+ ast_context.non_mutable_only,
+ false,
+ true,
+ len_symbol.pkg,
+ false,
+ )
+ }
+ } else {
+ store_local(
+ ast_context,
+ ident,
+ make_int_ast(ast_context, ident.pos, ident.end),
+ ident.pos.offset,
+ ident.name,
+ ast_context.local_id,
+ ast_context.non_mutable_only,
+ false,
+ true,
+ symbol.pkg,
+ false,
+ )
+ }
}
}
case SymbolSliceValue: