Skip to content

Commit

Permalink
Merge pull request #27 from readdle/fix/primitive-optional-return-type
Browse files Browse the repository at this point in the history
Fix primitive optional return types
  • Loading branch information
andriydruk authored Jan 30, 2021
2 parents 1db1abe + f21a377 commit 0bb2199
Show file tree
Hide file tree
Showing 2 changed files with 59 additions and 4 deletions.
27 changes: 27 additions & 0 deletions compiler/src/main/java/com/readdle/codegen/SwiftEnvironment.java
Original file line number Diff line number Diff line change
Expand Up @@ -151,6 +151,33 @@ Type makeUnsigned() {
throw new IllegalStateException(swiftType + " can't be unsigned");
}
}

public String primitiveDefaultValue() {
switch (swiftType) {
case "Bool":
return "jboolean(JNI_FALSE)";
case "Int":
case "Int32":
case "UInt":
case "UInt32":
return "jint(0)";
case "Int8":
case "UInt8":
return "jbyte(0)";
case "Int16":
case "UInt16":
return "jshort(0)";
case "Int64":
case "UInt64":
return "jlong(0)";
case "Float":
return "jfloat(0)";
case "Double":
return "jdouble(0)";
default:
throw new IllegalStateException(swiftType + " is not primitive");
}
}
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -99,7 +99,10 @@ public void generateCode(SwiftWriter swiftWriter, String javaFullName, String sw

String retType = "";
if (returnSwiftType != null) {
retType = " -> " + returnSwiftType.javaSigType(isReturnTypeOptional) + "?";
retType = " -> " + returnSwiftType.javaSigType(isReturnTypeOptional);
if (isReturnTypeOptional || !returnSwiftType.isPrimitiveType()) {
retType += "?";
}
}

swiftWriter.emit(String.format(")%s {\n", retType));
Expand Down Expand Up @@ -143,7 +146,17 @@ else if (param.isOptional) {
swiftWriter.emitStatement("}");
swiftWriter.emitStatement("catch {");
Utils.handleRuntimeError(swiftWriter);
swiftWriter.emitStatement(String.format("return%s", returnSwiftType != null ? " nil" : ""));
if (returnSwiftType == null) {
swiftWriter.emitStatement("return");
}
else {
if (!isReturnTypeOptional && returnSwiftType.isPrimitiveType()) {
swiftWriter.emitStatement("return " + returnSwiftType.primitiveDefaultValue());
}
else {
swiftWriter.emitStatement("return nil");
}
}
swiftWriter.emitStatement("}");
}

Expand Down Expand Up @@ -192,15 +205,30 @@ else if (param.isOptional) {
swiftWriter.emitStatement("}");
swiftWriter.emitStatement("catch {");
Utils.handleRuntimeError(swiftWriter);
swiftWriter.emitStatement("return nil");
if (!isReturnTypeOptional && returnSwiftType.isPrimitiveType()) {
swiftWriter.emitStatement("return " + returnSwiftType.primitiveDefaultValue());
}
else {
swiftWriter.emitStatement("return nil");
}
swiftWriter.emitStatement("}");
}

if (isThrown) {
swiftWriter.emitStatement("}");
swiftWriter.emitStatement("catch {");
Utils.handleError(swiftWriter);
swiftWriter.emitStatement(String.format("return%s", returnSwiftType != null ? " nil" : ""));
if (returnSwiftType == null) {
swiftWriter.emitStatement("return");
}
else {
if (!isReturnTypeOptional && returnSwiftType.isPrimitiveType()) {
swiftWriter.emitStatement("return " + returnSwiftType.primitiveDefaultValue());
}
else {
swiftWriter.emitStatement("return nil");
}
}
swiftWriter.emitStatement("}");
}

Expand Down

0 comments on commit 0bb2199

Please sign in to comment.