mirror of
https://repo.dactyloidae.xyz/Dactyloidae/UXP.git
synced 2026-09-07 16:28:38 +09:00
Issue #1894 - Part 1: Implement coalesce JS opcode
Based on https://bugzilla.mozilla.org/show_bug.cgi?id=1566141
This commit is contained in:
parent
62a140ab80
commit
3efa23472c
3 changed files with 23 additions and 4 deletions
|
|
@ -22,6 +22,7 @@ GetDefCount(JSScript* script, unsigned offset)
|
|||
* in the pushed array of stack values for type inference.
|
||||
*/
|
||||
switch (JSOp(*pc)) {
|
||||
case JSOP_COALESCE:
|
||||
case JSOP_OR:
|
||||
case JSOP_AND:
|
||||
return 1;
|
||||
|
|
|
|||
|
|
@ -2128,6 +2128,16 @@ CASE(JSOP_IFNE)
|
|||
}
|
||||
END_CASE(JSOP_IFNE)
|
||||
|
||||
CASE(JSOP_COALESCE)
|
||||
{
|
||||
MutableHandleValue res = REGS.stackHandleAt(-1);
|
||||
bool cond = !res.isNullOrUndefined();
|
||||
if (cond) {
|
||||
ADVANCE_AND_DISPATCH(GET_JUMP_OFFSET(REGS.pc));
|
||||
}
|
||||
}
|
||||
END_CASE(JSOP_COALESCE)
|
||||
|
||||
CASE(JSOP_OR)
|
||||
{
|
||||
bool cond = ToBoolean(REGS.stackHandleAt(-1));
|
||||
|
|
|
|||
|
|
@ -2315,7 +2315,7 @@
|
|||
* Operands:
|
||||
* Stack: =>
|
||||
*/ \
|
||||
macro(JSOP_JUMPTARGET, 230, "jumptarget", NULL, 1, 0, 0, JOF_BYTE)\
|
||||
macro(JSOP_JUMPTARGET, 230, "jumptarget", NULL, 1, 0, 0, JOF_BYTE) \
|
||||
/*
|
||||
* Like JSOP_CALL, but tells the function that the return value is ignored.
|
||||
* stack.
|
||||
|
|
@ -2325,14 +2325,22 @@
|
|||
* Stack: callee, this, args[0], ..., args[argc-1] => rval
|
||||
* nuses: (argc+2)
|
||||
*/ \
|
||||
macro(JSOP_CALL_IGNORES_RV, 231, "call-ignores-rv", NULL, 3, -1, 1, JOF_UINT16|JOF_INVOKE|JOF_TYPESET)
|
||||
|
||||
macro(JSOP_CALL_IGNORES_RV, 231, "call-ignores-rv", NULL, 3, -1, 1, JOF_UINT16|JOF_INVOKE|JOF_TYPESET) \
|
||||
/*
|
||||
* If the value on top of the stack is not null or undefined, jumps to a 32-bit offset from the
|
||||
* current bytecode.
|
||||
*
|
||||
* Category: Statements
|
||||
* Type: Jumps
|
||||
* Operands: int32_t offset
|
||||
* Stack: cond => cond
|
||||
*/ \
|
||||
macro(JSOP_COALESCE, 232, "coalesce", NULL, 5, 1, 1, JOF_JUMP|JOF_DETECTING)
|
||||
/*
|
||||
* In certain circumstances it may be useful to "pad out" the opcode space to
|
||||
* a power of two. Use this macro to do so.
|
||||
*/
|
||||
#define FOR_EACH_TRAILING_UNUSED_OPCODE(macro) \
|
||||
macro(232) \
|
||||
macro(233) \
|
||||
macro(234) \
|
||||
macro(235) \
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue