File tree Expand file tree Collapse file tree 3 files changed +12
-7
lines changed
SwiftCompilerSources/Sources Expand file tree Collapse file tree 3 files changed +12
-7
lines changed Original file line number Diff line number Diff line change @@ -122,7 +122,7 @@ extension DestroyValueInst : DevirtualizableDestroy {
122
122
let builder = Builder ( before: self , context)
123
123
let subs = context. getContextSubstitutionMap ( for: type)
124
124
let deinitRef = builder. createFunctionRef ( deinitializer)
125
- if deinitializer. argumentConventions [ deinitializer. selfArgumentIndex] . isIndirect {
125
+ if deinitializer. argumentConventions [ deinitializer. selfArgumentIndex! ] . isIndirect {
126
126
let allocStack = builder. createAllocStack ( type)
127
127
builder. createStore ( source: destroyedValue, destination: allocStack, ownership: . initialize)
128
128
builder. createApply ( function: deinitRef, subs, arguments: [ allocStack] )
@@ -194,7 +194,7 @@ extension DestroyAddrInst : DevirtualizableDestroy {
194
194
let builder = Builder ( before: self , context)
195
195
let subs = context. getContextSubstitutionMap ( for: destroyedAddress. type)
196
196
let deinitRef = builder. createFunctionRef ( deinitializer)
197
- if !deinitializer. argumentConventions [ deinitializer. selfArgumentIndex] . isIndirect {
197
+ if !deinitializer. argumentConventions [ deinitializer. selfArgumentIndex! ] . isIndirect {
198
198
let value = builder. createLoad ( fromAddress: destroyedAddress, ownership: . take)
199
199
builder. createApply ( function: deinitRef, subs, arguments: [ value] )
200
200
} else {
Original file line number Diff line number Diff line change @@ -690,10 +690,10 @@ extension StringParser {
690
690
private mutating func parseArgumentIndexFromSource( for function: Function ,
691
691
params: Dictionary < String , Int > ) throws -> Int {
692
692
if consume ( " self " ) {
693
- if ! function. hasSelfArgument {
693
+ guard let selfArgIdx = function. selfArgumentIndex else {
694
694
try throwError ( " function does not have a self argument " )
695
695
}
696
- return function . selfArgumentIndex
696
+ return selfArgIdx
697
697
}
698
698
if let name = consumeIdentifier ( ) {
699
699
guard let idx = params [ name] else {
Original file line number Diff line number Diff line change @@ -320,10 +320,15 @@ extension Function {
320
320
321
321
public var hasSelfArgument : Bool { argumentConventions. selfIndex != nil }
322
322
323
- public var selfArgumentIndex : Int { argumentConventions. selfIndex! }
323
+ public var selfArgumentIndex : Int ? { argumentConventions. selfIndex }
324
+
325
+ public var selfArgument : FunctionArgument ? {
326
+ if let selfArgIdx = selfArgumentIndex {
327
+ return arguments [ selfArgIdx]
328
+ }
329
+ return nil
330
+ }
324
331
325
- public var selfArgument : FunctionArgument { arguments [ selfArgumentIndex] }
326
-
327
332
public var dynamicSelfMetadata : FunctionArgument ? {
328
333
if bridged. hasDynamicSelfMetadata ( ) {
329
334
return arguments. last!
You can’t perform that action at this time.
0 commit comments