実行時に確定する処理

メソッド呼び出し dict.fromkeys(...) が、どのオブジェクトに対するものかは、実行時に確定します。

    object ret = Ops.Call(cls);
...
return ret;

ここでは、どのようにしてリターン値 ret を生成するか(how)は知らなくても、それを使ってなにをしたいか(what)を理解できれば、十分です。実行時に確定した任意のクラス cls のインスタンスが欲しいときに、Ops.Call を利用するだけです。
つまり、Ops.Call(cls) は、cls() と同じことなので、式 dict() が評価されたときの処理をここで実現しているのです。すると、ret は、dict 型のインスタンスになります。

    if (ret.GetType() == typeof(Dict)) {
Dict dr = ret as Dict; // 組み込み型 dict
for (int i = 0; i < n; i++) {
dr[xr[i] ] = value;
}
} else {
// slow path, user defined dict
for (int i = 0; i < n; i++) {
Ops.SetIndex(ret, xr[i], value);
}
}

if に続く条件式 ret.GetType() == typeof(Dict) が成立するなら、組み込み型 dict に対するメソッド呼び出し dict.fromkeys(...) と見なします。生成した辞書 dr に、キー xr[i] と値 value を追加します。if に続く条件式が成立しないなら、生成した辞書 ret に、キー xr[i] と値 value を追加する処理を、Ops.SetIndex に委ねます。その詳細(how)については、関連記事で紹介します。


2/3