refactor pointer peer type tests
This commit is contained in:
		
							parent
							
								
									eca9fc2f20
								
							
						
					
					
						commit
						5c20650143
					
				@ -2581,10 +2581,10 @@ test "pointer type" {
 | 
				
			|||||||
    try testExpectFmtType(ip, @"*align(4:2:3) u32", "*align(4:2:3) u32");
 | 
					    try testExpectFmtType(ip, @"*align(4:2:3) u32", "*align(4:2:3) u32");
 | 
				
			||||||
    try testExpectFmtType(ip, @"*addrspace(.shared) const u32", "*addrspace(.shared) const u32");
 | 
					    try testExpectFmtType(ip, @"*addrspace(.shared) const u32", "*addrspace(.shared) const u32");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    try testExpectFmtType(ip, @"[*]u32", "[*c]u32");
 | 
					    try testExpectFmtType(ip, @"[*]u32", "[*]u32");
 | 
				
			||||||
    try testExpectFmtType(ip, @"[*:0]u32", "[*c]u32");
 | 
					    try testExpectFmtType(ip, @"[*:0]u32", "[*:0]u32");
 | 
				
			||||||
    try testExpectFmtType(ip, @"[]u32", "[*c]u32");
 | 
					    try testExpectFmtType(ip, @"[]u32", "[]u32");
 | 
				
			||||||
    try testExpectFmtType(ip, @"[:0]u32", "[*c]u32");
 | 
					    try testExpectFmtType(ip, @"[:0]u32", "[:0]u32");
 | 
				
			||||||
    try testExpectFmtType(ip, @"[*c]u32", "[*c]u32");
 | 
					    try testExpectFmtType(ip, @"[*c]u32", "[*c]u32");
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -3105,65 +3105,91 @@ test "resolvePeerTypes pointers" {
 | 
				
			|||||||
    const comptime_float_type = try ip.get(gpa, .{ .simple = .comptime_float });
 | 
					    const comptime_float_type = try ip.get(gpa, .{ .simple = .comptime_float });
 | 
				
			||||||
    const bool_type = try ip.get(gpa, .{ .simple = .bool });
 | 
					    const bool_type = try ip.get(gpa, .{ .simple = .bool });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    const @"*u32" = try ip.get(gpa, .{ .pointer_type = .{ .elem_type = u32_type, .size = .One } });
 | 
				
			||||||
 | 
					    const @"[*]u32" = try ip.get(gpa, .{ .pointer_type = .{ .elem_type = u32_type, .size = .Many } });
 | 
				
			||||||
 | 
					    const @"[]u32" = try ip.get(gpa, .{ .pointer_type = .{ .elem_type = u32_type, .size = .Slice } });
 | 
				
			||||||
    const @"[*c]u32" = try ip.get(gpa, .{ .pointer_type = .{ .elem_type = u32_type, .size = .C } });
 | 
					    const @"[*c]u32" = try ip.get(gpa, .{ .pointer_type = .{ .elem_type = u32_type, .size = .C } });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    const @"[1]u32" = try ip.get(gpa, .{ .array_type = .{
 | 
					    const @"?*u32" = try ip.get(gpa, .{ .optional_type = .{ .payload_type = @"*u32" } });
 | 
				
			||||||
        .len = 1,
 | 
					    const @"?[*]u32" = try ip.get(gpa, .{ .optional_type = .{ .payload_type = @"[*]u32" } });
 | 
				
			||||||
        .child = u32_type,
 | 
					    const @"?[]u32" = try ip.get(gpa, .{ .optional_type = .{ .payload_type = @"[]u32" } });
 | 
				
			||||||
        .sentinel = .none,
 | 
					
 | 
				
			||||||
    } });
 | 
					    const @"**u32" = try ip.get(gpa, .{ .pointer_type = .{ .elem_type = @"*u32", .size = .One } });
 | 
				
			||||||
    const @"[2]u32" = try ip.get(gpa, .{ .array_type = .{
 | 
					    const @"*[*]u32" = try ip.get(gpa, .{ .pointer_type = .{ .elem_type = @"[*]u32", .size = .One } });
 | 
				
			||||||
        .len = 2,
 | 
					    const @"*[]u32" = try ip.get(gpa, .{ .pointer_type = .{ .elem_type = @"[]u32", .size = .One } });
 | 
				
			||||||
        .child = u32_type,
 | 
					    const @"*[*c]u32" = try ip.get(gpa, .{ .pointer_type = .{ .elem_type = @"[*c]u32", .size = .One } });
 | 
				
			||||||
        .sentinel = .none,
 | 
					
 | 
				
			||||||
    } });
 | 
					    const @"?*[*]u32" = try ip.get(gpa, .{ .optional_type = .{ .payload_type = @"*[*]u32" } });
 | 
				
			||||||
 | 
					    const @"?*[]u32" = try ip.get(gpa, .{ .optional_type = .{ .payload_type = @"*[]u32" } });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    const @"[1]u32" = try ip.get(gpa, .{ .array_type = .{ .len = 1, .child = u32_type, .sentinel = .none } });
 | 
				
			||||||
 | 
					    const @"[2]u32" = try ip.get(gpa, .{ .array_type = .{ .len = 2, .child = u32_type, .sentinel = .none } });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    const @"*[1]u32" = try ip.get(gpa, .{ .pointer_type = .{ .elem_type = @"[1]u32", .size = .One } });
 | 
					    const @"*[1]u32" = try ip.get(gpa, .{ .pointer_type = .{ .elem_type = @"[1]u32", .size = .One } });
 | 
				
			||||||
    const @"*[2]u32" = try ip.get(gpa, .{ .pointer_type = .{ .elem_type = @"[2]u32", .size = .One } });
 | 
					    const @"*[2]u32" = try ip.get(gpa, .{ .pointer_type = .{ .elem_type = @"[2]u32", .size = .One } });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    const @"*u32" = try ip.get(gpa, .{ .pointer_type = .{ .elem_type = u32_type, .size = .One } });
 | 
					    const @"?*[1]u32" = try ip.get(gpa, .{ .optional_type = .{ .payload_type = @"*[1]u32" } });
 | 
				
			||||||
 | 
					    const @"?*[2]u32" = try ip.get(gpa, .{ .optional_type = .{ .payload_type = @"*[2]u32" } });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    const @"*const u32" = try ip.get(gpa, .{ .pointer_type = .{
 | 
					    const @"*const u32" = try ip.get(gpa, .{ .pointer_type = .{ .elem_type = u32_type, .size = .One, .is_const = true } });
 | 
				
			||||||
        .elem_type = u32_type,
 | 
					    const @"[*]const u32" = try ip.get(gpa, .{ .pointer_type = .{ .elem_type = u32_type, .size = .Many, .is_const = true } });
 | 
				
			||||||
        .size = .One,
 | 
					    const @"[]const u32" = try ip.get(gpa, .{ .pointer_type = .{ .elem_type = u32_type, .size = .Slice, .is_const = true } });
 | 
				
			||||||
        .is_const = true,
 | 
					    const @"[*c]const u32" = try ip.get(gpa, .{ .pointer_type = .{ .elem_type = u32_type, .size = .C, .is_const = true } });
 | 
				
			||||||
    } });
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    const @"[*]u32" = try ip.get(gpa, .{ .pointer_type = .{
 | 
					    const @"?*const u32" = try ip.get(gpa, .{ .optional_type = .{ .payload_type = @"*const u32" } });
 | 
				
			||||||
        .elem_type = u32_type,
 | 
					    const @"?[*]const u32" = try ip.get(gpa, .{ .optional_type = .{ .payload_type = @"[*]const u32" } });
 | 
				
			||||||
        .size = .Many,
 | 
					 | 
				
			||||||
    } });
 | 
					 | 
				
			||||||
    const @"?[*]u32" = try ip.get(gpa, .{ .optional_type = .{ .payload_type = @"[*]u32" } });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    const @"[]u32" = try ip.get(gpa, .{ .pointer_type = .{
 | 
					 | 
				
			||||||
        .elem_type = u32_type,
 | 
					 | 
				
			||||||
        .size = .Slice,
 | 
					 | 
				
			||||||
    } });
 | 
					 | 
				
			||||||
    const @"[]const u32" = try ip.get(gpa, .{ .pointer_type = .{
 | 
					 | 
				
			||||||
        .elem_type = u32_type,
 | 
					 | 
				
			||||||
        .size = .Slice,
 | 
					 | 
				
			||||||
        .is_const = true,
 | 
					 | 
				
			||||||
    } });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    const @"?[]u32" = try ip.get(gpa, .{ .optional_type = .{ .payload_type = @"[]u32" } });
 | 
					 | 
				
			||||||
    const @"?[]const u32" = try ip.get(gpa, .{ .optional_type = .{ .payload_type = @"[]const u32" } });
 | 
					    const @"?[]const u32" = try ip.get(gpa, .{ .optional_type = .{ .payload_type = @"[]const u32" } });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    _ = @"**u32";
 | 
				
			||||||
 | 
					    _ = @"*[*c]u32";
 | 
				
			||||||
 | 
					    _ = @"?*[]u32";
 | 
				
			||||||
 | 
					    _ = @"?*[2]u32";
 | 
				
			||||||
 | 
					    _ = @"?[*]const u32";
 | 
				
			||||||
 | 
					    _ = @"?[]const u32";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // gain const
 | 
				
			||||||
 | 
					    try ip.testResolvePeerTypes(@"*u32", @"*u32", @"*u32");
 | 
				
			||||||
 | 
					    try ip.testResolvePeerTypes(@"*u32", @"*const u32", @"*const u32");
 | 
				
			||||||
 | 
					    try ip.testResolvePeerTypes(@"[*]u32", @"[*]const u32", @"[*]const u32");
 | 
				
			||||||
 | 
					    try ip.testResolvePeerTypes(@"[]u32", @"[]const u32", @"[]const u32");
 | 
				
			||||||
 | 
					    try ip.testResolvePeerTypes(@"[*c]u32", @"[*c]const u32", @"[*c]const u32");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // array to slice
 | 
				
			||||||
 | 
					    try ip.testResolvePeerTypes(@"*[1]u32", @"*[2]u32", @"[]u32");
 | 
				
			||||||
 | 
					    try ip.testResolvePeerTypes(@"[]u32", @"*[1]u32", @"[]u32");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // pointer like optionals
 | 
				
			||||||
 | 
					    try ip.testResolvePeerTypes(@"*u32", @"?*u32", @"?*u32");
 | 
				
			||||||
 | 
					    try ip.testResolvePeerTypesInOrder(@"*u32", @"?[*]u32", @"?[*]u32");
 | 
				
			||||||
 | 
					    try ip.testResolvePeerTypesInOrder(@"[*]u32", @"?*u32", @"?*u32");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    try ip.testResolvePeerTypes(@"[*c]u32", comptime_int_type, @"[*c]u32");
 | 
					    try ip.testResolvePeerTypes(@"[*c]u32", comptime_int_type, @"[*c]u32");
 | 
				
			||||||
    try ip.testResolvePeerTypes(@"[*c]u32", u32_type, @"[*c]u32");
 | 
					    try ip.testResolvePeerTypes(@"[*c]u32", u32_type, @"[*c]u32");
 | 
				
			||||||
    try ip.testResolvePeerTypes(@"[*c]u32", comptime_float_type, Index.none);
 | 
					    try ip.testResolvePeerTypes(@"[*c]u32", comptime_float_type, Index.none);
 | 
				
			||||||
    try ip.testResolvePeerTypes(@"[*c]u32", bool_type, Index.none);
 | 
					    try ip.testResolvePeerTypes(@"[*c]u32", bool_type, Index.none);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    try ip.testResolvePeerTypes(@"[*]u32", @"*[2]u32", @"[*]u32");
 | 
					    try ip.testResolvePeerTypes(@"[*c]u32", @"*u32", @"[*c]u32");
 | 
				
			||||||
    try ip.testResolvePeerTypes(@"[]u32", @"*[2]u32", @"[]u32");
 | 
					    try ip.testResolvePeerTypes(@"[*c]u32", @"[*]u32", @"[*c]u32");
 | 
				
			||||||
 | 
					    try ip.testResolvePeerTypes(@"[*c]u32", @"[]u32", @"[*c]u32");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    try ip.testResolvePeerTypes(@"[*c]u32", @"*[1]u32", Index.none);
 | 
				
			||||||
 | 
					    try ip.testResolvePeerTypesInOrder(@"[*c]u32", @"?*[1]u32", @"?*[1]u32");
 | 
				
			||||||
 | 
					    try ip.testResolvePeerTypesInOrder(@"?*[1]u32", @"[*c]u32", Index.none);
 | 
				
			||||||
 | 
					    try ip.testResolvePeerTypes(@"[*c]u32", @"*[*]u32", Index.none);
 | 
				
			||||||
 | 
					    try ip.testResolvePeerTypesInOrder(@"[*c]u32", @"?*[*]u32", @"?*[*]u32");
 | 
				
			||||||
 | 
					    try ip.testResolvePeerTypesInOrder(@"?*[*]u32", @"[*c]u32", Index.none);
 | 
				
			||||||
 | 
					    try ip.testResolvePeerTypes(@"[*c]u32", @"[]u32", @"[*c]u32");
 | 
				
			||||||
 | 
					    // TODO try ip.testResolvePeerTypesInOrder(@"[*c]u32", @"?[]u32", @"?[]u32");
 | 
				
			||||||
 | 
					    // TODO try ip.testResolvePeerTypesInOrder(@"?[]u32", @"[*c]u32", Index.none);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // TODO try ip.testResolvePeerTypesInOrder(@"*u32", @"?[*]const u32", @"?[*]const u32");
 | 
				
			||||||
 | 
					    try ip.testResolvePeerTypesInOrder(@"*const u32", @"?[*]u32", @"?[*]u32");
 | 
				
			||||||
 | 
					    try ip.testResolvePeerTypesInOrder(@"[*]const u32", @"?*u32", @"?*u32");
 | 
				
			||||||
 | 
					    try ip.testResolvePeerTypesInOrder(@"[*]u32", @"?*const u32", @"?*const u32");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    try ip.testResolvePeerTypes(@"?[*]u32", @"*[2]u32", @"?[*]u32");
 | 
					    try ip.testResolvePeerTypes(@"?[*]u32", @"*[2]u32", @"?[*]u32");
 | 
				
			||||||
    try ip.testResolvePeerTypes(@"?[]u32", @"*[2]u32", @"?[]u32");
 | 
					    try ip.testResolvePeerTypes(@"?[]u32", @"*[2]u32", @"?[]u32");
 | 
				
			||||||
    try ip.testResolvePeerTypes(@"?[]u32", @"?[]const u32", @"?[]const u32");
 | 
					    try ip.testResolvePeerTypes(@"[*]u32", @"*[2]u32", @"[*]u32");
 | 
				
			||||||
 | 
					 | 
				
			||||||
    try ip.testResolvePeerTypes(@"*u32", @"*u32", @"*u32");
 | 
					 | 
				
			||||||
    try ip.testResolvePeerTypes(@"*u32", @"*u32", @"*u32");
 | 
					 | 
				
			||||||
    try ip.testResolvePeerTypes(@"*u32", @"*const u32", @"*const u32");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    try ip.testResolvePeerTypes(@"*[1]u32", @"*[2]u32", @"[]u32");
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
fn testResolvePeerTypes(ip: *InternPool, a: Index, b: Index, expected: Index) !void {
 | 
					fn testResolvePeerTypes(ip: *InternPool, a: Index, b: Index, expected: Index) !void {
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user