JS/RTTI: fixed is-check on nullable reified parameters

#KT-7016 fixed
    #KT-8012 fixed
This commit is contained in:
Alexey Tsvetkov
2015-06-10 16:44:06 +03:00
committed by Alexey Andreev
parent e1d10abfa1
commit 0b9c041d0a
11 changed files with 121 additions and 56 deletions
+12 -8
View File
@@ -533,23 +533,27 @@ var Kotlin = {};
Object.defineProperty(Kotlin.modules, id, {value: declaration});
};
function defineInlineFunction(tag, fun) {
Kotlin.defineInlineFunction = function(tag, fun) {
return fun;
}
};
Kotlin.defineInlineFunction = defineInlineFunction;
Kotlin.isTypeOf = defineInlineFunction('stdlib.kotlin.isTypeOf', function (type) {
Kotlin.isTypeOf = function(type) {
return function (object) {
return typeof object === type;
}
});
};
Kotlin.isInstanceOf = defineInlineFunction('stdlib.kotlin.isInstanceOf', function (klass) {
Kotlin.isInstanceOf = function (klass) {
return function (object) {
return Kotlin.isType(object, klass);
}
});
};
Kotlin.orNull = function (fn) {
return function (object) {
return object == null || fn(object);
}
};
Kotlin.kotlinModuleMetadata = function (abiVersion, moduleName, data) {
};
@@ -1,4 +1,4 @@
package foo
inline fun <reified T> isInstance(x: Any): Boolean =
x is T
inline fun <reified T> isInstance(x: Any?): Boolean =
x is T
+4
View File
@@ -7,5 +7,9 @@ fun box(): String {
assertEquals(true, isInstance<Boolean>(false))
assertEquals(false, isInstance<Boolean>("true"))
assertEquals(true, isInstance<Boolean?>(true), "isInstance<Boolean?>(true)")
assertEquals(true, isInstance<Boolean?>(null), "isInstance<Boolean?>(null)")
assertEquals(false, isInstance<Boolean?>("true"), "isInstance<Boolean?>(\"true\")")
return "OK"
}
+4
View File
@@ -7,5 +7,9 @@ fun box(): String {
assertEquals(false, isInstance<Char>(""))
assertEquals(false, isInstance<Char>("cc"))
assertEquals(true, isInstance<Char?>('c'), "isInstance<Char?>('c')")
assertEquals(true, isInstance<Char?>(null), "isInstance<Char?>(null)")
assertEquals(false, isInstance<Char?>("cc"), "isInstance<Char?>(\"cc\")")
return "OK"
}
+4
View File
@@ -17,5 +17,9 @@ fun box(): String {
assertEquals(true, isInstance<D>(D()))
assertEquals(true, isInstance<C>(D()))
assertEquals(true, isInstance<D?>(D()), "isInstance<D?>(D())")
assertEquals(true, isInstance<D?>(null), "isInstance<D?>(null)")
assertEquals(false, isInstance<D?>(C()), "isInstance<D?>(C())")
return "OK"
}
+4
View File
@@ -15,5 +15,9 @@ fun box(): String {
assertEquals(true, isInstance<Number>(0.0))
assertEquals(false, isInstance<Number>("0"))
assertEquals(true, isInstance<Int?>(0), "isInstance<Int?>(0)")
assertEquals(true, isInstance<Int?>(null), "isInstance<Int?>(null)")
assertEquals(false, isInstance<Int?>(true), "isInstance<Int?>(true)")
return "OK"
}
+4
View File
@@ -6,5 +6,9 @@ fun box(): String {
assertEquals(true, isInstance<String>(""))
assertEquals(true, isInstance<String>("a"))
assertEquals(true, isInstance<String?>(""), "isInstance<String?>(\"\")")
assertEquals(true, isInstance<String?>(null), "isInstance<String?>(null)")
assertEquals(false, isInstance<String?>(10), "isInstance<String?>(10)")
return "OK"
}