php
PHPの既存システムをHHVMに載せ、その後サービスを維持しつつHackに変え、静的型付けやモダンな書き方により、堅牢なものに変えていくことを目的に試験環境を構築しハマりつつも大体動いたレベルの所まで行ったのでここに残しておく。 phpconには行ってない…
前回話しに上げた変更の property_existsの内部でissetFieldを使わせない getFieldでnullの時に次の候補(staticとか__get)とかに行かせずにnullを返す と言うものでまず最初の爆死がなくなり、次はnullオブジェクトに対してisTrustedTagを呼ぼうとして死、と…
ソースを追ってみたところ、property_existsの方はClassesModuleと言うクラスにあり、内部的にはissetFieldと言う関数を参照していた。 名前から察する通りisset系なのでnullの場合はfalseになるようになっていた。 修正するとしたらissetFieldではなくhasFi…
しょっぱなから躓いた。ここにある理由の通り。 https://gist.github.com/4086394 property_existsはnullでもプロパティーが存在していればtrueなのにQuercusはそうなっていない。 Smartは__getや__callを結構駆使してるのでしょっぱなでコケる。 しょうがな…