From 32636c772415aecd81986c6641f1fcd822cc2485 Mon Sep 17 00:00:00 2001 From: Deukhoofd Date: Thu, 7 Apr 2022 20:55:50 +0200 Subject: [PATCH] Adds lexed token and parsed tree tests to class_with_many_statements --- .../class_with_many_statements.rs | 288 ++++ .../lexed_tokens.json | 1310 +++++++++++++++++ .../parsed_tree.json | 286 ++++ 3 files changed, 1884 insertions(+) create mode 100644 src/integration_tests/test_cases/class_with_many_statements/lexed_tokens.json create mode 100644 src/integration_tests/test_cases/class_with_many_statements/parsed_tree.json diff --git a/src/integration_tests/class_with_many_statements.rs b/src/integration_tests/class_with_many_statements.rs index 4f8b683..bd2352e 100644 --- a/src/integration_tests/class_with_many_statements.rs +++ b/src/integration_tests/class_with_many_statements.rs @@ -42,6 +42,294 @@ fn integration_class_with_many_statements() { let parsed_tree = parse(lexed_tokens, &mut panic_on_error); println!("Parsed Tree JSON: {}", serde_json::to_string(&parsed_tree).unwrap()); + let expected_tree: Box = + serde_json::from_str(r#"{ + "Script": { + "statements": [ + { + "ClassDeclaration": { + "modifiers": 10, + "name": "Foobar", + "inherits": [], + "statements": [ + { + "Var": { + "modifier": 0, + "var_type": { + "Type": { + "is_const": false, + "scope": null, + "datatype": { + "DataTypePrimType": { + "prim_type": "Int32" + } + }, + "modifiers": [] + } + }, + "identifier": "_a", + "assignment": null + } + }, + { + "Var": { + "modifier": 0, + "var_type": { + "Type": { + "is_const": false, + "scope": null, + "datatype": { + "DataTypePrimType": { + "prim_type": "Int32" + } + }, + "modifiers": [] + } + }, + "identifier": "_b", + "assignment": null + } + }, + { + "FuncDeclaration": { + "modifiers": 0, + "field_mod": null, + "is_destructor": false, + "is_constructor": true, + "returns_reference": false, + "return_type": { + "Type": { + "is_const": false, + "scope": null, + "datatype": { + "DataTypeIdentifier": { + "identifier": "Foobar" + } + }, + "modifiers": [] + } + }, + "name": "Foobar", + "param_list": { + "ParamList": { + "parameters": [ + { + "parameter_type": { + "Type": { + "is_const": false, + "scope": null, + "datatype": { + "DataTypePrimType": { + "prim_type": "Int32" + } + }, + "modifiers": [] + } + }, + "type_mod": null, + "identifier": "a", + "default": null + }, + { + "parameter_type": { + "Type": { + "is_const": false, + "scope": null, + "datatype": { + "DataTypePrimType": { + "prim_type": "Int32" + } + }, + "modifiers": [] + } + }, + "type_mod": null, + "identifier": "b", + "default": null + } + ] + } + }, + "is_const": false, + "func_attr": 0, + "block": { + "StatBlock": { + "statements": [ + { + "Assignment": { + "left": { + "VarAccess": { + "scope": null, + "identifier": "_a" + } + }, + "operator": "Assignment", + "right": { + "VarAccess": { + "scope": null, + "identifier": "a" + } + } + } + }, + { + "Assignment": { + "left": { + "VarAccess": { + "scope": null, + "identifier": "_b" + } + }, + "operator": "Assignment", + "right": { + "VarAccess": { + "scope": null, + "identifier": "b" + } + } + } + } + ] + } + } + } + }, + { + "FuncDeclaration": { + "modifiers": 0, + "field_mod": null, + "is_destructor": false, + "is_constructor": false, + "returns_reference": false, + "return_type": { + "Type": { + "is_const": false, + "scope": null, + "datatype": { + "DataTypePrimType": { + "prim_type": "Int32" + } + }, + "modifiers": [] + } + }, + "name": "GetA", + "param_list": { + "ParamList": { + "parameters": [] + } + }, + "is_const": false, + "func_attr": 0, + "block": { + "StatBlock": { + "statements": [ + { + "ReturnStatement": { + "expression": { + "VarAccess": { + "scope": null, + "identifier": "_a" + } + } + } + } + ] + } + } + } + }, + { + "FuncDeclaration": { + "modifiers": 0, + "field_mod": null, + "is_destructor": false, + "is_constructor": false, + "returns_reference": false, + "return_type": { + "Type": { + "is_const": false, + "scope": null, + "datatype": { + "DataTypePrimType": { + "prim_type": "Int32" + } + }, + "modifiers": [] + } + }, + "name": "Add", + "param_list": { + "ParamList": { + "parameters": [] + } + }, + "is_const": false, + "func_attr": 0, + "block": { + "StatBlock": { + "statements": [ + { + "ReturnStatement": { + "expression": { + "BinaryExpr": { + "left": { + "VarAccess": { + "scope": null, + "identifier": "_a" + } + }, + "operator": "Addition", + "right": { + "VarAccess": { + "scope": null, + "identifier": "_b" + } + } + } + } + } + } + ] + } + } + } + }, + { + "ClassDeclaration": { + "modifiers": 0, + "name": "Inner", + "inherits": [], + "statements": [ + { + "Var": { + "modifier": 0, + "var_type": { + "Type": { + "is_const": false, + "scope": null, + "datatype": { + "DataTypePrimType": { + "prim_type": "Int32" + } + }, + "modifiers": [] + } + }, + "identifier": "a", + "assignment": null + } + } + ] + } + } + ] + } + } + ] + } +}"#).unwrap(); + assert_eq!(parsed_tree, expected_tree); } // A substring of a script should never panic, even though it might be completely invalid. #[test] diff --git a/src/integration_tests/test_cases/class_with_many_statements/lexed_tokens.json b/src/integration_tests/test_cases/class_with_many_statements/lexed_tokens.json new file mode 100644 index 0000000..a3ad97e --- /dev/null +++ b/src/integration_tests/test_cases/class_with_many_statements/lexed_tokens.json @@ -0,0 +1,1310 @@ +[ + { + "token_type": "FinalKeyword", + "span": { + "start": 0, + "end": 5 + } + }, + { + "token_type": "WhiteSpace", + "span": { + "start": 5, + "end": 6 + } + }, + { + "token_type": "SharedKeyword", + "span": { + "start": 6, + "end": 12 + } + }, + { + "token_type": "WhiteSpace", + "span": { + "start": 12, + "end": 13 + } + }, + { + "token_type": "ClassKeyword", + "span": { + "start": 13, + "end": 18 + } + }, + { + "token_type": "WhiteSpace", + "span": { + "start": 18, + "end": 19 + } + }, + { + "token_type": { + "Identifier": "Foobar" + }, + "span": { + "start": 19, + "end": 25 + } + }, + { + "token_type": "WhiteSpace", + "span": { + "start": 25, + "end": 26 + } + }, + { + "token_type": "OpenCurlyBracket", + "span": { + "start": 26, + "end": 27 + } + }, + { + "token_type": "WhiteSpace", + "span": { + "start": 27, + "end": 28 + } + }, + { + "token_type": "WhiteSpace", + "span": { + "start": 28, + "end": 29 + } + }, + { + "token_type": "WhiteSpace", + "span": { + "start": 29, + "end": 30 + } + }, + { + "token_type": "WhiteSpace", + "span": { + "start": 30, + "end": 31 + } + }, + { + "token_type": "WhiteSpace", + "span": { + "start": 31, + "end": 32 + } + }, + { + "token_type": "IntKeyword", + "span": { + "start": 32, + "end": 35 + } + }, + { + "token_type": "WhiteSpace", + "span": { + "start": 35, + "end": 36 + } + }, + { + "token_type": { + "Identifier": "_a" + }, + "span": { + "start": 36, + "end": 38 + } + }, + { + "token_type": "Semicolon", + "span": { + "start": 38, + "end": 39 + } + }, + { + "token_type": "WhiteSpace", + "span": { + "start": 39, + "end": 40 + } + }, + { + "token_type": "WhiteSpace", + "span": { + "start": 40, + "end": 41 + } + }, + { + "token_type": "WhiteSpace", + "span": { + "start": 41, + "end": 42 + } + }, + { + "token_type": "WhiteSpace", + "span": { + "start": 42, + "end": 43 + } + }, + { + "token_type": "WhiteSpace", + "span": { + "start": 43, + "end": 44 + } + }, + { + "token_type": "IntKeyword", + "span": { + "start": 44, + "end": 47 + } + }, + { + "token_type": "WhiteSpace", + "span": { + "start": 47, + "end": 48 + } + }, + { + "token_type": { + "Identifier": "_b" + }, + "span": { + "start": 48, + "end": 50 + } + }, + { + "token_type": "Semicolon", + "span": { + "start": 50, + "end": 51 + } + }, + { + "token_type": "WhiteSpace", + "span": { + "start": 51, + "end": 52 + } + }, + { + "token_type": "WhiteSpace", + "span": { + "start": 52, + "end": 53 + } + }, + { + "token_type": "WhiteSpace", + "span": { + "start": 53, + "end": 54 + } + }, + { + "token_type": "WhiteSpace", + "span": { + "start": 54, + "end": 55 + } + }, + { + "token_type": "WhiteSpace", + "span": { + "start": 55, + "end": 56 + } + }, + { + "token_type": "WhiteSpace", + "span": { + "start": 56, + "end": 57 + } + }, + { + "token_type": { + "Identifier": "Foobar" + }, + "span": { + "start": 57, + "end": 63 + } + }, + { + "token_type": "OpenBracket", + "span": { + "start": 63, + "end": 64 + } + }, + { + "token_type": "IntKeyword", + "span": { + "start": 64, + "end": 67 + } + }, + { + "token_type": "WhiteSpace", + "span": { + "start": 67, + "end": 68 + } + }, + { + "token_type": { + "Identifier": "a" + }, + "span": { + "start": 68, + "end": 69 + } + }, + { + "token_type": "Comma", + "span": { + "start": 69, + "end": 70 + } + }, + { + "token_type": "WhiteSpace", + "span": { + "start": 70, + "end": 71 + } + }, + { + "token_type": "IntKeyword", + "span": { + "start": 71, + "end": 74 + } + }, + { + "token_type": "WhiteSpace", + "span": { + "start": 74, + "end": 75 + } + }, + { + "token_type": { + "Identifier": "b" + }, + "span": { + "start": 75, + "end": 76 + } + }, + { + "token_type": "CloseBracket", + "span": { + "start": 76, + "end": 77 + } + }, + { + "token_type": "WhiteSpace", + "span": { + "start": 77, + "end": 78 + } + }, + { + "token_type": "OpenCurlyBracket", + "span": { + "start": 78, + "end": 79 + } + }, + { + "token_type": "WhiteSpace", + "span": { + "start": 79, + "end": 80 + } + }, + { + "token_type": "WhiteSpace", + "span": { + "start": 80, + "end": 81 + } + }, + { + "token_type": "WhiteSpace", + "span": { + "start": 81, + "end": 82 + } + }, + { + "token_type": "WhiteSpace", + "span": { + "start": 82, + "end": 83 + } + }, + { + "token_type": "WhiteSpace", + "span": { + "start": 83, + "end": 84 + } + }, + { + "token_type": "WhiteSpace", + "span": { + "start": 84, + "end": 85 + } + }, + { + "token_type": "WhiteSpace", + "span": { + "start": 85, + "end": 86 + } + }, + { + "token_type": "WhiteSpace", + "span": { + "start": 86, + "end": 87 + } + }, + { + "token_type": "WhiteSpace", + "span": { + "start": 87, + "end": 88 + } + }, + { + "token_type": { + "Identifier": "_a" + }, + "span": { + "start": 88, + "end": 90 + } + }, + { + "token_type": "WhiteSpace", + "span": { + "start": 90, + "end": 91 + } + }, + { + "token_type": "Equals", + "span": { + "start": 91, + "end": 92 + } + }, + { + "token_type": "WhiteSpace", + "span": { + "start": 92, + "end": 93 + } + }, + { + "token_type": { + "Identifier": "a" + }, + "span": { + "start": 93, + "end": 94 + } + }, + { + "token_type": "Semicolon", + "span": { + "start": 94, + "end": 95 + } + }, + { + "token_type": "WhiteSpace", + "span": { + "start": 95, + "end": 96 + } + }, + { + "token_type": "WhiteSpace", + "span": { + "start": 96, + "end": 97 + } + }, + { + "token_type": "WhiteSpace", + "span": { + "start": 97, + "end": 98 + } + }, + { + "token_type": "WhiteSpace", + "span": { + "start": 98, + "end": 99 + } + }, + { + "token_type": "WhiteSpace", + "span": { + "start": 99, + "end": 100 + } + }, + { + "token_type": "WhiteSpace", + "span": { + "start": 100, + "end": 101 + } + }, + { + "token_type": "WhiteSpace", + "span": { + "start": 101, + "end": 102 + } + }, + { + "token_type": "WhiteSpace", + "span": { + "start": 102, + "end": 103 + } + }, + { + "token_type": "WhiteSpace", + "span": { + "start": 103, + "end": 104 + } + }, + { + "token_type": { + "Identifier": "_b" + }, + "span": { + "start": 104, + "end": 106 + } + }, + { + "token_type": "WhiteSpace", + "span": { + "start": 106, + "end": 107 + } + }, + { + "token_type": "Equals", + "span": { + "start": 107, + "end": 108 + } + }, + { + "token_type": "WhiteSpace", + "span": { + "start": 108, + "end": 109 + } + }, + { + "token_type": { + "Identifier": "b" + }, + "span": { + "start": 109, + "end": 110 + } + }, + { + "token_type": "Semicolon", + "span": { + "start": 110, + "end": 111 + } + }, + { + "token_type": "WhiteSpace", + "span": { + "start": 111, + "end": 112 + } + }, + { + "token_type": "WhiteSpace", + "span": { + "start": 112, + "end": 113 + } + }, + { + "token_type": "WhiteSpace", + "span": { + "start": 113, + "end": 114 + } + }, + { + "token_type": "WhiteSpace", + "span": { + "start": 114, + "end": 115 + } + }, + { + "token_type": "WhiteSpace", + "span": { + "start": 115, + "end": 116 + } + }, + { + "token_type": "CloseCurlyBracket", + "span": { + "start": 116, + "end": 117 + } + }, + { + "token_type": "WhiteSpace", + "span": { + "start": 117, + "end": 118 + } + }, + { + "token_type": "WhiteSpace", + "span": { + "start": 118, + "end": 119 + } + }, + { + "token_type": "WhiteSpace", + "span": { + "start": 119, + "end": 120 + } + }, + { + "token_type": "WhiteSpace", + "span": { + "start": 120, + "end": 121 + } + }, + { + "token_type": "WhiteSpace", + "span": { + "start": 121, + "end": 122 + } + }, + { + "token_type": "WhiteSpace", + "span": { + "start": 122, + "end": 123 + } + }, + { + "token_type": "IntKeyword", + "span": { + "start": 123, + "end": 126 + } + }, + { + "token_type": "WhiteSpace", + "span": { + "start": 126, + "end": 127 + } + }, + { + "token_type": { + "Identifier": "GetA" + }, + "span": { + "start": 127, + "end": 131 + } + }, + { + "token_type": "OpenBracket", + "span": { + "start": 131, + "end": 132 + } + }, + { + "token_type": "CloseBracket", + "span": { + "start": 132, + "end": 133 + } + }, + { + "token_type": "OpenCurlyBracket", + "span": { + "start": 133, + "end": 134 + } + }, + { + "token_type": "WhiteSpace", + "span": { + "start": 134, + "end": 135 + } + }, + { + "token_type": "WhiteSpace", + "span": { + "start": 135, + "end": 136 + } + }, + { + "token_type": "WhiteSpace", + "span": { + "start": 136, + "end": 137 + } + }, + { + "token_type": "WhiteSpace", + "span": { + "start": 137, + "end": 138 + } + }, + { + "token_type": "WhiteSpace", + "span": { + "start": 138, + "end": 139 + } + }, + { + "token_type": "WhiteSpace", + "span": { + "start": 139, + "end": 140 + } + }, + { + "token_type": "WhiteSpace", + "span": { + "start": 140, + "end": 141 + } + }, + { + "token_type": "WhiteSpace", + "span": { + "start": 141, + "end": 142 + } + }, + { + "token_type": "WhiteSpace", + "span": { + "start": 142, + "end": 143 + } + }, + { + "token_type": "ReturnKeyword", + "span": { + "start": 143, + "end": 149 + } + }, + { + "token_type": "WhiteSpace", + "span": { + "start": 149, + "end": 150 + } + }, + { + "token_type": { + "Identifier": "_a" + }, + "span": { + "start": 150, + "end": 152 + } + }, + { + "token_type": "Semicolon", + "span": { + "start": 152, + "end": 153 + } + }, + { + "token_type": "WhiteSpace", + "span": { + "start": 153, + "end": 154 + } + }, + { + "token_type": "WhiteSpace", + "span": { + "start": 154, + "end": 155 + } + }, + { + "token_type": "WhiteSpace", + "span": { + "start": 155, + "end": 156 + } + }, + { + "token_type": "WhiteSpace", + "span": { + "start": 156, + "end": 157 + } + }, + { + "token_type": "WhiteSpace", + "span": { + "start": 157, + "end": 158 + } + }, + { + "token_type": "CloseCurlyBracket", + "span": { + "start": 158, + "end": 159 + } + }, + { + "token_type": "WhiteSpace", + "span": { + "start": 159, + "end": 160 + } + }, + { + "token_type": "WhiteSpace", + "span": { + "start": 160, + "end": 161 + } + }, + { + "token_type": "WhiteSpace", + "span": { + "start": 161, + "end": 162 + } + }, + { + "token_type": "WhiteSpace", + "span": { + "start": 162, + "end": 163 + } + }, + { + "token_type": "WhiteSpace", + "span": { + "start": 163, + "end": 164 + } + }, + { + "token_type": "WhiteSpace", + "span": { + "start": 164, + "end": 165 + } + }, + { + "token_type": "IntKeyword", + "span": { + "start": 165, + "end": 168 + } + }, + { + "token_type": "WhiteSpace", + "span": { + "start": 168, + "end": 169 + } + }, + { + "token_type": { + "Identifier": "Add" + }, + "span": { + "start": 169, + "end": 172 + } + }, + { + "token_type": "OpenBracket", + "span": { + "start": 172, + "end": 173 + } + }, + { + "token_type": "CloseBracket", + "span": { + "start": 173, + "end": 174 + } + }, + { + "token_type": "WhiteSpace", + "span": { + "start": 174, + "end": 175 + } + }, + { + "token_type": "OpenCurlyBracket", + "span": { + "start": 175, + "end": 176 + } + }, + { + "token_type": "WhiteSpace", + "span": { + "start": 176, + "end": 177 + } + }, + { + "token_type": "WhiteSpace", + "span": { + "start": 177, + "end": 178 + } + }, + { + "token_type": "WhiteSpace", + "span": { + "start": 178, + "end": 179 + } + }, + { + "token_type": "WhiteSpace", + "span": { + "start": 179, + "end": 180 + } + }, + { + "token_type": "WhiteSpace", + "span": { + "start": 180, + "end": 181 + } + }, + { + "token_type": "WhiteSpace", + "span": { + "start": 181, + "end": 182 + } + }, + { + "token_type": "WhiteSpace", + "span": { + "start": 182, + "end": 183 + } + }, + { + "token_type": "WhiteSpace", + "span": { + "start": 183, + "end": 184 + } + }, + { + "token_type": "WhiteSpace", + "span": { + "start": 184, + "end": 185 + } + }, + { + "token_type": "ReturnKeyword", + "span": { + "start": 185, + "end": 191 + } + }, + { + "token_type": "WhiteSpace", + "span": { + "start": 191, + "end": 192 + } + }, + { + "token_type": { + "Identifier": "_a" + }, + "span": { + "start": 192, + "end": 194 + } + }, + { + "token_type": "WhiteSpace", + "span": { + "start": 194, + "end": 195 + } + }, + { + "token_type": "Plus", + "span": { + "start": 195, + "end": 196 + } + }, + { + "token_type": "WhiteSpace", + "span": { + "start": 196, + "end": 197 + } + }, + { + "token_type": { + "Identifier": "_b" + }, + "span": { + "start": 197, + "end": 199 + } + }, + { + "token_type": "Semicolon", + "span": { + "start": 199, + "end": 200 + } + }, + { + "token_type": "WhiteSpace", + "span": { + "start": 200, + "end": 201 + } + }, + { + "token_type": "WhiteSpace", + "span": { + "start": 201, + "end": 202 + } + }, + { + "token_type": "WhiteSpace", + "span": { + "start": 202, + "end": 203 + } + }, + { + "token_type": "WhiteSpace", + "span": { + "start": 203, + "end": 204 + } + }, + { + "token_type": "WhiteSpace", + "span": { + "start": 204, + "end": 205 + } + }, + { + "token_type": "CloseCurlyBracket", + "span": { + "start": 205, + "end": 206 + } + }, + { + "token_type": "WhiteSpace", + "span": { + "start": 206, + "end": 207 + } + }, + { + "token_type": "WhiteSpace", + "span": { + "start": 207, + "end": 208 + } + }, + { + "token_type": "WhiteSpace", + "span": { + "start": 208, + "end": 209 + } + }, + { + "token_type": "WhiteSpace", + "span": { + "start": 209, + "end": 210 + } + }, + { + "token_type": "WhiteSpace", + "span": { + "start": 210, + "end": 211 + } + }, + { + "token_type": "WhiteSpace", + "span": { + "start": 211, + "end": 212 + } + }, + { + "token_type": "ClassKeyword", + "span": { + "start": 212, + "end": 217 + } + }, + { + "token_type": "WhiteSpace", + "span": { + "start": 217, + "end": 218 + } + }, + { + "token_type": { + "Identifier": "Inner" + }, + "span": { + "start": 218, + "end": 223 + } + }, + { + "token_type": "WhiteSpace", + "span": { + "start": 223, + "end": 224 + } + }, + { + "token_type": "OpenCurlyBracket", + "span": { + "start": 224, + "end": 225 + } + }, + { + "token_type": "WhiteSpace", + "span": { + "start": 225, + "end": 226 + } + }, + { + "token_type": "WhiteSpace", + "span": { + "start": 226, + "end": 227 + } + }, + { + "token_type": "WhiteSpace", + "span": { + "start": 227, + "end": 228 + } + }, + { + "token_type": "WhiteSpace", + "span": { + "start": 228, + "end": 229 + } + }, + { + "token_type": "WhiteSpace", + "span": { + "start": 229, + "end": 230 + } + }, + { + "token_type": "WhiteSpace", + "span": { + "start": 230, + "end": 231 + } + }, + { + "token_type": "WhiteSpace", + "span": { + "start": 231, + "end": 232 + } + }, + { + "token_type": "WhiteSpace", + "span": { + "start": 232, + "end": 233 + } + }, + { + "token_type": "WhiteSpace", + "span": { + "start": 233, + "end": 234 + } + }, + { + "token_type": "IntKeyword", + "span": { + "start": 234, + "end": 237 + } + }, + { + "token_type": "WhiteSpace", + "span": { + "start": 237, + "end": 238 + } + }, + { + "token_type": { + "Identifier": "a" + }, + "span": { + "start": 238, + "end": 239 + } + }, + { + "token_type": "Semicolon", + "span": { + "start": 239, + "end": 240 + } + }, + { + "token_type": "WhiteSpace", + "span": { + "start": 240, + "end": 241 + } + }, + { + "token_type": "WhiteSpace", + "span": { + "start": 241, + "end": 242 + } + }, + { + "token_type": "WhiteSpace", + "span": { + "start": 242, + "end": 243 + } + }, + { + "token_type": "WhiteSpace", + "span": { + "start": 243, + "end": 244 + } + }, + { + "token_type": "WhiteSpace", + "span": { + "start": 244, + "end": 245 + } + }, + { + "token_type": "CloseCurlyBracket", + "span": { + "start": 245, + "end": 246 + } + }, + { + "token_type": "WhiteSpace", + "span": { + "start": 246, + "end": 247 + } + }, + { + "token_type": "CloseCurlyBracket", + "span": { + "start": 247, + "end": 248 + } + }, + { + "token_type": "EndOfFile", + "span": { + "start": 248, + "end": 248 + } + } +] \ No newline at end of file diff --git a/src/integration_tests/test_cases/class_with_many_statements/parsed_tree.json b/src/integration_tests/test_cases/class_with_many_statements/parsed_tree.json new file mode 100644 index 0000000..bfafabb --- /dev/null +++ b/src/integration_tests/test_cases/class_with_many_statements/parsed_tree.json @@ -0,0 +1,286 @@ +{ + "Script": { + "statements": [ + { + "ClassDeclaration": { + "modifiers": 10, + "name": "Foobar", + "inherits": [], + "statements": [ + { + "Var": { + "modifier": 0, + "var_type": { + "Type": { + "is_const": false, + "scope": null, + "datatype": { + "DataTypePrimType": { + "prim_type": "Int32" + } + }, + "modifiers": [] + } + }, + "identifier": "_a", + "assignment": null + } + }, + { + "Var": { + "modifier": 0, + "var_type": { + "Type": { + "is_const": false, + "scope": null, + "datatype": { + "DataTypePrimType": { + "prim_type": "Int32" + } + }, + "modifiers": [] + } + }, + "identifier": "_b", + "assignment": null + } + }, + { + "FuncDeclaration": { + "modifiers": 0, + "field_mod": null, + "is_destructor": false, + "is_constructor": true, + "returns_reference": false, + "return_type": { + "Type": { + "is_const": false, + "scope": null, + "datatype": { + "DataTypeIdentifier": { + "identifier": "Foobar" + } + }, + "modifiers": [] + } + }, + "name": "Foobar", + "param_list": { + "ParamList": { + "parameters": [ + { + "parameter_type": { + "Type": { + "is_const": false, + "scope": null, + "datatype": { + "DataTypePrimType": { + "prim_type": "Int32" + } + }, + "modifiers": [] + } + }, + "type_mod": null, + "identifier": "a", + "default": null + }, + { + "parameter_type": { + "Type": { + "is_const": false, + "scope": null, + "datatype": { + "DataTypePrimType": { + "prim_type": "Int32" + } + }, + "modifiers": [] + } + }, + "type_mod": null, + "identifier": "b", + "default": null + } + ] + } + }, + "is_const": false, + "func_attr": 0, + "block": { + "StatBlock": { + "statements": [ + { + "Assignment": { + "left": { + "VarAccess": { + "scope": null, + "identifier": "_a" + } + }, + "operator": "Assignment", + "right": { + "VarAccess": { + "scope": null, + "identifier": "a" + } + } + } + }, + { + "Assignment": { + "left": { + "VarAccess": { + "scope": null, + "identifier": "_b" + } + }, + "operator": "Assignment", + "right": { + "VarAccess": { + "scope": null, + "identifier": "b" + } + } + } + } + ] + } + } + } + }, + { + "FuncDeclaration": { + "modifiers": 0, + "field_mod": null, + "is_destructor": false, + "is_constructor": false, + "returns_reference": false, + "return_type": { + "Type": { + "is_const": false, + "scope": null, + "datatype": { + "DataTypePrimType": { + "prim_type": "Int32" + } + }, + "modifiers": [] + } + }, + "name": "GetA", + "param_list": { + "ParamList": { + "parameters": [] + } + }, + "is_const": false, + "func_attr": 0, + "block": { + "StatBlock": { + "statements": [ + { + "ReturnStatement": { + "expression": { + "VarAccess": { + "scope": null, + "identifier": "_a" + } + } + } + } + ] + } + } + } + }, + { + "FuncDeclaration": { + "modifiers": 0, + "field_mod": null, + "is_destructor": false, + "is_constructor": false, + "returns_reference": false, + "return_type": { + "Type": { + "is_const": false, + "scope": null, + "datatype": { + "DataTypePrimType": { + "prim_type": "Int32" + } + }, + "modifiers": [] + } + }, + "name": "Add", + "param_list": { + "ParamList": { + "parameters": [] + } + }, + "is_const": false, + "func_attr": 0, + "block": { + "StatBlock": { + "statements": [ + { + "ReturnStatement": { + "expression": { + "BinaryExpr": { + "left": { + "VarAccess": { + "scope": null, + "identifier": "_a" + } + }, + "operator": "Addition", + "right": { + "VarAccess": { + "scope": null, + "identifier": "_b" + } + } + } + } + } + } + ] + } + } + } + }, + { + "ClassDeclaration": { + "modifiers": 0, + "name": "Inner", + "inherits": [], + "statements": [ + { + "Var": { + "modifier": 0, + "var_type": { + "Type": { + "is_const": false, + "scope": null, + "datatype": { + "DataTypePrimType": { + "prim_type": "Int32" + } + }, + "modifiers": [] + } + }, + "identifier": "a", + "assignment": null + } + } + ] + } + } + ] + } + } + ] + } +} \ No newline at end of file