Next: , Previous: , Up: Structures   [Contents][Index]


6.23.4 Structure Implementation

この実装の核となるアイデアは、 構築されている構造体に関するデータをグローバル変数ではなくスタックに渡すことです。 この設計上の決定が下されると、 他のすべては自然に配置されます。

スタック上の型の説明は align size の形式です。 サイズをスタックのTOSに維持すると、 配列の処理が非常に簡単になります。

field は、 CreateDOES> を使用する定義ワードです。 フィールドの本体にはフィールドのオフセットが含まれており、 通常の DOES> アクションは以下のようになります:

@ +

つまり、 アドレスにオフセットを加算して、 フィールドのスタック効果 addr1 – addr2 を与えます。

この単純な構造は、 オフセット 0 のフィールドの最適化によって少し複雑になります。 これには、 別の DOES> 部分が必要です(そのようなフィールドがコンパイル中に呼び出された場合、 スタック上に何かがあることに依存できないため)。 したがって、 異なる DOES> 部分を別々のワードに配置し、 オフセットに基づいてどれを呼び出すかを決定します。 ゼロ・オフセットの場合、 フィールドは基本的に noop です。 これは即実行ワードであるため、 コンパイル時にコードは生成されません。