diff options
| author | DanielGavin <danielgavin5@hotmail.com> | 2024-08-10 18:36:21 +0200 |
|---|---|---|
| committer | DanielGavin <danielgavin5@hotmail.com> | 2024-08-10 18:36:21 +0200 |
| commit | 62a7d1d93da8499fa5e85489842d25ab54e0fac2 (patch) | |
| tree | 3c218e9c4107eade9298d2d1b00209a89f63f4ce /src/server | |
| parent | 7c29d7fa223e4ae6baddadc6b24798098fdba98a (diff) | |
Add support for enumerated arrays in range loop.
Diffstat (limited to 'src/server')
| -rw-r--r-- | src/server/analysis.odin | 45 |
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: |