mirror of
https://github.com/pjh456/OxideJS.git
synced 2026-10-26 11:41:13 +08:00
types/kernel/vm/builtins: JsString UTF-16 载荷层(FlatU16 变体 + 单元入口)——原 UTF-8 载荷只存 well-formed 串、孤立 surrogate lossy 转 U+FFFD 回写,FromCodePoint/属性转义与字符串面码点语义皆破;现载荷直存 [u64;3](Flat well-formed / FlatU16 单元序列 / Cons 拼接),utf16_len 独立 32 位字,32B 布局锚保持;from_units 智能路由(含孤立→FlatU16),as_str 仅限 Flat,units/units_borrowed 单元借用,as_lossy_str 宽容读;string_forge 编解码 surrogate 感知(孤立 surrogate 逃逸 hex4 编码、解码展开 astral 代理对、string_ptr 由单元物化);VmHost 单元物化/分配/查询入口 + runtime_api 单元 API;字符串内置全法单元化(charAt/slice/substr/split/replace/search/match/matchAll 单元定位;空模式边界:search→0、match→[""]、replace 插 0 位、matchAll 游标耗尽守卫;接收者 ToString 错误原样传播);正则内置单元化(exec/test/search/symbol_* 单元文本,替换串 \u{...} 与孤立 surrogate 文本处理,lastIndex 与 matchAll 游标单元化);字符串迭代器码点化(高代理+后续低代理成对产出,astral 值回真实码点);String(Symbol) 抛 TypeError;回归钉更新五处(charAt/split/slice/substr 单元精确语义 + dispose 钉改 TypeError 断言);四 crate 全绿(oxide_vm 98 套件 2403 测)+ clippy/fmt 零新增
This commit is contained in:
@@ -44,12 +44,13 @@ impl Hash for SetKey {
|
||||
let bits = if d == 0.0 { 0.0f64.to_bits() } else { JsValue::float(d).to_bits() };
|
||||
bits.hash(state);
|
||||
}
|
||||
// String:内容字节(rope 经 `as_str` 惰性扁平化,幂等)。
|
||||
// String:单元序列(rope 经扁平化缓存,幂等;单元口径与
|
||||
// same_value_zero 的内容比较同域,同值同哈希)。
|
||||
JsType::String => {
|
||||
1u8.hash(state);
|
||||
// SAFETY: 串指针在 native 调用期间存活(session 串不在调用中途释放),
|
||||
// 借出在本哈希调用内即时消费。
|
||||
unsafe { (*v.as_string_ptr()).as_str().as_bytes().hash(state) };
|
||||
unsafe { (*v.as_string_ptr()).units().as_ref().hash(state) };
|
||||
}
|
||||
// BigInt:`to_bytes_le` 规范形(零号统一 NoZero,同值同字节)。
|
||||
JsType::BigInt => {
|
||||
|
||||
Reference in New Issue
Block a user