diff options
| author | Daniel Gavin <danielgavin@Daniels-MacBook-Air.local> | 2023-06-18 12:39:21 +0200 |
|---|---|---|
| committer | Daniel Gavin <danielgavin@Daniels-MacBook-Air.local> | 2023-06-18 12:39:21 +0200 |
| commit | aa191c9a55cec48025dbc125be4bd51d5a7545b0 (patch) | |
| tree | daa71f05aab10d92a81588b4922a9fc8b60fa527 /src/server/analysis.odin | |
| parent | b36ed688de204602303f40bab29359d3e984c9ed (diff) | |
Make sure that sliced expressions return slices.
Diffstat (limited to 'src/server/analysis.odin')
| -rw-r--r-- | src/server/analysis.odin | 31 |
1 files changed, 30 insertions, 1 deletions
diff --git a/src/server/analysis.odin b/src/server/analysis.odin index 5d9fbe6..a312d6a 100644 --- a/src/server/analysis.odin +++ b/src/server/analysis.odin @@ -1244,7 +1244,7 @@ internal_resolve_type_expression :: proc( case ^Paren_Expr: return internal_resolve_type_expression(ast_context, v.expr) case ^Slice_Expr: - return internal_resolve_type_expression(ast_context, v.expr) + return resolve_slice_expression(ast_context, v) case ^Tag_Expr: return internal_resolve_type_expression(ast_context, v.expr) case ^Helper_Type: @@ -1983,6 +1983,35 @@ expand_struct_usings :: proc( return {names = names[:], types = types[:], ranges = ranges[:]} } +resolve_slice_expression :: proc( + ast_context: ^AstContext, + slice_expr: ^ast.Slice_Expr, +) -> ( + symbol: Symbol, + ok: bool, +) { + symbol = resolve_type_expression(ast_context, slice_expr.expr) or_return + + expr: ^ast.Expr + + #partial switch v in symbol.value { + case SymbolSliceValue: + expr = v.expr + case SymbolFixedArrayValue: + expr = v.expr + case SymbolDynamicArrayValue: + expr = v.expr + case: + return {}, false + } + + symbol.value = SymbolSliceValue { + expr = expr, + } + + return symbol, true +} + resolve_comp_literal :: proc( ast_context: ^AstContext, position_context: ^DocumentPositionContext, |