|
|
|
La libreria di riferimento di Python |
|
|
|
18.10.1 Istruzioni Byte Code di Python
Attualmente il compilatore Python genera le seguenti istruzioni
bytecode.
- STOP_CODE
-
Indica la fine del codice al compilatore, non viene utilizzato
dall'interprete.
- POP_TOP
-
Rimuove l'oggetto in cima alla pila (NdT: TOS, in Inglese:
top-of-stack).
- ROT_TWO
-
Scambia i 2 oggetti in cima alla pila.
- ROT_THREE
-
Sposta gli oggetti al secondo e terzo posto della pila in alto di una
posizione, sposta poi il primo oggetto alla terza posizione nella pila.
- ROT_FOUR
-
Sposta gli oggetti al secondo, terzo e quarto posto della pila in alto
di una posizione, sposta poi il primo oggetto alla quarta posizione nella
pila.
- DUP_TOP
-
Duplica il riferimento in cima alla pila.
Le operazioni unitarie prendono il primo oggetto della pila, applicano
l'operazione e rimettono il risultato nella pila.
- UNARY_POSITIVE
-
Implementa
TOS = +TOS
.
- UNARY_NEGATIVE
-
Implementa
TOS = -TOS
.
- UNARY_NOT
-
Implementa
TOS = not TOS
.
- UNARY_CONVERT
-
Implementa
TOS = `TOS`
.
- UNARY_INVERT
-
Implementa
TOS = ~TOS
.
- GET_ITER
-
Implementa
TOS = iter(TOS)
.
Le operazioni binarie rimuovono il primo (TOS) ed
il secondo (TOS1) elemento dalla cima della pila.
Effettuano l'operazione e rimettono il risultato sulla pila.
- BINARY_POWER
-
Implementa
TOS = TOS1 ** TOS
.
- BINARY_MULTIPLY
-
Implementa
TOS = TOS1 * TOS
.
- BINARY_DIVIDE
-
Implementa
TOS = TOS1 / TOS
quando non è in attivo
from __future__ import division
.
- BINARY_FLOOR_DIVIDE
-
Implementa
TOS = TOS1 // TOS
.
- BINARY_TRUE_DIVIDE
-
Implementa
TOS = TOS1 / TOS
quando non è in attivo
from __future__ import division
.
- BINARY_MODULO
-
Implementa
TOS = TOS1 % TOS
.
- BINARY_ADD
-
Implementa
TOS = TOS1 + TOS
.
- BINARY_SUBTRACT
-
Implementa
TOS = TOS1 - TOS
.
- BINARY_SUBSCR
-
Implementa
TOS = TOS1[TOS]
.
- BINARY_LSHIFT
-
Implementa
TOS = TOS1 << TOS
.
- BINARY_RSHIFT
-
Implementa
TOS = TOS1 >> TOS
.
- BINARY_AND
-
Implementa
TOS = TOS1 & TOS
.
- BINARY_XOR
-
Implementa
TOS = TOS1 ^ TOS
.
- BINARY_OR
-
Implementa
TOS = TOS1 | TOS
.
Le operazioni sul posto sono come le operazioni binarie, in quanto
rimuovono TOS e TOS1 e rimettono sulla pila il risultato, ma
l'operazione viene fatta sul posto quando TOS1 lo supporta ed il
TOS risultante può essere (ma non per forza) il TOS1
originale.
- INPLACE_POWER
-
Implementa l'operazione sul posto
TOS = TOS1 ** TOS
.
- INPLACE_MULTIPLY
-
Implementa l'operazione sul posto
TOS = TOS1 * TOS
.
- INPLACE_DIVIDE
-
Implementa l'operazione sul posto
TOS = TOS1 / TOS
quando non
è attivo from __future__ import division
.
- INPLACE_FLOOR_DIVIDE
-
Implementa l'operazione sul posto
TOS = TOS1 // TOS
.
- INPLACE_TRUE_DIVIDE
-
Implementa l'operazione sul posto
TOS = TOS1 / TOS
quando non
è attivo from __future__ import division
.
- INPLACE_MODULO
-
Implementa l'operazione sul posto
TOS = TOS1 % TOS
.
- INPLACE_ADD
-
Implementa l'operazione sul posto
TOS = TOS1 + TOS
.
- INPLACE_SUBTRACT
-
Implementa l'operazione sul posto
TOS = TOS1 - TOS
.
- INPLACE_LSHIFT
-
Implementa l'operazione sul posto
TOS = TOS1 << TOS
.
- INPLACE_RSHIFT
-
Implementa l'operazione sul posto
TOS = TOS1 >> TOS
.
- INPLACE_AND
-
Implementa l'operazione sul posto
TOS = TOS1 & TOS
.
- INPLACE_XOR
-
Implementa l'operazione sul posto
TOS = TOS1 ^ TOS
.
- INPLACE_OR
-
Implementa l'operazione sul posto
TOS = TOS1 | TOS
.
I codici di operazione di affettamento accettano fino a tre parametri.
- SLICE+0
-
Implementa
TOS = TOS[:]
.
- SLICE+1
-
Implementa
TOS = TOS1[TOS:]
.
- SLICE+2
-
Implementa
TOS = TOS1[:TOS]
.
- SLICE+3
-
Implementa
TOS = TOS2[TOS1:TOS]
.
L'assegnazione delle slice necessita anche di un parametro addizionale.
Come ogni istruzione, non mettono nulla sulla pila.
- STORE_SLICE+0
-
Implementa
TOS[:] = TOS1
.
- STORE_SLICE+1
-
Implementa
TOS1[TOS:] = TOS2
.
- STORE_SLICE+2
-
Implementa
TOS1[:TOS] = TOS2
.
- STORE_SLICE+3
-
Implementa
TOS2[TOS1:TOS] = TOS3
.
- DELETE_SLICE+0
-
Implementa
del TOS[:]
.
- DELETE_SLICE+1
-
Implementa
del TOS1[TOS:]
.
- DELETE_SLICE+2
-
Implementa
del TOS1[:TOS]
.
- DELETE_SLICE+3
-
Implementa
del TOS2[TOS1:TOS]
.
- STORE_SUBSCR
-
Implementa
TOS1[TOS] = TOS2
.
- DELETE_SUBSCR
-
Implementa
del TOS1[TOS]
.
Codici di operazione vari.
- PRINT_EXPR
-
Implementa l'istruzione di espressione per la modalità
interattiva. Il TOS viene rimosso dalla pila e
stampato. Nella modalità non interattiva, una dichiarazione di
espressione finisce con
POP_STACK
.
- PRINT_ITEM
-
Stampa il TOS nell'oggetto simile a file alla fine di
sys.stdout
.
C'è un'istruzione del genere per ogni elemento nella dichiarazione print.
- PRINT_ITEM_TO
-
Come
PRINT_ITEM
, ma stampa il secondo elemento dal
TOS verso l'oggetto simile a file in TOS. Questo
viene usato dall'istruzione print estesa.
- PRINT_NEWLINE
-
Stampa una nuova riga in
sys.stdout
. Questa viene generata
come ultima operazione di un'istruzione print, a meno che
l'istruzione non finisca con una virgola.
- PRINT_NEWLINE_TO
-
Come
PRINT_NEWLINE
, ma stampa la nuova riga nell'oggetto
simile a file sul TOS. Questo viene usato dall'istruzione
print estesa.
- BREAK_LOOP
-
Esce da un ciclo a causa di un'istruzione break.
- CONTINUE_LOOP target
-
Continua un ciclo a causa di un'istruzione continue.
target è l'indirizzo in cui saltare(il quale dovrebbe essere una
istruzione
FOR_ITER
).
- LOAD_LOCALS
-
Mette un riferimento alle variabili locali dello spazio di visibilità
(NdT: scope) corrente sulla pila. Questo viene usato nel codice per una
definizione di classe: dopo che il corpo della classe viene valutato le
variabili locali vengono passate alla definizione di classe.
- RETURN_VALUE
-
Restituisce con il TOS al chiamante della funzione,
- YIELD_VALUE
-
Rimuove il
TOS
e lo restituisce da un generatore.
- IMPORT_STAR
-
Carica tutti i simboli che non iniziano con "_" direttamente
dal modulo TOS nello spazio dei nomi locale. Il modulo
viene rimosso dopo aver caricato tutti i nomi. Questo codice di operazione
implementa
from module import *
.
- EXEC_STMT
-
Implementa
exec TOS2,TOS1,TOS
. Il compilatore riempie i
parametri facoltativi mancanti con None
.
- POP_BLOCK
-
Rimuove un blocco dallo pila dei blocchi. Per ogni frame, esiste una
pila di blocchi, che indica cicli annidati, istruzioni try ed
altro.
- END_FINALLY
-
Termina una clausola finally. L'interprete ricorda se
l'eccezione deve essere nuovamente sollevata, o se la funzione deve
restituire e continua con il prossimo blocco esterno.
- BUILD_CLASS
-
Crea una nuovo oggetto classe. Il TOS è il dizionario
dei metodi, il TOS1 è la tupla dei nomi delle classi base
ed il TOS2 il nome della classe.
Tutti i codici di operazione seguenti si aspettano argomenti. Un argomento è di due
byte, con l'ultimo byte più significativo.
- STORE_NAME namei
-
Implementa
name = TOS
. namei è l'indice di name
nell'attributo co_names dell'oggetto codice. Il compilatore
prova ad usare, se è possibile, STORE_LOCAL
o
STORE_GLOBAL
.
- DELETE_NAME namei
-
Implementa
del name
, dove namei è l'indice nell'attributo
co_names dell'oggetto codice.
- UNPACK_SEQUENCE count
-
Spacchetta TOS in count valori individuali, che vengono inseriti
sopra lo stack da destra verso sinistra.
- DUP_TOPX count
-
Duplica count elementi, prendendoli nello stesso ordine.
A causa di limiti implementativi, count dovrebbe essere
tra
1
e 5
inclusi.
- STORE_ATTR namei
-
Implementa
TOS.name = TOS1
, dove namei è l'indice di
name in co_names.
- DELETE_ATTR namei
-
Implementa
del TOS.name
, usando namei come indice in
co_names.
- STORE_GLOBAL namei
-
Funziona come
STORE_NAME
, ma registra il nome come globale.
- DELETE_GLOBAL namei
-
Funziona come
DELETE_NAME
, ma cancella un nome globale.
- LOAD_CONST consti
-
Inserisce "co_consts[consti]" in cima alla pila.
- LOAD_NAME namei
-
Inserisce il valore associato con "co_names[namei]" in cima
alla pila.
- BUILD_TUPLE count
-
Crea una tupla consumando count elementi dalla pila ed
inserendo la tupla risultante in cima alla pila.
- BUILD_LIST count
-
Funziona come
BUILD_TUPLE
, ma crea una lista.
- BUILD_MAP zero
-
Inserisce un nuovo oggetto dizionario vuoto in cima alla pila.
L'argomento viene ignorato ed impostato a zero dal compilatore.
- LOAD_ATTR namei
-
Sostituisce il TOS con
getattr(TOS, co_names[namei])
.
- COMPARE_OP opname
-
Svolge un'operazione Booleana. Il nome dell'operazione può essere
trovato in
cmp_op[opname]
.
- IMPORT_NAME namei
-
Importa il modulo
co_names[namei]
. L'oggetto modulo
viene inserito in cima alla pila. Lo spazio dei nomi corrente non ne
viene influenzato: per una dichiarazione import adeguata,
una successiva istruzione STORE_FAST
modifica lo spazio dei
nomi.
- IMPORT_FROM namei
-
Carica gli attributi
co_names[namei]
dal modulo trovato
in TOS. L'oggetto risultante viene inserito in cima
alla pila, per essere successivamente immagazzinato da una istruzione
STORE_FAST
.
- JUMP_FORWARD delta
-
Incrementa il contatore del bytecode di delta.
- JUMP_IF_TRUE delta
-
Se il TOS è vero, incrementa il contatore del bytecode
di delta. Il TOS viene lasciato nella pila.
- JUMP_IF_FALSE delta
-
Se il TOS è falso, incrementa il bytecode di
delta. Il TOS non viene modificato.
- JUMP_ABSOLUTE target
-
Imposta il contatore del bytecode a target.
- FOR_ITER delta
-
TOS
è un iteratore. Viene chiamato il suo metodo next().
Se questo genera un nuovo valore, lo inserisce sopra la pila
(lasciando l'iteratore sotto di esso). Se l'iteratore che lo indica è
esaurito il TOS
viene rimosso ed il contatore del bytecode
viene incrementato di delta.
- LOAD_GLOBAL namei
-
Carica l'attributo globale chiamato
co_names[namei]
sopra la pila.
- SETUP_LOOP delta
-
Mette un blocco per un ciclo sopra la pila dei blocchi. Il blocco si
estende dalla istruzione corrente con la misura di delta byte.
- SETUP_EXCEPT delta
-
Mette un blocco try da una clausola try-except sulla pila dei blocchi.
delta punta al primo blocco except.
- SETUP_FINALLY delta
-
Mette un blocco try da una clausola try-except sulla pila dei blocchi.
delta punta al blocco finally.
- LOAD_FAST var_num
-
Mette un riferimento al
co_varnames[var_num]
locale sopra
la pila.
- STORE_FAST var_num
-
Immagazzina il TOS nel
co_varnames[var_num]
locale.
- DELETE_FAST var_num
-
Cancella il
co_varnames[var_num]
locale.
- LOAD_CLOSURE i
-
Mette un riferimento alla cella contenuta nello slot i della
cella e libera la variabile memorizzata. Il nome della variabile è
co_cellvars[i]
se i è minore della lunghezza di
co_cellvars. Altrimenti assume il valore
co_freevars[i - len(co_cellvars)]
.
- LOAD_DEREF i
-
Carica la cella contenuta nello slot i della cella e libera
la variabile memorizzata. Inserisce un riferimento per
l'oggetto cella contenuto nella pila.
- STORE_DEREF i
-
Immagazzina il TOS nella cella contenuta nello slot
i della cella e libera la variabile memorizzata.
- SET_LINENO lineno
-
Questo codice di operazione è obsoleto.
- RAISE_VARARGS argc
-
Solleva un'eccezione. argc indica il numero di parametri per
l'istruzione
raise
, con un intervallo da 0
a 3
.
Il gestore troverà la traceback come TOS2, il parametro come TOS1, e
l'eccezione come TOS.
- CALL_FUNCTION argc
-
Chiama una funzione. Il byte meno significativo di argc indica il numero di
parametri posizionali, il byte più significativo il numero dei parametri a
parola chiave. Sopra la pila, il codice di operazione trova prima i parametri a
parola chiave. Per ogni argomento a parola chiave, il valore si
trova all'inizio della chiave. Sotto i parametri a parola chiave,
si trovano i parametri posizionali, con in cima il parametro più
a destra. Sotto i parametri si trova l'oggetto funzione
da chiamare.
- MAKE_FUNCTION argc
-
Mette un nuovo oggetto funzione sopra la pila. TOS
è il codice associato con quella funzione. L'oggetto funzione viene
definito per avere argc parametri predefiniti, che si trovano
sotto il TOS.
- MAKE_CLOSURE argc
-
Crea una nuovo oggetto funzione, imposta il suo slot
func_closure e lo mette sopra la pila. TOS è
il codice associato con la funzione. Se l'oggetto codice possiede N
variabili libere, i prossimi N elementi sulla pila sono le celle
per queste variabili. La funzione ha anche argc parametri predefiniti,
che si trovano prima delle celle.
- BUILD_SLICE argc
-
Mette un oggetto fetta sopra lo stack. argc deve essere
2
o 3
. Se è 2
, viene inserito slice(TOS1, TOS)
; se
è 3
viene inserito slice(TOS2, TOS1, TOS)
. Vedete la
funzione built-in slice()
per maggiori
informazioni.
- EXTENDED_ARG ext
-
Applica un prefisso ad ogni codice di operazione che ha un argomento troppo grande
per adattarsi nei due byte predefiniti. ext contiene due
byte addizionali che, presi insieme all'argomento seguente del codice di operazione,
comprende un argomento a 4 byte, ext rappresenta i
due byte più significativi.
- CALL_FUNCTION_VAR argc
-
Chiama una funzione. argc viene interpretato come in
CALL_FUNCTION
. L'elemento in cima alla pila contiene
l'elenco degli argomenti a variabile, seguito dagli argomenti a parola chiave e da
quelli posizionali.
- CALL_FUNCTION_KW argc
-
Chiama una funzione. argc viene interpretato come in
CALL_FUNCTION
. L'elemento in cima alla pila contiene il
dizionario degli argomenti a parola chiave seguito dagli argomenti a parola
chiave esplicita e da quelli posizionali.
- CALL_FUNCTION_VAR_KW argc
-
Chiama una funzione. argc viene interpretato come in
CALL_FUNCTION
. L'elemento in cima alla pila contiene il
dizionari degli argomenti a parola chiave seguito dalla tupla
degli argomenti a variabile, ulteriormente seguito dagli argomenti a parola
chiave esplicita e da quelli posizionali.
|
|
|
La libreria di riferimento di Python |
|
|
|
Release 2.3.4, documentation updated on 21. maggio 2005.
Vedete Circa questo documento... per informazioni su modifiche e suggerimenti.