@@ -87,10 +87,10 @@ public final class OrionGenerator {
8787 from method: OrionData . ClassHook . Method ,
8888 className: String ,
8989 index: Int
90- ) -> ( orig: String ? , supr: String ? , main: String , activation: String ) {
90+ ) -> ( orig: String ? , supr: String ? , main: String , activation: String ? ) {
9191 let orig : String ?
9292 let supr : String ?
93- let register : String
93+ let register : String ?
9494
9595 let args = arguments ( for: method. function)
9696 let argsList = args. joined ( separator: " , " )
@@ -99,11 +99,11 @@ public final class OrionGenerator {
9999 // order of operands matters here; we don't want to evaluate isAddition
100100 // if it's a deinitializer, so that Orion can notify the user if they
101101 // have a pointless `// orion:new`
102- let isAddition = !method. isDeinitializer && method. isAddition
102+ let isAddition = !method. isDeinitializer && method. isAddition ( )
103103 let origIdent = " orion_ \( isAddition ? " imp " : " orig " ) \( index) "
104104 let selIdent = " orion_sel \( index) "
105105
106- let returnsRetained = !method. isDeinitializer && method. returnsRetained
106+ let returnsRetained = !method. isDeinitializer && method. returnsRetained ( )
107107 let takeRetained = returnsRetained ? " .takeRetainedValue() " : " "
108108 let passRetained = returnsRetained ? " Unmanaged.passRetained " : " "
109109 let methodClosure = returnsRetained ? method. methodClosureUnmanaged : method. methodClosure
@@ -137,14 +137,16 @@ public final class OrionGenerator {
137137 addMethod( \( selIdent) , \( origIdent) , isClassMethod: \( method. isClassMethod) )
138138 """
139139 } else {
140+ let isTramp = method. isSuprTramp ( )
141+
140142 // While we don't need to add @objc due to the class being @objcMembers (and the #selector
141143 // failing if the function can't be represented in objc), this results in better diagnostics
142144 // than merely having an error on the #selector line
143145 let funcOverride = " \( method. objcAttribute == nil ? " @objc " : " " ) \( method. function. function) "
144146
145147 orig = """
146148 \( funcOverride) {
147- _Glue. \( origIdent) (target, _Glue. \( selIdent) \( commaArgs) ) \( takeRetained)
149+ \( isTramp ? " trampOrigError() " : " _Glue. \( origIdent) (target, _Glue. \( selIdent) \( commaArgs) ) \( takeRetained) " )
148150 }
149151 """
150152
@@ -157,7 +159,7 @@ public final class OrionGenerator {
157159 }
158160 """
159161
160- register = """
162+ register = isTramp ? nil : """
161163 builder.addHook( \( selIdent) , \( origIdent) , isClassMethod: \( method. isClassMethod) ) { \( origIdent) = $0 }
162164 """
163165 }
@@ -209,7 +211,7 @@ public final class OrionGenerator {
209211 static let storage = initializeStorage()
210212 \( indentedMains)
211213 static func activate(withClassHookBuilder builder: inout _GlueClassHookBuilder) {
212- \( registers. joined ( separator: " \n " ) )
214+ \( registers. compactMap { $0 } . joined ( separator: " \n " ) )
213215 }
214216 }
215217 }
0 commit comments