Merge remote-tracking branch 'origin/main' into rebranch

This commit is contained in:
swift-ci
2024-10-15 20:34:48 -07:00
13 changed files with 4702 additions and 3982 deletions

View File

@@ -1618,7 +1618,8 @@ namespace {
synthesizer.makeStructRawValued(
structDecl, underlyingType,
{KnownProtocolKind::RawRepresentable, KnownProtocolKind::Equatable},
{KnownProtocolKind::RawRepresentable, KnownProtocolKind::Equatable,
KnownProtocolKind::Hashable},
options, /*setterAccess=*/AccessLevel::Public);
result = structDecl;

View File

@@ -56,21 +56,21 @@ struct __PrivS2 {
var value: Int32
}
var __PrivAnonymousA: Int { get }
struct E0 : Equatable, RawRepresentable {
struct E0 : Hashable, Equatable, RawRepresentable {
init(_ rawValue: UInt32)
init(rawValue: UInt32)
var rawValue: UInt32
typealias RawValue = UInt32
}
var __E0PrivA: E0 { get }
struct __PrivE1 : Equatable, RawRepresentable {
struct __PrivE1 : Hashable, Equatable, RawRepresentable {
init(_ rawValue: UInt32)
init(rawValue: UInt32)
var rawValue: UInt32
typealias RawValue = UInt32
}
var __PrivE1A: __PrivE1 { get }
struct __PrivE2 : Equatable, RawRepresentable {
struct __PrivE2 : Hashable, Equatable, RawRepresentable {
init(_ rawValue: UInt32)
init(rawValue: UInt32)
var rawValue: UInt32

View File

@@ -11,7 +11,7 @@
// CHECK-NEXT: struct PublicStruct {
// CHECK-NEXT: init()
// CHECK-NEXT: }
// CHECK-NEXT: struct PublicEnum : Equatable, RawRepresentable {
// CHECK-NEXT: struct PublicEnum : Hashable, Equatable, RawRepresentable {
// CHECK-NEXT: init(_ rawValue: [[ENUM_UNDERLYING_TYPE:Int32|UInt32]])
// CHECK-NEXT: init(rawValue: [[ENUM_UNDERLYING_TYPE]])
// CHECK-NEXT: var rawValue: [[ENUM_UNDERLYING_TYPE]]

View File

@@ -10,7 +10,7 @@
// CHECK-NEXT: case ecb
// CHECK-NEXT: case ecc
// CHECK-NEXT: }
// CHECK-NEXT: struct Enum : Equatable, RawRepresentable {
// CHECK-NEXT: struct Enum : Hashable, Equatable, RawRepresentable {
// CHECK-NEXT: init(_ rawValue: {{UInt32|Int32}})
// CHECK-NEXT: init(rawValue: {{UInt32|Int32}})
// CHECK-NEXT: var rawValue: {{UInt32|Int32}}

View File

@@ -17,7 +17,7 @@
// CHECK: }
// CHECK: struct U3 {
// CHECK: struct E1 : Equatable, RawRepresentable {
// CHECK: struct E1 : Hashable, Equatable, RawRepresentable {
// CHECK: typealias RawValue = {{UInt32|Int32}}
// CHECK: }
// CHECK: }
@@ -29,7 +29,7 @@
// CHECK: struct S6 {
// CHECK: init()
// CHECK: struct E3 : Equatable, RawRepresentable {
// CHECK: struct E3 : Hashable, Equatable, RawRepresentable {
// CHECK: typealias RawValue = {{UInt32|Int32}}
// CHECK: }
// CHECK: }
@@ -50,7 +50,7 @@
// CHECK: struct S10 {
// CHECK: struct U8 {
// CHECK: struct E4 : Equatable, RawRepresentable {
// CHECK: struct E4 : Hashable, Equatable, RawRepresentable {
// CHECK: typealias RawValue = {{UInt32|Int32}}
// CHECK: }
// CHECK: }

View File

@@ -2,7 +2,7 @@
// TODO: these should be enums eventually (especially the enum class).
// CHECK: struct Maybe : Equatable, RawRepresentable {
// CHECK: struct Maybe : Hashable, Equatable, RawRepresentable {
// CHECK-NEXT: init(_ rawValue: Bool)
// CHECK-NEXT: init(rawValue: Bool)
// CHECK-NEXT: var rawValue: Bool
@@ -11,7 +11,7 @@
// CHECK: var No: Maybe { get }
// CHECK: var Yes: Maybe { get }
// CHECK: struct BinaryNumbers : Equatable, RawRepresentable {
// CHECK: struct BinaryNumbers : Hashable, Equatable, RawRepresentable {
// CHECK-NEXT: init(_ rawValue: Bool)
// CHECK-NEXT: init(rawValue: Bool)
// CHECK-NEXT: var rawValue: Bool
@@ -31,7 +31,7 @@
// CHECK: struct WrapperStruct {
// CHECK-NEXT: init()
// TODO: where is "A" and "B"? They should be member variables.
// CHECK-NEXT: struct InnerBoolEnum : Equatable, RawRepresentable {
// CHECK-NEXT: struct InnerBoolEnum : Hashable, Equatable, RawRepresentable {
// CHECK-NEXT: init(_ rawValue: Bool)
// CHECK-NEXT: init(rawValue: Bool)
// CHECK-NEXT: var rawValue: Bool

View File

@@ -0,0 +1,21 @@
// RUN: %target-typecheck-verify-swift -I %S/Inputs -enable-experimental-cxx-interop
import TypedUntypedEnums
let _: Set = [kBlue, kGreen] // construct a set from blue and green
let _: Set = [kBlue, kBlue] // construct a valid set from two blues
// Not allowed to mix and match elements of a set.
let _: Set = [kBlue, kTwo] // expected-error {{conflicting arguments to generic parameter 'Element' ('Int' vs. 'Color')}}
let _: Set = [kBlue, Pet.dogcow] // expected-error {{conflicting arguments to generic parameter 'Element' ('Pet' vs. 'Color')}}
let s: Set<Pet> = [] // construct an empty, type-annotated set
let _ = s.contains(Pet.goat) // query the empty set using a key
let _ = s.contains(kTwo) // expected-error {{cannot convert value of type 'Int' to expected argument type 'Pet'}}
// Untyped enums can be used interchangeably with integers
let _: Set = [kFour, kTwo] // construct a set from untyped enum
let _: Set = [kFour, kTwo, 0] // construct a set that mixes untyped enums and integers
let _ = [Pet.goat: "baa", Pet.dogcow: "moo"] // dictionaries are fine too
let _: [AnyHashable: String] = [Pet.goat: "baa", kFour: "meow"] // even heterogeneous ones

View File

@@ -0,0 +1,87 @@
// RUN: %target-run-simple-swift(-cxx-interoperability-mode=default -Xfrontend -disable-availability-checking -I %S/Inputs)
// REQUIRES: executable_test
import StdlibUnittest
import TypedUntypedEnums
// A helper for hashing Hasable values.
func getHash<H>(_ x: H) -> Int where H: Hashable {
var h = Hasher()
h.combine(x)
return h.finalize()
}
let Colors = [kRed, kBlue, kGreen, kYellow]
let Numbers = [kOne, kTwo, kThree, kFour]
let Pets = [Pet.goat, Pet.cat, Pet.dogcow, Pet.rabbit]
var HashableEnumsTestSuite = TestSuite("Enums are hashable")
HashableEnumsTestSuite.test("Hashes preserve equality") {
for m in 0..<Colors.count {
for n in 0..<Colors.count {
if m == n {
expectEqual(getHash(Colors[m]), getHash(Colors[n]))
} else {
expectNotEqual(getHash(Colors[m]), getHash(Colors[n]))
}
}
}
for m in 0..<Numbers.count {
for n in 0..<Numbers.count {
if m == n {
expectEqual(getHash(Numbers[m]), getHash(Numbers[n]))
} else {
expectNotEqual(getHash(Numbers[m]), getHash(Numbers[n]))
}
}
}
for m in 0..<Pets.count {
for n in 0..<Pets.count {
if m == n {
expectEqual(getHash(Pets[m]), getHash(Pets[n]))
} else {
expectNotEqual(getHash(Pets[m]), getHash(Pets[n]))
}
}
}
}
HashableEnumsTestSuite.test("Untyped enums hash using underlying value") {
for m in 1...4 {
for n in 1...Numbers.count {
let number = Numbers[n - 1]
if m == n {
expectEqual(getHash(m), getHash(number))
} else {
expectNotEqual(getHash(m), getHash(number))
}
}
}
}
HashableEnumsTestSuite.test("Typed enums and class enums hash using other info") {
// The raw values of these enum members are known:
expectEqual(kRed.rawValue, 0)
expectEqual(kYellow.rawValue, 10)
expectEqual(Pet.goat.rawValue, 5)
expectEqual(Pet.cat.rawValue, 15)
// But the Hashable implementation uses more than the raw value to compute the hash:
expectNotEqual(getHash(kRed), getHash(0))
expectNotEqual(getHash(kYellow), getHash(10))
expectNotEqual(getHash(Pet.goat), getHash(5))
expectNotEqual(getHash(Pet.cat), getHash(15))
}
HashableEnumsTestSuite.test("Sets work as expected") {
let s: Set = [kRed, kBlue, kRed, kRed]
assert(s.contains(kRed))
assert(s.contains(kBlue))
assert(!s.contains(kGreen))
assert(s.count == 2) // kRed should have been deduplicated
}
runAllTests()

View File

@@ -1,7 +1,7 @@
// RUN: %target-swift-ide-test -print-module -module-to-print=NestedEnums -I %S/Inputs -source-filename=x -enable-experimental-cxx-interop | %FileCheck %s
// CHECK: enum ns {
// CHECK: struct EnumInNS : Equatable, RawRepresentable {
// CHECK: struct EnumInNS : Hashable, Equatable, RawRepresentable {
// CHECK: }
// CHECK-NEXT: static var kA: ns.EnumInNS { get }
// CHECK-NEXT: static var kB: ns.EnumInNS { get }
@@ -10,7 +10,7 @@
// CHECK: case scopeB
// CHECK-NEXT: }
// CHECK-NEXT: enum nestedNS {
// CHECK-NEXT: struct EnumInNestedNS : Equatable, RawRepresentable {
// CHECK-NEXT: struct EnumInNestedNS : Hashable, Equatable, RawRepresentable {
// CHECK: }
// CHECK-NEXT: static var kNestedA: ns.nestedNS.EnumInNestedNS { get }
// CHECK-NEXT: static var kNestedB: ns.nestedNS.EnumInNestedNS { get }

File diff suppressed because it is too large Load Diff

View File

@@ -2,7 +2,7 @@ import FooHelper
func fooSubFunc1(_ a: Int32) -> Int32
struct FooSubEnum1 : Equatable, RawRepresentable {
struct FooSubEnum1 : Hashable, Equatable, RawRepresentable {
init(_ rawValue: UInt32)
@@ -10,6 +10,10 @@ struct FooSubEnum1 : Equatable, RawRepresentable {
var rawValue: UInt32
@inlinable var hashValue: Int { get }
@inlinable func hash(into hasher: inout Hasher)
static func != (_ lhs: FooSubEnum1, _ rhs: FooSubEnum1) -> Bool
}
@@ -75,201 +79,272 @@ var FooSubUnnamedEnumeratorA1: Int { get }
key.offset: 64,
key.length: 11
},
{
key.kind: source.lang.swift.ref.protocol,
key.name: "Hashable",
key.usr: "s:SH",
key.offset: 78,
key.length: 8
},
{
key.kind: source.lang.swift.ref.protocol,
key.name: "Equatable",
key.usr: "s:SQ",
key.offset: 78,
key.offset: 88,
key.length: 9
},
{
key.kind: source.lang.swift.ref.protocol,
key.name: "RawRepresentable",
key.usr: "s:SY",
key.offset: 89,
key.offset: 99,
key.length: 16
},
{
key.kind: source.lang.swift.syntaxtype.keyword,
key.offset: 113,
key.offset: 123,
key.length: 4
},
{
key.kind: source.lang.swift.syntaxtype.argument,
key.offset: 118,
key.offset: 128,
key.length: 1
},
{
key.kind: source.lang.swift.syntaxtype.parameter,
key.offset: 120,
key.offset: 130,
key.length: 8
},
{
key.kind: source.lang.swift.ref.struct,
key.name: "UInt32",
key.usr: "s:s6UInt32V",
key.offset: 130,
key.offset: 140,
key.length: 6
},
{
key.kind: source.lang.swift.syntaxtype.keyword,
key.offset: 143,
key.offset: 153,
key.length: 4
},
{
key.kind: source.lang.swift.syntaxtype.argument,
key.offset: 148,
key.offset: 158,
key.length: 8
},
{
key.kind: source.lang.swift.syntaxtype.parameter,
key.offset: 157,
key.offset: 167,
key.length: 8
},
{
key.kind: source.lang.swift.ref.struct,
key.name: "UInt32",
key.usr: "s:s6UInt32V",
key.offset: 167,
key.offset: 177,
key.length: 6
},
{
key.kind: source.lang.swift.syntaxtype.keyword,
key.offset: 180,
key.offset: 190,
key.length: 3
},
{
key.kind: source.lang.swift.syntaxtype.identifier,
key.offset: 184,
key.offset: 194,
key.length: 8
},
{
key.kind: source.lang.swift.ref.struct,
key.name: "UInt32",
key.usr: "s:s6UInt32V",
key.offset: 194,
key.offset: 204,
key.length: 6
},
{
key.kind: source.lang.swift.syntaxtype.attribute.builtin,
key.offset: 216,
key.length: 10
},
{
key.kind: source.lang.swift.syntaxtype.keyword,
key.offset: 227,
key.length: 3
},
{
key.kind: source.lang.swift.syntaxtype.identifier,
key.offset: 231,
key.length: 9
},
{
key.kind: source.lang.swift.ref.struct,
key.name: "Int",
key.usr: "s:Si",
key.offset: 242,
key.length: 3
},
{
key.kind: source.lang.swift.syntaxtype.keyword,
key.offset: 248,
key.length: 3
},
{
key.kind: source.lang.swift.syntaxtype.attribute.builtin,
key.offset: 259,
key.length: 10
},
{
key.kind: source.lang.swift.syntaxtype.keyword,
key.offset: 270,
key.length: 4
},
{
key.kind: source.lang.swift.syntaxtype.identifier,
key.offset: 275,
key.length: 4
},
{
key.kind: source.lang.swift.syntaxtype.argument,
key.offset: 280,
key.length: 4
},
{
key.kind: source.lang.swift.syntaxtype.parameter,
key.offset: 285,
key.length: 6
},
{
key.kind: source.lang.swift.syntaxtype.keyword,
key.offset: 206,
key.offset: 293,
key.length: 5
},
{
key.kind: source.lang.swift.ref.struct,
key.name: "Hasher",
key.usr: "s:s6HasherV",
key.offset: 299,
key.length: 6
},
{
key.kind: source.lang.swift.syntaxtype.keyword,
key.offset: 213,
key.offset: 312,
key.length: 6
},
{
key.kind: source.lang.swift.syntaxtype.keyword,
key.offset: 319,
key.length: 4
},
{
key.kind: source.lang.swift.syntaxtype.operator,
key.offset: 218,
key.offset: 324,
key.length: 2
},
{
key.kind: source.lang.swift.syntaxtype.argument,
key.offset: 222,
key.offset: 328,
key.length: 1
},
{
key.kind: source.lang.swift.syntaxtype.parameter,
key.offset: 224,
key.offset: 330,
key.length: 3
},
{
key.kind: source.lang.swift.ref.struct,
key.name: "FooSubEnum1",
key.usr: "c:@E@FooSubEnum1",
key.offset: 229,
key.offset: 335,
key.length: 11
},
{
key.kind: source.lang.swift.syntaxtype.argument,
key.offset: 242,
key.offset: 348,
key.length: 1
},
{
key.kind: source.lang.swift.syntaxtype.parameter,
key.offset: 244,
key.offset: 350,
key.length: 3
},
{
key.kind: source.lang.swift.ref.struct,
key.name: "FooSubEnum1",
key.usr: "c:@E@FooSubEnum1",
key.offset: 249,
key.offset: 355,
key.length: 11
},
{
key.kind: source.lang.swift.ref.struct,
key.name: "Bool",
key.usr: "s:Sb",
key.offset: 265,
key.offset: 371,
key.length: 4
},
{
key.kind: source.lang.swift.syntaxtype.keyword,
key.offset: 273,
key.offset: 379,
key.length: 3
},
{
key.kind: source.lang.swift.syntaxtype.identifier,
key.offset: 277,
key.offset: 383,
key.length: 12
},
{
key.kind: source.lang.swift.ref.struct,
key.name: "FooSubEnum1",
key.usr: "c:@E@FooSubEnum1",
key.offset: 291,
key.offset: 397,
key.length: 11
},
{
key.kind: source.lang.swift.syntaxtype.keyword,
key.offset: 305,
key.offset: 411,
key.length: 3
},
{
key.kind: source.lang.swift.syntaxtype.keyword,
key.offset: 312,
key.offset: 418,
key.length: 3
},
{
key.kind: source.lang.swift.syntaxtype.identifier,
key.offset: 316,
key.offset: 422,
key.length: 12
},
{
key.kind: source.lang.swift.ref.struct,
key.name: "FooSubEnum1",
key.usr: "c:@E@FooSubEnum1",
key.offset: 330,
key.offset: 436,
key.length: 11
},
{
key.kind: source.lang.swift.syntaxtype.keyword,
key.offset: 344,
key.offset: 450,
key.length: 3
},
{
key.kind: source.lang.swift.syntaxtype.keyword,
key.offset: 351,
key.offset: 457,
key.length: 3
},
{
key.kind: source.lang.swift.syntaxtype.identifier,
key.offset: 355,
key.offset: 461,
key.length: 25
},
{
key.kind: source.lang.swift.ref.struct,
key.name: "Int",
key.usr: "s:Si",
key.offset: 382,
key.offset: 488,
key.length: 3
},
{
key.kind: source.lang.swift.syntaxtype.keyword,
key.offset: 388,
key.offset: 494,
key.length: 3
}
]
@@ -297,9 +372,14 @@ var FooSubUnnamedEnumeratorA1: Int { get }
key.name: "FooSubEnum1",
key.usr: "c:@E@FooSubEnum1",
key.offset: 57,
key.length: 214,
key.fully_annotated_decl: "<decl.struct><syntaxtype.keyword>struct</syntaxtype.keyword> <decl.name>FooSubEnum1</decl.name> : <ref.protocol usr=\"s:SQ\">Equatable</ref.protocol>, <ref.protocol usr=\"s:SY\">RawRepresentable</ref.protocol></decl.struct>",
key.length: 320,
key.fully_annotated_decl: "<decl.struct><syntaxtype.keyword>struct</syntaxtype.keyword> <decl.name>FooSubEnum1</decl.name> : <ref.protocol usr=\"s:SH\">Hashable</ref.protocol>, <ref.protocol usr=\"s:SQ\">Equatable</ref.protocol>, <ref.protocol usr=\"s:SY\">RawRepresentable</ref.protocol></decl.struct>",
key.conforms: [
{
key.kind: source.lang.swift.ref.protocol,
key.name: "Hashable",
key.usr: "s:SH"
},
{
key.kind: source.lang.swift.ref.protocol,
key.name: "Equatable",
@@ -316,7 +396,7 @@ var FooSubUnnamedEnumeratorA1: Int { get }
key.kind: source.lang.swift.decl.function.constructor,
key.name: "init(_:)",
key.usr: "s:So11FooSubEnum1VyABs6UInt32Vcfc",
key.offset: 113,
key.offset: 123,
key.length: 24,
key.fully_annotated_decl: "<decl.function.constructor><syntaxtype.keyword>init</syntaxtype.keyword>(<decl.var.parameter><decl.var.parameter.argument_label>_</decl.var.parameter.argument_label> <decl.var.parameter.name>rawValue</decl.var.parameter.name>: <decl.var.parameter.type><ref.struct usr=\"s:s6UInt32V\">UInt32</ref.struct></decl.var.parameter.type></decl.var.parameter>)</decl.function.constructor>",
key.entities: [
@@ -324,7 +404,7 @@ var FooSubUnnamedEnumeratorA1: Int { get }
key.kind: source.lang.swift.decl.var.local,
key.keyword: "_",
key.name: "rawValue",
key.offset: 130,
key.offset: 140,
key.length: 6
}
]
@@ -333,7 +413,7 @@ var FooSubUnnamedEnumeratorA1: Int { get }
key.kind: source.lang.swift.decl.function.constructor,
key.name: "init(rawValue:)",
key.usr: "s:So11FooSubEnum1V8rawValueABs6UInt32V_tcfc",
key.offset: 143,
key.offset: 153,
key.length: 31,
key.fully_annotated_decl: "<decl.function.constructor><syntaxtype.keyword>init</syntaxtype.keyword>(<decl.var.parameter><decl.var.parameter.argument_label>rawValue</decl.var.parameter.argument_label>: <decl.var.parameter.type><ref.struct usr=\"s:s6UInt32V\">UInt32</ref.struct></decl.var.parameter.type></decl.var.parameter>)</decl.function.constructor>",
key.entities: [
@@ -341,7 +421,7 @@ var FooSubUnnamedEnumeratorA1: Int { get }
key.kind: source.lang.swift.decl.var.local,
key.keyword: "rawValue",
key.name: "rawValue",
key.offset: 167,
key.offset: 177,
key.length: 6
}
]
@@ -350,17 +430,44 @@ var FooSubUnnamedEnumeratorA1: Int { get }
key.kind: source.lang.swift.decl.var.instance,
key.name: "rawValue",
key.usr: "s:So11FooSubEnum1V8rawValues6UInt32Vvp",
key.offset: 180,
key.offset: 190,
key.length: 20,
key.fully_annotated_decl: "<decl.var.instance><syntaxtype.keyword>var</syntaxtype.keyword> <decl.name>rawValue</decl.name>: <decl.var.type><ref.struct usr=\"s:s6UInt32V\">UInt32</ref.struct></decl.var.type></decl.var.instance>"
},
{
key.kind: source.lang.swift.decl.var.instance,
key.name: "hashValue",
key.usr: "s:SYsSHRzSH8RawValueSYRpzrlE04hashB0Sivp::SYNTHESIZED::c:@E@FooSubEnum1",
key.original_usr: "s:SYsSHRzSH8RawValueSYRpzrlE04hashB0Sivp",
key.offset: 216,
key.length: 37,
key.fully_annotated_decl: "<decl.var.instance><syntaxtype.attribute.builtin><syntaxtype.attribute.name>@inlinable</syntaxtype.attribute.name></syntaxtype.attribute.builtin> <syntaxtype.keyword>var</syntaxtype.keyword> <decl.name>hashValue</decl.name>: <decl.var.type><ref.struct usr=\"s:Si\">Int</ref.struct></decl.var.type> { <syntaxtype.keyword>get</syntaxtype.keyword> }</decl.var.instance>"
},
{
key.kind: source.lang.swift.decl.function.method.instance,
key.name: "hash(into:)",
key.usr: "s:SYsSHRzSH8RawValueSYRpzrlE4hash4intoys6HasherVz_tF::SYNTHESIZED::c:@E@FooSubEnum1",
key.original_usr: "s:SYsSHRzSH8RawValueSYRpzrlE4hash4intoys6HasherVz_tF",
key.offset: 259,
key.length: 47,
key.fully_annotated_decl: "<decl.function.method.instance><syntaxtype.attribute.builtin><syntaxtype.attribute.name>@inlinable</syntaxtype.attribute.name></syntaxtype.attribute.builtin> <syntaxtype.keyword>func</syntaxtype.keyword> <decl.name>hash</decl.name>(<decl.var.parameter><decl.var.parameter.argument_label>into</decl.var.parameter.argument_label> <decl.var.parameter.name>hasher</decl.var.parameter.name>: <syntaxtype.keyword>inout</syntaxtype.keyword> <decl.var.parameter.type><ref.struct usr=\"s:s6HasherV\">Hasher</ref.struct></decl.var.parameter.type></decl.var.parameter>)</decl.function.method.instance>",
key.entities: [
{
key.kind: source.lang.swift.decl.var.local,
key.keyword: "into",
key.name: "hasher",
key.offset: 299,
key.length: 6
}
]
},
{
key.kind: source.lang.swift.decl.function.operator.infix,
key.name: "!=(_:_:)",
key.usr: "s:SQsE2neoiySbx_xtFZ::SYNTHESIZED::c:@E@FooSubEnum1",
key.original_usr: "s:SQsE2neoiySbx_xtFZ",
key.doc.full_as_xml: "<Function><Name>!=(_:_:)</Name><USR>s:SQsE2neoiySbx_xtFZ::SYNTHESIZED::c:@E@FooSubEnum1</USR><Declaration>static func != (lhs: FooSubEnum1, rhs: FooSubEnum1) -&gt; Bool</Declaration><CommentParts><Abstract><Para>Returns a Boolean value indicating whether two values are not equal.</Para></Abstract><Parameters><Parameter><Name>lhs</Name><Direction isExplicit=\"0\">in</Direction><Discussion><Para>A value to compare.</Para></Discussion></Parameter><Parameter><Name>rhs</Name><Direction isExplicit=\"0\">in</Direction><Discussion><Para>Another value to compare.</Para></Discussion></Parameter></Parameters><Discussion><Para>Inequality is the inverse of equality. For any values <codeVoice>a</codeVoice> and <codeVoice>b</codeVoice>, <codeVoice>a != b</codeVoice> implies that <codeVoice>a == b</codeVoice> is <codeVoice>false</codeVoice>.</Para><Para>This is the default implementation of the not-equal-to operator (<codeVoice>!=</codeVoice>) for any type that conforms to <codeVoice>Equatable</codeVoice>.</Para></Discussion></CommentParts></Function>",
key.offset: 206,
key.offset: 312,
key.length: 63,
key.fully_annotated_decl: "<decl.function.operator.infix><syntaxtype.keyword>static</syntaxtype.keyword> <syntaxtype.keyword>func</syntaxtype.keyword> <decl.name>!= </decl.name>(<decl.var.parameter><decl.var.parameter.name>lhs</decl.var.parameter.name>: <decl.var.parameter.type><ref.struct usr=\"c:@E@FooSubEnum1\">FooSubEnum1</ref.struct></decl.var.parameter.type></decl.var.parameter>, <decl.var.parameter><decl.var.parameter.name>rhs</decl.var.parameter.name>: <decl.var.parameter.type><ref.struct usr=\"c:@E@FooSubEnum1\">FooSubEnum1</ref.struct></decl.var.parameter.type></decl.var.parameter>) -&gt; <decl.function.returntype><ref.struct usr=\"s:Sb\">Bool</ref.struct></decl.function.returntype></decl.function.operator.infix>",
key.entities: [
@@ -368,14 +475,14 @@ var FooSubUnnamedEnumeratorA1: Int { get }
key.kind: source.lang.swift.decl.var.local,
key.keyword: "_",
key.name: "lhs",
key.offset: 229,
key.offset: 335,
key.length: 11
},
{
key.kind: source.lang.swift.decl.var.local,
key.keyword: "_",
key.name: "rhs",
key.offset: 249,
key.offset: 355,
key.length: 11
}
]
@@ -387,7 +494,7 @@ var FooSubUnnamedEnumeratorA1: Int { get }
key.kind: source.lang.swift.decl.var.global,
key.name: "FooSubEnum1X",
key.usr: "c:@E@FooSubEnum1@FooSubEnum1X",
key.offset: 273,
key.offset: 379,
key.length: 37,
key.fully_annotated_decl: "<decl.var.global><syntaxtype.keyword>var</syntaxtype.keyword> <decl.name>FooSubEnum1X</decl.name>: <decl.var.type><ref.struct usr=\"c:@E@FooSubEnum1\">FooSubEnum1</ref.struct></decl.var.type> { <syntaxtype.keyword>get</syntaxtype.keyword> }</decl.var.global>",
key.modulename: "Foo.FooSub"
@@ -396,7 +503,7 @@ var FooSubUnnamedEnumeratorA1: Int { get }
key.kind: source.lang.swift.decl.var.global,
key.name: "FooSubEnum1Y",
key.usr: "c:@E@FooSubEnum1@FooSubEnum1Y",
key.offset: 312,
key.offset: 418,
key.length: 37,
key.fully_annotated_decl: "<decl.var.global><syntaxtype.keyword>var</syntaxtype.keyword> <decl.name>FooSubEnum1Y</decl.name>: <decl.var.type><ref.struct usr=\"c:@E@FooSubEnum1\">FooSubEnum1</ref.struct></decl.var.type> { <syntaxtype.keyword>get</syntaxtype.keyword> }</decl.var.global>",
key.modulename: "Foo.FooSub"
@@ -405,7 +512,7 @@ var FooSubUnnamedEnumeratorA1: Int { get }
key.kind: source.lang.swift.decl.var.global,
key.name: "FooSubUnnamedEnumeratorA1",
key.usr: "c:@Ea@FooSubUnnamedEnumeratorA1@FooSubUnnamedEnumeratorA1",
key.offset: 351,
key.offset: 457,
key.length: 42,
key.fully_annotated_decl: "<decl.var.global><syntaxtype.keyword>var</syntaxtype.keyword> <decl.name>FooSubUnnamedEnumeratorA1</decl.name>: <decl.var.type><ref.struct usr=\"s:Si\">Int</ref.struct></decl.var.type> { <syntaxtype.keyword>get</syntaxtype.keyword> }</decl.var.global>",
key.modulename: "Foo.FooSub"

File diff suppressed because it is too large Load Diff

View File

@@ -2,7 +2,7 @@ import FooHelper
public func fooSubFunc1(_ a: Int32) -> Int32
public struct FooSubEnum1 : Equatable, RawRepresentable {
public struct FooSubEnum1 : Hashable, Equatable, RawRepresentable {
public init(_ rawValue: UInt32)
@@ -82,151 +82,156 @@ public var FooSubUnnamedEnumeratorA1: Int { get }
{
key.kind: source.lang.swift.syntaxtype.typeidentifier,
key.offset: 92,
key.length: 8
},
{
key.kind: source.lang.swift.syntaxtype.typeidentifier,
key.offset: 102,
key.length: 9
},
{
key.kind: source.lang.swift.syntaxtype.typeidentifier,
key.offset: 103,
key.offset: 113,
key.length: 16
},
{
key.kind: source.lang.swift.syntaxtype.attribute.builtin,
key.offset: 127,
key.offset: 137,
key.length: 6
},
{
key.kind: source.lang.swift.syntaxtype.keyword,
key.offset: 134,
key.offset: 144,
key.length: 4
},
{
key.kind: source.lang.swift.syntaxtype.keyword,
key.offset: 139,
key.offset: 149,
key.length: 1
},
{
key.kind: source.lang.swift.syntaxtype.identifier,
key.offset: 141,
key.offset: 151,
key.length: 8
},
{
key.kind: source.lang.swift.syntaxtype.typeidentifier,
key.offset: 151,
key.offset: 161,
key.length: 6
},
{
key.kind: source.lang.swift.syntaxtype.attribute.builtin,
key.offset: 164,
key.offset: 174,
key.length: 6
},
{
key.kind: source.lang.swift.syntaxtype.keyword,
key.offset: 171,
key.offset: 181,
key.length: 4
},
{
key.kind: source.lang.swift.syntaxtype.identifier,
key.offset: 176,
key.offset: 186,
key.length: 8
},
{
key.kind: source.lang.swift.syntaxtype.typeidentifier,
key.offset: 186,
key.offset: 196,
key.length: 6
},
{
key.kind: source.lang.swift.syntaxtype.attribute.builtin,
key.offset: 199,
key.offset: 209,
key.length: 6
},
{
key.kind: source.lang.swift.syntaxtype.keyword,
key.offset: 206,
key.offset: 216,
key.length: 3
},
{
key.kind: source.lang.swift.syntaxtype.identifier,
key.offset: 210,
key.offset: 220,
key.length: 8
},
{
key.kind: source.lang.swift.syntaxtype.typeidentifier,
key.offset: 220,
key.length: 6
},
{
key.kind: source.lang.swift.syntaxtype.attribute.builtin,
key.offset: 230,
key.length: 6
},
{
key.kind: source.lang.swift.syntaxtype.keyword,
key.offset: 237,
key.length: 3
},
{
key.kind: source.lang.swift.syntaxtype.identifier,
key.offset: 241,
key.length: 12
},
{
key.kind: source.lang.swift.syntaxtype.typeidentifier,
key.offset: 255,
key.length: 11
},
{
key.kind: source.lang.swift.syntaxtype.keyword,
key.offset: 269,
key.length: 3
},
{
key.kind: source.lang.swift.syntaxtype.attribute.builtin,
key.offset: 276,
key.offset: 240,
key.length: 6
},
{
key.kind: source.lang.swift.syntaxtype.keyword,
key.offset: 283,
key.offset: 247,
key.length: 3
},
{
key.kind: source.lang.swift.syntaxtype.identifier,
key.offset: 287,
key.offset: 251,
key.length: 12
},
{
key.kind: source.lang.swift.syntaxtype.typeidentifier,
key.offset: 301,
key.offset: 265,
key.length: 11
},
{
key.kind: source.lang.swift.syntaxtype.keyword,
key.offset: 315,
key.offset: 279,
key.length: 3
},
{
key.kind: source.lang.swift.syntaxtype.attribute.builtin,
key.offset: 322,
key.offset: 286,
key.length: 6
},
{
key.kind: source.lang.swift.syntaxtype.keyword,
key.offset: 329,
key.offset: 293,
key.length: 3
},
{
key.kind: source.lang.swift.syntaxtype.identifier,
key.offset: 333,
key.offset: 297,
key.length: 12
},
{
key.kind: source.lang.swift.syntaxtype.typeidentifier,
key.offset: 311,
key.length: 11
},
{
key.kind: source.lang.swift.syntaxtype.keyword,
key.offset: 325,
key.length: 3
},
{
key.kind: source.lang.swift.syntaxtype.attribute.builtin,
key.offset: 332,
key.length: 6
},
{
key.kind: source.lang.swift.syntaxtype.keyword,
key.offset: 339,
key.length: 3
},
{
key.kind: source.lang.swift.syntaxtype.identifier,
key.offset: 343,
key.length: 25
},
{
key.kind: source.lang.swift.syntaxtype.typeidentifier,
key.offset: 360,
key.offset: 370,
key.length: 3
},
{
key.kind: source.lang.swift.syntaxtype.keyword,
key.offset: 366,
key.offset: 376,
key.length: 3
}
]
@@ -251,46 +256,52 @@ public var FooSubUnnamedEnumeratorA1: Int { get }
{
key.kind: source.lang.swift.ref.protocol,
key.offset: 92,
key.length: 8,
key.is_system: 1
},
{
key.kind: source.lang.swift.ref.protocol,
key.offset: 102,
key.length: 9,
key.is_system: 1
},
{
key.kind: source.lang.swift.ref.protocol,
key.offset: 103,
key.offset: 113,
key.length: 16,
key.is_system: 1
},
{
key.kind: source.lang.swift.ref.struct,
key.offset: 151,
key.offset: 161,
key.length: 6,
key.is_system: 1
},
{
key.kind: source.lang.swift.ref.struct,
key.offset: 186,
key.offset: 196,
key.length: 6,
key.is_system: 1
},
{
key.kind: source.lang.swift.ref.struct,
key.offset: 220,
key.offset: 230,
key.length: 6,
key.is_system: 1
},
{
key.kind: source.lang.swift.ref.struct,
key.offset: 255,
key.offset: 265,
key.length: 11
},
{
key.kind: source.lang.swift.ref.struct,
key.offset: 301,
key.offset: 311,
key.length: 11
},
{
key.kind: source.lang.swift.ref.struct,
key.offset: 360,
key.offset: 370,
key.length: 3,
key.is_system: 1
}
@@ -327,12 +338,15 @@ public var FooSubUnnamedEnumeratorA1: Int { get }
key.accessibility: source.lang.swift.accessibility.public,
key.name: "FooSubEnum1",
key.offset: 71,
key.length: 157,
key.length: 167,
key.nameoffset: 78,
key.namelength: 11,
key.bodyoffset: 121,
key.bodyoffset: 131,
key.bodylength: 106,
key.inheritedtypes: [
{
key.name: "Hashable"
},
{
key.name: "Equatable"
},
@@ -351,11 +365,16 @@ public var FooSubUnnamedEnumeratorA1: Int { get }
{
key.kind: source.lang.swift.structure.elem.typeref,
key.offset: 92,
key.length: 8
},
{
key.kind: source.lang.swift.structure.elem.typeref,
key.offset: 102,
key.length: 9
},
{
key.kind: source.lang.swift.structure.elem.typeref,
key.offset: 103,
key.offset: 113,
key.length: 16
}
],
@@ -364,13 +383,13 @@ public var FooSubUnnamedEnumeratorA1: Int { get }
key.kind: source.lang.swift.decl.function.method.instance,
key.accessibility: source.lang.swift.accessibility.public,
key.name: "init(_:)",
key.offset: 134,
key.offset: 144,
key.length: 24,
key.nameoffset: 134,
key.nameoffset: 144,
key.namelength: 24,
key.attributes: [
{
key.offset: 127,
key.offset: 137,
key.length: 6,
key.attribute: source.decl.attribute.public
}
@@ -379,7 +398,7 @@ public var FooSubUnnamedEnumeratorA1: Int { get }
{
key.kind: source.lang.swift.decl.var.parameter,
key.name: "rawValue",
key.offset: 139,
key.offset: 149,
key.length: 18,
key.typename: "UInt32"
}
@@ -389,13 +408,13 @@ public var FooSubUnnamedEnumeratorA1: Int { get }
key.kind: source.lang.swift.decl.function.method.instance,
key.accessibility: source.lang.swift.accessibility.public,
key.name: "init(rawValue:)",
key.offset: 171,
key.offset: 181,
key.length: 22,
key.nameoffset: 171,
key.nameoffset: 181,
key.namelength: 22,
key.attributes: [
{
key.offset: 164,
key.offset: 174,
key.length: 6,
key.attribute: source.decl.attribute.public
}
@@ -404,10 +423,10 @@ public var FooSubUnnamedEnumeratorA1: Int { get }
{
key.kind: source.lang.swift.decl.var.parameter,
key.name: "rawValue",
key.offset: 176,
key.offset: 186,
key.length: 16,
key.typename: "UInt32",
key.nameoffset: 176,
key.nameoffset: 186,
key.namelength: 8
}
]
@@ -417,14 +436,14 @@ public var FooSubUnnamedEnumeratorA1: Int { get }
key.accessibility: source.lang.swift.accessibility.public,
key.setter_accessibility: source.lang.swift.accessibility.public,
key.name: "rawValue",
key.offset: 206,
key.offset: 216,
key.length: 20,
key.typename: "UInt32",
key.nameoffset: 210,
key.nameoffset: 220,
key.namelength: 8,
key.attributes: [
{
key.offset: 199,
key.offset: 209,
key.length: 6,
key.attribute: source.decl.attribute.public
}
@@ -436,16 +455,16 @@ public var FooSubUnnamedEnumeratorA1: Int { get }
key.kind: source.lang.swift.decl.var.global,
key.accessibility: source.lang.swift.accessibility.public,
key.name: "FooSubEnum1X",
key.offset: 237,
key.offset: 247,
key.length: 37,
key.typename: "FooSubEnum1",
key.nameoffset: 241,
key.nameoffset: 251,
key.namelength: 12,
key.bodyoffset: 268,
key.bodyoffset: 278,
key.bodylength: 5,
key.attributes: [
{
key.offset: 230,
key.offset: 240,
key.length: 6,
key.attribute: source.decl.attribute.public
}
@@ -455,16 +474,16 @@ public var FooSubUnnamedEnumeratorA1: Int { get }
key.kind: source.lang.swift.decl.var.global,
key.accessibility: source.lang.swift.accessibility.public,
key.name: "FooSubEnum1Y",
key.offset: 283,
key.offset: 293,
key.length: 37,
key.typename: "FooSubEnum1",
key.nameoffset: 287,
key.nameoffset: 297,
key.namelength: 12,
key.bodyoffset: 314,
key.bodyoffset: 324,
key.bodylength: 5,
key.attributes: [
{
key.offset: 276,
key.offset: 286,
key.length: 6,
key.attribute: source.decl.attribute.public
}
@@ -474,16 +493,16 @@ public var FooSubUnnamedEnumeratorA1: Int { get }
key.kind: source.lang.swift.decl.var.global,
key.accessibility: source.lang.swift.accessibility.public,
key.name: "FooSubUnnamedEnumeratorA1",
key.offset: 329,
key.offset: 339,
key.length: 42,
key.typename: "Int",
key.nameoffset: 333,
key.nameoffset: 343,
key.namelength: 25,
key.bodyoffset: 365,
key.bodyoffset: 375,
key.bodylength: 5,
key.attributes: [
{
key.offset: 322,
key.offset: 332,
key.length: 6,
key.attribute: source.decl.attribute.public
}