Bug 1083482 part 6 - Merge GeneratorObject and StarGeneratorObject. r=arai

This commit is contained in:
Jan de Mooij 2017-11-02 13:58:45 +01:00
parent 65a01dd0f9
commit 07fabe7150
4 changed files with 15 additions and 30 deletions

View File

@ -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);

View File

@ -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, Handle<Generato
} else {
MOZ_ASSERT(resumeKind == GeneratorObject::CLOSE);
if (genObj->is<StarGeneratorObject>()) {
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)
};

View File

@ -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<GeneratorObject*> 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<js::GeneratorObject>() const
{
return is<js::StarGeneratorObject>();
}
#endif /* vm_GeneratorObject_h */

View File

@ -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<StarGeneratorObject>();
GeneratorObject* genObj = &args[0].toObject().as<GeneratorObject>();
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<StarGeneratorObject>()) {
if (!args[0].isObject() || !args[0].toObject().is<GeneratorObject>()) {
args.rval().setBoolean(false);
return true;
}
StarGeneratorObject& genObj = args[0].toObject().as<StarGeneratorObject>();
GeneratorObject& genObj = args[0].toObject().as<GeneratorObject>();
args.rval().setBoolean(!genObj.isClosed() && genObj.isSuspended());
return true;
}
@ -2377,7 +2377,7 @@ static const JSFunctionSpec intrinsic_functions[] = {
CallNonGenericSelfhostedMethod<Is<StringIteratorObject>>, 2,0),
JS_FN("IsStarGeneratorObject",
intrinsic_IsInstanceOfBuiltin<StarGeneratorObject>, 1,0),
intrinsic_IsInstanceOfBuiltin<GeneratorObject>, 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<Is<TypedArrayObject>>, 2, 0),
JS_FN("CallStarGeneratorMethodIfWrapped",
CallNonGenericSelfhostedMethod<Is<StarGeneratorObject>>, 2, 0),
CallNonGenericSelfhostedMethod<Is<GeneratorObject>>, 2, 0),
JS_INLINABLE_FN("IsMapObject", intrinsic_IsInstanceOfBuiltin<MapObject>, 1, 0,
IntrinsicIsMapObject),