Skip to content

Latest commit

 

History

History
194 lines (182 loc) · 2.91 KB

internals.rst

File metadata and controls

194 lines (182 loc) · 2.91 KB

Internals

Call States and Contexts

All code in Minilang is executed within a state. Each state has the following properties:

Type

Every state is also a valid Minilang value (so they can be passed as first class values).

Caller

The state that called this state.

Context

Every state has an associated context (which may be shared across states).

run

The function to call in order to run this state.

See /api/types for precise C structure definition of states.

Closure Implementation

Minilang code is run using a simple stack based virtual machine. There is a single register called RESULT which holds the most recent result.

Frame Layout
Field Notes
Common state fields Every closure frame is a valid state
Source name For error reporting and debugging
Next instruction For resuming after a call returns
Saved stack top For resuming after a call returns
Current error handler
Upvalues For nested closures
Flags
Schedule For preemptive task switching
Debug state Only present if frame is being debugged
Stack0 Bottom of stack
Top of stack points to somewhere in this
Stackn Maximum stack
Instruction Set
Instruction Parameters Description
RETURN none Switches to the calling state, passing the current value of RESULT.
SUSPEND
RESUME
NIL
SOME
IF
ELSE
PUSH
WITH
WITH_VAR
WITHX
POP
ENTER
EXIT
LOOP
TRY
CATCH
LOAD
LOAD_PUSH
VAR
VARX
LET
LETI
LETX
FOR
NEXT
VALUE
KEY
CALL
CONST_CALL
ASSIGN
LOCAL
LOCAL_PUSH
UPVALUE
LOCALX
TUPLE_NEW
TUPLE_SET
LIST_NEW
LIST_APPEND
MAP_NEW
MAP_INSERT
CLOSURE
PARTIAL_NEW
PARTIAL_SET