feat: RegExp.prototype 实现 Symbol.match/replace/search/split/matchAll

This commit is contained in:
爱特每羊队
2026-08-08 22:33:32 +08:00
parent 651b368528
commit eefdfc0d2c
8 changed files with 322 additions and 13 deletions
+8
View File
@@ -238,6 +238,7 @@ pub struct BuiltinWorld {
pub sym_iterator: P<JsObject>,
pub sym_to_primitive: P<JsObject>,
pub sym_has_instance: P<JsObject>,
pub sym_match_all: P<JsObject>,
pub stub_objects: Vec<P<JsObject>>,
}
@@ -570,6 +571,7 @@ impl BuiltinWorld {
BuiltinId::SymIterator => &self.sym_iterator,
BuiltinId::SymToPrimitive => &self.sym_to_primitive,
BuiltinId::SymHasInstance => &self.sym_has_instance,
BuiltinId::SymMatchAll => &self.sym_match_all,
}
}
@@ -609,6 +611,7 @@ impl BuiltinWorld {
let sym_iterator = P::new(JsObject::new_empty(EMPTY_SHAPE_ID, JsValue::null()));
let sym_to_primitive = P::new(JsObject::new_empty(EMPTY_SHAPE_ID, JsValue::null()));
let sym_has_instance = P::new(JsObject::new_empty(EMPTY_SHAPE_ID, JsValue::null()));
let sym_match_all = P::new(JsObject::new_empty(EMPTY_SHAPE_ID, JsValue::null()));
let stub_objects = Vec::new();
let world = Self {
@@ -678,6 +681,7 @@ impl BuiltinWorld {
sym_iterator,
sym_to_primitive,
sym_has_instance,
sym_match_all,
stub_objects,
};
wire_builtin_world_links(&world);
@@ -749,6 +753,7 @@ impl BuiltinWorld {
sym_iterator,
sym_to_primitive,
sym_has_instance,
sym_match_all,
) = if dirty.symbol_family {
let (symbol_proto, symbol_constructor) = make_named_pair(string_forge, shape_forge, labels, "Symbol");
(
@@ -761,6 +766,7 @@ impl BuiltinWorld {
P::new(JsObject::new_empty(EMPTY_SHAPE_ID, JsValue::null())),
P::new(JsObject::new_empty(EMPTY_SHAPE_ID, JsValue::null())),
P::new(JsObject::new_empty(EMPTY_SHAPE_ID, JsValue::null())),
P::new(JsObject::new_empty(EMPTY_SHAPE_ID, JsValue::null())),
)
} else {
(
@@ -773,6 +779,7 @@ impl BuiltinWorld {
current.sym_iterator.clone(),
current.sym_to_primitive.clone(),
current.sym_has_instance.clone(),
current.sym_match_all.clone(),
)
};
@@ -914,6 +921,7 @@ impl BuiltinWorld {
sym_iterator,
sym_to_primitive,
sym_has_instance,
sym_match_all,
stub_objects,
};
wire_builtin_world_links(&world);