# Duktape opcode metadata for debugger. # - See duk_debug.js for the argument formats (A_R etc). # - Flag bits are for the whole instruction as a 32-bit integer, # they are not field shifted # # NOTE: Use YAML comments only on comment-only lines (not trailing content): # Node.js 'yamljs' seems to refuse parsing trailing comments in some cases. opcodes: - name: LDREG args: - A_R - BC_R - name: STREG args: - A_R - BC_R - name: LDCONST args: - A_R - BC_C - name: LDINT args: - A_R - BC_LDINT - name: LDINTX args: - A_R - BC_LDINTX - name: MPUTOBJ args: - A_R - B_R - C_I - name: MPUTOBJI args: - A_R - B_RI - C_I - name: MPUTARR args: - A_R - B_R - C_I - name: MPUTARRI args: - A_R - B_RI - C_I - name: NEW args: - B_R - C_I - name: NEWI args: - B_RI - C_I - name: REGEXP args: - A_R - B_RC - C_RC - name: CSREG args: - A_R - B_R - name: CSREGI args: - A_RI - B_R - name: GETVAR args: - A_R - BC_C - name: PUTVAR args: - A_R - BC_C - name: DECLVAR args: - A_H - B_RC - C_RC flags: - mask: 0x40 name: writable - mask: 0x80 name: enumerable - mask: 0x100 name: configurable - mask: 0x200 name: accessor - mask: 0x400 name: undef_value - mask: 0x800 name: func_decl - name: DELVAR args: - A_R - B_RC - name: CSVAR args: - A_R - B_RC - name: CSVARI args: - A_RI - B_RC - name: CLOSURE args: - A_R - BC_I - name: GETPROP args: - A_R - B_RC - C_RC - name: PUTPROP args: - A_R - B_RC - C_RC - name: DELPROP args: - A_R - B_R - C_RC - name: CSPROP args: - A_R - B_R - C_RC - name: CSPROPI args: - A_RI - B_R - C_RC - name: ADD args: - A_R - B_RC - C_RC - name: SUB args: - A_R - B_RC - C_RC - name: MUL args: - A_R - B_RC - C_RC - name: DIV args: - A_R - B_RC - C_RC - name: MOD args: - A_R - B_RC - C_RC - name: BAND args: - A_R - B_RC - C_RC - name: BOR args: - A_R - B_RC - C_RC - name: BXOR args: - A_R - B_RC - C_RC - name: BASL args: - A_R - B_RC - C_RC - name: BLSR args: - A_R - B_RC - C_RC - name: BASR args: - A_R - B_RC - C_RC - name: EQ args: - A_R - B_RC - C_RC - name: NEQ args: - A_R - B_RC - C_RC - name: SEQ args: - A_R - B_RC - C_RC - name: SNEQ args: - A_R - B_RC - C_RC - name: GT args: - A_R - B_RC - C_RC - name: GE args: - A_R - B_RC - C_RC - name: LT args: - A_R - B_RC - C_RC - name: LE args: - A_R - B_RC - C_RC - name: IF args: - A_B - B_RC - name: JUMP args: - ABC_JUMP - name: RETURN args: - A_H - B_RC flags: - mask: 0x40 name: have_retval - name: CALL args: - A_H - B_R - C_I flags: - mask: 0x40 name: tailcall - mask: 0x80 name: evalcall - name: CALLI args: - A_H - B_RI - C_I - name: TRYCATCH args: - A_H # base register for two consecutive regs (base_reg + 0, base_reg + 1) used for two things: # - input: either 'with' target register or catch varname constant (base_reg + 0), depending on flags # - output: when caught, catch value (base_reg + 0) and type (base_reg + 1) - BC_R flags: - mask: 0x40 name: have_catch - mask: 0x80 name: have_finally - mask: 0x100 name: catch_binding - mask: 0x200 name: with_binding - name: EXTRA extra: true - name: PREINCR args: - A_R - BC_R - name: PREDECR args: - A_R - BC_R - name: POSTINCR args: - A_R - BC_R - name: POSTDECR args: - A_R - BC_R - name: PREINCV args: - A_R - BC_C - name: PREDECV args: - A_R - BC_C - name: POSTINCV args: - A_R - BC_C - name: POSTDECV args: - A_R - BC_C - name: PREINCP args: - A_R - B_RC - C_RC - name: PREDECP args: - A_R - B_RC - C_RC - name: POSTINCP args: - A_R - B_RC - C_RC - name: POSTDECP args: - A_R - B_RC - C_RC extra: - name: NOP - name: INVALID args: - BC_I - name: LDTHIS args: - BC_R - name: LDUNDEF args: - BC_R - name: LDNULL args: - BC_R - name: LDTRUE args: - BC_R - name: LDFALSE args: - BC_R - name: NEWOBJ args: # XXX: extend to BC? - B_R - name: NEWARR args: # XXX: extend to BC? - B_R - name: SETALEN args: - B_R - C_R - name: TYPEOF args: - BC_R - name: TYPEOFID args: - B_R # maybe changed to C_C later - C_RC - name: INITENUM args: - B_R - C_R - name: NEXTENUM args: - B_R - C_R - name: INITSET args: - B_R - C_R - name: INITSETI args: - B_R - C_RI - name: INITGET args: - B_R - C_RI - name: INITGETI args: - B_R - C_RI - name: ENDTRY - name: ENDCATCH - name: ENDFIN - name: THROW args: - BC_R - name: INVLHS - name: UNM args: - BC_R - name: UNP args: - BC_R - name: DEBUGGER - name: BREAK args: - BC_I - name: CONTINUE args: - BC_I - name: BNOT args: - BC_R - name: LNOT args: - BC_R - name: INSTOF args: - B_R - C_RC - name: IN args: - B_R - C_RC - name: LABEL args: - BC_I - name: ENDLABEL args: - BC_I - name: EXTRA34 - name: EXTRA35 - name: EXTRA36 - name: EXTRA37 - name: EXTRA38 - name: EXTRA39 - name: EXTRA40 - name: EXTRA41 - name: EXTRA42 - name: EXTRA43 - name: EXTRA44 - name: EXTRA45 - name: EXTRA46 - name: EXTRA47 - name: EXTRA48 - name: EXTRA49 - name: EXTRA50 - name: EXTRA51 - name: EXTRA52 - name: EXTRA53 - name: EXTRA54 - name: EXTRA55 - name: EXTRA56 - name: EXTRA57 - name: EXTRA58 - name: EXTRA59 - name: EXTRA60 - name: EXTRA61 - name: EXTRA62 - name: EXTRA63 - name: EXTRA64 - name: EXTRA65 - name: EXTRA66 - name: EXTRA67 - name: EXTRA68 - name: EXTRA69 - name: EXTRA70 - name: EXTRA71 - name: EXTRA72 - name: EXTRA73 - name: EXTRA74 - name: EXTRA75 - name: EXTRA76 - name: EXTRA77 - name: EXTRA78 - name: EXTRA79 - name: EXTRA80 - name: EXTRA81 - name: EXTRA82 - name: EXTRA83 - name: EXTRA84 - name: EXTRA85 - name: EXTRA86 - name: EXTRA87 - name: EXTRA88 - name: EXTRA89 - name: EXTRA90 - name: EXTRA91 - name: EXTRA92 - name: EXTRA93 - name: EXTRA94 - name: EXTRA95 - name: EXTRA96 - name: EXTRA97 - name: EXTRA98 - name: EXTRA99 - name: EXTRA100 - name: EXTRA101 - name: EXTRA102 - name: EXTRA103 - name: EXTRA104 - name: EXTRA105 - name: EXTRA106 - name: EXTRA107 - name: EXTRA108 - name: EXTRA109 - name: EXTRA110 - name: EXTRA111 - name: EXTRA112 - name: EXTRA113 - name: EXTRA114 - name: EXTRA115 - name: EXTRA116 - name: EXTRA117 - name: EXTRA118 - name: EXTRA119 - name: EXTRA120 - name: EXTRA121 - name: EXTRA122 - name: EXTRA123 - name: EXTRA124 - name: EXTRA125 - name: EXTRA126 - name: EXTRA127 - name: EXTRA128 - name: EXTRA129 - name: EXTRA130 - name: EXTRA131 - name: EXTRA132 - name: EXTRA133 - name: EXTRA134 - name: EXTRA135 - name: EXTRA136 - name: EXTRA137 - name: EXTRA138 - name: EXTRA139 - name: EXTRA140 - name: EXTRA141 - name: EXTRA142 - name: EXTRA143 - name: EXTRA144 - name: EXTRA145 - name: EXTRA146 - name: EXTRA147 - name: EXTRA148 - name: EXTRA149 - name: EXTRA150 - name: EXTRA151 - name: EXTRA152 - name: EXTRA153 - name: EXTRA154 - name: EXTRA155 - name: EXTRA156 - name: EXTRA157 - name: EXTRA158 - name: EXTRA159 - name: EXTRA160 - name: EXTRA161 - name: EXTRA162 - name: EXTRA163 - name: EXTRA164 - name: EXTRA165 - name: EXTRA166 - name: EXTRA167 - name: EXTRA168 - name: EXTRA169 - name: EXTRA170 - name: EXTRA171 - name: EXTRA172 - name: EXTRA173 - name: EXTRA174 - name: EXTRA175 - name: EXTRA176 - name: EXTRA177 - name: EXTRA178 - name: EXTRA179 - name: EXTRA180 - name: EXTRA181 - name: EXTRA182 - name: EXTRA183 - name: EXTRA184 - name: EXTRA185 - name: EXTRA186 - name: EXTRA187 - name: EXTRA188 - name: EXTRA189 - name: EXTRA190 - name: EXTRA191 - name: EXTRA192 - name: EXTRA193 - name: EXTRA194 - name: EXTRA195 - name: EXTRA196 - name: EXTRA197 - name: EXTRA198 - name: EXTRA199 - name: EXTRA200 - name: EXTRA201 - name: EXTRA202 - name: EXTRA203 - name: EXTRA204 - name: EXTRA205 - name: EXTRA206 - name: EXTRA207 - name: EXTRA208 - name: EXTRA209 - name: EXTRA210 - name: EXTRA211 - name: EXTRA212 - name: EXTRA213 - name: EXTRA214 - name: EXTRA215 - name: EXTRA216 - name: EXTRA217 - name: EXTRA218 - name: EXTRA219 - name: EXTRA220 - name: EXTRA221 - name: EXTRA222 - name: EXTRA223 - name: EXTRA224 - name: EXTRA225 - name: EXTRA226 - name: EXTRA227 - name: EXTRA228 - name: EXTRA229 - name: EXTRA230 - name: EXTRA231 - name: EXTRA232 - name: EXTRA233 - name: EXTRA234 - name: EXTRA235 - name: EXTRA236 - name: EXTRA237 - name: EXTRA238 - name: EXTRA239 - name: EXTRA240 - name: EXTRA241 - name: EXTRA242 - name: EXTRA243 - name: EXTRA244 - name: EXTRA245 - name: EXTRA246 - name: EXTRA247 - name: EXTRA248 - name: EXTRA249 - name: EXTRA250 - name: EXTRA251 - name: EXTRA252 - name: EXTRA253 - name: EXTRA254 - name: EXTRA255