Fix instanceof GLOBAL.Object.
Bug: #9347
Bug-Link: http://github.com/gwtproject/gwt/issues/9347
Change-Id: I4996be8f0b347b696f27763669550cf739729df7
diff --git a/dev/core/super/com/google/gwt/dev/jjs/intrinsic/com/google/gwt/lang/Cast.java b/dev/core/super/com/google/gwt/dev/jjs/intrinsic/com/google/gwt/lang/Cast.java
index 242bb41..232e723 100644
--- a/dev/core/super/com/google/gwt/dev/jjs/intrinsic/com/google/gwt/lang/Cast.java
+++ b/dev/core/super/com/google/gwt/dev/jjs/intrinsic/com/google/gwt/lang/Cast.java
@@ -244,7 +244,7 @@
@HasNoSideEffects
private static native boolean isJsObject(Object src)/*-{
- return typeof(src) === "object";
+ return typeof(src) === "object" || typeof (src) == "function";
}-*/;
@HasNoSideEffects
diff --git a/user/test/com/google/gwt/core/interop/NativeJsTypeTest.java b/user/test/com/google/gwt/core/interop/NativeJsTypeTest.java
index de5c20f..ff4d910 100644
--- a/user/test/com/google/gwt/core/interop/NativeJsTypeTest.java
+++ b/user/test/com/google/gwt/core/interop/NativeJsTypeTest.java
@@ -265,8 +265,8 @@
// True cases.
assertTrue(aJsFunction instanceof NativeFunction);
assertTrue(aJsFunction instanceof SomeFunctionalInterface);
+ assertTrue(aJsFunction instanceof NativeObject);
// False cases.
- assertFalse(aJsFunction instanceof NativeObject);
assertFalse(aJsFunction instanceof NativeArray);
assertFalse(aJsFunction instanceof NativeNumber);
assertFalse(aJsFunction instanceof NativeString);
@@ -275,8 +275,8 @@
// True cases.
assertTrue(anotherFunction instanceof NativeFunction);
assertTrue(anotherFunction instanceof SomeFunctionalInterface);
+ assertTrue(anotherFunction instanceof NativeObject);
// False cases.
- assertFalse(anotherFunction instanceof NativeObject);
assertFalse(anotherFunction instanceof NativeArray);
assertFalse(anotherFunction instanceof NativeNumber);
assertFalse(anotherFunction instanceof NativeString);
@@ -344,8 +344,26 @@
assertFalse(aBoxedNumber instanceof NativeArray);
assertFalse(aBoxedNumber instanceof NativeFunction);
assertFalse(aBoxedNumber instanceof NativeString);
+
+ Object nullObject = null;
+
+ assertFalse(nullObject instanceof NativeObject);
+ assertFalse(nullObject instanceof NativeArray);
+ assertFalse(nullObject instanceof NativeFunction);
+ assertFalse(nullObject instanceof NativeString);
+ assertFalse(nullObject instanceof NativeNumber);
+
+ Object undefined = getUndefined();
+ assertFalse(undefined instanceof NativeObject);
+ assertFalse(undefined instanceof NativeArray);
+ assertFalse(undefined instanceof NativeFunction);
+ assertFalse(undefined instanceof NativeString);
+ assertFalse(undefined instanceof NativeNumber);
}
+ private static native Object getUndefined() /*-{
+ }-*/;
+
@JsType(isNative = true)
private static class UnreferencedNativeType { }