void XPCWrappedNativeScope::SetGlobal(XPCCallContext& ccx, JSObject* aGlobal) { // We allow for calling this more than once. This feature is used by // nsXPConnect::InitClassesWithNewWrappedGlobal. mGlobalJSObject = aGlobal; mScriptObjectPrincipal = nsnull; // Now init our script object principal, if the new global has one const JSClass* jsClass = js::GetObjectJSClass(aGlobal); if (!(~jsClass->flags & (JSCLASS_HAS_PRIVATE | JSCLASS_PRIVATE_IS_NSISUPPORTS))) { // Our global has an nsISupports native pointer. Let's // see whether it's what we want. nsISupports* priv = (nsISupports*)xpc_GetJSPrivate(aGlobal); nsCOMPtr<nsIXPConnectWrappedNative> native = do_QueryInterface(priv); nsCOMPtr<nsIScriptObjectPrincipal> sop; if (native) { sop = do_QueryWrappedNative(native); } if (!sop) { sop = do_QueryInterface(priv); } mScriptObjectPrincipal = sop; } // Lookup 'globalObject.Object.prototype' for our wrapper's proto { AutoJSErrorAndExceptionEater eater(ccx); // scoped error eater jsval val; jsid idObj = mRuntime->GetStringID(XPCJSRuntime::IDX_OBJECT); jsid idProto = mRuntime->GetStringID(XPCJSRuntime::IDX_PROTOTYPE); if (JS_GetPropertyById(ccx, aGlobal, idObj, &val) && !JSVAL_IS_PRIMITIVE(val) && JS_GetPropertyById(ccx, JSVAL_TO_OBJECT(val), idProto, &val) && !JSVAL_IS_PRIMITIVE(val)) { mPrototypeJSObject = JSVAL_TO_OBJECT(val); } else { NS_ERROR("Can't get globalObject.Object.prototype"); } } // Clear the no helper wrapper prototype object so that a new one // gets created if needed. mPrototypeNoHelper = nsnull; }
void setup() { /* glider(0,0); glider(10,0); glider(0,10); glider(10,10); */ gun(); eater(55,41); /*int i,j; for (i=0;i<16;i++) for (j=0;j<16;j++) write(i,j,1); */ }