From 07fabe71507182b3b2ca6ae065c67965850cdb21 Mon Sep 17 00:00:00 2001 From: Jan de Mooij Date: Thu, 2 Nov 2017 13:58:45 +0100 Subject: [PATCH] Bug 1083482 part 6 - Merge GeneratorObject and StarGeneratorObject. r=arai --- js/src/jit/BaselineIC.cpp | 4 ++-- js/src/vm/GeneratorObject.cpp | 12 ++++-------- js/src/vm/GeneratorObject.h | 19 ++++--------------- js/src/vm/SelfHosting.cpp | 10 +++++----- 4 files changed, 15 insertions(+), 30 deletions(-) diff --git a/js/src/jit/BaselineIC.cpp b/js/src/jit/BaselineIC.cpp index 419f0a6733b5..4c93da39ac0f 100644 --- a/js/src/jit/BaselineIC.cpp +++ b/js/src/jit/BaselineIC.cpp @@ -3454,7 +3454,7 @@ ICCall_IsSuspendedStarGenerator::Compiler::generateStubCode(MacroAssembler& masm // Check if it's a StarGeneratorObject. Register scratch = regs.takeAny(); - masm.branchTestObjClass(Assembler::NotEqual, genObj, scratch, &StarGeneratorObject::class_, + masm.branchTestObjClass(Assembler::NotEqual, genObj, scratch, &GeneratorObject::class_, &returnFalse); // If the yield index slot holds an int32 value < YIELD_AND_AWAIT_INDEX_CLOSING, @@ -3463,7 +3463,7 @@ ICCall_IsSuspendedStarGenerator::Compiler::generateStubCode(MacroAssembler& masm masm.branchTestInt32(Assembler::NotEqual, argVal, &returnFalse); masm.unboxInt32(argVal, scratch); masm.branch32(Assembler::AboveOrEqual, scratch, - Imm32(StarGeneratorObject::YIELD_AND_AWAIT_INDEX_CLOSING), + Imm32(GeneratorObject::YIELD_AND_AWAIT_INDEX_CLOSING), &returnFalse); masm.moveValue(BooleanValue(true), R0); diff --git a/js/src/vm/GeneratorObject.cpp b/js/src/vm/GeneratorObject.cpp index de09e696ae55..ff6f8ac13ac4 100644 --- a/js/src/vm/GeneratorObject.cpp +++ b/js/src/vm/GeneratorObject.cpp @@ -38,7 +38,7 @@ GeneratorObject::create(JSContext* cx, AbstractFramePtr frame) return nullptr; } RootedNativeObject obj(cx, - NewNativeObjectWithGivenProto(cx, &StarGeneratorObject::class_, proto)); + NewNativeObjectWithGivenProto(cx, &GeneratorObject::class_, proto)); if (!obj) return nullptr; @@ -123,12 +123,8 @@ js::GeneratorThrowOrClose(JSContext* cx, AbstractFramePtr frame, Handleis()) { - MOZ_ASSERT(arg.isObject()); - frame.setReturnValue(arg); - } else { - MOZ_ASSERT(arg.isUndefined()); - } + MOZ_ASSERT(arg.isObject()); + frame.setReturnValue(arg); cx->setPendingException(MagicValue(JS_GENERATOR_CLOSING)); genObj->setClosing(); @@ -187,7 +183,7 @@ GeneratorObject::resume(JSContext* cx, InterpreterActivation& activation, } } -const Class StarGeneratorObject::class_ = { +const Class GeneratorObject::class_ = { "Generator", JSCLASS_HAS_RESERVED_SLOTS(GeneratorObject::RESERVED_SLOTS) }; diff --git a/js/src/vm/GeneratorObject.h b/js/src/vm/GeneratorObject.h index 74f5f2816175..9bdde447b927 100644 --- a/js/src/vm/GeneratorObject.h +++ b/js/src/vm/GeneratorObject.h @@ -36,6 +36,8 @@ class GeneratorObject : public NativeObject enum ResumeKind { NEXT, THROW, CLOSE }; + static const Class class_; + private: static bool suspend(JSContext* cx, HandleObject obj, AbstractFramePtr frame, jsbytecode* pc, Value* vp, unsigned nvalues); @@ -185,10 +187,10 @@ class GeneratorObject : public NativeObject bool isAfterYield(); bool isAfterAwait(); -private: + private: bool isAfterYieldOrAwait(JSOp op); -public: + public: static size_t offsetOfCalleeSlot() { return getFixedSlotOffset(CALLEE_SLOT); } @@ -209,12 +211,6 @@ public: } }; -class StarGeneratorObject : public GeneratorObject -{ - public: - static const Class class_; -}; - bool GeneratorThrowOrClose(JSContext* cx, AbstractFramePtr frame, Handle obj, HandleValue val, uint32_t resumeKind); void SetGeneratorClosed(JSContext* cx, AbstractFramePtr frame); @@ -224,11 +220,4 @@ CheckStarGeneratorResumptionValue(JSContext* cx, HandleValue v); } // namespace js -template<> -inline bool -JSObject::is() const -{ - return is(); -} - #endif /* vm_GeneratorObject_h */ diff --git a/js/src/vm/SelfHosting.cpp b/js/src/vm/SelfHosting.cpp index b1b6d6ff6f1f..abd2fc0cf6b4 100644 --- a/js/src/vm/SelfHosting.cpp +++ b/js/src/vm/SelfHosting.cpp @@ -840,7 +840,7 @@ intrinsic_StarGeneratorObjectIsClosed(JSContext* cx, unsigned argc, Value* vp) MOZ_ASSERT(args.length() == 1); MOZ_ASSERT(args[0].isObject()); - StarGeneratorObject* genObj = &args[0].toObject().as(); + GeneratorObject* genObj = &args[0].toObject().as(); args.rval().setBoolean(genObj->isClosed()); return true; } @@ -851,12 +851,12 @@ js::intrinsic_IsSuspendedStarGenerator(JSContext* cx, unsigned argc, Value* vp) CallArgs args = CallArgsFromVp(argc, vp); MOZ_ASSERT(args.length() == 1); - if (!args[0].isObject() || !args[0].toObject().is()) { + if (!args[0].isObject() || !args[0].toObject().is()) { args.rval().setBoolean(false); return true; } - StarGeneratorObject& genObj = args[0].toObject().as(); + GeneratorObject& genObj = args[0].toObject().as(); args.rval().setBoolean(!genObj.isClosed() && genObj.isSuspended()); return true; } @@ -2377,7 +2377,7 @@ static const JSFunctionSpec intrinsic_functions[] = { CallNonGenericSelfhostedMethod>, 2,0), JS_FN("IsStarGeneratorObject", - intrinsic_IsInstanceOfBuiltin, 1,0), + intrinsic_IsInstanceOfBuiltin, 1,0), JS_FN("StarGeneratorObjectIsClosed", intrinsic_StarGeneratorObjectIsClosed, 1,0), JS_FN("IsSuspendedStarGenerator",intrinsic_IsSuspendedStarGenerator,1,0), @@ -2450,7 +2450,7 @@ static const JSFunctionSpec intrinsic_functions[] = { CallNonGenericSelfhostedMethod>, 2, 0), JS_FN("CallStarGeneratorMethodIfWrapped", - CallNonGenericSelfhostedMethod>, 2, 0), + CallNonGenericSelfhostedMethod>, 2, 0), JS_INLINABLE_FN("IsMapObject", intrinsic_IsInstanceOfBuiltin, 1, 0, IntrinsicIsMapObject),