Skip to main content

resolve_intl_this

Function resolve_intl_this 

Source
fn resolve_intl_this(it: &Interp, this: Value, ctor_name: &str) -> ObjRef
Expand description

newを介さない裸呼び出し(Intl.NumberFormat()Intl系コンストラクタは 仕様上どちらの呼び出し形式でも動作可能でなければならない)を正しく扱う。 メンバ呼出(Intl.NumberFormat(...))のthisは「メンバ式のレシーバ」 (interp/calls.rseval_callのコメントどおり)、つまりIntl 名前空間オブジェクト自身になる。以前は「thisがオブジェクトなら そのまま使う」という判定だったため、newを省略するとIntlオブジェクト 自身に_intl_type/_localeを書き込んでしまい(Intl名前空間の汚染)、 かつIntlのproto連鎖には.format等が無いため常にundefinedになる バグだった。正しくはthisのprotoが既に対象コンストラクタの prototypeと一致する場合(new経由。construct_objectが設定済み) のみそのオブジェクトを再利用し、それ以外(裸呼び出し)はIntl.<name>. prototypeへ明示的に繋いだ新規オブジェクトを都度生成する。 2026-07-18 発見・実装。