@@ -87,10 +87,10 @@ public final class OrionGenerator {
87
87
from method: OrionData . ClassHook . Method ,
88
88
className: String ,
89
89
index: Int
90
- ) -> ( orig: String ? , supr: String ? , main: String , activation: String ) {
90
+ ) -> ( orig: String ? , supr: String ? , main: String , activation: String ? ) {
91
91
let orig : String ?
92
92
let supr : String ?
93
- let register : String
93
+ let register : String ?
94
94
95
95
let args = arguments ( for: method. function)
96
96
let argsList = args. joined ( separator: " , " )
@@ -99,11 +99,11 @@ public final class OrionGenerator {
99
99
// order of operands matters here; we don't want to evaluate isAddition
100
100
// if it's a deinitializer, so that Orion can notify the user if they
101
101
// have a pointless `// orion:new`
102
- let isAddition = !method. isDeinitializer && method. isAddition
102
+ let isAddition = !method. isDeinitializer && method. isAddition ( )
103
103
let origIdent = " orion_ \( isAddition ? " imp " : " orig " ) \( index) "
104
104
let selIdent = " orion_sel \( index) "
105
105
106
- let returnsRetained = !method. isDeinitializer && method. returnsRetained
106
+ let returnsRetained = !method. isDeinitializer && method. returnsRetained ( )
107
107
let takeRetained = returnsRetained ? " .takeRetainedValue() " : " "
108
108
let passRetained = returnsRetained ? " Unmanaged.passRetained " : " "
109
109
let methodClosure = returnsRetained ? method. methodClosureUnmanaged : method. methodClosure
@@ -137,14 +137,16 @@ public final class OrionGenerator {
137
137
addMethod( \( selIdent) , \( origIdent) , isClassMethod: \( method. isClassMethod) )
138
138
"""
139
139
} else {
140
+ let isTramp = method. isSuprTramp ( )
141
+
140
142
// While we don't need to add @objc due to the class being @objcMembers (and the #selector
141
143
// failing if the function can't be represented in objc), this results in better diagnostics
142
144
// than merely having an error on the #selector line
143
145
let funcOverride = " \( method. objcAttribute == nil ? " @objc " : " " ) \( method. function. function) "
144
146
145
147
orig = """
146
148
\( funcOverride) {
147
- _Glue. \( origIdent) (target, _Glue. \( selIdent) \( commaArgs) ) \( takeRetained)
149
+ \( isTramp ? " trampOrigError() " : " _Glue. \( origIdent) (target, _Glue. \( selIdent) \( commaArgs) ) \( takeRetained) " )
148
150
}
149
151
"""
150
152
@@ -157,7 +159,7 @@ public final class OrionGenerator {
157
159
}
158
160
"""
159
161
160
- register = """
162
+ register = isTramp ? nil : """
161
163
builder.addHook( \( selIdent) , \( origIdent) , isClassMethod: \( method. isClassMethod) ) { \( origIdent) = $0 }
162
164
"""
163
165
}
@@ -209,7 +211,7 @@ public final class OrionGenerator {
209
211
static let storage = initializeStorage()
210
212
\( indentedMains)
211
213
static func activate(withClassHookBuilder builder: inout _GlueClassHookBuilder) {
212
- \( registers. joined ( separator: " \n " ) )
214
+ \( registers. compactMap { $0 } . joined ( separator: " \n " ) )
213
215
}
214
216
}
215
217
}
0 commit comments