diff --git a/.gitea/workflows/rust-workspace.yml b/.gitea/workflows/rust-workspace.yml index ca53900..eb86254 100644 --- a/.gitea/workflows/rust-workspace.yml +++ b/.gitea/workflows/rust-workspace.yml @@ -14,6 +14,9 @@ on: - "tools/check_milestone_10_issue_80.py" - "tools/check_milestone_10_issue_81.py" - "tools/check_milestone_10_issue_82.py" + - "tools/check_milestone_10_issue_83.py" + - "tools/generate_lsl_tables.py" + - "codegen/inputs/lsl_tools_grammar.json" - "**/*.rs" - "**/Cargo.toml" - "Cargo.lock" @@ -30,6 +33,9 @@ on: - "tools/check_milestone_10_issue_80.py" - "tools/check_milestone_10_issue_81.py" - "tools/check_milestone_10_issue_82.py" + - "tools/check_milestone_10_issue_83.py" + - "tools/generate_lsl_tables.py" + - "codegen/inputs/lsl_tools_grammar.json" - "**/*.rs" - "**/Cargo.toml" - "Cargo.lock" @@ -72,6 +78,8 @@ jobs: python3 tools/check_milestone_10_issue_80.py python3 tools/check_milestone_10_issue_81.py python3 tools/check_milestone_10_issue_82.py + python3 tools/check_milestone_10_issue_83.py + python3 tools/generate_lsl_tables.py --check - name: Test the complete native world milestone run: python3 tools/test_milestone_09.py - name: Compile every workspace target with bounded memory diff --git a/Cargo.lock b/Cargo.lock index 04514bd..db25a80 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -924,6 +924,7 @@ name = "libremetaverse-lsl-tools" version = "0.0.1" dependencies = [ "libremetaverse-types", + "regex", "unicode-general-category", ] diff --git a/api/SHIM-COVERAGE.md b/api/SHIM-COVERAGE.md index 008629f..c73773a 100644 --- a/api/SHIM-COVERAGE.md +++ b/api/SHIM-COVERAGE.md @@ -7,7 +7,7 @@ Generated by `python3 tools/generate_api_shims.py`; do not edit by hand. | `LibreMetaverse` | 2,711 | 27,281 | native implementation: 401 types / 17,025 members; remaining surface is callable failure-only shims | | `LibreMetaverse.Imaging.Abstractions` | 3 | 20 | native implementation: 3 types / 20 members; no generated shims remain | | `LibreMetaverse.Imaging.Skia` | 1 | 3 | native implementation: 1 type / 3 members; no generated shims remain | -| `LibreMetaverse.LslTools` | 164 | 768 | native implementation: 44 types / 403 members; remaining surface is callable failure-only shims | +| `LibreMetaverse.LslTools` | 164 | 768 | native implementation: 164 types / 768 members; no generated shims remain | | `LibreMetaverse.PrimMesher` | 17 | 207 | native implementation: 15 types / 200 members; remaining surface is callable failure-only shims | | `LibreMetaverse.RLV` | 28 | 499 | native implementation: 17 types / 200 members; remaining surface is callable failure-only shims | | `LibreMetaverse.Rendering.MeshFoundry` | 1 | 14 | native implementation: 1 type / 14 members; no generated shims remain | diff --git a/codegen/inputs/lsl_tools_grammar.json b/codegen/inputs/lsl_tools_grammar.json new file mode 100644 index 0000000..ae50ed8 --- /dev/null +++ b/codegen/inputs/lsl_tools_grammar.json @@ -0,0 +1,66 @@ +{ + "schema": 1, + "source": { + "repository": "https://github.com/cinderblocks/libremetaverse", + "commit": "2aa70bb68513b39795da5d13c88f31b86e85a3ba", + "parser": "LibreMetaverse.LslTools/YYClass/yycs0syntax.cs", + "lexer": "LibreMetaverse.LslTools/YYClass/yycs0tokens.cs", + "license": "BSD-3-Clause", + "serialization_version": "4.5" + }, + "start": 19, + "eof": 2, + "tokens": [ + ["EOF", 2, null], + ["BASE", 3, "base"], + ["THIS", 4, "this"], + ["NEW", 5, "new"], + ["ID", 6, null], + ["ANY", 7, null], + ["COLON", 8, ":"], + ["SEMICOLON", 9, ";"], + ["LBRACE", 10, "{"], + ["RBRACE", 11, "}"], + ["LPAREN", 12, "("], + ["RPAREN", 13, ")"], + ["LBRACK", 14, "["], + ["RBRACK", 15, "]"] + ], + "nonterminals": [ + ["GStuff", 16], + ["Stuff", 17], + ["Item", 18], + ["ClassBody", 19], + ["Cons", 20], + ["Call", 21], + ["BaseCall", 22], + ["Name", 23] + ], + "productions": [ + [1, "ClassBody", ["GStuff", "Cons", "GStuff"], "ClassBody_2_1"], + [2, "GStuff", [], "GStuff_2_1"], + [3, "GStuff", ["GStuff", "Item"], "GStuff_4_1"], + [4, "GStuff", ["GStuff", "Call"], "GStuff_6_1"], + [5, "Stuff", [], "Stuff_2_1"], + [6, "Stuff", ["Stuff", "Item"], "Stuff_4_1"], + [7, "Cons", ["Name", "LPAREN", "Stuff", "RPAREN", "BaseCall"], "Cons_2_1"], + [8, "Call", ["Name", "LPAREN", "Stuff", "RPAREN"], "Call_2_1"], + [9, "BaseCall", [], "BaseCall_2_1"], + [10, "BaseCall", ["COLON", "BASE", "LPAREN", "Stuff", "RPAREN"], "BaseCall_4_1"], + [11, "BaseCall", ["COLON", "THIS", "LPAREN", "Stuff", "RPAREN"], "BaseCall_6_1"], + [12, "Name", ["ID"], "Name_2_1"], + [13, "Name", ["ID", "LBRACK", "Stuff", "RBRACK"], "Name_4_1"], + [14, "Item", ["ID"], "Item_2_1"], + [15, "Item", ["ANY"], "Item_4_1"], + [16, "Item", ["SEMICOLON"], "Item_6_1"], + [17, "Item", ["BASE"], "Item_8_1"], + [18, "Item", ["THIS"], "Item_10_1"], + [19, "Item", ["THIS", "LBRACK", "Stuff", "RBRACK"], "Item_12_1"], + [20, "Item", ["COLON"], "Item_14_1"], + [21, "Item", ["NEW", "Name"], "Item_16_1"], + [22, "Item", ["NEW", "ID"], "Item_18_1"], + [23, "Item", ["LPAREN", "Stuff", "RPAREN"], "Item_20_1"], + [24, "Item", ["LBRACE", "GStuff", "RBRACE"], "Item_22_1"], + [25, "Item", ["LBRACK", "Stuff", "RBRACK"], "Item_24_1"] + ] +} diff --git a/crates/libremetaverse-lsl-tools/Cargo.toml b/crates/libremetaverse-lsl-tools/Cargo.toml index 59a1bad..72c3a9a 100644 --- a/crates/libremetaverse-lsl-tools/Cargo.toml +++ b/crates/libremetaverse-lsl-tools/Cargo.toml @@ -10,6 +10,7 @@ description = "Native LSL lexer and parser tooling for the MetaCrate LibreMetave [dependencies] libremetaverse-types = { path = "../libremetaverse-types" } unicode-general-category = "1.1" +regex = "1" [lints] workspace = true diff --git a/crates/libremetaverse-lsl-tools/README.md b/crates/libremetaverse-lsl-tools/README.md index 789438a..5545f4c 100644 --- a/crates/libremetaverse-lsl-tools/README.md +++ b/crates/libremetaverse-lsl-tools/README.md @@ -6,8 +6,8 @@ issue 81 boundary supplies source reading, comments, Unicode character sets, deterministic DFA execution, reserved words, terminal symbols, EOF, source locations, diagnostics, and Rust iterators. The issue 82 boundary supplies grammar productions, parser tables, precedence, reductions, and recovery. -Deterministic checked-in generated grammar and token tables are added by issue -83. +The issue 83 boundary adds deterministic checked-in grammar/token tables and +native replacements for the retired parser-generator object model. ## Source and position contract @@ -81,9 +81,35 @@ recovery attempts. Compatibility `SymbolSet` clones share deterministic FIRST/FOLLOW membership, and cloned `CSymbol` values share registered production metadata. This retains the observable reference behavior of the C# grammar model without unsafe code. -Parser-source serialization and the old `Builder`-driven generated-output -members return `InvalidOperation` explicitly until issue 83 supplies the -checked-in generator; they never report a false success. +Legacy parser-runtime serialization members that cannot faithfully round-trip +the richer native LALR machine remain explicit `InvalidOperation` results. +Callers should use the stable `YyParser::emit` and `YyLexer::emit_dfa` formats, +or regenerate the canonical checked-in table module described below. + +## Checked-in generator contract + +[`codegen/inputs/lsl_tools_grammar.json`](../../codegen/inputs/lsl_tools_grammar.json) +is the reviewed source of truth reconstructed from the pinned 4.5 +`yycs0syntax.cs` and `yycs0tokens.cs` tables at upstream commit +`2aa70bb68513b39795da5d13c88f31b86e85a3ba`. It records every token, +nonterminal, production, and semantic-action class. The portable Python +generator uses the standard library plus the workspace Rust formatter and emits +`src/generated_tables.rs`; it does not invoke C#, a C# source generator, or a +.NET runtime. + +Regenerate with `python3 tools/generate_lsl_tables.py`. Use +`python3 tools/generate_lsl_tables.py --check` in reviews and CI. The check +renders the complete output in memory and compares bytes, so repeated runs are +independent of hash iteration, locale, host operating system, and timestamps. +The checked-in module supplies the canonical 25-production grammar, a Unicode +lexer with reserved `base`, `this`, and `new` tokens, the 84 generated syntax +classes, the 13 generated token classes, and the four `cs0` runtime wrappers. + +The old `GenBase`, `SymbolsGen`, `TokensGen`, `Regex`, NFA, delegate, factory, +and 4.5 `Serialiser` APIs are live Rust compatibility adapters. New code should +prefer `Grammar`, typed `DfaState` builders, `generated_parser`, and +`generated_lexer`; these avoid CLR-style method pointers and class-shaped +generated inheritance while retaining deterministic mapped behavior. ## Diagnostics and migration @@ -108,6 +134,9 @@ The principal API mapping is: | `CSymbol`, `SymbolSet`, `Production`, `Precedence` | Same mapped names plus typed `Grammar` builders | | `YyParser`, parser entries | Deterministic native tables and conflict records | | `Parser`, `ParseStackEntry`, `Error`, `recoveredError` | Bounded parsing, typed trees, and recovery | +| `yycs0syntax`, `yycs0tokens` | `generated_parser`, `generated_lexer`, checked-in native types | +| `GenBase`, `SymbolsGen`, `TokensGen`, `Regex`, `Nfa` | Portable Rust generator adapters; prefer typed grammar/DFA builders | +| `Serialiser` | Deterministic 4.5-compatible integer stream for supported mapped values | No C#, .NET runtime, dynamically loaded class, macOS-only API, platform code page, or runtime source generation is used by this boundary. @@ -123,8 +152,10 @@ CARGO_BUILD_JOBS=1 cargo clippy -p libremetaverse-lsl-tools --all-targets --lock RUSTDOCFLAGS='-D warnings' CARGO_BUILD_JOBS=1 cargo doc -p libremetaverse-lsl-tools --no-deps --locked python3 tools/check_milestone_10_issue_81.py python3 tools/check_milestone_10_issue_82.py +python3 tools/check_milestone_10_issue_83.py +python3 tools/generate_lsl_tables.py --check python3 tools/generate_api_shims.py --check ``` -The package contains 37 focused native and compatibility fixtures. The Gitea +The package contains 46 focused native and compatibility fixtures. The Gitea workflow runs the audit and workspace compile on `ubuntu-latest` only. diff --git a/crates/libremetaverse-lsl-tools/src/generated.rs b/crates/libremetaverse-lsl-tools/src/generated.rs index 8ab407f..3f1f523 100644 --- a/crates/libremetaverse-lsl-tools/src/generated.rs +++ b/crates/libremetaverse-lsl-tools/src/generated.rs @@ -6,264 +6,78 @@ #![allow(non_snake_case)] /// C# type: `T:LibreMetaverse.LslTools.ANY`. -pub struct ANY; -impl ANY { - /// C# member: `M:LibreMetaverse.LslTools.ANY.#ctor(LibreMetaverse.LslTools.Lexer)`. - pub fn new(yyl: libremetaverse_lsl_tools::Lexer) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.ANY.#ctor(LibreMetaverse.LslTools.Lexer)", - ) - } - /// C# member: `P:LibreMetaverse.LslTools.ANY.yyname`. - pub fn yyname(&self) -> String { - libremetaverse_types::unimplemented_api!("P:LibreMetaverse.LslTools.ANY.yyname") - } - /// C# member: `P:LibreMetaverse.LslTools.ANY.yynum`. - pub fn yynum(&self) -> i32 { - libremetaverse_types::unimplemented_api!("P:LibreMetaverse.LslTools.ANY.yynum") - } -} +/// C# member: `M:LibreMetaverse.LslTools.ANY.#ctor(LibreMetaverse.LslTools.Lexer)`. +/// C# member: `P:LibreMetaverse.LslTools.ANY.yyname`. +/// C# member: `P:LibreMetaverse.LslTools.ANY.yynum`. +pub use crate::generated_tables::ANY; /// C# type: `T:LibreMetaverse.LslTools.AddToFunc`. -pub struct AddToFunc; -impl AddToFunc { - /// C# member: `M:LibreMetaverse.LslTools.AddToFunc.#ctor(System.Object,System.IntPtr)`. - pub fn new( - object: libremetaverse_types::compat::Object, - method: isize, - ) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.AddToFunc.#ctor(System.Object,System.IntPtr)", - ) - } - /// C# member: `M:LibreMetaverse.LslTools.AddToFunc.BeginInvoke(LibreMetaverse.LslTools.Transition,LibreMetaverse.LslTools.SymbolSet,System.AsyncCallback,System.Object)`. - pub fn begin_invoke( - &self, - a: libremetaverse_lsl_tools::Transition, - s: libremetaverse_lsl_tools::SymbolSet, - callback: Box, - object: libremetaverse_types::compat::Object, - ) -> Result, crate::Error> { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.AddToFunc.BeginInvoke(LibreMetaverse.LslTools.Transition,LibreMetaverse.LslTools.SymbolSet,System.AsyncCallback,System.Object)", - ) - } - /// C# member: `M:LibreMetaverse.LslTools.AddToFunc.EndInvoke(System.IAsyncResult)`. - pub fn end_invoke( - &self, - result: Box, - ) -> Result<(), crate::Error> { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.AddToFunc.EndInvoke(System.IAsyncResult)", - ) - } - /// C# member: `M:LibreMetaverse.LslTools.AddToFunc.Invoke(LibreMetaverse.LslTools.Transition,LibreMetaverse.LslTools.SymbolSet)`. - pub fn invoke( - &self, - a: libremetaverse_lsl_tools::Transition, - s: libremetaverse_lsl_tools::SymbolSet, - ) -> Result<(), crate::Error> { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.AddToFunc.Invoke(LibreMetaverse.LslTools.Transition,LibreMetaverse.LslTools.SymbolSet)", - ) - } -} +/// C# member: `M:LibreMetaverse.LslTools.AddToFunc.#ctor(System.Object,System.IntPtr)`. +/// C# member: `M:LibreMetaverse.LslTools.AddToFunc.BeginInvoke(LibreMetaverse.LslTools.Transition,LibreMetaverse.LslTools.SymbolSet,System.AsyncCallback,System.Object)`. +/// C# member: `M:LibreMetaverse.LslTools.AddToFunc.EndInvoke(System.IAsyncResult)`. +/// C# member: `M:LibreMetaverse.LslTools.AddToFunc.Invoke(LibreMetaverse.LslTools.Transition,LibreMetaverse.LslTools.SymbolSet)`. +pub use crate::generator::AddToFunc; /// C# type: `T:LibreMetaverse.LslTools.BASE`. -pub struct BASE; -impl BASE { - /// C# member: `M:LibreMetaverse.LslTools.BASE.#ctor(LibreMetaverse.LslTools.Lexer)`. - pub fn new(yyl: libremetaverse_lsl_tools::Lexer) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.BASE.#ctor(LibreMetaverse.LslTools.Lexer)", - ) - } - /// C# member: `P:LibreMetaverse.LslTools.BASE.yyname`. - pub fn yyname(&self) -> String { - libremetaverse_types::unimplemented_api!("P:LibreMetaverse.LslTools.BASE.yyname") - } - /// C# member: `P:LibreMetaverse.LslTools.BASE.yynum`. - pub fn yynum(&self) -> i32 { - libremetaverse_types::unimplemented_api!("P:LibreMetaverse.LslTools.BASE.yynum") - } -} +/// C# member: `M:LibreMetaverse.LslTools.BASE.#ctor(LibreMetaverse.LslTools.Lexer)`. +/// C# member: `P:LibreMetaverse.LslTools.BASE.yyname`. +/// C# member: `P:LibreMetaverse.LslTools.BASE.yynum`. +pub use crate::generated_tables::BASE; /// C# type: `T:LibreMetaverse.LslTools.BaseCall`. -pub struct BaseCall; -impl BaseCall { - /// C# member: `M:LibreMetaverse.LslTools.BaseCall.#ctor(LibreMetaverse.LslTools.Parser)`. - pub fn new(yyq: libremetaverse_lsl_tools::Parser) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.BaseCall.#ctor(LibreMetaverse.LslTools.Parser)", - ) - } - /// C# member: `P:LibreMetaverse.LslTools.BaseCall.yyname`. - pub fn yyname(&self) -> String { - libremetaverse_types::unimplemented_api!("P:LibreMetaverse.LslTools.BaseCall.yyname") - } - /// C# member: `P:LibreMetaverse.LslTools.BaseCall.yynum`. - pub fn yynum(&self) -> i32 { - libremetaverse_types::unimplemented_api!("P:LibreMetaverse.LslTools.BaseCall.yynum") - } -} +/// C# member: `M:LibreMetaverse.LslTools.BaseCall.#ctor(LibreMetaverse.LslTools.Parser)`. +/// C# member: `P:LibreMetaverse.LslTools.BaseCall.yyname`. +/// C# member: `P:LibreMetaverse.LslTools.BaseCall.yynum`. +pub use crate::generated_tables::BaseCall; /// C# type: `T:LibreMetaverse.LslTools.BaseCall_1`. -pub struct BaseCall_1; -impl BaseCall_1 { - /// C# member: `M:LibreMetaverse.LslTools.BaseCall_1.#ctor(LibreMetaverse.LslTools.Parser)`. - pub fn new(yyq: libremetaverse_lsl_tools::Parser) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.BaseCall_1.#ctor(LibreMetaverse.LslTools.Parser)", - ) - } -} +/// C# member: `M:LibreMetaverse.LslTools.BaseCall_1.#ctor(LibreMetaverse.LslTools.Parser)`. +pub use crate::generated_tables::BaseCall_1; /// C# type: `T:LibreMetaverse.LslTools.BaseCall_2`. -pub struct BaseCall_2; -impl BaseCall_2 { - /// C# member: `M:LibreMetaverse.LslTools.BaseCall_2.#ctor(LibreMetaverse.LslTools.Parser)`. - pub fn new(yyq: libremetaverse_lsl_tools::Parser) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.BaseCall_2.#ctor(LibreMetaverse.LslTools.Parser)", - ) - } -} +/// C# member: `M:LibreMetaverse.LslTools.BaseCall_2.#ctor(LibreMetaverse.LslTools.Parser)`. +pub use crate::generated_tables::BaseCall_2; /// C# type: `T:LibreMetaverse.LslTools.BaseCall_2_1`. -pub struct BaseCall_2_1; -impl BaseCall_2_1 { - /// C# member: `M:LibreMetaverse.LslTools.BaseCall_2_1.#ctor(LibreMetaverse.LslTools.Parser)`. - pub fn new(yyq: libremetaverse_lsl_tools::Parser) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.BaseCall_2_1.#ctor(LibreMetaverse.LslTools.Parser)", - ) - } -} +/// C# member: `M:LibreMetaverse.LslTools.BaseCall_2_1.#ctor(LibreMetaverse.LslTools.Parser)`. +pub use crate::generated_tables::BaseCall_2_1; /// C# type: `T:LibreMetaverse.LslTools.BaseCall_3`. -pub struct BaseCall_3; -impl BaseCall_3 { - /// C# member: `M:LibreMetaverse.LslTools.BaseCall_3.#ctor(LibreMetaverse.LslTools.Parser)`. - pub fn new(yyq: libremetaverse_lsl_tools::Parser) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.BaseCall_3.#ctor(LibreMetaverse.LslTools.Parser)", - ) - } -} +/// C# member: `M:LibreMetaverse.LslTools.BaseCall_3.#ctor(LibreMetaverse.LslTools.Parser)`. +pub use crate::generated_tables::BaseCall_3; /// C# type: `T:LibreMetaverse.LslTools.BaseCall_4`. -pub struct BaseCall_4; -impl BaseCall_4 { - /// C# member: `M:LibreMetaverse.LslTools.BaseCall_4.#ctor(LibreMetaverse.LslTools.Parser)`. - pub fn new(yyq: libremetaverse_lsl_tools::Parser) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.BaseCall_4.#ctor(LibreMetaverse.LslTools.Parser)", - ) - } -} +/// C# member: `M:LibreMetaverse.LslTools.BaseCall_4.#ctor(LibreMetaverse.LslTools.Parser)`. +pub use crate::generated_tables::BaseCall_4; /// C# type: `T:LibreMetaverse.LslTools.BaseCall_4_1`. -pub struct BaseCall_4_1; -impl BaseCall_4_1 { - /// C# member: `M:LibreMetaverse.LslTools.BaseCall_4_1.#ctor(LibreMetaverse.LslTools.Parser)`. - pub fn new(yyq: libremetaverse_lsl_tools::Parser) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.BaseCall_4_1.#ctor(LibreMetaverse.LslTools.Parser)", - ) - } -} +/// C# member: `M:LibreMetaverse.LslTools.BaseCall_4_1.#ctor(LibreMetaverse.LslTools.Parser)`. +pub use crate::generated_tables::BaseCall_4_1; /// C# type: `T:LibreMetaverse.LslTools.BaseCall_5`. -pub struct BaseCall_5; -impl BaseCall_5 { - /// C# member: `M:LibreMetaverse.LslTools.BaseCall_5.#ctor(LibreMetaverse.LslTools.Parser)`. - pub fn new(yyq: libremetaverse_lsl_tools::Parser) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.BaseCall_5.#ctor(LibreMetaverse.LslTools.Parser)", - ) - } -} +/// C# member: `M:LibreMetaverse.LslTools.BaseCall_5.#ctor(LibreMetaverse.LslTools.Parser)`. +pub use crate::generated_tables::BaseCall_5; /// C# type: `T:LibreMetaverse.LslTools.BaseCall_6`. -pub struct BaseCall_6; -impl BaseCall_6 { - /// C# member: `M:LibreMetaverse.LslTools.BaseCall_6.#ctor(LibreMetaverse.LslTools.Parser)`. - pub fn new(yyq: libremetaverse_lsl_tools::Parser) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.BaseCall_6.#ctor(LibreMetaverse.LslTools.Parser)", - ) - } -} +/// C# member: `M:LibreMetaverse.LslTools.BaseCall_6.#ctor(LibreMetaverse.LslTools.Parser)`. +pub use crate::generated_tables::BaseCall_6; /// C# type: `T:LibreMetaverse.LslTools.BaseCall_6_1`. -pub struct BaseCall_6_1; -impl BaseCall_6_1 { - /// C# member: `M:LibreMetaverse.LslTools.BaseCall_6_1.#ctor(LibreMetaverse.LslTools.Parser)`. - pub fn new(yyq: libremetaverse_lsl_tools::Parser) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.BaseCall_6_1.#ctor(LibreMetaverse.LslTools.Parser)", - ) - } -} +/// C# member: `M:LibreMetaverse.LslTools.BaseCall_6_1.#ctor(LibreMetaverse.LslTools.Parser)`. +pub use crate::generated_tables::BaseCall_6_1; /// C# type: `T:LibreMetaverse.LslTools.Builder`. -pub struct Builder; -impl Builder { - /// C# member: `M:LibreMetaverse.LslTools.Builder.#ctor(System.Object,System.IntPtr)`. - pub fn new( - object: libremetaverse_types::compat::Object, - method: isize, - ) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.Builder.#ctor(System.Object,System.IntPtr)", - ) - } - /// C# member: `M:LibreMetaverse.LslTools.Builder.BeginInvoke(LibreMetaverse.LslTools.Transition,System.AsyncCallback,System.Object)`. - pub fn begin_invoke( - &self, - t: libremetaverse_lsl_tools::Transition, - callback: Box, - object: libremetaverse_types::compat::Object, - ) -> Result, crate::Error> { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.Builder.BeginInvoke(LibreMetaverse.LslTools.Transition,System.AsyncCallback,System.Object)", - ) - } - /// C# member: `M:LibreMetaverse.LslTools.Builder.EndInvoke(System.IAsyncResult)`. - pub fn end_invoke( - &self, - result: Box, - ) -> Result<(), crate::Error> { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.Builder.EndInvoke(System.IAsyncResult)", - ) - } - /// C# member: `M:LibreMetaverse.LslTools.Builder.Invoke(LibreMetaverse.LslTools.Transition)`. - pub fn invoke(&self, t: libremetaverse_lsl_tools::Transition) -> Result<(), crate::Error> { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.Builder.Invoke(LibreMetaverse.LslTools.Transition)", - ) - } -} +/// C# member: `M:LibreMetaverse.LslTools.Builder.#ctor(System.Object,System.IntPtr)`. +/// C# member: `M:LibreMetaverse.LslTools.Builder.BeginInvoke(LibreMetaverse.LslTools.Transition,System.AsyncCallback,System.Object)`. +/// C# member: `M:LibreMetaverse.LslTools.Builder.EndInvoke(System.IAsyncResult)`. +/// C# member: `M:LibreMetaverse.LslTools.Builder.Invoke(LibreMetaverse.LslTools.Transition)`. +pub use crate::generator::Builder; /// C# type: `T:LibreMetaverse.LslTools.COLON`. -pub struct COLON; -impl COLON { - /// C# member: `M:LibreMetaverse.LslTools.COLON.#ctor(LibreMetaverse.LslTools.Lexer)`. - pub fn new(yyl: libremetaverse_lsl_tools::Lexer) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.COLON.#ctor(LibreMetaverse.LslTools.Lexer)", - ) - } - /// C# member: `P:LibreMetaverse.LslTools.COLON.yyname`. - pub fn yyname(&self) -> String { - libremetaverse_types::unimplemented_api!("P:LibreMetaverse.LslTools.COLON.yyname") - } - /// C# member: `P:LibreMetaverse.LslTools.COLON.yynum`. - pub fn yynum(&self) -> i32 { - libremetaverse_types::unimplemented_api!("P:LibreMetaverse.LslTools.COLON.yynum") - } -} +/// C# member: `M:LibreMetaverse.LslTools.COLON.#ctor(LibreMetaverse.LslTools.Lexer)`. +/// C# member: `P:LibreMetaverse.LslTools.COLON.yyname`. +/// C# member: `P:LibreMetaverse.LslTools.COLON.yynum`. +pub use crate::generated_tables::COLON; /// C# type: `T:LibreMetaverse.LslTools.CSToolsException`. /// C# member: `F:LibreMetaverse.LslTools.CSToolsException.handled`. @@ -339,56 +153,22 @@ pub use crate::parser::CSymbol; pub use crate::parser::CSymbolSymType; /// C# type: `T:LibreMetaverse.LslTools.Call`. -pub struct Call; -impl Call { - /// C# member: `M:LibreMetaverse.LslTools.Call.#ctor(LibreMetaverse.LslTools.Parser)`. - pub fn new(yyq: libremetaverse_lsl_tools::Parser) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.Call.#ctor(LibreMetaverse.LslTools.Parser)", - ) - } - /// C# member: `P:LibreMetaverse.LslTools.Call.yyname`. - pub fn yyname(&self) -> String { - libremetaverse_types::unimplemented_api!("P:LibreMetaverse.LslTools.Call.yyname") - } - /// C# member: `P:LibreMetaverse.LslTools.Call.yynum`. - pub fn yynum(&self) -> i32 { - libremetaverse_types::unimplemented_api!("P:LibreMetaverse.LslTools.Call.yynum") - } -} +/// C# member: `M:LibreMetaverse.LslTools.Call.#ctor(LibreMetaverse.LslTools.Parser)`. +/// C# member: `P:LibreMetaverse.LslTools.Call.yyname`. +/// C# member: `P:LibreMetaverse.LslTools.Call.yynum`. +pub use crate::generated_tables::Call; /// C# type: `T:LibreMetaverse.LslTools.Call_1`. -pub struct Call_1; -impl Call_1 { - /// C# member: `M:LibreMetaverse.LslTools.Call_1.#ctor(LibreMetaverse.LslTools.Parser)`. - pub fn new(yyq: libremetaverse_lsl_tools::Parser) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.Call_1.#ctor(LibreMetaverse.LslTools.Parser)", - ) - } -} +/// C# member: `M:LibreMetaverse.LslTools.Call_1.#ctor(LibreMetaverse.LslTools.Parser)`. +pub use crate::generated_tables::Call_1; /// C# type: `T:LibreMetaverse.LslTools.Call_2`. -pub struct Call_2; -impl Call_2 { - /// C# member: `M:LibreMetaverse.LslTools.Call_2.#ctor(LibreMetaverse.LslTools.Parser)`. - pub fn new(yyq: libremetaverse_lsl_tools::Parser) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.Call_2.#ctor(LibreMetaverse.LslTools.Parser)", - ) - } -} +/// C# member: `M:LibreMetaverse.LslTools.Call_2.#ctor(LibreMetaverse.LslTools.Parser)`. +pub use crate::generated_tables::Call_2; /// C# type: `T:LibreMetaverse.LslTools.Call_2_1`. -pub struct Call_2_1; -impl Call_2_1 { - /// C# member: `M:LibreMetaverse.LslTools.Call_2_1.#ctor(LibreMetaverse.LslTools.Parser)`. - pub fn new(yyq: libremetaverse_lsl_tools::Parser) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.Call_2_1.#ctor(LibreMetaverse.LslTools.Parser)", - ) - } -} +/// C# member: `M:LibreMetaverse.LslTools.Call_2_1.#ctor(LibreMetaverse.LslTools.Parser)`. +pub use crate::generated_tables::Call_2_1; /// C# type: `T:LibreMetaverse.LslTools.CatTest`. /// C# member: `M:LibreMetaverse.LslTools.CatTest.#ctor(System.Globalization.UnicodeCategory)`. @@ -401,56 +181,22 @@ pub use crate::lexer::CatTest; pub use crate::lexer::Charset; /// C# type: `T:LibreMetaverse.LslTools.ClassBody`. -pub struct ClassBody; -impl ClassBody { - /// C# member: `M:LibreMetaverse.LslTools.ClassBody.#ctor(LibreMetaverse.LslTools.Parser)`. - pub fn new(yyq: libremetaverse_lsl_tools::Parser) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.ClassBody.#ctor(LibreMetaverse.LslTools.Parser)", - ) - } - /// C# member: `P:LibreMetaverse.LslTools.ClassBody.yyname`. - pub fn yyname(&self) -> String { - libremetaverse_types::unimplemented_api!("P:LibreMetaverse.LslTools.ClassBody.yyname") - } - /// C# member: `P:LibreMetaverse.LslTools.ClassBody.yynum`. - pub fn yynum(&self) -> i32 { - libremetaverse_types::unimplemented_api!("P:LibreMetaverse.LslTools.ClassBody.yynum") - } -} +/// C# member: `M:LibreMetaverse.LslTools.ClassBody.#ctor(LibreMetaverse.LslTools.Parser)`. +/// C# member: `P:LibreMetaverse.LslTools.ClassBody.yyname`. +/// C# member: `P:LibreMetaverse.LslTools.ClassBody.yynum`. +pub use crate::generated_tables::ClassBody; /// C# type: `T:LibreMetaverse.LslTools.ClassBody_1`. -pub struct ClassBody_1; -impl ClassBody_1 { - /// C# member: `M:LibreMetaverse.LslTools.ClassBody_1.#ctor(LibreMetaverse.LslTools.Parser)`. - pub fn new(yyq: libremetaverse_lsl_tools::Parser) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.ClassBody_1.#ctor(LibreMetaverse.LslTools.Parser)", - ) - } -} +/// C# member: `M:LibreMetaverse.LslTools.ClassBody_1.#ctor(LibreMetaverse.LslTools.Parser)`. +pub use crate::generated_tables::ClassBody_1; /// C# type: `T:LibreMetaverse.LslTools.ClassBody_2`. -pub struct ClassBody_2; -impl ClassBody_2 { - /// C# member: `M:LibreMetaverse.LslTools.ClassBody_2.#ctor(LibreMetaverse.LslTools.Parser)`. - pub fn new(yyq: libremetaverse_lsl_tools::Parser) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.ClassBody_2.#ctor(LibreMetaverse.LslTools.Parser)", - ) - } -} +/// C# member: `M:LibreMetaverse.LslTools.ClassBody_2.#ctor(LibreMetaverse.LslTools.Parser)`. +pub use crate::generated_tables::ClassBody_2; /// C# type: `T:LibreMetaverse.LslTools.ClassBody_2_1`. -pub struct ClassBody_2_1; -impl ClassBody_2_1 { - /// C# member: `M:LibreMetaverse.LslTools.ClassBody_2_1.#ctor(LibreMetaverse.LslTools.Parser)`. - pub fn new(yyq: libremetaverse_lsl_tools::Parser) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.ClassBody_2_1.#ctor(LibreMetaverse.LslTools.Parser)", - ) - } -} +/// C# member: `M:LibreMetaverse.LslTools.ClassBody_2_1.#ctor(LibreMetaverse.LslTools.Parser)`. +pub use crate::generated_tables::ClassBody_2_1; /// C# type: `T:LibreMetaverse.LslTools.CommentList`. /// C# member: `F:LibreMetaverse.LslTools.CommentList.len`. @@ -460,56 +206,22 @@ impl ClassBody_2_1 { pub use crate::lexer::CommentList; /// C# type: `T:LibreMetaverse.LslTools.Cons`. -pub struct Cons; -impl Cons { - /// C# member: `M:LibreMetaverse.LslTools.Cons.#ctor(LibreMetaverse.LslTools.Parser)`. - pub fn new(yyq: libremetaverse_lsl_tools::Parser) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.Cons.#ctor(LibreMetaverse.LslTools.Parser)", - ) - } - /// C# member: `P:LibreMetaverse.LslTools.Cons.yyname`. - pub fn yyname(&self) -> String { - libremetaverse_types::unimplemented_api!("P:LibreMetaverse.LslTools.Cons.yyname") - } - /// C# member: `P:LibreMetaverse.LslTools.Cons.yynum`. - pub fn yynum(&self) -> i32 { - libremetaverse_types::unimplemented_api!("P:LibreMetaverse.LslTools.Cons.yynum") - } -} +/// C# member: `M:LibreMetaverse.LslTools.Cons.#ctor(LibreMetaverse.LslTools.Parser)`. +/// C# member: `P:LibreMetaverse.LslTools.Cons.yyname`. +/// C# member: `P:LibreMetaverse.LslTools.Cons.yynum`. +pub use crate::generated_tables::Cons; /// C# type: `T:LibreMetaverse.LslTools.Cons_1`. -pub struct Cons_1; -impl Cons_1 { - /// C# member: `M:LibreMetaverse.LslTools.Cons_1.#ctor(LibreMetaverse.LslTools.Parser)`. - pub fn new(yyq: libremetaverse_lsl_tools::Parser) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.Cons_1.#ctor(LibreMetaverse.LslTools.Parser)", - ) - } -} +/// C# member: `M:LibreMetaverse.LslTools.Cons_1.#ctor(LibreMetaverse.LslTools.Parser)`. +pub use crate::generated_tables::Cons_1; /// C# type: `T:LibreMetaverse.LslTools.Cons_2`. -pub struct Cons_2; -impl Cons_2 { - /// C# member: `M:LibreMetaverse.LslTools.Cons_2.#ctor(LibreMetaverse.LslTools.Parser)`. - pub fn new(yyq: libremetaverse_lsl_tools::Parser) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.Cons_2.#ctor(LibreMetaverse.LslTools.Parser)", - ) - } -} +/// C# member: `M:LibreMetaverse.LslTools.Cons_2.#ctor(LibreMetaverse.LslTools.Parser)`. +pub use crate::generated_tables::Cons_2; /// C# type: `T:LibreMetaverse.LslTools.Cons_2_1`. -pub struct Cons_2_1; -impl Cons_2_1 { - /// C# member: `M:LibreMetaverse.LslTools.Cons_2_1.#ctor(LibreMetaverse.LslTools.Parser)`. - pub fn new(yyq: libremetaverse_lsl_tools::Parser) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.Cons_2_1.#ctor(LibreMetaverse.LslTools.Parser)", - ) - } -} +/// C# member: `M:LibreMetaverse.LslTools.Cons_2_1.#ctor(LibreMetaverse.LslTools.Parser)`. +pub use crate::generated_tables::Cons_2_1; /// C# type: `T:LibreMetaverse.LslTools.CsReader`. /// C# member: `F:LibreMetaverse.LslTools.CsReader.fname`. @@ -570,742 +282,248 @@ pub use crate::parser::LslError; pub use crate::lexer::ErrorHandler; /// C# type: `T:LibreMetaverse.LslTools.Func`. -pub struct Func; -impl Func { - /// C# member: `M:LibreMetaverse.LslTools.Func.#ctor(System.Object,System.IntPtr)`. - pub fn new( - object: libremetaverse_types::compat::Object, - method: isize, - ) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.Func.#ctor(System.Object,System.IntPtr)", - ) - } - /// C# member: `M:LibreMetaverse.LslTools.Func.BeginInvoke(LibreMetaverse.LslTools.Transition,System.AsyncCallback,System.Object)`. - pub fn begin_invoke( - &self, - a: libremetaverse_lsl_tools::Transition, - callback: Box, - object: libremetaverse_types::compat::Object, - ) -> Result, crate::Error> { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.Func.BeginInvoke(LibreMetaverse.LslTools.Transition,System.AsyncCallback,System.Object)", - ) - } - /// C# member: `M:LibreMetaverse.LslTools.Func.EndInvoke(System.IAsyncResult)`. - pub fn end_invoke( - &self, - result: Box, - ) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.Func.EndInvoke(System.IAsyncResult)", - ) - } - /// C# member: `M:LibreMetaverse.LslTools.Func.Invoke(LibreMetaverse.LslTools.Transition)`. - pub fn invoke( - &self, - a: libremetaverse_lsl_tools::Transition, - ) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.Func.Invoke(LibreMetaverse.LslTools.Transition)", - ) - } -} +/// C# member: `M:LibreMetaverse.LslTools.Func.#ctor(System.Object,System.IntPtr)`. +/// C# member: `M:LibreMetaverse.LslTools.Func.BeginInvoke(LibreMetaverse.LslTools.Transition,System.AsyncCallback,System.Object)`. +/// C# member: `M:LibreMetaverse.LslTools.Func.EndInvoke(System.IAsyncResult)`. +/// C# member: `M:LibreMetaverse.LslTools.Func.Invoke(LibreMetaverse.LslTools.Transition)`. +pub use crate::generator::Func; /// C# type: `T:LibreMetaverse.LslTools.GStuff`. -pub struct GStuff; -impl GStuff { - /// C# member: `M:LibreMetaverse.LslTools.GStuff.#ctor(LibreMetaverse.LslTools.Parser)`. - pub fn new(yyq: libremetaverse_lsl_tools::Parser) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.GStuff.#ctor(LibreMetaverse.LslTools.Parser)", - ) - } - /// C# member: `P:LibreMetaverse.LslTools.GStuff.yyname`. - pub fn yyname(&self) -> String { - libremetaverse_types::unimplemented_api!("P:LibreMetaverse.LslTools.GStuff.yyname") - } - /// C# member: `P:LibreMetaverse.LslTools.GStuff.yynum`. - pub fn yynum(&self) -> i32 { - libremetaverse_types::unimplemented_api!("P:LibreMetaverse.LslTools.GStuff.yynum") - } -} +/// C# member: `M:LibreMetaverse.LslTools.GStuff.#ctor(LibreMetaverse.LslTools.Parser)`. +/// C# member: `P:LibreMetaverse.LslTools.GStuff.yyname`. +/// C# member: `P:LibreMetaverse.LslTools.GStuff.yynum`. +pub use crate::generated_tables::GStuff; /// C# type: `T:LibreMetaverse.LslTools.GStuff_1`. -pub struct GStuff_1; -impl GStuff_1 { - /// C# member: `M:LibreMetaverse.LslTools.GStuff_1.#ctor(LibreMetaverse.LslTools.Parser)`. - pub fn new(yyq: libremetaverse_lsl_tools::Parser) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.GStuff_1.#ctor(LibreMetaverse.LslTools.Parser)", - ) - } -} +/// C# member: `M:LibreMetaverse.LslTools.GStuff_1.#ctor(LibreMetaverse.LslTools.Parser)`. +pub use crate::generated_tables::GStuff_1; /// C# type: `T:LibreMetaverse.LslTools.GStuff_2`. -pub struct GStuff_2; -impl GStuff_2 { - /// C# member: `M:LibreMetaverse.LslTools.GStuff_2.#ctor(LibreMetaverse.LslTools.Parser)`. - pub fn new(yyq: libremetaverse_lsl_tools::Parser) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.GStuff_2.#ctor(LibreMetaverse.LslTools.Parser)", - ) - } -} +/// C# member: `M:LibreMetaverse.LslTools.GStuff_2.#ctor(LibreMetaverse.LslTools.Parser)`. +pub use crate::generated_tables::GStuff_2; /// C# type: `T:LibreMetaverse.LslTools.GStuff_2_1`. -pub struct GStuff_2_1; -impl GStuff_2_1 { - /// C# member: `M:LibreMetaverse.LslTools.GStuff_2_1.#ctor(LibreMetaverse.LslTools.Parser)`. - pub fn new(yyq: libremetaverse_lsl_tools::Parser) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.GStuff_2_1.#ctor(LibreMetaverse.LslTools.Parser)", - ) - } -} +/// C# member: `M:LibreMetaverse.LslTools.GStuff_2_1.#ctor(LibreMetaverse.LslTools.Parser)`. +pub use crate::generated_tables::GStuff_2_1; /// C# type: `T:LibreMetaverse.LslTools.GStuff_3`. -pub struct GStuff_3; -impl GStuff_3 { - /// C# member: `M:LibreMetaverse.LslTools.GStuff_3.#ctor(LibreMetaverse.LslTools.Parser)`. - pub fn new(yyq: libremetaverse_lsl_tools::Parser) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.GStuff_3.#ctor(LibreMetaverse.LslTools.Parser)", - ) - } -} +/// C# member: `M:LibreMetaverse.LslTools.GStuff_3.#ctor(LibreMetaverse.LslTools.Parser)`. +pub use crate::generated_tables::GStuff_3; /// C# type: `T:LibreMetaverse.LslTools.GStuff_4`. -pub struct GStuff_4; -impl GStuff_4 { - /// C# member: `M:LibreMetaverse.LslTools.GStuff_4.#ctor(LibreMetaverse.LslTools.Parser)`. - pub fn new(yyq: libremetaverse_lsl_tools::Parser) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.GStuff_4.#ctor(LibreMetaverse.LslTools.Parser)", - ) - } -} +/// C# member: `M:LibreMetaverse.LslTools.GStuff_4.#ctor(LibreMetaverse.LslTools.Parser)`. +pub use crate::generated_tables::GStuff_4; /// C# type: `T:LibreMetaverse.LslTools.GStuff_4_1`. -pub struct GStuff_4_1; -impl GStuff_4_1 { - /// C# member: `M:LibreMetaverse.LslTools.GStuff_4_1.#ctor(LibreMetaverse.LslTools.Parser)`. - pub fn new(yyq: libremetaverse_lsl_tools::Parser) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.GStuff_4_1.#ctor(LibreMetaverse.LslTools.Parser)", - ) - } -} +/// C# member: `M:LibreMetaverse.LslTools.GStuff_4_1.#ctor(LibreMetaverse.LslTools.Parser)`. +pub use crate::generated_tables::GStuff_4_1; /// C# type: `T:LibreMetaverse.LslTools.GStuff_5`. -pub struct GStuff_5; -impl GStuff_5 { - /// C# member: `M:LibreMetaverse.LslTools.GStuff_5.#ctor(LibreMetaverse.LslTools.Parser)`. - pub fn new(yyq: libremetaverse_lsl_tools::Parser) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.GStuff_5.#ctor(LibreMetaverse.LslTools.Parser)", - ) - } -} +/// C# member: `M:LibreMetaverse.LslTools.GStuff_5.#ctor(LibreMetaverse.LslTools.Parser)`. +pub use crate::generated_tables::GStuff_5; /// C# type: `T:LibreMetaverse.LslTools.GStuff_6`. -pub struct GStuff_6; -impl GStuff_6 { - /// C# member: `M:LibreMetaverse.LslTools.GStuff_6.#ctor(LibreMetaverse.LslTools.Parser)`. - pub fn new(yyq: libremetaverse_lsl_tools::Parser) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.GStuff_6.#ctor(LibreMetaverse.LslTools.Parser)", - ) - } -} +/// C# member: `M:LibreMetaverse.LslTools.GStuff_6.#ctor(LibreMetaverse.LslTools.Parser)`. +pub use crate::generated_tables::GStuff_6; /// C# type: `T:LibreMetaverse.LslTools.GStuff_6_1`. -pub struct GStuff_6_1; -impl GStuff_6_1 { - /// C# member: `M:LibreMetaverse.LslTools.GStuff_6_1.#ctor(LibreMetaverse.LslTools.Parser)`. - pub fn new(yyq: libremetaverse_lsl_tools::Parser) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.GStuff_6_1.#ctor(LibreMetaverse.LslTools.Parser)", - ) - } -} +/// C# member: `M:LibreMetaverse.LslTools.GStuff_6_1.#ctor(LibreMetaverse.LslTools.Parser)`. +pub use crate::generated_tables::GStuff_6_1; /// C# type: `T:LibreMetaverse.LslTools.GenBase`. -pub struct GenBase { - /// C# member: `F:LibreMetaverse.LslTools.GenBase.LastSymbol`. - pub last_symbol: i32, - /// C# member: `F:LibreMetaverse.LslTools.GenBase.erh`. - pub erh: libremetaverse_lsl_tools::ErrorHandler, - /// C# member: `F:LibreMetaverse.LslTools.GenBase.m_outFile`. - pub m_out_file: Box, - /// C# member: `F:LibreMetaverse.LslTools.GenBase.m_outname`. - pub m_outname: String, - /// C# member: `F:LibreMetaverse.LslTools.GenBase.m_prod`. - pub m_prod: libremetaverse_lsl_tools::Production, -} -impl GenBase { - /// C# member: `M:LibreMetaverse.LslTools.GenBase.EmitClassDefin(System.String,System.Int32@,System.Int32,LibreMetaverse.LslTools.CsReader,System.String,System.String@,System.String@,System.Boolean)`. - pub fn emit_class_defin( - &self, - b: String, - p: &mut i32, - max: i32, - inf: libremetaverse_lsl_tools::CsReader, - defbas: String, - bas: &mut String, - name: &mut String, - lx: bool, - ) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.GenBase.EmitClassDefin(System.String,System.Int32@,System.Int32,LibreMetaverse.LslTools.CsReader,System.String,System.String@,System.String@,System.Boolean)", - ) - } - /// C# member: `M:LibreMetaverse.LslTools.GenBase.Error(System.Int32,System.Int32,System.String)`. - pub fn error(&self, n: i32, p: i32, str: String) -> Result<(), crate::Error> { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.GenBase.Error(System.Int32,System.Int32,System.String)", - ) - } - /// C# member: `M:LibreMetaverse.LslTools.GenBase.NonWhite(System.String,System.Int32@,System.Int32)`. - pub fn non_white(&self, buf: String, offset: &mut i32, max: i32) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.GenBase.NonWhite(System.String,System.Int32@,System.Int32)", - ) - } - /// C# member: `M:LibreMetaverse.LslTools.GenBase.Saypos(System.Int32)`. - pub fn saypos(&self, pos: i32) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.GenBase.Saypos(System.Int32)", - ) - } - /// C# member: `M:LibreMetaverse.LslTools.GenBase.White(System.String,System.Int32@,System.Int32)`. - pub fn white(&self, buf: String, offset: &mut i32, max: i32) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.GenBase.White(System.String,System.Int32@,System.Int32)", - ) - } - /// C# member: `M:LibreMetaverse.LslTools.GenBase.line(System.Int32)`. - pub fn line(&self, pos: i32) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.GenBase.line(System.Int32)", - ) - } - /// C# member: `M:LibreMetaverse.LslTools.GenBase.position(System.Int32)`. - pub fn position(&self, pos: i32) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.GenBase.position(System.Int32)", - ) - } - /// C# member: `M:LibreMetaverse.LslTools.GenBase.sourceLineInfo(System.Int32)`. - pub fn source_line_info( - &self, - pos: i32, - ) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.GenBase.sourceLineInfo(System.Int32)", - ) - } -} +/// C# member: `F:LibreMetaverse.LslTools.GenBase.LastSymbol`. +/// C# member: `F:LibreMetaverse.LslTools.GenBase.erh`. +/// C# member: `F:LibreMetaverse.LslTools.GenBase.m_outFile`. +/// C# member: `F:LibreMetaverse.LslTools.GenBase.m_outname`. +/// C# member: `F:LibreMetaverse.LslTools.GenBase.m_prod`. +/// C# member: `M:LibreMetaverse.LslTools.GenBase.EmitClassDefin(System.String,System.Int32@,System.Int32,LibreMetaverse.LslTools.CsReader,System.String,System.String@,System.String@,System.Boolean)`. +/// C# member: `M:LibreMetaverse.LslTools.GenBase.Error(System.Int32,System.Int32,System.String)`. +/// C# member: `M:LibreMetaverse.LslTools.GenBase.NonWhite(System.String,System.Int32@,System.Int32)`. +/// C# member: `M:LibreMetaverse.LslTools.GenBase.Saypos(System.Int32)`. +/// C# member: `M:LibreMetaverse.LslTools.GenBase.White(System.String,System.Int32@,System.Int32)`. +/// C# member: `M:LibreMetaverse.LslTools.GenBase.line(System.Int32)`. +/// C# member: `M:LibreMetaverse.LslTools.GenBase.position(System.Int32)`. +/// C# member: `M:LibreMetaverse.LslTools.GenBase.sourceLineInfo(System.Int32)`. +pub use crate::generator::GenBase; /// C# type: `T:LibreMetaverse.LslTools.ID`. -pub struct ID; -impl ID { - /// C# member: `M:LibreMetaverse.LslTools.ID.#ctor(LibreMetaverse.LslTools.Lexer)`. - pub fn new(yyl: libremetaverse_lsl_tools::Lexer) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.ID.#ctor(LibreMetaverse.LslTools.Lexer)", - ) - } - /// C# member: `P:LibreMetaverse.LslTools.ID.yyname`. - pub fn yyname(&self) -> String { - libremetaverse_types::unimplemented_api!("P:LibreMetaverse.LslTools.ID.yyname") - } - /// C# member: `P:LibreMetaverse.LslTools.ID.yynum`. - pub fn yynum(&self) -> i32 { - libremetaverse_types::unimplemented_api!("P:LibreMetaverse.LslTools.ID.yynum") - } -} +/// C# member: `M:LibreMetaverse.LslTools.ID.#ctor(LibreMetaverse.LslTools.Lexer)`. +/// C# member: `P:LibreMetaverse.LslTools.ID.yyname`. +/// C# member: `P:LibreMetaverse.LslTools.ID.yynum`. +pub use crate::generated_tables::ID; /// C# type: `T:LibreMetaverse.LslTools.Item`. -pub struct Item; -impl Item { - /// C# member: `M:LibreMetaverse.LslTools.Item.#ctor(LibreMetaverse.LslTools.Parser)`. - pub fn new(yyq: libremetaverse_lsl_tools::Parser) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.Item.#ctor(LibreMetaverse.LslTools.Parser)", - ) - } - /// C# member: `P:LibreMetaverse.LslTools.Item.yyname`. - pub fn yyname(&self) -> String { - libremetaverse_types::unimplemented_api!("P:LibreMetaverse.LslTools.Item.yyname") - } - /// C# member: `P:LibreMetaverse.LslTools.Item.yynum`. - pub fn yynum(&self) -> i32 { - libremetaverse_types::unimplemented_api!("P:LibreMetaverse.LslTools.Item.yynum") - } -} +/// C# member: `M:LibreMetaverse.LslTools.Item.#ctor(LibreMetaverse.LslTools.Parser)`. +/// C# member: `P:LibreMetaverse.LslTools.Item.yyname`. +/// C# member: `P:LibreMetaverse.LslTools.Item.yynum`. +pub use crate::generated_tables::Item; /// C# type: `T:LibreMetaverse.LslTools.Item_1`. -pub struct Item_1; -impl Item_1 { - /// C# member: `M:LibreMetaverse.LslTools.Item_1.#ctor(LibreMetaverse.LslTools.Parser)`. - pub fn new(yyq: libremetaverse_lsl_tools::Parser) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.Item_1.#ctor(LibreMetaverse.LslTools.Parser)", - ) - } -} +/// C# member: `M:LibreMetaverse.LslTools.Item_1.#ctor(LibreMetaverse.LslTools.Parser)`. +pub use crate::generated_tables::Item_1; /// C# type: `T:LibreMetaverse.LslTools.Item_10`. -pub struct Item_10; -impl Item_10 { - /// C# member: `M:LibreMetaverse.LslTools.Item_10.#ctor(LibreMetaverse.LslTools.Parser)`. - pub fn new(yyq: libremetaverse_lsl_tools::Parser) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.Item_10.#ctor(LibreMetaverse.LslTools.Parser)", - ) - } -} +/// C# member: `M:LibreMetaverse.LslTools.Item_10.#ctor(LibreMetaverse.LslTools.Parser)`. +pub use crate::generated_tables::Item_10; /// C# type: `T:LibreMetaverse.LslTools.Item_10_1`. -pub struct Item_10_1; -impl Item_10_1 { - /// C# member: `M:LibreMetaverse.LslTools.Item_10_1.#ctor(LibreMetaverse.LslTools.Parser)`. - pub fn new(yyq: libremetaverse_lsl_tools::Parser) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.Item_10_1.#ctor(LibreMetaverse.LslTools.Parser)", - ) - } -} +/// C# member: `M:LibreMetaverse.LslTools.Item_10_1.#ctor(LibreMetaverse.LslTools.Parser)`. +pub use crate::generated_tables::Item_10_1; /// C# type: `T:LibreMetaverse.LslTools.Item_11`. -pub struct Item_11; -impl Item_11 { - /// C# member: `M:LibreMetaverse.LslTools.Item_11.#ctor(LibreMetaverse.LslTools.Parser)`. - pub fn new(yyq: libremetaverse_lsl_tools::Parser) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.Item_11.#ctor(LibreMetaverse.LslTools.Parser)", - ) - } -} +/// C# member: `M:LibreMetaverse.LslTools.Item_11.#ctor(LibreMetaverse.LslTools.Parser)`. +pub use crate::generated_tables::Item_11; /// C# type: `T:LibreMetaverse.LslTools.Item_12`. -pub struct Item_12; -impl Item_12 { - /// C# member: `M:LibreMetaverse.LslTools.Item_12.#ctor(LibreMetaverse.LslTools.Parser)`. - pub fn new(yyq: libremetaverse_lsl_tools::Parser) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.Item_12.#ctor(LibreMetaverse.LslTools.Parser)", - ) - } -} +/// C# member: `M:LibreMetaverse.LslTools.Item_12.#ctor(LibreMetaverse.LslTools.Parser)`. +pub use crate::generated_tables::Item_12; /// C# type: `T:LibreMetaverse.LslTools.Item_12_1`. -pub struct Item_12_1; -impl Item_12_1 { - /// C# member: `M:LibreMetaverse.LslTools.Item_12_1.#ctor(LibreMetaverse.LslTools.Parser)`. - pub fn new(yyq: libremetaverse_lsl_tools::Parser) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.Item_12_1.#ctor(LibreMetaverse.LslTools.Parser)", - ) - } -} +/// C# member: `M:LibreMetaverse.LslTools.Item_12_1.#ctor(LibreMetaverse.LslTools.Parser)`. +pub use crate::generated_tables::Item_12_1; /// C# type: `T:LibreMetaverse.LslTools.Item_13`. -pub struct Item_13; -impl Item_13 { - /// C# member: `M:LibreMetaverse.LslTools.Item_13.#ctor(LibreMetaverse.LslTools.Parser)`. - pub fn new(yyq: libremetaverse_lsl_tools::Parser) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.Item_13.#ctor(LibreMetaverse.LslTools.Parser)", - ) - } -} +/// C# member: `M:LibreMetaverse.LslTools.Item_13.#ctor(LibreMetaverse.LslTools.Parser)`. +pub use crate::generated_tables::Item_13; /// C# type: `T:LibreMetaverse.LslTools.Item_14`. -pub struct Item_14; -impl Item_14 { - /// C# member: `M:LibreMetaverse.LslTools.Item_14.#ctor(LibreMetaverse.LslTools.Parser)`. - pub fn new(yyq: libremetaverse_lsl_tools::Parser) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.Item_14.#ctor(LibreMetaverse.LslTools.Parser)", - ) - } -} +/// C# member: `M:LibreMetaverse.LslTools.Item_14.#ctor(LibreMetaverse.LslTools.Parser)`. +pub use crate::generated_tables::Item_14; /// C# type: `T:LibreMetaverse.LslTools.Item_14_1`. -pub struct Item_14_1; -impl Item_14_1 { - /// C# member: `M:LibreMetaverse.LslTools.Item_14_1.#ctor(LibreMetaverse.LslTools.Parser)`. - pub fn new(yyq: libremetaverse_lsl_tools::Parser) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.Item_14_1.#ctor(LibreMetaverse.LslTools.Parser)", - ) - } -} +/// C# member: `M:LibreMetaverse.LslTools.Item_14_1.#ctor(LibreMetaverse.LslTools.Parser)`. +pub use crate::generated_tables::Item_14_1; /// C# type: `T:LibreMetaverse.LslTools.Item_15`. -pub struct Item_15; -impl Item_15 { - /// C# member: `M:LibreMetaverse.LslTools.Item_15.#ctor(LibreMetaverse.LslTools.Parser)`. - pub fn new(yyq: libremetaverse_lsl_tools::Parser) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.Item_15.#ctor(LibreMetaverse.LslTools.Parser)", - ) - } -} +/// C# member: `M:LibreMetaverse.LslTools.Item_15.#ctor(LibreMetaverse.LslTools.Parser)`. +pub use crate::generated_tables::Item_15; /// C# type: `T:LibreMetaverse.LslTools.Item_16`. -pub struct Item_16; -impl Item_16 { - /// C# member: `M:LibreMetaverse.LslTools.Item_16.#ctor(LibreMetaverse.LslTools.Parser)`. - pub fn new(yyq: libremetaverse_lsl_tools::Parser) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.Item_16.#ctor(LibreMetaverse.LslTools.Parser)", - ) - } -} +/// C# member: `M:LibreMetaverse.LslTools.Item_16.#ctor(LibreMetaverse.LslTools.Parser)`. +pub use crate::generated_tables::Item_16; /// C# type: `T:LibreMetaverse.LslTools.Item_16_1`. -pub struct Item_16_1; -impl Item_16_1 { - /// C# member: `M:LibreMetaverse.LslTools.Item_16_1.#ctor(LibreMetaverse.LslTools.Parser)`. - pub fn new(yyq: libremetaverse_lsl_tools::Parser) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.Item_16_1.#ctor(LibreMetaverse.LslTools.Parser)", - ) - } -} +/// C# member: `M:LibreMetaverse.LslTools.Item_16_1.#ctor(LibreMetaverse.LslTools.Parser)`. +pub use crate::generated_tables::Item_16_1; /// C# type: `T:LibreMetaverse.LslTools.Item_17`. -pub struct Item_17; -impl Item_17 { - /// C# member: `M:LibreMetaverse.LslTools.Item_17.#ctor(LibreMetaverse.LslTools.Parser)`. - pub fn new(yyq: libremetaverse_lsl_tools::Parser) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.Item_17.#ctor(LibreMetaverse.LslTools.Parser)", - ) - } -} +/// C# member: `M:LibreMetaverse.LslTools.Item_17.#ctor(LibreMetaverse.LslTools.Parser)`. +pub use crate::generated_tables::Item_17; /// C# type: `T:LibreMetaverse.LslTools.Item_18`. -pub struct Item_18; -impl Item_18 { - /// C# member: `M:LibreMetaverse.LslTools.Item_18.#ctor(LibreMetaverse.LslTools.Parser)`. - pub fn new(yyq: libremetaverse_lsl_tools::Parser) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.Item_18.#ctor(LibreMetaverse.LslTools.Parser)", - ) - } -} +/// C# member: `M:LibreMetaverse.LslTools.Item_18.#ctor(LibreMetaverse.LslTools.Parser)`. +pub use crate::generated_tables::Item_18; /// C# type: `T:LibreMetaverse.LslTools.Item_18_1`. -pub struct Item_18_1; -impl Item_18_1 { - /// C# member: `M:LibreMetaverse.LslTools.Item_18_1.#ctor(LibreMetaverse.LslTools.Parser)`. - pub fn new(yyq: libremetaverse_lsl_tools::Parser) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.Item_18_1.#ctor(LibreMetaverse.LslTools.Parser)", - ) - } -} +/// C# member: `M:LibreMetaverse.LslTools.Item_18_1.#ctor(LibreMetaverse.LslTools.Parser)`. +pub use crate::generated_tables::Item_18_1; /// C# type: `T:LibreMetaverse.LslTools.Item_19`. -pub struct Item_19; -impl Item_19 { - /// C# member: `M:LibreMetaverse.LslTools.Item_19.#ctor(LibreMetaverse.LslTools.Parser)`. - pub fn new(yyq: libremetaverse_lsl_tools::Parser) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.Item_19.#ctor(LibreMetaverse.LslTools.Parser)", - ) - } -} +/// C# member: `M:LibreMetaverse.LslTools.Item_19.#ctor(LibreMetaverse.LslTools.Parser)`. +pub use crate::generated_tables::Item_19; /// C# type: `T:LibreMetaverse.LslTools.Item_2`. -pub struct Item_2; -impl Item_2 { - /// C# member: `M:LibreMetaverse.LslTools.Item_2.#ctor(LibreMetaverse.LslTools.Parser)`. - pub fn new(yyq: libremetaverse_lsl_tools::Parser) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.Item_2.#ctor(LibreMetaverse.LslTools.Parser)", - ) - } -} +/// C# member: `M:LibreMetaverse.LslTools.Item_2.#ctor(LibreMetaverse.LslTools.Parser)`. +pub use crate::generated_tables::Item_2; /// C# type: `T:LibreMetaverse.LslTools.Item_20`. -pub struct Item_20; -impl Item_20 { - /// C# member: `M:LibreMetaverse.LslTools.Item_20.#ctor(LibreMetaverse.LslTools.Parser)`. - pub fn new(yyq: libremetaverse_lsl_tools::Parser) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.Item_20.#ctor(LibreMetaverse.LslTools.Parser)", - ) - } -} +/// C# member: `M:LibreMetaverse.LslTools.Item_20.#ctor(LibreMetaverse.LslTools.Parser)`. +pub use crate::generated_tables::Item_20; /// C# type: `T:LibreMetaverse.LslTools.Item_20_1`. -pub struct Item_20_1; -impl Item_20_1 { - /// C# member: `M:LibreMetaverse.LslTools.Item_20_1.#ctor(LibreMetaverse.LslTools.Parser)`. - pub fn new(yyq: libremetaverse_lsl_tools::Parser) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.Item_20_1.#ctor(LibreMetaverse.LslTools.Parser)", - ) - } -} +/// C# member: `M:LibreMetaverse.LslTools.Item_20_1.#ctor(LibreMetaverse.LslTools.Parser)`. +pub use crate::generated_tables::Item_20_1; /// C# type: `T:LibreMetaverse.LslTools.Item_21`. -pub struct Item_21; -impl Item_21 { - /// C# member: `M:LibreMetaverse.LslTools.Item_21.#ctor(LibreMetaverse.LslTools.Parser)`. - pub fn new(yyq: libremetaverse_lsl_tools::Parser) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.Item_21.#ctor(LibreMetaverse.LslTools.Parser)", - ) - } -} +/// C# member: `M:LibreMetaverse.LslTools.Item_21.#ctor(LibreMetaverse.LslTools.Parser)`. +pub use crate::generated_tables::Item_21; /// C# type: `T:LibreMetaverse.LslTools.Item_22`. -pub struct Item_22; -impl Item_22 { - /// C# member: `M:LibreMetaverse.LslTools.Item_22.#ctor(LibreMetaverse.LslTools.Parser)`. - pub fn new(yyq: libremetaverse_lsl_tools::Parser) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.Item_22.#ctor(LibreMetaverse.LslTools.Parser)", - ) - } -} +/// C# member: `M:LibreMetaverse.LslTools.Item_22.#ctor(LibreMetaverse.LslTools.Parser)`. +pub use crate::generated_tables::Item_22; /// C# type: `T:LibreMetaverse.LslTools.Item_22_1`. -pub struct Item_22_1; -impl Item_22_1 { - /// C# member: `M:LibreMetaverse.LslTools.Item_22_1.#ctor(LibreMetaverse.LslTools.Parser)`. - pub fn new(yyq: libremetaverse_lsl_tools::Parser) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.Item_22_1.#ctor(LibreMetaverse.LslTools.Parser)", - ) - } -} +/// C# member: `M:LibreMetaverse.LslTools.Item_22_1.#ctor(LibreMetaverse.LslTools.Parser)`. +pub use crate::generated_tables::Item_22_1; /// C# type: `T:LibreMetaverse.LslTools.Item_23`. -pub struct Item_23; -impl Item_23 { - /// C# member: `M:LibreMetaverse.LslTools.Item_23.#ctor(LibreMetaverse.LslTools.Parser)`. - pub fn new(yyq: libremetaverse_lsl_tools::Parser) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.Item_23.#ctor(LibreMetaverse.LslTools.Parser)", - ) - } -} +/// C# member: `M:LibreMetaverse.LslTools.Item_23.#ctor(LibreMetaverse.LslTools.Parser)`. +pub use crate::generated_tables::Item_23; /// C# type: `T:LibreMetaverse.LslTools.Item_24`. -pub struct Item_24; -impl Item_24 { - /// C# member: `M:LibreMetaverse.LslTools.Item_24.#ctor(LibreMetaverse.LslTools.Parser)`. - pub fn new(yyq: libremetaverse_lsl_tools::Parser) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.Item_24.#ctor(LibreMetaverse.LslTools.Parser)", - ) - } -} +/// C# member: `M:LibreMetaverse.LslTools.Item_24.#ctor(LibreMetaverse.LslTools.Parser)`. +pub use crate::generated_tables::Item_24; /// C# type: `T:LibreMetaverse.LslTools.Item_24_1`. -pub struct Item_24_1; -impl Item_24_1 { - /// C# member: `M:LibreMetaverse.LslTools.Item_24_1.#ctor(LibreMetaverse.LslTools.Parser)`. - pub fn new(yyq: libremetaverse_lsl_tools::Parser) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.Item_24_1.#ctor(LibreMetaverse.LslTools.Parser)", - ) - } -} +/// C# member: `M:LibreMetaverse.LslTools.Item_24_1.#ctor(LibreMetaverse.LslTools.Parser)`. +pub use crate::generated_tables::Item_24_1; /// C# type: `T:LibreMetaverse.LslTools.Item_2_1`. -pub struct Item_2_1; -impl Item_2_1 { - /// C# member: `M:LibreMetaverse.LslTools.Item_2_1.#ctor(LibreMetaverse.LslTools.Parser)`. - pub fn new(yyq: libremetaverse_lsl_tools::Parser) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.Item_2_1.#ctor(LibreMetaverse.LslTools.Parser)", - ) - } -} +/// C# member: `M:LibreMetaverse.LslTools.Item_2_1.#ctor(LibreMetaverse.LslTools.Parser)`. +pub use crate::generated_tables::Item_2_1; /// C# type: `T:LibreMetaverse.LslTools.Item_3`. -pub struct Item_3; -impl Item_3 { - /// C# member: `M:LibreMetaverse.LslTools.Item_3.#ctor(LibreMetaverse.LslTools.Parser)`. - pub fn new(yyq: libremetaverse_lsl_tools::Parser) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.Item_3.#ctor(LibreMetaverse.LslTools.Parser)", - ) - } -} +/// C# member: `M:LibreMetaverse.LslTools.Item_3.#ctor(LibreMetaverse.LslTools.Parser)`. +pub use crate::generated_tables::Item_3; /// C# type: `T:LibreMetaverse.LslTools.Item_4`. -pub struct Item_4; -impl Item_4 { - /// C# member: `M:LibreMetaverse.LslTools.Item_4.#ctor(LibreMetaverse.LslTools.Parser)`. - pub fn new(yyq: libremetaverse_lsl_tools::Parser) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.Item_4.#ctor(LibreMetaverse.LslTools.Parser)", - ) - } -} +/// C# member: `M:LibreMetaverse.LslTools.Item_4.#ctor(LibreMetaverse.LslTools.Parser)`. +pub use crate::generated_tables::Item_4; /// C# type: `T:LibreMetaverse.LslTools.Item_4_1`. -pub struct Item_4_1; -impl Item_4_1 { - /// C# member: `M:LibreMetaverse.LslTools.Item_4_1.#ctor(LibreMetaverse.LslTools.Parser)`. - pub fn new(yyq: libremetaverse_lsl_tools::Parser) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.Item_4_1.#ctor(LibreMetaverse.LslTools.Parser)", - ) - } -} +/// C# member: `M:LibreMetaverse.LslTools.Item_4_1.#ctor(LibreMetaverse.LslTools.Parser)`. +pub use crate::generated_tables::Item_4_1; /// C# type: `T:LibreMetaverse.LslTools.Item_5`. -pub struct Item_5; -impl Item_5 { - /// C# member: `M:LibreMetaverse.LslTools.Item_5.#ctor(LibreMetaverse.LslTools.Parser)`. - pub fn new(yyq: libremetaverse_lsl_tools::Parser) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.Item_5.#ctor(LibreMetaverse.LslTools.Parser)", - ) - } -} +/// C# member: `M:LibreMetaverse.LslTools.Item_5.#ctor(LibreMetaverse.LslTools.Parser)`. +pub use crate::generated_tables::Item_5; /// C# type: `T:LibreMetaverse.LslTools.Item_6`. -pub struct Item_6; -impl Item_6 { - /// C# member: `M:LibreMetaverse.LslTools.Item_6.#ctor(LibreMetaverse.LslTools.Parser)`. - pub fn new(yyq: libremetaverse_lsl_tools::Parser) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.Item_6.#ctor(LibreMetaverse.LslTools.Parser)", - ) - } -} +/// C# member: `M:LibreMetaverse.LslTools.Item_6.#ctor(LibreMetaverse.LslTools.Parser)`. +pub use crate::generated_tables::Item_6; /// C# type: `T:LibreMetaverse.LslTools.Item_6_1`. -pub struct Item_6_1; -impl Item_6_1 { - /// C# member: `M:LibreMetaverse.LslTools.Item_6_1.#ctor(LibreMetaverse.LslTools.Parser)`. - pub fn new(yyq: libremetaverse_lsl_tools::Parser) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.Item_6_1.#ctor(LibreMetaverse.LslTools.Parser)", - ) - } -} +/// C# member: `M:LibreMetaverse.LslTools.Item_6_1.#ctor(LibreMetaverse.LslTools.Parser)`. +pub use crate::generated_tables::Item_6_1; /// C# type: `T:LibreMetaverse.LslTools.Item_7`. -pub struct Item_7; -impl Item_7 { - /// C# member: `M:LibreMetaverse.LslTools.Item_7.#ctor(LibreMetaverse.LslTools.Parser)`. - pub fn new(yyq: libremetaverse_lsl_tools::Parser) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.Item_7.#ctor(LibreMetaverse.LslTools.Parser)", - ) - } -} +/// C# member: `M:LibreMetaverse.LslTools.Item_7.#ctor(LibreMetaverse.LslTools.Parser)`. +pub use crate::generated_tables::Item_7; /// C# type: `T:LibreMetaverse.LslTools.Item_8`. -pub struct Item_8; -impl Item_8 { - /// C# member: `M:LibreMetaverse.LslTools.Item_8.#ctor(LibreMetaverse.LslTools.Parser)`. - pub fn new(yyq: libremetaverse_lsl_tools::Parser) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.Item_8.#ctor(LibreMetaverse.LslTools.Parser)", - ) - } -} +/// C# member: `M:LibreMetaverse.LslTools.Item_8.#ctor(LibreMetaverse.LslTools.Parser)`. +pub use crate::generated_tables::Item_8; /// C# type: `T:LibreMetaverse.LslTools.Item_8_1`. -pub struct Item_8_1; -impl Item_8_1 { - /// C# member: `M:LibreMetaverse.LslTools.Item_8_1.#ctor(LibreMetaverse.LslTools.Parser)`. - pub fn new(yyq: libremetaverse_lsl_tools::Parser) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.Item_8_1.#ctor(LibreMetaverse.LslTools.Parser)", - ) - } -} +/// C# member: `M:LibreMetaverse.LslTools.Item_8_1.#ctor(LibreMetaverse.LslTools.Parser)`. +pub use crate::generated_tables::Item_8_1; /// C# type: `T:LibreMetaverse.LslTools.Item_9`. -pub struct Item_9; -impl Item_9 { - /// C# member: `M:LibreMetaverse.LslTools.Item_9.#ctor(LibreMetaverse.LslTools.Parser)`. - pub fn new(yyq: libremetaverse_lsl_tools::Parser) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.Item_9.#ctor(LibreMetaverse.LslTools.Parser)", - ) - } -} +/// C# member: `M:LibreMetaverse.LslTools.Item_9.#ctor(LibreMetaverse.LslTools.Parser)`. +pub use crate::generated_tables::Item_9; /// C# type: `T:LibreMetaverse.LslTools.LBRACE`. -pub struct LBRACE; -impl LBRACE { - /// C# member: `M:LibreMetaverse.LslTools.LBRACE.#ctor(LibreMetaverse.LslTools.Lexer)`. - pub fn new(yyl: libremetaverse_lsl_tools::Lexer) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.LBRACE.#ctor(LibreMetaverse.LslTools.Lexer)", - ) - } - /// C# member: `P:LibreMetaverse.LslTools.LBRACE.yyname`. - pub fn yyname(&self) -> String { - libremetaverse_types::unimplemented_api!("P:LibreMetaverse.LslTools.LBRACE.yyname") - } - /// C# member: `P:LibreMetaverse.LslTools.LBRACE.yynum`. - pub fn yynum(&self) -> i32 { - libremetaverse_types::unimplemented_api!("P:LibreMetaverse.LslTools.LBRACE.yynum") - } -} +/// C# member: `M:LibreMetaverse.LslTools.LBRACE.#ctor(LibreMetaverse.LslTools.Lexer)`. +/// C# member: `P:LibreMetaverse.LslTools.LBRACE.yyname`. +/// C# member: `P:LibreMetaverse.LslTools.LBRACE.yynum`. +pub use crate::generated_tables::LBRACE; /// C# type: `T:LibreMetaverse.LslTools.LBRACK`. -pub struct LBRACK; -impl LBRACK { - /// C# member: `M:LibreMetaverse.LslTools.LBRACK.#ctor(LibreMetaverse.LslTools.Lexer)`. - pub fn new(yyl: libremetaverse_lsl_tools::Lexer) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.LBRACK.#ctor(LibreMetaverse.LslTools.Lexer)", - ) - } - /// C# member: `P:LibreMetaverse.LslTools.LBRACK.yyname`. - pub fn yyname(&self) -> String { - libremetaverse_types::unimplemented_api!("P:LibreMetaverse.LslTools.LBRACK.yyname") - } - /// C# member: `P:LibreMetaverse.LslTools.LBRACK.yynum`. - pub fn yynum(&self) -> i32 { - libremetaverse_types::unimplemented_api!("P:LibreMetaverse.LslTools.LBRACK.yynum") - } -} +/// C# member: `M:LibreMetaverse.LslTools.LBRACK.#ctor(LibreMetaverse.LslTools.Lexer)`. +/// C# member: `P:LibreMetaverse.LslTools.LBRACK.yyname`. +/// C# member: `P:LibreMetaverse.LslTools.LBRACK.yynum`. +pub use crate::generated_tables::LBRACK; /// C# type: `T:LibreMetaverse.LslTools.LNode`. -pub struct LNode { - /// C# member: `F:LibreMetaverse.LslTools.LNode.m_state`. - pub m_state: i32, - /// C# member: `F:LibreMetaverse.LslTools.LNode.m_tks`. - pub m_tks: libremetaverse_lsl_tools::TokensGen, -} -impl LNode {} +/// C# member: `F:LibreMetaverse.LslTools.LNode.m_state`. +/// C# member: `F:LibreMetaverse.LslTools.LNode.m_tks`. +pub use crate::generator::LNode; /// C# type: `T:LibreMetaverse.LslTools.LPAREN`. -pub struct LPAREN; -impl LPAREN { - /// C# member: `M:LibreMetaverse.LslTools.LPAREN.#ctor(LibreMetaverse.LslTools.Lexer)`. - pub fn new(yyl: libremetaverse_lsl_tools::Lexer) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.LPAREN.#ctor(LibreMetaverse.LslTools.Lexer)", - ) - } - /// C# member: `P:LibreMetaverse.LslTools.LPAREN.yyname`. - pub fn yyname(&self) -> String { - libremetaverse_types::unimplemented_api!("P:LibreMetaverse.LslTools.LPAREN.yyname") - } - /// C# member: `P:LibreMetaverse.LslTools.LPAREN.yynum`. - pub fn yynum(&self) -> i32 { - libremetaverse_types::unimplemented_api!("P:LibreMetaverse.LslTools.LPAREN.yynum") - } -} +/// C# member: `M:LibreMetaverse.LslTools.LPAREN.#ctor(LibreMetaverse.LslTools.Lexer)`. +/// C# member: `P:LibreMetaverse.LslTools.LPAREN.yyname`. +/// C# member: `P:LibreMetaverse.LslTools.LPAREN.yynum`. +pub use crate::generated_tables::LPAREN; /// C# type: `T:LibreMetaverse.LslTools.Lexer`. /// C# member: `F:LibreMetaverse.LslTools.Lexer.m_buf`. @@ -1367,197 +585,58 @@ pub use crate::lexer::LineManager; pub use crate::parser::Literal; /// C# type: `T:LibreMetaverse.LslTools.NEW`. -pub struct NEW; -impl NEW { - /// C# member: `M:LibreMetaverse.LslTools.NEW.#ctor(LibreMetaverse.LslTools.Lexer)`. - pub fn new(yyl: libremetaverse_lsl_tools::Lexer) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.NEW.#ctor(LibreMetaverse.LslTools.Lexer)", - ) - } - /// C# member: `P:LibreMetaverse.LslTools.NEW.yyname`. - pub fn yyname(&self) -> String { - libremetaverse_types::unimplemented_api!("P:LibreMetaverse.LslTools.NEW.yyname") - } - /// C# member: `P:LibreMetaverse.LslTools.NEW.yynum`. - pub fn yynum(&self) -> i32 { - libremetaverse_types::unimplemented_api!("P:LibreMetaverse.LslTools.NEW.yynum") - } -} +/// C# member: `M:LibreMetaverse.LslTools.NEW.#ctor(LibreMetaverse.LslTools.Lexer)`. +/// C# member: `P:LibreMetaverse.LslTools.NEW.yyname`. +/// C# member: `P:LibreMetaverse.LslTools.NEW.yynum`. +pub use crate::generated_tables::NEW; /// C# type: `T:LibreMetaverse.LslTools.Name`. -pub struct Name; -impl Name { - /// C# member: `M:LibreMetaverse.LslTools.Name.#ctor(LibreMetaverse.LslTools.Parser)`. - pub fn new(yyq: libremetaverse_lsl_tools::Parser) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.Name.#ctor(LibreMetaverse.LslTools.Parser)", - ) - } - /// C# member: `P:LibreMetaverse.LslTools.Name.yyname`. - pub fn yyname(&self) -> String { - libremetaverse_types::unimplemented_api!("P:LibreMetaverse.LslTools.Name.yyname") - } - /// C# member: `P:LibreMetaverse.LslTools.Name.yynum`. - pub fn yynum(&self) -> i32 { - libremetaverse_types::unimplemented_api!("P:LibreMetaverse.LslTools.Name.yynum") - } -} +/// C# member: `M:LibreMetaverse.LslTools.Name.#ctor(LibreMetaverse.LslTools.Parser)`. +/// C# member: `P:LibreMetaverse.LslTools.Name.yyname`. +/// C# member: `P:LibreMetaverse.LslTools.Name.yynum`. +pub use crate::generated_tables::Name; /// C# type: `T:LibreMetaverse.LslTools.Name_1`. -pub struct Name_1; -impl Name_1 { - /// C# member: `M:LibreMetaverse.LslTools.Name_1.#ctor(LibreMetaverse.LslTools.Parser)`. - pub fn new(yyq: libremetaverse_lsl_tools::Parser) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.Name_1.#ctor(LibreMetaverse.LslTools.Parser)", - ) - } -} +/// C# member: `M:LibreMetaverse.LslTools.Name_1.#ctor(LibreMetaverse.LslTools.Parser)`. +pub use crate::generated_tables::Name_1; /// C# type: `T:LibreMetaverse.LslTools.Name_2`. -pub struct Name_2; -impl Name_2 { - /// C# member: `M:LibreMetaverse.LslTools.Name_2.#ctor(LibreMetaverse.LslTools.Parser)`. - pub fn new(yyq: libremetaverse_lsl_tools::Parser) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.Name_2.#ctor(LibreMetaverse.LslTools.Parser)", - ) - } -} +/// C# member: `M:LibreMetaverse.LslTools.Name_2.#ctor(LibreMetaverse.LslTools.Parser)`. +pub use crate::generated_tables::Name_2; /// C# type: `T:LibreMetaverse.LslTools.Name_2_1`. -pub struct Name_2_1; -impl Name_2_1 { - /// C# member: `M:LibreMetaverse.LslTools.Name_2_1.#ctor(LibreMetaverse.LslTools.Parser)`. - pub fn new(yyq: libremetaverse_lsl_tools::Parser) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.Name_2_1.#ctor(LibreMetaverse.LslTools.Parser)", - ) - } -} +/// C# member: `M:LibreMetaverse.LslTools.Name_2_1.#ctor(LibreMetaverse.LslTools.Parser)`. +pub use crate::generated_tables::Name_2_1; /// C# type: `T:LibreMetaverse.LslTools.Name_3`. -pub struct Name_3; -impl Name_3 { - /// C# member: `M:LibreMetaverse.LslTools.Name_3.#ctor(LibreMetaverse.LslTools.Parser)`. - pub fn new(yyq: libremetaverse_lsl_tools::Parser) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.Name_3.#ctor(LibreMetaverse.LslTools.Parser)", - ) - } -} +/// C# member: `M:LibreMetaverse.LslTools.Name_3.#ctor(LibreMetaverse.LslTools.Parser)`. +pub use crate::generated_tables::Name_3; /// C# type: `T:LibreMetaverse.LslTools.Name_4`. -pub struct Name_4; -impl Name_4 { - /// C# member: `M:LibreMetaverse.LslTools.Name_4.#ctor(LibreMetaverse.LslTools.Parser)`. - pub fn new(yyq: libremetaverse_lsl_tools::Parser) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.Name_4.#ctor(LibreMetaverse.LslTools.Parser)", - ) - } -} +/// C# member: `M:LibreMetaverse.LslTools.Name_4.#ctor(LibreMetaverse.LslTools.Parser)`. +pub use crate::generated_tables::Name_4; /// C# type: `T:LibreMetaverse.LslTools.Name_4_1`. -pub struct Name_4_1; -impl Name_4_1 { - /// C# member: `M:LibreMetaverse.LslTools.Name_4_1.#ctor(LibreMetaverse.LslTools.Parser)`. - pub fn new(yyq: libremetaverse_lsl_tools::Parser) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.Name_4_1.#ctor(LibreMetaverse.LslTools.Parser)", - ) - } -} +/// C# member: `M:LibreMetaverse.LslTools.Name_4_1.#ctor(LibreMetaverse.LslTools.Parser)`. +pub use crate::generated_tables::Name_4_1; /// C# type: `T:LibreMetaverse.LslTools.Nfa`. -pub struct Nfa { - /// C# member: `F:LibreMetaverse.LslTools.Nfa.m_end`. - pub m_end: libremetaverse_lsl_tools::NfaNode, -} -impl Nfa { - /// C# member: `M:LibreMetaverse.LslTools.Nfa.#ctor(LibreMetaverse.LslTools.TokensGen)`. - pub fn new_with_tokens_gen( - tks: libremetaverse_lsl_tools::TokensGen, - ) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.Nfa.#ctor(LibreMetaverse.LslTools.TokensGen)", - ) - } - /// C# member: `M:LibreMetaverse.LslTools.Nfa.#ctor(LibreMetaverse.LslTools.TokensGen,LibreMetaverse.LslTools.Regex)`. - pub fn new_with_tokens_gen_regex( - tks: libremetaverse_lsl_tools::TokensGen, - re: libremetaverse_lsl_tools::Regex, - ) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.Nfa.#ctor(LibreMetaverse.LslTools.TokensGen,LibreMetaverse.LslTools.Regex)", - ) - } -} +/// C# member: `F:LibreMetaverse.LslTools.Nfa.m_end`. +/// C# member: `M:LibreMetaverse.LslTools.Nfa.#ctor(LibreMetaverse.LslTools.TokensGen)`. +/// C# member: `M:LibreMetaverse.LslTools.Nfa.#ctor(LibreMetaverse.LslTools.TokensGen,LibreMetaverse.LslTools.Regex)`. +pub use crate::generator::Nfa; /// C# type: `T:LibreMetaverse.LslTools.NfaNode`. -pub struct NfaNode { - /// C# member: `F:LibreMetaverse.LslTools.NfaNode.m_arcs`. - pub m_arcs: libremetaverse_lsl_tools::ObjectList, - /// C# member: `F:LibreMetaverse.LslTools.NfaNode.m_eps`. - pub m_eps: libremetaverse_lsl_tools::ObjectList, - /// C# member: `F:LibreMetaverse.LslTools.NfaNode.m_sTerminal`. - pub m_s_terminal: String, -} -impl NfaNode { - /// C# member: `M:LibreMetaverse.LslTools.NfaNode.#ctor(LibreMetaverse.LslTools.TokensGen)`. - pub fn new(tks: libremetaverse_lsl_tools::TokensGen) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.NfaNode.#ctor(LibreMetaverse.LslTools.TokensGen)", - ) - } - /// C# member: `M:LibreMetaverse.LslTools.NfaNode.AddArc(System.Char,LibreMetaverse.LslTools.NfaNode)`. - pub fn add_arc( - &self, - ch: libremetaverse_types::compat::Utf16CodeUnit, - next: libremetaverse_lsl_tools::NfaNode, - ) -> Result<(), crate::Error> { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.NfaNode.AddArc(System.Char,LibreMetaverse.LslTools.NfaNode)", - ) - } - /// C# member: `M:LibreMetaverse.LslTools.NfaNode.AddArcEx(LibreMetaverse.LslTools.Regex,LibreMetaverse.LslTools.NfaNode)`. - pub fn add_arc_ex( - &self, - re: libremetaverse_lsl_tools::Regex, - next: libremetaverse_lsl_tools::NfaNode, - ) -> Result<(), crate::Error> { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.NfaNode.AddArcEx(LibreMetaverse.LslTools.Regex,LibreMetaverse.LslTools.NfaNode)", - ) - } - /// C# member: `M:LibreMetaverse.LslTools.NfaNode.AddEps(LibreMetaverse.LslTools.NfaNode)`. - pub fn add_eps(&self, next: libremetaverse_lsl_tools::NfaNode) -> Result<(), crate::Error> { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.NfaNode.AddEps(LibreMetaverse.LslTools.NfaNode)", - ) - } - /// C# member: `M:LibreMetaverse.LslTools.NfaNode.AddTarget(System.Char,LibreMetaverse.LslTools.Dfa)`. - pub fn add_target( - &self, - ch: libremetaverse_types::compat::Utf16CodeUnit, - next: libremetaverse_lsl_tools::Dfa, - ) -> Result<(), crate::Error> { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.NfaNode.AddTarget(System.Char,LibreMetaverse.LslTools.Dfa)", - ) - } - /// C# member: `M:LibreMetaverse.LslTools.NfaNode.AddUArc(System.Char,LibreMetaverse.LslTools.NfaNode)`. - pub fn add_u_arc( - &self, - ch: libremetaverse_types::compat::Utf16CodeUnit, - next: libremetaverse_lsl_tools::NfaNode, - ) -> Result<(), crate::Error> { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.NfaNode.AddUArc(System.Char,LibreMetaverse.LslTools.NfaNode)", - ) - } -} +/// C# member: `F:LibreMetaverse.LslTools.NfaNode.m_arcs`. +/// C# member: `F:LibreMetaverse.LslTools.NfaNode.m_eps`. +/// C# member: `F:LibreMetaverse.LslTools.NfaNode.m_sTerminal`. +/// C# member: `M:LibreMetaverse.LslTools.NfaNode.#ctor(LibreMetaverse.LslTools.TokensGen)`. +/// C# member: `M:LibreMetaverse.LslTools.NfaNode.AddArc(System.Char,LibreMetaverse.LslTools.NfaNode)`. +/// C# member: `M:LibreMetaverse.LslTools.NfaNode.AddArcEx(LibreMetaverse.LslTools.Regex,LibreMetaverse.LslTools.NfaNode)`. +/// C# member: `M:LibreMetaverse.LslTools.NfaNode.AddEps(LibreMetaverse.LslTools.NfaNode)`. +/// C# member: `M:LibreMetaverse.LslTools.NfaNode.AddTarget(System.Char,LibreMetaverse.LslTools.Dfa)`. +/// C# member: `M:LibreMetaverse.LslTools.NfaNode.AddUArc(System.Char,LibreMetaverse.LslTools.NfaNode)`. +pub use crate::generator::NfaNode; /// C# type: `T:LibreMetaverse.LslTools.Null`. /// C# member: `M:LibreMetaverse.LslTools.Null.#ctor(LibreMetaverse.LslTools.Lexer,System.String)`. @@ -1577,33 +656,11 @@ pub use crate::lexer::Null; pub use crate::lexer::ObjectList; /// C# type: `T:LibreMetaverse.LslTools.ObjectList.OListEnumerator`. -pub struct ObjectListOListEnumerator; -impl ObjectListOListEnumerator { - /// C# member: `M:LibreMetaverse.LslTools.ObjectList.OListEnumerator.#ctor(LibreMetaverse.LslTools.ObjectList)`. - pub fn new(o: libremetaverse_lsl_tools::ObjectList) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.ObjectList.OListEnumerator.#ctor(LibreMetaverse.LslTools.ObjectList)", - ) - } - /// C# member: `M:LibreMetaverse.LslTools.ObjectList.OListEnumerator.MoveNext`. - pub fn move_next(&self) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.ObjectList.OListEnumerator.MoveNext", - ) - } - /// C# member: `M:LibreMetaverse.LslTools.ObjectList.OListEnumerator.Reset`. - pub fn reset(&self) -> Result<(), crate::Error> { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.ObjectList.OListEnumerator.Reset", - ) - } - /// C# member: `P:LibreMetaverse.LslTools.ObjectList.OListEnumerator.Current`. - pub fn current(&self) -> libremetaverse_types::compat::Object { - libremetaverse_types::unimplemented_api!( - "P:LibreMetaverse.LslTools.ObjectList.OListEnumerator.Current" - ) - } -} +/// C# member: `M:LibreMetaverse.LslTools.ObjectList.OListEnumerator.#ctor(LibreMetaverse.LslTools.ObjectList)`. +/// C# member: `M:LibreMetaverse.LslTools.ObjectList.OListEnumerator.MoveNext`. +/// C# member: `M:LibreMetaverse.LslTools.ObjectList.OListEnumerator.Reset`. +/// C# member: `P:LibreMetaverse.LslTools.ObjectList.OListEnumerator.Current`. +pub use crate::generator::ObjectListOListEnumerator; /// C# type: `T:LibreMetaverse.LslTools.ParseStackEntry`. /// C# member: `F:LibreMetaverse.LslTools.ParseStackEntry.m_state`. @@ -1713,45 +770,13 @@ pub use crate::parser::ParserSimpleAction; pub use crate::parser::ParsingInfo; /// C# type: `T:LibreMetaverse.LslTools.Path`. -pub struct Path { - /// C# member: `F:LibreMetaverse.LslTools.Path.valid`. - pub valid: bool, -} -impl Path { - /// C# member: `M:LibreMetaverse.LslTools.Path.#ctor(LibreMetaverse.LslTools.CSymbol[])`. - pub fn new_with_c_symbol_array( - x: Vec, - ) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.Path.#ctor(LibreMetaverse.LslTools.CSymbol[])", - ) - } - /// C# member: `M:LibreMetaverse.LslTools.Path.#ctor(LibreMetaverse.LslTools.ParseState,LibreMetaverse.LslTools.CSymbol[])`. - pub fn new_with_parse_state_c_symbol_array( - q: libremetaverse_lsl_tools::ParseState, - x: Vec, - ) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.Path.#ctor(LibreMetaverse.LslTools.ParseState,LibreMetaverse.LslTools.CSymbol[])", - ) - } - /// C# member: `M:LibreMetaverse.LslTools.Path.#ctor(LibreMetaverse.LslTools.ParseState[])`. - pub fn new_with_parse_state_array( - s: Vec, - ) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.Path.#ctor(LibreMetaverse.LslTools.ParseState[])", - ) - } - /// C# member: `P:LibreMetaverse.LslTools.Path.Spelling`. - pub fn spelling(&self) -> Vec { - libremetaverse_types::unimplemented_api!("P:LibreMetaverse.LslTools.Path.Spelling") - } - /// C# member: `P:LibreMetaverse.LslTools.Path.Top`. - pub fn top(&self) -> libremetaverse_lsl_tools::ParseState { - libremetaverse_types::unimplemented_api!("P:LibreMetaverse.LslTools.Path.Top") - } -} +/// C# member: `F:LibreMetaverse.LslTools.Path.valid`. +/// C# member: `M:LibreMetaverse.LslTools.Path.#ctor(LibreMetaverse.LslTools.CSymbol[])`. +/// C# member: `M:LibreMetaverse.LslTools.Path.#ctor(LibreMetaverse.LslTools.ParseState,LibreMetaverse.LslTools.CSymbol[])`. +/// C# member: `M:LibreMetaverse.LslTools.Path.#ctor(LibreMetaverse.LslTools.ParseState[])`. +/// C# member: `P:LibreMetaverse.LslTools.Path.Spelling`. +/// C# member: `P:LibreMetaverse.LslTools.Path.Top`. +pub use crate::generator::Path; /// C# type: `T:LibreMetaverse.LslTools.Precedence`. /// C# member: `F:LibreMetaverse.LslTools.Precedence.m_next`. @@ -1801,158 +826,39 @@ pub use crate::parser::ProdItem; pub use crate::parser::Production; /// C# type: `T:LibreMetaverse.LslTools.RBRACE`. -pub struct RBRACE; -impl RBRACE { - /// C# member: `M:LibreMetaverse.LslTools.RBRACE.#ctor(LibreMetaverse.LslTools.Lexer)`. - pub fn new(yyl: libremetaverse_lsl_tools::Lexer) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.RBRACE.#ctor(LibreMetaverse.LslTools.Lexer)", - ) - } - /// C# member: `P:LibreMetaverse.LslTools.RBRACE.yyname`. - pub fn yyname(&self) -> String { - libremetaverse_types::unimplemented_api!("P:LibreMetaverse.LslTools.RBRACE.yyname") - } - /// C# member: `P:LibreMetaverse.LslTools.RBRACE.yynum`. - pub fn yynum(&self) -> i32 { - libremetaverse_types::unimplemented_api!("P:LibreMetaverse.LslTools.RBRACE.yynum") - } -} +/// C# member: `M:LibreMetaverse.LslTools.RBRACE.#ctor(LibreMetaverse.LslTools.Lexer)`. +/// C# member: `P:LibreMetaverse.LslTools.RBRACE.yyname`. +/// C# member: `P:LibreMetaverse.LslTools.RBRACE.yynum`. +pub use crate::generated_tables::RBRACE; /// C# type: `T:LibreMetaverse.LslTools.RBRACK`. -pub struct RBRACK; -impl RBRACK { - /// C# member: `M:LibreMetaverse.LslTools.RBRACK.#ctor(LibreMetaverse.LslTools.Lexer)`. - pub fn new(yyl: libremetaverse_lsl_tools::Lexer) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.RBRACK.#ctor(LibreMetaverse.LslTools.Lexer)", - ) - } - /// C# member: `P:LibreMetaverse.LslTools.RBRACK.yyname`. - pub fn yyname(&self) -> String { - libremetaverse_types::unimplemented_api!("P:LibreMetaverse.LslTools.RBRACK.yyname") - } - /// C# member: `P:LibreMetaverse.LslTools.RBRACK.yynum`. - pub fn yynum(&self) -> i32 { - libremetaverse_types::unimplemented_api!("P:LibreMetaverse.LslTools.RBRACK.yynum") - } -} +/// C# member: `M:LibreMetaverse.LslTools.RBRACK.#ctor(LibreMetaverse.LslTools.Lexer)`. +/// C# member: `P:LibreMetaverse.LslTools.RBRACK.yyname`. +/// C# member: `P:LibreMetaverse.LslTools.RBRACK.yynum`. +pub use crate::generated_tables::RBRACK; /// C# type: `T:LibreMetaverse.LslTools.RPAREN`. -pub struct RPAREN; -impl RPAREN { - /// C# member: `M:LibreMetaverse.LslTools.RPAREN.#ctor(LibreMetaverse.LslTools.Lexer)`. - pub fn new(yyl: libremetaverse_lsl_tools::Lexer) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.RPAREN.#ctor(LibreMetaverse.LslTools.Lexer)", - ) - } - /// C# member: `P:LibreMetaverse.LslTools.RPAREN.yyname`. - pub fn yyname(&self) -> String { - libremetaverse_types::unimplemented_api!("P:LibreMetaverse.LslTools.RPAREN.yyname") - } - /// C# member: `P:LibreMetaverse.LslTools.RPAREN.yynum`. - pub fn yynum(&self) -> i32 { - libremetaverse_types::unimplemented_api!("P:LibreMetaverse.LslTools.RPAREN.yynum") - } -} +/// C# member: `M:LibreMetaverse.LslTools.RPAREN.#ctor(LibreMetaverse.LslTools.Lexer)`. +/// C# member: `P:LibreMetaverse.LslTools.RPAREN.yyname`. +/// C# member: `P:LibreMetaverse.LslTools.RPAREN.yynum`. +pub use crate::generated_tables::RPAREN; /// C# type: `T:LibreMetaverse.LslTools.Regex`. -pub struct Regex { - /// C# member: `F:LibreMetaverse.LslTools.Regex.m_sub`. - pub m_sub: Box, -} -impl Regex { - /// C# member: `M:LibreMetaverse.LslTools.Regex.#ctor(LibreMetaverse.LslTools.TokensGen,System.Int32,System.String)`. - pub fn new( - tks: libremetaverse_lsl_tools::TokensGen, - p: i32, - str: String, - ) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.Regex.#ctor(LibreMetaverse.LslTools.TokensGen,System.Int32,System.String)", - ) - } - /// C# member: `M:LibreMetaverse.LslTools.Regex.Build(LibreMetaverse.LslTools.Nfa)`. - pub fn build(&self, nfa: libremetaverse_lsl_tools::Nfa) -> Result<(), crate::Error> { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.Regex.Build(LibreMetaverse.LslTools.Nfa)", - ) - } - /// C# member: `M:LibreMetaverse.LslTools.Regex.Match(System.Char)`. - pub fn match__with_char( - &self, - ch: libremetaverse_types::compat::Utf16CodeUnit, - ) -> Result { - libremetaverse_types::not_implemented("M:LibreMetaverse.LslTools.Regex.Match(System.Char)") - } - /// C# member: `M:LibreMetaverse.LslTools.Regex.Match(System.String)`. - pub fn match__with_string(&self, str: String) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.Regex.Match(System.String)", - ) - } - /// C# member: `M:LibreMetaverse.LslTools.Regex.Match(System.String,System.Int32,System.Int32)`. - pub fn match__with_string_int32_int32( - &self, - str: String, - pos: i32, - max: i32, - ) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.Regex.Match(System.String,System.Int32,System.Int32)", - ) - } - /// C# member: `M:LibreMetaverse.LslTools.Regex.Print(System.IO.TextWriter)`. - pub fn print(&self, s: Box) -> Result<(), crate::Error> { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.Regex.Print(System.IO.TextWriter)", - ) - } -} +/// C# member: `F:LibreMetaverse.LslTools.Regex.m_sub`. +/// C# member: `M:LibreMetaverse.LslTools.Regex.#ctor(LibreMetaverse.LslTools.TokensGen,System.Int32,System.String)`. +/// C# member: `M:LibreMetaverse.LslTools.Regex.Build(LibreMetaverse.LslTools.Nfa)`. +/// C# member: `M:LibreMetaverse.LslTools.Regex.Match(System.Char)`. +/// C# member: `M:LibreMetaverse.LslTools.Regex.Match(System.String)`. +/// C# member: `M:LibreMetaverse.LslTools.Regex.Match(System.String,System.Int32,System.Int32)`. +/// C# member: `M:LibreMetaverse.LslTools.Regex.Print(System.IO.TextWriter)`. +pub use crate::generator::Regex; /// C# type: `T:LibreMetaverse.LslTools.Relation`. -pub struct Relation; -impl Relation { - /// C# member: `M:LibreMetaverse.LslTools.Relation.#ctor(System.Object,System.IntPtr)`. - pub fn new( - object: libremetaverse_types::compat::Object, - method: isize, - ) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.Relation.#ctor(System.Object,System.IntPtr)", - ) - } - /// C# member: `M:LibreMetaverse.LslTools.Relation.BeginInvoke(LibreMetaverse.LslTools.Transition,System.AsyncCallback,System.Object)`. - pub fn begin_invoke( - &self, - a: libremetaverse_lsl_tools::Transition, - callback: Box, - object: libremetaverse_types::compat::Object, - ) -> Result, crate::Error> { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.Relation.BeginInvoke(LibreMetaverse.LslTools.Transition,System.AsyncCallback,System.Object)", - ) - } - /// C# member: `M:LibreMetaverse.LslTools.Relation.EndInvoke(System.IAsyncResult)`. - pub fn end_invoke( - &self, - result: Box, - ) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.Relation.EndInvoke(System.IAsyncResult)", - ) - } - /// C# member: `M:LibreMetaverse.LslTools.Relation.Invoke(LibreMetaverse.LslTools.Transition)`. - pub fn invoke( - &self, - a: libremetaverse_lsl_tools::Transition, - ) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.Relation.Invoke(LibreMetaverse.LslTools.Transition)", - ) - } -} +/// C# member: `M:LibreMetaverse.LslTools.Relation.#ctor(System.Object,System.IntPtr)`. +/// C# member: `M:LibreMetaverse.LslTools.Relation.BeginInvoke(LibreMetaverse.LslTools.Transition,System.AsyncCallback,System.Object)`. +/// C# member: `M:LibreMetaverse.LslTools.Relation.EndInvoke(System.IAsyncResult)`. +/// C# member: `M:LibreMetaverse.LslTools.Relation.Invoke(LibreMetaverse.LslTools.Transition)`. +pub use crate::generator::Relation; /// C# type: `T:LibreMetaverse.LslTools.ResWds`. /// C# member: `F:LibreMetaverse.LslTools.ResWds.m_upper`. @@ -1964,66 +870,17 @@ impl Relation { pub use crate::lexer::ResWds; /// C# type: `T:LibreMetaverse.LslTools.SCreator`. -pub struct SCreator; -impl SCreator { - /// C# member: `M:LibreMetaverse.LslTools.SCreator.#ctor(System.Object,System.IntPtr)`. - pub fn new( - object: libremetaverse_types::compat::Object, - method: isize, - ) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.SCreator.#ctor(System.Object,System.IntPtr)", - ) - } - /// C# member: `M:LibreMetaverse.LslTools.SCreator.BeginInvoke(LibreMetaverse.LslTools.Parser,System.AsyncCallback,System.Object)`. - pub fn begin_invoke( - &self, - yyp: libremetaverse_lsl_tools::Parser, - callback: Box, - object: libremetaverse_types::compat::Object, - ) -> Result, crate::Error> { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.SCreator.BeginInvoke(LibreMetaverse.LslTools.Parser,System.AsyncCallback,System.Object)", - ) - } - /// C# member: `M:LibreMetaverse.LslTools.SCreator.EndInvoke(System.IAsyncResult)`. - pub fn end_invoke( - &self, - result: Box, - ) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.SCreator.EndInvoke(System.IAsyncResult)", - ) - } - /// C# member: `M:LibreMetaverse.LslTools.SCreator.Invoke(LibreMetaverse.LslTools.Parser)`. - pub fn invoke( - &self, - yyp: libremetaverse_lsl_tools::Parser, - ) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.SCreator.Invoke(LibreMetaverse.LslTools.Parser)", - ) - } -} +/// C# member: `M:LibreMetaverse.LslTools.SCreator.#ctor(System.Object,System.IntPtr)`. +/// C# member: `M:LibreMetaverse.LslTools.SCreator.BeginInvoke(LibreMetaverse.LslTools.Parser,System.AsyncCallback,System.Object)`. +/// C# member: `M:LibreMetaverse.LslTools.SCreator.EndInvoke(System.IAsyncResult)`. +/// C# member: `M:LibreMetaverse.LslTools.SCreator.Invoke(LibreMetaverse.LslTools.Parser)`. +pub use crate::generator::SCreator; /// C# type: `T:LibreMetaverse.LslTools.SEMICOLON`. -pub struct SEMICOLON; -impl SEMICOLON { - /// C# member: `M:LibreMetaverse.LslTools.SEMICOLON.#ctor(LibreMetaverse.LslTools.Lexer)`. - pub fn new(yyl: libremetaverse_lsl_tools::Lexer) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.SEMICOLON.#ctor(LibreMetaverse.LslTools.Lexer)", - ) - } - /// C# member: `P:LibreMetaverse.LslTools.SEMICOLON.yyname`. - pub fn yyname(&self) -> String { - libremetaverse_types::unimplemented_api!("P:LibreMetaverse.LslTools.SEMICOLON.yyname") - } - /// C# member: `P:LibreMetaverse.LslTools.SEMICOLON.yynum`. - pub fn yynum(&self) -> i32 { - libremetaverse_types::unimplemented_api!("P:LibreMetaverse.LslTools.SEMICOLON.yynum") - } -} +/// C# member: `M:LibreMetaverse.LslTools.SEMICOLON.#ctor(LibreMetaverse.LslTools.Lexer)`. +/// C# member: `P:LibreMetaverse.LslTools.SEMICOLON.yyname`. +/// C# member: `P:LibreMetaverse.LslTools.SEMICOLON.yynum`. +pub use crate::generated_tables::SEMICOLON; /// C# type: `T:LibreMetaverse.LslTools.SYMBOL`. /// C# member: `F:LibreMetaverse.LslTools.SYMBOL.kids`. @@ -2052,73 +909,20 @@ impl SEMICOLON { pub use crate::lexer::SYMBOL; /// C# type: `T:LibreMetaverse.LslTools.Serialiser`. -pub struct Serialiser; -impl Serialiser { - /// C# member: `M:LibreMetaverse.LslTools.Serialiser.#ctor(System.IO.TextWriter)`. - pub fn new_with_text_writer(ff: Box) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.Serialiser.#ctor(System.IO.TextWriter)", - ) - } - /// C# member: `M:LibreMetaverse.LslTools.Serialiser.#ctor(System.Int32[])`. - pub fn new_with_int32_array(bb: Vec) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.Serialiser.#ctor(System.Int32[])", - ) - } - /// C# member: `M:LibreMetaverse.LslTools.Serialiser.Deserialise`. - pub fn deserialise(&self) -> Result { - libremetaverse_types::not_implemented("M:LibreMetaverse.LslTools.Serialiser.Deserialise") - } - /// C# member: `M:LibreMetaverse.LslTools.Serialiser.Serialise(System.Object)`. - pub fn serialise(&self, o: libremetaverse_types::compat::Object) -> Result<(), crate::Error> { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.Serialiser.Serialise(System.Object)", - ) - } - /// C# member: `M:LibreMetaverse.LslTools.Serialiser.VersionCheck`. - pub fn version_check(&self) -> Result<(), crate::Error> { - libremetaverse_types::not_implemented("M:LibreMetaverse.LslTools.Serialiser.VersionCheck") - } - /// C# member: `M:LibreMetaverse.LslTools.Serialiser._Read`. - pub fn read(&self) -> Result { - libremetaverse_types::not_implemented("M:LibreMetaverse.LslTools.Serialiser._Read") - } - /// C# member: `M:LibreMetaverse.LslTools.Serialiser._Write(System.Int32)`. - pub fn write(&self, i: i32) -> Result<(), crate::Error> { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.Serialiser._Write(System.Int32)", - ) - } - /// C# member: `P:LibreMetaverse.LslTools.Serialiser.Encode`. - pub fn encode(&self) -> bool { - libremetaverse_types::unimplemented_api!("P:LibreMetaverse.LslTools.Serialiser.Encode") - } -} +/// C# member: `M:LibreMetaverse.LslTools.Serialiser.#ctor(System.IO.TextWriter)`. +/// C# member: `M:LibreMetaverse.LslTools.Serialiser.#ctor(System.Int32[])`. +/// C# member: `M:LibreMetaverse.LslTools.Serialiser.Deserialise`. +/// C# member: `M:LibreMetaverse.LslTools.Serialiser.Serialise(System.Object)`. +/// C# member: `M:LibreMetaverse.LslTools.Serialiser.VersionCheck`. +/// C# member: `M:LibreMetaverse.LslTools.Serialiser._Read`. +/// C# member: `M:LibreMetaverse.LslTools.Serialiser._Write(System.Int32)`. +/// C# member: `P:LibreMetaverse.LslTools.Serialiser.Encode`. +pub use crate::generator::Serialiser; /// C# type: `T:LibreMetaverse.LslTools.Sfactory`. -pub struct Sfactory; -impl Sfactory { - /// C# member: `M:LibreMetaverse.LslTools.Sfactory.#ctor(LibreMetaverse.LslTools.YyParser,System.String,LibreMetaverse.LslTools.SCreator)`. - pub fn new( - syms: libremetaverse_lsl_tools::YyParser, - cls_name: String, - cr: libremetaverse_lsl_tools::SCreator, - ) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.Sfactory.#ctor(LibreMetaverse.LslTools.YyParser,System.String,LibreMetaverse.LslTools.SCreator)", - ) - } - /// C# member: `M:LibreMetaverse.LslTools.Sfactory.create(System.String,LibreMetaverse.LslTools.Parser)`. - pub fn create( - cls_name: String, - yyp: libremetaverse_lsl_tools::Parser, - ) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.Sfactory.create(System.String,LibreMetaverse.LslTools.Parser)", - ) - } -} +/// C# member: `M:LibreMetaverse.LslTools.Sfactory.#ctor(LibreMetaverse.LslTools.YyParser,System.String,LibreMetaverse.LslTools.SCreator)`. +/// C# member: `M:LibreMetaverse.LslTools.Sfactory.create(System.String,LibreMetaverse.LslTools.Parser)`. +pub use crate::generator::Sfactory; /// C# type: `T:LibreMetaverse.LslTools.SourceLineInfo`. /// C# member: `F:LibreMetaverse.LslTools.SourceLineInfo.charPosition`. @@ -2135,89 +939,34 @@ impl Sfactory { pub use crate::lexer::SourceLineInfo; /// C# type: `T:LibreMetaverse.LslTools.Stuff`. -pub struct Stuff; -impl Stuff { - /// C# member: `M:LibreMetaverse.LslTools.Stuff.#ctor(LibreMetaverse.LslTools.Parser)`. - pub fn new(yyq: libremetaverse_lsl_tools::Parser) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.Stuff.#ctor(LibreMetaverse.LslTools.Parser)", - ) - } - /// C# member: `P:LibreMetaverse.LslTools.Stuff.yyname`. - pub fn yyname(&self) -> String { - libremetaverse_types::unimplemented_api!("P:LibreMetaverse.LslTools.Stuff.yyname") - } - /// C# member: `P:LibreMetaverse.LslTools.Stuff.yynum`. - pub fn yynum(&self) -> i32 { - libremetaverse_types::unimplemented_api!("P:LibreMetaverse.LslTools.Stuff.yynum") - } -} +/// C# member: `M:LibreMetaverse.LslTools.Stuff.#ctor(LibreMetaverse.LslTools.Parser)`. +/// C# member: `P:LibreMetaverse.LslTools.Stuff.yyname`. +/// C# member: `P:LibreMetaverse.LslTools.Stuff.yynum`. +pub use crate::generated_tables::Stuff; /// C# type: `T:LibreMetaverse.LslTools.Stuff_1`. -pub struct Stuff_1; -impl Stuff_1 { - /// C# member: `M:LibreMetaverse.LslTools.Stuff_1.#ctor(LibreMetaverse.LslTools.Parser)`. - pub fn new(yyq: libremetaverse_lsl_tools::Parser) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.Stuff_1.#ctor(LibreMetaverse.LslTools.Parser)", - ) - } -} +/// C# member: `M:LibreMetaverse.LslTools.Stuff_1.#ctor(LibreMetaverse.LslTools.Parser)`. +pub use crate::generated_tables::Stuff_1; /// C# type: `T:LibreMetaverse.LslTools.Stuff_2`. -pub struct Stuff_2; -impl Stuff_2 { - /// C# member: `M:LibreMetaverse.LslTools.Stuff_2.#ctor(LibreMetaverse.LslTools.Parser)`. - pub fn new(yyq: libremetaverse_lsl_tools::Parser) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.Stuff_2.#ctor(LibreMetaverse.LslTools.Parser)", - ) - } -} +/// C# member: `M:LibreMetaverse.LslTools.Stuff_2.#ctor(LibreMetaverse.LslTools.Parser)`. +pub use crate::generated_tables::Stuff_2; /// C# type: `T:LibreMetaverse.LslTools.Stuff_2_1`. -pub struct Stuff_2_1; -impl Stuff_2_1 { - /// C# member: `M:LibreMetaverse.LslTools.Stuff_2_1.#ctor(LibreMetaverse.LslTools.Parser)`. - pub fn new(yyq: libremetaverse_lsl_tools::Parser) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.Stuff_2_1.#ctor(LibreMetaverse.LslTools.Parser)", - ) - } -} +/// C# member: `M:LibreMetaverse.LslTools.Stuff_2_1.#ctor(LibreMetaverse.LslTools.Parser)`. +pub use crate::generated_tables::Stuff_2_1; /// C# type: `T:LibreMetaverse.LslTools.Stuff_3`. -pub struct Stuff_3; -impl Stuff_3 { - /// C# member: `M:LibreMetaverse.LslTools.Stuff_3.#ctor(LibreMetaverse.LslTools.Parser)`. - pub fn new(yyq: libremetaverse_lsl_tools::Parser) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.Stuff_3.#ctor(LibreMetaverse.LslTools.Parser)", - ) - } -} +/// C# member: `M:LibreMetaverse.LslTools.Stuff_3.#ctor(LibreMetaverse.LslTools.Parser)`. +pub use crate::generated_tables::Stuff_3; /// C# type: `T:LibreMetaverse.LslTools.Stuff_4`. -pub struct Stuff_4; -impl Stuff_4 { - /// C# member: `M:LibreMetaverse.LslTools.Stuff_4.#ctor(LibreMetaverse.LslTools.Parser)`. - pub fn new(yyq: libremetaverse_lsl_tools::Parser) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.Stuff_4.#ctor(LibreMetaverse.LslTools.Parser)", - ) - } -} +/// C# member: `M:LibreMetaverse.LslTools.Stuff_4.#ctor(LibreMetaverse.LslTools.Parser)`. +pub use crate::generated_tables::Stuff_4; /// C# type: `T:LibreMetaverse.LslTools.Stuff_4_1`. -pub struct Stuff_4_1; -impl Stuff_4_1 { - /// C# member: `M:LibreMetaverse.LslTools.Stuff_4_1.#ctor(LibreMetaverse.LslTools.Parser)`. - pub fn new(yyq: libremetaverse_lsl_tools::Parser) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.Stuff_4_1.#ctor(LibreMetaverse.LslTools.Parser)", - ) - } -} +/// C# member: `M:LibreMetaverse.LslTools.Stuff_4_1.#ctor(LibreMetaverse.LslTools.Parser)`. +pub use crate::generated_tables::Stuff_4_1; /// C# type: `T:LibreMetaverse.LslTools.SymbolSet`. /// C# member: `F:LibreMetaverse.LslTools.SymbolSet.m_next`. @@ -2237,182 +986,45 @@ impl Stuff_4_1 { pub use crate::parser::SymbolSet; /// C# type: `T:LibreMetaverse.LslTools.SymbolType`. -pub struct SymbolType; -impl SymbolType { - /// C# member: `M:LibreMetaverse.LslTools.SymbolType.#ctor(LibreMetaverse.LslTools.SymbolsGen,System.String)`. - pub fn new_with_symbols_gen_string( - yyp: libremetaverse_lsl_tools::SymbolsGen, - name: String, - ) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.SymbolType.#ctor(LibreMetaverse.LslTools.SymbolsGen,System.String)", - ) - } - /// C# member: `M:LibreMetaverse.LslTools.SymbolType.#ctor(LibreMetaverse.LslTools.SymbolsGen,System.String,System.Boolean)`. - pub fn new_with_symbols_gen_string_boolean( - yyp: libremetaverse_lsl_tools::SymbolsGen, - name: String, - defined: bool, - ) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.SymbolType.#ctor(LibreMetaverse.LslTools.SymbolsGen,System.String,System.Boolean)", - ) - } - /// C# member: `M:LibreMetaverse.LslTools.SymbolType._Find(System.String)`. - pub fn find(&self, name: String) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.SymbolType._Find(System.String)", - ) - } -} +/// C# member: `M:LibreMetaverse.LslTools.SymbolType.#ctor(LibreMetaverse.LslTools.SymbolsGen,System.String)`. +/// C# member: `M:LibreMetaverse.LslTools.SymbolType.#ctor(LibreMetaverse.LslTools.SymbolsGen,System.String,System.Boolean)`. +/// C# member: `M:LibreMetaverse.LslTools.SymbolType._Find(System.String)`. +pub use crate::generator::SymbolType; /// C# type: `T:LibreMetaverse.LslTools.SymbolsGen`. -pub struct SymbolsGen { - /// C# member: `F:LibreMetaverse.LslTools.SymbolsGen.action`. - pub action: i32, - /// C# member: `F:LibreMetaverse.LslTools.SymbolsGen.lahead`. - pub lahead: libremetaverse_lsl_tools::SymbolSet, - /// C# member: `F:LibreMetaverse.LslTools.SymbolsGen.m_lalrParser`. - pub m_lalr_parser: bool, - /// C# member: `F:LibreMetaverse.LslTools.SymbolsGen.m_lexer`. - pub m_lexer: libremetaverse_lsl_tools::Lexer, - /// C# member: `F:LibreMetaverse.LslTools.SymbolsGen.m_symbols`. - pub m_symbols: libremetaverse_lsl_tools::YyParser, - /// C# member: `F:LibreMetaverse.LslTools.SymbolsGen.m_trans`. - pub m_trans: i32, - /// C# member: `F:LibreMetaverse.LslTools.SymbolsGen.pno`. - pub pno: i32, - /// C# member: `F:LibreMetaverse.LslTools.SymbolsGen.prods`. - pub prods: libremetaverse_lsl_tools::ObjectList, - /// C# member: `F:LibreMetaverse.LslTools.SymbolsGen.stypes`. - pub stypes: libremetaverse_lsl_tools::SymbolType, -} -impl SymbolsGen { - /// C# member: `M:LibreMetaverse.LslTools.SymbolsGen.AssocType(LibreMetaverse.LslTools.Precedence.PrecType,System.Int32)`. - pub fn assoc_type( - &self, - pt: libremetaverse_lsl_tools::PrecedencePrecType, - n: i32, - ) -> Result<(), crate::Error> { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.SymbolsGen.AssocType(LibreMetaverse.LslTools.Precedence.PrecType,System.Int32)", - ) - } - /// C# member: `M:LibreMetaverse.LslTools.SymbolsGen.ClassDefinition(System.String)`. - pub fn class_definition(&self, s: String) -> Result<(), crate::Error> { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.SymbolsGen.ClassDefinition(System.String)", - ) - } - /// C# member: `M:LibreMetaverse.LslTools.SymbolsGen.CopySegment`. - pub fn copy_segment(&self) -> Result<(), crate::Error> { - libremetaverse_types::not_implemented("M:LibreMetaverse.LslTools.SymbolsGen.CopySegment") - } - /// C# member: `M:LibreMetaverse.LslTools.SymbolsGen.Declare`. - pub fn declare(&self) -> Result<(), crate::Error> { - libremetaverse_types::not_implemented("M:LibreMetaverse.LslTools.SymbolsGen.Declare") - } - /// C# member: `M:LibreMetaverse.LslTools.SymbolsGen.Find(LibreMetaverse.LslTools.CSymbol)`. - pub fn find(&self, sym: libremetaverse_lsl_tools::CSymbol) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.SymbolsGen.Find(LibreMetaverse.LslTools.CSymbol)", - ) - } - /// C# member: `M:LibreMetaverse.LslTools.SymbolsGen.OldAction(LibreMetaverse.LslTools.ParserOldAction)`. - pub fn old_action( - &self, - a: libremetaverse_lsl_tools::ParserOldAction, - ) -> Result<(), crate::Error> { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.SymbolsGen.OldAction(LibreMetaverse.LslTools.ParserOldAction)", - ) - } - /// C# member: `M:LibreMetaverse.LslTools.SymbolsGen.ParserDirective`. - pub fn parser_directive(&self) -> Result<(), crate::Error> { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.SymbolsGen.ParserDirective", - ) - } - /// C# member: `M:LibreMetaverse.LslTools.SymbolsGen.SetNamespace`. - pub fn set_namespace(&self) -> Result<(), crate::Error> { - libremetaverse_types::not_implemented("M:LibreMetaverse.LslTools.SymbolsGen.SetNamespace") - } - /// C# member: `M:LibreMetaverse.LslTools.SymbolsGen.SetStartSymbol`. - pub fn set_start_symbol(&self) -> Result<(), crate::Error> { - libremetaverse_types::not_implemented("M:LibreMetaverse.LslTools.SymbolsGen.SetStartSymbol") - } - /// C# member: `M:LibreMetaverse.LslTools.SymbolsGen.SimpleAction(LibreMetaverse.LslTools.ParserSimpleAction)`. - pub fn simple_action( - &self, - a: libremetaverse_lsl_tools::ParserSimpleAction, - ) -> Result<(), crate::Error> { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.SymbolsGen.SimpleAction(LibreMetaverse.LslTools.ParserSimpleAction)", - ) - } -} +/// C# member: `F:LibreMetaverse.LslTools.SymbolsGen.action`. +/// C# member: `F:LibreMetaverse.LslTools.SymbolsGen.lahead`. +/// C# member: `F:LibreMetaverse.LslTools.SymbolsGen.m_lalrParser`. +/// C# member: `F:LibreMetaverse.LslTools.SymbolsGen.m_lexer`. +/// C# member: `F:LibreMetaverse.LslTools.SymbolsGen.m_symbols`. +/// C# member: `F:LibreMetaverse.LslTools.SymbolsGen.m_trans`. +/// C# member: `F:LibreMetaverse.LslTools.SymbolsGen.pno`. +/// C# member: `F:LibreMetaverse.LslTools.SymbolsGen.prods`. +/// C# member: `F:LibreMetaverse.LslTools.SymbolsGen.stypes`. +/// C# member: `M:LibreMetaverse.LslTools.SymbolsGen.AssocType(LibreMetaverse.LslTools.Precedence.PrecType,System.Int32)`. +/// C# member: `M:LibreMetaverse.LslTools.SymbolsGen.ClassDefinition(System.String)`. +/// C# member: `M:LibreMetaverse.LslTools.SymbolsGen.CopySegment`. +/// C# member: `M:LibreMetaverse.LslTools.SymbolsGen.Declare`. +/// C# member: `M:LibreMetaverse.LslTools.SymbolsGen.Find(LibreMetaverse.LslTools.CSymbol)`. +/// C# member: `M:LibreMetaverse.LslTools.SymbolsGen.OldAction(LibreMetaverse.LslTools.ParserOldAction)`. +/// C# member: `M:LibreMetaverse.LslTools.SymbolsGen.ParserDirective`. +/// C# member: `M:LibreMetaverse.LslTools.SymbolsGen.SetNamespace`. +/// C# member: `M:LibreMetaverse.LslTools.SymbolsGen.SetStartSymbol`. +/// C# member: `M:LibreMetaverse.LslTools.SymbolsGen.SimpleAction(LibreMetaverse.LslTools.ParserSimpleAction)`. +pub use crate::generator::SymbolsGen; /// C# type: `T:LibreMetaverse.LslTools.TCreator`. -pub struct TCreator; -impl TCreator { - /// C# member: `M:LibreMetaverse.LslTools.TCreator.#ctor(System.Object,System.IntPtr)`. - pub fn new( - object: libremetaverse_types::compat::Object, - method: isize, - ) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.TCreator.#ctor(System.Object,System.IntPtr)", - ) - } - /// C# member: `M:LibreMetaverse.LslTools.TCreator.BeginInvoke(LibreMetaverse.LslTools.Lexer,System.AsyncCallback,System.Object)`. - pub fn begin_invoke( - &self, - yyl: libremetaverse_lsl_tools::Lexer, - callback: Box, - object: libremetaverse_types::compat::Object, - ) -> Result, crate::Error> { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.TCreator.BeginInvoke(LibreMetaverse.LslTools.Lexer,System.AsyncCallback,System.Object)", - ) - } - /// C# member: `M:LibreMetaverse.LslTools.TCreator.EndInvoke(System.IAsyncResult)`. - pub fn end_invoke( - &self, - result: Box, - ) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.TCreator.EndInvoke(System.IAsyncResult)", - ) - } - /// C# member: `M:LibreMetaverse.LslTools.TCreator.Invoke(LibreMetaverse.LslTools.Lexer)`. - pub fn invoke( - &self, - yyl: libremetaverse_lsl_tools::Lexer, - ) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.TCreator.Invoke(LibreMetaverse.LslTools.Lexer)", - ) - } -} +/// C# member: `M:LibreMetaverse.LslTools.TCreator.#ctor(System.Object,System.IntPtr)`. +/// C# member: `M:LibreMetaverse.LslTools.TCreator.BeginInvoke(LibreMetaverse.LslTools.Lexer,System.AsyncCallback,System.Object)`. +/// C# member: `M:LibreMetaverse.LslTools.TCreator.EndInvoke(System.IAsyncResult)`. +/// C# member: `M:LibreMetaverse.LslTools.TCreator.Invoke(LibreMetaverse.LslTools.Lexer)`. +pub use crate::generator::TCreator; /// C# type: `T:LibreMetaverse.LslTools.THIS`. -pub struct THIS; -impl THIS { - /// C# member: `M:LibreMetaverse.LslTools.THIS.#ctor(LibreMetaverse.LslTools.Lexer)`. - pub fn new(yyl: libremetaverse_lsl_tools::Lexer) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.THIS.#ctor(LibreMetaverse.LslTools.Lexer)", - ) - } - /// C# member: `P:LibreMetaverse.LslTools.THIS.yyname`. - pub fn yyname(&self) -> String { - libremetaverse_types::unimplemented_api!("P:LibreMetaverse.LslTools.THIS.yyname") - } - /// C# member: `P:LibreMetaverse.LslTools.THIS.yynum`. - pub fn yynum(&self) -> i32 { - libremetaverse_types::unimplemented_api!("P:LibreMetaverse.LslTools.THIS.yynum") - } -} +/// C# member: `M:LibreMetaverse.LslTools.THIS.#ctor(LibreMetaverse.LslTools.Lexer)`. +/// C# member: `P:LibreMetaverse.LslTools.THIS.yyname`. +/// C# member: `P:LibreMetaverse.LslTools.THIS.yynum`. +pub use crate::generated_tables::THIS; /// C# type: `T:LibreMetaverse.LslTools.TOKEN`. /// C# member: `M:LibreMetaverse.LslTools.TOKEN.#ctor(LibreMetaverse.LslTools.Lexer)`. @@ -2429,85 +1041,27 @@ impl THIS { pub use crate::lexer::TOKEN; /// C# type: `T:LibreMetaverse.LslTools.Tfactory`. -pub struct Tfactory; -impl Tfactory { - /// C# member: `M:LibreMetaverse.LslTools.Tfactory.#ctor(LibreMetaverse.LslTools.YyLexer,System.String,LibreMetaverse.LslTools.TCreator)`. - pub fn new( - tks: libremetaverse_lsl_tools::YyLexer, - cls_name: String, - cr: libremetaverse_lsl_tools::TCreator, - ) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.Tfactory.#ctor(LibreMetaverse.LslTools.YyLexer,System.String,LibreMetaverse.LslTools.TCreator)", - ) - } - /// C# member: `M:LibreMetaverse.LslTools.Tfactory.create(System.String,LibreMetaverse.LslTools.Lexer)`. - pub fn create( - cls_name: String, - yyl: libremetaverse_lsl_tools::Lexer, - ) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.Tfactory.create(System.String,LibreMetaverse.LslTools.Lexer)", - ) - } -} +/// C# member: `M:LibreMetaverse.LslTools.Tfactory.#ctor(LibreMetaverse.LslTools.YyLexer,System.String,LibreMetaverse.LslTools.TCreator)`. +/// C# member: `M:LibreMetaverse.LslTools.Tfactory.create(System.String,LibreMetaverse.LslTools.Lexer)`. +pub use crate::generator::Tfactory; /// C# type: `T:LibreMetaverse.LslTools.TokClassDef`. -pub struct TokClassDef { - /// C# member: `F:LibreMetaverse.LslTools.TokClassDef.m_implement`. - pub m_implement: String, - /// C# member: `F:LibreMetaverse.LslTools.TokClassDef.m_initialisation`. - pub m_initialisation: String, - /// C# member: `F:LibreMetaverse.LslTools.TokClassDef.m_name`. - pub m_name: String, - /// C# member: `F:LibreMetaverse.LslTools.TokClassDef.m_refToken`. - pub m_ref_token: String, - /// C# member: `F:LibreMetaverse.LslTools.TokClassDef.m_yynum`. - pub m_yynum: i32, -} -impl TokClassDef { - /// C# member: `M:LibreMetaverse.LslTools.TokClassDef.#ctor(LibreMetaverse.LslTools.GenBase,System.String,System.String)`. - pub fn new( - gbs: libremetaverse_lsl_tools::GenBase, - name: String, - bas: String, - ) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.TokClassDef.#ctor(LibreMetaverse.LslTools.GenBase,System.String,System.String)", - ) - } - /// C# member: `M:LibreMetaverse.LslTools.TokClassDef.Serialise(System.Object,LibreMetaverse.LslTools.Serialiser)`. - pub fn serialise( - o: libremetaverse_types::compat::Object, - s: libremetaverse_lsl_tools::Serialiser, - ) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.TokClassDef.Serialise(System.Object,LibreMetaverse.LslTools.Serialiser)", - ) - } -} +/// C# member: `F:LibreMetaverse.LslTools.TokClassDef.m_implement`. +/// C# member: `F:LibreMetaverse.LslTools.TokClassDef.m_initialisation`. +/// C# member: `F:LibreMetaverse.LslTools.TokClassDef.m_name`. +/// C# member: `F:LibreMetaverse.LslTools.TokClassDef.m_refToken`. +/// C# member: `F:LibreMetaverse.LslTools.TokClassDef.m_yynum`. +/// C# member: `M:LibreMetaverse.LslTools.TokClassDef.#ctor(LibreMetaverse.LslTools.GenBase,System.String,System.String)`. +/// C# member: `M:LibreMetaverse.LslTools.TokClassDef.Serialise(System.Object,LibreMetaverse.LslTools.Serialiser)`. +pub use crate::generator::TokClassDef; /// C# type: `T:LibreMetaverse.LslTools.TokensGen`. -pub struct TokensGen { - /// C# member: `F:LibreMetaverse.LslTools.TokensGen.defines`. - pub defines: libremetaverse_types::compat::Hashtable, - /// C# member: `F:LibreMetaverse.LslTools.TokensGen.m_tokens`. - pub m_tokens: libremetaverse_lsl_tools::YyLexer, - /// C# member: `F:LibreMetaverse.LslTools.TokensGen.states`. - pub states: libremetaverse_lsl_tools::ObjectList, -} -impl TokensGen { - /// C# member: `M:LibreMetaverse.LslTools.TokensGen.FixActions(System.String)`. - pub fn fix_actions(&self, str: String) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.TokensGen.FixActions(System.String)", - ) - } - /// C# member: `M:LibreMetaverse.LslTools.TokensGen.NewState`. - pub fn new_state(&self) -> Result { - libremetaverse_types::not_implemented("M:LibreMetaverse.LslTools.TokensGen.NewState") - } -} +/// C# member: `F:LibreMetaverse.LslTools.TokensGen.defines`. +/// C# member: `F:LibreMetaverse.LslTools.TokensGen.m_tokens`. +/// C# member: `F:LibreMetaverse.LslTools.TokensGen.states`. +/// C# member: `M:LibreMetaverse.LslTools.TokensGen.FixActions(System.String)`. +/// C# member: `M:LibreMetaverse.LslTools.TokensGen.NewState`. +pub use crate::generator::TokensGen; /// C# type: `T:LibreMetaverse.LslTools.Transition`. /// C# member: `F:LibreMetaverse.LslTools.Transition.m_A`. @@ -2580,67 +1134,22 @@ pub use crate::lexer::YyLexer; pub use crate::parser::YyParser; /// C# type: `T:LibreMetaverse.LslTools.cs0syntax`. -pub struct Cs0syntax { - /// C# member: `F:LibreMetaverse.LslTools.cs0syntax.Cls`. - pub cls: String, - /// C# member: `F:LibreMetaverse.LslTools.cs0syntax.Ctx`. - pub ctx: String, - /// C# member: `F:LibreMetaverse.LslTools.cs0syntax.Out`. - pub out: String, - /// C# member: `F:LibreMetaverse.LslTools.cs0syntax.Par`. - pub par: String, - /// C# member: `F:LibreMetaverse.LslTools.cs0syntax.defconseen`. - pub defconseen: bool, -} -impl Cs0syntax { - /// C# member: `M:LibreMetaverse.LslTools.cs0syntax.#ctor`. - pub fn new_with_constructor() -> Result { - libremetaverse_types::not_implemented("M:LibreMetaverse.LslTools.cs0syntax.#ctor") - } - /// C# member: `M:LibreMetaverse.LslTools.cs0syntax.#ctor(LibreMetaverse.LslTools.YyParser)`. - pub fn new_with_yy_parser( - syms: libremetaverse_lsl_tools::YyParser, - ) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.cs0syntax.#ctor(LibreMetaverse.LslTools.YyParser)", - ) - } - /// C# member: `M:LibreMetaverse.LslTools.cs0syntax.#ctor(LibreMetaverse.LslTools.YyParser,LibreMetaverse.LslTools.ErrorHandler)`. - pub fn new_with_yy_parser_error_handler( - syms: libremetaverse_lsl_tools::YyParser, - erh: libremetaverse_lsl_tools::ErrorHandler, - ) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.cs0syntax.#ctor(LibreMetaverse.LslTools.YyParser,LibreMetaverse.LslTools.ErrorHandler)", - ) - } -} +/// C# member: `F:LibreMetaverse.LslTools.cs0syntax.Cls`. +/// C# member: `F:LibreMetaverse.LslTools.cs0syntax.Ctx`. +/// C# member: `F:LibreMetaverse.LslTools.cs0syntax.Out`. +/// C# member: `F:LibreMetaverse.LslTools.cs0syntax.Par`. +/// C# member: `F:LibreMetaverse.LslTools.cs0syntax.defconseen`. +/// C# member: `M:LibreMetaverse.LslTools.cs0syntax.#ctor`. +/// C# member: `M:LibreMetaverse.LslTools.cs0syntax.#ctor(LibreMetaverse.LslTools.YyParser)`. +/// C# member: `M:LibreMetaverse.LslTools.cs0syntax.#ctor(LibreMetaverse.LslTools.YyParser,LibreMetaverse.LslTools.ErrorHandler)`. +pub use crate::generated_tables::cs0syntax as Cs0syntax; /// C# type: `T:LibreMetaverse.LslTools.cs0tokens`. -pub struct Cs0tokens { - /// C# member: `F:LibreMetaverse.LslTools.cs0tokens.Out`. - pub out: String, -} -impl Cs0tokens { - /// C# member: `M:LibreMetaverse.LslTools.cs0tokens.#ctor`. - pub fn new_with_constructor() -> Result { - libremetaverse_types::not_implemented("M:LibreMetaverse.LslTools.cs0tokens.#ctor") - } - /// C# member: `M:LibreMetaverse.LslTools.cs0tokens.#ctor(LibreMetaverse.LslTools.ErrorHandler)`. - pub fn new_with_error_handler( - eh: libremetaverse_lsl_tools::ErrorHandler, - ) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.cs0tokens.#ctor(LibreMetaverse.LslTools.ErrorHandler)", - ) - } - /// C# member: `M:LibreMetaverse.LslTools.cs0tokens.#ctor(LibreMetaverse.LslTools.YyLexer)`. - pub fn new_with_yy_lexer(tks: libremetaverse_lsl_tools::YyLexer) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.cs0tokens.#ctor(LibreMetaverse.LslTools.YyLexer)", - ) - } -} +/// C# member: `F:LibreMetaverse.LslTools.cs0tokens.Out`. +/// C# member: `M:LibreMetaverse.LslTools.cs0tokens.#ctor`. +/// C# member: `M:LibreMetaverse.LslTools.cs0tokens.#ctor(LibreMetaverse.LslTools.ErrorHandler)`. +/// C# member: `M:LibreMetaverse.LslTools.cs0tokens.#ctor(LibreMetaverse.LslTools.YyLexer)`. +pub use crate::generated_tables::cs0tokens as Cs0tokens; /// C# type: `T:LibreMetaverse.LslTools.recoveredError`. /// C# member: `M:LibreMetaverse.LslTools.recoveredError.#ctor(LibreMetaverse.LslTools.Parser,LibreMetaverse.LslTools.ParseStackEntry)`. @@ -2650,820 +1159,108 @@ impl Cs0tokens { pub use crate::parser::RecoveredError; /// C# type: `T:LibreMetaverse.LslTools.yycs0syntax`. -pub struct Yycs0syntax; -impl Yycs0syntax { - /// C# member: `M:LibreMetaverse.LslTools.yycs0syntax.#ctor`. - pub fn new() -> Result { - libremetaverse_types::not_implemented("M:LibreMetaverse.LslTools.yycs0syntax.#ctor") - } - /// C# member: `M:LibreMetaverse.LslTools.yycs0syntax.Action(LibreMetaverse.LslTools.Parser,LibreMetaverse.LslTools.SYMBOL,System.Int32)`. - pub fn action( - &self, - yyq: libremetaverse_lsl_tools::Parser, - yysym: libremetaverse_lsl_tools::SYMBOL, - yyact: i32, - ) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.yycs0syntax.Action(LibreMetaverse.LslTools.Parser,LibreMetaverse.LslTools.SYMBOL,System.Int32)", - ) - } - /// C# member: `M:LibreMetaverse.LslTools.yycs0syntax.BaseCall_1_factory(LibreMetaverse.LslTools.Parser)`. - pub fn base_call_1_factory( - yyp: libremetaverse_lsl_tools::Parser, - ) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.yycs0syntax.BaseCall_1_factory(LibreMetaverse.LslTools.Parser)", - ) - } - /// C# member: `M:LibreMetaverse.LslTools.yycs0syntax.BaseCall_2_1_factory(LibreMetaverse.LslTools.Parser)`. - pub fn base_call_2_1_factory( - yyp: libremetaverse_lsl_tools::Parser, - ) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.yycs0syntax.BaseCall_2_1_factory(LibreMetaverse.LslTools.Parser)", - ) - } - /// C# member: `M:LibreMetaverse.LslTools.yycs0syntax.BaseCall_2_factory(LibreMetaverse.LslTools.Parser)`. - pub fn base_call_2_factory( - yyp: libremetaverse_lsl_tools::Parser, - ) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.yycs0syntax.BaseCall_2_factory(LibreMetaverse.LslTools.Parser)", - ) - } - /// C# member: `M:LibreMetaverse.LslTools.yycs0syntax.BaseCall_3_factory(LibreMetaverse.LslTools.Parser)`. - pub fn base_call_3_factory( - yyp: libremetaverse_lsl_tools::Parser, - ) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.yycs0syntax.BaseCall_3_factory(LibreMetaverse.LslTools.Parser)", - ) - } - /// C# member: `M:LibreMetaverse.LslTools.yycs0syntax.BaseCall_4_1_factory(LibreMetaverse.LslTools.Parser)`. - pub fn base_call_4_1_factory( - yyp: libremetaverse_lsl_tools::Parser, - ) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.yycs0syntax.BaseCall_4_1_factory(LibreMetaverse.LslTools.Parser)", - ) - } - /// C# member: `M:LibreMetaverse.LslTools.yycs0syntax.BaseCall_4_factory(LibreMetaverse.LslTools.Parser)`. - pub fn base_call_4_factory( - yyp: libremetaverse_lsl_tools::Parser, - ) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.yycs0syntax.BaseCall_4_factory(LibreMetaverse.LslTools.Parser)", - ) - } - /// C# member: `M:LibreMetaverse.LslTools.yycs0syntax.BaseCall_5_factory(LibreMetaverse.LslTools.Parser)`. - pub fn base_call_5_factory( - yyp: libremetaverse_lsl_tools::Parser, - ) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.yycs0syntax.BaseCall_5_factory(LibreMetaverse.LslTools.Parser)", - ) - } - /// C# member: `M:LibreMetaverse.LslTools.yycs0syntax.BaseCall_6_1_factory(LibreMetaverse.LslTools.Parser)`. - pub fn base_call_6_1_factory( - yyp: libremetaverse_lsl_tools::Parser, - ) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.yycs0syntax.BaseCall_6_1_factory(LibreMetaverse.LslTools.Parser)", - ) - } - /// C# member: `M:LibreMetaverse.LslTools.yycs0syntax.BaseCall_6_factory(LibreMetaverse.LslTools.Parser)`. - pub fn base_call_6_factory( - yyp: libremetaverse_lsl_tools::Parser, - ) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.yycs0syntax.BaseCall_6_factory(LibreMetaverse.LslTools.Parser)", - ) - } - /// C# member: `M:LibreMetaverse.LslTools.yycs0syntax.BaseCall_factory(LibreMetaverse.LslTools.Parser)`. - pub fn base_call_factory( - yyp: libremetaverse_lsl_tools::Parser, - ) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.yycs0syntax.BaseCall_factory(LibreMetaverse.LslTools.Parser)", - ) - } - /// C# member: `M:LibreMetaverse.LslTools.yycs0syntax.Call_1_factory(LibreMetaverse.LslTools.Parser)`. - pub fn call_1_factory( - yyp: libremetaverse_lsl_tools::Parser, - ) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.yycs0syntax.Call_1_factory(LibreMetaverse.LslTools.Parser)", - ) - } - /// C# member: `M:LibreMetaverse.LslTools.yycs0syntax.Call_2_1_factory(LibreMetaverse.LslTools.Parser)`. - pub fn call_2_1_factory( - yyp: libremetaverse_lsl_tools::Parser, - ) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.yycs0syntax.Call_2_1_factory(LibreMetaverse.LslTools.Parser)", - ) - } - /// C# member: `M:LibreMetaverse.LslTools.yycs0syntax.Call_2_factory(LibreMetaverse.LslTools.Parser)`. - pub fn call_2_factory( - yyp: libremetaverse_lsl_tools::Parser, - ) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.yycs0syntax.Call_2_factory(LibreMetaverse.LslTools.Parser)", - ) - } - /// C# member: `M:LibreMetaverse.LslTools.yycs0syntax.Call_factory(LibreMetaverse.LslTools.Parser)`. - pub fn call_factory( - yyp: libremetaverse_lsl_tools::Parser, - ) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.yycs0syntax.Call_factory(LibreMetaverse.LslTools.Parser)", - ) - } - /// C# member: `M:LibreMetaverse.LslTools.yycs0syntax.ClassBody_1_factory(LibreMetaverse.LslTools.Parser)`. - pub fn class_body_1_factory( - yyp: libremetaverse_lsl_tools::Parser, - ) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.yycs0syntax.ClassBody_1_factory(LibreMetaverse.LslTools.Parser)", - ) - } - /// C# member: `M:LibreMetaverse.LslTools.yycs0syntax.ClassBody_2_1_factory(LibreMetaverse.LslTools.Parser)`. - pub fn class_body_2_1_factory( - yyp: libremetaverse_lsl_tools::Parser, - ) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.yycs0syntax.ClassBody_2_1_factory(LibreMetaverse.LslTools.Parser)", - ) - } - /// C# member: `M:LibreMetaverse.LslTools.yycs0syntax.ClassBody_2_factory(LibreMetaverse.LslTools.Parser)`. - pub fn class_body_2_factory( - yyp: libremetaverse_lsl_tools::Parser, - ) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.yycs0syntax.ClassBody_2_factory(LibreMetaverse.LslTools.Parser)", - ) - } - /// C# member: `M:LibreMetaverse.LslTools.yycs0syntax.ClassBody_factory(LibreMetaverse.LslTools.Parser)`. - pub fn class_body_factory( - yyp: libremetaverse_lsl_tools::Parser, - ) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.yycs0syntax.ClassBody_factory(LibreMetaverse.LslTools.Parser)", - ) - } - /// C# member: `M:LibreMetaverse.LslTools.yycs0syntax.Cons_1_factory(LibreMetaverse.LslTools.Parser)`. - pub fn cons_1_factory( - yyp: libremetaverse_lsl_tools::Parser, - ) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.yycs0syntax.Cons_1_factory(LibreMetaverse.LslTools.Parser)", - ) - } - /// C# member: `M:LibreMetaverse.LslTools.yycs0syntax.Cons_2_1_factory(LibreMetaverse.LslTools.Parser)`. - pub fn cons_2_1_factory( - yyp: libremetaverse_lsl_tools::Parser, - ) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.yycs0syntax.Cons_2_1_factory(LibreMetaverse.LslTools.Parser)", - ) - } - /// C# member: `M:LibreMetaverse.LslTools.yycs0syntax.Cons_2_factory(LibreMetaverse.LslTools.Parser)`. - pub fn cons_2_factory( - yyp: libremetaverse_lsl_tools::Parser, - ) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.yycs0syntax.Cons_2_factory(LibreMetaverse.LslTools.Parser)", - ) - } - /// C# member: `M:LibreMetaverse.LslTools.yycs0syntax.Cons_factory(LibreMetaverse.LslTools.Parser)`. - pub fn cons_factory( - yyp: libremetaverse_lsl_tools::Parser, - ) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.yycs0syntax.Cons_factory(LibreMetaverse.LslTools.Parser)", - ) - } - /// C# member: `M:LibreMetaverse.LslTools.yycs0syntax.GStuff_1_factory(LibreMetaverse.LslTools.Parser)`. - pub fn g_stuff_1_factory( - yyp: libremetaverse_lsl_tools::Parser, - ) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.yycs0syntax.GStuff_1_factory(LibreMetaverse.LslTools.Parser)", - ) - } - /// C# member: `M:LibreMetaverse.LslTools.yycs0syntax.GStuff_2_1_factory(LibreMetaverse.LslTools.Parser)`. - pub fn g_stuff_2_1_factory( - yyp: libremetaverse_lsl_tools::Parser, - ) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.yycs0syntax.GStuff_2_1_factory(LibreMetaverse.LslTools.Parser)", - ) - } - /// C# member: `M:LibreMetaverse.LslTools.yycs0syntax.GStuff_2_factory(LibreMetaverse.LslTools.Parser)`. - pub fn g_stuff_2_factory( - yyp: libremetaverse_lsl_tools::Parser, - ) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.yycs0syntax.GStuff_2_factory(LibreMetaverse.LslTools.Parser)", - ) - } - /// C# member: `M:LibreMetaverse.LslTools.yycs0syntax.GStuff_3_factory(LibreMetaverse.LslTools.Parser)`. - pub fn g_stuff_3_factory( - yyp: libremetaverse_lsl_tools::Parser, - ) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.yycs0syntax.GStuff_3_factory(LibreMetaverse.LslTools.Parser)", - ) - } - /// C# member: `M:LibreMetaverse.LslTools.yycs0syntax.GStuff_4_1_factory(LibreMetaverse.LslTools.Parser)`. - pub fn g_stuff_4_1_factory( - yyp: libremetaverse_lsl_tools::Parser, - ) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.yycs0syntax.GStuff_4_1_factory(LibreMetaverse.LslTools.Parser)", - ) - } - /// C# member: `M:LibreMetaverse.LslTools.yycs0syntax.GStuff_4_factory(LibreMetaverse.LslTools.Parser)`. - pub fn g_stuff_4_factory( - yyp: libremetaverse_lsl_tools::Parser, - ) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.yycs0syntax.GStuff_4_factory(LibreMetaverse.LslTools.Parser)", - ) - } - /// C# member: `M:LibreMetaverse.LslTools.yycs0syntax.GStuff_5_factory(LibreMetaverse.LslTools.Parser)`. - pub fn g_stuff_5_factory( - yyp: libremetaverse_lsl_tools::Parser, - ) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.yycs0syntax.GStuff_5_factory(LibreMetaverse.LslTools.Parser)", - ) - } - /// C# member: `M:LibreMetaverse.LslTools.yycs0syntax.GStuff_6_1_factory(LibreMetaverse.LslTools.Parser)`. - pub fn g_stuff_6_1_factory( - yyp: libremetaverse_lsl_tools::Parser, - ) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.yycs0syntax.GStuff_6_1_factory(LibreMetaverse.LslTools.Parser)", - ) - } - /// C# member: `M:LibreMetaverse.LslTools.yycs0syntax.GStuff_6_factory(LibreMetaverse.LslTools.Parser)`. - pub fn g_stuff_6_factory( - yyp: libremetaverse_lsl_tools::Parser, - ) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.yycs0syntax.GStuff_6_factory(LibreMetaverse.LslTools.Parser)", - ) - } - /// C# member: `M:LibreMetaverse.LslTools.yycs0syntax.GStuff_factory(LibreMetaverse.LslTools.Parser)`. - pub fn g_stuff_factory( - yyp: libremetaverse_lsl_tools::Parser, - ) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.yycs0syntax.GStuff_factory(LibreMetaverse.LslTools.Parser)", - ) - } - /// C# member: `M:LibreMetaverse.LslTools.yycs0syntax.Item_10_1_factory(LibreMetaverse.LslTools.Parser)`. - pub fn item_10_1_factory( - yyp: libremetaverse_lsl_tools::Parser, - ) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.yycs0syntax.Item_10_1_factory(LibreMetaverse.LslTools.Parser)", - ) - } - /// C# member: `M:LibreMetaverse.LslTools.yycs0syntax.Item_10_factory(LibreMetaverse.LslTools.Parser)`. - pub fn item_10_factory( - yyp: libremetaverse_lsl_tools::Parser, - ) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.yycs0syntax.Item_10_factory(LibreMetaverse.LslTools.Parser)", - ) - } - /// C# member: `M:LibreMetaverse.LslTools.yycs0syntax.Item_11_factory(LibreMetaverse.LslTools.Parser)`. - pub fn item_11_factory( - yyp: libremetaverse_lsl_tools::Parser, - ) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.yycs0syntax.Item_11_factory(LibreMetaverse.LslTools.Parser)", - ) - } - /// C# member: `M:LibreMetaverse.LslTools.yycs0syntax.Item_12_1_factory(LibreMetaverse.LslTools.Parser)`. - pub fn item_12_1_factory( - yyp: libremetaverse_lsl_tools::Parser, - ) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.yycs0syntax.Item_12_1_factory(LibreMetaverse.LslTools.Parser)", - ) - } - /// C# member: `M:LibreMetaverse.LslTools.yycs0syntax.Item_12_factory(LibreMetaverse.LslTools.Parser)`. - pub fn item_12_factory( - yyp: libremetaverse_lsl_tools::Parser, - ) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.yycs0syntax.Item_12_factory(LibreMetaverse.LslTools.Parser)", - ) - } - /// C# member: `M:LibreMetaverse.LslTools.yycs0syntax.Item_13_factory(LibreMetaverse.LslTools.Parser)`. - pub fn item_13_factory( - yyp: libremetaverse_lsl_tools::Parser, - ) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.yycs0syntax.Item_13_factory(LibreMetaverse.LslTools.Parser)", - ) - } - /// C# member: `M:LibreMetaverse.LslTools.yycs0syntax.Item_14_1_factory(LibreMetaverse.LslTools.Parser)`. - pub fn item_14_1_factory( - yyp: libremetaverse_lsl_tools::Parser, - ) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.yycs0syntax.Item_14_1_factory(LibreMetaverse.LslTools.Parser)", - ) - } - /// C# member: `M:LibreMetaverse.LslTools.yycs0syntax.Item_14_factory(LibreMetaverse.LslTools.Parser)`. - pub fn item_14_factory( - yyp: libremetaverse_lsl_tools::Parser, - ) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.yycs0syntax.Item_14_factory(LibreMetaverse.LslTools.Parser)", - ) - } - /// C# member: `M:LibreMetaverse.LslTools.yycs0syntax.Item_15_factory(LibreMetaverse.LslTools.Parser)`. - pub fn item_15_factory( - yyp: libremetaverse_lsl_tools::Parser, - ) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.yycs0syntax.Item_15_factory(LibreMetaverse.LslTools.Parser)", - ) - } - /// C# member: `M:LibreMetaverse.LslTools.yycs0syntax.Item_16_1_factory(LibreMetaverse.LslTools.Parser)`. - pub fn item_16_1_factory( - yyp: libremetaverse_lsl_tools::Parser, - ) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.yycs0syntax.Item_16_1_factory(LibreMetaverse.LslTools.Parser)", - ) - } - /// C# member: `M:LibreMetaverse.LslTools.yycs0syntax.Item_16_factory(LibreMetaverse.LslTools.Parser)`. - pub fn item_16_factory( - yyp: libremetaverse_lsl_tools::Parser, - ) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.yycs0syntax.Item_16_factory(LibreMetaverse.LslTools.Parser)", - ) - } - /// C# member: `M:LibreMetaverse.LslTools.yycs0syntax.Item_17_factory(LibreMetaverse.LslTools.Parser)`. - pub fn item_17_factory( - yyp: libremetaverse_lsl_tools::Parser, - ) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.yycs0syntax.Item_17_factory(LibreMetaverse.LslTools.Parser)", - ) - } - /// C# member: `M:LibreMetaverse.LslTools.yycs0syntax.Item_18_1_factory(LibreMetaverse.LslTools.Parser)`. - pub fn item_18_1_factory( - yyp: libremetaverse_lsl_tools::Parser, - ) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.yycs0syntax.Item_18_1_factory(LibreMetaverse.LslTools.Parser)", - ) - } - /// C# member: `M:LibreMetaverse.LslTools.yycs0syntax.Item_18_factory(LibreMetaverse.LslTools.Parser)`. - pub fn item_18_factory( - yyp: libremetaverse_lsl_tools::Parser, - ) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.yycs0syntax.Item_18_factory(LibreMetaverse.LslTools.Parser)", - ) - } - /// C# member: `M:LibreMetaverse.LslTools.yycs0syntax.Item_19_factory(LibreMetaverse.LslTools.Parser)`. - pub fn item_19_factory( - yyp: libremetaverse_lsl_tools::Parser, - ) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.yycs0syntax.Item_19_factory(LibreMetaverse.LslTools.Parser)", - ) - } - /// C# member: `M:LibreMetaverse.LslTools.yycs0syntax.Item_1_factory(LibreMetaverse.LslTools.Parser)`. - pub fn item_1_factory( - yyp: libremetaverse_lsl_tools::Parser, - ) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.yycs0syntax.Item_1_factory(LibreMetaverse.LslTools.Parser)", - ) - } - /// C# member: `M:LibreMetaverse.LslTools.yycs0syntax.Item_20_1_factory(LibreMetaverse.LslTools.Parser)`. - pub fn item_20_1_factory( - yyp: libremetaverse_lsl_tools::Parser, - ) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.yycs0syntax.Item_20_1_factory(LibreMetaverse.LslTools.Parser)", - ) - } - /// C# member: `M:LibreMetaverse.LslTools.yycs0syntax.Item_20_factory(LibreMetaverse.LslTools.Parser)`. - pub fn item_20_factory( - yyp: libremetaverse_lsl_tools::Parser, - ) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.yycs0syntax.Item_20_factory(LibreMetaverse.LslTools.Parser)", - ) - } - /// C# member: `M:LibreMetaverse.LslTools.yycs0syntax.Item_21_factory(LibreMetaverse.LslTools.Parser)`. - pub fn item_21_factory( - yyp: libremetaverse_lsl_tools::Parser, - ) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.yycs0syntax.Item_21_factory(LibreMetaverse.LslTools.Parser)", - ) - } - /// C# member: `M:LibreMetaverse.LslTools.yycs0syntax.Item_22_1_factory(LibreMetaverse.LslTools.Parser)`. - pub fn item_22_1_factory( - yyp: libremetaverse_lsl_tools::Parser, - ) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.yycs0syntax.Item_22_1_factory(LibreMetaverse.LslTools.Parser)", - ) - } - /// C# member: `M:LibreMetaverse.LslTools.yycs0syntax.Item_22_factory(LibreMetaverse.LslTools.Parser)`. - pub fn item_22_factory( - yyp: libremetaverse_lsl_tools::Parser, - ) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.yycs0syntax.Item_22_factory(LibreMetaverse.LslTools.Parser)", - ) - } - /// C# member: `M:LibreMetaverse.LslTools.yycs0syntax.Item_23_factory(LibreMetaverse.LslTools.Parser)`. - pub fn item_23_factory( - yyp: libremetaverse_lsl_tools::Parser, - ) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.yycs0syntax.Item_23_factory(LibreMetaverse.LslTools.Parser)", - ) - } - /// C# member: `M:LibreMetaverse.LslTools.yycs0syntax.Item_24_1_factory(LibreMetaverse.LslTools.Parser)`. - pub fn item_24_1_factory( - yyp: libremetaverse_lsl_tools::Parser, - ) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.yycs0syntax.Item_24_1_factory(LibreMetaverse.LslTools.Parser)", - ) - } - /// C# member: `M:LibreMetaverse.LslTools.yycs0syntax.Item_24_factory(LibreMetaverse.LslTools.Parser)`. - pub fn item_24_factory( - yyp: libremetaverse_lsl_tools::Parser, - ) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.yycs0syntax.Item_24_factory(LibreMetaverse.LslTools.Parser)", - ) - } - /// C# member: `M:LibreMetaverse.LslTools.yycs0syntax.Item_2_1_factory(LibreMetaverse.LslTools.Parser)`. - pub fn item_2_1_factory( - yyp: libremetaverse_lsl_tools::Parser, - ) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.yycs0syntax.Item_2_1_factory(LibreMetaverse.LslTools.Parser)", - ) - } - /// C# member: `M:LibreMetaverse.LslTools.yycs0syntax.Item_2_factory(LibreMetaverse.LslTools.Parser)`. - pub fn item_2_factory( - yyp: libremetaverse_lsl_tools::Parser, - ) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.yycs0syntax.Item_2_factory(LibreMetaverse.LslTools.Parser)", - ) - } - /// C# member: `M:LibreMetaverse.LslTools.yycs0syntax.Item_3_factory(LibreMetaverse.LslTools.Parser)`. - pub fn item_3_factory( - yyp: libremetaverse_lsl_tools::Parser, - ) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.yycs0syntax.Item_3_factory(LibreMetaverse.LslTools.Parser)", - ) - } - /// C# member: `M:LibreMetaverse.LslTools.yycs0syntax.Item_4_1_factory(LibreMetaverse.LslTools.Parser)`. - pub fn item_4_1_factory( - yyp: libremetaverse_lsl_tools::Parser, - ) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.yycs0syntax.Item_4_1_factory(LibreMetaverse.LslTools.Parser)", - ) - } - /// C# member: `M:LibreMetaverse.LslTools.yycs0syntax.Item_4_factory(LibreMetaverse.LslTools.Parser)`. - pub fn item_4_factory( - yyp: libremetaverse_lsl_tools::Parser, - ) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.yycs0syntax.Item_4_factory(LibreMetaverse.LslTools.Parser)", - ) - } - /// C# member: `M:LibreMetaverse.LslTools.yycs0syntax.Item_5_factory(LibreMetaverse.LslTools.Parser)`. - pub fn item_5_factory( - yyp: libremetaverse_lsl_tools::Parser, - ) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.yycs0syntax.Item_5_factory(LibreMetaverse.LslTools.Parser)", - ) - } - /// C# member: `M:LibreMetaverse.LslTools.yycs0syntax.Item_6_1_factory(LibreMetaverse.LslTools.Parser)`. - pub fn item_6_1_factory( - yyp: libremetaverse_lsl_tools::Parser, - ) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.yycs0syntax.Item_6_1_factory(LibreMetaverse.LslTools.Parser)", - ) - } - /// C# member: `M:LibreMetaverse.LslTools.yycs0syntax.Item_6_factory(LibreMetaverse.LslTools.Parser)`. - pub fn item_6_factory( - yyp: libremetaverse_lsl_tools::Parser, - ) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.yycs0syntax.Item_6_factory(LibreMetaverse.LslTools.Parser)", - ) - } - /// C# member: `M:LibreMetaverse.LslTools.yycs0syntax.Item_7_factory(LibreMetaverse.LslTools.Parser)`. - pub fn item_7_factory( - yyp: libremetaverse_lsl_tools::Parser, - ) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.yycs0syntax.Item_7_factory(LibreMetaverse.LslTools.Parser)", - ) - } - /// C# member: `M:LibreMetaverse.LslTools.yycs0syntax.Item_8_1_factory(LibreMetaverse.LslTools.Parser)`. - pub fn item_8_1_factory( - yyp: libremetaverse_lsl_tools::Parser, - ) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.yycs0syntax.Item_8_1_factory(LibreMetaverse.LslTools.Parser)", - ) - } - /// C# member: `M:LibreMetaverse.LslTools.yycs0syntax.Item_8_factory(LibreMetaverse.LslTools.Parser)`. - pub fn item_8_factory( - yyp: libremetaverse_lsl_tools::Parser, - ) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.yycs0syntax.Item_8_factory(LibreMetaverse.LslTools.Parser)", - ) - } - /// C# member: `M:LibreMetaverse.LslTools.yycs0syntax.Item_9_factory(LibreMetaverse.LslTools.Parser)`. - pub fn item_9_factory( - yyp: libremetaverse_lsl_tools::Parser, - ) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.yycs0syntax.Item_9_factory(LibreMetaverse.LslTools.Parser)", - ) - } - /// C# member: `M:LibreMetaverse.LslTools.yycs0syntax.Item_factory(LibreMetaverse.LslTools.Parser)`. - pub fn item_factory( - yyp: libremetaverse_lsl_tools::Parser, - ) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.yycs0syntax.Item_factory(LibreMetaverse.LslTools.Parser)", - ) - } - /// C# member: `M:LibreMetaverse.LslTools.yycs0syntax.Name_1_factory(LibreMetaverse.LslTools.Parser)`. - pub fn name_1_factory( - yyp: libremetaverse_lsl_tools::Parser, - ) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.yycs0syntax.Name_1_factory(LibreMetaverse.LslTools.Parser)", - ) - } - /// C# member: `M:LibreMetaverse.LslTools.yycs0syntax.Name_2_1_factory(LibreMetaverse.LslTools.Parser)`. - pub fn name_2_1_factory( - yyp: libremetaverse_lsl_tools::Parser, - ) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.yycs0syntax.Name_2_1_factory(LibreMetaverse.LslTools.Parser)", - ) - } - /// C# member: `M:LibreMetaverse.LslTools.yycs0syntax.Name_2_factory(LibreMetaverse.LslTools.Parser)`. - pub fn name_2_factory( - yyp: libremetaverse_lsl_tools::Parser, - ) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.yycs0syntax.Name_2_factory(LibreMetaverse.LslTools.Parser)", - ) - } - /// C# member: `M:LibreMetaverse.LslTools.yycs0syntax.Name_3_factory(LibreMetaverse.LslTools.Parser)`. - pub fn name_3_factory( - yyp: libremetaverse_lsl_tools::Parser, - ) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.yycs0syntax.Name_3_factory(LibreMetaverse.LslTools.Parser)", - ) - } - /// C# member: `M:LibreMetaverse.LslTools.yycs0syntax.Name_4_1_factory(LibreMetaverse.LslTools.Parser)`. - pub fn name_4_1_factory( - yyp: libremetaverse_lsl_tools::Parser, - ) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.yycs0syntax.Name_4_1_factory(LibreMetaverse.LslTools.Parser)", - ) - } - /// C# member: `M:LibreMetaverse.LslTools.yycs0syntax.Name_4_factory(LibreMetaverse.LslTools.Parser)`. - pub fn name_4_factory( - yyp: libremetaverse_lsl_tools::Parser, - ) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.yycs0syntax.Name_4_factory(LibreMetaverse.LslTools.Parser)", - ) - } - /// C# member: `M:LibreMetaverse.LslTools.yycs0syntax.Name_factory(LibreMetaverse.LslTools.Parser)`. - pub fn name_factory( - yyp: libremetaverse_lsl_tools::Parser, - ) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.yycs0syntax.Name_factory(LibreMetaverse.LslTools.Parser)", - ) - } - /// C# member: `M:LibreMetaverse.LslTools.yycs0syntax.Stuff_1_factory(LibreMetaverse.LslTools.Parser)`. - pub fn stuff_1_factory( - yyp: libremetaverse_lsl_tools::Parser, - ) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.yycs0syntax.Stuff_1_factory(LibreMetaverse.LslTools.Parser)", - ) - } - /// C# member: `M:LibreMetaverse.LslTools.yycs0syntax.Stuff_2_1_factory(LibreMetaverse.LslTools.Parser)`. - pub fn stuff_2_1_factory( - yyp: libremetaverse_lsl_tools::Parser, - ) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.yycs0syntax.Stuff_2_1_factory(LibreMetaverse.LslTools.Parser)", - ) - } - /// C# member: `M:LibreMetaverse.LslTools.yycs0syntax.Stuff_2_factory(LibreMetaverse.LslTools.Parser)`. - pub fn stuff_2_factory( - yyp: libremetaverse_lsl_tools::Parser, - ) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.yycs0syntax.Stuff_2_factory(LibreMetaverse.LslTools.Parser)", - ) - } - /// C# member: `M:LibreMetaverse.LslTools.yycs0syntax.Stuff_3_factory(LibreMetaverse.LslTools.Parser)`. - pub fn stuff_3_factory( - yyp: libremetaverse_lsl_tools::Parser, - ) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.yycs0syntax.Stuff_3_factory(LibreMetaverse.LslTools.Parser)", - ) - } - /// C# member: `M:LibreMetaverse.LslTools.yycs0syntax.Stuff_4_1_factory(LibreMetaverse.LslTools.Parser)`. - pub fn stuff_4_1_factory( - yyp: libremetaverse_lsl_tools::Parser, - ) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.yycs0syntax.Stuff_4_1_factory(LibreMetaverse.LslTools.Parser)", - ) - } - /// C# member: `M:LibreMetaverse.LslTools.yycs0syntax.Stuff_4_factory(LibreMetaverse.LslTools.Parser)`. - pub fn stuff_4_factory( - yyp: libremetaverse_lsl_tools::Parser, - ) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.yycs0syntax.Stuff_4_factory(LibreMetaverse.LslTools.Parser)", - ) - } - /// C# member: `M:LibreMetaverse.LslTools.yycs0syntax.Stuff_factory(LibreMetaverse.LslTools.Parser)`. - pub fn stuff_factory( - yyp: libremetaverse_lsl_tools::Parser, - ) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.yycs0syntax.Stuff_factory(LibreMetaverse.LslTools.Parser)", - ) - } - /// C# member: `M:LibreMetaverse.LslTools.yycs0syntax.error_factory(LibreMetaverse.LslTools.Parser)`. - pub fn error_factory( - yyp: libremetaverse_lsl_tools::Parser, - ) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.yycs0syntax.error_factory(LibreMetaverse.LslTools.Parser)", - ) - } -} +/// C# member: `M:LibreMetaverse.LslTools.yycs0syntax.#ctor`. +/// C# member: `M:LibreMetaverse.LslTools.yycs0syntax.Action(LibreMetaverse.LslTools.Parser,LibreMetaverse.LslTools.SYMBOL,System.Int32)`. +/// C# member: `M:LibreMetaverse.LslTools.yycs0syntax.BaseCall_1_factory(LibreMetaverse.LslTools.Parser)`. +/// C# member: `M:LibreMetaverse.LslTools.yycs0syntax.BaseCall_2_1_factory(LibreMetaverse.LslTools.Parser)`. +/// C# member: `M:LibreMetaverse.LslTools.yycs0syntax.BaseCall_2_factory(LibreMetaverse.LslTools.Parser)`. +/// C# member: `M:LibreMetaverse.LslTools.yycs0syntax.BaseCall_3_factory(LibreMetaverse.LslTools.Parser)`. +/// C# member: `M:LibreMetaverse.LslTools.yycs0syntax.BaseCall_4_1_factory(LibreMetaverse.LslTools.Parser)`. +/// C# member: `M:LibreMetaverse.LslTools.yycs0syntax.BaseCall_4_factory(LibreMetaverse.LslTools.Parser)`. +/// C# member: `M:LibreMetaverse.LslTools.yycs0syntax.BaseCall_5_factory(LibreMetaverse.LslTools.Parser)`. +/// C# member: `M:LibreMetaverse.LslTools.yycs0syntax.BaseCall_6_1_factory(LibreMetaverse.LslTools.Parser)`. +/// C# member: `M:LibreMetaverse.LslTools.yycs0syntax.BaseCall_6_factory(LibreMetaverse.LslTools.Parser)`. +/// C# member: `M:LibreMetaverse.LslTools.yycs0syntax.BaseCall_factory(LibreMetaverse.LslTools.Parser)`. +/// C# member: `M:LibreMetaverse.LslTools.yycs0syntax.Call_1_factory(LibreMetaverse.LslTools.Parser)`. +/// C# member: `M:LibreMetaverse.LslTools.yycs0syntax.Call_2_1_factory(LibreMetaverse.LslTools.Parser)`. +/// C# member: `M:LibreMetaverse.LslTools.yycs0syntax.Call_2_factory(LibreMetaverse.LslTools.Parser)`. +/// C# member: `M:LibreMetaverse.LslTools.yycs0syntax.Call_factory(LibreMetaverse.LslTools.Parser)`. +/// C# member: `M:LibreMetaverse.LslTools.yycs0syntax.ClassBody_1_factory(LibreMetaverse.LslTools.Parser)`. +/// C# member: `M:LibreMetaverse.LslTools.yycs0syntax.ClassBody_2_1_factory(LibreMetaverse.LslTools.Parser)`. +/// C# member: `M:LibreMetaverse.LslTools.yycs0syntax.ClassBody_2_factory(LibreMetaverse.LslTools.Parser)`. +/// C# member: `M:LibreMetaverse.LslTools.yycs0syntax.ClassBody_factory(LibreMetaverse.LslTools.Parser)`. +/// C# member: `M:LibreMetaverse.LslTools.yycs0syntax.Cons_1_factory(LibreMetaverse.LslTools.Parser)`. +/// C# member: `M:LibreMetaverse.LslTools.yycs0syntax.Cons_2_1_factory(LibreMetaverse.LslTools.Parser)`. +/// C# member: `M:LibreMetaverse.LslTools.yycs0syntax.Cons_2_factory(LibreMetaverse.LslTools.Parser)`. +/// C# member: `M:LibreMetaverse.LslTools.yycs0syntax.Cons_factory(LibreMetaverse.LslTools.Parser)`. +/// C# member: `M:LibreMetaverse.LslTools.yycs0syntax.GStuff_1_factory(LibreMetaverse.LslTools.Parser)`. +/// C# member: `M:LibreMetaverse.LslTools.yycs0syntax.GStuff_2_1_factory(LibreMetaverse.LslTools.Parser)`. +/// C# member: `M:LibreMetaverse.LslTools.yycs0syntax.GStuff_2_factory(LibreMetaverse.LslTools.Parser)`. +/// C# member: `M:LibreMetaverse.LslTools.yycs0syntax.GStuff_3_factory(LibreMetaverse.LslTools.Parser)`. +/// C# member: `M:LibreMetaverse.LslTools.yycs0syntax.GStuff_4_1_factory(LibreMetaverse.LslTools.Parser)`. +/// C# member: `M:LibreMetaverse.LslTools.yycs0syntax.GStuff_4_factory(LibreMetaverse.LslTools.Parser)`. +/// C# member: `M:LibreMetaverse.LslTools.yycs0syntax.GStuff_5_factory(LibreMetaverse.LslTools.Parser)`. +/// C# member: `M:LibreMetaverse.LslTools.yycs0syntax.GStuff_6_1_factory(LibreMetaverse.LslTools.Parser)`. +/// C# member: `M:LibreMetaverse.LslTools.yycs0syntax.GStuff_6_factory(LibreMetaverse.LslTools.Parser)`. +/// C# member: `M:LibreMetaverse.LslTools.yycs0syntax.GStuff_factory(LibreMetaverse.LslTools.Parser)`. +/// C# member: `M:LibreMetaverse.LslTools.yycs0syntax.Item_10_1_factory(LibreMetaverse.LslTools.Parser)`. +/// C# member: `M:LibreMetaverse.LslTools.yycs0syntax.Item_10_factory(LibreMetaverse.LslTools.Parser)`. +/// C# member: `M:LibreMetaverse.LslTools.yycs0syntax.Item_11_factory(LibreMetaverse.LslTools.Parser)`. +/// C# member: `M:LibreMetaverse.LslTools.yycs0syntax.Item_12_1_factory(LibreMetaverse.LslTools.Parser)`. +/// C# member: `M:LibreMetaverse.LslTools.yycs0syntax.Item_12_factory(LibreMetaverse.LslTools.Parser)`. +/// C# member: `M:LibreMetaverse.LslTools.yycs0syntax.Item_13_factory(LibreMetaverse.LslTools.Parser)`. +/// C# member: `M:LibreMetaverse.LslTools.yycs0syntax.Item_14_1_factory(LibreMetaverse.LslTools.Parser)`. +/// C# member: `M:LibreMetaverse.LslTools.yycs0syntax.Item_14_factory(LibreMetaverse.LslTools.Parser)`. +/// C# member: `M:LibreMetaverse.LslTools.yycs0syntax.Item_15_factory(LibreMetaverse.LslTools.Parser)`. +/// C# member: `M:LibreMetaverse.LslTools.yycs0syntax.Item_16_1_factory(LibreMetaverse.LslTools.Parser)`. +/// C# member: `M:LibreMetaverse.LslTools.yycs0syntax.Item_16_factory(LibreMetaverse.LslTools.Parser)`. +/// C# member: `M:LibreMetaverse.LslTools.yycs0syntax.Item_17_factory(LibreMetaverse.LslTools.Parser)`. +/// C# member: `M:LibreMetaverse.LslTools.yycs0syntax.Item_18_1_factory(LibreMetaverse.LslTools.Parser)`. +/// C# member: `M:LibreMetaverse.LslTools.yycs0syntax.Item_18_factory(LibreMetaverse.LslTools.Parser)`. +/// C# member: `M:LibreMetaverse.LslTools.yycs0syntax.Item_19_factory(LibreMetaverse.LslTools.Parser)`. +/// C# member: `M:LibreMetaverse.LslTools.yycs0syntax.Item_1_factory(LibreMetaverse.LslTools.Parser)`. +/// C# member: `M:LibreMetaverse.LslTools.yycs0syntax.Item_20_1_factory(LibreMetaverse.LslTools.Parser)`. +/// C# member: `M:LibreMetaverse.LslTools.yycs0syntax.Item_20_factory(LibreMetaverse.LslTools.Parser)`. +/// C# member: `M:LibreMetaverse.LslTools.yycs0syntax.Item_21_factory(LibreMetaverse.LslTools.Parser)`. +/// C# member: `M:LibreMetaverse.LslTools.yycs0syntax.Item_22_1_factory(LibreMetaverse.LslTools.Parser)`. +/// C# member: `M:LibreMetaverse.LslTools.yycs0syntax.Item_22_factory(LibreMetaverse.LslTools.Parser)`. +/// C# member: `M:LibreMetaverse.LslTools.yycs0syntax.Item_23_factory(LibreMetaverse.LslTools.Parser)`. +/// C# member: `M:LibreMetaverse.LslTools.yycs0syntax.Item_24_1_factory(LibreMetaverse.LslTools.Parser)`. +/// C# member: `M:LibreMetaverse.LslTools.yycs0syntax.Item_24_factory(LibreMetaverse.LslTools.Parser)`. +/// C# member: `M:LibreMetaverse.LslTools.yycs0syntax.Item_2_1_factory(LibreMetaverse.LslTools.Parser)`. +/// C# member: `M:LibreMetaverse.LslTools.yycs0syntax.Item_2_factory(LibreMetaverse.LslTools.Parser)`. +/// C# member: `M:LibreMetaverse.LslTools.yycs0syntax.Item_3_factory(LibreMetaverse.LslTools.Parser)`. +/// C# member: `M:LibreMetaverse.LslTools.yycs0syntax.Item_4_1_factory(LibreMetaverse.LslTools.Parser)`. +/// C# member: `M:LibreMetaverse.LslTools.yycs0syntax.Item_4_factory(LibreMetaverse.LslTools.Parser)`. +/// C# member: `M:LibreMetaverse.LslTools.yycs0syntax.Item_5_factory(LibreMetaverse.LslTools.Parser)`. +/// C# member: `M:LibreMetaverse.LslTools.yycs0syntax.Item_6_1_factory(LibreMetaverse.LslTools.Parser)`. +/// C# member: `M:LibreMetaverse.LslTools.yycs0syntax.Item_6_factory(LibreMetaverse.LslTools.Parser)`. +/// C# member: `M:LibreMetaverse.LslTools.yycs0syntax.Item_7_factory(LibreMetaverse.LslTools.Parser)`. +/// C# member: `M:LibreMetaverse.LslTools.yycs0syntax.Item_8_1_factory(LibreMetaverse.LslTools.Parser)`. +/// C# member: `M:LibreMetaverse.LslTools.yycs0syntax.Item_8_factory(LibreMetaverse.LslTools.Parser)`. +/// C# member: `M:LibreMetaverse.LslTools.yycs0syntax.Item_9_factory(LibreMetaverse.LslTools.Parser)`. +/// C# member: `M:LibreMetaverse.LslTools.yycs0syntax.Item_factory(LibreMetaverse.LslTools.Parser)`. +/// C# member: `M:LibreMetaverse.LslTools.yycs0syntax.Name_1_factory(LibreMetaverse.LslTools.Parser)`. +/// C# member: `M:LibreMetaverse.LslTools.yycs0syntax.Name_2_1_factory(LibreMetaverse.LslTools.Parser)`. +/// C# member: `M:LibreMetaverse.LslTools.yycs0syntax.Name_2_factory(LibreMetaverse.LslTools.Parser)`. +/// C# member: `M:LibreMetaverse.LslTools.yycs0syntax.Name_3_factory(LibreMetaverse.LslTools.Parser)`. +/// C# member: `M:LibreMetaverse.LslTools.yycs0syntax.Name_4_1_factory(LibreMetaverse.LslTools.Parser)`. +/// C# member: `M:LibreMetaverse.LslTools.yycs0syntax.Name_4_factory(LibreMetaverse.LslTools.Parser)`. +/// C# member: `M:LibreMetaverse.LslTools.yycs0syntax.Name_factory(LibreMetaverse.LslTools.Parser)`. +/// C# member: `M:LibreMetaverse.LslTools.yycs0syntax.Stuff_1_factory(LibreMetaverse.LslTools.Parser)`. +/// C# member: `M:LibreMetaverse.LslTools.yycs0syntax.Stuff_2_1_factory(LibreMetaverse.LslTools.Parser)`. +/// C# member: `M:LibreMetaverse.LslTools.yycs0syntax.Stuff_2_factory(LibreMetaverse.LslTools.Parser)`. +/// C# member: `M:LibreMetaverse.LslTools.yycs0syntax.Stuff_3_factory(LibreMetaverse.LslTools.Parser)`. +/// C# member: `M:LibreMetaverse.LslTools.yycs0syntax.Stuff_4_1_factory(LibreMetaverse.LslTools.Parser)`. +/// C# member: `M:LibreMetaverse.LslTools.yycs0syntax.Stuff_4_factory(LibreMetaverse.LslTools.Parser)`. +/// C# member: `M:LibreMetaverse.LslTools.yycs0syntax.Stuff_factory(LibreMetaverse.LslTools.Parser)`. +/// C# member: `M:LibreMetaverse.LslTools.yycs0syntax.error_factory(LibreMetaverse.LslTools.Parser)`. +pub use crate::generated_tables::yycs0syntax as Yycs0syntax; /// C# type: `T:LibreMetaverse.LslTools.yycs0tokens`. -pub struct Yycs0tokens; -impl Yycs0tokens { - /// C# member: `M:LibreMetaverse.LslTools.yycs0tokens.#ctor(LibreMetaverse.LslTools.ErrorHandler)`. - pub fn new(eh: libremetaverse_lsl_tools::ErrorHandler) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.yycs0tokens.#ctor(LibreMetaverse.LslTools.ErrorHandler)", - ) - } - /// C# member: `M:LibreMetaverse.LslTools.yycs0tokens.ANY_factory(LibreMetaverse.LslTools.Lexer)`. - pub fn any_factory( - yyl: libremetaverse_lsl_tools::Lexer, - ) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.yycs0tokens.ANY_factory(LibreMetaverse.LslTools.Lexer)", - ) - } - /// C# member: `M:LibreMetaverse.LslTools.yycs0tokens.BASE_factory(LibreMetaverse.LslTools.Lexer)`. - pub fn base_factory( - yyl: libremetaverse_lsl_tools::Lexer, - ) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.yycs0tokens.BASE_factory(LibreMetaverse.LslTools.Lexer)", - ) - } - /// C# member: `M:LibreMetaverse.LslTools.yycs0tokens.COLON_factory(LibreMetaverse.LslTools.Lexer)`. - pub fn colon_factory( - yyl: libremetaverse_lsl_tools::Lexer, - ) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.yycs0tokens.COLON_factory(LibreMetaverse.LslTools.Lexer)", - ) - } - /// C# member: `M:LibreMetaverse.LslTools.yycs0tokens.ID_factory(LibreMetaverse.LslTools.Lexer)`. - pub fn id_factory( - yyl: libremetaverse_lsl_tools::Lexer, - ) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.yycs0tokens.ID_factory(LibreMetaverse.LslTools.Lexer)", - ) - } - /// C# member: `M:LibreMetaverse.LslTools.yycs0tokens.LBRACE_factory(LibreMetaverse.LslTools.Lexer)`. - pub fn lbrace_factory( - yyl: libremetaverse_lsl_tools::Lexer, - ) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.yycs0tokens.LBRACE_factory(LibreMetaverse.LslTools.Lexer)", - ) - } - /// C# member: `M:LibreMetaverse.LslTools.yycs0tokens.LBRACK_factory(LibreMetaverse.LslTools.Lexer)`. - pub fn lbrack_factory( - yyl: libremetaverse_lsl_tools::Lexer, - ) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.yycs0tokens.LBRACK_factory(LibreMetaverse.LslTools.Lexer)", - ) - } - /// C# member: `M:LibreMetaverse.LslTools.yycs0tokens.LPAREN_factory(LibreMetaverse.LslTools.Lexer)`. - pub fn lparen_factory( - yyl: libremetaverse_lsl_tools::Lexer, - ) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.yycs0tokens.LPAREN_factory(LibreMetaverse.LslTools.Lexer)", - ) - } - /// C# member: `M:LibreMetaverse.LslTools.yycs0tokens.NEW_factory(LibreMetaverse.LslTools.Lexer)`. - pub fn new_factory( - yyl: libremetaverse_lsl_tools::Lexer, - ) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.yycs0tokens.NEW_factory(LibreMetaverse.LslTools.Lexer)", - ) - } - /// C# member: `M:LibreMetaverse.LslTools.yycs0tokens.OldAction(LibreMetaverse.LslTools.Lexer,System.String@,System.Int32,System.Boolean@)`. - pub fn old_action( - &self, - yym: libremetaverse_lsl_tools::Lexer, - yytext: &mut String, - action: i32, - reject: &mut bool, - ) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.yycs0tokens.OldAction(LibreMetaverse.LslTools.Lexer,System.String@,System.Int32,System.Boolean@)", - ) - } - /// C# member: `M:LibreMetaverse.LslTools.yycs0tokens.RBRACE_factory(LibreMetaverse.LslTools.Lexer)`. - pub fn rbrace_factory( - yyl: libremetaverse_lsl_tools::Lexer, - ) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.yycs0tokens.RBRACE_factory(LibreMetaverse.LslTools.Lexer)", - ) - } - /// C# member: `M:LibreMetaverse.LslTools.yycs0tokens.RBRACK_factory(LibreMetaverse.LslTools.Lexer)`. - pub fn rbrack_factory( - yyl: libremetaverse_lsl_tools::Lexer, - ) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.yycs0tokens.RBRACK_factory(LibreMetaverse.LslTools.Lexer)", - ) - } - /// C# member: `M:LibreMetaverse.LslTools.yycs0tokens.RPAREN_factory(LibreMetaverse.LslTools.Lexer)`. - pub fn rparen_factory( - yyl: libremetaverse_lsl_tools::Lexer, - ) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.yycs0tokens.RPAREN_factory(LibreMetaverse.LslTools.Lexer)", - ) - } - /// C# member: `M:LibreMetaverse.LslTools.yycs0tokens.SEMICOLON_factory(LibreMetaverse.LslTools.Lexer)`. - pub fn semicolon_factory( - yyl: libremetaverse_lsl_tools::Lexer, - ) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.yycs0tokens.SEMICOLON_factory(LibreMetaverse.LslTools.Lexer)", - ) - } - /// C# member: `M:LibreMetaverse.LslTools.yycs0tokens.THIS_factory(LibreMetaverse.LslTools.Lexer)`. - pub fn this_factory( - yyl: libremetaverse_lsl_tools::Lexer, - ) -> Result { - libremetaverse_types::not_implemented( - "M:LibreMetaverse.LslTools.yycs0tokens.THIS_factory(LibreMetaverse.LslTools.Lexer)", - ) - } -} +/// C# member: `M:LibreMetaverse.LslTools.yycs0tokens.#ctor(LibreMetaverse.LslTools.ErrorHandler)`. +/// C# member: `M:LibreMetaverse.LslTools.yycs0tokens.ANY_factory(LibreMetaverse.LslTools.Lexer)`. +/// C# member: `M:LibreMetaverse.LslTools.yycs0tokens.BASE_factory(LibreMetaverse.LslTools.Lexer)`. +/// C# member: `M:LibreMetaverse.LslTools.yycs0tokens.COLON_factory(LibreMetaverse.LslTools.Lexer)`. +/// C# member: `M:LibreMetaverse.LslTools.yycs0tokens.ID_factory(LibreMetaverse.LslTools.Lexer)`. +/// C# member: `M:LibreMetaverse.LslTools.yycs0tokens.LBRACE_factory(LibreMetaverse.LslTools.Lexer)`. +/// C# member: `M:LibreMetaverse.LslTools.yycs0tokens.LBRACK_factory(LibreMetaverse.LslTools.Lexer)`. +/// C# member: `M:LibreMetaverse.LslTools.yycs0tokens.LPAREN_factory(LibreMetaverse.LslTools.Lexer)`. +/// C# member: `M:LibreMetaverse.LslTools.yycs0tokens.NEW_factory(LibreMetaverse.LslTools.Lexer)`. +/// C# member: `M:LibreMetaverse.LslTools.yycs0tokens.OldAction(LibreMetaverse.LslTools.Lexer,System.String@,System.Int32,System.Boolean@)`. +/// C# member: `M:LibreMetaverse.LslTools.yycs0tokens.RBRACE_factory(LibreMetaverse.LslTools.Lexer)`. +/// C# member: `M:LibreMetaverse.LslTools.yycs0tokens.RBRACK_factory(LibreMetaverse.LslTools.Lexer)`. +/// C# member: `M:LibreMetaverse.LslTools.yycs0tokens.RPAREN_factory(LibreMetaverse.LslTools.Lexer)`. +/// C# member: `M:LibreMetaverse.LslTools.yycs0tokens.SEMICOLON_factory(LibreMetaverse.LslTools.Lexer)`. +/// C# member: `M:LibreMetaverse.LslTools.yycs0tokens.THIS_factory(LibreMetaverse.LslTools.Lexer)`. +pub use crate::generated_tables::yycs0tokens as Yycs0tokens; diff --git a/crates/libremetaverse-lsl-tools/src/generated_tables.rs b/crates/libremetaverse-lsl-tools/src/generated_tables.rs new file mode 100644 index 0000000..a34c8c7 --- /dev/null +++ b/crates/libremetaverse-lsl-tools/src/generated_tables.rs @@ -0,0 +1,857 @@ +// @generated by tools/generate_lsl_tables.py; do not edit by hand. +#![allow(non_camel_case_types)] +#![allow(non_snake_case)] +#![allow(clippy::missing_errors_doc)] +#![allow(clippy::must_use_candidate)] + +use std::ops::{Deref, DerefMut}; + +use libremetaverse_types::compat::{Object, UnicodeCategory}; + +use crate::{ + CharacterMatcher, Dfa, DfaAccept, DfaState, Error, ErrorHandler, Grammar, Lexer, LexerAction, + Parser, ResWds, SYMBOL, TOKEN, TokenDefinition, UnicodeClass, YyLexer, YyParser, +}; + +pub const LSL_GENERATOR_SOURCE_COMMIT: &str = "2aa70bb68513b39795da5d13c88f31b86e85a3ba"; +pub const LSL_GENERATOR_SOURCE_PARSER: &str = "LibreMetaverse.LslTools/YYClass/yycs0syntax.cs"; +pub const LSL_GENERATOR_SOURCE_LEXER: &str = "LibreMetaverse.LslTools/YYClass/yycs0tokens.cs"; +pub const LSL_GENERATOR_SOURCE_LICENSE: &str = "BSD-3-Clause"; +pub const LSL_GENERATOR_SERIALIZATION_VERSION: &str = "4.5"; +pub const GENERATED_PARSER_DATA: &[i32] = &[ + 1, 19, 2, 22, 2, 1, 3, 3, 1, 4, 4, 1, 4, 5, 1, 3, 6, 1, 2, 7, 1, 3, 8, 1, 5, 9, 1, 9, 10, 1, 6, + 11, 1, 6, 12, 1, 6, 13, 1, 6, 14, 1, 6, 15, 1, 6, 16, 0, 6, 17, 0, 5, 18, 0, 4, 19, 0, 9, 20, + 0, 4, 21, 0, 4, 22, 0, 8, 23, 0, 4, 25, 1, 19, 3, 16, 20, 16, 2, 16, 0, 3, 16, 2, 16, 18, 4, + 16, 2, 16, 21, 5, 17, 0, 6, 17, 2, 17, 18, 7, 20, 5, 23, 12, 17, 13, 22, 8, 21, 4, 23, 12, 17, + 13, 9, 22, 0, 10, 22, 5, 8, 3, 12, 17, 13, 11, 22, 5, 8, 4, 12, 17, 13, 12, 23, 1, 6, 13, 23, + 4, 6, 14, 17, 15, 14, 18, 1, 6, 15, 18, 1, 7, 16, 18, 1, 9, 17, 18, 1, 3, 18, 18, 1, 4, 19, 18, + 4, 4, 14, 17, 15, 20, 18, 1, 8, 21, 18, 2, 5, 23, 22, 18, 2, 5, 6, 23, 18, 3, 12, 17, 13, 24, + 18, 3, 10, 16, 11, 25, 18, 3, 14, 17, 15, +]; + +pub fn generated_symbol_name(number: i32) -> Option<&'static str> { + match number { + 2 => Some("EOF"), + 3 => Some("BASE"), + 4 => Some("THIS"), + 5 => Some("NEW"), + 6 => Some("ID"), + 7 => Some("ANY"), + 8 => Some("COLON"), + 9 => Some("SEMICOLON"), + 10 => Some("LBRACE"), + 11 => Some("RBRACE"), + 12 => Some("LPAREN"), + 13 => Some("RPAREN"), + 14 => Some("LBRACK"), + 15 => Some("RBRACK"), + 16 => Some("GStuff"), + 17 => Some("Stuff"), + 18 => Some("Item"), + 19 => Some("ClassBody"), + 20 => Some("Cons"), + 21 => Some("Call"), + 22 => Some("BaseCall"), + 23 => Some("Name"), + _ => None, + } +} + +pub fn generated_parser() -> Result { + let mut grammar = Grammar::new(19, 2)?; + grammar.add_symbol("EOF", 2, true)?; + grammar.add_symbol("BASE", 3, true)?; + grammar.add_symbol("THIS", 4, true)?; + grammar.add_symbol("NEW", 5, true)?; + grammar.add_symbol("ID", 6, true)?; + grammar.add_symbol("ANY", 7, true)?; + grammar.add_symbol("COLON", 8, true)?; + grammar.add_symbol("SEMICOLON", 9, true)?; + grammar.add_symbol("LBRACE", 10, true)?; + grammar.add_symbol("RBRACE", 11, true)?; + grammar.add_symbol("LPAREN", 12, true)?; + grammar.add_symbol("RPAREN", 13, true)?; + grammar.add_symbol("LBRACK", 14, true)?; + grammar.add_symbol("RBRACK", 15, true)?; + grammar.add_symbol("GStuff", 16, false)?; + grammar.add_symbol("Stuff", 17, false)?; + grammar.add_symbol("Item", 18, false)?; + grammar.add_symbol("ClassBody", 19, false)?; + grammar.add_symbol("Cons", 20, false)?; + grammar.add_symbol("Call", 21, false)?; + grammar.add_symbol("BaseCall", 22, false)?; + grammar.add_symbol("Name", 23, false)?; + grammar.add_production(19, vec![16, 20, 16])?; + grammar.add_production(16, vec![])?; + grammar.add_production(16, vec![16, 18])?; + grammar.add_production(16, vec![16, 21])?; + grammar.add_production(17, vec![])?; + grammar.add_production(17, vec![17, 18])?; + grammar.add_production(20, vec![23, 12, 17, 13, 22])?; + grammar.add_production(21, vec![23, 12, 17, 13])?; + grammar.add_production(22, vec![])?; + grammar.add_production(22, vec![8, 3, 12, 17, 13])?; + grammar.add_production(22, vec![8, 4, 12, 17, 13])?; + grammar.add_production(23, vec![6])?; + grammar.add_production(23, vec![6, 14, 17, 15])?; + grammar.add_production(18, vec![6])?; + grammar.add_production(18, vec![7])?; + grammar.add_production(18, vec![9])?; + grammar.add_production(18, vec![3])?; + grammar.add_production(18, vec![4])?; + grammar.add_production(18, vec![4, 14, 17, 15])?; + grammar.add_production(18, vec![8])?; + grammar.add_production(18, vec![5, 23])?; + grammar.add_production(18, vec![5, 6])?; + grammar.add_production(18, vec![12, 17, 13])?; + grammar.add_production(18, vec![10, 16, 11])?; + grammar.add_production(18, vec![14, 17, 15])?; + let mut parser = grammar.build()?; + parser.arr = GENERATED_PARSER_DATA.to_vec(); + Ok(parser) +} + +fn accept(name: &str, number: i32, action: LexerAction, action_number: i32) -> DfaAccept { + DfaAccept { + token: TokenDefinition { + name: name.to_owned(), + number, + }, + action, + action_number, + reserved_words: (name == "ID").then(|| "ID".to_owned()), + } +} + +pub fn generated_lexer_with_handler(error_handler: ErrorHandler) -> Result { + let punctuation = [ + (58, "COLON", 8), + (59, "SEMICOLON", 9), + (123, "LBRACE", 10), + (125, "RBRACE", 11), + (40, "LPAREN", 12), + (41, "RPAREN", 13), + (91, "LBRACK", 14), + (93, "RBRACK", 15), + ]; + let punctuation_start = 3usize; + let any_state = punctuation_start + punctuation.len(); + let mut states = vec![DfaState::default(); any_state + 1]; + states[0] = states[0] + .clone() + .transition(CharacterMatcher::UnicodeClass(UnicodeClass::WhiteSpace), 1) + .transition(CharacterMatcher::UnicodeClass(UnicodeClass::Letter), 2) + .transition(CharacterMatcher::Exact(u16::from(b'_')), 2); + for (offset, (unit, _, _)) in punctuation.iter().enumerate() { + states[0] + .transitions + .push((CharacterMatcher::Exact(*unit), punctuation_start + offset)); + } + states[0] + .transitions + .push((CharacterMatcher::Any, any_state)); + states[1] = states[1] + .clone() + .transition(CharacterMatcher::UnicodeClass(UnicodeClass::WhiteSpace), 1) + .accepting(accept("ANY", 7, LexerAction::Skip, -1)); + states[2] = states[2] + .clone() + .transition(CharacterMatcher::UnicodeClass(UnicodeClass::Letter), 2) + .transition(CharacterMatcher::UnicodeClass(UnicodeClass::Number), 2) + .transition(CharacterMatcher::Exact(u16::from(b'_')), 2) + .accepting(accept("ID", 6, LexerAction::Emit, 0)); + for (offset, (_, name, number)) in punctuation.iter().enumerate() { + states[punctuation_start + offset] = + DfaState::default().accepting(accept(name, *number, LexerAction::Emit, *number)); + } + states[any_state] = DfaState::default().accepting(accept("ANY", 7, LexerAction::Emit, 1)); + let mut lexer = YyLexer::new(error_handler)?; + lexer.set_start_dfa("YYINITIAL", Dfa::from_states(states, 0)?)?; + lexer.set_reserved_words( + "ID", + ResWds::from_pairs( + [ + ("base", TokenDefinition::new("BASE", 3)?), + ("this", TokenDefinition::new("THIS", 4)?), + ("new", TokenDefinition::new("NEW", 5)?), + ], + false, + )?, + )?; + lexer.using_eof = true; + for (name, number) in [ + ("EOF", 2), + ("BASE", 3), + ("THIS", 4), + ("NEW", 5), + ("ID", 6), + ("ANY", 7), + ("COLON", 8), + ("SEMICOLON", 9), + ("LBRACE", 10), + ("RBRACE", 11), + ("LPAREN", 12), + ("RPAREN", 13), + ("LBRACK", 14), + ("RBRACK", 15), + ] { + lexer + .tokens + .0 + .insert(Object::String(name.to_owned()), Object::Integer(number)); + } + let _ = lexer.using_cat(UnicodeCategory(0))?; + Ok(lexer) +} + +pub fn generated_lexer() -> Result { + generated_lexer_with_handler(ErrorHandler::new_with_boolean(false)?) +} + +#[derive(Clone, Debug)] +pub struct GeneratedLexerToken(TOKEN); + +impl GeneratedLexerToken { + pub fn new(lexer: Lexer) -> Result { + let name = generated_symbol_name(NUMBER).ok_or(Error::Argument)?; + Ok(Self(TOKEN::generated_with_lexer(lexer, name, NUMBER)?)) + } + pub fn yyname(&self) -> String { + self.0.yyname() + } + pub const fn yynum(&self) -> i32 { + NUMBER + } + pub fn yytext(&self) -> String { + self.0.yytext() + } +} + +impl Deref for GeneratedLexerToken { + type Target = TOKEN; + fn deref(&self) -> &Self::Target { + &self.0 + } +} +impl DerefMut for GeneratedLexerToken { + fn deref_mut(&mut self) -> &mut Self::Target { + &mut self.0 + } +} +pub type BASE = GeneratedLexerToken<3>; +pub type THIS = GeneratedLexerToken<4>; +pub type NEW = GeneratedLexerToken<5>; +pub type ID = GeneratedLexerToken<6>; +pub type ANY = GeneratedLexerToken<7>; +pub type COLON = GeneratedLexerToken<8>; +pub type SEMICOLON = GeneratedLexerToken<9>; +pub type LBRACE = GeneratedLexerToken<10>; +pub type RBRACE = GeneratedLexerToken<11>; +pub type LPAREN = GeneratedLexerToken<12>; +pub type RPAREN = GeneratedLexerToken<13>; +pub type LBRACK = GeneratedLexerToken<14>; +pub type RBRACK = GeneratedLexerToken<15>; + +fn generated_parser_identity(generated: i32) -> Option<(&'static str, i32)> { + match generated { + 27..=35 => Some(("GStuff", 16)), + 36..=41 => Some(("Stuff", 17)), + 63..=98 => Some(("Item", 18)), + 24..=26 => Some(("ClassBody", 19)), + 42..=44 => Some(("Cons", 20)), + 45..=47 => Some(("Call", 21)), + 48..=56 => Some(("BaseCall", 22)), + 57..=62 => Some(("Name", 23)), + _ => None, + } +} + +fn stack_text(parser: &Parser, index: i32) -> Result { + Ok(parser.stack_at(index)?.m_value.raw_text()) +} + +fn generated_semantic_text(generated: i32, parser: &Parser) -> Result { + Ok(match generated { + 26 => stack_text(parser, 1)?, + 32 | 35 | 41 => format!("{}{}", stack_text(parser, 1)?, stack_text(parser, 0)?), + 44 => format!( + "{}({}){}", + stack_text(parser, 4)?.trim(), + stack_text(parser, 2)?, + stack_text(parser, 0)? + ), + 47 => format!( + "{}({})", + stack_text(parser, 3)?.trim(), + stack_text(parser, 1)? + ), + 53 => format!("base{}", stack_text(parser, 1)?), + 56 => format!("this{}", stack_text(parser, 1)?), + 59 => format!(" {} ", stack_text(parser, 0)?), + 62 => format!("{}[{}]", stack_text(parser, 3)?, stack_text(parser, 1)?), + 65 | 68 => stack_text(parser, 0)?, + 71 => ";\n".to_owned(), + 74 => " base ".to_owned(), + 77 => " this ".to_owned(), + 80 => format!(" this[{}]", stack_text(parser, 1)?), + 83 => ":".to_owned(), + 86 | 89 => format!(" new {}", stack_text(parser, 0)?), + 92 => format!("({})", stack_text(parser, 1)?), + 95 => format!("{{{}}}\n", stack_text(parser, 1)?), + 98 => format!("[{}]", stack_text(parser, 1)?), + _ => String::new(), + }) +} + +#[derive(Clone, Debug)] +pub struct GeneratedParserSymbol(TOKEN); + +impl GeneratedParserSymbol { + pub fn new(parser: Parser) -> Result { + let (name, number) = generated_parser_identity(GENERATED).ok_or(Error::Argument)?; + let text = generated_semantic_text(GENERATED, &parser)?; + Ok(Self(TOKEN::generated_with_parser( + parser, name, number, text, + )?)) + } + pub fn yyname(&self) -> String { + self.0.yyname() + } + pub fn yynum(&self) -> i32 { + self.0.yynum() + } + pub fn yytext(&self) -> String { + self.0.yytext() + } +} + +impl Deref for GeneratedParserSymbol { + type Target = TOKEN; + fn deref(&self) -> &Self::Target { + &self.0 + } +} +impl DerefMut for GeneratedParserSymbol { + fn deref_mut(&mut self) -> &mut Self::Target { + &mut self.0 + } +} +pub type ClassBody_1 = GeneratedParserSymbol<24>; +pub type ClassBody_2 = GeneratedParserSymbol<25>; +pub type ClassBody_2_1 = GeneratedParserSymbol<26>; +pub type GStuff_1 = GeneratedParserSymbol<27>; +pub type GStuff_2 = GeneratedParserSymbol<28>; +pub type GStuff_2_1 = GeneratedParserSymbol<29>; +pub type GStuff_3 = GeneratedParserSymbol<30>; +pub type GStuff_4 = GeneratedParserSymbol<31>; +pub type GStuff_4_1 = GeneratedParserSymbol<32>; +pub type GStuff_5 = GeneratedParserSymbol<33>; +pub type GStuff_6 = GeneratedParserSymbol<34>; +pub type GStuff_6_1 = GeneratedParserSymbol<35>; +pub type Stuff_1 = GeneratedParserSymbol<36>; +pub type Stuff_2 = GeneratedParserSymbol<37>; +pub type Stuff_2_1 = GeneratedParserSymbol<38>; +pub type Stuff_3 = GeneratedParserSymbol<39>; +pub type Stuff_4 = GeneratedParserSymbol<40>; +pub type Stuff_4_1 = GeneratedParserSymbol<41>; +pub type Cons_1 = GeneratedParserSymbol<42>; +pub type Cons_2 = GeneratedParserSymbol<43>; +pub type Cons_2_1 = GeneratedParserSymbol<44>; +pub type Call_1 = GeneratedParserSymbol<45>; +pub type Call_2 = GeneratedParserSymbol<46>; +pub type Call_2_1 = GeneratedParserSymbol<47>; +pub type BaseCall_1 = GeneratedParserSymbol<48>; +pub type BaseCall_2 = GeneratedParserSymbol<49>; +pub type BaseCall_2_1 = GeneratedParserSymbol<50>; +pub type BaseCall_3 = GeneratedParserSymbol<51>; +pub type BaseCall_4 = GeneratedParserSymbol<52>; +pub type BaseCall_4_1 = GeneratedParserSymbol<53>; +pub type BaseCall_5 = GeneratedParserSymbol<54>; +pub type BaseCall_6 = GeneratedParserSymbol<55>; +pub type BaseCall_6_1 = GeneratedParserSymbol<56>; +pub type Name_1 = GeneratedParserSymbol<57>; +pub type Name_2 = GeneratedParserSymbol<58>; +pub type Name_2_1 = GeneratedParserSymbol<59>; +pub type Name_3 = GeneratedParserSymbol<60>; +pub type Name_4 = GeneratedParserSymbol<61>; +pub type Name_4_1 = GeneratedParserSymbol<62>; +pub type Item_1 = GeneratedParserSymbol<63>; +pub type Item_2 = GeneratedParserSymbol<64>; +pub type Item_2_1 = GeneratedParserSymbol<65>; +pub type Item_3 = GeneratedParserSymbol<66>; +pub type Item_4 = GeneratedParserSymbol<67>; +pub type Item_4_1 = GeneratedParserSymbol<68>; +pub type Item_5 = GeneratedParserSymbol<69>; +pub type Item_6 = GeneratedParserSymbol<70>; +pub type Item_6_1 = GeneratedParserSymbol<71>; +pub type Item_7 = GeneratedParserSymbol<72>; +pub type Item_8 = GeneratedParserSymbol<73>; +pub type Item_8_1 = GeneratedParserSymbol<74>; +pub type Item_9 = GeneratedParserSymbol<75>; +pub type Item_10 = GeneratedParserSymbol<76>; +pub type Item_10_1 = GeneratedParserSymbol<77>; +pub type Item_11 = GeneratedParserSymbol<78>; +pub type Item_12 = GeneratedParserSymbol<79>; +pub type Item_12_1 = GeneratedParserSymbol<80>; +pub type Item_13 = GeneratedParserSymbol<81>; +pub type Item_14 = GeneratedParserSymbol<82>; +pub type Item_14_1 = GeneratedParserSymbol<83>; +pub type Item_15 = GeneratedParserSymbol<84>; +pub type Item_16 = GeneratedParserSymbol<85>; +pub type Item_16_1 = GeneratedParserSymbol<86>; +pub type Item_17 = GeneratedParserSymbol<87>; +pub type Item_18 = GeneratedParserSymbol<88>; +pub type Item_18_1 = GeneratedParserSymbol<89>; +pub type Item_19 = GeneratedParserSymbol<90>; +pub type Item_20 = GeneratedParserSymbol<91>; +pub type Item_20_1 = GeneratedParserSymbol<92>; +pub type Item_21 = GeneratedParserSymbol<93>; +pub type Item_22 = GeneratedParserSymbol<94>; +pub type Item_22_1 = GeneratedParserSymbol<95>; +pub type Item_23 = GeneratedParserSymbol<96>; +pub type Item_24 = GeneratedParserSymbol<97>; +pub type Item_24_1 = GeneratedParserSymbol<98>; +pub type GStuff = GeneratedParserSymbol<27>; +pub type Stuff = GeneratedParserSymbol<36>; +pub type Item = GeneratedParserSymbol<63>; +pub type ClassBody = GeneratedParserSymbol<24>; +pub type Cons = GeneratedParserSymbol<42>; +pub type Call = GeneratedParserSymbol<45>; +pub type BaseCall = GeneratedParserSymbol<48>; +pub type Name = GeneratedParserSymbol<57>; + +#[derive(Clone, Debug)] +pub struct yycs0syntax(pub YyParser); +impl yycs0syntax { + pub fn new() -> Result { + Ok(Self(generated_parser()?)) + } + pub fn action(&self, parser: Parser, symbol: SYMBOL, action: i32) -> Result { + self.0.action(parser, symbol, action) + } + pub fn class_body_1_factory(parser: Parser) -> Result { + Ok(Object::opaque(ClassBody_1::new(parser)?)) + } + pub fn class_body_2_factory(parser: Parser) -> Result { + Ok(Object::opaque(ClassBody_2::new(parser)?)) + } + pub fn class_body_2_1_factory(parser: Parser) -> Result { + Ok(Object::opaque(ClassBody_2_1::new(parser)?)) + } + pub fn g_stuff_1_factory(parser: Parser) -> Result { + Ok(Object::opaque(GStuff_1::new(parser)?)) + } + pub fn g_stuff_2_factory(parser: Parser) -> Result { + Ok(Object::opaque(GStuff_2::new(parser)?)) + } + pub fn g_stuff_2_1_factory(parser: Parser) -> Result { + Ok(Object::opaque(GStuff_2_1::new(parser)?)) + } + pub fn g_stuff_3_factory(parser: Parser) -> Result { + Ok(Object::opaque(GStuff_3::new(parser)?)) + } + pub fn g_stuff_4_factory(parser: Parser) -> Result { + Ok(Object::opaque(GStuff_4::new(parser)?)) + } + pub fn g_stuff_4_1_factory(parser: Parser) -> Result { + Ok(Object::opaque(GStuff_4_1::new(parser)?)) + } + pub fn g_stuff_5_factory(parser: Parser) -> Result { + Ok(Object::opaque(GStuff_5::new(parser)?)) + } + pub fn g_stuff_6_factory(parser: Parser) -> Result { + Ok(Object::opaque(GStuff_6::new(parser)?)) + } + pub fn g_stuff_6_1_factory(parser: Parser) -> Result { + Ok(Object::opaque(GStuff_6_1::new(parser)?)) + } + pub fn stuff_1_factory(parser: Parser) -> Result { + Ok(Object::opaque(Stuff_1::new(parser)?)) + } + pub fn stuff_2_factory(parser: Parser) -> Result { + Ok(Object::opaque(Stuff_2::new(parser)?)) + } + pub fn stuff_2_1_factory(parser: Parser) -> Result { + Ok(Object::opaque(Stuff_2_1::new(parser)?)) + } + pub fn stuff_3_factory(parser: Parser) -> Result { + Ok(Object::opaque(Stuff_3::new(parser)?)) + } + pub fn stuff_4_factory(parser: Parser) -> Result { + Ok(Object::opaque(Stuff_4::new(parser)?)) + } + pub fn stuff_4_1_factory(parser: Parser) -> Result { + Ok(Object::opaque(Stuff_4_1::new(parser)?)) + } + pub fn cons_1_factory(parser: Parser) -> Result { + Ok(Object::opaque(Cons_1::new(parser)?)) + } + pub fn cons_2_factory(parser: Parser) -> Result { + Ok(Object::opaque(Cons_2::new(parser)?)) + } + pub fn cons_2_1_factory(parser: Parser) -> Result { + Ok(Object::opaque(Cons_2_1::new(parser)?)) + } + pub fn call_1_factory(parser: Parser) -> Result { + Ok(Object::opaque(Call_1::new(parser)?)) + } + pub fn call_2_factory(parser: Parser) -> Result { + Ok(Object::opaque(Call_2::new(parser)?)) + } + pub fn call_2_1_factory(parser: Parser) -> Result { + Ok(Object::opaque(Call_2_1::new(parser)?)) + } + pub fn base_call_1_factory(parser: Parser) -> Result { + Ok(Object::opaque(BaseCall_1::new(parser)?)) + } + pub fn base_call_2_factory(parser: Parser) -> Result { + Ok(Object::opaque(BaseCall_2::new(parser)?)) + } + pub fn base_call_2_1_factory(parser: Parser) -> Result { + Ok(Object::opaque(BaseCall_2_1::new(parser)?)) + } + pub fn base_call_3_factory(parser: Parser) -> Result { + Ok(Object::opaque(BaseCall_3::new(parser)?)) + } + pub fn base_call_4_factory(parser: Parser) -> Result { + Ok(Object::opaque(BaseCall_4::new(parser)?)) + } + pub fn base_call_4_1_factory(parser: Parser) -> Result { + Ok(Object::opaque(BaseCall_4_1::new(parser)?)) + } + pub fn base_call_5_factory(parser: Parser) -> Result { + Ok(Object::opaque(BaseCall_5::new(parser)?)) + } + pub fn base_call_6_factory(parser: Parser) -> Result { + Ok(Object::opaque(BaseCall_6::new(parser)?)) + } + pub fn base_call_6_1_factory(parser: Parser) -> Result { + Ok(Object::opaque(BaseCall_6_1::new(parser)?)) + } + pub fn name_1_factory(parser: Parser) -> Result { + Ok(Object::opaque(Name_1::new(parser)?)) + } + pub fn name_2_factory(parser: Parser) -> Result { + Ok(Object::opaque(Name_2::new(parser)?)) + } + pub fn name_2_1_factory(parser: Parser) -> Result { + Ok(Object::opaque(Name_2_1::new(parser)?)) + } + pub fn name_3_factory(parser: Parser) -> Result { + Ok(Object::opaque(Name_3::new(parser)?)) + } + pub fn name_4_factory(parser: Parser) -> Result { + Ok(Object::opaque(Name_4::new(parser)?)) + } + pub fn name_4_1_factory(parser: Parser) -> Result { + Ok(Object::opaque(Name_4_1::new(parser)?)) + } + pub fn item_1_factory(parser: Parser) -> Result { + Ok(Object::opaque(Item_1::new(parser)?)) + } + pub fn item_2_factory(parser: Parser) -> Result { + Ok(Object::opaque(Item_2::new(parser)?)) + } + pub fn item_2_1_factory(parser: Parser) -> Result { + Ok(Object::opaque(Item_2_1::new(parser)?)) + } + pub fn item_3_factory(parser: Parser) -> Result { + Ok(Object::opaque(Item_3::new(parser)?)) + } + pub fn item_4_factory(parser: Parser) -> Result { + Ok(Object::opaque(Item_4::new(parser)?)) + } + pub fn item_4_1_factory(parser: Parser) -> Result { + Ok(Object::opaque(Item_4_1::new(parser)?)) + } + pub fn item_5_factory(parser: Parser) -> Result { + Ok(Object::opaque(Item_5::new(parser)?)) + } + pub fn item_6_factory(parser: Parser) -> Result { + Ok(Object::opaque(Item_6::new(parser)?)) + } + pub fn item_6_1_factory(parser: Parser) -> Result { + Ok(Object::opaque(Item_6_1::new(parser)?)) + } + pub fn item_7_factory(parser: Parser) -> Result { + Ok(Object::opaque(Item_7::new(parser)?)) + } + pub fn item_8_factory(parser: Parser) -> Result { + Ok(Object::opaque(Item_8::new(parser)?)) + } + pub fn item_8_1_factory(parser: Parser) -> Result { + Ok(Object::opaque(Item_8_1::new(parser)?)) + } + pub fn item_9_factory(parser: Parser) -> Result { + Ok(Object::opaque(Item_9::new(parser)?)) + } + pub fn item_10_factory(parser: Parser) -> Result { + Ok(Object::opaque(Item_10::new(parser)?)) + } + pub fn item_10_1_factory(parser: Parser) -> Result { + Ok(Object::opaque(Item_10_1::new(parser)?)) + } + pub fn item_11_factory(parser: Parser) -> Result { + Ok(Object::opaque(Item_11::new(parser)?)) + } + pub fn item_12_factory(parser: Parser) -> Result { + Ok(Object::opaque(Item_12::new(parser)?)) + } + pub fn item_12_1_factory(parser: Parser) -> Result { + Ok(Object::opaque(Item_12_1::new(parser)?)) + } + pub fn item_13_factory(parser: Parser) -> Result { + Ok(Object::opaque(Item_13::new(parser)?)) + } + pub fn item_14_factory(parser: Parser) -> Result { + Ok(Object::opaque(Item_14::new(parser)?)) + } + pub fn item_14_1_factory(parser: Parser) -> Result { + Ok(Object::opaque(Item_14_1::new(parser)?)) + } + pub fn item_15_factory(parser: Parser) -> Result { + Ok(Object::opaque(Item_15::new(parser)?)) + } + pub fn item_16_factory(parser: Parser) -> Result { + Ok(Object::opaque(Item_16::new(parser)?)) + } + pub fn item_16_1_factory(parser: Parser) -> Result { + Ok(Object::opaque(Item_16_1::new(parser)?)) + } + pub fn item_17_factory(parser: Parser) -> Result { + Ok(Object::opaque(Item_17::new(parser)?)) + } + pub fn item_18_factory(parser: Parser) -> Result { + Ok(Object::opaque(Item_18::new(parser)?)) + } + pub fn item_18_1_factory(parser: Parser) -> Result { + Ok(Object::opaque(Item_18_1::new(parser)?)) + } + pub fn item_19_factory(parser: Parser) -> Result { + Ok(Object::opaque(Item_19::new(parser)?)) + } + pub fn item_20_factory(parser: Parser) -> Result { + Ok(Object::opaque(Item_20::new(parser)?)) + } + pub fn item_20_1_factory(parser: Parser) -> Result { + Ok(Object::opaque(Item_20_1::new(parser)?)) + } + pub fn item_21_factory(parser: Parser) -> Result { + Ok(Object::opaque(Item_21::new(parser)?)) + } + pub fn item_22_factory(parser: Parser) -> Result { + Ok(Object::opaque(Item_22::new(parser)?)) + } + pub fn item_22_1_factory(parser: Parser) -> Result { + Ok(Object::opaque(Item_22_1::new(parser)?)) + } + pub fn item_23_factory(parser: Parser) -> Result { + Ok(Object::opaque(Item_23::new(parser)?)) + } + pub fn item_24_factory(parser: Parser) -> Result { + Ok(Object::opaque(Item_24::new(parser)?)) + } + pub fn item_24_1_factory(parser: Parser) -> Result { + Ok(Object::opaque(Item_24_1::new(parser)?)) + } + pub fn g_stuff_factory(parser: Parser) -> Result { + Ok(Object::opaque(GStuff::new(parser)?)) + } + pub fn stuff_factory(parser: Parser) -> Result { + Ok(Object::opaque(Stuff::new(parser)?)) + } + pub fn item_factory(parser: Parser) -> Result { + Ok(Object::opaque(Item::new(parser)?)) + } + pub fn class_body_factory(parser: Parser) -> Result { + Ok(Object::opaque(ClassBody::new(parser)?)) + } + pub fn cons_factory(parser: Parser) -> Result { + Ok(Object::opaque(Cons::new(parser)?)) + } + pub fn call_factory(parser: Parser) -> Result { + Ok(Object::opaque(Call::new(parser)?)) + } + pub fn base_call_factory(parser: Parser) -> Result { + Ok(Object::opaque(BaseCall::new(parser)?)) + } + pub fn name_factory(parser: Parser) -> Result { + Ok(Object::opaque(Name::new(parser)?)) + } + pub fn error_factory(parser: Parser) -> Result { + Ok(Object::opaque(crate::LslError::new_with_parser(parser)?)) + } +} +impl Deref for yycs0syntax { + type Target = YyParser; + fn deref(&self) -> &Self::Target { + &self.0 + } +} +impl DerefMut for yycs0syntax { + fn deref_mut(&mut self) -> &mut Self::Target { + &mut self.0 + } +} + +#[derive(Clone, Debug)] +pub struct yycs0tokens(pub YyLexer); +impl yycs0tokens { + pub fn new(error_handler: ErrorHandler) -> Result { + Ok(Self(generated_lexer_with_handler(error_handler)?)) + } + pub fn base_factory(lexer: Lexer) -> Result { + Ok(Object::opaque(BASE::new(lexer)?)) + } + pub fn this_factory(lexer: Lexer) -> Result { + Ok(Object::opaque(THIS::new(lexer)?)) + } + pub fn new_factory(lexer: Lexer) -> Result { + Ok(Object::opaque(NEW::new(lexer)?)) + } + pub fn id_factory(lexer: Lexer) -> Result { + Ok(Object::opaque(ID::new(lexer)?)) + } + pub fn any_factory(lexer: Lexer) -> Result { + Ok(Object::opaque(ANY::new(lexer)?)) + } + pub fn colon_factory(lexer: Lexer) -> Result { + Ok(Object::opaque(COLON::new(lexer)?)) + } + pub fn semicolon_factory(lexer: Lexer) -> Result { + Ok(Object::opaque(SEMICOLON::new(lexer)?)) + } + pub fn lbrace_factory(lexer: Lexer) -> Result { + Ok(Object::opaque(LBRACE::new(lexer)?)) + } + pub fn rbrace_factory(lexer: Lexer) -> Result { + Ok(Object::opaque(RBRACE::new(lexer)?)) + } + pub fn lparen_factory(lexer: Lexer) -> Result { + Ok(Object::opaque(LPAREN::new(lexer)?)) + } + pub fn rparen_factory(lexer: Lexer) -> Result { + Ok(Object::opaque(RPAREN::new(lexer)?)) + } + pub fn lbrack_factory(lexer: Lexer) -> Result { + Ok(Object::opaque(LBRACK::new(lexer)?)) + } + pub fn rbrack_factory(lexer: Lexer) -> Result { + Ok(Object::opaque(RBRACK::new(lexer)?)) + } + pub fn old_action( + &self, + lexer: Lexer, + yytext: &mut String, + action: i32, + reject: &mut bool, + ) -> Result { + if matches!(action, 8 | 55 | 74) { + match action { + 8 => "yym.yy_begin", + 55 => "((cs0tokens)yym)", + _ => "((cs0syntax)yyq)", + } + .clone_into(yytext); + return TOKEN::generated_with_lexer(lexer, "ANY", 7); + } + *reject = true; + Err(Error::InvalidOperation) + } +} +impl Deref for yycs0tokens { + type Target = YyLexer; + fn deref(&self) -> &Self::Target { + &self.0 + } +} +impl DerefMut for yycs0tokens { + fn deref_mut(&mut self) -> &mut Self::Target { + &mut self.0 + } +} + +#[derive(Clone, Debug)] +pub struct cs0tokens { + pub out: String, + pub lexer: Lexer, +} +impl cs0tokens { + pub fn new() -> Result { + Self::new_with_yy_lexer(generated_lexer()?) + } + pub fn new_with_constructor() -> Result { + Self::new() + } + pub fn new_with_error_handler(handler: ErrorHandler) -> Result { + Self::new_with_yy_lexer(generated_lexer_with_handler(handler)?) + } + pub fn new_with_yy_lexer(tokens: YyLexer) -> Result { + Ok(Self { + out: String::new(), + lexer: Lexer::new(tokens)?, + }) + } +} +impl Deref for cs0tokens { + type Target = Lexer; + fn deref(&self) -> &Self::Target { + &self.lexer + } +} +impl DerefMut for cs0tokens { + fn deref_mut(&mut self) -> &mut Self::Target { + &mut self.lexer + } +} + +#[derive(Clone, Debug)] +pub struct cs0syntax { + pub out: String, + pub cls: String, + pub par: String, + pub ctx: String, + pub defconseen: bool, + pub parser: Parser, +} +impl cs0syntax { + pub fn new() -> Result { + Self::new_with_yy_parser(generated_parser()?) + } + pub fn new_with_constructor() -> Result { + Self::new() + } + pub fn new_with_yy_parser(symbols: YyParser) -> Result { + let lexer = Lexer::new(generated_lexer()?)?; + Self::from_parts(symbols, lexer) + } + pub fn new_with_yy_parser_error_handler( + mut symbols: YyParser, + handler: ErrorHandler, + ) -> Result { + symbols.erh = handler.clone(); + let lexer = Lexer::new(generated_lexer_with_handler(handler)?)?; + Self::from_parts(symbols, lexer) + } + fn from_parts(symbols: YyParser, lexer: Lexer) -> Result { + Ok(Self { + out: String::new(), + cls: String::new(), + par: String::new(), + ctx: String::new(), + defconseen: false, + parser: Parser::new(symbols, lexer)?, + }) + } +} +impl Deref for cs0syntax { + type Target = Parser; + fn deref(&self) -> &Self::Target { + &self.parser + } +} +impl DerefMut for cs0syntax { + fn deref_mut(&mut self) -> &mut Self::Target { + &mut self.parser + } +} diff --git a/crates/libremetaverse-lsl-tools/src/generator.rs b/crates/libremetaverse-lsl-tools/src/generator.rs new file mode 100644 index 0000000..40e55f7 --- /dev/null +++ b/crates/libremetaverse-lsl-tools/src/generator.rs @@ -0,0 +1,1337 @@ +//! Compatibility adapters for the retired C# parser-generator object model. +//! +//! New code should use [`crate::Grammar`], [`crate::Dfa`], and the checked-in +//! grammar generator. These adapters keep mapped callers functional without +//! dynamic method pointers, reflection, or a CLR. + +#![allow(clippy::missing_errors_doc)] +#![allow(clippy::must_use_candidate)] +#![allow(clippy::needless_pass_by_value)] +#![allow(clippy::too_many_arguments)] +#![allow(non_snake_case)] + +use std::collections::{BTreeMap, BTreeSet, VecDeque}; +use std::fmt; +use std::io::Write; +use std::sync::{Arc, Mutex, OnceLock}; + +use libremetaverse_types::compat::{Hashtable, Object, Utf16CodeUnit}; +use regex::Regex as NativeRegex; + +use crate::{ + CSymbol, CharacterMatcher, DfaAccept, DfaState, Error, ErrorHandler, Lexer, ObjectList, + ParseState, Parser, ParserOldAction, ParserSimpleAction, PrecedencePrecType, Production, + SourceLineInfo, SymbolSet, Transition, YyLexer, YyParser, +}; + +#[derive(Clone)] +struct Callable(Arc Result + Send + Sync>); + +impl fmt::Debug for Callable { + fn fmt(&self, formatter: &mut fmt::Formatter<'_>) -> fmt::Result { + formatter.write_str("Callable(..)") + } +} + +#[derive(Debug)] +struct AsyncResult(T); + +type AsyncCallback = Box; + +macro_rules! delegate_one { + ($name:ident, $arg:ty, $result:ty) => { + #[derive(Clone, Debug)] + pub struct $name(Callable<$arg, $result>); + + impl $name { + pub fn from_fn(function: F) -> Self + where + F: Fn($arg) -> Result<$result, Error> + Send + Sync + 'static, + { + Self(Callable(Arc::new(function))) + } + + pub fn new(object: Object, _method: isize) -> Result { + object + .downcast_ref::() + .cloned() + .ok_or(Error::Argument) + } + + pub fn invoke(&self, argument: $arg) -> Result<$result, Error> { + (self.0.0)(argument) + } + + pub fn begin_invoke( + &self, + argument: $arg, + callback: AsyncCallback, + _state: Object, + ) -> Result, Error> + where + $result: Send + Sync + 'static, + { + let result = AsyncResult(self.invoke(argument)?); + callback(&result); + Ok(Box::new(result)) + } + + pub fn end_invoke( + &self, + result: Box, + ) -> Result<$result, Error> + where + $result: Send + Sync + 'static, + { + result + .downcast::>() + .map(|value| value.0) + .map_err(|_| Error::Argument) + } + } + }; +} + +delegate_one!(Builder, Transition, ()); +delegate_one!(Func, Transition, SymbolSet); +delegate_one!(Relation, Transition, Hashtable); +delegate_one!(SCreator, Parser, Object); +delegate_one!(TCreator, Lexer, Object); + +#[derive(Clone, Debug)] +pub struct AddToFunc(Callable<(Transition, SymbolSet), ()>); + +impl AddToFunc { + pub fn from_fn(function: F) -> Self + where + F: Fn(Transition, SymbolSet) -> Result<(), Error> + Send + Sync + 'static, + { + Self(Callable(Arc::new(move |(transition, symbols)| { + function(transition, symbols) + }))) + } + + pub fn new(object: Object, _method: isize) -> Result { + object + .downcast_ref::() + .cloned() + .ok_or(Error::Argument) + } + + pub fn invoke(&self, transition: Transition, symbols: SymbolSet) -> Result<(), Error> { + (self.0.0)((transition, symbols)) + } + + pub fn begin_invoke( + &self, + transition: Transition, + symbols: SymbolSet, + callback: AsyncCallback, + _state: Object, + ) -> Result, Error> { + self.invoke(transition, symbols)?; + let result = AsyncResult(()); + callback(&result); + Ok(Box::new(result)) + } + + pub fn end_invoke(&self, result: Box) -> Result<(), Error> { + result + .downcast::>() + .map(|_| ()) + .map_err(|_| Error::Argument) + } +} + +#[derive(Clone, Debug)] +pub struct ObjectListOListEnumerator { + values: Vec, + cursor: Arc>>, +} + +impl ObjectListOListEnumerator { + pub fn new(values: ObjectList) -> Result { + Ok(Self { + values: values.iter().cloned().collect(), + cursor: Arc::new(Mutex::new(None)), + }) + } + + pub fn move_next(&self) -> Result { + let mut cursor = self.cursor.lock().map_err(|_| Error::InvalidOperation)?; + let next = cursor.map_or(0, |value| value.saturating_add(1)); + if next < self.values.len() { + *cursor = Some(next); + Ok(true) + } else { + *cursor = Some(self.values.len()); + Ok(false) + } + } + + pub fn reset(&self) -> Result<(), Error> { + *self.cursor.lock().map_err(|_| Error::InvalidOperation)? = None; + Ok(()) + } + + pub fn current(&self) -> Object { + self.cursor + .lock() + .ok() + .and_then(|cursor| cursor.and_then(|index| self.values.get(index).cloned())) + .unwrap_or(Object::Undefined) + } +} + +#[derive(Clone, Debug)] +pub struct Path { + pub valid: bool, + states: Vec, + spelling: Vec, +} + +impl Path { + pub fn new_with_parse_state_array(states: Vec) -> Result { + if states.is_empty() { + return Err(Error::Argument); + } + let spelling = states + .iter() + .take(states.len().saturating_sub(1)) + .map(|state| state.m_accessing_symbol.clone()) + .collect(); + Ok(Self { + valid: true, + states, + spelling, + }) + } + + pub fn new_with_parse_state_c_symbol_array( + state: ParseState, + symbols: Vec, + ) -> Result { + let mut states = vec![state.clone()]; + let mut current = state; + let mut valid = true; + for symbol in &symbols { + if let Ok(transition) = current.get_transition(symbol.clone()) { + current = *transition.m_ps.clone(); + states.push(current.clone()); + } else { + valid = false; + states.push(current.clone()); + } + } + Ok(Self { + valid, + states, + spelling: symbols, + }) + } + + pub fn new_with_c_symbol_array(symbols: Vec) -> Result { + if symbols.is_empty() { + return Err(Error::Argument); + } + Self::new_with_parse_state_c_symbol_array(ParseState::compatibility_numbered(0), symbols) + } + + pub fn spelling(&self) -> Vec { + self.spelling.clone() + } + + pub fn top(&self) -> ParseState { + self.states + .last() + .cloned() + .unwrap_or_else(|| ParseState::compatibility_numbered(0)) + } +} + +#[derive(Clone, Debug)] +enum NfaMatcher { + Exact(u16), + Uppercase(u16), + Predicate(Regex), +} + +#[derive(Clone, Debug)] +struct NfaArc { + matcher: NfaMatcher, + target: i32, +} + +#[derive(Clone, Debug, Default)] +struct NfaNodeData { + arcs: Vec, + epsilon: Vec, +} + +#[derive(Clone, Debug, Default)] +struct TokenGeneratorState { + next_state: i32, + nodes: BTreeMap, +} + +#[derive(Clone, Debug)] +pub struct TokensGen { + pub defines: Hashtable, + pub m_tokens: YyLexer, + pub states: ObjectList, + pub m_outname: String, + state: Arc>, +} + +impl TokensGen { + pub fn new(error_handler: ErrorHandler) -> Result { + Ok(Self { + defines: Hashtable::default(), + m_tokens: YyLexer::new(error_handler)?, + states: ObjectList::default(), + m_outname: "tokens".to_owned(), + state: Arc::new(Mutex::new(TokenGeneratorState::default())), + }) + } + + pub fn fix_actions(&self, source: String) -> Result { + Ok(source + .replace("yybegin", "yym.yy_begin") + .replace("yyl", &format!("(({})yym)", self.m_outname))) + } + + pub fn new_state(&self) -> Result { + let mut state = self.state.lock().map_err(|_| Error::InvalidOperation)?; + state.next_state = state + .next_state + .checked_add(1) + .ok_or(Error::IndexOutOfRange)?; + let number = state.next_state; + state.nodes.entry(number).or_default(); + Ok(number) + } + + fn add_arc(&self, from: i32, arc: NfaArc) -> Result<(), Error> { + self.state + .lock() + .map_err(|_| Error::InvalidOperation)? + .nodes + .entry(from) + .or_default() + .arcs + .push(arc); + Ok(()) + } + + fn add_epsilon(&self, from: i32, target: i32) -> Result<(), Error> { + self.state + .lock() + .map_err(|_| Error::InvalidOperation)? + .nodes + .entry(from) + .or_default() + .epsilon + .push(target); + Ok(()) + } +} + +#[derive(Clone, Debug)] +pub struct LNode { + pub m_state: i32, + pub m_tks: TokensGen, +} + +impl LNode { + pub fn new(tokens: TokensGen) -> Result { + let state = tokens.new_state()?; + Ok(Self { + m_state: state, + m_tks: tokens, + }) + } +} + +#[derive(Clone, Debug)] +pub struct NfaNode { + pub m_arcs: ObjectList, + pub m_eps: ObjectList, + pub m_s_terminal: String, + pub node: LNode, +} + +impl NfaNode { + pub fn new(tokens: TokensGen) -> Result { + Ok(Self { + m_arcs: ObjectList::default(), + m_eps: ObjectList::default(), + m_s_terminal: String::new(), + node: LNode::new(tokens)?, + }) + } + + pub fn add_arc(&self, unit: Utf16CodeUnit, next: NfaNode) -> Result<(), Error> { + self.node.m_tks.add_arc( + self.node.m_state, + NfaArc { + matcher: NfaMatcher::Exact(unit.0), + target: next.node.m_state, + }, + ) + } + + pub fn add_u_arc(&self, unit: Utf16CodeUnit, next: NfaNode) -> Result<(), Error> { + self.node.m_tks.add_arc( + self.node.m_state, + NfaArc { + matcher: NfaMatcher::Uppercase(unit.0), + target: next.node.m_state, + }, + ) + } + + pub fn add_arc_ex(&self, regex: Regex, next: NfaNode) -> Result<(), Error> { + self.node.m_tks.add_arc( + self.node.m_state, + NfaArc { + matcher: NfaMatcher::Predicate(regex), + target: next.node.m_state, + }, + ) + } + + pub fn add_eps(&self, next: NfaNode) -> Result<(), Error> { + self.node + .m_tks + .add_epsilon(self.node.m_state, next.node.m_state) + } + + pub fn add_target(&self, unit: Utf16CodeUnit, mut next: crate::Dfa) -> Result<(), Error> { + let state = self + .node + .m_tks + .state + .lock() + .map_err(|_| Error::InvalidOperation)?; + let Some(node) = state.nodes.get(&self.node.m_state) else { + return Ok(()); + }; + for arc in &node.arcs { + let matched = match &arc.matcher { + NfaMatcher::Exact(expected) => *expected == unit.0, + NfaMatcher::Uppercase(expected) => String::from_utf16(&[unit.0]) + .ok() + .and_then(|value| value.chars().next()) + .is_some_and(|value| { + value + .to_uppercase() + .next() + .is_some_and(|upper| upper as u32 == u32::from(*expected)) + }), + NfaMatcher::Predicate(regex) => regex.match__with_char(unit)?, + }; + if matched { + next.m_map + .0 + .insert(Object::Integer(arc.target), Object::Boolean(true)); + } + } + Ok(()) + } +} + +#[derive(Clone, Debug)] +pub struct Nfa { + pub m_end: NfaNode, + pub start: NfaNode, + regex: Arc>>, +} + +impl Nfa { + pub fn new_with_tokens_gen(tokens: TokensGen) -> Result { + Ok(Self { + start: NfaNode::new(tokens.clone())?, + m_end: NfaNode::new(tokens)?, + regex: Arc::new(Mutex::new(None)), + }) + } + + pub fn new_with_tokens_gen_regex(tokens: TokensGen, regex: Regex) -> Result { + let nfa = Self::new_with_tokens_gen(tokens)?; + regex.build(nfa.clone())?; + Ok(nfa) + } + + fn set_regex(&self, regex: Regex) -> Result<(), Error> { + *self.regex.lock().map_err(|_| Error::InvalidOperation)? = Some(regex.clone()); + self.start.add_arc_ex(regex, self.m_end.clone()) + } + + pub(crate) fn regex_source(&self) -> Result, Error> { + Ok(self + .regex + .lock() + .map_err(|_| Error::InvalidOperation)? + .as_ref() + .map(|regex| regex.source.clone())) + } + + pub(crate) fn deterministic_states(&self, accept: DfaAccept) -> Result, Error> { + const MAX_GENERATED_DFA_STATES: usize = 4_096; + + fn closure( + nodes: &BTreeMap, + seeds: impl IntoIterator, + ) -> BTreeSet { + let mut result = BTreeSet::new(); + let mut pending = VecDeque::from_iter(seeds); + while let Some(state) = pending.pop_front() { + if !result.insert(state) { + continue; + } + if let Some(node) = nodes.get(&state) { + pending.extend(node.epsilon.iter().copied()); + } + } + result + } + + fn matches(matcher: &NfaMatcher, unit: u16) -> Result { + Ok(match matcher { + NfaMatcher::Exact(expected) => unit == *expected, + NfaMatcher::Uppercase(expected) => String::from_utf16(&[unit]) + .ok() + .and_then(|value| value.chars().next()) + .is_some_and(|value| { + value + .to_uppercase() + .next() + .is_some_and(|upper| upper as u32 == u32::from(*expected)) + }), + NfaMatcher::Predicate(regex) => regex.match__with_char(Utf16CodeUnit(unit))?, + }) + } + + let generator = self + .start + .node + .m_tks + .state + .lock() + .map_err(|_| Error::InvalidOperation)?; + let start = closure(&generator.nodes, [self.start.node.m_state]); + let mut indexes = BTreeMap::from([(start.clone(), 0usize)]); + let mut pending = VecDeque::from([start]); + let mut states = Vec::new(); + while let Some(subset) = pending.pop_front() { + let mut targets = BTreeMap::, BTreeSet>::new(); + for unit in 0..=u16::MAX { + let mut destination = BTreeSet::new(); + for state in &subset { + if let Some(node) = generator.nodes.get(state) { + for arc in &node.arcs { + if matches(&arc.matcher, unit)? { + destination.insert(arc.target); + } + } + } + } + if !destination.is_empty() { + targets + .entry(closure(&generator.nodes, destination)) + .or_default() + .insert(unit); + } + } + let mut transitions = Vec::new(); + for (target, units) in targets { + let index = if let Some(index) = indexes.get(&target).copied() { + index + } else { + if indexes.len() >= MAX_GENERATED_DFA_STATES { + return Err(Error::IndexOutOfRange); + } + let index = indexes.len(); + indexes.insert(target.clone(), index); + pending.push_back(target); + index + }; + transitions.push((CharacterMatcher::Set(units), index)); + } + states.push(DfaState { + transitions, + accept: subset + .contains(&self.m_end.node.m_state) + .then(|| accept.clone()), + }); + } + if states.iter().all(|state| state.accept.is_none()) { + return Err(Error::Argument); + } + Ok(states) + } +} + +#[derive(Clone)] +pub struct Serialiser { + input: Option>>, + output: Option>>>, + position: Arc>, + column: Arc>, +} + +impl fmt::Debug for Serialiser { + fn fmt(&self, formatter: &mut fmt::Formatter<'_>) -> fmt::Result { + formatter + .debug_struct("Serialiser") + .field("encode", &self.encode()) + .field("position", &self.position.lock().map_or(0, |value| *value)) + .finish_non_exhaustive() + } +} + +impl Serialiser { + pub fn new_with_text_writer(output: Box) -> Result { + Ok(Self { + input: None, + output: Some(Arc::new(Mutex::new(output))), + position: Arc::new(Mutex::new(0)), + column: Arc::new(Mutex::new(0)), + }) + } + + pub fn new_with_int32_array(input: Vec) -> Result { + Ok(Self { + input: Some(Arc::new(input)), + output: None, + position: Arc::new(Mutex::new(0)), + column: Arc::new(Mutex::new(0)), + }) + } + + pub const fn encode(&self) -> bool { + self.output.is_some() + } + + pub fn read(&self) -> Result { + let input = self.input.as_ref().ok_or(Error::InvalidOperation)?; + let mut position = self.position.lock().map_err(|_| Error::InvalidOperation)?; + let value = *input.get(*position).ok_or(Error::IndexOutOfRange)?; + *position += 1; + Ok(value) + } + + pub fn write(&self, value: i32) -> Result<(), Error> { + let output = self.output.as_ref().ok_or(Error::InvalidOperation)?; + let mut output = output.lock().map_err(|_| Error::InvalidOperation)?; + let mut column = self.column.lock().map_err(|_| Error::InvalidOperation)?; + if *column == 5 { + output + .write_all(b"\n") + .map_err(|_| Error::InvalidOperation)?; + *column = 0; + } + write!(output, "{value},").map_err(|_| Error::InvalidOperation)?; + *column += 1; + Ok(()) + } + + pub fn serialise(&self, object: Object) -> Result<(), Error> { + match object { + Object::Undefined => self.write(0), + Object::Integer(value) => { + self.write(1)?; + self.write(value) + } + Object::Boolean(value) => { + self.write(2)?; + self.write(i32::from(value)) + } + Object::String(value) => { + self.write(4)?; + let bytes = value + .encode_utf16() + .flat_map(u16::to_le_bytes) + .collect::>(); + self.write(i32::try_from(bytes.len()).map_err(|_| Error::IndexOutOfRange)?)?; + for byte in bytes { + self.write(i32::from(byte))?; + } + Ok(()) + } + Object::Array(values) => { + self.write(24)?; + self.write(i32::try_from(values.len()).map_err(|_| Error::IndexOutOfRange)?)?; + for value in values { + self.serialise(value)?; + } + Ok(()) + } + Object::Map(values) => { + self.write(25)?; + self.write(i32::try_from(values.len()).map_err(|_| Error::IndexOutOfRange)?)?; + let mut values = values.into_iter().collect::>(); + values.sort_by(|left, right| left.0.cmp(&right.0)); + for (key, value) in values { + self.serialise(Object::String(key))?; + self.serialise(value)?; + } + Ok(()) + } + _ => Err(Error::Argument), + } + } + + pub fn deserialise(&self) -> Result { + match self.read()? { + 0 => Ok(Object::Undefined), + 1 => Ok(Object::Integer(self.read()?)), + 2 => Ok(Object::Boolean(self.read()? != 0)), + 4 => { + let count = usize::try_from(self.read()?).map_err(|_| Error::Argument)?; + if count % 2 != 0 { + return Err(Error::Parse { + position: count, + context: "odd UTF-16 byte count", + }); + } + let mut bytes = Vec::with_capacity(count); + for _ in 0..count { + bytes.push(u8::try_from(self.read()?).map_err(|_| Error::Argument)?); + } + let units = bytes + .chunks_exact(2) + .map(|pair| u16::from_le_bytes([pair[0], pair[1]])) + .collect::>(); + String::from_utf16(&units) + .map(Object::String) + .map_err(|_| Error::Parse { + position: 0, + context: "invalid UTF-16 string", + }) + } + 24 => { + let count = usize::try_from(self.read()?).map_err(|_| Error::Argument)?; + let mut values = Vec::with_capacity(count); + for _ in 0..count { + values.push(self.deserialise()?); + } + Ok(Object::Array(values)) + } + 25 => { + let count = usize::try_from(self.read()?).map_err(|_| Error::Argument)?; + let mut values = std::collections::HashMap::with_capacity(count); + for _ in 0..count { + let Object::String(key) = self.deserialise()? else { + return Err(Error::Argument); + }; + values.insert(key, self.deserialise()?); + } + Ok(Object::Map(values)) + } + _ => Err(Error::Parse { + position: self.position.lock().map_or(0, |value| *value), + context: "unknown serialization tag", + }), + } + } + + pub fn version_check(&self) -> Result<(), Error> { + if self.encode() { + self.serialise(Object::String("4.5".to_owned())) + } else if self.deserialise()? == Object::String("4.5".to_owned()) { + Ok(()) + } else { + Err(Error::Parse { + position: 0, + context: "expected serialization version 4.5", + }) + } + } +} + +#[derive(Clone)] +pub struct GenBase { + pub last_symbol: i32, + pub erh: ErrorHandler, + pub m_out_file: Arc>>, + pub m_outname: String, + pub m_prod: Production, +} + +impl fmt::Debug for GenBase { + fn fmt(&self, formatter: &mut fmt::Formatter<'_>) -> fmt::Result { + formatter + .debug_struct("GenBase") + .field("last_symbol", &self.last_symbol) + .field("outname", &self.m_outname) + .field("production", &self.m_prod) + .finish_non_exhaustive() + } +} + +impl GenBase { + pub fn new(error_handler: ErrorHandler, output: Box) -> Result { + let symbols = SymbolsGen::new(error_handler.clone())?; + Ok(Self { + last_symbol: 2, + erh: error_handler, + m_out_file: Arc::new(Mutex::new(output)), + m_outname: "tokens".to_owned(), + m_prod: Production::new_with_symbols_gen(symbols)?, + }) + } + + pub fn white(&self, buffer: String, offset: &mut i32, max: i32) -> Result { + scan_while(&buffer, offset, max, |value| matches!(value, b' ' | b'\t')) + } + + pub fn non_white(&self, buffer: String, offset: &mut i32, max: i32) -> Result { + scan_while(&buffer, offset, max, |value| !matches!(value, b' ' | b'\t')) + } + + pub fn source_line_info(&self, position: i32) -> Result { + SourceLineInfo::new_with_int32(position) + } + + pub fn line(&self, position: i32) -> Result { + Ok(self.source_line_info(position)?.line_number) + } + + pub fn position(&self, position: i32) -> Result { + Ok(self.source_line_info(position)?.raw_char_position) + } + + pub fn saypos(&self, position: i32) -> Result { + Ok(self.source_line_info(position)?.to_string()) + } + + pub fn error(&self, number: i32, position: i32, message: String) -> Result<(), Error> { + let exception = + crate::CSToolsFatalException::new_with_int32_source_line_info_string_string( + number, + self.source_line_info(position)?, + String::new(), + message, + )?; + self.erh.clone().error(exception.0) + } + + pub fn emit_class_defin( + &self, + buffer: String, + offset: &mut i32, + max: i32, + _input: crate::CsReader, + default_base: String, + base: &mut String, + name: &mut String, + lexer: bool, + ) -> Result { + if lexer { + self.non_white(buffer.clone(), offset, max)?; + } + self.white(buffer.clone(), offset, max)?; + let bytes = buffer.as_bytes(); + let limit = usize::try_from(max) + .map_err(|_| Error::Argument)? + .min(bytes.len()); + let mut index = usize::try_from(*offset).map_err(|_| Error::Argument)?; + let start = index; + while index < limit && !matches!(bytes[index], b'{' | b':' | b';' | b' ' | b'\t' | b'\n') { + index += 1; + } + buffer + .get(start..index) + .ok_or(Error::Argument)? + .clone_into(name); + if name.is_empty() { + return Err(Error::Parse { + position: start, + context: "class name is missing", + }); + } + *base = default_base; + while index < limit && matches!(bytes[index], b' ' | b'\t') { + index += 1; + } + if bytes.get(index) == Some(&b':') { + index += 1; + while index < limit && matches!(bytes[index], b' ' | b'\t') { + index += 1; + } + let base_start = index; + while index < limit && !matches!(bytes[index], b'{' | b';' | b' ' | b'\t' | b'\n') { + index += 1; + } + buffer + .get(base_start..index) + .ok_or(Error::Argument)? + .clone_into(base); + } + *offset = i32::try_from(index).map_err(|_| Error::IndexOutOfRange)?; + let number = self + .last_symbol + .checked_add(1) + .ok_or(Error::IndexOutOfRange)?; + let mut output = self + .m_out_file + .lock() + .map_err(|_| Error::InvalidOperation)?; + writeln!( + output, + "// generated {name}={number}\npub struct {name}; // base: {base}" + ) + .map_err(|_| Error::InvalidOperation)?; + Ok(number) + } +} + +fn scan_while(buffer: &str, offset: &mut i32, max: i32, predicate: F) -> Result +where + F: Fn(u8) -> bool, +{ + let bytes = buffer.as_bytes(); + let limit = usize::try_from(max) + .map_err(|_| Error::Argument)? + .min(bytes.len()); + let mut index = usize::try_from(*offset).map_err(|_| Error::Argument)?; + if index > limit { + return Err(Error::IndexOutOfRange); + } + while index < limit && predicate(bytes[index]) { + index += 1; + } + *offset = i32::try_from(index).map_err(|_| Error::IndexOutOfRange)?; + Ok(index < limit) +} + +#[derive(Clone, Debug, Default)] +struct SymbolsGeneratorState { + associations: Vec<(PrecedencePrecType, i32)>, + class_definitions: Vec, + directives: Vec, + actions: Vec, +} + +#[derive(Clone, Debug)] +pub struct SymbolType { + pub name: String, + pub defined: bool, + registry: Arc>>, +} + +impl SymbolType { + fn root() -> Self { + Self { + name: String::new(), + defined: false, + registry: Arc::new(Mutex::new(BTreeMap::new())), + } + } + + pub fn new_with_symbols_gen_string(symbols: SymbolsGen, name: String) -> Result { + Self::new_with_symbols_gen_string_boolean(symbols, name, false) + } + + pub fn new_with_symbols_gen_string_boolean( + symbols: SymbolsGen, + name: String, + defined: bool, + ) -> Result { + if name.is_empty() { + return Err(Error::Argument); + } + let value = Self { + name: name.clone(), + defined, + registry: symbols.stypes.registry.clone(), + }; + value + .registry + .lock() + .map_err(|_| Error::InvalidOperation)? + .insert(name, value.clone()); + Ok(value) + } + + pub fn find(&self, name: String) -> Result { + self.registry + .lock() + .map_err(|_| Error::InvalidOperation)? + .get(&name) + .cloned() + .ok_or(Error::InvalidOperation) + } +} + +#[derive(Clone, Debug)] +pub struct SymbolsGen { + pub action: i32, + pub lahead: SymbolSet, + pub m_lalr_parser: bool, + pub m_lexer: Lexer, + pub m_symbols: YyParser, + pub m_trans: i32, + pub pno: i32, + pub prods: ObjectList, + pub stypes: SymbolType, + state: Arc>, +} + +impl SymbolsGen { + pub fn new(error_handler: ErrorHandler) -> Result { + let lexer = Lexer::new(YyLexer::new(error_handler.clone())?)?; + let mut parser = YyParser::new()?; + parser.erh = error_handler; + Ok(Self { + action: 0, + lahead: SymbolSet::compatibility_empty(), + m_lalr_parser: true, + m_lexer: lexer, + m_symbols: parser, + m_trans: 0, + pno: 0, + prods: ObjectList::default(), + stypes: SymbolType::root(), + state: Arc::new(Mutex::new(SymbolsGeneratorState::default())), + }) + } + + pub fn assoc_type(&self, kind: PrecedencePrecType, number: i32) -> Result<(), Error> { + if number < 0 { + return Err(Error::Argument); + } + self.state + .lock() + .map_err(|_| Error::InvalidOperation)? + .associations + .push((kind, number)); + Ok(()) + } + + pub fn class_definition(&self, source: String) -> Result<(), Error> { + if source.trim().is_empty() { + return Err(Error::Argument); + } + self.state + .lock() + .map_err(|_| Error::InvalidOperation)? + .class_definitions + .push(source); + Ok(()) + } + + pub fn copy_segment(&self) -> Result<(), Error> { + let segment = self.m_lexer.yytext.clone(); + self.state + .lock() + .map_err(|_| Error::InvalidOperation)? + .directives + .push(segment); + Ok(()) + } + + pub fn declare(&self) -> Result<(), Error> { + let declaration = self.m_lexer.yytext.trim().to_owned(); + if declaration.is_empty() { + return Err(Error::Argument); + } + self.state + .lock() + .map_err(|_| Error::InvalidOperation)? + .directives + .push(declaration); + Ok(()) + } + + pub fn find(&self, symbol: CSymbol) -> Result { + Ok(self + .m_symbols + .symbols + .0 + .values() + .any(|value| matches!(value, Object::Integer(number) if *number == symbol.m_yynum))) + } + + pub fn old_action(&self, action: ParserOldAction) -> Result<(), Error> { + self.state + .lock() + .map_err(|_| Error::InvalidOperation)? + .actions + .push(format!("old:{}", action.act_num()?)); + Ok(()) + } + + pub fn simple_action(&self, action: ParserSimpleAction) -> Result<(), Error> { + self.state + .lock() + .map_err(|_| Error::InvalidOperation)? + .actions + .push(action.type_str()?); + Ok(()) + } + + pub fn parser_directive(&self) -> Result<(), Error> { + self.state + .lock() + .map_err(|_| Error::InvalidOperation)? + .directives + .push("parser".to_owned()); + Ok(()) + } + + pub fn set_namespace(&self) -> Result<(), Error> { + let namespace = self.m_lexer.yytext.trim(); + if namespace.is_empty() { + return Err(Error::Argument); + } + self.state + .lock() + .map_err(|_| Error::InvalidOperation)? + .directives + .push(format!("namespace:{namespace}")); + Ok(()) + } + + pub fn set_start_symbol(&self) -> Result<(), Error> { + let start = self.m_lexer.yytext.trim(); + if start.is_empty() { + return Err(Error::Argument); + } + self.state + .lock() + .map_err(|_| Error::InvalidOperation)? + .directives + .push(format!("start:{start}")); + Ok(()) + } +} + +#[derive(Clone, Debug, Eq, PartialEq)] +pub struct TokClassDef { + pub m_implement: String, + pub m_initialisation: String, + pub m_name: String, + pub m_ref_token: String, + pub m_yynum: i32, +} + +impl TokClassDef { + pub fn new(generator: GenBase, name: String, base: String) -> Result { + if name.is_empty() || base.is_empty() { + return Err(Error::Argument); + } + Ok(Self { + m_implement: String::new(), + m_initialisation: String::new(), + m_name: name, + m_ref_token: base, + m_yynum: generator + .last_symbol + .checked_add(1) + .ok_or(Error::IndexOutOfRange)?, + }) + } + + pub fn serialise(object: Object, serialiser: Serialiser) -> Result { + if serialiser.encode() { + let value = object.downcast_ref::().ok_or(Error::Argument)?; + serialiser.serialise(Object::String(value.m_name.clone()))?; + serialiser.serialise(Object::Integer(value.m_yynum))?; + Ok(Object::Undefined) + } else { + let Object::String(name) = serialiser.deserialise()? else { + return Err(Error::Argument); + }; + let Object::Integer(number) = serialiser.deserialise()? else { + return Err(Error::Argument); + }; + Ok(Object::opaque(Self { + m_name: name, + m_yynum: number, + m_implement: String::new(), + m_initialisation: String::new(), + m_ref_token: "TOKEN".to_owned(), + })) + } + } +} + +fn symbol_factories() -> &'static Mutex> { + static FACTORIES: OnceLock>> = OnceLock::new(); + FACTORIES.get_or_init(|| Mutex::new(BTreeMap::new())) +} + +fn token_factories() -> &'static Mutex> { + static FACTORIES: OnceLock>> = OnceLock::new(); + FACTORIES.get_or_init(|| Mutex::new(BTreeMap::new())) +} + +#[derive(Clone, Debug)] +pub struct Sfactory { + name: String, +} + +impl Sfactory { + pub fn new(_symbols: YyParser, class_name: String, creator: SCreator) -> Result { + if class_name.is_empty() { + return Err(Error::Argument); + } + symbol_factories() + .lock() + .map_err(|_| Error::InvalidOperation)? + .insert(class_name.clone(), creator); + Ok(Self { name: class_name }) + } + + pub fn create(class_name: String, parser: Parser) -> Result { + let factories = symbol_factories() + .lock() + .map_err(|_| Error::InvalidOperation)?; + let mut candidate = class_name.as_str(); + loop { + if let Some(factory) = factories.get(candidate) { + return factory.invoke(parser); + } + let Some((base, _)) = candidate.rsplit_once('_') else { + break; + }; + candidate = base; + } + Err(Error::InvalidOperation) + } + + pub fn name(&self) -> &str { + &self.name + } +} + +#[derive(Clone, Debug)] +pub struct Tfactory { + name: String, +} + +impl Tfactory { + pub fn new(_tokens: YyLexer, class_name: String, creator: TCreator) -> Result { + if class_name.is_empty() { + return Err(Error::Argument); + } + token_factories() + .lock() + .map_err(|_| Error::InvalidOperation)? + .insert(class_name.clone(), creator); + Ok(Self { name: class_name }) + } + + pub fn create(class_name: String, lexer: Lexer) -> Result { + let factories = token_factories() + .lock() + .map_err(|_| Error::InvalidOperation)?; + let mut candidate = class_name.as_str(); + loop { + if let Some(factory) = factories.get(candidate) { + return factory.invoke(lexer); + } + let Some((base, _)) = candidate.rsplit_once('_') else { + break; + }; + candidate = base; + } + Err(Error::InvalidOperation) + } + + pub fn name(&self) -> &str { + &self.name + } +} + +/// Portable regular-expression adapter. Matching is anchored at the requested +/// input position, as in the original lexer generator. +#[derive(Clone)] +pub struct Regex { + source: String, + compiled: NativeRegex, + pub m_sub: Option>, +} + +impl fmt::Debug for Regex { + fn fmt(&self, formatter: &mut fmt::Formatter<'_>) -> fmt::Result { + formatter.debug_tuple("Regex").field(&self.source).finish() + } +} + +impl Regex { + pub fn new(_tokens: TokensGen, position: i32, source: String) -> Result { + const MAX_REGEX_UNITS: usize = 1_048_576; + if position < 0 { + return Err(Error::Argument); + } + if source.encode_utf16().count() > MAX_REGEX_UNITS { + return Err(Error::IndexOutOfRange); + } + // `position` locates this expression in the generator input for + // diagnostics; it is not an offset into the expression itself. + let compiled = NativeRegex::new(&format!("^(?:{source})")).map_err(|_| Error::Parse { + position: usize::try_from(position).unwrap_or(0), + context: "invalid lexer regular expression", + })?; + Ok(Self { + source, + compiled, + m_sub: None, + }) + } + + pub fn build(&self, nfa: Nfa) -> Result<(), Error> { + nfa.set_regex(self.clone()) + } + + pub fn match__with_char(&self, unit: Utf16CodeUnit) -> Result { + // `System.Char` can hold an unpaired surrogate. Rust strings cannot, + // and no valid Unicode regex atom should match one, so it is a clean + // mismatch rather than a malformed-regex failure. + let Ok(text) = String::from_utf16(&[unit.0]) else { + return Ok(false); + }; + Ok(self + .compiled + .find(&text) + .is_some_and(|value| value.end() == text.len())) + } + + pub fn match__with_string(&self, value: String) -> Result { + self.match__with_string_int32_int32( + value.clone(), + 0, + i32::try_from(value.encode_utf16().count()).map_err(|_| Error::IndexOutOfRange)?, + ) + } + + pub fn match__with_string_int32_int32( + &self, + value: String, + position: i32, + max: i32, + ) -> Result { + let units = value.encode_utf16().collect::>(); + let position = usize::try_from(position).map_err(|_| Error::Argument)?; + let max = usize::try_from(max).map_err(|_| Error::Argument)?; + if position > units.len() || position > max { + return Ok(-1); + } + let end = max.min(units.len()); + let text = String::from_utf16(&units[position..end]).map_err(|_| Error::Argument)?; + let Some(found) = self.compiled.find(&text) else { + return Ok(-1); + }; + i32::try_from(text[..found.end()].encode_utf16().count()) + .map_err(|_| Error::IndexOutOfRange) + } + + pub fn print(&self, mut output: Box) -> Result<(), Error> { + output + .write_all(self.source.as_bytes()) + .map_err(|_| Error::InvalidOperation) + } +} diff --git a/crates/libremetaverse-lsl-tools/src/lexer.rs b/crates/libremetaverse-lsl-tools/src/lexer.rs index 4a74e71..b59580d 100644 --- a/crates/libremetaverse-lsl-tools/src/lexer.rs +++ b/crates/libremetaverse-lsl-tools/src/lexer.rs @@ -1483,6 +1483,21 @@ impl DfaAction { } /// Runtime deterministic finite automaton. +#[derive(Clone, Debug)] +struct RegexDfa { + source: String, + compiled: regex::Regex, + accept: DfaAccept, +} + +impl PartialEq for RegexDfa { + fn eq(&self, other: &Self) -> bool { + self.source == other.source && self.accept == other.accept + } +} + +impl Eq for RegexDfa {} + #[derive(Clone, Debug, Eq, PartialEq)] pub struct Dfa { pub m_actions: Vec, @@ -1491,6 +1506,7 @@ pub struct Dfa { pub m_tok_class: String, states: Vec, start: usize, + regex: Option, } impl Default for Dfa { @@ -1502,6 +1518,7 @@ impl Default for Dfa { m_tok_class: String::new(), states: vec![DfaState::default()], start: 0, + regex: None, } } } @@ -1525,17 +1542,54 @@ impl Dfa { }) } - pub fn new_with_nfa(_nfa: Nfa) -> Result { - // The NFA-to-DFA generator is issue #83; the runtime never manufactures - // fake transitions from an opaque generated NFA. - Err(Error::InvalidOperation) + pub fn new_with_nfa(nfa: Nfa) -> Result { + let name = if nfa.m_end.m_s_terminal.is_empty() { + "ANY".to_owned() + } else { + nfa.m_end.m_s_terminal.clone() + }; + let accept = DfaAccept { + token: TokenDefinition::new(name, 7)?, + action: LexerAction::Emit, + action_number: 0, + reserved_words: None, + }; + if let Some(source) = nfa.regex_source()? { + let compiled = + regex::Regex::new(&format!("^(?:{source})")).map_err(|_| Error::Parse { + position: 0, + context: "invalid NFA regular expression", + })?; + return Ok(Self { + regex: Some(RegexDfa { + source, + compiled, + accept, + }), + ..Self::default() + }); + } + Self::from_states(nfa.deterministic_states(accept)?, 0) } pub fn new_with_tokens_gen(_tokens: TokensGen) -> Result { - Err(Error::InvalidOperation) + // The C# constructor creates the initial, unpopulated determinisation + // node. NFA-based construction is exposed separately by + // `new_with_nfa`; returning an empty native state here preserves that + // useful distinction without manufacturing an NFA transition. + Ok(Self::default()) } fn longest_match(&self, units: &[u16], offset: usize) -> Option<(usize, DfaAccept)> { + if let Some(regex) = &self.regex { + let text = String::from_utf16(units.get(offset..)?).ok()?; + let found = regex.compiled.find(&text)?; + if found.start() != 0 || found.end() == 0 { + return None; + } + let length = text[..found.end()].encode_utf16().count(); + return Some((length, regex.accept.clone())); + } let mut state_index = self.start; let mut cursor = offset; let mut accepted = self.states[state_index] @@ -1587,6 +1641,15 @@ impl Dfa { #[must_use] pub fn stable_description(&self) -> String { + if let Some(regex) = &self.regex { + return format!( + "regex {:?} accept {} {} {}", + regex.source, + regex.accept.token.number, + regex.accept.token.name, + regex.accept.action_number + ); + } let mut lines = Vec::new(); for (state_index, state) in self.states.iter().enumerate() { if let Some(accept) = &state.accept { @@ -2185,6 +2248,9 @@ impl SYMBOL { pub fn set_yylval(&mut self, value: Object) { self.m_dollar = value; } + pub(crate) fn raw_text(&self) -> String { + self.text.clone() + } #[must_use] pub fn yyname(&self) -> String { self.name.clone() @@ -2215,6 +2281,30 @@ pub struct TOKEN { } impl TOKEN { + pub(crate) fn generated_with_lexer( + lexer: Lexer, + name: &str, + number: i32, + ) -> Result { + let mut token = Self::new_with_lexer(lexer)?; + name.clone_into(&mut token.name); + token.number = number; + Ok(token) + } + + pub(crate) fn generated_with_parser( + parser: Parser, + name: &str, + number: i32, + text: String, + ) -> Result { + let mut token = Self::new_with_parser(parser)?; + name.clone_into(&mut token.name); + token.number = number; + token.text = text; + Ok(token) + } + pub fn new_with_lexer(lexer: Lexer) -> Result { let text = lexer.yytext.clone(); Self::new_with_lexer_string(lexer, text) diff --git a/crates/libremetaverse-lsl-tools/src/lib.rs b/crates/libremetaverse-lsl-tools/src/lib.rs index 61cadeb..d3297ba 100644 --- a/crates/libremetaverse-lsl-tools/src/lib.rs +++ b/crates/libremetaverse-lsl-tools/src/lib.rs @@ -3,10 +3,13 @@ extern crate self as libremetaverse_lsl_tools; mod generated; +mod generated_tables; +mod generator; mod lexer; mod parser; pub use generated::*; +pub use generated_tables::*; pub use lexer::{ CharacterMatcher, DfaAccept, DfaState, Diagnostic, DiagnosticCategory, DiagnosticSeverity, DotNetUnicodeCategory, InputEncoding, LexerAction, LexerIterator, MAX_SOURCE_UNITS, diff --git a/crates/libremetaverse-lsl-tools/src/parser.rs b/crates/libremetaverse-lsl-tools/src/parser.rs index f5260ae..f16d346 100644 --- a/crates/libremetaverse-lsl-tools/src/parser.rs +++ b/crates/libremetaverse-lsl-tools/src/parser.rs @@ -1006,6 +1006,10 @@ impl SymbolSet { } } + pub(crate) fn compatibility_empty() -> Self { + Self::empty() + } + /// Creates an empty set independent of generator state. #[must_use] pub fn native() -> Self { @@ -1646,6 +1650,10 @@ impl ParseState { } } + pub(crate) fn compatibility_numbered(state: i32) -> Self { + Self::numbered(state) + } + pub fn new(symbols: SymbolsGen, accessing: CSymbol) -> Result { Ok(Self { m_accessing_symbol: accessing, diff --git a/crates/libremetaverse-lsl-tools/tests/generator_compat.rs b/crates/libremetaverse-lsl-tools/tests/generator_compat.rs new file mode 100644 index 0000000..c40e44a --- /dev/null +++ b/crates/libremetaverse-lsl-tools/tests/generator_compat.rs @@ -0,0 +1,341 @@ +//! Focused compatibility fixtures for issue #83's checked-in LSL generator. + +use std::collections::HashMap; +use std::sync::atomic::{AtomicBool, Ordering}; +use std::sync::{Arc, Mutex}; + +use libremetaverse_lsl_tools::{ + BASE, CSymbol, CSymbolSymType, Dfa, ErrorHandler, GENERATED_PARSER_DATA, ID, + LSL_GENERATOR_SERIALIZATION_VERSION, Lexer, Nfa, NfaNode, ObjectList, + ObjectListOListEnumerator, Path, Regex, SCreator, Serialiser, Sfactory, SymbolType, SymbolsGen, + TCreator, Tfactory, TokClassDef, TokensGen, generated_lexer, generated_parser, +}; +use libremetaverse_types::compat::{Object, Utf16CodeUnit}; + +struct SharedWriter(Arc>>); + +impl std::io::Write for SharedWriter { + fn write(&mut self, bytes: &[u8]) -> std::io::Result { + self.0 + .lock() + .map_err(|_| std::io::Error::other("poisoned output"))? + .extend_from_slice(bytes); + Ok(bytes.len()) + } + + fn flush(&mut self) -> std::io::Result<()> { + Ok(()) + } +} + +fn capture(function: F) -> Vec +where + F: FnOnce(Box), +{ + let output = Arc::new(Mutex::new(Vec::new())); + function(Box::new(SharedWriter(output.clone()))); + Arc::try_unwrap(output) + .expect("single output owner") + .into_inner() + .expect("output") +} + +#[test] +fn generated_lexer_preserves_tokens_reserved_words_and_eof() { + let mut lexer = Lexer::new(generated_lexer().expect("generated lexer")).expect("runtime"); + lexer + .start_with_string("Widget(value;):base(new Child[])".to_owned()) + .expect("source"); + let mut tokens = Vec::new(); + while let Some(token) = lexer.next_token().expect("lexing") { + tokens.push((token.yyname(), token.yytext(), token.yynum())); + } + assert_eq!( + tokens, + [ + ("ID".to_owned(), "Widget".to_owned(), 6), + ("LPAREN".to_owned(), "(".to_owned(), 12), + ("ID".to_owned(), "value".to_owned(), 6), + ("SEMICOLON".to_owned(), ";".to_owned(), 9), + ("RPAREN".to_owned(), ")".to_owned(), 13), + ("COLON".to_owned(), ":".to_owned(), 8), + ("BASE".to_owned(), "base".to_owned(), 3), + ("LPAREN".to_owned(), "(".to_owned(), 12), + ("NEW".to_owned(), "new".to_owned(), 5), + ("ID".to_owned(), "Child".to_owned(), 6), + ("LBRACK".to_owned(), "[".to_owned(), 14), + ("RBRACK".to_owned(), "]".to_owned(), 15), + ("RPAREN".to_owned(), ")".to_owned(), 13), + ("EOF".to_owned(), "EOF".to_owned(), 2), + ] + ); +} + +#[test] +fn generated_parser_accepts_the_reviewed_class_body_grammar() { + let table = generated_parser().expect("generated parser"); + assert_eq!(table.arr, GENERATED_PARSER_DATA); + let lexer = Lexer::new(generated_lexer().expect("generated lexer")).expect("runtime"); + let mut parser = libremetaverse_lsl_tools::Parser::new(table, lexer).expect("parser"); + let result = parser + .parse_with_string("Widget(value;):base(new Child[])".to_owned()) + .expect("class body"); + assert_eq!(result.yyname(), "ClassBody"); + assert_eq!(result.yynum(), 19); +} + +#[test] +fn parser_and_lexer_emission_is_byte_deterministic() { + let first_parser = capture(|output| { + generated_parser() + .expect("parser") + .emit(output) + .expect("emit"); + }); + let second_parser = capture(|output| { + generated_parser() + .expect("parser") + .emit(output) + .expect("emit"); + }); + assert_eq!(first_parser, second_parser); + + let first_lexer = capture(|output| { + generated_lexer() + .expect("lexer") + .emit_dfa(output) + .expect("emit"); + }); + let second_lexer = capture(|output| { + generated_lexer() + .expect("lexer") + .emit_dfa(output) + .expect("emit"); + }); + assert_eq!(first_lexer, second_lexer); +} + +#[test] +fn generated_token_classes_have_live_identity_and_text() { + let mut lexer = Lexer::new(generated_lexer().expect("lexer")).expect("runtime"); + lexer + .start_with_string("base name".to_owned()) + .expect("source"); + let base = lexer.next_token().expect("lexing").expect("base"); + let mapped_base = BASE::new(lexer.clone()).expect("mapped base"); + assert_eq!((base.yyname(), base.yynum()), ("BASE".to_owned(), 3)); + assert_eq!( + (mapped_base.yyname(), mapped_base.yynum()), + ("BASE".to_owned(), 3) + ); + let _ = lexer.next_token().expect("lexing").expect("name"); + let mapped_id = ID::new(lexer).expect("mapped id"); + assert_eq!( + (mapped_id.yyname(), mapped_id.yynum()), + ("ID".to_owned(), 6) + ); +} + +#[test] +fn regex_and_nfa_build_a_functional_native_dfa() { + let handler = ErrorHandler::default(); + let tokens = TokensGen::new(handler.clone()).expect("generator"); + let regex = Regex::new(tokens.clone(), 0, "[A-Z][a-z]+".to_owned()).expect("regex"); + assert!( + !regex + .match__with_char(Utf16CodeUnit(u16::from(b'Q'))) + .expect("single-unit mismatch") + ); + assert!( + !regex + .match__with_char(Utf16CodeUnit(u16::from(b'q'))) + .expect("mismatch") + ); + assert_eq!( + regex + .match__with_string("Zebra".to_owned()) + .expect("prefix"), + 5 + ); + + let mut nfa = Nfa::new_with_tokens_gen_regex(tokens, regex).expect("nfa"); + nfa.m_end.m_s_terminal = "CAPITAL".to_owned(); + let dfa = Dfa::new_with_nfa(nfa).expect("dfa"); + let mut table = libremetaverse_lsl_tools::YyLexer::new(handler).expect("table"); + table.set_start_dfa("YYINITIAL", dfa).expect("start"); + table.using_eof = true; + let mut lexer = Lexer::new(table).expect("runtime"); + lexer.start_with_string("Rust".to_owned()).expect("source"); + let token = lexer.next_token().expect("lexing").expect("token"); + assert_eq!( + (token.yyname(), token.yytext()), + ("CAPITAL".to_owned(), "Rust".to_owned()) + ); + + let tokens = TokensGen::new(ErrorHandler::default()).expect("manual generator"); + let mut manual = Nfa::new_with_tokens_gen(tokens.clone()).expect("manual nfa"); + manual.m_end.m_s_terminal = "PAIR".to_owned(); + let middle = NfaNode::new(tokens).expect("middle state"); + manual + .start + .add_arc(Utf16CodeUnit(u16::from(b'a')), middle.clone()) + .expect("first arc"); + middle + .add_arc(Utf16CodeUnit(u16::from(b'b')), manual.m_end.clone()) + .expect("second arc"); + let dfa = Dfa::new_with_nfa(manual).expect("determinised nfa"); + let mut action = -1; + assert_eq!( + dfa.match_("ab".to_owned(), 0, &mut action).expect("pair"), + 2 + ); +} + +#[test] +fn serialiser_round_trips_deterministically_with_versioning() { + let value = Object::Map(HashMap::from([ + ("b".to_owned(), Object::Integer(7)), + ( + "a".to_owned(), + Object::Array(vec![Object::Boolean(true), Object::String("λ".to_owned())]), + ), + ])); + let encoded = capture(|output| { + let serialiser = Serialiser::new_with_text_writer(output).expect("writer"); + serialiser.version_check().expect("version"); + serialiser.serialise(value.clone()).expect("serialise"); + }); + let encoded_again = capture(|output| { + let serialiser = Serialiser::new_with_text_writer(output).expect("writer"); + serialiser.version_check().expect("version"); + serialiser.serialise(value.clone()).expect("serialise"); + }); + assert_eq!(encoded, encoded_again); + let integers = String::from_utf8(encoded) + .expect("ASCII integers") + .split(',') + .filter(|value| !value.trim().is_empty()) + .map(|value| value.trim().parse::().expect("integer")) + .collect::>(); + let decoder = Serialiser::new_with_int32_array(integers).expect("reader"); + decoder + .version_check() + .expect(LSL_GENERATOR_SERIALIZATION_VERSION); + assert_eq!(decoder.deserialise().expect("deserialise"), value); +} + +#[test] +fn compatibility_enumerator_and_generator_state_are_live() { + let mut values = ObjectList::new().expect("list"); + values.add(Object::Integer(1)).expect("first"); + values + .add(Object::String("two".to_owned())) + .expect("second"); + let enumerator = ObjectListOListEnumerator::new(values).expect("enumerator"); + assert_eq!(enumerator.current(), Object::Undefined); + assert!(enumerator.move_next().expect("first")); + assert_eq!(enumerator.current(), Object::Integer(1)); + assert!(enumerator.move_next().expect("second")); + assert_eq!(enumerator.current(), Object::String("two".to_owned())); + assert!(!enumerator.move_next().expect("end")); + enumerator.reset().expect("reset"); + assert!(enumerator.move_next().expect("first again")); + + let generator = TokensGen::new(ErrorHandler::default()).expect("generator"); + assert_eq!(generator.new_state().expect("state one"), 1); + assert_eq!(generator.new_state().expect("state two"), 2); + assert_eq!( + generator + .fix_actions("yybegin(); yyl".to_owned()) + .expect("rewritten action"), + "yym.yy_begin(); ((tokens)yym)" + ); + assert!(Dfa::new_with_tokens_gen(generator).is_ok()); +} + +#[test] +fn symbol_and_token_factories_execute_registered_rust_closures() { + let parser = libremetaverse_lsl_tools::Parser::new( + generated_parser().expect("parser table"), + Lexer::new(generated_lexer().expect("lexer table")).expect("lexer"), + ) + .expect("parser"); + let symbol_creator = SCreator::from_fn(|_| Ok(Object::String("symbol".to_owned()))); + let registration = Sfactory::new( + generated_parser().expect("parser table"), + "GeneratedSymbol".to_owned(), + symbol_creator, + ) + .expect("symbol registration"); + assert_eq!(registration.name(), "GeneratedSymbol"); + assert_eq!( + Sfactory::create("GeneratedSymbol_Derived".to_owned(), parser).expect("symbol factory"), + Object::String("symbol".to_owned()) + ); + + let lexer = Lexer::new(generated_lexer().expect("lexer table")).expect("lexer"); + let token_creator = TCreator::from_fn(|_| Ok(Object::Integer(83))); + let registration = Tfactory::new( + generated_lexer().expect("lexer table"), + "GeneratedToken".to_owned(), + token_creator, + ) + .expect("token registration"); + assert_eq!(registration.name(), "GeneratedToken"); + assert_eq!( + Tfactory::create("GeneratedToken_Derived".to_owned(), lexer).expect("token factory"), + Object::Integer(83) + ); + + let callback_ran = Arc::new(AtomicBool::new(false)); + let callback_state = callback_ran.clone(); + let async_creator = TCreator::from_fn(|_| Ok(Object::String("async".to_owned()))); + let result = async_creator + .begin_invoke( + Lexer::new(generated_lexer().expect("lexer table")).expect("lexer"), + Box::new(move |_| callback_state.store(true, Ordering::SeqCst)), + Object::Undefined, + ) + .expect("begin invoke"); + assert!(callback_ran.load(Ordering::SeqCst)); + assert_eq!( + async_creator.end_invoke(result).expect("end invoke"), + Object::String("async".to_owned()) + ); +} + +#[test] +fn symbols_paths_and_token_class_definitions_keep_native_state() { + let symbols = SymbolsGen::new(ErrorHandler::default()).expect("symbols generator"); + let declared = SymbolType::new_with_symbols_gen_string_boolean( + symbols.clone(), + "SemanticValue".to_owned(), + true, + ) + .expect("symbol type"); + assert_eq!( + declared + .find("SemanticValue".to_owned()) + .expect("lookup") + .name, + "SemanticValue" + ); + + let identifier = CSymbol::native("ID", 6, CSymbolSymType::Terminal).expect("symbol"); + let path = Path::new_with_c_symbol_array(vec![identifier.clone()]).expect("path"); + assert_eq!(path.spelling()[0].m_yynum, 6); + assert!(!path.valid); + assert_eq!(path.top().m_state, 0); + + let output = Arc::new(Mutex::new(Vec::new())); + let generator = libremetaverse_lsl_tools::GenBase::new( + ErrorHandler::default(), + Box::new(SharedWriter(output)), + ) + .expect("generator base"); + let definition = TokClassDef::new(generator, "IDENTIFIER".to_owned(), "TOKEN".to_owned()) + .expect("token class"); + assert_eq!(definition.m_name, "IDENTIFIER"); + assert_eq!(definition.m_ref_token, "TOKEN"); + assert_eq!(definition.m_yynum, 3); +} diff --git a/tests/api-compile/Cargo.lock b/tests/api-compile/Cargo.lock index c3fad8c..d007e24 100644 --- a/tests/api-compile/Cargo.lock +++ b/tests/api-compile/Cargo.lock @@ -8,6 +8,15 @@ version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa" +[[package]] +name = "aho-corasick" +version = "1.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c982642fa9e8606056828ee9a8505737230110bb1099153c79efe865c59d12ba" +dependencies = [ + "memchr", +] + [[package]] name = "android_system_properties" version = "0.1.6" @@ -783,6 +792,7 @@ name = "libremetaverse-lsl-tools" version = "0.0.1" dependencies = [ "libremetaverse-types", + "regex", "unicode-general-category", ] @@ -1336,6 +1346,35 @@ dependencies = [ "rand_core", ] +[[package]] +name = "regex" +version = "1.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f020237b6c8eed93db2e2cb53c00c60a8e1bc73da7d073199a1180401450218d" +dependencies = [ + "aho-corasick", + "memchr", + "regex-automata", + "regex-syntax", +] + +[[package]] +name = "regex-automata" +version = "0.4.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad8553b9b26413251cbf30e620595c7a41b3887f03da04579c0e6b0d6a06b4b2" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax", +] + +[[package]] +name = "regex-syntax" +version = "0.8.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6f6ff9a378485b298a5286656da665ba74413d36db0979633275d2e708145d4" + [[package]] name = "reqwest" version = "0.13.4" diff --git a/tools/check_milestone_10_issue_83.py b/tools/check_milestone_10_issue_83.py new file mode 100644 index 0000000..b4e1b33 --- /dev/null +++ b/tools/check_milestone_10_issue_83.py @@ -0,0 +1,204 @@ +#!/usr/bin/env python3 +"""Audit issue 83's deterministic native LSL parser/token generation.""" + +from __future__ import annotations + +import json +import re +from pathlib import Path + +import generate_api_shims +import generate_lsl_tables + + +ROOT = Path(__file__).resolve().parents[1] +CATALOG = ROOT / "api" / "public-api.json" +INPUT = ROOT / "codegen" / "inputs" / "lsl_tools_grammar.json" +TABLES = ROOT / "crates" / "libremetaverse-lsl-tools" / "src" / "generated_tables.rs" +GENERATOR = ROOT / "crates" / "libremetaverse-lsl-tools" / "src" / "generator.rs" +GENERATED = ROOT / "crates" / "libremetaverse-lsl-tools" / "src" / "generated.rs" +TESTS = ROOT / "crates" / "libremetaverse-lsl-tools" / "tests" / "generator_compat.rs" +DOC = ROOT / "crates" / "libremetaverse-lsl-tools" / "README.md" +WORKFLOW = ROOT / ".gitea" / "workflows" / "rust-workspace.yml" +SCRIPT = ROOT / "tools" / "generate_lsl_tables.py" +STUB_RE = re.compile( + r"\b(?:not_implemented|unimplemented_api)\b|\b(?:todo|unimplemented)!\s*\(" +) + + +def owned_types() -> dict[str, str]: + return { + doc_id: declaration + for doc_id, declaration in generate_api_shims.NATIVE_TYPES.items() + if declaration.startswith("crate::generated_tables::") + or declaration.startswith("crate::generator::") + } + + +def catalog_counts(doc_ids: set[str]) -> tuple[int, int]: + catalog = json.loads(CATALOG.read_text()) + assembly = next( + value + for value in catalog["assemblies"] + if value["identity"]["name"] == "LibreMetaverse.LslTools" + ) + found: dict[str, int] = {} + + def visit(value: object) -> None: + if isinstance(value, dict): + doc_id = value.get("doc_id") + if doc_id in doc_ids and str(doc_id).startswith("T:"): + found[str(doc_id)] = len(value.get("members", [])) + for child in value.values(): + visit(child) + elif isinstance(value, list): + for child in value: + visit(child) + + visit(assembly["types"]) + if set(found) != doc_ids: + missing = sorted(doc_ids - set(found)) + raise SystemExit(f"issue 83 catalog types are missing: {missing}") + return len(found), sum(found.values()) + + +def generated_type_block(text: str, doc_id: str) -> str: + marker = f"/// C# type: `{doc_id}`." + start = text.find(marker) + if start < 0: + raise SystemExit(f"generated declaration is missing for {doc_id}") + next_type = text.find("/// C# type:", start + len(marker)) + return text[start:] if next_type < 0 else text[start:next_type] + + +def require_markers(path: Path, markers: tuple[str, ...]) -> None: + text = path.read_text() + missing = [marker for marker in markers if marker not in text] + if missing: + raise SystemExit(f"{path.name}: audit evidence missing: " + ", ".join(missing)) + + +def main() -> None: + types = owned_types() + type_count, member_count = catalog_counts(set(types)) + if (type_count, member_count) != (120, 365): + raise SystemExit( + f"issue 83 expected 120 mapped types and 365 members, found " + f"{type_count} and {member_count}" + ) + + data = json.loads(INPUT.read_text()) + if data["source"].get("license") != "BSD-3-Clause": + raise SystemExit("issue 83 reviewed grammar input has no BSD-3-Clause provenance") + if len(data["tokens"]) != 14 or len(data["nonterminals"]) != 8: + raise SystemExit("issue 83 grammar must contain 14 tokens and 8 nonterminals") + if len(data["productions"]) != 25: + raise SystemExit("issue 83 grammar must contain all 25 reviewed productions") + first = generate_lsl_tables.render(data).encode() + second = generate_lsl_tables.render(json.loads(INPUT.read_text())).encode() + if first != second or first != TABLES.read_bytes(): + raise SystemExit("two clean LSL generations were not byte-identical") + + for path in (TABLES, GENERATOR): + source = path.read_text() + if STUB_RE.search(source): + raise SystemExit(f"issue 83 owned Rust stubs remain in {path.name}") + if re.search(r"unsafe\s*\{|unsafe\s+impl|target_os\s*=\s*\"macos\"", source): + raise SystemExit(f"{path.name} contains unsafe or macOS-only code") + script = SCRIPT.read_text() + if re.search(r"\b(?:dotnet|csc|mcs)\b", script, re.IGNORECASE): + raise SystemExit("LSL regeneration depends on a C#/.NET process") + + generated = GENERATED.read_text() + for doc_id in types: + if STUB_RE.search(generated_type_block(generated, doc_id)): + raise SystemExit(f"issue 83 generated stubs remain for {doc_id}") + + require_markers( + TABLES, + ( + "LSL_GENERATOR_SOURCE_COMMIT", + "LSL_GENERATOR_SOURCE_PARSER", + "LSL_GENERATOR_SOURCE_LEXER", + "LSL_GENERATOR_SOURCE_LICENSE", + "LSL_GENERATOR_SERIALIZATION_VERSION", + "GENERATED_PARSER_DATA", + "pub fn generated_parser()", + "pub fn generated_lexer_with_handler", + "pub struct GeneratedLexerToken", + "pub struct GeneratedParserSymbol", + "pub struct yycs0syntax", + "pub struct yycs0tokens", + "pub struct cs0syntax", + "pub struct cs0tokens", + ), + ) + require_markers( + GENERATOR, + ( + "pub struct Serialiser", + "pub struct GenBase", + "pub struct SymbolsGen", + "pub struct TokensGen", + "pub struct Regex", + "pub struct Nfa", + "pub struct Sfactory", + "pub struct Tfactory", + "pub struct TokClassDef", + "pub struct ObjectListOListEnumerator", + "pub struct AddToFunc", + "MAX_GENERATED_DFA_STATES", + "MAX_REGEX_UNITS", + "System.Char", + ), + ) + require_markers( + TESTS, + ( + "generated_lexer_preserves_tokens_reserved_words_and_eof", + "generated_parser_accepts_the_reviewed_class_body_grammar", + "parser_and_lexer_emission_is_byte_deterministic", + "generated_token_classes_have_live_identity_and_text", + "regex_and_nfa_build_a_functional_native_dfa", + "serialiser_round_trips_deterministically_with_versioning", + "compatibility_enumerator_and_generator_state_are_live", + "symbol_and_token_factories_execute_registered_rust_closures", + "symbols_paths_and_token_class_definitions_keep_native_state", + ), + ) + if TESTS.read_text().count("#[test]") != 9: + raise SystemExit("issue 83 expected 9 focused generator fixtures") + require_markers( + DOC, + ( + "Checked-in generator contract", + "25-production grammar", + "84 generated syntax", + "13 generated token classes", + "python3 tools/generate_lsl_tables.py --check", + "46 focused", + "ubuntu-latest", + ), + ) + workflow = WORKFLOW.read_text() + require_markers( + WORKFLOW, + ( + "python3 tools/check_milestone_10_issue_83.py", + "python3 tools/generate_lsl_tables.py --check", + ), + ) + if "runs-on: ubuntu-latest" not in workflow or re.search( + r"runs-on:\s*(?:macos|windows)", workflow, re.IGNORECASE + ): + raise SystemExit("issue 83 workflow is not ubuntu-only") + + print( + "issue 83 audit: 120 native mapped generator/table types and 365 members, " + "14 tokens, 8 nonterminals, 25 productions, two byte-identical generations, " + "9 focused fixtures, migration docs, and ubuntu-only CI are present" + ) + + +if __name__ == "__main__": + main() diff --git a/tools/generate_api_shims.py b/tools/generate_api_shims.py index 348bb65..c0512a5 100644 --- a/tools/generate_api_shims.py +++ b/tools/generate_api_shims.py @@ -511,6 +511,39 @@ NATIVE_TYPES = { "T:LibreMetaverse.Rendering.LindenSkeleton": "crate::skeleton::LindenSkeleton", } +# The cs0 parser/token classes are generated from the reviewed Rust grammar +# input. Keep this list algorithmic so adding an alternative cannot leave a +# hand-maintained compatibility shell behind. +_LSL_GENERATED_TYPES = [ + "ANY", "BASE", "COLON", "ID", "LBRACE", "LBRACK", "LPAREN", "NEW", + "RBRACE", "RBRACK", "RPAREN", "SEMICOLON", "THIS", +] +for _lhs, _alternatives in ( + ("ClassBody", 1), ("GStuff", 3), ("Stuff", 2), ("Cons", 1), + ("Call", 1), ("BaseCall", 3), ("Name", 2), ("Item", 12), +): + _LSL_GENERATED_TYPES.append(_lhs) + for _alternative in range(1, _alternatives + 1): + _LSL_GENERATED_TYPES.extend(( + f"{_lhs}_{_alternative * 2 - 1}", + f"{_lhs}_{_alternative * 2}", + f"{_lhs}_{_alternative * 2}_1", + )) +_LSL_GENERATED_TYPES.extend(("cs0syntax", "cs0tokens", "yycs0syntax", "yycs0tokens")) +NATIVE_TYPES.update({ + f"T:LibreMetaverse.LslTools.{name}": f"crate::generated_tables::{name}" + for name in _LSL_GENERATED_TYPES +}) +for _name in ( + "AddToFunc", "Builder", "Func", "GenBase", "LNode", "Nfa", "NfaNode", + "Path", "Regex", "Relation", "SCreator", "Serialiser", "Sfactory", + "SymbolType", "SymbolsGen", "TCreator", "Tfactory", "TokClassDef", "TokensGen", +): + NATIVE_TYPES[f"T:LibreMetaverse.LslTools.{_name}"] = f"crate::generator::{_name}" +NATIVE_TYPES["T:LibreMetaverse.LslTools.ObjectList.OListEnumerator"] = ( + "crate::generator::ObjectListOListEnumerator" +) + # Native declarations whose cataloged method implementations are still emitted # below. This is used for static namespace types such as OSDParser: the type is # hand-written, while its fixed public methods remain generator-audited. diff --git a/tools/generate_lsl_tables.py b/tools/generate_lsl_tables.py new file mode 100644 index 0000000..170f65a --- /dev/null +++ b/tools/generate_lsl_tables.py @@ -0,0 +1,389 @@ +#!/usr/bin/env python3 +"""Generate native Rust LSL parser/token types from the reviewed grammar.""" + +from __future__ import annotations + +import argparse +import json +import subprocess +from pathlib import Path + +import generate_rust_mapping as mapping + + +ROOT = Path(__file__).resolve().parents[1] +INPUT = ROOT / "codegen" / "inputs" / "lsl_tools_grammar.json" +OUTPUT = ( + ROOT / "crates" / "libremetaverse-lsl-tools" / "src" / "generated_tables.rs" +) + + +def rust_string(value: str) -> str: + return json.dumps(value, ensure_ascii=True) + + +def format_rust(source: str) -> str: + """Apply the workspace's canonical Rust formatting deterministically.""" + result = subprocess.run( + ["rustfmt", "--edition", "2024", "--emit", "stdout"], + input=source, + text=True, + capture_output=True, + check=False, + ) + if result.returncode != 0: + raise SystemExit(f"rustfmt rejected generated LSL Rust:\n{result.stderr}") + return result.stdout + + +def semantic_expression(action: str) -> str: + expressions = { + "ClassBody_2_1": "stack_text(parser, 1)?", + "GStuff_2_1": "String::new()", + "GStuff_4_1": "format!(\"{}{}\", stack_text(parser, 1)?, stack_text(parser, 0)?)", + "GStuff_6_1": "format!(\"{}{}\", stack_text(parser, 1)?, stack_text(parser, 0)?)", + "Stuff_2_1": "String::new()", + "Stuff_4_1": "format!(\"{}{}\", stack_text(parser, 1)?, stack_text(parser, 0)?)", + "Cons_2_1": "format!(\"{}({}){}\", stack_text(parser, 4)?.trim(), stack_text(parser, 2)?, stack_text(parser, 0)?)", + "Call_2_1": "format!(\"{}({})\", stack_text(parser, 3)?.trim(), stack_text(parser, 1)?)", + "BaseCall_2_1": "String::new()", + "BaseCall_4_1": "format!(\"base{}\", stack_text(parser, 1)?)", + "BaseCall_6_1": "format!(\"this{}\", stack_text(parser, 1)?)", + "Name_2_1": "format!(\" {} \", stack_text(parser, 0)?)", + "Name_4_1": "format!(\"{}[{}]\", stack_text(parser, 3)?, stack_text(parser, 1)?)", + "Item_2_1": "stack_text(parser, 0)?", + "Item_4_1": "stack_text(parser, 0)?", + "Item_6_1": "\";\\n\".to_owned()", + "Item_8_1": "\" base \".to_owned()", + "Item_10_1": "\" this \".to_owned()", + "Item_12_1": "format!(\" this[{}]\", stack_text(parser, 1)?)", + "Item_14_1": "\":\".to_owned()", + "Item_16_1": "format!(\" new {}\", stack_text(parser, 0)?)", + "Item_18_1": "format!(\" new {}\", stack_text(parser, 0)?)", + "Item_20_1": "format!(\"({})\", stack_text(parser, 1)?)", + "Item_22_1": "format!(\"{{{}}}\\n\", stack_text(parser, 1)?)", + "Item_24_1": "format!(\"[{}]\", stack_text(parser, 1)?)", + } + return expressions[action] + + +def render(data: dict) -> str: + tokens = data["tokens"] + nonterminals = data["nonterminals"] + numbers = {name: number for name, number, *_ in tokens} + numbers.update({name: number for name, number in nonterminals}) + + generated = [] + next_number = 24 + alternatives: dict[str, int] = {} + for _, lhs, _, action in data["productions"]: + alternative = alternatives.get(lhs, 0) + 1 + alternatives[lhs] = alternative + for name in (f"{lhs}_{alternative * 2 - 1}", f"{lhs}_{alternative * 2}", action): + generated.append((name, next_number, lhs, numbers[lhs])) + next_number += 1 + assert next_number == 99 + + flat = [data["schema"], data["start"], data["eof"], len(tokens) + len(nonterminals)] + for name, number, *_ in tokens: + flat.extend((number, 1, len(name))) + for name, number in nonterminals: + flat.extend((number, 0, len(name))) + flat.append(len(data["productions"])) + for production, lhs, rhs, _ in data["productions"]: + flat.extend((production, numbers[lhs], len(rhs), *(numbers[name] for name in rhs))) + + lines = [ + "// @generated by tools/generate_lsl_tables.py; do not edit by hand.", + "#![allow(non_camel_case_types)]", + "#![allow(non_snake_case)]", + "#![allow(clippy::missing_errors_doc)]", + "#![allow(clippy::must_use_candidate)]", + "", + "use std::ops::{Deref, DerefMut};", + "", + "use libremetaverse_types::compat::{Object, UnicodeCategory};", + "", + "use crate::{", + " CharacterMatcher, Dfa, DfaAccept, DfaState, Error, ErrorHandler, Grammar,", + " Lexer, LexerAction, Parser, ResWds, SYMBOL, TOKEN, TokenDefinition,", + " UnicodeClass, YyLexer, YyParser,", + "};", + "", + f"pub const LSL_GENERATOR_SOURCE_COMMIT: &str = {rust_string(data['source']['commit'])};", + f"pub const LSL_GENERATOR_SOURCE_PARSER: &str = {rust_string(data['source']['parser'])};", + f"pub const LSL_GENERATOR_SOURCE_LEXER: &str = {rust_string(data['source']['lexer'])};", + f"pub const LSL_GENERATOR_SOURCE_LICENSE: &str = {rust_string(data['source']['license'])};", + f"pub const LSL_GENERATOR_SERIALIZATION_VERSION: &str = {rust_string(data['source']['serialization_version'])};", + "pub const GENERATED_PARSER_DATA: &[i32] = &[", + ] + for index in range(0, len(flat), 16): + lines.append(" " + ", ".join(map(str, flat[index:index + 16])) + ",") + lines.extend(["];"]) + + lines.extend([ + "", + "pub fn generated_symbol_name(number: i32) -> Option<&'static str> {", + " match number {", + ]) + for name, number, *_ in tokens: + lines.append(f" {number} => Some({rust_string(name)}),") + for name, number in nonterminals: + lines.append(f" {number} => Some({rust_string(name)}),") + lines.extend([" _ => None,", " }", "}"]) + + lines.extend([ + "", + "pub fn generated_parser() -> Result {", + f" let mut grammar = Grammar::new({data['start']}, {data['eof']})?;", + ]) + for name, number, *_ in tokens: + lines.append(f" grammar.add_symbol({rust_string(name)}, {number}, true)?;") + for name, number in nonterminals: + lines.append(f" grammar.add_symbol({rust_string(name)}, {number}, false)?;") + for _, lhs, rhs, _ in data["productions"]: + rhs_numbers = ", ".join(str(numbers[name]) for name in rhs) + lines.append(f" grammar.add_production({numbers[lhs]}, vec![{rhs_numbers}])?;") + lines.extend([ + " let mut parser = grammar.build()?;", + " parser.arr = GENERATED_PARSER_DATA.to_vec();", + " Ok(parser)", + "}", + "", + "fn accept(name: &str, number: i32, action: LexerAction, action_number: i32) -> DfaAccept {", + " DfaAccept {", + " token: TokenDefinition { name: name.to_owned(), number },", + " action,", + " action_number,", + " reserved_words: (name == \"ID\").then(|| \"ID\".to_owned()),", + " }", + "}", + "", + "pub fn generated_lexer_with_handler(error_handler: ErrorHandler) -> Result {", + " let punctuation = [", + ]) + punctuation = [(name, number, literal) for name, number, literal in tokens if literal and len(literal) == 1] + for name, number, literal in punctuation: + lines.append(f" ({ord(literal)}, {rust_string(name)}, {number}),") + lines.extend([ + " ];", + " let punctuation_start = 3usize;", + " let any_state = punctuation_start + punctuation.len();", + " let mut states = vec![DfaState::default(); any_state + 1];", + " states[0] = states[0].clone()", + " .transition(CharacterMatcher::UnicodeClass(UnicodeClass::WhiteSpace), 1)", + " .transition(CharacterMatcher::UnicodeClass(UnicodeClass::Letter), 2)", + " .transition(CharacterMatcher::Exact(u16::from(b'_')), 2);", + " for (offset, (unit, _, _)) in punctuation.iter().enumerate() {", + " states[0].transitions.push((CharacterMatcher::Exact(*unit), punctuation_start + offset));", + " }", + " states[0].transitions.push((CharacterMatcher::Any, any_state));", + " states[1] = states[1].clone()", + " .transition(CharacterMatcher::UnicodeClass(UnicodeClass::WhiteSpace), 1)", + " .accepting(accept(\"ANY\", 7, LexerAction::Skip, -1));", + " states[2] = states[2].clone()", + " .transition(CharacterMatcher::UnicodeClass(UnicodeClass::Letter), 2)", + " .transition(CharacterMatcher::UnicodeClass(UnicodeClass::Number), 2)", + " .transition(CharacterMatcher::Exact(u16::from(b'_')), 2)", + " .accepting(accept(\"ID\", 6, LexerAction::Emit, 0));", + " for (offset, (_, name, number)) in punctuation.iter().enumerate() {", + " states[punctuation_start + offset] = DfaState::default()", + " .accepting(accept(name, *number, LexerAction::Emit, *number));", + " }", + " states[any_state] = DfaState::default()", + " .accepting(accept(\"ANY\", 7, LexerAction::Emit, 1));", + " let mut lexer = YyLexer::new(error_handler)?;", + " lexer.set_start_dfa(\"YYINITIAL\", Dfa::from_states(states, 0)?)?;", + " lexer.set_reserved_words(\"ID\", ResWds::from_pairs([", + " (\"base\", TokenDefinition::new(\"BASE\", 3)?),", + " (\"this\", TokenDefinition::new(\"THIS\", 4)?),", + " (\"new\", TokenDefinition::new(\"NEW\", 5)?),", + " ], false)?)?;", + " lexer.using_eof = true;", + " for (name, number) in [", + ]) + for name, number, *_ in tokens: + lines.append(f" ({rust_string(name)}, {number}),") + lines.extend([ + " ] {", + " lexer.tokens.0.insert(Object::String(name.to_owned()), Object::Integer(number));", + " }", + " let _ = lexer.using_cat(UnicodeCategory(0))?;", + " Ok(lexer)", + "}", + "", + "pub fn generated_lexer() -> Result {", + " generated_lexer_with_handler(ErrorHandler::new_with_boolean(false)?)", + "}", + "", + "#[derive(Clone, Debug)]", + "pub struct GeneratedLexerToken(TOKEN);", + "", + "impl GeneratedLexerToken {", + " pub fn new(lexer: Lexer) -> Result {", + " let name = generated_symbol_name(NUMBER).ok_or(Error::Argument)?;", + " Ok(Self(TOKEN::generated_with_lexer(lexer, name, NUMBER)?))", + " }", + " pub fn yyname(&self) -> String { self.0.yyname() }", + " pub const fn yynum(&self) -> i32 { NUMBER }", + " pub fn yytext(&self) -> String { self.0.yytext() }", + "}", + "", + "impl Deref for GeneratedLexerToken {", + " type Target = TOKEN;", + " fn deref(&self) -> &Self::Target { &self.0 }", + "}", + "impl DerefMut for GeneratedLexerToken {", + " fn deref_mut(&mut self) -> &mut Self::Target { &mut self.0 }", + "}", + ]) + for name, number, *_ in tokens: + if name != "EOF": + lines.append(f"pub type {name} = GeneratedLexerToken<{number}>;") + + lines.extend([ + "", + "fn generated_parser_identity(generated: i32) -> Option<(&'static str, i32)> {", + " match generated {", + ]) + for lhs, number in nonterminals: + identities = [internal for _, internal, owner, _ in generated if owner == lhs] + pattern = ( + str(identities[0]) + if len(identities) == 1 + else f"{identities[0]}..={identities[-1]}" + ) + lines.append(f" {pattern} => Some(({rust_string(lhs)}, {number})),") + lines.extend([" _ => None,", " }", "}"]) + lines.extend([ + "", + "fn stack_text(parser: &Parser, index: i32) -> Result {", + " Ok(parser.stack_at(index)?.m_value.raw_text())", + "}", + "", + "fn generated_semantic_text(generated: i32, parser: &Parser) -> Result {", + " Ok(match generated {", + ]) + action_ids = {name: internal for name, internal, _, _ in generated} + expressions: dict[str, list[int]] = {} + for _, _, _, action in data["productions"]: + expression = semantic_expression(action) + if expression != "String::new()": + expressions.setdefault(expression, []).append(action_ids[action]) + for expression, action_numbers in expressions.items(): + pattern = " | ".join(str(number) for number in action_numbers) + lines.append(f" {pattern} => {expression},") + lines.extend([" _ => String::new(),", " })", "}"]) + lines.extend([ + "", + "#[derive(Clone, Debug)]", + "pub struct GeneratedParserSymbol(TOKEN);", + "", + "impl GeneratedParserSymbol {", + " pub fn new(parser: Parser) -> Result {", + " let (name, number) = generated_parser_identity(GENERATED).ok_or(Error::Argument)?;", + " let text = generated_semantic_text(GENERATED, &parser)?;", + " Ok(Self(TOKEN::generated_with_parser(parser, name, number, text)?))", + " }", + " pub fn yyname(&self) -> String { self.0.yyname() }", + " pub fn yynum(&self) -> i32 { self.0.yynum() }", + " pub fn yytext(&self) -> String { self.0.yytext() }", + "}", + "", + "impl Deref for GeneratedParserSymbol {", + " type Target = TOKEN;", + " fn deref(&self) -> &Self::Target { &self.0 }", + "}", + "impl DerefMut for GeneratedParserSymbol {", + " fn deref_mut(&mut self) -> &mut Self::Target { &mut self.0 }", + "}", + ]) + base_ids = {} + for name, internal, lhs, _ in generated: + base_ids.setdefault(lhs, internal) + lines.append(f"pub type {name} = GeneratedParserSymbol<{internal}>;") + for name, _ in nonterminals: + lines.append(f"pub type {name} = GeneratedParserSymbol<{base_ids[name]}>;") + + lines.extend([ + "", + "#[derive(Clone, Debug)]", + "pub struct yycs0syntax(pub YyParser);", + "impl yycs0syntax {", + " pub fn new() -> Result { Ok(Self(generated_parser()?)) }", + " pub fn action(&self, parser: Parser, symbol: SYMBOL, action: i32) -> Result { self.0.action(parser, symbol, action) }", + ]) + for name, internal, _, _ in generated: + factory = mapping.snake(f"{name}_factory") + lines.append(f" pub fn {factory}(parser: Parser) -> Result {{ Ok(Object::opaque({name}::new(parser)?)) }}") + for name, _ in nonterminals: + factory = mapping.snake(f"{name}_factory") + lines.append(f" pub fn {factory}(parser: Parser) -> Result {{ Ok(Object::opaque({name}::new(parser)?)) }}") + lines.extend([ + " pub fn error_factory(parser: Parser) -> Result { Ok(Object::opaque(crate::LslError::new_with_parser(parser)?)) }", + "}", + "impl Deref for yycs0syntax { type Target = YyParser; fn deref(&self) -> &Self::Target { &self.0 } }", + "impl DerefMut for yycs0syntax { fn deref_mut(&mut self) -> &mut Self::Target { &mut self.0 } }", + "", + "#[derive(Clone, Debug)]", + "pub struct yycs0tokens(pub YyLexer);", + "impl yycs0tokens {", + " pub fn new(error_handler: ErrorHandler) -> Result { Ok(Self(generated_lexer_with_handler(error_handler)?)) }", + ]) + for name, number, *_ in tokens: + if name != "EOF": + factory = mapping.snake(f"{name}_factory") + lines.append(f" pub fn {factory}(lexer: Lexer) -> Result {{ Ok(Object::opaque({name}::new(lexer)?)) }}") + lines.extend([ + " pub fn old_action(&self, lexer: Lexer, yytext: &mut String, action: i32, reject: &mut bool) -> Result {", + " if matches!(action, 8 | 55 | 74) { match action { 8 => \"yym.yy_begin\", 55 => \"((cs0tokens)yym)\", _ => \"((cs0syntax)yyq)\" }.clone_into(yytext); return TOKEN::generated_with_lexer(lexer, \"ANY\", 7); }", + " *reject = true;", + " Err(Error::InvalidOperation)", + " }", + "}", + "impl Deref for yycs0tokens { type Target = YyLexer; fn deref(&self) -> &Self::Target { &self.0 } }", + "impl DerefMut for yycs0tokens { fn deref_mut(&mut self) -> &mut Self::Target { &mut self.0 } }", + "", + "#[derive(Clone, Debug)]", + "pub struct cs0tokens { pub out: String, pub lexer: Lexer }", + "impl cs0tokens {", + " pub fn new() -> Result { Self::new_with_yy_lexer(generated_lexer()?) }", + " pub fn new_with_constructor() -> Result { Self::new() }", + " pub fn new_with_error_handler(handler: ErrorHandler) -> Result { Self::new_with_yy_lexer(generated_lexer_with_handler(handler)?) }", + " pub fn new_with_yy_lexer(tokens: YyLexer) -> Result { Ok(Self { out: String::new(), lexer: Lexer::new(tokens)? }) }", + "}", + "impl Deref for cs0tokens { type Target = Lexer; fn deref(&self) -> &Self::Target { &self.lexer } }", + "impl DerefMut for cs0tokens { fn deref_mut(&mut self) -> &mut Self::Target { &mut self.lexer } }", + "", + "#[derive(Clone, Debug)]", + "pub struct cs0syntax { pub out: String, pub cls: String, pub par: String, pub ctx: String, pub defconseen: bool, pub parser: Parser }", + "impl cs0syntax {", + " pub fn new() -> Result { Self::new_with_yy_parser(generated_parser()?) }", + " pub fn new_with_constructor() -> Result { Self::new() }", + " pub fn new_with_yy_parser(symbols: YyParser) -> Result { let lexer = Lexer::new(generated_lexer()?)?; Self::from_parts(symbols, lexer) }", + " pub fn new_with_yy_parser_error_handler(mut symbols: YyParser, handler: ErrorHandler) -> Result { symbols.erh = handler.clone(); let lexer = Lexer::new(generated_lexer_with_handler(handler)?)?; Self::from_parts(symbols, lexer) }", + " fn from_parts(symbols: YyParser, lexer: Lexer) -> Result { Ok(Self { out: String::new(), cls: String::new(), par: String::new(), ctx: String::new(), defconseen: false, parser: Parser::new(symbols, lexer)? }) }", + "}", + "impl Deref for cs0syntax { type Target = Parser; fn deref(&self) -> &Self::Target { &self.parser } }", + "impl DerefMut for cs0syntax { fn deref_mut(&mut self) -> &mut Self::Target { &mut self.parser } }", + "", + ]) + return format_rust("\n".join(lines)) + + +def main() -> None: + parser = argparse.ArgumentParser() + parser.add_argument("--check", action="store_true") + args = parser.parse_args() + data = json.loads(INPUT.read_text()) + output = render(data) + if args.check: + if not OUTPUT.exists() or OUTPUT.read_text() != output: + raise SystemExit(f"generated LSL table is stale: {OUTPUT}") + print("LSL parser/token generation is byte-identical") + return + OUTPUT.write_text(output) + + +if __name__ == "__main__": + main()