mirror of
https://github.com/pjh456/OxideJS.git
synced 2026-10-26 11:41:13 +08:00
fix: sloppy 未声明写隐式全局创建 + strict ReferenceError——DEFINE_GLOBAL_PROP_C 0x98
This commit is contained in:
@@ -740,6 +740,7 @@ mod tests {
|
||||
assert_group(&[OpCode::NEW_OBJECT, OpCode::NEW_ARRAY], Some(1), &[], true);
|
||||
// define 语义属性写入 / arguments / rest
|
||||
assert_group(&[OpCode::DEFINE_PROP, OpCode::DEFINE_GLOBAL_PROP], None, &[1, 2, 3], false);
|
||||
assert_contract(OpCode::DEFINE_GLOBAL_PROP_C, None, &[2], false);
|
||||
assert_contract(OpCode::DEFINE_PROP_ATTRS, None, &[1, 2, 3], false);
|
||||
assert_contract(OpCode::DEFINE_ACCESSOR_ATTRS, None, &[1, 2, 3], false);
|
||||
assert_group(&[OpCode::CREATE_ARGUMENTS, OpCode::CREATE_REST_ARRAY], Some(1), &[], false);
|
||||
|
||||
@@ -229,6 +229,13 @@ impl Inst {
|
||||
Self::new(OpCode::DEFINE_GLOBAL_PROP, target, value, key)
|
||||
}
|
||||
|
||||
/// 定义隐式全局数据属性:ext = [key_idx](键常量池下标),value 放 a 槽。
|
||||
/// 全局对象由 VM 运行期从 session 解析(不依赖 this 寄存器),属性可写/可枚举/
|
||||
/// 可配置(未声明标识符写与 eval 脚本 var/函数声明的属性描述符)。
|
||||
pub fn define_global_prop_c(value: Operand, key_idx: u16) -> Self {
|
||||
Self::with_ext(OpCode::DEFINE_GLOBAL_PROP_C, Operand::None, value, Operand::None, &[key_idx as u32])
|
||||
}
|
||||
|
||||
/// 静态删除属性:obj 同时放 rd/a 槽,const_idx 为属性名常量下标。
|
||||
pub fn delete_prop_static(obj: Operand, const_idx: u32) -> Self {
|
||||
Self::with_ext(OpCode::DELETE_PROP_STATIC, obj, obj, Operand::None, &[const_idx])
|
||||
|
||||
Reference in New Issue
Block a user