セルオブジェクト (cell object)
******************************

「セル」オブジェクトは、複数のスコープから参照される変数を実装するため
に使われます。 そのような変数ごとに、値を格納するセルオブジェクトを作
成します。 値を参照する各スタックフレームのローカル変数には、その変数
を使う外側のスコープのセルへの参照が含まれます。 値にアクセスするとき
は、セルオブジェクト自体ではなく、セルに格納された値を使います。 この
セルの参照をたどる処理には、生成されるバイトコードによるサポートが必要
です。 セルにアクセスすれば自動的にその中身が得られるわけではありませ
ん。 ほかの用途でセルオブジェクトが役立つことはあまりないでしょう。

type PyCellObject

   セルオブジェクトに使われる C 構造体です。

PyTypeObject PyCell_Type

   セルオブジェクトに対応する型オブジェクトです。

int PyCell_Check(PyObject *ob)

   *ob* がセルオブジェクトの場合に真を返します; *ob* は "NULL" であっ
   てはなりません。この関数は常に成功します。

PyObject *PyCell_New(PyObject *ob)
    *戻り値: 新しい参照。*

   値 *ob* の入った新たなセルオブジェクトを生成して返します。 引数を
   "NULL" にしてもかまいません。

PyObject *PyCell_Get(PyObject *cell)
    *戻り値: 新しい参照。*

   セル *cell* の内容を返します。 内容は "NULL" の場合もあります。
   *cell* がセルオブジェクトでなければ、例外を設定して "NULL" を返しま
   す。

PyObject *PyCell_GET(PyObject *cell)
    *戻り値: 借用参照。*

   *cell* の内容を返しますが、*cell* が非 "NULL" かつセルオブジェクト
   であるかどうかはチェックしません。

int PyCell_Set(PyObject *cell, PyObject *value)

   セルオブジェクト *cell* の内容を *value* に設定します。 セルに現在
   格納されている内容への参照は解放します。 *value* は "NULL" でも構い
   ません。 *cell* は "NULL" であってはなりません。

   成功すると "0" を返します。 *cell* がセルオブジェクトでなければ、例
   外を設定して "-1" を返します。

void PyCell_SET(PyObject *cell, PyObject *value)

   セルオブジェクト *cell* の値を *value* に設定します。 参照カウント
   に対する変更はなく、安全のためのチェックは何も行いません。*cell* は
   非 "NULL" でなければならず、かつセルオブジェクトでなければなりませ
   ん。
