Skip to main content

atmos/os_lib/js/
mod.rs

1//! AtmOS 組込み JavaScript エンジン。
2//!
3//! `js/` の lexer+parser 断片を土台に、評価器・ランタイム値・標準ライブラリを実装した
4//! ツリーウォーク方式の JS エンジン。`<script>` 実行と DOM 連携の足場を提供する。
5//! 詳細な到達ライン・段階計画は spec/DESIGN.md / spec/TODO.md を参照。
6
7#![allow(dead_code)]
8
9pub mod ast;
10pub mod bigint;
11pub mod builtins;
12pub mod cycle_gc;
13pub mod dom_bridge;
14pub mod interp;
15pub mod lexer;
16pub mod parser;
17pub mod regex;
18pub mod uncaught;
19pub mod value;
20
21pub use dom_bridge::DomBridge;
22pub use interp::JsRuntime;
23pub use lexer::Lexer;
24pub use parser::Parser;
25pub use value::Value;
26
27/// ソースをパースして AST を返す(デバッグ/テスト用)。
28///
29/// 構文エラーの有無を知りたい場合は [`parse_script_reporting`] を使うこと
30/// (こちらはベストエフォート解析の結果だけを返すため、壊れたスクリプトと
31/// 正常なスクリプトを区別できない)。
32pub fn parse_script(source: &str) -> ast::Program {
33    Parser::new(Lexer::new(source)).parse_program()
34}
35
36/// ソースをパースし、**AST と構文エラーの一覧**を返す。
37///
38/// AST は常に返る(ベストエフォート)ので、呼び出し側は
39/// 「実行はするが壊れている事実は把握している」状態にできる。
40pub fn parse_script_reporting(source: &str) -> (ast::Program, alloc::vec::Vec<parser::ParseError>) {
41    Parser::new(Lexer::new(source)).parse_program_reporting()
42}
43
44/// 永続ランタイム上でソースを評価する。戻り値は最後の値、または throw の文字列化。
45pub fn eval(source: &str, runtime: &mut JsRuntime) -> Result<Value, alloc::string::String> {
46    runtime.eval(source)
47}
48
49
50// selftest(約7,100行)を js/selftest.rs へ分離(2026-07-16 リファクタ フェーズ4)。
51// `js::selftest` の外部参照パス(main.rs)を保つため pub use で再エクスポート。
52mod selftest;
53pub use selftest::selftest;