Skip to content

Commit 129a70d

Browse files
committed
Dev: fix local table overflow
1 parent 1a8e1d0 commit 129a70d

File tree

5 files changed

+30
-5
lines changed

5 files changed

+30
-5
lines changed

compiler/src/main/java/com/readdle/codegen/JavaSwiftProcessor.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -256,6 +256,13 @@ private void generateJavaSwift(Filer filer) throws IOException {
256256
swiftWriter.emitStatement("public func Java_com_readdle_codegen_anotation_JavaBridgeable_init(env: UnsafeMutablePointer<JNIEnv?>, clazz: jclass) {");
257257
swiftWriter.emitStatement("JavaCoderConfig.RegisterBasicJavaTypes()");
258258
swiftWriter.emitStatement("}");
259+
260+
// TODO: move to sample project
261+
swiftWriter.emitStatement("@_silgen_name(\"Java_com_readdle_codegen_anotation_JavaSwift_dumpReferenceTables\")");
262+
swiftWriter.emitStatement("public func Java_com_readdle_codegen_anotation_JavaBridgeable_dumpReferenceTables(env: UnsafeMutablePointer<JNIEnv?>, clazz: jclass) {");
263+
swiftWriter.emitStatement("JNI.dumpReferenceTables()");
264+
swiftWriter.emitStatement("}");
265+
259266
swiftWriter.close();
260267
}
261268

compiler/src/main/java/com/readdle/codegen/SwiftCallbackFuncDescriptor.java

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package com.readdle.codegen;
22

33
import com.readdle.codegen.anotation.SwiftCallbackFunc;
4-
import com.readdle.codegen.anotation.SwiftFunc;
54

65
import java.io.IOException;
76
import java.util.Arrays;
@@ -111,16 +110,22 @@ void generateCode(SwiftWriter swiftWriter, String javaFullName, String swiftType
111110
}
112111

113112
for (SwiftParamDescriptor param : params) {
114-
swiftWriter.emitStatement(String.format("let java%s: JNIArgumentProtocol", param.name));
113+
swiftWriter.emitStatement(String.format("var java%s: JNIArgumentProtocol = jnull()", param.name));
115114
}
116115

116+
swiftWriter.emitStatement("defer {");
117+
for (SwiftParamDescriptor param : params) {
118+
swiftWriter.emitStatement(String.format("if let localRef = java%1$s as? jobject {", param.name));
119+
swiftWriter.emitStatement("JNI.DeleteLocalRef(localRef)");
120+
swiftWriter.emitStatement("}");
121+
}
122+
swiftWriter.emitStatement("}");
123+
117124
swiftWriter.emitStatement("do {");
118125
for (SwiftParamDescriptor param : params) {
119126
if (param.isOptional) {
120127
swiftWriter.emitStatement(String.format("if let %1$s = %1$s {", param.name));
121128
swiftWriter.emitStatement(String.format("java%1$s = try %1$s.javaObject()", param.name));
122-
swiftWriter.emitStatement("} else {");
123-
swiftWriter.emitStatement(String.format("java%s = jnull()", param.name));
124129
swiftWriter.emitStatement("}");
125130
}
126131
else {
@@ -135,7 +140,10 @@ void generateCode(SwiftWriter swiftWriter, String javaFullName, String swiftType
135140
swiftWriter.emitStatement("assert(false, errorString)");
136141
swiftWriter.emitStatement("return");
137142
}
138-
else {
143+
else if (isReturnTypeOptional) {
144+
swiftWriter.emitStatement("assert(false, errorString)");
145+
swiftWriter.emitStatement("return nil");
146+
} else {
139147
swiftWriter.emitStatement("fatalError(errorString)");
140148
}
141149
swiftWriter.emitStatement("}");

library/src/main/java/com/readdle/codegen/anotation/JavaSwift.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,4 +6,6 @@ private JavaSwift() {}
66

77
public static native void init();
88

9+
public static native void dumpReferenceTables();
10+
911
}

library/src/main/java/com/readdle/codegen/anotation/SwiftError.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,4 +6,8 @@ public SwiftError() {
66

77
}
88

9+
public SwiftError(String message) {
10+
super(message);
11+
}
12+
913
}

library/src/main/java/com/readdle/codegen/anotation/SwiftRuntimeError.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,4 +6,8 @@ public class SwiftRuntimeError extends RuntimeException {
66
public SwiftRuntimeError() {
77

88
}
9+
10+
public SwiftRuntimeError(String message) {
11+
super(message);
12+
}
913
}

0 commit comments

Comments
 (0)