34 lines
1.1 KiB
Plaintext
34 lines
1.1 KiB
Plaintext
Bytecode format
|
|
---------------
|
|
|
|
The bytecode file is composed of the following sections:
|
|
|
|
* 16-byte header
|
|
[0:3]: Magic
|
|
[4]: VM format
|
|
* Index: pointers to each one of the sections, up to 8
|
|
Each pointer: 4 bytes
|
|
Each count: 4 bytes
|
|
* [0x0] Constants indexes: all constants (such as strings) used in the code
|
|
* Table of 4-byte constant indexes with pointer to constant
|
|
* [0x1] Functions indexes: Pointer to functions within the code
|
|
[0:3]: function pointer
|
|
[4:5]: number of parameters
|
|
[6:7]: number of local variables
|
|
* [0x2] Constants raw data
|
|
* [0x3] Code: executable code
|
|
[1-byte]: operation
|
|
[variable]: operand (see value encoding below)
|
|
* [0x4] Debugging info
|
|
???
|
|
|
|
The max file size is 2 Gb.
|
|
|
|
## Values can be encoded in the following ways:
|
|
* The type is defined by the operator.
|
|
* Encoding varies according to the type:
|
|
int: use protobuf format
|
|
float: 4-bit floating point
|
|
string: int-defined length, followed by the string proper - no null terminator
|
|
* Constant indexes and function ids are encoded as ints
|