デッドプール2

恋人を殺されやけになったデッドプールがコロッサスに回収されてX-MENに加入する
ミュータントの子供を虐待したからといって一般人を撃ち殺してしまったので、子供と一緒に刑務所へ入れられる
ケーブルが刑務所まで子供を狙ってきたので流れで守る
子供はジャガーノートと仲良くなって孤児院の院長を殺そうとするので、でっぷーとケーブルが組んで子供を止める
でっぷーが子供を守ったので子供はいい子になりケーブルの未来の家族は救われる


まさかジャガーノートおじさんが半ケツにされ、ケツに電源ケーブル差し込まれ水に落とされ感電するなんて

デッドストック

TV局の未整理のテープ確認に回された主人公が確認そっちのけでホラー系の取材に行く
主人公とディレクターだけで取材に行き、タイガーマスクは現場に行かないけどたまにおいしい所を持っていく
冒頭で1本テープ確認するだけで、あんまり確認をしている風はない
基本的にはキャーキャー言う系なのでホラー描写はわずかに写るだけだけど
まぁまぁツボは押さえてる感じ


人形とはいずってくるこっくりさんが良かった
あと、エロ宮司に簡単にこまされる天使もえと

ヴァンパイアの話と主人公の母親がX-MENに殺された話は面白くなかった
特にX-MEN関連なげーし

サプライズ

弟が遺産目当てで両親と兄弟を殺す殺し屋を雇う
家族で集まって食事中に矢が撃ち込まれる
パニックになって家から飛び出るとワイヤートラップでのどチョンパ
家の中に侵入していた犯人に父母がやられる
ヒロインが弟と殺し屋がグルだと気づき犯人をひとりひとりやっつけていく
弟はミキサー葬とか珍しい殺し方をされ、ヒロインの彼氏もグルだと分かりぶちのめす
ぶちのめす所を警察に見られ撃たれるが、警察はヒロインが仕掛けていたトラップでかちわられる


パニック物から、ヒロイン主役のスプラッターに変わる

暗黙の引数がなぜか動作

ラムダ式の引数をいちいち書くのがじゃんくさいから$1とかで引数にアクセスできるようにしてみた
ひさびさにレキサをちょっと変更して名前解決の時に$1をArgumentsにぶちこむようなコードだけ書いたところ・・・なぜか完成した
なんでや、ILでは引数1個の関数をなんで呼び出し側が引数3個でうまく動くねん!

f:id:zenu:20180609223217p:plain

この時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>)

ラムダ式の戻り値の型を型推論

ラムダ式の戻り値の型を作った側が毎回書くのはじゃんくさい
関数の引数に使った感じから型推論できるように対応してみた

型推論の途中で戻り値なし、またはIntってゆーのを [Void | Int] みたいに表して
関数からフィードバックを受けて最後にVoidが残ったら戻り値無しよって感じにしてみた

f:id:zenu:20180605002521p:plain

変数にバインドした時はちょっと無理
でも、よくわかんなけりゃ戻り値ありに固定してもいいかもしれない

# f1は戻り値あり
var f1 = => 1
var a = f1()
need_Int(a)

# f2も戻り値あり、いらないかもしれないけどあっても困らない
var f2 = => 2
f2()

タプルに対応 続

タプルの型定義をかけるようにしてみた
構文は[Int, String]にした
使う側はvar x = (1, "str")なのに型定義はカギカッコなのはちょっとどうかなと思ったけど
戻り値がIntとStringの関数で
sub f() (Int, String)が良いか
sub f() [Int, String]が良いか考えたら後者がいい
f:id:zenu:20180506012127p:plain
そろそろ一通りの機能が揃ってきたので自作コンパイラでアプリを作りたい
自作コンパイラで作るものと言ったら、もちろんセルフコンパイルできるコンパイラだろう
何の機能がたんねーかなー?

タプルに対応

タプルが使えるようになった
最初はvar x = [1, "str"]なんて文法がええかと思っていたけど
これやと配列と区別が付かないのでvar x = (1, "str")にした

タプルの要素へは数字のプロパティでアクセスする
なんか知らんけど、深夜のテンションでそう決めた
勢いでプロパティ名の変数名だけ数字が使えるようになっている
f:id:zenu:20180430053136p:plain
ホンマはprint(x[1])とかいう風に配列の添え字風にアクセスできたらええんやけど
これやと型解決ができへん

1要素のタプルは作れへん
いらんし