Descargar

Instrucciones de la máquina virtual

El compilador traduce cada función a una lista de instrucciones (bytecode) para una máquina de pila. Cada instrucción ocupa un byte y puede llevar operandos de 8 bits (u8) o 16 bits (u16). La columna «Operandos y pila» indica qué lee de la pila y qué deja (a b -> r).

Este archivo se genera con python tools/gen_docs.py a partir de src/lang/compiler/bytecode.h.

#InstrucciónOperandos y pila
0OP_CONSTu16 const
1OP_GET_LOCALu16 slot
2OP_SET_LOCALu16 slot (deja el valor)
3OP_GET_UPVALu16
4OP_SET_UPVALu16
5OP_GET_GLOBALu16
6OP_SET_GLOBALu16 (deja el valor)
7OP_DEFINE_GLOBALu16 (consume el valor)
8OP_GET_BUILTINu16
9OP_GET_PROPu16 nombre, u8 caché del índice de campo
10OP_SET_PROPu16 nombre, u8 caché obj valor -> valor
11OP_GET_INDEXobj idx -> v
12OP_SET_INDEXobj idx v -> v
13OP_GET_SUPERu16 nombre this -> metodo enlazado
14OP_INa b -> a in b
15OP_ISu16 const (texto con el nombre del tipo) v -> bool
16OP_JUMPu16 adelante
17OP_JUMP_IF_FALSEu16 (consume)
18OP_JUMP_IF_TRUEu16 (consume)
19OP_LOOPu16 atrás
20OP_CALLu8 argc
21OP_CALL_NAMEDu8 argc, u16 const (lista de nombres: null = posicional)
22OP_CALL_SPREADcallee lista -> resultado
23OP_INVOKEu16 nombre, u8 argc, u16 entrada de la caché de métodos
24OP_SUPER_INVOKEu16 nombre, u8 argc (this args...)
25OP_SUPER_CALLu8 argc (this args...) -> llama al constructor de la clase base
26OP_CLOSUREu16 const función, luego por upvalue: u8 isLocal, u16 index
27OP_CLOSE_UPVALUE
28OP_RETURN
29OP_CLASSu16 nombre, u8 flags(1=struct)
30OP_INHERITclase super -> clase
31OP_METHODu16 nombre, u8 tipo clase closure -> clase
32OP_FIELDu16 nombre, u8 flags clase -> clase
33OP_IMPLEMENTSu16 nombre clase iface -> clase
34OP_LISTu16 n
35OP_LIST_APPENDlista v -> lista
36OP_LIST_EXTENDlista iterable -> lista
37OP_MAPu16 n (pares)
38OP_RANGEu8 inclusive a b -> rango
39OP_RANGE_STEPrango paso -> rango
40OP_ITER_PREPcoleccion -> coleccion 0
41OP_ITER_NEXTu16 slot de la colección, u16 salto -> clave valor (o salta)
42OP_FOR_CHECKu16 slot contador, u8 inclusive, u16 salto
43OP_FOR_INCRu16 slot contador
44OP_REPEAT_PREPn -> n (valida)
45OP_REPEAT_NEXTu16 slot, u16 salto
46OP_TRYu16 desplazamiento al catch
47OP_END_TRY
48OP_THROW
49OP_AWAIT
50OP_EMITu8 argc evento args... -> null
51OP_ONu8 flags(1=once, 2=prioridad) evento handler [prio] -> suscripción
52OP_ENUMu16 nombre, u16 n (pares nombre valor) -> enum
53OP_EVENTu16 nombre, u16 const lista de parámetros -> evento
54OP_IMPORTu16 const ruta -> módulo
55OP_IMPORT_NAMEu16 nombre módulo -> valor
56OP_TO_STRING
57OP_CONCATu16 n
58OP_CHECK_TYPEu16 slot, u16 const tipo, u16 const nombre del parámetro
59OP_DEFAULT_ARGu16 slot, u16 salto (salta si el argumento NO falta)
60OP_MATCH_TESTsujeto patrón -> bool
61OP_SUPER_INIT_AUTOthis -> (llama al constructor base sin argumentos si existe)
62OP_CHECK_RETURNu16 const tipo v -> v
63OP_SLIDEu8 n l1..ln v -> v (retira n locales bajo la cima cerrando sus upvalues)
64OP_JUMP_IF_NOT_LTu16
65OP_JUMP_IF_NOT_LEu16
66OP_JUMP_IF_NOT_GTu16
67OP_JUMP_IF_NOT_GEu16
68OP_JUMP_IF_NOT_EQu16
69OP_JUMP_IF_NOT_NEu16
70OP_FOR_NEXTu16 slot, u8 inclusivo, u16 distancia hacia atrás
71OP_CHECK_NUMBERu16 slot, u16 const nombre del parámetro (parámetro ": number")
72OP_SET_LOCAL_POPu16 slot (consume el valor: "x = ..." como sentencia; SET_LOCAL + POP)
73OP_FOR_CHECK_Vu16 slot contador, u8 inclusivo, u16 slot variable, u16 salto adelante
74OP_FOR_NEXT_Vu16 slot contador, u8 inclusivo, u16 slot variable, u16 distancia hacia atrás

Hay 75 instrucciones.