jaclang 0.0.5__py3-none-any.whl → 0.0.8__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of jaclang might be problematic. Click here for more details.
- jaclang/__init__.py +2 -1
- jaclang/cli/__jac_gen__/__init__.py +0 -0
- jaclang/cli/__jac_gen__/cli.py +175 -0
- jaclang/cli/__jac_gen__/cmds.py +132 -0
- jaclang/cli/cli.jac +2 -2
- jaclang/cli/cmds.jac +8 -2
- jaclang/cli/impl/__jac_gen__/__init__.py +0 -0
- jaclang/cli/impl/__jac_gen__/cli_impl.py +16 -0
- jaclang/cli/impl/__jac_gen__/cmds_impl.py +26 -0
- jaclang/cli/impl/cli_impl.jac +25 -8
- jaclang/cli/impl/cmds_impl.jac +35 -6
- jaclang/core/__jac_gen__/__init__.py +0 -0
- jaclang/core/__jac_gen__/primitives.py +567 -0
- jaclang/core/impl/__jac_gen__/__init__.py +0 -0
- jaclang/core/impl/__jac_gen__/arch_impl.py +24 -0
- jaclang/core/impl/__jac_gen__/element_impl.py +26 -0
- jaclang/core/impl/__jac_gen__/exec_ctx_impl.py +12 -0
- jaclang/core/impl/__jac_gen__/memory_impl.py +14 -0
- jaclang/core/impl/element_impl.jac +3 -3
- jaclang/core/impl/exec_ctx_impl.jac +3 -6
- jaclang/core/primitives.jac +4 -3
- jaclang/jac/absyntree.py +555 -180
- jaclang/jac/constant.py +6 -0
- jaclang/jac/importer.py +34 -56
- jaclang/jac/langserve.py +26 -0
- jaclang/jac/lexer.py +35 -3
- jaclang/jac/parser.py +146 -115
- jaclang/jac/passes/blue/__init__.py +8 -3
- jaclang/jac/passes/blue/ast_build_pass.py +454 -305
- jaclang/jac/passes/blue/blue_pygen_pass.py +112 -74
- jaclang/jac/passes/blue/decl_def_match_pass.py +49 -277
- jaclang/jac/passes/blue/import_pass.py +1 -1
- jaclang/jac/passes/blue/pyout_pass.py +74 -0
- jaclang/jac/passes/blue/semantic_check_pass.py +37 -0
- jaclang/jac/passes/blue/sym_tab_build_pass.py +1045 -0
- jaclang/jac/passes/blue/tests/test_ast_build_pass.py +2 -2
- jaclang/jac/passes/blue/tests/test_blue_pygen_pass.py +9 -28
- jaclang/jac/passes/blue/tests/test_decl_def_match_pass.py +13 -22
- jaclang/jac/passes/blue/tests/test_sym_tab_build_pass.py +22 -0
- jaclang/jac/passes/ir_pass.py +8 -6
- jaclang/jac/passes/purple/__jac_gen__/__init__.py +0 -0
- jaclang/jac/passes/purple/__jac_gen__/analyze_pass.py +37 -0
- jaclang/jac/passes/purple/__jac_gen__/purple_pygen_pass.py +305 -0
- jaclang/jac/passes/purple/impl/__jac_gen__/__init__.py +0 -0
- jaclang/jac/passes/purple/impl/__jac_gen__/purple_pygen_pass_impl.py +23 -0
- jaclang/jac/passes/purple/impl/purple_pygen_pass_impl.jac +2 -5
- jaclang/jac/symtable.py +154 -0
- jaclang/jac/tests/fixtures/__jac_gen__/__init__.py +0 -0
- jaclang/jac/tests/fixtures/__jac_gen__/hello_world.py +16 -0
- jaclang/jac/tests/fixtures/fam.jac +7 -8
- jaclang/jac/tests/fixtures/mod_doc_test.jac +1 -0
- jaclang/jac/tests/test_parser.py +8 -0
- jaclang/jac/transform.py +41 -14
- jaclang/jac/transpiler.py +18 -9
- jaclang/utils/fstring_parser.py +2 -2
- jaclang/utils/helpers.py +41 -0
- jaclang/utils/lang_tools.py +12 -2
- jaclang/utils/test.py +41 -0
- jaclang/vendor/__init__.py +1 -0
- jaclang/vendor/pygls/__init__.py +25 -0
- jaclang/vendor/pygls/capabilities.py +502 -0
- jaclang/vendor/pygls/client.py +176 -0
- jaclang/vendor/pygls/constants.py +26 -0
- jaclang/vendor/pygls/exceptions.py +220 -0
- jaclang/vendor/pygls/feature_manager.py +241 -0
- jaclang/vendor/pygls/lsp/__init__.py +139 -0
- jaclang/vendor/pygls/lsp/client.py +2224 -0
- jaclang/vendor/pygls/lsprotocol/__init__.py +2 -0
- jaclang/vendor/pygls/lsprotocol/_hooks.py +1233 -0
- jaclang/vendor/pygls/lsprotocol/converters.py +17 -0
- jaclang/vendor/pygls/lsprotocol/types.py +12820 -0
- jaclang/vendor/pygls/lsprotocol/validators.py +47 -0
- jaclang/vendor/pygls/progress.py +79 -0
- jaclang/vendor/pygls/protocol.py +1184 -0
- jaclang/vendor/pygls/server.py +620 -0
- jaclang/vendor/pygls/uris.py +184 -0
- jaclang/vendor/pygls/workspace/__init__.py +81 -0
- jaclang/vendor/pygls/workspace/position.py +204 -0
- jaclang/vendor/pygls/workspace/text_document.py +234 -0
- jaclang/vendor/pygls/workspace/workspace.py +311 -0
- {jaclang-0.0.5.dist-info → jaclang-0.0.8.dist-info}/METADATA +1 -1
- jaclang-0.0.8.dist-info/RECORD +118 -0
- jaclang/core/jaclang.jac +0 -62
- jaclang/jac/passes/blue/tests/test_type_analyze_pass.py +0 -53
- jaclang/jac/passes/blue/type_analyze_pass.py +0 -728
- jaclang/jac/sym_table.py +0 -127
- jaclang-0.0.5.dist-info/RECORD +0 -73
- /jaclang/{utils → vendor}/sly/__init__.py +0 -0
- /jaclang/{utils → vendor}/sly/docparse.py +0 -0
- /jaclang/{utils → vendor}/sly/lex.py +0 -0
- /jaclang/{utils → vendor}/sly/yacc.py +0 -0
- {jaclang-0.0.5.dist-info → jaclang-0.0.8.dist-info}/WHEEL +0 -0
- {jaclang-0.0.5.dist-info → jaclang-0.0.8.dist-info}/entry_points.txt +0 -0
- {jaclang-0.0.5.dist-info → jaclang-0.0.8.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,1045 @@
|
|
|
1
|
+
"""Ast build pass for Jaseci Ast."""
|
|
2
|
+
from typing import Optional
|
|
3
|
+
|
|
4
|
+
import jaclang.jac.absyntree as ast
|
|
5
|
+
from jaclang.jac.passes import Pass
|
|
6
|
+
from jaclang.jac.symtable import SymbolHitType as Sht, SymbolTable, SymbolType as St
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
class SymTabBuildPass(Pass):
|
|
10
|
+
"""Jac Ast build pass."""
|
|
11
|
+
|
|
12
|
+
def before_pass(self) -> None:
|
|
13
|
+
"""Before pass."""
|
|
14
|
+
self.cur_sym_tab: list[SymbolTable] = []
|
|
15
|
+
|
|
16
|
+
def push_scope(self, name: str, key_node: ast.AstNode, fresh: bool = False) -> None:
|
|
17
|
+
"""Push scope."""
|
|
18
|
+
if fresh:
|
|
19
|
+
self.cur_sym_tab.append(SymbolTable(name, key_node))
|
|
20
|
+
else:
|
|
21
|
+
self.cur_sym_tab.append(self.cur_scope().push_scope(name, key_node))
|
|
22
|
+
|
|
23
|
+
def pop_scope(self) -> None:
|
|
24
|
+
"""Pop scope."""
|
|
25
|
+
self.cur_sym_tab.pop()
|
|
26
|
+
|
|
27
|
+
def cur_scope(self) -> SymbolTable:
|
|
28
|
+
"""Return current scope."""
|
|
29
|
+
return self.cur_sym_tab[-1]
|
|
30
|
+
|
|
31
|
+
def sync_node_to_scope(self, node: ast.AstNode) -> None:
|
|
32
|
+
"""Sync node to scope."""
|
|
33
|
+
node.sym_tab = self.cur_scope()
|
|
34
|
+
|
|
35
|
+
def already_declared_err(
|
|
36
|
+
self,
|
|
37
|
+
name: str,
|
|
38
|
+
typ: str,
|
|
39
|
+
original: ast.AstNode,
|
|
40
|
+
other_nodes: Optional[list[ast.AstNode]] = None,
|
|
41
|
+
warn_only: bool = False,
|
|
42
|
+
) -> None:
|
|
43
|
+
"""Already declared error."""
|
|
44
|
+
mod_path = original.mod_link.rel_mod_path if original.mod_link else self.ice()
|
|
45
|
+
err_msg = (
|
|
46
|
+
f"Name used for {typ} '{name}' already declared at "
|
|
47
|
+
f"{mod_path}, line {original.line}"
|
|
48
|
+
)
|
|
49
|
+
if other_nodes:
|
|
50
|
+
for i in other_nodes:
|
|
51
|
+
mod_path = i.mod_link.rel_mod_path if i.mod_link else self.ice()
|
|
52
|
+
err_msg += f", also see {mod_path}, line {i.line}"
|
|
53
|
+
self.warning(err_msg)
|
|
54
|
+
|
|
55
|
+
def enter_module(self, node: ast.Module) -> None:
|
|
56
|
+
"""Sub objects.
|
|
57
|
+
|
|
58
|
+
name: str,
|
|
59
|
+
doc: Token,
|
|
60
|
+
body: Optional['Elements'],
|
|
61
|
+
mod_path: str,
|
|
62
|
+
rel_mod_path: str,
|
|
63
|
+
is_imported: bool,
|
|
64
|
+
"""
|
|
65
|
+
self.push_scope(node.name, node, fresh=True)
|
|
66
|
+
self.sync_node_to_scope(node)
|
|
67
|
+
|
|
68
|
+
def exit_module(self, node: ast.Module) -> None:
|
|
69
|
+
"""Sub objects.
|
|
70
|
+
|
|
71
|
+
name: str,
|
|
72
|
+
doc: Token,
|
|
73
|
+
body: Optional['Elements'],
|
|
74
|
+
mod_path: str,
|
|
75
|
+
rel_mod_path: str,
|
|
76
|
+
is_imported: bool,
|
|
77
|
+
"""
|
|
78
|
+
self.pop_scope()
|
|
79
|
+
|
|
80
|
+
def enter_elements(self, node: ast.Elements) -> None:
|
|
81
|
+
"""Sub objects.
|
|
82
|
+
|
|
83
|
+
elements: list[GlobalVars | Test | ModuleCode | Import | Architype | Ability],
|
|
84
|
+
"""
|
|
85
|
+
self.sync_node_to_scope(node)
|
|
86
|
+
|
|
87
|
+
def enter_global_vars(self, node: ast.GlobalVars) -> None:
|
|
88
|
+
"""Sub objects.
|
|
89
|
+
|
|
90
|
+
doc: Optional['Token'],
|
|
91
|
+
access: Optional[Token],
|
|
92
|
+
assignments: 'AssignmentList',
|
|
93
|
+
is_frozen: bool,
|
|
94
|
+
"""
|
|
95
|
+
for i in self.get_all_sub_nodes(node, ast.Assignment):
|
|
96
|
+
if not isinstance(i.target, ast.Name):
|
|
97
|
+
self.ice()
|
|
98
|
+
elif collide := self.cur_scope().insert(
|
|
99
|
+
name=i.target.value,
|
|
100
|
+
sym_type=St.VAR,
|
|
101
|
+
sym_hit=Sht.DECL_DEFN,
|
|
102
|
+
node=i,
|
|
103
|
+
single=True,
|
|
104
|
+
):
|
|
105
|
+
self.already_declared_err(i.target.value, "global var", collide)
|
|
106
|
+
self.sync_node_to_scope(node)
|
|
107
|
+
|
|
108
|
+
def enter_test(self, node: ast.Test) -> None:
|
|
109
|
+
"""Sub objects.
|
|
110
|
+
|
|
111
|
+
name: Name,
|
|
112
|
+
doc: Optional[Token],
|
|
113
|
+
description: Token,
|
|
114
|
+
body: CodeBlock,
|
|
115
|
+
"""
|
|
116
|
+
if node.name and (
|
|
117
|
+
collide := self.cur_scope().insert(
|
|
118
|
+
name=node.name.value,
|
|
119
|
+
sym_type=St.ABILITY,
|
|
120
|
+
sym_hit=Sht.DECL_DEFN,
|
|
121
|
+
node=node,
|
|
122
|
+
single=True,
|
|
123
|
+
)
|
|
124
|
+
):
|
|
125
|
+
self.already_declared_err(node.name.value, "test", collide)
|
|
126
|
+
self.push_scope(node.name.value, node)
|
|
127
|
+
self.sync_node_to_scope(node)
|
|
128
|
+
|
|
129
|
+
def exit_test(self, node: ast.Test) -> None:
|
|
130
|
+
"""Sub objects.
|
|
131
|
+
|
|
132
|
+
name: Name,
|
|
133
|
+
doc: Optional[Token],
|
|
134
|
+
description: Token,
|
|
135
|
+
body: CodeBlock,
|
|
136
|
+
"""
|
|
137
|
+
self.pop_scope()
|
|
138
|
+
|
|
139
|
+
def enter_module_code(self, node: ast.ModuleCode) -> None:
|
|
140
|
+
"""Sub objects.
|
|
141
|
+
|
|
142
|
+
doc: Optional[Token],
|
|
143
|
+
name: Optional[Name],
|
|
144
|
+
body: CodeBlock,
|
|
145
|
+
"""
|
|
146
|
+
self.push_scope("module_code", node)
|
|
147
|
+
self.sync_node_to_scope(node)
|
|
148
|
+
|
|
149
|
+
def exit_module_code(self, node: ast.ModuleCode) -> None:
|
|
150
|
+
"""Sub objects.
|
|
151
|
+
|
|
152
|
+
doc: Optional[Token],
|
|
153
|
+
body: 'CodeBlock',
|
|
154
|
+
"""
|
|
155
|
+
self.pop_scope()
|
|
156
|
+
|
|
157
|
+
def enter_py_inline_code(self, node: ast.PyInlineCode) -> None:
|
|
158
|
+
"""Sub objects.
|
|
159
|
+
|
|
160
|
+
code: Token,
|
|
161
|
+
"""
|
|
162
|
+
self.sync_node_to_scope(node)
|
|
163
|
+
|
|
164
|
+
def enter_import(self, node: ast.Import) -> None:
|
|
165
|
+
"""Sub objects.
|
|
166
|
+
|
|
167
|
+
lang: Name,
|
|
168
|
+
path: ModulePath,
|
|
169
|
+
alias: Optional[Name],
|
|
170
|
+
items: Optional[ModuleItems],
|
|
171
|
+
is_absorb: bool,
|
|
172
|
+
sub_module: Optional[Module],
|
|
173
|
+
"""
|
|
174
|
+
if node.items:
|
|
175
|
+
for i in node.items.items:
|
|
176
|
+
name = i.alias.value if i.alias else i.name.value
|
|
177
|
+
if collide := self.cur_scope().insert(
|
|
178
|
+
name=name,
|
|
179
|
+
sym_type=St.VAR,
|
|
180
|
+
sym_hit=Sht.DECL_DEFN,
|
|
181
|
+
node=node,
|
|
182
|
+
single=True,
|
|
183
|
+
):
|
|
184
|
+
self.already_declared_err(name, "import item", collide)
|
|
185
|
+
self.sync_node_to_scope(node)
|
|
186
|
+
|
|
187
|
+
def exit_import(self, node: ast.Import) -> None:
|
|
188
|
+
"""Sub objects.
|
|
189
|
+
|
|
190
|
+
lang: Name,
|
|
191
|
+
path: ModulePath,
|
|
192
|
+
alias: Optional[Name],
|
|
193
|
+
items: Optional[ModuleItems],
|
|
194
|
+
is_absorb: bool,
|
|
195
|
+
sub_module: Optional[Module],
|
|
196
|
+
"""
|
|
197
|
+
if node.is_absorb:
|
|
198
|
+
if not node.sub_module or not node.sub_module.sym_tab:
|
|
199
|
+
self.error(
|
|
200
|
+
f"Module {node.path.path_str} not found to include *, or ICE occurred!"
|
|
201
|
+
)
|
|
202
|
+
else:
|
|
203
|
+
for k, v in node.sub_module.sym_tab.tab.items():
|
|
204
|
+
if collide := self.cur_scope().insert(
|
|
205
|
+
name=k,
|
|
206
|
+
sym_type=v.sym_type,
|
|
207
|
+
sym_hit=Sht.DECL_DEFN
|
|
208
|
+
if (v.decl and len(v.defn))
|
|
209
|
+
else Sht.DECL
|
|
210
|
+
if v.decl
|
|
211
|
+
else Sht.DEFN,
|
|
212
|
+
node=v.decl if v.decl else v.defn[-1],
|
|
213
|
+
single=True,
|
|
214
|
+
):
|
|
215
|
+
other_node = (
|
|
216
|
+
v.decl if v.decl else v.defn[-1] if len(v.defn) else None
|
|
217
|
+
)
|
|
218
|
+
if other_node:
|
|
219
|
+
self.already_declared_err(
|
|
220
|
+
k, "include item", collide, [other_node]
|
|
221
|
+
)
|
|
222
|
+
else:
|
|
223
|
+
self.already_declared_err(k, "include item", collide)
|
|
224
|
+
self.sync_node_to_scope(node)
|
|
225
|
+
|
|
226
|
+
def enter_module_path(self, node: ast.ModulePath) -> None:
|
|
227
|
+
"""Sub objects.
|
|
228
|
+
|
|
229
|
+
path: list[Token],
|
|
230
|
+
"""
|
|
231
|
+
self.sync_node_to_scope(node)
|
|
232
|
+
|
|
233
|
+
def enter_module_item(self, node: ast.ModuleItem) -> None:
|
|
234
|
+
"""Sub objects.
|
|
235
|
+
|
|
236
|
+
name: Name,
|
|
237
|
+
alias: Optional[Token],
|
|
238
|
+
body: Optional[AstNode],
|
|
239
|
+
"""
|
|
240
|
+
self.sync_node_to_scope(node)
|
|
241
|
+
|
|
242
|
+
def enter_module_items(self, node: ast.ModuleItems) -> None:
|
|
243
|
+
"""Sub objects.
|
|
244
|
+
|
|
245
|
+
items: list['ModuleItem'],
|
|
246
|
+
"""
|
|
247
|
+
self.sync_node_to_scope(node)
|
|
248
|
+
|
|
249
|
+
def enter_architype(self, node: ast.Architype) -> None:
|
|
250
|
+
"""Sub objects.
|
|
251
|
+
|
|
252
|
+
name: Name,
|
|
253
|
+
arch_type: Token,
|
|
254
|
+
doc: Optional[Token],
|
|
255
|
+
decorators: Optional[Decorators],
|
|
256
|
+
access: Optional[Token],
|
|
257
|
+
base_classes: BaseClasses,
|
|
258
|
+
body: Optional[ArchBlock],
|
|
259
|
+
"""
|
|
260
|
+
if collide := self.cur_scope().insert(
|
|
261
|
+
name=node.name.value,
|
|
262
|
+
sym_type=St.ARCH,
|
|
263
|
+
sym_hit=Sht.DECL_DEFN if node.body else Sht.DECL,
|
|
264
|
+
node=node,
|
|
265
|
+
single=True,
|
|
266
|
+
):
|
|
267
|
+
self.already_declared_err(node.name.value, "architype", collide)
|
|
268
|
+
self.push_scope(node.name.value, node)
|
|
269
|
+
self.sync_node_to_scope(node)
|
|
270
|
+
|
|
271
|
+
def exit_architype(self, node: ast.Architype) -> None:
|
|
272
|
+
"""Sub objects.
|
|
273
|
+
|
|
274
|
+
name: Name,
|
|
275
|
+
arch_type: Token,
|
|
276
|
+
doc: Optional[Token],
|
|
277
|
+
decorators: Optional[Decorators],
|
|
278
|
+
access: Optional[Token],
|
|
279
|
+
base_classes: BaseClasses,
|
|
280
|
+
body: Optional[ArchBlock],
|
|
281
|
+
"""
|
|
282
|
+
self.pop_scope()
|
|
283
|
+
|
|
284
|
+
def enter_arch_def(self, node: ast.ArchDef) -> None:
|
|
285
|
+
"""Sub objects.
|
|
286
|
+
|
|
287
|
+
doc: Optional[Token],
|
|
288
|
+
mod: Optional[DottedNameList],
|
|
289
|
+
arch: ArchRef,
|
|
290
|
+
body: ArchBlock,
|
|
291
|
+
"""
|
|
292
|
+
name = node.target.py_resolve_name()
|
|
293
|
+
if collide := self.cur_scope().insert(
|
|
294
|
+
name=name,
|
|
295
|
+
sym_type=St.IMPL,
|
|
296
|
+
sym_hit=Sht.DEFN,
|
|
297
|
+
node=node,
|
|
298
|
+
single=True,
|
|
299
|
+
):
|
|
300
|
+
self.already_declared_err(name, "architype def", collide)
|
|
301
|
+
self.push_scope(name, node)
|
|
302
|
+
self.sync_node_to_scope(node)
|
|
303
|
+
|
|
304
|
+
def exit_arch_def(self, node: ast.ArchDef) -> None:
|
|
305
|
+
"""Sub objects.
|
|
306
|
+
|
|
307
|
+
doc: Optional[Token],
|
|
308
|
+
mod: Optional[DottedNameList],
|
|
309
|
+
arch: ArchRef,
|
|
310
|
+
body: ArchBlock,
|
|
311
|
+
"""
|
|
312
|
+
self.pop_scope()
|
|
313
|
+
|
|
314
|
+
def enter_decorators(self, node: ast.Decorators) -> None:
|
|
315
|
+
"""Sub objects.
|
|
316
|
+
|
|
317
|
+
calls: list[ExprType],
|
|
318
|
+
"""
|
|
319
|
+
self.sync_node_to_scope(node)
|
|
320
|
+
|
|
321
|
+
def enter_base_classes(self, node: ast.BaseClasses) -> None:
|
|
322
|
+
"""Sub objects.
|
|
323
|
+
|
|
324
|
+
base_classes: list[DottedNameList],
|
|
325
|
+
"""
|
|
326
|
+
self.sync_node_to_scope(node)
|
|
327
|
+
|
|
328
|
+
def enter_ability(self, node: ast.Ability) -> None:
|
|
329
|
+
"""Sub objects.
|
|
330
|
+
|
|
331
|
+
name_ref: Name | SpecialVarRef | ArchRef,
|
|
332
|
+
is_func: bool,
|
|
333
|
+
is_async: bool,
|
|
334
|
+
is_static: bool,
|
|
335
|
+
doc: Optional[Token],
|
|
336
|
+
decorators: Optional[Decorators],
|
|
337
|
+
access: Optional[Token],
|
|
338
|
+
signature: Optional[FuncSignature | TypeSpec | EventSignature],
|
|
339
|
+
body: Optional[CodeBlock],
|
|
340
|
+
arch_attached: Optional[ArchBlock],
|
|
341
|
+
"""
|
|
342
|
+
ability_name = node.py_resolve_name()
|
|
343
|
+
if collide := self.cur_scope().insert(
|
|
344
|
+
name=ability_name,
|
|
345
|
+
sym_type=St.ABILITY,
|
|
346
|
+
sym_hit=Sht.DECL_DEFN if node.body else Sht.DECL,
|
|
347
|
+
node=node,
|
|
348
|
+
single=True,
|
|
349
|
+
):
|
|
350
|
+
self.already_declared_err(ability_name, "ability", collide)
|
|
351
|
+
self.push_scope(ability_name, node)
|
|
352
|
+
self.sync_node_to_scope(node)
|
|
353
|
+
|
|
354
|
+
def exit_ability(self, node: ast.Ability) -> None:
|
|
355
|
+
"""Sub objects.
|
|
356
|
+
|
|
357
|
+
name_ref: Name | SpecialVarRef | ArchRef,
|
|
358
|
+
is_func: bool,
|
|
359
|
+
is_async: bool,
|
|
360
|
+
is_static: bool,
|
|
361
|
+
doc: Optional[Token],
|
|
362
|
+
decorators: Optional[Decorators],
|
|
363
|
+
access: Optional[Token],
|
|
364
|
+
signature: Optional[FuncSignature | TypeSpec | EventSignature],
|
|
365
|
+
body: Optional[CodeBlock],
|
|
366
|
+
arch_attached: Optional[ArchBlock],
|
|
367
|
+
"""
|
|
368
|
+
self.pop_scope()
|
|
369
|
+
|
|
370
|
+
def enter_ability_def(self, node: ast.AbilityDef) -> None:
|
|
371
|
+
"""Sub objects.
|
|
372
|
+
|
|
373
|
+
doc: Optional[Token],
|
|
374
|
+
target: ArchRefChain,
|
|
375
|
+
signature: FuncSignature | EventSignature,
|
|
376
|
+
body: CodeBlock,
|
|
377
|
+
"""
|
|
378
|
+
ability_name = node.target.py_resolve_name()
|
|
379
|
+
if collide := self.cur_scope().insert(
|
|
380
|
+
name=ability_name,
|
|
381
|
+
sym_type=St.IMPL,
|
|
382
|
+
sym_hit=Sht.DEFN,
|
|
383
|
+
node=node,
|
|
384
|
+
single=True,
|
|
385
|
+
):
|
|
386
|
+
self.already_declared_err(ability_name, "ability def", collide)
|
|
387
|
+
self.push_scope(ability_name, node)
|
|
388
|
+
self.sync_node_to_scope(node)
|
|
389
|
+
|
|
390
|
+
def exit_ability_def(self, node: ast.AbilityDef) -> None:
|
|
391
|
+
"""Sub objects.
|
|
392
|
+
|
|
393
|
+
doc: Optional[Token],
|
|
394
|
+
target: Optional[DottedNameList],
|
|
395
|
+
ability: ArchRef,
|
|
396
|
+
signature: FuncSignature | EventSignature,
|
|
397
|
+
body: CodeBlock,
|
|
398
|
+
"""
|
|
399
|
+
self.pop_scope()
|
|
400
|
+
|
|
401
|
+
def enter_event_signature(self, node: ast.EventSignature) -> None:
|
|
402
|
+
"""Sub objects.
|
|
403
|
+
|
|
404
|
+
event: Token,
|
|
405
|
+
arch_tag_info: Optional[TypeSpecList],
|
|
406
|
+
return_type: Optional['TypeSpec'],
|
|
407
|
+
"""
|
|
408
|
+
self.sync_node_to_scope(node)
|
|
409
|
+
|
|
410
|
+
def enter_dotted_name_list(self, node: ast.DottedNameList) -> None:
|
|
411
|
+
"""Sub objects.
|
|
412
|
+
|
|
413
|
+
names: list[Token | SpecialVarRef | ArchRef | Name],
|
|
414
|
+
"""
|
|
415
|
+
self.sync_node_to_scope(node)
|
|
416
|
+
|
|
417
|
+
def enter_arch_ref_chain(self, node: ast.ArchRefChain) -> None:
|
|
418
|
+
"""Sub objects.
|
|
419
|
+
|
|
420
|
+
archs: list[ArchRef],
|
|
421
|
+
"""
|
|
422
|
+
self.sync_node_to_scope(node)
|
|
423
|
+
|
|
424
|
+
def enter_func_signature(self, node: ast.FuncSignature) -> None:
|
|
425
|
+
"""Sub objects.
|
|
426
|
+
|
|
427
|
+
params: Optional['FuncParams'],
|
|
428
|
+
return_type: Optional['TypeSpec'],
|
|
429
|
+
"""
|
|
430
|
+
self.sync_node_to_scope(node)
|
|
431
|
+
|
|
432
|
+
def enter_func_params(self, node: ast.FuncParams) -> None:
|
|
433
|
+
"""Sub objects.
|
|
434
|
+
|
|
435
|
+
params: list['ParamVar'],
|
|
436
|
+
"""
|
|
437
|
+
self.sync_node_to_scope(node)
|
|
438
|
+
|
|
439
|
+
def enter_param_var(self, node: ast.ParamVar) -> None:
|
|
440
|
+
"""Sub objects.
|
|
441
|
+
|
|
442
|
+
name: Name,
|
|
443
|
+
unpack: Optional[Token],
|
|
444
|
+
type_tag: 'TypeSpec',
|
|
445
|
+
value: Optional[ExprType],
|
|
446
|
+
"""
|
|
447
|
+
self.sync_node_to_scope(node)
|
|
448
|
+
|
|
449
|
+
def enter_enum(self, node: ast.Enum) -> None:
|
|
450
|
+
"""Sub objects.
|
|
451
|
+
|
|
452
|
+
name: Name,
|
|
453
|
+
doc: Optional[Token],
|
|
454
|
+
decorators: Optional['Decorators'],
|
|
455
|
+
access: Optional[Token],
|
|
456
|
+
base_classes: 'BaseClasses',
|
|
457
|
+
body: Optional['EnumBlock'],
|
|
458
|
+
"""
|
|
459
|
+
if collide := self.cur_scope().insert(
|
|
460
|
+
name=node.name.value,
|
|
461
|
+
sym_type=St.ARCH,
|
|
462
|
+
sym_hit=Sht.DECL_DEFN if node.body else Sht.DECL,
|
|
463
|
+
node=node,
|
|
464
|
+
single=True,
|
|
465
|
+
):
|
|
466
|
+
self.already_declared_err(node.name.value, "enum", collide)
|
|
467
|
+
self.push_scope(node.name.value, node)
|
|
468
|
+
self.sync_node_to_scope(node)
|
|
469
|
+
|
|
470
|
+
def exit_enum(self, node: ast.Enum) -> None:
|
|
471
|
+
"""Sub objects.
|
|
472
|
+
|
|
473
|
+
name: Name,
|
|
474
|
+
doc: Optional[Token],
|
|
475
|
+
decorators: Optional['Decorators'],
|
|
476
|
+
access: Optional[Token],
|
|
477
|
+
base_classes: 'BaseClasses',
|
|
478
|
+
body: Optional['EnumBlock'],
|
|
479
|
+
"""
|
|
480
|
+
self.pop_scope()
|
|
481
|
+
|
|
482
|
+
def enter_enum_def(self, node: ast.EnumDef) -> None:
|
|
483
|
+
"""Sub objects.
|
|
484
|
+
|
|
485
|
+
doc: Optional[Token],
|
|
486
|
+
target: list[ArchRef],
|
|
487
|
+
body: EnumBlock,
|
|
488
|
+
"""
|
|
489
|
+
name = node.target.py_resolve_name()
|
|
490
|
+
if collide := self.cur_scope().insert(
|
|
491
|
+
name=name,
|
|
492
|
+
sym_type=St.IMPL,
|
|
493
|
+
sym_hit=Sht.DEFN,
|
|
494
|
+
node=node,
|
|
495
|
+
single=True,
|
|
496
|
+
):
|
|
497
|
+
self.already_declared_err(name, "enum def", collide)
|
|
498
|
+
self.push_scope(name, node)
|
|
499
|
+
self.sync_node_to_scope(node)
|
|
500
|
+
|
|
501
|
+
def exit_enum_def(self, node: ast.EnumDef) -> None:
|
|
502
|
+
"""Sub objects.
|
|
503
|
+
|
|
504
|
+
doc: Optional[Token],
|
|
505
|
+
enum: ArchRef,
|
|
506
|
+
mod: Optional[DottedNameList],
|
|
507
|
+
body: EnumBlock,
|
|
508
|
+
"""
|
|
509
|
+
self.pop_scope()
|
|
510
|
+
|
|
511
|
+
def enter_enum_block(self, node: ast.EnumBlock) -> None:
|
|
512
|
+
"""Sub objects.
|
|
513
|
+
|
|
514
|
+
stmts: list['Name|Assignment'],
|
|
515
|
+
"""
|
|
516
|
+
self.sync_node_to_scope(node)
|
|
517
|
+
|
|
518
|
+
def enter_arch_block(self, node: ast.ArchBlock) -> None:
|
|
519
|
+
"""Sub objects.
|
|
520
|
+
|
|
521
|
+
members: list['ArchHas | Ability'],
|
|
522
|
+
"""
|
|
523
|
+
for i in self.get_all_sub_nodes(node, ast.Ability):
|
|
524
|
+
i.arch_attached = node
|
|
525
|
+
self.sync_node_to_scope(node)
|
|
526
|
+
|
|
527
|
+
def enter_arch_has(self, node: ast.ArchHas) -> None:
|
|
528
|
+
"""Sub objects.
|
|
529
|
+
|
|
530
|
+
doc: Optional[Token],
|
|
531
|
+
is_static: bool,
|
|
532
|
+
access: Optional[Token],
|
|
533
|
+
vars: 'HasVarList',
|
|
534
|
+
is_frozen: bool,
|
|
535
|
+
"""
|
|
536
|
+
self.sync_node_to_scope(node)
|
|
537
|
+
|
|
538
|
+
def enter_has_var(self, node: ast.HasVar) -> None:
|
|
539
|
+
"""Sub objects.
|
|
540
|
+
|
|
541
|
+
name: Name,
|
|
542
|
+
type_tag: 'TypeSpec',
|
|
543
|
+
value: Optional[ExprType],
|
|
544
|
+
"""
|
|
545
|
+
self.sync_node_to_scope(node)
|
|
546
|
+
|
|
547
|
+
def enter_has_var_list(self, node: ast.HasVarList) -> None:
|
|
548
|
+
"""Sub objects.
|
|
549
|
+
|
|
550
|
+
vars: list['HasVar'],
|
|
551
|
+
"""
|
|
552
|
+
self.sync_node_to_scope(node)
|
|
553
|
+
|
|
554
|
+
def enter_type_spec(self, node: ast.TypeSpec) -> None:
|
|
555
|
+
"""Sub objects.
|
|
556
|
+
|
|
557
|
+
spec_type: Token | DottedNameList,
|
|
558
|
+
list_nest: TypeSpec,
|
|
559
|
+
dict_nest: TypeSpec,
|
|
560
|
+
null_ok: bool,
|
|
561
|
+
"""
|
|
562
|
+
self.sync_node_to_scope(node)
|
|
563
|
+
|
|
564
|
+
def enter_type_spec_list(self, node: ast.TypeSpecList) -> None:
|
|
565
|
+
"""Sub objects.
|
|
566
|
+
|
|
567
|
+
types: list[TypeSpec],
|
|
568
|
+
"""
|
|
569
|
+
self.sync_node_to_scope(node)
|
|
570
|
+
|
|
571
|
+
def enter_code_block(self, node: ast.CodeBlock) -> None:
|
|
572
|
+
"""Sub objects.
|
|
573
|
+
|
|
574
|
+
stmts: list[StmtType],
|
|
575
|
+
"""
|
|
576
|
+
self.sync_node_to_scope(node)
|
|
577
|
+
|
|
578
|
+
def enter_typed_ctx_block(self, node: ast.TypedCtxBlock) -> None:
|
|
579
|
+
"""Sub objects.
|
|
580
|
+
|
|
581
|
+
type_ctx: TypeSpecList,
|
|
582
|
+
body: CodeBlock,
|
|
583
|
+
"""
|
|
584
|
+
self.sync_node_to_scope(node)
|
|
585
|
+
|
|
586
|
+
def enter_if_stmt(self, node: ast.IfStmt) -> None:
|
|
587
|
+
"""Sub objects.
|
|
588
|
+
|
|
589
|
+
condition: ExprType,
|
|
590
|
+
body: 'CodeBlock',
|
|
591
|
+
elseifs: Optional['ElseIfs'],
|
|
592
|
+
else_body: Optional['ElseStmt'],
|
|
593
|
+
"""
|
|
594
|
+
self.sync_node_to_scope(node)
|
|
595
|
+
|
|
596
|
+
def enter_else_ifs(self, node: ast.ElseIfs) -> None:
|
|
597
|
+
"""Sub objects.
|
|
598
|
+
|
|
599
|
+
elseifs: list['IfStmt'],
|
|
600
|
+
"""
|
|
601
|
+
self.sync_node_to_scope(node)
|
|
602
|
+
|
|
603
|
+
def enter_else_stmt(self, node: ast.ElseStmt) -> None:
|
|
604
|
+
"""Sub objects.
|
|
605
|
+
|
|
606
|
+
body: 'CodeBlock',
|
|
607
|
+
"""
|
|
608
|
+
self.sync_node_to_scope(node)
|
|
609
|
+
|
|
610
|
+
def enter_try_stmt(self, node: ast.TryStmt) -> None:
|
|
611
|
+
"""Sub objects.
|
|
612
|
+
|
|
613
|
+
body: 'CodeBlock',
|
|
614
|
+
excepts: Optional['ExceptList'],
|
|
615
|
+
finally_body: Optional['FinallyStmt'],
|
|
616
|
+
"""
|
|
617
|
+
self.sync_node_to_scope(node)
|
|
618
|
+
|
|
619
|
+
def enter_except(self, node: ast.Except) -> None:
|
|
620
|
+
"""Sub objects.
|
|
621
|
+
|
|
622
|
+
ex_type: ExprType,
|
|
623
|
+
name: Optional[Token],
|
|
624
|
+
body: 'CodeBlock',
|
|
625
|
+
"""
|
|
626
|
+
self.sync_node_to_scope(node)
|
|
627
|
+
|
|
628
|
+
def enter_except_list(self, node: ast.ExceptList) -> None:
|
|
629
|
+
"""Sub objects.
|
|
630
|
+
|
|
631
|
+
excepts: list['Except'],
|
|
632
|
+
"""
|
|
633
|
+
self.sync_node_to_scope(node)
|
|
634
|
+
|
|
635
|
+
def enter_finally_stmt(self, node: ast.FinallyStmt) -> None:
|
|
636
|
+
"""Sub objects.
|
|
637
|
+
|
|
638
|
+
body: 'CodeBlock',
|
|
639
|
+
"""
|
|
640
|
+
self.sync_node_to_scope(node)
|
|
641
|
+
|
|
642
|
+
def enter_iter_for_stmt(self, node: ast.IterForStmt) -> None:
|
|
643
|
+
"""Sub objects.
|
|
644
|
+
|
|
645
|
+
iter: 'Assignment',
|
|
646
|
+
condition: ExprType,
|
|
647
|
+
count_by: ExprType,
|
|
648
|
+
body: 'CodeBlock',
|
|
649
|
+
"""
|
|
650
|
+
self.sync_node_to_scope(node)
|
|
651
|
+
|
|
652
|
+
def enter_in_for_stmt(self, node: ast.InForStmt) -> None:
|
|
653
|
+
"""Sub objects.
|
|
654
|
+
|
|
655
|
+
name_list: NameList,
|
|
656
|
+
collection: ExprType,
|
|
657
|
+
body: CodeBlock,
|
|
658
|
+
"""
|
|
659
|
+
self.sync_node_to_scope(node)
|
|
660
|
+
|
|
661
|
+
def enter_name(self, node: ast.Name) -> None:
|
|
662
|
+
"""Sub objects.
|
|
663
|
+
|
|
664
|
+
name: str,
|
|
665
|
+
value: str,
|
|
666
|
+
col_start: int,
|
|
667
|
+
col_end: int,
|
|
668
|
+
already_declared: bool,
|
|
669
|
+
"""
|
|
670
|
+
self.sync_node_to_scope(node)
|
|
671
|
+
|
|
672
|
+
def enter_name_list(self, node: ast.NameList) -> None:
|
|
673
|
+
"""Sub objects.
|
|
674
|
+
|
|
675
|
+
names: list[Name],
|
|
676
|
+
"""
|
|
677
|
+
self.sync_node_to_scope(node)
|
|
678
|
+
|
|
679
|
+
def enter_while_stmt(self, node: ast.WhileStmt) -> None:
|
|
680
|
+
"""Sub objects.
|
|
681
|
+
|
|
682
|
+
condition: ExprType,
|
|
683
|
+
body: 'CodeBlock',
|
|
684
|
+
"""
|
|
685
|
+
self.sync_node_to_scope(node)
|
|
686
|
+
|
|
687
|
+
def enter_with_stmt(self, node: ast.WithStmt) -> None:
|
|
688
|
+
"""Sub objects.
|
|
689
|
+
|
|
690
|
+
exprs: 'ExprAsItemList',
|
|
691
|
+
body: 'CodeBlock',
|
|
692
|
+
"""
|
|
693
|
+
self.sync_node_to_scope(node)
|
|
694
|
+
|
|
695
|
+
def enter_expr_as_item(self, node: ast.ExprAsItem) -> None:
|
|
696
|
+
"""Sub objects.
|
|
697
|
+
|
|
698
|
+
expr: ExprType,
|
|
699
|
+
alias: Optional[Name],
|
|
700
|
+
"""
|
|
701
|
+
self.sync_node_to_scope(node)
|
|
702
|
+
|
|
703
|
+
def enter_expr_as_item_list(self, node: ast.ExprAsItemList) -> None:
|
|
704
|
+
"""Sub objects.
|
|
705
|
+
|
|
706
|
+
items: list['ExprAsItem'],
|
|
707
|
+
"""
|
|
708
|
+
self.sync_node_to_scope(node)
|
|
709
|
+
|
|
710
|
+
def enter_raise_stmt(self, node: ast.RaiseStmt) -> None:
|
|
711
|
+
"""Sub objects.
|
|
712
|
+
|
|
713
|
+
cause: Optional[ExprType],
|
|
714
|
+
"""
|
|
715
|
+
self.sync_node_to_scope(node)
|
|
716
|
+
|
|
717
|
+
def enter_assert_stmt(self, node: ast.AssertStmt) -> None:
|
|
718
|
+
"""Sub objects.
|
|
719
|
+
|
|
720
|
+
condition: ExprType,
|
|
721
|
+
error_msg: Optional[ExprType],
|
|
722
|
+
"""
|
|
723
|
+
self.sync_node_to_scope(node)
|
|
724
|
+
|
|
725
|
+
def enter_ctrl_stmt(self, node: ast.CtrlStmt) -> None:
|
|
726
|
+
"""Sub objects.
|
|
727
|
+
|
|
728
|
+
ctrl: Token,
|
|
729
|
+
"""
|
|
730
|
+
self.sync_node_to_scope(node)
|
|
731
|
+
|
|
732
|
+
def enter_delete_stmt(self, node: ast.DeleteStmt) -> None:
|
|
733
|
+
"""Sub objects.
|
|
734
|
+
|
|
735
|
+
target: ExprType,
|
|
736
|
+
"""
|
|
737
|
+
self.sync_node_to_scope(node)
|
|
738
|
+
|
|
739
|
+
def enter_report_stmt(self, node: ast.ReportStmt) -> None:
|
|
740
|
+
"""Sub objects.
|
|
741
|
+
|
|
742
|
+
expr: ExprType,
|
|
743
|
+
"""
|
|
744
|
+
self.sync_node_to_scope(node)
|
|
745
|
+
|
|
746
|
+
def enter_return_stmt(self, node: ast.ReturnStmt) -> None:
|
|
747
|
+
"""Sub objects.
|
|
748
|
+
|
|
749
|
+
expr: Optional[ExprType],
|
|
750
|
+
"""
|
|
751
|
+
self.sync_node_to_scope(node)
|
|
752
|
+
|
|
753
|
+
def enter_yield_stmt(self, node: ast.YieldStmt) -> None:
|
|
754
|
+
"""Sub objects.
|
|
755
|
+
|
|
756
|
+
expr: Optional[ExprType],
|
|
757
|
+
"""
|
|
758
|
+
self.sync_node_to_scope(node)
|
|
759
|
+
|
|
760
|
+
def enter_ignore_stmt(self, node: ast.IgnoreStmt) -> None:
|
|
761
|
+
"""Sub objects.
|
|
762
|
+
|
|
763
|
+
target: ExprType,
|
|
764
|
+
"""
|
|
765
|
+
self.sync_node_to_scope(node)
|
|
766
|
+
|
|
767
|
+
def enter_visit_stmt(self, node: ast.VisitStmt) -> None:
|
|
768
|
+
"""Sub objects.
|
|
769
|
+
|
|
770
|
+
vis_type: Optional[Token],
|
|
771
|
+
target: ExprType,
|
|
772
|
+
else_body: Optional['ElseStmt'],
|
|
773
|
+
from_walker: bool,
|
|
774
|
+
"""
|
|
775
|
+
self.sync_node_to_scope(node)
|
|
776
|
+
|
|
777
|
+
def enter_revisit_stmt(self, node: ast.RevisitStmt) -> None:
|
|
778
|
+
"""Sub objects.
|
|
779
|
+
|
|
780
|
+
hops: Optional[ExprType],
|
|
781
|
+
else_body: Optional['ElseStmt'],
|
|
782
|
+
from_walker: bool,
|
|
783
|
+
"""
|
|
784
|
+
self.sync_node_to_scope(node)
|
|
785
|
+
|
|
786
|
+
def enter_disengage_stmt(self, node: ast.DisengageStmt) -> None:
|
|
787
|
+
"""Sub objects.
|
|
788
|
+
|
|
789
|
+
from_walker: bool,
|
|
790
|
+
"""
|
|
791
|
+
self.sync_node_to_scope(node)
|
|
792
|
+
|
|
793
|
+
def enter_await_stmt(self, node: ast.AwaitStmt) -> None:
|
|
794
|
+
"""Sub objects.
|
|
795
|
+
|
|
796
|
+
target: ExprType,
|
|
797
|
+
"""
|
|
798
|
+
self.sync_node_to_scope(node)
|
|
799
|
+
|
|
800
|
+
def enter_assignment(self, node: ast.Assignment) -> None:
|
|
801
|
+
"""Sub objects.
|
|
802
|
+
|
|
803
|
+
is_static: bool,
|
|
804
|
+
target: 'AtomType',
|
|
805
|
+
value: ExprType,
|
|
806
|
+
mutable: bool,
|
|
807
|
+
"""
|
|
808
|
+
self.sync_node_to_scope(node)
|
|
809
|
+
|
|
810
|
+
def enter_binary_expr(self, node: ast.BinaryExpr) -> None:
|
|
811
|
+
"""Sub objects.
|
|
812
|
+
|
|
813
|
+
left: ExprType,
|
|
814
|
+
right: ExprType,
|
|
815
|
+
op: Token | DisconnectOp | ConnectOp,
|
|
816
|
+
"""
|
|
817
|
+
self.sync_node_to_scope(node)
|
|
818
|
+
|
|
819
|
+
def enter_if_else_expr(self, node: ast.IfElseExpr) -> None:
|
|
820
|
+
"""Sub objects.
|
|
821
|
+
|
|
822
|
+
condition: 'BinaryExpr | IfElseExpr',
|
|
823
|
+
value: ExprType,
|
|
824
|
+
else_value: ExprType,
|
|
825
|
+
"""
|
|
826
|
+
self.sync_node_to_scope(node)
|
|
827
|
+
|
|
828
|
+
def enter_unary_expr(self, node: ast.UnaryExpr) -> None:
|
|
829
|
+
"""Sub objects.
|
|
830
|
+
|
|
831
|
+
operand: ExprType,
|
|
832
|
+
op: Token,
|
|
833
|
+
"""
|
|
834
|
+
self.sync_node_to_scope(node)
|
|
835
|
+
|
|
836
|
+
def enter_unpack_expr(self, node: ast.UnpackExpr) -> None:
|
|
837
|
+
"""Sub objects.
|
|
838
|
+
|
|
839
|
+
target: ExprType,
|
|
840
|
+
is_dict: bool,
|
|
841
|
+
"""
|
|
842
|
+
self.sync_node_to_scope(node)
|
|
843
|
+
|
|
844
|
+
def enter_multi_string(self, node: ast.MultiString) -> None:
|
|
845
|
+
"""Sub objects.
|
|
846
|
+
|
|
847
|
+
strings: list['Token | FString'],
|
|
848
|
+
"""
|
|
849
|
+
self.sync_node_to_scope(node)
|
|
850
|
+
|
|
851
|
+
def enter_expr_list(self, node: ast.ExprList) -> None:
|
|
852
|
+
"""Sub objects.
|
|
853
|
+
|
|
854
|
+
values: list[ExprType],
|
|
855
|
+
"""
|
|
856
|
+
self.sync_node_to_scope(node)
|
|
857
|
+
|
|
858
|
+
def enter_list_val(self, node: ast.ListVal) -> None:
|
|
859
|
+
"""Sub objects.
|
|
860
|
+
|
|
861
|
+
values: list[ExprType],
|
|
862
|
+
"""
|
|
863
|
+
self.sync_node_to_scope(node)
|
|
864
|
+
|
|
865
|
+
def enter_set_val(self, node: ast.SetVal) -> None:
|
|
866
|
+
"""Sub objects.
|
|
867
|
+
|
|
868
|
+
values: list[ExprType],
|
|
869
|
+
"""
|
|
870
|
+
self.sync_node_to_scope(node)
|
|
871
|
+
|
|
872
|
+
def enter_tuple_val(self, node: ast.TupleVal) -> None:
|
|
873
|
+
"""Sub objects.
|
|
874
|
+
|
|
875
|
+
first_expr: Optional[ExprType],
|
|
876
|
+
exprs: Optional[ExprList],
|
|
877
|
+
assigns: Optional[AssignmentList],
|
|
878
|
+
"""
|
|
879
|
+
self.sync_node_to_scope(node)
|
|
880
|
+
|
|
881
|
+
def enter_dict_val(self, node: ast.DictVal) -> None:
|
|
882
|
+
"""Sub objects.
|
|
883
|
+
|
|
884
|
+
kv_pairs: list['KVPair'],
|
|
885
|
+
"""
|
|
886
|
+
self.sync_node_to_scope(node)
|
|
887
|
+
|
|
888
|
+
def enter_inner_compr(self, node: ast.InnerCompr) -> None:
|
|
889
|
+
"""Sub objects.
|
|
890
|
+
|
|
891
|
+
out_expr: ExprType,
|
|
892
|
+
name_list: NameList,
|
|
893
|
+
collection: ExprType,
|
|
894
|
+
conditional: Optional[ExprType],
|
|
895
|
+
is_list: bool,
|
|
896
|
+
is_gen: bool,
|
|
897
|
+
is_set: bool,
|
|
898
|
+
"""
|
|
899
|
+
self.sync_node_to_scope(node)
|
|
900
|
+
|
|
901
|
+
def enter_dict_compr(self, node: ast.DictCompr) -> None:
|
|
902
|
+
"""Sub objects.
|
|
903
|
+
|
|
904
|
+
outk_expr: ExprType,
|
|
905
|
+
outv_expr: ExprType,
|
|
906
|
+
name_list: NameList,
|
|
907
|
+
collection: ExprType,
|
|
908
|
+
conditional: Optional[ExprType],
|
|
909
|
+
"""
|
|
910
|
+
self.sync_node_to_scope(node)
|
|
911
|
+
|
|
912
|
+
def enter_k_v_pair(self, node: ast.KVPair) -> None:
|
|
913
|
+
"""Sub objects.
|
|
914
|
+
|
|
915
|
+
key: ExprType,
|
|
916
|
+
value: ExprType,
|
|
917
|
+
"""
|
|
918
|
+
self.sync_node_to_scope(node)
|
|
919
|
+
|
|
920
|
+
def enter_atom_trailer(self, node: ast.AtomTrailer) -> None:
|
|
921
|
+
"""Sub objects.
|
|
922
|
+
|
|
923
|
+
target: 'AtomType',
|
|
924
|
+
right: 'IndexSlice | ArchRef | Token',
|
|
925
|
+
null_ok: bool,
|
|
926
|
+
"""
|
|
927
|
+
self.sync_node_to_scope(node)
|
|
928
|
+
|
|
929
|
+
def enter_func_call(self, node: ast.FuncCall) -> None:
|
|
930
|
+
"""Sub objects.
|
|
931
|
+
|
|
932
|
+
target: 'AtomType',
|
|
933
|
+
params: Optional['ParamList'],
|
|
934
|
+
"""
|
|
935
|
+
self.sync_node_to_scope(node)
|
|
936
|
+
|
|
937
|
+
def enter_param_list(self, node: ast.ParamList) -> None:
|
|
938
|
+
"""Sub objects.
|
|
939
|
+
|
|
940
|
+
p_args: Optional[ExprList],
|
|
941
|
+
p_kwargs: Optional['AssignmentList'],
|
|
942
|
+
"""
|
|
943
|
+
self.sync_node_to_scope(node)
|
|
944
|
+
|
|
945
|
+
def enter_assignment_list(self, node: ast.AssignmentList) -> None:
|
|
946
|
+
"""Sub objects.
|
|
947
|
+
|
|
948
|
+
values: list['Assignment'],
|
|
949
|
+
"""
|
|
950
|
+
self.sync_node_to_scope(node)
|
|
951
|
+
|
|
952
|
+
def enter_index_slice(self, node: ast.IndexSlice) -> None:
|
|
953
|
+
"""Sub objects.
|
|
954
|
+
|
|
955
|
+
start: Optional[ExprType],
|
|
956
|
+
stop: Optional[ExprType],
|
|
957
|
+
is_range: bool,
|
|
958
|
+
"""
|
|
959
|
+
self.sync_node_to_scope(node)
|
|
960
|
+
|
|
961
|
+
def enter_arch_ref(self, node: ast.ArchRef) -> None:
|
|
962
|
+
"""Sub objects.
|
|
963
|
+
|
|
964
|
+
name_ref: Name | SpecialVarRef,
|
|
965
|
+
arch: Token,
|
|
966
|
+
"""
|
|
967
|
+
self.sync_node_to_scope(node)
|
|
968
|
+
|
|
969
|
+
def enter_special_var_ref(self, node: ast.SpecialVarRef) -> None:
|
|
970
|
+
"""Sub objects.
|
|
971
|
+
|
|
972
|
+
var: Token,
|
|
973
|
+
"""
|
|
974
|
+
self.sync_node_to_scope(node)
|
|
975
|
+
|
|
976
|
+
def enter_edge_op_ref(self, node: ast.EdgeOpRef) -> None:
|
|
977
|
+
"""Sub objects.
|
|
978
|
+
|
|
979
|
+
filter_type: Optional[ExprType],
|
|
980
|
+
filter_cond: Optional[FilterCompr],
|
|
981
|
+
edge_dir: EdgeDir,
|
|
982
|
+
from_walker: bool,
|
|
983
|
+
"""
|
|
984
|
+
self.sync_node_to_scope(node)
|
|
985
|
+
|
|
986
|
+
def enter_disconnect_op(self, node: ast.DisconnectOp) -> None:
|
|
987
|
+
"""Sub objects.
|
|
988
|
+
|
|
989
|
+
filter_type: Optional[ExprType],
|
|
990
|
+
filter_cond: Optional[FilterCompr],
|
|
991
|
+
edge_dir: EdgeDir,
|
|
992
|
+
from_walker: bool,
|
|
993
|
+
"""
|
|
994
|
+
self.sync_node_to_scope(node)
|
|
995
|
+
|
|
996
|
+
def enter_connect_op(self, node: ast.ConnectOp) -> None:
|
|
997
|
+
"""Sub objects.
|
|
998
|
+
|
|
999
|
+
conn_type: Optional[ExprType],
|
|
1000
|
+
conn_assign: Optional[AssignmentList],
|
|
1001
|
+
edge_dir: EdgeDir,
|
|
1002
|
+
"""
|
|
1003
|
+
self.sync_node_to_scope(node)
|
|
1004
|
+
|
|
1005
|
+
def enter_filter_compr(self, node: ast.FilterCompr) -> None:
|
|
1006
|
+
"""Sub objects.
|
|
1007
|
+
|
|
1008
|
+
compares: list[BinaryExpr],
|
|
1009
|
+
"""
|
|
1010
|
+
self.sync_node_to_scope(node)
|
|
1011
|
+
|
|
1012
|
+
def enter_f_string(self, node: ast.FString) -> None:
|
|
1013
|
+
"""Sub objects.
|
|
1014
|
+
|
|
1015
|
+
parts: list['Token | ExprType'],
|
|
1016
|
+
"""
|
|
1017
|
+
self.sync_node_to_scope(node)
|
|
1018
|
+
|
|
1019
|
+
def enter_parse(self, node: ast.Parse) -> None:
|
|
1020
|
+
"""Sub objects.
|
|
1021
|
+
|
|
1022
|
+
name: str,
|
|
1023
|
+
"""
|
|
1024
|
+
self.sync_node_to_scope(node)
|
|
1025
|
+
|
|
1026
|
+
def enter_token(self, node: ast.Token) -> None:
|
|
1027
|
+
"""Sub objects.
|
|
1028
|
+
|
|
1029
|
+
name: str,
|
|
1030
|
+
value: str,
|
|
1031
|
+
col_start: int,
|
|
1032
|
+
col_end: int,
|
|
1033
|
+
"""
|
|
1034
|
+
self.sync_node_to_scope(node)
|
|
1035
|
+
|
|
1036
|
+
def enter_constant(self, node: ast.Constant) -> None:
|
|
1037
|
+
"""Sub objects.
|
|
1038
|
+
|
|
1039
|
+
name: str,
|
|
1040
|
+
value: str,
|
|
1041
|
+
col_start: int,
|
|
1042
|
+
col_end: int,
|
|
1043
|
+
typ: type,
|
|
1044
|
+
"""
|
|
1045
|
+
self.sync_node_to_scope(node)
|