docs: bigint 注释黑话清扫

This commit is contained in:
2026-09-16 19:01:15 +00:00
parent 026fb7e2c9
commit c257d8a5c1
+4 -4
View File
@@ -2,7 +2,7 @@ use num_bigint::BigInt;
use oxide_runtime_api::{to_primitive, NativeResult, ToPrimitiveHint, VmHost}; use oxide_runtime_api::{to_primitive, NativeResult, ToPrimitiveHint, VmHost};
use oxide_types::value::JsValue; use oxide_types::value::JsValue;
/// JS `BigInt(value)` 构造逻辑(ES2020 §20.2.1.1): /// JS `BigInt(value)` 构造逻辑:
/// - `new BigInt()` 抛 TypeError(BigInt 不可 new) /// - `new BigInt()` 抛 TypeError(BigInt 不可 new)
/// - 无参 → `0n` /// - 无参 → `0n`
/// - 其余参数先 ToPrimitive(number),Number 走 NumberToBigInt,其余走 ToBigInt。 /// - 其余参数先 ToPrimitive(number),Number 走 NumberToBigInt,其余走 ToBigInt。
@@ -20,7 +20,7 @@ pub fn bigint_constructor<H: VmHost>(vm: &mut H, args: &[u8]) -> NativeResult {
} }
let val = vm.reg(args[1]); let val = vm.reg(args[1]);
// ToPrimitive(value, number):对象先出盒,用户 @@toPrimitive/valueOf/toString // ToPrimitive(value, number):对象先出盒,用户 @@toPrimitive/valueOf/toString
// 抛出的异常要原样传播(只触发一次,见 constructor-coercion 测试)。 // 抛出的异常原样传播,且装箱转换的异常只触发一次。
let prim = match to_primitive(val, ToPrimitiveHint::Number, vm) { let prim = match to_primitive(val, ToPrimitiveHint::Number, vm) {
Ok(p) => p, Ok(p) => p,
Err(_) => { Err(_) => {
@@ -201,7 +201,7 @@ fn coerce_number_or_throw<H: VmHost>(vm: &mut H, value: JsValue) -> Result<f64,
Ok(oxide_runtime_api::to_number(prim)) Ok(oxide_runtime_api::to_number(prim))
} }
/// ToIndex(§7.1.17):ToIntegerOrInfinity 后必须为有限且 `[0, 2^53-1]` 内的整数。 /// ToIndex:ToIntegerOrInfinity 后必须为有限且 `[0, 2^53-1]` 内的整数。
fn to_index<H: VmHost>(vm: &mut H, args: &[u8]) -> Result<usize, JsValue> { fn to_index<H: VmHost>(vm: &mut H, args: &[u8]) -> Result<usize, JsValue> {
// ToIndex 作用在第一个参数(bits)上;缺省为 undefined。 // ToIndex 作用在第一个参数(bits)上;缺省为 undefined。
let value = if args.len() > 1 { vm.reg(args[1]) } else { JsValue::undefined() }; let value = if args.len() > 1 { vm.reg(args[1]) } else { JsValue::undefined() };
@@ -232,7 +232,7 @@ fn bigint_arg<H: VmHost>(vm: &mut H, args: &[u8]) -> JsValue {
} }
} }
/// ToBigInt 抽象操作(§7.1.14):BigInt 原样;String → StringToBigInt; /// ToBigInt 抽象操作:BigInt 原样;String → StringToBigInt;
/// Boolean → 0/1;Number/Symbol/undefined/null → TypeError;对象先 ToPrimitive 再递归。 /// Boolean → 0/1;Number/Symbol/undefined/null → TypeError;对象先 ToPrimitive 再递归。
/// ///
/// 语义主体在 `oxide_runtime_api::to_bigint_full`,此处只把 String 错误恢复为 /// 语义主体在 `oxide_runtime_api::to_bigint_full`,此处只把 String 错误恢复为