mirror of
https://repo.dactyloidae.xyz/Dactyloidae/UXP.git
synced 2026-10-27 17:47:34 +09:00
parent
b5bcbfe58c
commit
67b8cd621a
12 changed files with 94 additions and 0 deletions
|
|
@ -25,6 +25,7 @@
|
||||||
#include "jit/VMFunctions.h"
|
#include "jit/VMFunctions.h"
|
||||||
#include "js/UniquePtr.h"
|
#include "js/UniquePtr.h"
|
||||||
#include "vm/AsyncFunction.h"
|
#include "vm/AsyncFunction.h"
|
||||||
|
#include "vm/AsyncIteration.h"
|
||||||
#include "vm/EnvironmentObject.h"
|
#include "vm/EnvironmentObject.h"
|
||||||
#include "vm/Interpreter.h"
|
#include "vm/Interpreter.h"
|
||||||
#include "vm/TraceLogging.h"
|
#include "vm/TraceLogging.h"
|
||||||
|
|
@ -3914,6 +3915,28 @@ BaselineCompiler::emit_JSOP_TOASYNC()
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
typedef JSObject* (*ToAsyncGenFn)(JSContext*, HandleFunction);
|
||||||
|
static const VMFunction ToAsyncGenInfo =
|
||||||
|
FunctionInfo<ToAsyncGenFn>(js::WrapAsyncGenerator, "ToAsyncGen");
|
||||||
|
|
||||||
|
bool
|
||||||
|
BaselineCompiler::emit_JSOP_TOASYNCGEN()
|
||||||
|
{
|
||||||
|
frame.syncStack(0);
|
||||||
|
masm.unboxObject(frame.addressOfStackValue(frame.peek(-1)), R0.scratchReg());
|
||||||
|
|
||||||
|
prepareVMCall();
|
||||||
|
pushArg(R0.scratchReg());
|
||||||
|
|
||||||
|
if (!callVM(ToAsyncGenInfo))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
masm.tagValue(JSVAL_TYPE_OBJECT, ReturnReg, R0);
|
||||||
|
frame.pop();
|
||||||
|
frame.push(R0);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
typedef bool (*ThrowObjectCoercibleFn)(JSContext*, HandleValue);
|
typedef bool (*ThrowObjectCoercibleFn)(JSContext*, HandleValue);
|
||||||
static const VMFunction ThrowObjectCoercibleInfo =
|
static const VMFunction ThrowObjectCoercibleInfo =
|
||||||
FunctionInfo<ThrowObjectCoercibleFn>(ThrowObjectCoercible, "ThrowObjectCoercible");
|
FunctionInfo<ThrowObjectCoercibleFn>(ThrowObjectCoercible, "ThrowObjectCoercible");
|
||||||
|
|
|
||||||
|
|
@ -197,6 +197,7 @@ namespace jit {
|
||||||
_(JSOP_RUNONCE) \
|
_(JSOP_RUNONCE) \
|
||||||
_(JSOP_REST) \
|
_(JSOP_REST) \
|
||||||
_(JSOP_TOASYNC) \
|
_(JSOP_TOASYNC) \
|
||||||
|
_(JSOP_TOASYNCGEN) \
|
||||||
_(JSOP_TOID) \
|
_(JSOP_TOID) \
|
||||||
_(JSOP_TOSTRING) \
|
_(JSOP_TOSTRING) \
|
||||||
_(JSOP_TABLESWITCH) \
|
_(JSOP_TABLESWITCH) \
|
||||||
|
|
|
||||||
|
|
@ -41,6 +41,7 @@
|
||||||
#include "jit/RangeAnalysis.h"
|
#include "jit/RangeAnalysis.h"
|
||||||
#include "jit/SharedICHelpers.h"
|
#include "jit/SharedICHelpers.h"
|
||||||
#include "vm/AsyncFunction.h"
|
#include "vm/AsyncFunction.h"
|
||||||
|
#include "vm/AsyncIteration.h"
|
||||||
#include "vm/MatchPairs.h"
|
#include "vm/MatchPairs.h"
|
||||||
#include "vm/RegExpObject.h"
|
#include "vm/RegExpObject.h"
|
||||||
#include "vm/RegExpStatics.h"
|
#include "vm/RegExpStatics.h"
|
||||||
|
|
@ -10213,6 +10214,17 @@ CodeGenerator::visitToAsync(LToAsync* lir)
|
||||||
callVM(ToAsyncInfo, lir);
|
callVM(ToAsyncInfo, lir);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
typedef JSObject* (*ToAsyncGenFn)(JSContext*, HandleFunction);
|
||||||
|
static const VMFunction ToAsyncGenInfo =
|
||||||
|
FunctionInfo<ToAsyncGenFn>(js::WrapAsyncGenerator, "ToAsyncGen");
|
||||||
|
|
||||||
|
void
|
||||||
|
CodeGenerator::visitToAsyncGen(LToAsyncGen* lir)
|
||||||
|
{
|
||||||
|
pushArg(ToRegister(lir->unwrapped()));
|
||||||
|
callVM(ToAsyncGenInfo, lir);
|
||||||
|
}
|
||||||
|
|
||||||
typedef bool (*ToIdFn)(JSContext*, HandleScript, jsbytecode*, HandleValue,
|
typedef bool (*ToIdFn)(JSContext*, HandleScript, jsbytecode*, HandleValue,
|
||||||
MutableHandleValue);
|
MutableHandleValue);
|
||||||
static const VMFunction ToIdInfo = FunctionInfo<ToIdFn>(ToIdOperation, "ToIdOperation");
|
static const VMFunction ToIdInfo = FunctionInfo<ToIdFn>(ToIdOperation, "ToIdOperation");
|
||||||
|
|
|
||||||
|
|
@ -286,6 +286,7 @@ class CodeGenerator final : public CodeGeneratorSpecific
|
||||||
void visitTypeOfV(LTypeOfV* lir);
|
void visitTypeOfV(LTypeOfV* lir);
|
||||||
void visitOutOfLineTypeOfV(OutOfLineTypeOfV* ool);
|
void visitOutOfLineTypeOfV(OutOfLineTypeOfV* ool);
|
||||||
void visitToAsync(LToAsync* lir);
|
void visitToAsync(LToAsync* lir);
|
||||||
|
void visitToAsyncGen(LToAsyncGen* lir);
|
||||||
void visitToIdV(LToIdV* lir);
|
void visitToIdV(LToIdV* lir);
|
||||||
template<typename T> void emitLoadElementT(LLoadElementT* lir, const T& source);
|
template<typename T> void emitLoadElementT(LLoadElementT* lir, const T& source);
|
||||||
void visitLoadElementT(LLoadElementT* lir);
|
void visitLoadElementT(LLoadElementT* lir);
|
||||||
|
|
|
||||||
|
|
@ -2130,6 +2130,9 @@ IonBuilder::inspectOpcode(JSOp op)
|
||||||
case JSOP_TOASYNC:
|
case JSOP_TOASYNC:
|
||||||
return jsop_toasync();
|
return jsop_toasync();
|
||||||
|
|
||||||
|
case JSOP_TOASYNCGEN:
|
||||||
|
return jsop_toasyncgen();
|
||||||
|
|
||||||
case JSOP_TOID:
|
case JSOP_TOID:
|
||||||
return jsop_toid();
|
return jsop_toid();
|
||||||
|
|
||||||
|
|
@ -13193,6 +13196,20 @@ IonBuilder::jsop_toasync()
|
||||||
return resumeAfter(ins);
|
return resumeAfter(ins);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool
|
||||||
|
IonBuilder::jsop_toasyncgen()
|
||||||
|
{
|
||||||
|
MDefinition* unwrapped = current->pop();
|
||||||
|
MOZ_ASSERT(unwrapped->type() == MIRType::Object);
|
||||||
|
|
||||||
|
MToAsyncGen* ins = MToAsyncGen::New(alloc(), unwrapped);
|
||||||
|
|
||||||
|
current->add(ins);
|
||||||
|
current->push(ins);
|
||||||
|
|
||||||
|
return resumeAfter(ins);
|
||||||
|
}
|
||||||
|
|
||||||
bool
|
bool
|
||||||
IonBuilder::jsop_toid()
|
IonBuilder::jsop_toid()
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -762,6 +762,7 @@ class IonBuilder
|
||||||
MOZ_MUST_USE bool jsop_globalthis();
|
MOZ_MUST_USE bool jsop_globalthis();
|
||||||
MOZ_MUST_USE bool jsop_typeof();
|
MOZ_MUST_USE bool jsop_typeof();
|
||||||
MOZ_MUST_USE bool jsop_toasync();
|
MOZ_MUST_USE bool jsop_toasync();
|
||||||
|
MOZ_MUST_USE bool jsop_toasyncgen();
|
||||||
MOZ_MUST_USE bool jsop_toid();
|
MOZ_MUST_USE bool jsop_toid();
|
||||||
MOZ_MUST_USE bool jsop_iter(uint8_t flags);
|
MOZ_MUST_USE bool jsop_iter(uint8_t flags);
|
||||||
MOZ_MUST_USE bool jsop_itermore();
|
MOZ_MUST_USE bool jsop_itermore();
|
||||||
|
|
|
||||||
|
|
@ -1175,6 +1175,14 @@ LIRGenerator::visitToAsync(MToAsync* ins)
|
||||||
assignSafepoint(lir, ins);
|
assignSafepoint(lir, ins);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
LIRGenerator::visitToAsyncGen(MToAsyncGen* ins)
|
||||||
|
{
|
||||||
|
LToAsyncGen* lir = new(alloc()) LToAsyncGen(useRegisterAtStart(ins->input()));
|
||||||
|
defineReturn(lir, ins);
|
||||||
|
assignSafepoint(lir, ins);
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
LIRGenerator::visitToId(MToId* ins)
|
LIRGenerator::visitToId(MToId* ins)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -121,6 +121,7 @@ class LIRGenerator : public LIRGeneratorSpecific
|
||||||
void visitCompare(MCompare* comp);
|
void visitCompare(MCompare* comp);
|
||||||
void visitTypeOf(MTypeOf* ins);
|
void visitTypeOf(MTypeOf* ins);
|
||||||
void visitToAsync(MToAsync* ins);
|
void visitToAsync(MToAsync* ins);
|
||||||
|
void visitToAsyncGen(MToAsyncGen* ins);
|
||||||
void visitToId(MToId* ins);
|
void visitToId(MToId* ins);
|
||||||
void visitBitNot(MBitNot* ins);
|
void visitBitNot(MBitNot* ins);
|
||||||
void visitBitAnd(MBitAnd* ins);
|
void visitBitAnd(MBitAnd* ins);
|
||||||
|
|
|
||||||
|
|
@ -5784,6 +5784,21 @@ class MToAsync
|
||||||
TRIVIAL_NEW_WRAPPERS
|
TRIVIAL_NEW_WRAPPERS
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class MToAsyncGen
|
||||||
|
: public MUnaryInstruction,
|
||||||
|
public SingleObjectPolicy::Data
|
||||||
|
{
|
||||||
|
explicit MToAsyncGen(MDefinition* unwrapped)
|
||||||
|
: MUnaryInstruction(unwrapped)
|
||||||
|
{
|
||||||
|
setResultType(MIRType::Object);
|
||||||
|
}
|
||||||
|
|
||||||
|
public:
|
||||||
|
INSTRUCTION_HEADER(ToAsyncGen)
|
||||||
|
TRIVIAL_NEW_WRAPPERS
|
||||||
|
};
|
||||||
|
|
||||||
class MToId
|
class MToId
|
||||||
: public MUnaryInstruction,
|
: public MUnaryInstruction,
|
||||||
public BoxInputsPolicy::Data
|
public BoxInputsPolicy::Data
|
||||||
|
|
|
||||||
|
|
@ -79,6 +79,7 @@ namespace jit {
|
||||||
_(BitNot) \
|
_(BitNot) \
|
||||||
_(TypeOf) \
|
_(TypeOf) \
|
||||||
_(ToAsync) \
|
_(ToAsync) \
|
||||||
|
_(ToAsyncGen) \
|
||||||
_(ToId) \
|
_(ToId) \
|
||||||
_(BitAnd) \
|
_(BitAnd) \
|
||||||
_(BitOr) \
|
_(BitOr) \
|
||||||
|
|
|
||||||
|
|
@ -1606,6 +1606,19 @@ class LToAsync : public LCallInstructionHelper<1, 1, 0>
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class LToAsyncGen : public LCallInstructionHelper<1, 1, 0>
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
LIR_HEADER(ToAsyncGen)
|
||||||
|
explicit LToAsyncGen(const LAllocation& input) {
|
||||||
|
setOperand(0, input);
|
||||||
|
}
|
||||||
|
|
||||||
|
const LAllocation* unwrapped() {
|
||||||
|
return getOperand(0);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
class LToIdV : public LInstructionHelper<BOX_PIECES, BOX_PIECES, 1>
|
class LToIdV : public LInstructionHelper<BOX_PIECES, BOX_PIECES, 1>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
|
||||||
|
|
@ -353,6 +353,7 @@
|
||||||
_(Rest) \
|
_(Rest) \
|
||||||
_(TypeOfV) \
|
_(TypeOfV) \
|
||||||
_(ToAsync) \
|
_(ToAsync) \
|
||||||
|
_(ToAsyncGen) \
|
||||||
_(ToIdV) \
|
_(ToIdV) \
|
||||||
_(Floor) \
|
_(Floor) \
|
||||||
_(FloorF) \
|
_(FloorF) \
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue