code wiki / (root) / nx_json.nx

nx_json.nx

buildroot/runtime/nx_json.nx

11697 B267 linesdepth 5pulls 6 transitivereach 476 importersview sourcekind tooltopic json
docsdependenciesstructsconstsfunctions

about

nx_json.nx -- JSON tokenizer (RFC 8259 subset). Streaming token-stream API: caller drives nx_json_next which reports the next token kind + span within the input buffer. A second pass (or the caller's own state machine) builds the tree. Token kinds: NX_JSON_LBRACE { NX_JSON_RBRACE } NX_JSON_LBRACKET [ NX_JSON_RBRACKET ] NX_JSON_COMMA , NX_JSON_COLON : NX_JSON_STRING "..." (span includes quotes) NX_JSON_NUMBER -123.4e5 (span covers all digits + sign + exp) NX_JSON_TRUE true NX_JSON_FALSE false NX_JSON_NULL null NX_JSON_EOF end of input NX_JSON_ERROR malformed input String content escapes (\n, \t, \uXXXX) are NOT decoded by the tokenizer -- the span includes the raw bytes between the quotes. A separate nx_pct-style decoder can be added later. nx_safety_envelope: intended_use: "JSON decoder -- substrate-native parsing of structured data per cardinal feedback-no-pdfs- no-proprietary-binary-formats" sil_target: SIL2 (input parsing; malformed JSON must not crash callers) asil_target: QM dal_target: DAL C evidence: [RFC_8259_canonical_basis, no_FP, sealed_token_kind_enum, bounded_recursion_depth] hazard_register: [bug-tape-JSON-bomb-via-deep-nesting, bug-tape-billion-laughs-style-amplification, bug-tape-Unicode-escape-handling-bug]

dependencies 3 imports · 65 importers

nx_syscalls.nx nx_lex.nx nx_ascii.nx nx_json.nx nx_claude_harvest.nx nx_claude_harvest_requests_t144.nx nx_claude_harvest_usage_t76.nx nx_compare_openapi.nx nx_deploy_stage_emitter_gate_t188. nx_forge_evidence_t274.nx nx_game_page_affine_candidate_t361 nx_game_page_body_t138.nx nx_game_page_canonical_t135.nx nx_game_page_catwalk_lighting_cand

diagram shows first 10 each side; +0 more imports, +55 more importers in the complete lists below.

imports: nx_syscalls.nxnx_lex.nxnx_ascii.nx

imported by: nx_claude_harvest.nxnx_claude_harvest_requests_t144.nxnx_claude_harvest_usage_t76.nxnx_compare_openapi.nxnx_deploy_stage_emitter_gate_t188.nxnx_forge_evidence_t274.nxnx_game_page_affine_candidate_t361.nxnx_game_page_body_t138.nxnx_game_page_canonical_t135.nxnx_game_page_catwalk_lighting_candidate_t316.nxnx_game_page_eye_t138.nxnx_game_page_gait_candidate_t139.nxnx_game_page_garment_t132.nxnx_game_page_hair_attachment_candidate_t263.nxnx_game_page_hair_attachment_t283.nxnx_game_page_hair_guides_candidate_t263.nxnx_game_page_hair_t138.nxnx_game_page_host_candidate_t341.nxnx_game_page_imported_t262.nxnx_game_page_inspection_distance_t235.nxnx_game_page_inspection_t142.nxnx_game_page_integrated_t73.nxnx_game_page_length_diag_t140.nxnx_game_page_lit_candidate_t181.nxnx_game_page_material_body_t61.nxnx_game_page_material_candidate_t181.nxnx_game_page_material_compose_t55.nxnx_game_page_material_schema_candidate_t181.nxnx_game_page_metadata_candidate_t220.nxnx_game_page_mip_candidate_t241.nxnx_game_page_motion_candidate_t328.nxnx_game_page_motion_inventory_candidate_t330.nxnx_game_page_move_t72.nxnx_game_page_owned_candidate_t181.nxnx_game_page_pre_inspection_t142.nxnx_game_page_pre_toon_region_t143.nxnx_game_page_procedural_review_candidate_t333.nxnx_game_page_rig_comparison_t332.nxnx_game_page_rig_inspection_t230.nxnx_game_page_rig_observation_candidate_t331.nxnx_game_page_scene_light_candidate_t364.nxnx_game_page_shared_candidate_t340.nxnx_game_page_skin_t138.nxnx_game_page_static_candidate_t338.nxnx_game_page_toon_region_candidate_t143.nxnx_game_page_visitors_inspection_t142.nxnx_game_page_visitors_t140.nxnx_game_page_workbench_candidate_t342.nxnx_issue_intake_candidate_t181.nxnx_js_eval.nxnx_json_adversarial_test.nxnx_json_test.nxnx_lib_parse.nxnx_mcp_control.nxnx_movement_base_page_t139.nxnx_site_publish_alpha_candidate_t343.nxnx_site_publish_boundary_candidate_t336.nxnx_site_publish_lib.nxnx_site_publish_prepare_lib_t256.nxnx_site_publish_prepare_t198.nxnx_site_publish_release_candidate_t141.nxnx_stage_emitter_canonical_gate_t188.nxnx_stage_emitter_note_gate_t188.nxnx_swcompare_evidence_lib_t138.nxnx_swcompare_lib.nx

call flow from main pre-order; caps 40 nodes / depth 6 declared; ↻ = already shown

main sys_mmap nxa_die sys_write sys_exit nxa_lock_take nxa_lock_addr sys_write ↻ nxa_lock_give nxa_lock_addr ↻ nxa_report_overrun sys_write ↻ nxa_dump_printable sys_write ↻ nxa_dump_sizes sys_write ↻ nx_json_new sys_mmap ↻ nx_json_next nx_json_skip_ws nx_json_lit nx_ascii_is_digit

structs

64struct NxJsonTok

consts

50const NX_JSON_LBRACE: i64 = 1
51const NX_JSON_RBRACE: i64 = 2
52const NX_JSON_LBRACKET: i64 = 3
53const NX_JSON_RBRACKET: i64 = 4
54const NX_JSON_COMMA: i64 = 5
55const NX_JSON_COLON: i64 = 6
56const NX_JSON_STRING: i64 = 7
57const NX_JSON_NUMBER: i64 = 8
58const NX_JSON_TRUE: i64 = 9
59const NX_JSON_FALSE: i64 = 10
60const NX_JSON_NULL: i64 = 11
61const NX_JSON_EOF: i64 = 12
62const NX_JSON_ERROR: i64 = 13
74const NX_JSONTOK_BYTES: i64 = 48

functions

76func nx_json_new(src: *u8, len: i64) -> *NxJsonTok
94func nx_json_skip_ws(t: *NxJsonTok) -> i64
called by 1: nx_json_next
109func nx_json_lit(t: *NxJsonTok, lit: *u8, n: i64) -> i64
called by 1: nx_json_next
122func nx_json_next(t: *NxJsonTok) -> i64
212func main() -> i64