Byte Code
Introduction
Below is a description of all opcodes we current support in the Eiffel interpreter. We only display their name as defined in C/run-time/rt_interp.h. One has to use this file to avoid possible change in values of opcode which happens time to time since it is a closed format.
Byte code reader
In C/bench you have 2 tools to read the content of the melted file:
- meltdump: which takes as argument the melted file and will generate 2 files: melted.txt and bytecode.eif
- bytedump: uses bytecode.eif from the current working directory and generate bytecode.txt
The content of bytecode.txt is helpful to understand the code we generate and the documentation below makes it even clearer.
Byte codes
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_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_CHAR
BC_BOOL
BC_DOUBLE
BC_WCHAR
BC_INT8
Description
Load a INTEGER_8 on the stack.
Stack transition
... -> value
Arguments
- value: 8 bits INTEGER_8
BC_INT16
Description
Load a INTEGER_16 on the stack.
Stack transition
... -> value
Arguments
- value: 16 bits INTEGER_16
BC_INT32
Description
Load a INTEGER_32 on the stack.
Stack transition
... -> value
Arguments
- value: 32 bits INTEGER_32
BC_INT64
Description
Load a INTEGER_64 on the stack.
Stack transition
... -> value
Arguments
- value: 64 bits INTEGER_64
BC_CAST_CHAR8
BC_ONCE_STRING
BC_ALLOCATE_ONCE_STRINGS
BC_CCLONE
BC_UINT8
Description
Load a NATURAL_8 on the stack.
Stack transition
... -> value
Arguments
- value: 8 bits NATURAL_8
BC_UINT16
Description
Load a NATURAL_16 on the stack.
Stack transition
... -> value
Arguments
- value: 16 bits NATURAL_16
BC_UINT32
Description
Load a NATURAL_32 on the stack.
Stack transition
... -> value
Arguments
- value: 32 bits NATURAL_32
BC_UINT64
Description
Load a NATURAL_64 on the stack.
Stack transition
... -> value
Arguments
- value: 64 bits NATURAL_64