diff --git a/doc/VM b/doc/VM new file mode 100644 index 0000000..e95e6f6 --- /dev/null +++ b/doc/VM @@ -0,0 +1,43 @@ +Supported types +--------------- +Nil +Integer +Float +String +Array +Table +Function +NativePointer + +Operations +---------- + +Stack operations: + pshn [int] Push int + pshz Push zero (or false) + psht Push true + pshr [float] Push float (real) + pshs [string] Push string + pshf [function] Push function + newa [array] Push (create) empty array + newt [table] Push (create) empty table + pop + dup + +Local variables: + setl [int] Set stack top as indexed local variable + getl [int] Get indexed local variable and place on stack + +Function operations: + call [n_pars] Enter function on stack toplevel (passing n next stack values as parameters) + ret Leave a function (return value in stack) + retn Leave a function (return nil) + +Control flow: + bz [pc] Branch if zero + bnz [pc] Branch if not zero + jmp [pc] Unconditional jump + +Logical/arithmetic + sum Sum top 2 values in stack + mul Multiply top 2 values in stack \ No newline at end of file