From 213366f029a1fbbe33a8648f6a623f904739630c Mon Sep 17 00:00:00 2001 From: Alexandros Naskos Date: Thu, 23 Jul 2020 20:30:03 +0300 Subject: [PATCH] Fix various bugs --- src/analysis.zig | 27 ++++++++++++--------------- src/main.zig | 15 +++++---------- 2 files changed, 17 insertions(+), 25 deletions(-) diff --git a/src/analysis.zig b/src/analysis.zig index 7d2524e..2920b58 100644 --- a/src/analysis.zig +++ b/src/analysis.zig @@ -438,19 +438,16 @@ fn resolveDerefType( else => return null, }; - if (deref_node.cast(ast.Node.SimplePrefixOp)) |pop| { - if (deref_node.tag == .PtrType) { - const op_token_id = deref.handle.tree.token_ids[pop.op_token]; - switch (op_token_id) { - .Asterisk => { - return ((try resolveTypeOfNodeInternal(store, arena, .{ - .node = pop.rhs, - .handle = deref.handle, - }, bound_type_params)) orelse return null).instanceTypeVal(); - }, - .LBracket, .AsteriskAsterisk => return null, - else => unreachable, - } + if (deref_node.castTag(.PtrType)) |ptr_type| { + switch (deref.handle.tree.token_ids[ptr_type.op_token]) { + .Asterisk => { + return ((try resolveTypeOfNodeInternal(store, arena, .{ + .node = ptr_type.rhs, + .handle = deref.handle, + }, bound_type_params)) orelse return null).instanceTypeVal(); + }, + .LBracket, .AsteriskAsterisk => return null, + else => unreachable, } } return null; @@ -824,7 +821,7 @@ pub fn resolveTypeOfNodeInternal( }, .FnProto => { // This is a function type - if (node.castTag(.FnProto).?.trailer_flags.has("name_token")) { + if (!node.castTag(.FnProto).?.trailer_flags.has("name_token")) { return TypeWithHandle.typeVal(node_handle); } return TypeWithHandle{ @@ -1010,7 +1007,7 @@ pub fn getFieldAccessType( tokenizer: *std.zig.Tokenizer, ) !?FieldAccessReturn { var current_type = TypeWithHandle.typeVal(.{ - .node = &handle.tree.root_node.base, + .node = undefined, .handle = handle, }); diff --git a/src/main.zig b/src/main.zig index 2cf4b59..343ad66 100644 --- a/src/main.zig +++ b/src/main.zig @@ -428,16 +428,11 @@ fn nodeToCompletion( } const ptr_type = node.castTag(.PtrType).?; - if (ptr_type.rhs.cast(std.zig.ast.Node.SimplePrefixOp)) |child_pop| { - switch (ptr_type.rhs.tag) { - .ArrayType => { - try list.append(.{ - .label = "len", - .kind = .Field, - }); - }, - else => {}, - } + if (ptr_type.rhs.castTag(.ArrayType) != null) { + try list.append(.{ + .label = "len", + .kind = .Field, + }); } else if (unwrapped) |actual_type| { try typeToCompletion(arena, list, .{ .original = actual_type }, orig_handle, config); }