blob: 67dbefb750b783d22dbd977c4f2e8b4e4df9499f [file] [log] [blame]
# 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