Fix various bugs
This commit is contained in:
		
							parent
							
								
									b71585da1d
								
							
						
					
					
						commit
						213366f029
					
				@ -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,
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										15
									
								
								src/main.zig
									
									
									
									
									
								
							
							
						
						
									
										15
									
								
								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);
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user