void GlobalObject::clear(JSContext *cx) { /* This can return false but that doesn't mean it failed. */ unbrand(cx); for (int key = JSProto_Null; key < JSProto_LIMIT * 3; key++) setSlot(key, UndefinedValue()); /* Clear regexp statics. */ getRegExpStatics()->clear(); /* Clear the runtime-codegen-enabled cache. */ setSlot(RUNTIME_CODEGEN_ENABLED, UndefinedValue()); /* * Clear the original-eval and [[ThrowTypeError]] slots, in case throwing * trying to execute a script for this global must reinitialize standard * classes. See bug 470150. */ setSlot(EVAL, UndefinedValue()); setSlot(THROWTYPEERROR, UndefinedValue()); /* * Mark global as cleared. If we try to execute any compile-and-go * scripts from here on, we will throw. */ int32 flags = getSlot(FLAGS).toInt32(); flags |= FLAGS_CLEARED; setSlot(FLAGS, Int32Value(flags)); }
void GlobalObject::clear(JSContext *cx) { /* This can return false but that doesn't mean it failed. */ unbrand(cx); for (int key = JSProto_Null; key < JSProto_LIMIT * 3; key++) setSlot(key, UndefinedValue()); /* Clear regexp statics. */ RegExpStatics::extractFrom(this)->clear(); /* Clear the CSP eval-is-allowed cache. */ setSlot(EVAL_ALLOWED, UndefinedValue()); /* * Mark global as cleared. If we try to execute any compile-and-go * scripts from here on, we will throw. */ int32 flags = getSlot(FLAGS).toInt32(); flags |= FLAGS_CLEARED; setSlot(FLAGS, Int32Value(flags)); }