1
0
mirror of https://github.com/MontFerret/ferret.git synced 2025-08-13 19:52:52 +02:00

Categorize and group opcodes; improve readability and maintainability of opcode.go

This commit is contained in:
Tim Voronov
2025-06-06 16:38:07 -04:00
parent 176fe8ce4f
commit 889365c56f

View File

@@ -1,30 +1,38 @@
package vm
// Opcode represents an operation code used in virtual machine instruction sets.
type Opcode byte
const (
OpReturn Opcode = iota
OpMove // Move a value from register A to register B
OpLoadNone // Set None value to a register
OpLoadBool // Set a boolean value to a register
OpLoadZero // Set a zero value to a register
OpLoadConst // Load a constant to a register or a global variable
OpLoadGlobal // Load a global variable to a register A
OpStoreGlobal // Store a value from register A to a global variable
OpLoadParam // Load a parameter to a register A
OpLoadIndex // Load a value from a list to a register (INDEX R1, R2, R3 - loads a value from a list in R2 to R1)
OpLoadIndexOptional // Load a value from a list to a register, if it exists
OpLoadKey // Load a value from a map to a register (KEY R1, R2, R3 - loads a value from a map in R2 to R1)
OpLoadKeyOptional // Load a value from a map to a register, if it exists
OpLoadProperty // Load a property (key or index) from an object (map or list) to a register
OpLoadPropertyOptional // Load a property (key or index) from an object (map or list) to a register, if it exists
// Control Flow
OpReturn Opcode = iota
OpJump
OpJumpIfFalse
OpJumpIfTrue
OpJumpIfEmpty
// Register Operations
OpMove // Move a value from register A to register B
// Loading Operations
OpLoadNone // Set None value to a register
OpLoadBool // Set a boolean value to a register
OpLoadZero // Set a zero value to a register
OpLoadConst // Load a constant to a register or a global variable
OpLoadParam // Load a parameter to a register A
// Global Variable Operations
OpLoadGlobal // Load a global variable to register A
OpStoreGlobal // Store a value from register A to a global variable
// Collection Access Operations
OpLoadIndex // Load a value from a list to a register
OpLoadIndexOptional // Load a value from a list to a register, if it exists
OpLoadKey // Load a value from a map to a register
OpLoadKeyOptional // Load a value from a map to a register, if it exists
OpLoadProperty // Load a property from an object to a register
OpLoadPropertyOptional // Load a property from an object to a register, if it exists
// Arithmetic Operations
OpAdd
OpSub
OpMulti
@@ -33,52 +41,62 @@ const (
OpIncr
OpDecr
// Type Operations
OpCastBool
OpNegate
OpFlipPositive
OpFlipNegative
// Comparison Operations
OpComp
OpNot
OpEq
OpNeq
OpIn
OpNotIn
OpGt
OpLt
OpGte
OpLte
// Membership & Pattern Matching
OpIn
OpNotIn
OpLike
OpNotLike
OpRegexpPositive
OpRegexpNegative
// Utility Operations
OpLength
OpType
OpClose
OpSleep
// Function Operations
OpCall
OpProtectedCall
OpList // Load an array from a list of registers (ARR R2, R3 R5 - creates an array in R2 with elements from R3 to R5)
OpMap // Load an object from a list of registers (OBJ R2, R3 R5 - creates an object in R2 with elements from R3 to R5)
OpRange // Load a range from a list of registers (RNG R2, R3, R4 - creates a range in R2 with start from R3 and end at R4)
OpDataSet // Load a dataset to a register A
// Collection Creation
OpList // Create an array
OpMap // Create an object
OpRange // Create a range
// Dataset Operations
OpDataSet
OpDataSetCollector
OpDataSetSorter
OpDataSetMultiSorter
OpStream // Subscribes to a stream (SMRCV R2, R3, R4 - subscribes to a stream in R2 with a collection from R3 and optional params from R4)
OpStreamIter // Consumes a stream (SMRD R2, R3 - consumes a stream in R2 with a collection from R3)
OpIter // Creates an iterator (ITER R2, R3 [, R4] - creates an iterator in R2 with a collection from R3 and optional params from R4)
OpIterNext // Moves to the next element in the iterator (ITER R2, R3 - moves to the next element in the iterator in R2 with a collection from R3)
OpIterValue // Returns the current value from the iterator (ITER R2, R3 - returns the current value from the iterator in R2 with a collection from R3)
OpIterKey // Returns the current key from the iterator (ITER R2, R3 - returns the current key from the iterator in R2 with a collection from R3)
OpIterLimit
OpIterSkip
OpPush // Adds a value to a dataset
OpPushKV // Adds a key-value pair to a dataset
// Stream Operations
OpStream // Subscribes to a stream
OpStreamIter // Consumes a stream
// Iterator Operations
OpIter // Creates an iterator
OpIterNext // Moves to the next element
OpIterValue // Returns the current value
OpIterKey // Returns the current key
OpIterLimit
OpIterSkip
)