@@ -19,6 +19,11 @@ extension Swift2JavaTranslator {
1919 _ printer: inout CodePrinter ,
2020 _ decl: ImportedFunc
2121 ) {
22+ guard let _ = translatedSignature ( for: decl) else {
23+ // Failed to translate. Skip.
24+ return
25+ }
26+
2227 printer. printSeparator ( decl. displayName)
2328
2429 printJavaBindingDescriptorClass ( & printer, decl)
@@ -33,7 +38,9 @@ extension Swift2JavaTranslator {
3338 _ decl: ImportedFunc
3439 ) {
3540 let thunkName = thunkNameRegistry. functionThunkName ( decl: decl)
36- let cFunc = decl. cFunctionDecl ( cName: thunkName)
41+ let translatedSignature = self . translatedSignature ( for: decl) !
42+ // 'try!' because we know 'loweredSignature' can be described with C.
43+ let cFunc = try ! translatedSignature. loweredSignature. cFunctionDecl ( cName: thunkName)
3744
3845 printer. printBraceBlock (
3946 """
@@ -129,19 +136,20 @@ extension Swift2JavaTranslator {
129136 }
130137
131138 var modifiers = " public "
132- switch decl. swiftSignature . selfParameter {
139+ switch decl. functionSignature . selfParameter {
133140 case . staticMethod, . initializer, nil :
134141 modifiers. append ( " static " )
135142 default :
136143 break
137144 }
138145
139- let returnTy = decl. translatedSignature. result. javaResultType
146+ let translatedSignature = self . translatedSignature ( for: decl) !
147+ let returnTy = translatedSignature. result. javaResultType
140148
141- var paramDecls = decl . translatedSignature. parameters
149+ var paramDecls = translatedSignature. parameters
142150 . flatMap ( \. javaParameters)
143151 . map { " \( $0. type) \( $0. name) " }
144- if decl . translatedSignature. requiresSwiftArena {
152+ if translatedSignature. requiresSwiftArena {
145153 paramDecls. append ( " SwiftArena swiftArena$ " )
146154 }
147155
@@ -157,7 +165,7 @@ extension Swift2JavaTranslator {
157165 \( modifiers) \( returnTy) \( methodName) ( \( paramDecls. joined ( separator: " , " ) ) )
158166 """
159167 ) { printer in
160- if case . instance( _) = decl. swiftSignature . selfParameter {
168+ if case . instance( _) = decl. functionSignature . selfParameter {
161169 // Make sure the object has not been destroyed.
162170 printer. print ( " $ensureAlive(); " )
163171 }
@@ -174,7 +182,9 @@ extension Swift2JavaTranslator {
174182 _ decl: ImportedFunc
175183 ) {
176184 //=== Part 1: prepare temporary arena if needed.
177- if decl. translatedSignature. requiresTemporaryArena {
185+ let translatedSignature = self . translatedSignature ( for: decl) !
186+
187+ if translatedSignature. requiresTemporaryArena {
178188 printer. print ( " try(var arena$ = Arena.ofConfined()) { " )
179189 printer. indent ( ) ;
180190 }
@@ -183,21 +193,21 @@ extension Swift2JavaTranslator {
183193 var downCallArguments : [ String ] = [ ]
184194
185195 // Regular parameters.
186- for (i, parameter) in decl . translatedSignature. parameters. enumerated ( ) {
187- let original = decl. swiftSignature . parameters [ i]
196+ for (i, parameter) in translatedSignature. parameters. enumerated ( ) {
197+ let original = decl. functionSignature . parameters [ i]
188198 let parameterName = original. parameterName ?? " _ \( i) "
189199 let lowered = parameter. conversion. render ( & printer, parameterName)
190200 downCallArguments. append ( lowered)
191201 }
192202
193203 // 'self' parameter.
194- if let selfParameter = decl . translatedSignature. selfParameter {
204+ if let selfParameter = translatedSignature. selfParameter {
195205 let lowered = selfParameter. conversion. render ( & printer, " this " )
196206 downCallArguments. append ( lowered)
197207 }
198208
199209 // Indirect return receivers.
200- for outParameter in decl . translatedSignature. result. outParameters {
210+ for outParameter in translatedSignature. result. outParameters {
201211 let memoryLayout = renderMemoryLayoutValue ( for: outParameter. type)
202212
203213 let arena = if let className = outParameter. type. className,
@@ -222,27 +232,27 @@ extension Swift2JavaTranslator {
222232 let downCall = " \( thunkName) .call( \( downCallArguments. joined ( separator: " , " ) ) ) "
223233
224234 //=== Part 4: Convert the return value.
225- if decl . translatedSignature. result. javaResultType == . void {
235+ if translatedSignature. result. javaResultType == . void {
226236 printer. print ( " \( downCall) ; " )
227237 } else {
228238 let placeholder : String
229- if decl . translatedSignature. result. outParameters. isEmpty {
239+ if translatedSignature. result. outParameters. isEmpty {
230240 placeholder = downCall
231241 } else {
232242 // FIXME: Support cdecl thunk returning a value while populating the out parameters.
233243 printer. print ( " \( downCall) ; " )
234244 placeholder = " _result "
235245 }
236- let result = decl . translatedSignature. result. conversion. render ( & printer, placeholder)
246+ let result = translatedSignature. result. conversion. render ( & printer, placeholder)
237247
238- if decl . translatedSignature. result. javaResultType != . void {
248+ if translatedSignature. result. javaResultType != . void {
239249 printer. print ( " return \( result) ; " )
240250 } else {
241251 printer. print ( " \( result) ; " )
242252 }
243253 }
244254
245- if decl . translatedSignature. requiresTemporaryArena {
255+ if translatedSignature. requiresTemporaryArena {
246256 printer. outdent ( )
247257 printer. print ( " } " )
248258 }
0 commit comments