CILstelem
命令 ( ECMA 335 [pdf] の III.4.26) は次のように指定されています。
フォーマット アセンブリ フォーマット 説明 A4 <T> stelem typeTok indexの 配列要素をスタック上の 値に置き換える スタック遷移: …、配列、インデックス、値、-> …
typeTok引数の目的がわかりません。
オリジナルスペック
以下は、仕様におけるtypeTokのすべての言及です。
説明では:
値の型は、命令のtypeTok と互換性のある配列要素でなければなりません。
「正しさ」セクションで:
typeTok は、有効な
typedef
、typeref
、またはtypespec
メタデータ トークンでなければなりません。「検証可能性」セクション:
追跡される配列の型は
T[]
ですT
。追跡される値の型はarray-element-compatible-with typeTokです。
typeTok はarray-element-compatible-withです
T
したがって、typeTokは何にも使用されません。提供する必要があるだけです。つまり、私が見る唯一の要件は、条件を満たすtypeTokが存在する必要があるということです。
変更された仕様
ただし、そのようなtypeTokの単なる存在を要求することは、上記の仕様セクションを次のように変更することと同等です。
説明では:
値の型は、配列の要素型と互換性のある配列要素でなければなりません
「正確性」セクションで、上記の部分を削除します。
「検証可能性」セクション:
追跡される配列の型は
T[]
ですT
。追跡される値の型はarray-element-compatible-withです
T
1 valueがarrayの要素型を持つ aec-withの場合、 aec-with関係の再帰性により、valueの型または配列の要素型のいずれかを、「元の仕様」の要件を満たすtypeTokとして選択できます。 "。逆に、指定された要件を持つ typeTok が存在する場合、 aec -with関係の推移性により、「変更された仕様」の要件がすぐに生成されます。
それで、私は何が欠けていますか?typeTok引数が存在するのはなぜですか(したがって、なぜstelem.<type>
以外の命令stelem.ref
が存在するのでしょうか)。