mirror of
https://github.com/pjh456/OxideJS.git
synced 2026-10-24 02:31:13 +08:00
feat: RegExp.prototype 实现 Symbol.match/replace/search/split/matchAll
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -225,7 +225,7 @@ pub struct KernelSession {
|
||||
/// 维护注意:每个新增的 `BuiltinWorld` 对象字段都必须加到这里以及
|
||||
/// `KernelSession::dirty_since_snapshot()`,以便选择性重置重建正确的
|
||||
/// builtin 家族。
|
||||
pub const NUM_BUILTINS: usize = 66;
|
||||
pub const NUM_BUILTINS: usize = 67;
|
||||
|
||||
/// 内置对象枚举 id,与 `BuiltinWorld` 中的存储槽一一对应。
|
||||
///
|
||||
@@ -300,6 +300,7 @@ pub enum BuiltinId {
|
||||
SymIterator = 63,
|
||||
SymToPrimitive = 64,
|
||||
SymHasInstance = 65,
|
||||
SymMatchAll = 66,
|
||||
}
|
||||
|
||||
impl BuiltinId {
|
||||
@@ -371,6 +372,7 @@ impl BuiltinId {
|
||||
BuiltinId::SymIterator,
|
||||
BuiltinId::SymToPrimitive,
|
||||
BuiltinId::SymHasInstance,
|
||||
BuiltinId::SymMatchAll,
|
||||
];
|
||||
}
|
||||
|
||||
@@ -554,7 +556,8 @@ impl KernelSession {
|
||||
|| gen(BuiltinId::SymSplit) != snap(BuiltinId::SymSplit)
|
||||
|| gen(BuiltinId::SymIterator) != snap(BuiltinId::SymIterator)
|
||||
|| gen(BuiltinId::SymToPrimitive) != snap(BuiltinId::SymToPrimitive)
|
||||
|| gen(BuiltinId::SymHasInstance) != snap(BuiltinId::SymHasInstance),
|
||||
|| gen(BuiltinId::SymHasInstance) != snap(BuiltinId::SymHasInstance)
|
||||
|| gen(BuiltinId::SymMatchAll) != snap(BuiltinId::SymMatchAll),
|
||||
math: gen(BuiltinId::MathObject) != snap(BuiltinId::MathObject),
|
||||
json: gen(BuiltinId::JsonObject) != snap(BuiltinId::JsonObject),
|
||||
date: gen(BuiltinId::DateConstructor) != snap(BuiltinId::DateConstructor)
|
||||
|
||||
Reference in New Issue
Block a user