ホスト演算のホスト言語インターフェース

この節では、ホスト演算、すなわち、プリミティブ演算とカプセルのホスト言語インターフェースを規定する。

pastelstitch::PrimitiveOperation クラス

pastelstitch::PrimitiveOperation クラスは、パステルステッチのプリミティブ演算である。PrimitiveOperation クラスは抽象クラスであり、operator () メンバー関数が純粋バーチャル関数になっている。プリミティブ演算を作成するには、PrimitiveOperation クラスの派生クラスと、その派生クラスの operator () メンバー関数を定義する必要がある。さらに、プリミティブ演算を登録するには、PrimitiveOperation クラスの派生クラスのインスタンスを作成し、静的環境 (pastelstitch::StaticEnvironment クラス) の add_primitive_operation メンバー関数で登録する。

pastelstitch::PrimitiveOperation クラスには以下のメンバー関数がある。これらのメンバー関数は operator () 関数で使用できる。

pastelstitch::DynamicEnvironment * get_dynamic_environment () const

pastelstitch::PrimitiveOperation クラスの get_dynamic_environment メンバー関数は、実行中の動的環境を得る。得られたポインターを解放してはいけない。

pastelstitch::StaticEnvironment * get_static_environment () const

pastelstitch::PrimitiveOperation クラスの get_static_environment メンバー関数は、実行中の静的環境を得る。得られたポインターを解放してはいけない。

pastelstitch::ValuePtr get_argument (std::string label = std::string ("main")) const

pastelstitch::PrimitiveOperation クラスの get_argument メンバー関数は、プリミティブ演算の引数の値を得る。label 引数を省略すると main 引数の値を得る。得られた値を書き換えてはいけない。

void set_return_value (pastelstitch::ValuePtr value)

pastelstitch::PrimitiveOperation クラスの set_return_value メンバー関数は、プリミティブ演算の戻り値を指定する。このメンバー関数を実行せずに operator () メンバー関数を終了したときは、戻り値はブーリアン型の false になる。

void set_continuation (pastelstitch::ValuePtr continuation, pastelstitch::Arguments continuation_arguments)

pastelstitch::PrimitiveOperation クラスの set_continuation メンバー関数は、continuation 引数で指定された値がコンティニュエーション型であれば、プリミティブ演算の実行 (pastelstitch::PrimitiveOperation::operator () メンバー関数) が終了したあと、コンティニュエーションを実行する。continuation_arguments 引数は引数の名前と値のマップである。これらの引数はゲスト言語からコンティニュエーション変数で参照できる。

void guest_catchable_throw (pastelstitch::Arguments properties = pastelstitch::Arguments ()) const

pastelstitch::PrimitiveOperation クラスの guest_catchable_throw メンバー関数は、ゲスト言語に例外をスルーする。properties 引数は例外の付属情報である。例外の付属情報は、ゲスト言語でコンティニュエーション引数を通して取得することができる。例外の付属情報の classname 項目には、プリミティブ演算の実行時型を表す文字列が格納される。

void guest_catchable_assert (bool condition, pastelstitch::Arguments properties = pastelstitch::Arguments ()) const

pastelstitch::PrimitiveOperation クラスの guest_catchable_assert メンバー関数は、引数が false であれば、ゲスト言語に例外をスルーする。properties 引数は例外の付属情報である。

void require_security_permission (pastelstitch::SecurityPermission security_permission) const

pastelstitch::PrimitiveOperation クラスの require_security_permission メンバー関数は、引数で指定されたセキュリティ・パーミッションが許可されていなければ、インタープリターを終了する。

pastelstitch::Capsule クラス

pastelstitch::Capsule クラスは、カプセルの実体である。カプセルを作成するには、Capsule クラスの派生クラスと、その派生クラスの operator () メンバー関数を定義する必要がある。さらに、カプセル型の値を生成するには、Capsule クラスの派生クラスのインスタンスを作成し、静的環境 (pastelstitch::StaticEnvironment クラス) のメンバー関数 hold_capsule で生成する。

pastelstitch::Capsule クラスには以下のメンバー関数がある。これらのメンバー関数は operator () 関数で使用できる。

これらのメンバー関数の機能は、プリミティブ演算 (pastelstitch::PrimitiveOperation クラス) の同名のメンバー関数と同じである。