From bb0178a6729037879c7b3b8b40355baf5909bf35 Mon Sep 17 00:00:00 2001 From: pjh456 <147148383@qq.com> Date: Fri, 25 Sep 2026 14:34:02 +0000 Subject: [PATCH] =?UTF-8?q?feat:=20String=20=E5=8E=9F=E5=9E=8B=E8=A1=A5=20?= =?UTF-8?q?trimLeft/trimRight=20=E5=88=AB=E5=90=8D=E7=BB=91=E5=AE=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- crates/oxide_kernel/src/builtin/bind.rs | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/crates/oxide_kernel/src/builtin/bind.rs b/crates/oxide_kernel/src/builtin/bind.rs index dc565a22..0102171d 100644 --- a/crates/oxide_kernel/src/builtin/bind.rs +++ b/crates/oxide_kernel/src/builtin/bind.rs @@ -295,6 +295,20 @@ impl BuiltinWorld { ("sub", methods.sub, 0), ("sup", methods.sup, 0), ); + // trimLeft/trimRight 是 trimStart/trimEnd 的别名:规范上必须是同一函数 + // 对象(name 分别为 "trimStart"/"trimEnd"),不得新建 wrapper。 + for (source, alias) in [("trimStart", "trimLeft"), ("trimEnd", "trimRight")] { + let src_si = string_forge.intern(source).0; + if let Some(pos) = shape_forge.lookup_position(proto.shape_id(), src_si) { + let value = proto.get_prop_at(pos); + let alias_si = string_forge.intern(alias).0; + let new_shape = shape_forge.make_shape(proto.shape_id(), alias_si); + proto.set_shape_id(new_shape); + let alias_pos = proto.push_prop(value); + proto.set_data_meta(alias_pos, PropAttributes::new(true, false, true)); + proto.bump_generation(); + } + } } /// 把 Function 原型方法安装到 Function.prototype 上。