pub struct Obj {
pub holes: Option<Box<Vec<bool>>>,
pub gc_slot: u32,
pub props: PropMap<Value>,
pub accessors: LazyPropMap<Accessor>,
pub attrs: LazyPropMap<PropertyAttributes>,
pub proto: Option<ObjRef>,
pub kind: ObjKind,
pub frozen: bool,
pub sealed: bool,
pub non_extensible: bool,
pub null_proto: bool,
}Expand description
ヒープオブジェクト本体。名前付きプロパティ + プロトタイプ + 種別。
Fields§
§holes: Option<Box<Vec<bool>>>配列の穴(Array(n) 等で作られ、まだ書かれていない要素)の印。
印があり、かつ値が undefined の要素だけを穴とみなす(書き込めば自然に穴でなくなる)。
添字をずらす操作(shift/unshift/splice/sort/reverse)では捨てる。
【2026-10-19】YouTube の kevlar_base が同梱する D3 の配色表
Array(3).concat("…").map(DE) で、穴の 3 要素にも DE(undefined) を呼んで落ちていた。
gc_slot: u32循環ゴミ回収(cycle_gc)の台帳の番号(未登録は NO_GC_SLOT)。
props: PropMap<Value>§accessors: LazyPropMap<Accessor>Object.defineProperty で登録された getter/setter。
attrs: LazyPropMap<PropertyAttributes>§proto: Option<ObjRef>§kind: ObjKind§frozen: boolObject.freeze() 済みか。真なら set_property/delete によるプロパティの
追加・変更・削除を無視する(非 strict モード相当の黙殺。Object.isFrozen() が読む)。
sealed: boolObject.seal() 済みか。真なら新規プロパティの追加・既存プロパティの削除を無視する
(既存プロパティの値の変更は許可。frozen はこれも自動的に含意する)。
non_extensible: boolObject.preventExtensions() 済みか。真なら新規プロパティの追加のみを禁止する
(削除・既存値の変更は許可。sealed/frozen はこれも自動的に含意する)。
null_proto: boolObject.create(null)/Object.groupBy()等、仕様上[[Prototype]]が
nullと明示されたオブジェクトか。proto: Noneだけでは「明示的に
nullプロトタイプ」なのか「単に通常オブジェクトでprotoチェーンが
尽きた」なのかをget_propertyの共通メソッドフォールバック
(interp/properties.rsのobject_get呼び出し)が区別できず、
Object.create(null).hasOwnProperty等がフォールバック経由で
誤って動いてしまうバグがあった(2026-07-18 発見・実装)。