Opcodes

An opcode is a 1-byte FixedUInt that tells the reader what the next expression represents and how the bytes that follow should be interpreted.

The meanings of each opcode are organized loosely by their high and low nibbles.

High nibbleLow nibbleMeaning
0x0_ to 0x3_0-FE-expression with 6-bit address
0x4_0-FE-expression with 12-bit address
0x5_0-FE-expression with 20-bit address
0x6_0-8Integers from 0 to 8 bytes wide
9Reserved
A-DFloats
E-FBooleans
0x7_0-FDecimals
0x8_0-CShort-form timestamps
D-FReserved
0x9_0-FStrings
0xA_0-FSymbols with inline text
0xB_0-FLists
0xC_0-FS-expressions
0xD_0Empty struct
1Reserved
2-FStructs
0xE_0Ion version marker
1-3Symbols with symbol address
4-6Annotations with symbol address
7-9Annotations with FlexSym text
Anull.null
BTyped nulls
C-DNOP
ESystem symbol
FSystem macro invocation
0xF_0Delimited container end
1Delimited list start
2Delimited S-expression start
3Delimited struct start
4E-expression with FlexUInt macro address
5E-expression with FlexUInt length prefix
6Integer with FlexUInt length prefix
7Decimal with FlexUInt length prefix
8Timestamp with FlexUInt length prefix
9String with FlexUInt length prefix
ASymbol with FlexUInt length prefix and inline text
BList with FlexUInt length prefix
CS-expression with FlexUInt length prefix
DStruct with FlexUInt length prefix
EBlob with FlexUInt length prefix
FClob with FlexUInt length prefix