Byte Code
Below is a description of all opcodes we current support in the Eiffel interpreter. They are sorted
Contents
- 1 BC_START
- 2 BC_PRECOND
- 3 BC_POSTCOND
- 4 BC_DEFERRED
- 5 BC_REVERSE
- 6 BC_CHECK
- 7 BC_ASSERT
- 8 BC_NULL
- 9 BC_PRE
- 10 BC_PST
- 11 BC_CHK
- 12 BC_LINV
- 13 BC_LVAR
- 14 BC_INV
- 15 BC_END_ASSERT
- 16 BC_TAG
- 17 BC_NOTAG
- 18 BC_JMP_F
- 19 BC_JMP
- 20 BC_LOOP
- 21 BC_END_VARIANT
- 22 BC_INIT_VARIANT
- 23 BC_DEBUG
- 24 BC_RASSIGN
- 25 BC_LASSIGN
- 26 BC_ASSIGN
- 27 BC_CREATE
- 28 BC_CTYPE
- 29 BC_CARG
- 30 BC_CLIKE
- 31 BC_CCUR
- 32 BC_INSPECT
- 33 BC_RANGE
- 34 BC_INSPECT_EXCEP
- 35 BC_LREVERSE
- 36 BC_RREVERSE
- 37 BC_FEATURE
- 38 BC_METAMORPHOSE
- 39 BC_CURRENT
- 40 BC_ROTATE
- 41 BC_FEATURE_INV
- 42 BC_ATTRIBUTE
- 43 BC_ATTRIBUTE_INV
- 44 BC_EXTERN
- 45 BC_EXTERN_INV
- 46 BC_CHAR
- 47 BC_BOOL
- 48 BC_INT
- 49 BC_INT32
- 50 BC_DOUBLE
- 51 BC_RESULT
- 52 BC_LOCAL
- 53 BC_ARG
- 54 BC_UPLUS
- 55 BC_UMINUS
- 56 BC_NOT
- 57 BC_LT
- 58 BC_GT
- 59 BC_MINUS
- 60 BC_XOR
- 61 BC_GE
- 62 BC_EQ
- 63 BC_NE
- 64 BC_STAR
- 65 BC_POWER
- 66 BC_LE
- 67 BC_DIV
- 68 BC_NHOOK
- 69 BC_AND
- 70 BC_SLASH
- 71 BC_MOD
- 72 BC_PLUS
- 73 BC_OR
- 74 BC_ADDR
- 75 BC_STRING
- 76 BC_AND_THEN
- 77 BC_OR_ELSE
- 78 BC_SPCREATE
- 79 BC_TUPLE_ACCESS
- 80 BC_JMP_T
- 81 BC_TUPLE_ASSIGN
- 82 BC_RESCUE
- 83 BC_END_RESCUE
- 84 BC_RETRY
- 85 BC_EXP_ASSIGN
- 86 BC_CLONE
- 87 BC_EXP_EXCEP
- 88 BC_VOID
- 89 BC_NONE_ASSIGN
- 90 BC_LEXP_ASSIGN
- 91 BC_REXP_ASSIGN
- 92 BC_CLONE_ARG
- 93 BC_NO_CLONE_ARG
- 94 BC_FALSE_COMPAR
- 95 BC_TRUE_COMPAR
- 96 BC_STANDARD_EQUAL
- 97 BC_BIT_STD_EQUAL
- 98 BC_HOOK
- 99 BC_BIT
- 100 BC_ARRAY
- 101 BC_RETRIEVE_OLD
- 102 BC_FLOAT
- 103 BC_OLD
- 104 BC_ADD_STRIP
- 105 BC_END_STRIP
- 106 BC_LBIT_ASSIGN
- 107 BC_RAISE_PREC
- 108 BC_GOTO_BODY
- 109 BC_NOT_REC
- 110 BC_END_PRE
- 111 BC_CAST_NATURAL
- 112 BC_CAST_INTEGER
- 113 BC_CAST_REAL_32
- 114 BC_CAST_REAL_64
- 115 BC_INV_NULL
- 116 BC_CREAT_INV
- 117 BC_END_EVAL_OLD
- 118 BC_START_EVAL_OLD
- 119 BC_OBJECT_ADDR
- 120 BC_PFEATURE
- 121 BC_PFEATURE_INV
- 122 BC_PEXTERN
- 123 BC_PEXTERN_INV
- 124 BC_PARRAY
- 125 BC_PATTRIBUTE
- 126 BC_PATTRIBUTE_INV
- 127 BC_PEXP_ASSIGN
- 128 BC_PASSIGN
- 129 BC_PREVERSE
- 130 BC_PCLIKE
- 131 BC_OBJECT_EXPR_ADDR
- 132 BC_RESERVE
- 133 BC_POP
- 134 BC_REF_TO_PTR
- 135 BC_RCREATE
- 136 BC_GEN_PARAM_CREATE
- 137 BC_CAST_CHAR32
- 138 BC_NULL_POINTER
- 139 BC_BASIC_OPERATIONS
- 140 BC_MAX
- 141 BC_MIN
- 142 BC_GENERATOR
- 143 BC_OFFSET
- 144 BC_ZERO
- 145 BC_ONE
- 146 BC_THREE_WAY_COMPARISON
- 147 BC_INT_BIT_OP
- 148 BC_INT_BIT_AND
- 149 BC_INT_BIT_OR
- 150 BC_INT_BIT_XOR
- 151 BC_INT_BIT_NOT
- 152 BC_INT_BIT_SHIFT_LEFT
- 153 BC_INT_BIT_SHIFT_RIGHT
- 154 BC_INT_BIT_TEST
- 155 BC_INT_SET_BIT
- 156 BC_INT_SET_BIT_WITH_MASK
- 157 BC_WCHAR
- 158 BC_INT8
- 159 BC_INT16
- 160 BC_INT64
- 161 BC_CAST_CHAR8
- 162 BC_ONCE_STRING
- 163 BC_ALLOCATE_ONCE_STRINGS
- 164 BC_CCLONE
- 165 BC_UINT8
- 166 BC_UINT16
- 167 BC_UINT32
- 168 BC_UINT64
- 169 BC_NOTUSED_154
- 170 BC_NOTUSED_155
- 171 BC_NOTUSED_156
- 172 BC_NOTUSED_157
- 173 BC_NOTUSED_158
- 174 BC_NOTUSED_159
- 175 BC_NOTUSED_160
- 176 BC_NOTUSED_161
- 177 BC_NOTUSED_162
- 178 BC_NOTUSED_163
- 179 BC_NOTUSED_164
- 180 BC_NOTUSED_165
- 181 BC_NOTUSED_166
- 182 BC_NOTUSED_167
- 183 BC_TUPLE
- 184 BC_PTUPLE
- 185 BC_JAVA_RTYPE
- 186 BC_JAVA_EXTERNAL
BC_START
Description
Entry point of a routine.
arguments
- routine_id: 32 bits
- body_id: 32 bits
- result type: 32 bits
- number of arguments: 16 bits
- number of locals: 16 bits
- type of each local
- flag for argument cloning: 8 bits (If it is set (aka different of BC_NO_CLONE_ARG), read the type of arguments which need cloning).
- routine name: null terminated CHARACTER_8 string
- dynamic type where feature is written in: 16 bits
- flag for rescue clause presence: 8 bits (If present, offset to the rescue clause: 32 bits).
BC_PRECOND
BC_POSTCOND
BC_DEFERRED
BC_REVERSE
BC_CHECK
BC_ASSERT
BC_NULL
BC_PRE
BC_PST
BC_CHK
BC_LINV
BC_LVAR
BC_INV
BC_END_ASSERT
BC_TAG
BC_NOTAG
BC_JMP_F
BC_JMP
BC_LOOP
BC_END_VARIANT
BC_INIT_VARIANT
BC_DEBUG
BC_RASSIGN
BC_LASSIGN
BC_ASSIGN
BC_CREATE
BC_CTYPE
BC_CARG
BC_CLIKE
BC_CCUR
BC_INSPECT
BC_RANGE
BC_INSPECT_EXCEP
BC_LREVERSE
BC_RREVERSE
BC_FEATURE
BC_METAMORPHOSE
BC_CURRENT
BC_ROTATE
BC_FEATURE_INV
BC_ATTRIBUTE
BC_ATTRIBUTE_INV
BC_EXTERN
BC_EXTERN_INV
BC_CHAR
BC_BOOL
BC_INT
BC_INT32
BC_DOUBLE
BC_RESULT
BC_LOCAL
BC_ARG
BC_UPLUS
BC_UMINUS
BC_NOT
BC_LT
BC_GT
BC_MINUS
BC_XOR
BC_GE
BC_EQ
BC_NE
BC_STAR
BC_POWER
BC_LE
BC_DIV
BC_NHOOK
BC_AND
BC_SLASH
BC_MOD
BC_PLUS
BC_OR
BC_ADDR
BC_STRING
BC_AND_THEN
BC_OR_ELSE
BC_SPCREATE
BC_TUPLE_ACCESS
BC_JMP_T
BC_TUPLE_ASSIGN
BC_RESCUE
BC_END_RESCUE
BC_RETRY
BC_EXP_ASSIGN
BC_CLONE
BC_EXP_EXCEP
BC_VOID
BC_NONE_ASSIGN
BC_LEXP_ASSIGN
BC_REXP_ASSIGN
BC_CLONE_ARG
BC_NO_CLONE_ARG
BC_FALSE_COMPAR
BC_TRUE_COMPAR
BC_STANDARD_EQUAL
BC_BIT_STD_EQUAL
BC_HOOK
BC_BIT
BC_ARRAY
BC_RETRIEVE_OLD
BC_FLOAT
BC_OLD
BC_ADD_STRIP
BC_END_STRIP
BC_LBIT_ASSIGN
BC_RAISE_PREC
BC_GOTO_BODY
BC_NOT_REC
BC_END_PRE
BC_CAST_NATURAL
BC_CAST_INTEGER
BC_CAST_REAL_32
BC_CAST_REAL_64
BC_INV_NULL
BC_CREAT_INV
BC_END_EVAL_OLD
BC_START_EVAL_OLD
BC_OBJECT_ADDR
BC_PFEATURE
BC_PFEATURE_INV
BC_PEXTERN
BC_PEXTERN_INV
BC_PARRAY
BC_PATTRIBUTE
BC_PATTRIBUTE_INV
BC_PEXP_ASSIGN
BC_PASSIGN
BC_PREVERSE
BC_PCLIKE
BC_OBJECT_EXPR_ADDR
BC_RESERVE
BC_POP
BC_REF_TO_PTR
BC_RCREATE
BC_GEN_PARAM_CREATE
BC_CAST_CHAR32
BC_NULL_POINTER
BC_BASIC_OPERATIONS
BC_MAX
BC_MIN
BC_GENERATOR
BC_OFFSET
BC_ZERO
BC_ONE
BC_THREE_WAY_COMPARISON
BC_INT_BIT_OP
BC_INT_BIT_AND
BC_INT_BIT_OR
BC_INT_BIT_XOR
BC_INT_BIT_NOT
BC_INT_BIT_SHIFT_LEFT
BC_INT_BIT_SHIFT_RIGHT
BC_INT_BIT_TEST
BC_INT_SET_BIT
BC_INT_SET_BIT_WITH_MASK
BC_WCHAR
BC_INT8
BC_INT16
BC_INT64
BC_CAST_CHAR8
BC_ONCE_STRING
BC_ALLOCATE_ONCE_STRINGS
BC_CCLONE
BC_UINT8
Description
Load a NATURAL_8 on the stack.
Stack transition
... -> NATURAL_8 value
Arguments
- NATURAL_8 value: 8 bits
BC_UINT16
Description
Load a NATURAL_16 on the stack.
Stack transition
... -> NATURAL_16 value
Arguments
- NATURAL_16 value: 16 bits
BC_UINT32
Description
Load a NATURAL_32 on the stack.
Stack transition
... -> NATURAL_32 value
Arguments
- NATURAL_32 value: 32 bits
BC_UINT64
Description
Load a NATURAL_64 on the stack.
Stack transition
... -> NATURAL_64 value
Arguments
- NATURAL_64 value: 64 bits