Commit Graph

38 Commits

Author SHA1 Message Date
pjh123 1f2a020585 feat: Iterator helpers 基建——Symbol.dispose 注册与 %IteratorHelperPrototype% 2026-08-16 14:44:47 +08:00
pjh123 1a2d8682ae fix: builtins 对象分配统一走 alloc_object 登记消除高频路径泄漏 2026-08-16 03:36:02 +08:00
pjh123 07d6c83c6b fix: 错误对象属性枚举性、toString 标签与构造器调用语义
- message/name 属性改非枚举(CreateNonEnumerableDataPropertyOrThrow),
  Object.keys/for-in/JSON.stringify 不再泄漏错误信息
- 新增 Error 家族对象标签,Object.prototype.toString 输出 [object Error],
  含子类型与用户子类(沿原型链判定)
- Error 家族构造器补 length=1,函数调用忽略 this 一律新建对象
- JSON.stringify 序列化仅含可枚举自身属性(规范 EnumerableOwnPropertyNames)
2026-08-15 21:30:28 +08:00
pjh123 b706b8c506 feat: Object keys 系列合并数组元素区,assign 按规范过滤枚举/触发 getter
walk_own_keys 返回值语义改为绝对存储索引:数组对象先枚举元素区
(跳过 hole),命名属性偏移到元素区之后;shape 槽位计数含 symbol 键
与物理存储对齐(修 symbol 键错位读值)。delete_own_property /
REST / SPREAD 四连锁点同步去偏移,REST/SPREAD 删除独立元素区循环
(由 walk_own_keys 统一覆盖,防重复键)。

Object.assign 增补:源只取可枚举自身属性;取值改 ordinary_get
(accessor 触发 getter,receiver=源);提交写 receiver 修正为 target
(目标同名 setter 的 this 指向 target)。
2026-08-15 21:04:24 +08:00
pjh123 970c2e988e feat: freeze/seal/preventExtensions 写路径拦截(逐属性 meta + extensible 检查)
freeze/seal 逐属性改写 meta(数据属性 writable/configurable=false,
访问器 configurable=false,含数组元素区),使 has_prop_meta() 恒 true,
IC 直写路径自动失效;ordinary_set/create_named_prop_fast/
set_or_create_prop_value/define_* 增补 extensible/frozen 检查,
SET_ELEM 直写入口回落 ordinary_set 或拒绝新元素。

引擎未实现 strict 标志,赋值失败统一 raise_type_error(sloppy 静默留待后续)。
2026-08-15 20:55:20 +08:00
pjh123 b82fe9af32 fix: 对象建键入口统一走 property_key_si 规范化,数字键不再分裂
Object.fromEntries/JSON.parse/new Map 对象 entry/rest 解构静态 excluded
四处直接 intern 动态字符串键绕过整数键区间映射,规范数字键分裂为
字符串键与整数键两个键。统一经 string_key_si 规范化:规范数字串映射
整数键,其余 intern 字符串键,与 property_key_si 字符串分支口径一致。
make_int_key 增加 debug 断言兜底索引越界。
2026-08-14 22:37:46 +08:00
pjh123 2c62830a1d perf: 数组整数键走独立 si 区间免字符串往返 2026-08-13 17:47:55 +08:00
爱特每羊队 cc78e6b28f fix: ArraySetLength 收缩遇不可配置元素静默失败、ToPrimitive 异常透传与既有属性描述符缺省回填
- arr.length 收缩时若 [newLen, oldLen) 内存在不可配置元素,整个收缩失败且不做任何修改(sloppy 赋值静默 no-op),不再抛错或截断
- length 赋值 ToPrimitive(valueOf/toString)抛错时按主 dispatch 约定直接返回,避免二次抛 RangeError 覆盖原异常(S15.4.5.1_A1.3_T2)
- Object.defineProperty/defineProperties/create 对已有属性省略描述符字段时保持现有属性值(无显式 meta 按 DEFAULT_DATA 回填),修复 toReversed/toSorted/toSpliced/with length-decreased-while-iterating
2026-08-12 13:07:32 +08:00
爱特每羊队 3e61b573db feat: 新增 Symbol.species well-known symbol 绑定(Symbol.species 解析/键槽/内建对象) 2026-08-12 12:50:53 +08:00
爱特每羊队 c4fda0f883 engine: ToPropertyKey via ToPrimitive, Symbol keys/description, catchable conversion errors 2026-08-12 09:59:56 +08:00
爱特每羊队 ca293a57e9 fix: Object.prototype.toString tags for Math/JSON/Arguments 2026-08-12 02:29:40 +08:00
爱特每羊队 5ec0dc2b7d feat: implement Temporal Instant zoned conversion 2026-08-11 20:54:25 +08:00
爱特每羊队 7e3d7b43b5 feat: 实现最小 BigInt 子集(字面量/算术/比较/构造器,Temporal 前置) 2026-08-10 23:02:31 +08:00
爱特每羊队 e8506e6f29 fix: Object 内置方法 ToObject 装箱(原始值不再误抛 TypeError) 2026-08-10 20:08:40 +08:00
爱特每羊队 f284f74cb1 perf: 数组元素独立存储区,push 改为摊销 O(1) 尾插 2026-08-10 16:01:09 +08:00
爱特每羊队 012a8e5110 feat: for-await-of + Symbol.asyncIterator + AsyncFromSyncIterator 2026-08-10 03:21:37 +08:00
爱特每羊队 7c2e9ec1ff fix: symbol 作属性键独立编码,不再塌缩为空串 2026-08-09 16:09:49 +08:00
爱特每羊队 6d7ad03417 feat: TypedArray 第一批解锁(%TypedArray% 构造器、原型访问器、of/from、bind 绑参、harness) 2026-08-09 12:26:31 +08:00
爱特每羊队 915dedb151 feat: class 私有成员语义(字段/方法/访问器 + brand 检查 + 契约修复) 2026-08-09 11:08:36 +08:00
爱特每羊队 afffcff46e feat: Object.create/defineProperties 完整描述符管线(复用 ToPropertyDescriptor) 2026-08-08 20:59:47 +08:00
爱特每羊队 6c7b10d6c5 feat: 对象字面量 spread({...obj} 展开可枚举自有属性) 2026-08-08 11:24:09 +08:00
爱特每羊队 ea86a2c0ac feat: 数组字面量 spread([...a] 展开为 for-of 追加) 2026-08-08 09:29:37 +08:00
爱特每羊队 ce86fcfb73 fix: delete 真正删除属性(shape 链重建 + 数组元素 hole 标记)
字节码 delete 原先只清值为 undefined,属性残留在 shape 链,hasOwnProperty/
keys/枚举仍可见。统一走共享 delete_own_property(与 Reflect.deleteProperty
一致):
- 命名属性经 shape 链重建移除,数组重建前保存并恢复元素区
- 数组下标元素标记为 hole(PropMetaEntry.hole),length 不变,
  存在性检查(resolve_property/get_own_property_slot/ordinary_get/for-in)
  判 hole,重赋值自动清除标记
- 不可配置属性统一返回 false(sloppy 语义,strict 抛错留待 emit 追踪严格模式)
- set_or_create_prop_value 数组下标键路由元素区,修复 delete 后重赋值误入
  shape 链

test262 Object +212 PASS/-102 FAIL,Array +149 PASS/-60 FAIL,无回归。
2026-08-08 02:25:13 +08:00
爱特每羊队 e91d8ecaf2 fix: defineProperty 描述符字段按 ToPropertyDescriptor 语义解析(原型链 + accessor getter) 2026-08-08 01:39:12 +08:00
爱特每羊队 3b13b111c4 fix: defineProperty 内部错误不触发 unwind + enumerable/configurable 缺省回填 2026-08-08 01:18:21 +08:00
爱特每羊队 f0f45c4ae0 fix: Object.prototype.toString 类型标签([object Array] 等)+ array_push 维护数组元素数 2026-08-07 22:06:09 +08:00
爱特每羊队 ca619d7c06 fix(object): Object() 对原始值创建 boxed 对象 + String 方法 this 完整转换 2026-08-07 19:52:35 +08:00
爱特每羊队 328b8a3ddc docs: 补充注释与格式化 2026-08-06 23:10:27 +08:00
爱特每羊队 f461235f04 docs: 添加 Rustdoc 注释 2026-08-05 21:46:47 +08:00
爱特每羊队 09a9d3dfd2 style: 自动格式化 2026-06-27 17:49:36 +08:00
爱特每羊队 19bc8e64a4 fix: defineProperty 纯属性描述符按 ES 规范默认创建 value=undefined,不再错误抛 TypeError 2026-06-27 17:23:50 +08:00
爱特每羊队 6e74881cde fix: delete 增加 configurable 检查,defineProperty 修复部分更新值覆盖,枚举排序增加整数索引优先和非枚举过滤 2026-06-27 16:34:48 +08:00
爱特每羊队 b0a3b041eb feat: 完成 Object.entries/values/is/getOwnPropertyDescriptor/hasOwnProperty/propertyIsEnumerable 修复 2026-06-27 15:24:16 +08:00
爱特每羊队 e02d196891 feat: 修复 Object.defineProperties/fromEntries 实现,getPrototypeOf/hasOwn/isExtensible 参数校验 2026-06-27 15:17:37 +08:00
爱特每羊队 f31d45dc68 feat: JsObject 新增 frozen/sealed 标志位,修复 freeze/seal/preventExtensions/isFrozen/isSealed/isExtensible 六个完整性方法 2026-06-27 15:12:44 +08:00
爱特每羊队 5f8123f1f3 feat: 新增 to_integer_or_infinity/to_length/same_value_zero 三个 ES 抽象操作辅助函数,修复 objects_keys/create/defineProperty/assign/getOwnPropertyNames 五个方法的 TypeError 处理 2026-06-27 14:42:16 +08:00
爱特每羊队 fe2042864c feat: 实现 Object/Array 的 toString 与 valueOf 2026-06-27 13:22:45 +08:00
爱特每羊队 2f5d91bd48 feat: 提取 oxide_builtins 独立 crate,泛型化 <H: VmHost> 2026-06-25 22:38:23 +08:00