JS backend: support for Throwable.getMessage

This commit is contained in:
Michael Nedzelsky
2014-10-05 10:19:11 +04:00
parent 5649797461
commit e5bbc2a0d8
6 changed files with 98 additions and 24 deletions
@@ -34,6 +34,7 @@ import java.util.List;
public abstract class CompositeFIF implements FunctionIntrinsicFactory {
@NotNull
public static final FunctionIntrinsic LENGTH_PROPERTY_INTRINSIC = new BuiltInPropertyIntrinsic("length");
public static final FunctionIntrinsic MESSAGE_PROPERTY_INTRINSIC = new BuiltInPropertyIntrinsic("message");
public static final FunctionIntrinsic IS_EMPTY_INTRINSIC = new FunctionIntrinsic() {
@NotNull
@Override
@@ -167,6 +167,8 @@ public final class TopLevelFIF extends CompositeFIF {
add(pattern("kotlin.js", "Json", "get"), ArrayFIF.GET_INTRINSIC);
add(pattern("kotlin.js", "Json", "set"), ArrayFIF.SET_INTRINSIC);
add(pattern("kotlin", "Throwable", "getMessage"), MESSAGE_PROPERTY_INTRINSIC);
}
private abstract static class NativeMapGetSet extends CallParametersAwareFunctionIntrinsic {
@@ -0,0 +1,57 @@
package foo
fun box(): String {
var s: String = ""
try {
throw Exception("Exception")
} catch (e: Throwable) {
s = "Throwable:" + e.getMessage()!!
}
assertEquals("Throwable:Exception", s)
s = ""
try {
throw Exception("Exception")
} catch (e: Exception) {
s = "Exception:" + e.getMessage()!!
}
assertEquals("Exception:Exception", s)
s = ""
try {
throw RuntimeException("RuntimeException")
} catch (e: Exception) {
s = "Exception:" + e.getMessage()!!
}
assertEquals("Exception:RuntimeException", s)
s = ""
try {
throw NullPointerException("NullPointerException")
} catch (e: Exception) {
s = "Exception:" + e.getMessage()!!
}
assertEquals("Exception:NullPointerException", s)
s = ""
try {
throw IndexOutOfBoundsException("IndexOutOfBoundsException")
} catch (e: NullPointerException) {
s = "NullPointerException:" + e.getMessage()!!
} catch (e: RuntimeException) {
s = "RuntimeException:" + e.getMessage()!!
} catch (e: Exception) {
s = "Exception:" + e.getMessage()!!
}
assertEquals("RuntimeException:IndexOutOfBoundsException", s)
try {
throw RuntimeException()
} catch (e: Exception) {
assertEquals(null, e.getMessage())
}
return "OK"
}
+22 -10
View File
@@ -164,16 +164,28 @@
return new Kotlin.Progression(from, to, -1);
};
Kotlin.RuntimeException = Kotlin.createClassNow();
Kotlin.NullPointerException = Kotlin.createClassNow();
Kotlin.NoSuchElementException = Kotlin.createClassNow();
Kotlin.IllegalArgumentException = Kotlin.createClassNow();
Kotlin.IllegalStateException = Kotlin.createClassNow();
Kotlin.UnsupportedOperationException = Kotlin.createClassNow();
Kotlin.IOException = Kotlin.createClassNow();
Kotlin.Exception = Error;
Kotlin.throwNPE = function () {
throw new Kotlin.NullPointerException();
function createClassNowWithMessage(base) {
return Kotlin.createClassNow(base,
/** @constructs */
function (message) {
this.message = (message !== undefined) ? message : null;
}
);
}
Kotlin.RuntimeException = createClassNowWithMessage(Kotlin.Exception);
Kotlin.NullPointerException = createClassNowWithMessage(Kotlin.RuntimeException);
Kotlin.NoSuchElementException = createClassNowWithMessage(Kotlin.RuntimeException);
Kotlin.IllegalArgumentException = createClassNowWithMessage(Kotlin.RuntimeException);
Kotlin.IllegalStateException = createClassNowWithMessage(Kotlin.RuntimeException);
Kotlin.UnsupportedOperationException = createClassNowWithMessage(Kotlin.RuntimeException);
Kotlin.IndexOutOfBoundsException = createClassNowWithMessage(Kotlin.RuntimeException);
Kotlin.IOException = createClassNowWithMessage(Kotlin.Exception);
Kotlin.throwNPE = function (message) {
throw new Kotlin.NullPointerException(message);
};
function throwAbstractFunctionInvocationError(funName) {
@@ -468,7 +480,7 @@
},
checkRange: function (index) {
if (index < 0 || index >= this.array.length) {
throw new RangeError();
throw new Kotlin.IndexOutOfBoundsException();
}
}
});