// error
types2.Universe.Lookup("error").Type(),
+ // comparable
+ types2.Universe.Lookup("comparable").Type(),
// untyped types
types2.Typ[types2.UntypedBool],
// With Go 1.18, an embedded element can be any type, not
// just an interface.
- if t := types2.AsInterface(e); t != nil {
- if t.IsComparable() {
- // Ignore predefined type 'comparable', since it
- // doesn't resolve and it doesn't have any
- // relevant methods.
- continue
- }
- }
embeddeds[j] = types.NewField(src.NoXPos, nil, g.typ1(e))
j++
}
// error
types.ErrorType,
+ // comparable
+ types.ComparableType,
// untyped types
types.UntypedBool,
s.Def = n
types.CalcSize(types.ErrorType)
+ // comparable type (interface)
+ s = types.BuiltinPkg.Lookup("comparable")
+ n = ir.NewDeclNameAt(src.NoXPos, ir.OTYPE, s)
+ types.ComparableType = types.NewNamed(n)
+ types.ComparableType.SetUnderlying(makeComparableInterface())
+ n.SetType(types.ComparableType)
+ s.Def = n
+ types.CalcSize(types.ComparableType)
+
types.Types[types.TUNSAFEPTR] = defBasic(types.TUNSAFEPTR, ir.Pkgs.Unsafe, "Pointer")
// simple aliases
return types.NewInterface(types.NoPkg, []*types.Field{method})
}
+func makeComparableInterface() *types.Type {
+ sig := types.NewSignature(types.NoPkg, fakeRecvField(), nil, nil, nil)
+ method := types.NewField(src.NoXPos, Lookup("=="), sig)
+ return types.NewInterface(types.NoPkg, []*types.Field{method})
+}
+
// DeclareUniverse makes the universe block visible within the current package.
func DeclareUniverse() {
// Operationally, this is similar to a dot import of builtinpkg, except
// Predeclared error interface type.
ErrorType *Type
+ // Predeclared comparable interface type.
+ ComparableType *Type
// Types to represent untyped string and boolean constants.
UntypedString = New(TSTRING)
// error
types.Universe.Lookup("error").Type(),
+ // comparable
+ types.Universe.Lookup("comparable").Type(),
// untyped types
types.Typ[types.UntypedBool],
"typeparam/mdempsky/4.go",
"typeparam/mdempsky/5.go",
"typeparam/mdempsky/7.go",
- "typeparam/mdempsky/8.go",
"typeparam/mdempsky/9.go",
"typeparam/mdempsky/11.go",
"typeparam/mdempsky/12.go",