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

``セル (cell)'' オブジェクトは、複数のスコープから参照される 変数群を実装するために使われます。セルは各変数について作成され、 各々の値を記憶します; この値を参照する各スタックフレームにおける ローカル変数には、そのスタックフレームの外側で同じ値を参照している セルに対する参照が入ります。セルで表現された値にアクセスすると、 セルオブジェクト自体の代わりにセル内の値が使われます。この セルオブジェクトを使った間接参照 (dereference) は、インタプリタに よって生成されたバイトコード内でサポートされている必要があります; セルオブジェクトにアクセスした際に、自動的に間接参照は起こり ません。上記以外の状況では、セルオブジェクトは役に立たないはずです。

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

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

int `PyCell_Check`( | ob)

  ob がセルオブジェクトの場合に真を返します; ob は `NULL`であってはなりません。

PyObject* `PyCell_New`( | PyObject *ob)

  戻り値: 新たな参照.
  値 ob の入った新たなセルオブジェクトを生成して返します。 引数を `NULL`にしてもかまいません。

PyObject* `PyCell_Get`( | PyObject *cell)

  戻り値: 新たな参照.
  cell の内容を返します。

PyObject* `PyCell_GET`( | PyObject *cell)

  戻り値: 借りた参照.
  cell の内容を返しますが、cell が非 `NULL` でかつ セルオブジェクトであるかどうかチェックしません。

int `PyCell_Set`( | PyObject *cell, PyObject *value)

  セルオブジェクト cell の内容を value に設定します。 この関数は現在のセルの全ての内容に対する参照を解放します。 value は `NULL`でもかまいません。cell は 非`NULL` でなければなりません; もしcell がセルオブジェクトでない 場合、 `-1` を返します。成功すると `0` を返します。

void `PyCell_SET`( | PyObject *cell, PyObject *value)

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