Skip to main contentModule console_math_json
Source - RNG_SEED 🔒
- console_log 🔒
- display_inner_with 🔒
- display_value 🔒
- console 表示用(文字列はクォート無し、オブジェクトは簡易 JSON 風)。
structuredClone/JSON.stringify にあったのと同じ「循環参照で無限再帰」バグが
ここにもあった。console.log(a)(a.self = a)は特に日常的にありうる操作のため、
この no_std 環境でのクラッシュ/ハングとしては最も踏みやすいケースだった。祖先追跡を
追加し、循環を検出したら(ブラウザ devtools と同じ慣習で)[Circular] と表示する。 - display_value_inner 🔒
- internalize_json_property 🔒
- json_is_raw_json 🔒
JSON.isRawJSON(value)(ES2025)。json_raw_jsonが作る形状
(frozenかつproto: Noneかつ own プロパティがrawJSON(文字列)1個のみ)
と一致するかで判定する簡略実装。- json_parse 🔒
JSON.parse(text, reviver)。以前は reviver(各キーをボトムアップで巡り値を
差し替える/undefined を返せば削除する変換関数)を完全に無視していた。- json_quote 🔒
- json_raw_json 🔒
JSON.rawJSON(text)(ES2025)が丸ごと未対応だった。数値精度を保ったまま
(例: Numberの安全整数範囲を超える巨大な整数)JSON文字列へ埋め込むための
マーカーオブジェクトを作る。内部スロットが無い簡略実装のため、frozen+
proto: None+rawJSONという1個の own プロパティのみを持つ、という形状
そのものを「rawJSONオブジェクトである」印として扱う(JSON.isRawJSONも
同じ形状チェックで判定する)。2026-07-18 発見・実装。- json_stringify 🔒
JSON.stringify(value, replacer, space)。以前は space(インデント整形)と
replacer(キーのフィルタ用配列、または値を差し替える関数)の両方を完全に無視していた。- json_to_value 🔒
- math_abs 🔒
- math_ceil 🔒
- math_cos 🔒
- math_exp 🔒
- math_floor 🔒
- math_log 🔒
- math_max 🔒
- math_min 🔒
- math_pow 🔒
- math_random 🔒
- math_round 🔒
- math_sign 🔒
- math_sin 🔒
- math_sqrt 🔒
- math_trunc 🔒
- value_to_json_string 🔒
- Value を JSON 文字列へ(undefined/関数は省略)。
indent が空でなければ depth 段の
インデント付き整形出力にする(JSON.stringify(v, null, 2) 等)。key_filter が
Some なら(replacer が配列指定のとき)オブジェクトのキーをそれで絞り込む
(配列要素自体には適用しない。仕様どおり)。replacer_fn が Some なら各値を
replacer_fn(key, value)(this はプロパティの持ち主)で差し替えてから直列化する。 - value_to_json_string_inner 🔒
ancestors は現在の再帰パス上にある(まだ直列化を終えていない)オブジェクトの一覧
(循環参照検出用のスタック。同一オブジェクトへの「兄弟」参照は問題ない — 構造共有として
正しく複数回直列化される — が、自分自身が祖先に含まれていれば真の循環参照)。
以前はこの追跡が無く、循環参照を渡すと無限再帰に陥っていた(structuredClone に
あった既知のバグと同種。この no_std 環境ではクラッシュ/ハングになり得る)。仕様どおり
TypeError("Converting circular structure to JSON")を投げるようにした。