暗黙の引数がなぜか動作
ラムダ式の引数をいちいち書くのがじゃんくさいから$1とかで引数にアクセスできるようにしてみた
ひさびさにレキサをちょっと変更して名前解決の時に$1をArgumentsにぶちこむようなコードだけ書いたところ・・・なぜか完成した
なんでや、ILでは引数1個の関数をなんで呼び出し側が引数3個でうまく動くねん!
この時ILはこうなっていた
なるほど引数が違う関数ポインタをInvokeしてもおちないんだ・・・ええんか、これ?
.NETの呼び出し規約は呼び出し側が引数をpopするのか?よく分かんないや
f(=> print($1)) ↓ newobj instance void 'Bind_#5,0'::.ctor() stloc.0 ldloc.0 ldftn void 'implicit_param2.#5,0'(int32) stfld native int 'Bind_#5,0'::f ldloc.0 ldftn instance void 'Bind_#5,0'::Invoke(int32) newobj instance void class [mscorlib]System.Action`1<int32>::.ctor(object, native int) call void implicit_param2.f(class [mscorlib]System.Action`3<int32,string,int32>)