非公開constructor静的 読み取り専用acting宣言元の個体に加えて、操作している者が居る場所(誰かが押した・引いた結果として起きる、11節)。
操作の宣言はpatientに乗る(11.5節)ので、patientが居るのはここから。ただしselfと同じ物を
指すので名前としては書けない(selfIsPatient)。使う物が運ばれてくるかは場所ごとに違うので、
そちらだけをwithInstrumentが足す。
非公開 読み取り専用broadcasts相手が1つに定まらなくてよいか。childを指せるのはここが真の場所だけ(8.1節のブロードキャスト登録)。
静的 読み取り専用declaration宣言元の個体だけが居る場所(on_max/on_min 6.3節・resists 7.13節)。操作ではないので役は居ない。
非公開 読み取り専用has操作している者(agent)が居るか。誰かが操作しているとは限らない場所には居ない。
非公開 読み取り専用has働きかけに使われる物(instrument)が居るか。真になるのは物が運ばれてくる場所だけ(下のwithInstrument)。
非公開 読み取り専用has働きかけられる物(patient)が居るか。操作の場と、その参加者のpropsだけ(11.5節)。
非公開 読み取り専用hasamongが選んだ相手(picked)が居るか。amongを書いた候補の中だけ(10.3節)。
非公開 読み取り専用has宣言元の個体(self)が居るか。parent・ancestorもここから辿るので、無ければ揃って解けない。
非公開 読み取り専用names参照先のプロパティ名が決まっているか。ancestorはそれで祖先を探すので、無ければ解けない。
静的 読み取り専用participant参加者のprops(base 6.5節・passives 8節)。3役とも書ける——そこには「宣言元がどの役に就くか」
を静的に決めるものが無いので、patientもselfの言い換えにはならない(11.5節)。
非公開 読み取り専用pushes押すのが可逆な寄与か(modify、8.3節)。寄与は相手の上で合計されて誰の分か見分けられなくなるので、
同時に2つの操作へ就きうる役(instrument・patient)へは押せない。agentは1つの操作に1人しか
居ないので混ざらない。
非公開 読み取り専用selfその patient が宣言元(self)と同じ物か。操作の宣言はpatientに乗る(11.5節)ので、操作の宣言の
中では必ず真になり、そこではpatientと書けない——同じ物に2つの名前が付くと、読む側は毎回どちらが
正かを考えることになる。参加者のpropsでは宣言元がどの役に就くかが静的に決まらないので偽。
可逆な寄与(modify、8.3節)を押す場所。同時に2つの操作へ就きうる役へは押せない——寄与は
相手の上で合計され、読んだ側は誰の寄与かを見分けられないので、混ざると戻せなくなる。
非公開shared複数の操作に同時に就きうる役(instrument・patient)を、この場所が拒む理由。拒まないならundefined。
拒むのは可逆な寄与を押す場所だけ(8.3節)。
相手が1つに定まらなくてよい場所(passivesの対象。付いている子ごとに登録を配る、8.1節)。
働きかけに使われる物が運ばれてくる場所(dragのinteractions 12節・put_inのduration 7.10節)。
プロパティ名を伴わず、オブジェクトそのものを指す場所。プロパティ名で祖先を探すancestorが、 ここでは解決先を持たなくなる。
宣言元の個体が居ない場所(レシピの解放条件13.2節・crafting_conditions 13.4節)。居ない理由は
場所ごとに違うので、13.2・13.4節が各々で述べる。
selfを外すと、それだけを指していたpatientも道連れで外れる——selfIsPatientな場所(acting)
ではpatientに独立した名前が無く、selfの言い換えでしかないため(11.5節)。
amongが選んだ相手を指せる場所(10.3節)。amongを書いた候補の重みと効果だけがこれになる。
rootがこの場所で解決先を持たない理由(この場所に何が無いか)。持つならundefined。 呼び出し側は、どこの宣言かを添えてロード時エラーにする。
宣言が置かれた場所が、参照の解決に何を用意できるか(GameElementDefinition.md 14.1節。操作の3役に ついては同11.5節「役を書ける場所」)。
ロード時に弾く根拠と、実行時に組む
ReferenceContextは同じ1つの事実。 agentが居ない場所で agentを指せてしまうと、書けたのに実行時は必ず空振りする。だから場所ごとに許すrootを数え上げるのでは なく、場所は自分が何を持つかだけを宣言し、rootの側が何を要るかを言う。両者の食い違いは、 一覧を書き写す代わりに導出で消える。下のstaticは11.5節の表の行と1対1ではない。 持つものが同じ場所は同じstaticを使う——
dragとput_inはacting.withInstrumentを、on_max/on_minとresists(7.13節)はdeclarationを共有する。 表の行ごとにstaticを立てると、数え上げをこちら側で作り直すことになる。