Avatar
omochimetaru 4/27/2017 3:27 AM
@tarunon LLVMIRではジェネリックな関数の引数は、 (x, wt, xt) な 3つの引数に展開されてて x: Catなどの具体的な型の値へのポインタ wt: xとセットで使える、Protocolのメソッド定義に準拠したwitness-tableへのポインタ xt: xの元々の型 Cat の 型の型へのポインタ で呼び出されるようになってる。 で、wtからメソッドを引っ張ってくると、 引っ張ってきた関数ポインタは、(x, xt) を受け取るようになっていて、 その関数の内部で、 xに対して Cat に定義されてた本物のメソッド呼び出しがされる。