この実装の核となるアイデアは、 構築されている構造体に関するデータをグローバル変数ではなくスタックに渡すことです。 この設計上の決定が下されると、 他のすべては自然に配置されます。
スタック上の型の説明は align size の形式です。 サイズをスタックのTOSに維持すると、 配列の処理が非常に簡単になります。
field
は、 Create
と DOES>
を使用する定義ワードです。
フィールドの本体にはフィールドのオフセットが含まれており、 通常の DOES>
アクションは以下のようになります:
@ +
つまり、 アドレスにオフセットを加算して、 フィールドのスタック効果 addr1 – addr2 を与えます。
この単純な構造は、 オフセット 0 のフィールドの最適化によって少し複雑になります。 これには、 別の DOES>
部分が必要です(そのようなフィールドがコンパイル中に呼び出された場合、 スタック上に何かがあることに依存できないため)。 したがって、 異なる
DOES>
部分を別々のワードに配置し、 オフセットに基づいてどれを呼び出すかを決定します。 ゼロ・オフセットの場合、
フィールドは基本的に noop です。 これは即実行ワードであるため、 コンパイル時にコードは生成されません。