From aa191c9a55cec48025dbc125be4bd51d5a7545b0 Mon Sep 17 00:00:00 2001 From: Daniel Gavin Date: Sun, 18 Jun 2023 12:39:21 +0200 Subject: Make sure that sliced expressions return slices. --- src/server/analysis.odin | 31 ++++++++++++++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) (limited to 'src') 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, -- cgit v1.2.3