Avatar
norio_nomura 7/12/2017 7:33 AM
-O のやつがよくわからない・・・ selfを書き換える挙動が無くなっちゃってるように見える(見落としている
7:35 AM
呼び出されるときに %0 がアロケートされたメモリを差すポインタになってて、それをそのまま apply %1(%0) でクロージャへ渡してる。 // Factory.init(() -> A) -> A sil hidden @(extension in main):main.Factory.init (() -> A) -> A : $@convention(method) <Self where Self : Factory> (@owned @callee_owned () -> @out Self, @thick Self.Type) -> @out Self { // %0 // user: %4 // %1 // users: %4, %3 bb0(%0 : $*Self, %1 : $@callee_owned () -> @out Self, %2 : $@thick Self.Type): debug_value %1 : $@callee_owned () -> @out Self, let, name "f", argno 1, loc "<stdin>":3:12, scope 2 // id: %3 %4 = apply %1(%0) : $@callee_owned () -> @out Self, loc "<stdin>":4:18, scope 3 %5 = tuple (), scope 3 // user: %6 return %5 : $(), loc "<stdin>":5:5, scope 3 // id: %6 } // end sil function '(extension in main):main.Factory.init (() -> A) -> A' (edited)