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 { }