pytho****@googl*****
pytho****@googl*****
2011年 11月 21日 (月) 10:51:48 JST
Revision: 55bd5bbb0a5a Author: Arihiro TAKASE <hinac****@gmail*****> Date: Sun Nov 20 17:50:54 2011 Log: Update 2.7.2: library/dis http://code.google.com/p/python-doc-ja/source/detail?r=55bd5bbb0a5a Modified: /library/dis.rst ======================================= --- /library/dis.rst Tue Mar 15 11:52:45 2011 +++ /library/dis.rst Sun Nov 20 17:50:54 2011 @@ -1,27 +1,22 @@ - -:mod:`dis` --- Pythonバイトコードの逆アセンブラ -=============================================== + +:mod:`dis` --- Python バイトコードの逆アセンブラ +================================================ .. module:: dis - :synopsis: Pythonバイトコードの逆アセンブラ。 + :synopsis: Python バイトコードの逆アセンブラ。 -.. The :mod:`dis` module supports the analysis of CPython :term:`bytecode` by -.. disassembling it. The CPython bytecode which this module takes as an -.. input is defined in the file :file:`Include/opcode.h` and used by the compiler -.. and the interpreter. - :mod:`dis` モジュールは CPython バイトコード (:term:`bytecode`) を逆アセン ブルすることでバイトコードの解析をサポートします。 このモジュールが入力として受け取る CPython バイトコードはファイ ル :file:`Include/opcode.h` に定義されており、 コンパイラとインタプリタが使用しています。 - -.. impl-detail:: - - .. Bytecode is an implementation detail of the CPython interpreter! No - .. guarantees are made that bytecode will not be added, removed, or changed - .. between versions of Python. Use of this module should not be considered to - .. work across Python VMs or Python releases. +.. seealso:: + + Latest version of the `dis module Python source code + <http://svn.python.org/view/python/branches/release27-maint/Lib/dis.py?view=markup>`_ + + +.. impl-detail:: バイトコードは CPython インタプリタの実装詳細です! Python のバージョン 間でバイトコードの追加や、削除、変更がないという保証はありません。この @@ -29,8 +24,6 @@ の間で動作すると考えるべきではありません。 -.. Example: Given the function :func:`myfunc`: - 例: 以下の関数 :func:`myfunc` を考えると @@ -40,8 +33,6 @@ return len(alist) -.. the following command can be used to get the disassembly of :func:`myfunc`: - :func:`myfunc` の逆アセンブル結果を得るために次のコマンドを使うことができま す @@ -54,24 +45,14 @@ 9 RETURN_VALUE -.. (The "2" is a line number). - ("2"は行番号です)。 -.. The :mod:`dis` module defines the following functions and constants: - :mod:`dis` モジュールは次の関数と定数を定義します: .. function:: dis([bytesource]) - .. Disassemble the *bytesource* object. *bytesource* can denote either a module, a - .. class, a method, a function, or a code object. For a module, it disassembles - .. all functions. For a class, it disassembles all methods. For a single code - .. sequence, it prints one line per bytecode instruction. If no object is - .. provided, it disassembles the last traceback. - *bytesource* オブジェクトを逆アセンブルします。 *bytesource* はモジュール、クラス、関数、あるいはコードオブジェクトのい ずれかを示します。 モジュールに対しては、すべての関数を逆アセンブルします。クラスに対して は、すべてのメソッドを逆アセンブルします。 @@ -81,370 +62,264 @@ .. function:: distb([tb]) - .. Disassembles the top-of-stack function of a traceback, using the last traceback - .. if none was passed. The instruction causing the exception is indicated. - トレースバックのスタックの先頭の関数を逆アセンブルします。 Noneが渡された場合は最後のトレースバックを使います。例外を引き起こした命 令が表示されます。 .. function:: disassemble(code[, lasti]) - .. Disassembles a code object, indicating the last instruction if *lasti* was - .. provided. The output is divided in the following columns: - コードオブジェクトを逆アセンブルします。 *lasti* が与えられた場合は、最後の命令を示します。出力は次のようなカラム に分割されます: - .. #. the line number, for the first instruction of each line - .. #. the current instruction, indicated as ``-->``, - .. #. a labelled instruction, indicated with ``>>``, - .. #. the address of the instruction, - .. #. the operation code name, - .. #. operation parameters, and - .. #. interpretation of the parameters in parentheses. - #. 各行の最初の命令に対する行番号。 #. 現在の命令。 ``-->`` として示されます。 #. ラベル付けされた命令。 ``>>`` とともに表示されます。 #. 命令のアドレス。 #. 命令コード名。 - #. 命令パラメータ。 - #. パラメータの解釈を括弧で囲んだもの。 - - - .. The parameter interpretation recognizes local and global variable names, - .. constant values, branch targets, and compare operators. - - パラメータの解釈は、ローカル変数とグローバル変数の名前、定数の値、 + #. 命令パラメタ。 + #. パラメタの解釈を括弧で囲んだもの。 + + パラメタの解釈は、ローカル変数とグローバル変数の名前、定数の値、 分岐先、比較命令を認識します。 .. function:: disco(code[, lasti]) - .. A synonym for disassemble. It is more convenient to type, and kept for - .. compatibility with earlier Python releases. - - disassembleの別名。よりタイプしやすく、以前のPythonリリースと互換性があ ります。 - - -.. data:: opname - - .. Sequence of operation names, indexable using the bytecode. - - 命令コード名のリスト。バイトコードをインデックスに使って参照できます。 - - -.. data:: opmap - - .. Dictionary mapping bytecodes to operation names. - - バイトコードから命令コード名へのマッピング辞書。 + :func:`disassemble` の別名。よりタイプしやすく、以前の + Python リリースと互換性があります。 + + +.. function:: findlinestarts(code) + + このジェネレータ関数は、コードオブジェクト *code* の ``co_firstlineno`` と + ``co_lnotab`` 属性を使い、ソースコード内の行が始まる場所であるオフセット を + 求めます。これらは ``(offset, lineno)`` の対として生成されます。 + + +.. function:: findlabels(code) + + ジャンプ先であるコードオブジェクト *code* のすべてのオフセットを + 求め、これらのオフセットのリストを返します。 + + +.. data:: opname + + 命令コード名のリスト。バイトコードをインデクスに使って参照できます。 -.. data:: cmp_op - - .. Sequence of all compare operation names. +.. data:: opmap + + 命令コード名をバイトコードに対応づける辞書。 + + +.. data:: cmp_op すべての比較命令の名前のリスト。 .. data:: hasconst - .. Sequence of bytecodes that have a constant parameter. - - 定数パラメータを持つバイトコードのリスト。 + 定数パラメタを持つバイトコードのリスト。 .. data:: hasfree - .. Sequence of bytecodes that access a free variable. - 自由変数にアクセスするバイトコードのリスト。 .. data:: hasname - .. Sequence of bytecodes that access an attribute by name. - 名前によって属性にアクセスするバイトコードのリスト。 .. data:: hasjrel - .. Sequence of bytecodes that have a relative jump target. - 相対ジャンプ先を持つバイトコードのリスト。 .. data:: hasjabs - .. Sequence of bytecodes that have an absolute jump target. - 絶対ジャンプ先を持つバイトコードのリスト。 .. data:: haslocal - .. Sequence of bytecodes that access a local variable. - ローカル変数にアクセスするバイトコードのリスト。 .. data:: hascompare - .. Sequence of bytecodes of Boolean operations. - ブール命令のバイトコードのリスト。 .. _bytecodes: -Pythonバイトコード命令 ----------------------- - -.. The Python compiler currently generates the following bytecode instructions. - -現在Pythonコンパイラは次のバイトコード命令を生成します。 +Python バイトコード命令 +----------------------- + +現在 Python コンパイラは次のバイトコード命令を生成します。 .. opcode:: STOP_CODE () - .. Indicates end-of-code to the compiler, not used by the interpreter. - コンパイラにコードの終わりを知らせます。インタプリタでは使われません。 .. opcode:: NOP () - .. Do nothing code. Used as a placeholder by the bytecode optimizer. - なにもしないコード。バイトコードオプティマイザでプレースホルダとして使わ れます。 .. opcode:: POP_TOP () - .. Removes the top-of-stack (TOS) item. - スタックの先頭 (TOS) の要素を取り除きます。 .. opcode:: ROT_TWO () - .. Swaps the two top-most stack items. - スタックの先頭の 2 つの要素を入れ替えます。 .. opcode:: ROT_THREE () - .. Lifts second and third stack item one position up, moves top down to position - .. three. - スタックの二番目と三番目の要素の位置を 1 つ上げ、先頭を三番目へ下げま す。 .. opcode:: ROT_FOUR () - .. Lifts second, third and forth stack item one position up, moves top down to - .. position four. - スタックの二番目、三番目および四番目の位置を 1 つ上げ、先頭を四番目に下 げます。 .. opcode:: DUP_TOP () - .. Duplicates the reference on top of the stack. - スタックの先頭にある参照の複製を作ります。 -.. Unary Operations take the top of the stack, apply the operation, and push the -.. result back on the stack. - 単項命令はスタックの先頭を取り出して操作を適用し、結果をスタックへプッシュ し戻します。 .. opcode:: UNARY_POSITIVE () - .. Implements ``TOS = +TOS``. - ``TOS = +TOS`` に対応します。 .. opcode:: UNARY_NEGATIVE () - .. Implements ``TOS = -TOS``. - ``TOS = -TOS`` に対応します。 .. opcode:: UNARY_NOT () - .. Implements ``TOS = not TOS``. - ``TOS = not TOS`` に対応します。 .. opcode:: UNARY_CONVERT () - .. Implements ``TOS = `TOS```. - ``TOS = `TOS``` に対応します。 .. opcode:: UNARY_INVERT () - .. Implements ``TOS = ~TOS``. - ``TOS = ~TOS`` に対応します。 .. opcode:: GET_ITER () - .. Implements ``TOS = iter(TOS)``. - ``TOS = iter(TOS)`` に対応します。 -.. Binary operations remove the top of the stack (TOS) and the second top-most -.. stack item (TOS1) from the stack. They perform the operation, and put the -.. result back on the stack. - -二項命令はスタックの先頭(TOS)と先頭から二番目の要素をスタックから取り除きま す。 +二項命令はスタックの先頭 (TOS) と先頭から二番目の要素をスタックから取り除き ます。 命令を実行し、スタックへ結果をプッシュし戻します。 .. opcode:: BINARY_POWER () - .. Implements ``TOS = TOS1 ** TOS``. - ``TOS = TOS1 ** TOS`` に対応します。 .. opcode:: BINARY_MULTIPLY () - .. Implements ``TOS = TOS1 * TOS``. - ``TOS = TOS1 * TOS`` に対応します。 .. opcode:: BINARY_DIVIDE () - .. Implements ``TOS = TOS1 / TOS`` when ``from __future__ import division`` is not - .. in effect. - ``from __future__ import division`` が有効でないときの ``TOS = TOS1 / TOS`` に対応します。 .. opcode:: BINARY_FLOOR_DIVIDE () - .. Implements ``TOS = TOS1 // TOS``. - ``TOS = TOS1 // TOS`` に対応します。 .. opcode:: BINARY_TRUE_DIVIDE () - .. Implements ``TOS = TOS1 / TOS`` when ``from __future__ import division`` is in - .. effect. - ``from __future__ import division`` が有効なときの ``TOS = TOS1 / TOS`` に対応します。 .. opcode:: BINARY_MODULO () - .. Implements ``TOS = TOS1 % TOS``. - ``TOS = TOS1 % TOS`` に対応します。 .. opcode:: BINARY_ADD () - .. Implements ``TOS = TOS1 + TOS``. - ``TOS = TOS1 + TOS`` に対応します。 .. opcode:: BINARY_SUBTRACT () - .. Implements ``TOS = TOS1 - TOS``. - ``TOS = TOS1 - TOS`` に対応します。 .. opcode:: BINARY_SUBSCR () - .. Implements ``TOS = TOS1[TOS]``. - ``TOS = TOS1[TOS]`` に対応します。 .. opcode:: BINARY_LSHIFT () - .. Implements ``TOS = TOS1 << TOS``. - ``TOS = TOS1 << TOS`` に対応します。 .. opcode:: BINARY_RSHIFT () - .. Implements ``TOS = TOS1 >> TOS``. - ``TOS = TOS1 >> TOS`` に対応します。 .. opcode:: BINARY_AND () - .. Implements ``TOS = TOS1 & TOS``. - ``TOS = TOS1 & TOS`` に対応します。 .. opcode:: BINARY_XOR () - .. Implements ``TOS = TOS1 ^ TOS``. - ``TOS = TOS1 ^ TOS`` に対応します。 .. opcode:: BINARY_OR () - .. Implements ``TOS = TOS1 | TOS``. - ``TOS = TOS1 | TOS`` に対応します。 -.. In-place operations are like binary operations, in that they remove TOS and -.. TOS1, and push the result back on the stack, but the operation is done in-place -.. when TOS1 supports it, and the resulting TOS may be (but does not have to be) -.. the original TOS1. - -インプレース命令はTOSとTOS1を取り除いて結果をスタックへプッシュするという点 で二項命令と似ています。 -しかし、TOS1がインプレース命令をサポートしている場合には操作が直接TOS1に行 われます。 -また、操作結果のTOSは (常に同じというわけではありませんが) 元のTOS1と同じオ ブジェクトになることが多いです。 +インプレース命令は TOS と TOS1 を取り除いて結果をスタックへプッシュするとい う点で二項命令と似ています。 +しかし、TOS1 がインプレース命令をサポートしている場合には操作が直接 TOS1 に 行われます。 +また、操作結果の TOS は (常に同じというわけではありませんが) 元の TOS1 と同 じオブジェクトになることが多いです。 .. opcode:: INPLACE_POWER () - .. Implements in-place ``TOS = TOS1 ** TOS``. - インプレースの ``TOS = TOS1 ** TOS`` に対応します。 .. opcode:: INPLACE_MULTIPLY () - .. Implements in-place ``TOS = TOS1 * TOS``. - インプレースの ``TOS = TOS1 * TOS`` に対応します。 .. opcode:: INPLACE_DIVIDE () - .. Implements in-place ``TOS = TOS1 / TOS`` when ``from __future__ import - .. division`` is not in effect. - ``from __future__ import division`` が有効でないときのインプレースの ``TOS = TOS1 / TOS`` に対応します。 @@ -457,311 +332,214 @@ .. opcode:: INPLACE_TRUE_DIVIDE () - .. Implements in-place ``TOS = TOS1 / TOS`` when ``from __future__ import - .. division`` is in effect. - ``from __future__ import division`` が有効なときのインプレースの ``TOS = TOS1 / TOS`` に対応します。 .. opcode:: INPLACE_MODULO () - .. Implements in-place ``TOS = TOS1 % TOS``. - インプレースの ``TOS = TOS1 % TOS`` に対応します。 .. opcode:: INPLACE_ADD () - .. Implements in-place ``TOS = TOS1 + TOS``. - インプレースの ``TOS = TOS1 + TOS`` に対応します。 .. opcode:: INPLACE_SUBTRACT () - .. Implements in-place ``TOS = TOS1 - TOS``. - インプレースの ``TOS = TOS1 - TOS`` に対応します。 .. opcode:: INPLACE_LSHIFT () - .. Implements in-place ``TOS = TOS1 << TOS``. - インプレースの ``TOS = TOS1 << TOS`` に対応します。 .. opcode:: INPLACE_RSHIFT () - .. Implements in-place ``TOS = TOS1 >> TOS``. - インプレースの ``TOS = TOS1 >> TOS`` に対応します。 .. opcode:: INPLACE_AND () - .. Implements in-place ``TOS = TOS1 & TOS``. - インプレースの ``TOS = TOS1 & TOS`` に対応します。 .. opcode:: INPLACE_XOR () - .. Implements in-place ``TOS = TOS1 ^ TOS``. - インプレースの ``TOS = TOS1 ^ TOS`` に対応します。 .. opcode:: INPLACE_OR () - .. Implements in-place ``TOS = TOS1 | TOS``. - インプレースの ``TOS = TOS1 | TOS`` に対応します。 -.. The slice opcodes take up to three parameters. - -スライス命令コードは最大 3 つのパラメータを取ります。 +スライス命令コードは最大 3 つのパラメタを取ります。 .. opcode:: SLICE+0 () - .. Implements ``TOS = TOS[:]``. - ``TOS = TOS[:]`` に対応します。 .. opcode:: SLICE+1 () - .. Implements ``TOS = TOS1[TOS:]``. - ``TOS = TOS1[TOS:]`` に対応します。 .. opcode:: SLICE+2 () - .. Implements ``TOS = TOS1[:TOS]``. - ``TOS = TOS1[:TOS]`` に対応します。 .. opcode:: SLICE+3 () - .. Implements ``TOS = TOS2[TOS1:TOS]``. - ``TOS = TOS2[TOS1:TOS]`` に対応します。 -.. Slice assignment needs even an additional parameter. As any statement, they put -.. nothing on the stack. - -スライス代入はさらにもう 1 つのパラメータを必要とします。 +スライス代入はさらにもう 1 つのパラメタを必要とします。 他の文と同じく、これらはスタックに何もプッシュしません。 .. opcode:: STORE_SLICE+0 () - .. Implements ``TOS[:] = TOS1``. - ``TOS[:] = TOS1`` に対応します。 .. opcode:: STORE_SLICE+1 () - .. Implements ``TOS1[TOS:] = TOS2``. - ``TOS1[TOS:] = TOS2`` に対応します。 .. opcode:: STORE_SLICE+2 () - .. Implements ``TOS1[:TOS] = TOS2``. - ``TOS1[:TOS] = TOS2`` に対応します。 .. opcode:: STORE_SLICE+3 () - .. Implements ``TOS2[TOS1:TOS] = TOS3``. - ``TOS2[TOS1:TOS] = TOS3`` に対応します。 .. opcode:: DELETE_SLICE+0 () - .. Implements ``del TOS[:]``. - ``del TOS[:]`` に対応します。 .. opcode:: DELETE_SLICE+1 () - .. Implements ``del TOS1[TOS:]``. - ``del TOS1[TOS:]`` に対応します。 .. opcode:: DELETE_SLICE+2 () - .. Implements ``del TOS1[:TOS]``. - ``del TOS1[:TOS]`` に対応します。 .. opcode:: DELETE_SLICE+3 () - .. Implements ``del TOS2[TOS1:TOS]``. - ``del TOS2[TOS1:TOS]`` に対応します。 .. opcode:: STORE_SUBSCR () - .. Implements ``TOS1[TOS] = TOS2``. - ``TOS1[TOS] = TOS2`` に対応します。 .. opcode:: DELETE_SUBSCR () - .. Implements ``del TOS1[TOS]``. - ``del TOS1[TOS]`` に対応します。 -.. Miscellaneous opcodes. - その他の命令コード。 .. opcode:: PRINT_EXPR () - .. Implements the expression statement for the interactive mode. TOS is removed - .. from the stack and printed. In non-interactive mode, an expression statement is - .. terminated with ``POP_STACK``. - - 対話モードのための式文に対応します。TOSはスタックから取り除かれ表示され ます。 + 対話モードのための式文に対応します。TOS はスタックから取り除かれ表示され ます。 非対話モードにおいては、式文は ``POP_STACK`` で終了しています。 .. opcode:: PRINT_ITEM () - .. Prints TOS to the file-like object bound to ``sys.stdout``. There is one such - .. instruction for each item in the :keyword:`print` statement. - - ``sys.stdout`` に束縛されたファイル互換オブジェクトに対してTOSを出力しま す。 + ``sys.stdout`` に束縛されたファイル互換オブジェクトに対して TOS を出力し ます。 :keyword:`print` 文の各要素に対してこのような命令が一つずつあります。 .. opcode:: PRINT_ITEM_TO () - .. Like ``PRINT_ITEM``, but prints the item second from TOS to the file-like object - .. at TOS. This is used by the extended print statement. - - ``PRINT_ITEM`` と似ていますが、TOSから二番目の要素をTOSにあるファイル互 換オブジェクトへ出力します。 - これは拡張print文で使われます。 + ``PRINT_ITEM`` と似ていますが、TOS から二番目の要素を TOS にあるファイル 互換オブジェクトへ出力します。 + これは拡張 print 文で使われます。 .. opcode:: PRINT_NEWLINE () - .. Prints a new line on ``sys.stdout``. This is generated as the last operation of - .. a :keyword:`print` statement, unless the statement ends with a comma. - ``sys.stdout`` へ改行を表示します。 これは :keyword:`print` 文がコンマで終わっていない場合 に :keyword:`print` 文の最後の命令として生成されます。 .. opcode:: PRINT_NEWLINE_TO () - .. Like ``PRINT_NEWLINE``, but prints the new line on the file-like object on the - .. TOS. This is used by the extended print statement. - ``PRINT_NEWLINE`` と似ていますが、TOSのファイル互換オブジェクトに改行を 表示します。 - これは拡張print文で使われます。 + これは拡張 print 文で使われます。 .. opcode:: BREAK_LOOP () - .. Terminates a loop due to a :keyword:`break` statement. - :keyword:`break` 文によってループを終了します。 .. opcode:: CONTINUE_LOOP (target) - .. Continues a loop due to a :keyword:`continue` statement. *target* is the - .. address to jump to (which should be a ``FOR_ITER`` instruction). - :keyword:`continue` 文によってループを継続します。 *target* はジャンプするアドレスです (アドレスは ``FOR_ITER`` 命令でなけ ればなりません)。 -.. opcode:: LIST_APPEND () - - .. Calls ``list.append(TOS1, TOS)``. Used to implement list comprehensions. - - ``list.append(TOS1, TOS)`` を呼びます。リスト内包表記を実装するために使 われます。 +.. opcode:: LIST_APPEND (i) + + ``list.append(TOS[-i], TOS)`` を呼びます。リスト内包表記を実装するために 使われます。 + 要素が取り除かれる間、リストオブジェクトはスタックに残るので、ループの + 反復をさらに行えます。 .. opcode:: LOAD_LOCALS () - .. Pushes a reference to the locals of the current scope on the stack. This is used - .. in the code for a class definition: After the class body is evaluated, the - .. locals are passed to the class definition. - - 現在のスコープのローカルな名前空間(locals)への参照をスタックにプッシュし ます。 + 現在のスコープのローカルな名前空間 (locals) への参照をスタックにプッシュ します。 これはクラス定義のためのコードで使われます: - クラス本体が評価された後、localsはクラス定義へ渡されます。 + クラス本体が評価された後、locals はクラス定義へ渡されます。 .. opcode:: RETURN_VALUE () - .. Returns with TOS to the caller of the function. - - 関数の呼び出し元へTOSを返します。 + 関数の呼び出し元へ TOS を返します。 .. opcode:: YIELD_VALUE () - .. Pops ``TOS`` and yields it from a :term:`generator`. - - ``TOS`` をポップし、それをジェネレータ(:term:`generator`)からyieldしま す。 + ``TOS`` をポップし、それをジェネレータ (:term:`generator`) から yield し ます。 .. opcode:: IMPORT_STAR () - .. Loads all symbols not starting with ``'_'`` directly from the module TOS to the - .. local namespace. The module is popped after loading all names. This opcode - .. implements ``from module import *``. - - ``'_'`` で始まっていないすべてのシンボルをモジュールTOSから直接ローカル 名前空間へロードします。 + ``'_'`` で始まっていないすべてのシンボルをモジュール TOS から直接ローカ ル名前空間へロードします。 モジュールはすべての名前をロードした後にポップされます。 この命令コードは ``from module import *`` に対応します。 .. opcode:: EXEC_STMT () - .. Implements ``exec TOS2,TOS1,TOS``. The compiler fills missing optional - .. parameters with ``None``. - - ``exec TOS2,TOS1,TOS`` に対応します。コンパイラは指定されなかったオプシ ョンのパラメータを ``None`` で埋めます。 + ``exec TOS2,TOS1,TOS`` に対応します。コンパイラは指定されなかったオプシ ョンのパラメタを ``None`` で埋めます。 .. opcode:: POP_BLOCK () - .. Removes one block from the block stack. Per frame, there is a stack of blocks, - .. denoting nested loops, try statements, and such. - ブロックスタックからブロックを一つ取り除きます。 - フレームごとにブロックのスタックがあり、ネストしたループやtry文などを表 しています。 + フレームごとにブロックのスタックがあり、ネストしたループや try 文などを 表しています。 .. opcode:: END_FINALLY () - .. Terminates a :keyword:`finally` clause. The interpreter recalls whether the - .. exception has to be re-raised, or whether the function returns, and continues - .. with the outer-next block. - :keyword:`finally` 節を終了します。 インタプリタは例外を再送出しなければならないかどうか、あるいは、 関数から return して外側の次のブロックに続くかどうかを再度判断します。 @@ -769,16 +547,22 @@ .. opcode:: BUILD_CLASS () - .. Creates a new class object. TOS is the methods dictionary, TOS1 the tuple of - .. the names of the base classes, and TOS2 the class name. - 新しいクラスオブジェクトを作成します。TOSはメソッド辞書、TOS1は基底クラ スの名前のタプル、TOS2はクラス名です。 -.. opcode:: WITH_CLEANUP () - - .. Cleans up the stack when a :keyword:`with` statement block exits. On top of - .. the stack are 1--3 values indicating how/why the finally clause was entered: +.. opcode:: SETUP_WITH (delta) + + この命令コードは、with ブロックが開始する前にいくつかの命令を行います。 + まず、コンテキストマネージャから :meth:`~object.__exit__` をロードし、 + 後から :opcode:`WITH_CLEANUP` で使うためにスタックにプッシュします。 + そして、 :meth:`~object.__enter__` が呼び出され、 *delta* を指す + finally ブロックがプッシュされます。最後に、enter メソッドを呼び出した + 結果がスタックにプッシュされます。次の命令コードはこれを無視 + (:opcode:`POP_TOP`) するか、変数に保存 (:opcode:`STORE_FAST`, + :opcode:`STORE_NAME`, または :opcode:`UNPACK_SEQUENCE`) します。 + + +.. opcode:: WITH_CLEANUP () :keyword:`with` 式ブロックを抜けるときに、スタックをクリーンアップしま す。 スタックの先頭は 1--3 個の値で、それらはなぜ/どのように finally 節に @@ -791,25 +575,14 @@ * (TOP, SECOND, THIRD) = exc_info() - .. Under them is EXIT, the context manager's :meth:`__exit__` bound method. - これらの値の下には、コンテキストマネージャーの :meth:`__exit__` 結合メソ ッド (bound method) である EXIT があります。 - .. In the last case, ``EXIT(TOP, SECOND, THIRD)`` is called, otherwise - .. ``EXIT(None, None, None)``. - 最後のケースでは、 ``EXIT(TOP, SECOND, THIRD)`` が呼ばれ、それ以外では ``EXIT(None, None, None)`` が呼ばれます。 - .. EXIT is removed from the stack, leaving the values above it in the same - .. order. In addition, if the stack represents an exception, *and* the function - .. call returns a 'true' value, this information is "zapped", to prevent - .. ``END_FINALLY`` from re-raising the exception. (But non-local gotos should - .. still be resumed.) - EXIT はスタックから取り除かれ、その上の値は順序を維持したまま残されま す。 加えて、スタックが例外処理中であることを示し、 *かつ* 関数呼び出しが *true* 値を返した場合、 ``END_FINALLY`` が例外を再送出することを防ぐため、この情報は削除されま す ("zapped")。 @@ -819,138 +592,88 @@ .. XXX explain the WHY stuff! -.. All of the following opcodes expect arguments. An argument is two bytes, with -.. the more significant byte last. - 以下の命令コードはすべて引数を必要とします。引数は 2 バイトで、最上位バイト が後になります。 -.. opcode:: STORE_NAME (namei) - - .. Implements ``name = TOS``. *namei* is the index of *name* in the attribute - .. :attr:`co_names` of the code object. The compiler tries to use ``STORE_FAST`` - .. or ``STORE_GLOBAL`` if possible. - ``name = TOS`` に対応します。 - *namei* はコードオブジェクトの属性 :attr:`co_names` における *name* のイ ンデックスです。 + *namei* はコードオブジェクトの属性 :attr:`co_names` における *name* のイ ンデクスです。 コンパイラは可能ならば ``STORE_FAST`` または ``STORE_GLOBAL`` を使おうと します。 .. opcode:: DELETE_NAME (namei) - .. Implements ``del name``, where *namei* is the index into :attr:`co_names` - .. attribute of the code object. - - ``del name`` に対応します。 *namei* はコードオブジェクト の :attr:`co_names` 属性へのインデックスです。 + ``del name`` に対応します。 *namei* はコードオブジェクト の :attr:`co_names` 属性へのインデクスです。 .. opcode:: UNPACK_SEQUENCE (count) - .. Unpacks TOS into *count* individual values, which are put onto the stack - .. right-to-left. - TOS を *count* 個の個別の値にアンパックして、右から左の順にスタックに置 きます。 .. opcode:: DUP_TOPX (count) - .. Duplicate *count* items, keeping them in the same order. Due to implementation - .. limits, *count* should be between 1 and 5 inclusive. - *count* 個の要素を順番を保ちながら複製します。 - 実装上の制限から、 *count* は1から5の間(5を含む)でなければなりません。 + 実装上の制限から、 *count* は 1以上 から 5 以下でなければなりません。 .. opcode:: STORE_ATTR (namei) - .. Implements ``TOS.name = TOS1``, where *namei* is the index of name in - .. :attr:`co_names`. - - ``TOS.name = TOS1`` に対応します。 *namei* は :attr:`co_names` における 名前のインデックスです。 + ``TOS.name = TOS1`` に対応します。 *namei* は :attr:`co_names` における 名前のインデクスです。 .. opcode:: DELETE_ATTR (namei) - .. Implements ``del TOS.name``, using *namei* as index into :attr:`co_names`. - - ``del TOS.name`` に対応します。 :attr:`co_names` へのインデックスとして *namei* を使います。 + ``del TOS.name`` に対応します。 :attr:`co_names` へのインデクスとして *namei* を使います。 .. opcode:: STORE_GLOBAL (namei) - .. Works as ``STORE_NAME``, but stores the name as a global. - ``STORE_NAME`` と同じように動作しますが、 name をグローバルとして保存し ます。 .. opcode:: DELETE_GLOBAL (namei) - .. Works as ``DELETE_NAME``, but deletes a global name. - ``DELETE_NAME`` と同じように動作しますが、グローバルの name を削除しま す。 .. opcode:: LOAD_CONST (consti) - .. Pushes ``co_consts[consti]`` onto the stack. - ``co_consts[consti]`` をスタックにプッシュします。 .. opcode:: LOAD_NAME (namei) - .. Pushes the value associated with ``co_names[namei]`` onto the stack. - ``co_names[namei]`` に関連付けられた値をスタックにプッシュします。 .. opcode:: BUILD_TUPLE (count) - .. Creates a tuple consuming *count* items from the stack, and pushes the resulting - .. tuple onto the stack. - スタックから *count* 個の要素を消費してタプルを作り出し、できたタプルを スタックにプッシュします。 .. opcode:: BUILD_LIST (count) - .. Works as ``BUILD_TUPLE``, but creates a list. - ``BUILD_TUPLE`` と同じように動作しますが、リストを作り出します。 .. opcode:: BUILD_MAP (count) - .. Pushes a new dictionary object onto the stack. The dictionary is pre-sized - .. to hold *count* entries. - スタックに新しい辞書オブジェクトをプッシュします。 辞書は *count* 個のエントリを持つサイズに設定されます。 .. opcode:: LOAD_ATTR (namei) ***The diff for this file has been truncated for email.***