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 dom_bridge;
13pub mod interp;
14pub mod lexer;
15pub mod parser;
16pub mod regex;
17pub mod uncaught;
18pub mod value;
19
20pub use dom_bridge::DomBridge;
21pub use interp::JsRuntime;
22pub use lexer::Lexer;
23pub use parser::Parser;
24pub use value::Value;
25
26/// ソースをパースして AST を返す(デバッグ/テスト用)。
27///
28/// 構文エラーの有無を知りたい場合は [`parse_script_reporting`] を使うこと
29/// (こちらはベストエフォート解析の結果だけを返すため、壊れたスクリプトと
30/// 正常なスクリプトを区別できない)。
31pub fn parse_script(source: &str) -> ast::Program {
32    Parser::new(Lexer::new(source)).parse_program()
33}
34
35/// ソースをパースし、**AST と構文エラーの一覧**を返す。
36///
37/// AST は常に返る(ベストエフォート)ので、呼び出し側は
38/// 「実行はするが壊れている事実は把握している」状態にできる。
39pub fn parse_script_reporting(source: &str) -> (ast::Program, alloc::vec::Vec<parser::ParseError>) {
40    Parser::new(Lexer::new(source)).parse_program_reporting()
41}
42
43/// 永続ランタイム上でソースを評価する。戻り値は最後の値、または throw の文字列化。
44pub fn eval(source: &str, runtime: &mut JsRuntime) -> Result<Value, alloc::string::String> {
45    runtime.eval(source)
46}
47
48
49// selftest(約7,100行)を js/selftest.rs へ分離(2026-07-16 リファクタ フェーズ4)。
50// `js::selftest` の外部参照パス(main.rs)を保つため pub use で再エクスポート。
51mod selftest;
52pub use selftest::selftest;