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,311 @@
|
|
|
1
|
+
############################################################################
|
|
2
|
+
# Original work Copyright 2017 Palantir Technologies, Inc. #
|
|
3
|
+
# Original work licensed under the MIT License. #
|
|
4
|
+
# See ThirdPartyNotices.txt in the project root for license information. #
|
|
5
|
+
# All modifications Copyright (c) Open Law Library. All rights reserved. #
|
|
6
|
+
# #
|
|
7
|
+
# Licensed under the Apache License, Version 2.0 (the "License") #
|
|
8
|
+
# you may not use this file except in compliance with the License. #
|
|
9
|
+
# You may obtain a copy of the License at #
|
|
10
|
+
# #
|
|
11
|
+
# http: // www.apache.org/licenses/LICENSE-2.0 #
|
|
12
|
+
# #
|
|
13
|
+
# Unless required by applicable law or agreed to in writing, software #
|
|
14
|
+
# distributed under the License is distributed on an "AS IS" BASIS, #
|
|
15
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. #
|
|
16
|
+
# See the License for the specific language governing permissions and #
|
|
17
|
+
# limitations under the License. #
|
|
18
|
+
############################################################################
|
|
19
|
+
import copy
|
|
20
|
+
import logging
|
|
21
|
+
import os
|
|
22
|
+
import warnings
|
|
23
|
+
from typing import Dict, List, Optional, Union
|
|
24
|
+
|
|
25
|
+
from jaclang.vendor.pygls.lsprotocol import types
|
|
26
|
+
from jaclang.vendor.pygls.lsprotocol.types import (
|
|
27
|
+
PositionEncodingKind,
|
|
28
|
+
TextDocumentSyncKind,
|
|
29
|
+
WorkspaceFolder,
|
|
30
|
+
)
|
|
31
|
+
from jaclang.vendor.pygls.uris import to_fs_path, uri_scheme
|
|
32
|
+
from jaclang.vendor.pygls.workspace.text_document import TextDocument
|
|
33
|
+
|
|
34
|
+
logger = logging.getLogger(__name__)
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
class Workspace(object):
|
|
38
|
+
def __init__(
|
|
39
|
+
self,
|
|
40
|
+
root_uri: Optional[str],
|
|
41
|
+
sync_kind: TextDocumentSyncKind = TextDocumentSyncKind.Incremental,
|
|
42
|
+
workspace_folders: Optional[List[WorkspaceFolder]] = None,
|
|
43
|
+
position_encoding: Optional[
|
|
44
|
+
Union[PositionEncodingKind, str]
|
|
45
|
+
] = PositionEncodingKind.Utf16,
|
|
46
|
+
):
|
|
47
|
+
self._root_uri = root_uri
|
|
48
|
+
if self._root_uri is not None:
|
|
49
|
+
self._root_uri_scheme = uri_scheme(self._root_uri)
|
|
50
|
+
root_path = to_fs_path(self._root_uri)
|
|
51
|
+
if root_path is None:
|
|
52
|
+
raise Exception("Couldn't get `root_path` from `root_uri`")
|
|
53
|
+
self._root_path = root_path
|
|
54
|
+
self._sync_kind = sync_kind
|
|
55
|
+
self._text_documents: Dict[str, TextDocument] = {}
|
|
56
|
+
self._notebook_documents: Dict[str, types.NotebookDocument] = {}
|
|
57
|
+
|
|
58
|
+
# Used to lookup notebooks which contain a given cell.
|
|
59
|
+
self._cell_in_notebook: Dict[str, str] = {}
|
|
60
|
+
self._folders: Dict[str, WorkspaceFolder] = {}
|
|
61
|
+
self._docs: Dict[str, TextDocument] = {}
|
|
62
|
+
self._position_encoding = position_encoding
|
|
63
|
+
|
|
64
|
+
if workspace_folders is not None:
|
|
65
|
+
for folder in workspace_folders:
|
|
66
|
+
self.add_folder(folder)
|
|
67
|
+
|
|
68
|
+
def _create_text_document(
|
|
69
|
+
self,
|
|
70
|
+
doc_uri: str,
|
|
71
|
+
source: Optional[str] = None,
|
|
72
|
+
version: Optional[int] = None,
|
|
73
|
+
language_id: Optional[str] = None,
|
|
74
|
+
) -> TextDocument:
|
|
75
|
+
return TextDocument(
|
|
76
|
+
doc_uri,
|
|
77
|
+
source=source,
|
|
78
|
+
version=version,
|
|
79
|
+
language_id=language_id,
|
|
80
|
+
sync_kind=self._sync_kind,
|
|
81
|
+
position_encoding=self._position_encoding,
|
|
82
|
+
)
|
|
83
|
+
|
|
84
|
+
def add_folder(self, folder: WorkspaceFolder):
|
|
85
|
+
self._folders[folder.uri] = folder
|
|
86
|
+
|
|
87
|
+
@property
|
|
88
|
+
def documents(self):
|
|
89
|
+
warnings.warn(
|
|
90
|
+
"'workspace.documents' has been deprecated, use "
|
|
91
|
+
"'workspace.text_documents' instead",
|
|
92
|
+
DeprecationWarning,
|
|
93
|
+
stacklevel=2,
|
|
94
|
+
)
|
|
95
|
+
return self.text_documents
|
|
96
|
+
|
|
97
|
+
@property
|
|
98
|
+
def notebook_documents(self):
|
|
99
|
+
return self._notebook_documents
|
|
100
|
+
|
|
101
|
+
@property
|
|
102
|
+
def text_documents(self):
|
|
103
|
+
return self._text_documents
|
|
104
|
+
|
|
105
|
+
@property
|
|
106
|
+
def folders(self):
|
|
107
|
+
return self._folders
|
|
108
|
+
|
|
109
|
+
def get_notebook_document(
|
|
110
|
+
self, *, notebook_uri: Optional[str] = None, cell_uri: Optional[str] = None
|
|
111
|
+
) -> Optional[types.NotebookDocument]:
|
|
112
|
+
"""Return the notebook corresponding with the given uri.
|
|
113
|
+
|
|
114
|
+
If both ``notebook_uri`` and ``cell_uri`` are given, ``notebook_uri`` takes
|
|
115
|
+
precedence.
|
|
116
|
+
|
|
117
|
+
Parameters
|
|
118
|
+
----------
|
|
119
|
+
notebook_uri
|
|
120
|
+
If given, return the notebook document with the given uri.
|
|
121
|
+
|
|
122
|
+
cell_uri
|
|
123
|
+
If given, return the notebook document which contains a cell with the
|
|
124
|
+
given uri
|
|
125
|
+
|
|
126
|
+
Returns
|
|
127
|
+
-------
|
|
128
|
+
Optional[NotebookDocument]
|
|
129
|
+
The requested notebook document if found, ``None`` otherwise.
|
|
130
|
+
"""
|
|
131
|
+
if notebook_uri is not None:
|
|
132
|
+
return self._notebook_documents.get(notebook_uri)
|
|
133
|
+
|
|
134
|
+
if cell_uri is not None:
|
|
135
|
+
notebook_uri = self._cell_in_notebook.get(cell_uri)
|
|
136
|
+
if notebook_uri is None:
|
|
137
|
+
return None
|
|
138
|
+
|
|
139
|
+
return self._notebook_documents.get(notebook_uri)
|
|
140
|
+
|
|
141
|
+
return None
|
|
142
|
+
|
|
143
|
+
def get_text_document(self, doc_uri: str) -> TextDocument:
|
|
144
|
+
"""
|
|
145
|
+
Return a managed document if-present,
|
|
146
|
+
else create one pointing at disk.
|
|
147
|
+
|
|
148
|
+
See https://github.com/Microsoft/language-server-protocol/issues/177
|
|
149
|
+
"""
|
|
150
|
+
return self._text_documents.get(doc_uri) or self._create_text_document(doc_uri)
|
|
151
|
+
|
|
152
|
+
def is_local(self):
|
|
153
|
+
return (
|
|
154
|
+
self._root_uri_scheme == "" or self._root_uri_scheme == "file"
|
|
155
|
+
) and os.path.exists(self._root_path)
|
|
156
|
+
|
|
157
|
+
def put_notebook_document(self, params: types.DidOpenNotebookDocumentParams):
|
|
158
|
+
notebook = params.notebook_document
|
|
159
|
+
|
|
160
|
+
# Create a fresh instance to ensure our copy cannot be accidentally modified.
|
|
161
|
+
self._notebook_documents[notebook.uri] = copy.deepcopy(notebook)
|
|
162
|
+
|
|
163
|
+
for cell_document in params.cell_text_documents:
|
|
164
|
+
self.put_text_document(cell_document, notebook_uri=notebook.uri)
|
|
165
|
+
|
|
166
|
+
def put_text_document(
|
|
167
|
+
self,
|
|
168
|
+
text_document: types.TextDocumentItem,
|
|
169
|
+
notebook_uri: Optional[str] = None,
|
|
170
|
+
):
|
|
171
|
+
"""Add a text document to the workspace.
|
|
172
|
+
|
|
173
|
+
Parameters
|
|
174
|
+
----------
|
|
175
|
+
text_document
|
|
176
|
+
The text document to add
|
|
177
|
+
|
|
178
|
+
notebook_uri
|
|
179
|
+
If set, indicates that this text document represents a cell in a notebook
|
|
180
|
+
document
|
|
181
|
+
"""
|
|
182
|
+
doc_uri = text_document.uri
|
|
183
|
+
|
|
184
|
+
self._text_documents[doc_uri] = self._create_text_document(
|
|
185
|
+
doc_uri,
|
|
186
|
+
source=text_document.text,
|
|
187
|
+
version=text_document.version,
|
|
188
|
+
language_id=text_document.language_id,
|
|
189
|
+
)
|
|
190
|
+
|
|
191
|
+
if notebook_uri:
|
|
192
|
+
self._cell_in_notebook[doc_uri] = notebook_uri
|
|
193
|
+
|
|
194
|
+
def remove_notebook_document(self, params: types.DidCloseNotebookDocumentParams):
|
|
195
|
+
notebook_uri = params.notebook_document.uri
|
|
196
|
+
self._notebook_documents.pop(notebook_uri, None)
|
|
197
|
+
|
|
198
|
+
for cell_document in params.cell_text_documents:
|
|
199
|
+
self.remove_text_document(cell_document.uri)
|
|
200
|
+
|
|
201
|
+
def remove_text_document(self, doc_uri: str):
|
|
202
|
+
self._text_documents.pop(doc_uri, None)
|
|
203
|
+
self._cell_in_notebook.pop(doc_uri, None)
|
|
204
|
+
|
|
205
|
+
def remove_folder(self, folder_uri: str):
|
|
206
|
+
self._folders.pop(folder_uri, None)
|
|
207
|
+
try:
|
|
208
|
+
del self._folders[folder_uri]
|
|
209
|
+
except KeyError:
|
|
210
|
+
pass
|
|
211
|
+
|
|
212
|
+
@property
|
|
213
|
+
def root_path(self):
|
|
214
|
+
return self._root_path
|
|
215
|
+
|
|
216
|
+
@property
|
|
217
|
+
def root_uri(self):
|
|
218
|
+
return self._root_uri
|
|
219
|
+
|
|
220
|
+
def update_notebook_document(self, params: types.DidChangeNotebookDocumentParams):
|
|
221
|
+
uri = params.notebook_document.uri
|
|
222
|
+
notebook = self._notebook_documents[uri]
|
|
223
|
+
notebook.version = params.notebook_document.version
|
|
224
|
+
|
|
225
|
+
if params.change.metadata:
|
|
226
|
+
notebook.metadata = params.change.metadata
|
|
227
|
+
|
|
228
|
+
cell_changes = params.change.cells
|
|
229
|
+
if cell_changes is None:
|
|
230
|
+
return
|
|
231
|
+
|
|
232
|
+
# Process changes to any cell metadata.
|
|
233
|
+
nb_cells = {cell.document: cell for cell in notebook.cells}
|
|
234
|
+
for new_data in cell_changes.data or []:
|
|
235
|
+
nb_cell = nb_cells.get(new_data.document)
|
|
236
|
+
if nb_cell is None:
|
|
237
|
+
logger.warning(
|
|
238
|
+
"Ignoring metadata for '%s': not in notebook.", new_data.document
|
|
239
|
+
)
|
|
240
|
+
continue
|
|
241
|
+
|
|
242
|
+
nb_cell.kind = new_data.kind
|
|
243
|
+
nb_cell.metadata = new_data.metadata
|
|
244
|
+
nb_cell.execution_summary = new_data.execution_summary
|
|
245
|
+
|
|
246
|
+
# Process changes to the notebook's structure
|
|
247
|
+
structure = cell_changes.structure
|
|
248
|
+
if structure:
|
|
249
|
+
cells = notebook.cells
|
|
250
|
+
new_cells = structure.array.cells or []
|
|
251
|
+
|
|
252
|
+
# Re-order the cells
|
|
253
|
+
before = cells[: structure.array.start]
|
|
254
|
+
after = cells[(structure.array.start + structure.array.delete_count) :]
|
|
255
|
+
notebook.cells = [*before, *new_cells, *after]
|
|
256
|
+
|
|
257
|
+
for new_cell in structure.did_open or []:
|
|
258
|
+
self.put_text_document(new_cell, notebook_uri=uri)
|
|
259
|
+
|
|
260
|
+
for removed_cell in structure.did_close or []:
|
|
261
|
+
self.remove_text_document(removed_cell.uri)
|
|
262
|
+
|
|
263
|
+
# Process changes to the text content of existing cells.
|
|
264
|
+
for text in cell_changes.text_content or []:
|
|
265
|
+
for change in text.changes:
|
|
266
|
+
self.update_text_document(text.document, change)
|
|
267
|
+
|
|
268
|
+
def update_text_document(
|
|
269
|
+
self,
|
|
270
|
+
text_doc: types.VersionedTextDocumentIdentifier,
|
|
271
|
+
change: types.TextDocumentContentChangeEvent,
|
|
272
|
+
):
|
|
273
|
+
doc_uri = text_doc.uri
|
|
274
|
+
self._text_documents[doc_uri].apply_change(change)
|
|
275
|
+
self._text_documents[doc_uri].version = text_doc.version
|
|
276
|
+
|
|
277
|
+
def get_document(self, *args, **kwargs):
|
|
278
|
+
warnings.warn(
|
|
279
|
+
"'workspace.get_document' has been deprecated, use "
|
|
280
|
+
"'workspace.get_text_document' instead",
|
|
281
|
+
DeprecationWarning,
|
|
282
|
+
stacklevel=2,
|
|
283
|
+
)
|
|
284
|
+
return self.get_text_document(*args, **kwargs)
|
|
285
|
+
|
|
286
|
+
def remove_document(self, *args, **kwargs):
|
|
287
|
+
warnings.warn(
|
|
288
|
+
"'workspace.remove_document' has been deprecated, use "
|
|
289
|
+
"'workspace.remove_text_document' instead",
|
|
290
|
+
DeprecationWarning,
|
|
291
|
+
stacklevel=2,
|
|
292
|
+
)
|
|
293
|
+
return self.remove_text_document(*args, **kwargs)
|
|
294
|
+
|
|
295
|
+
def put_document(self, *args, **kwargs):
|
|
296
|
+
warnings.warn(
|
|
297
|
+
"'workspace.put_document' has been deprecated, use "
|
|
298
|
+
"'workspace.put_text_document' instead",
|
|
299
|
+
DeprecationWarning,
|
|
300
|
+
stacklevel=2,
|
|
301
|
+
)
|
|
302
|
+
return self.put_text_document(*args, **kwargs)
|
|
303
|
+
|
|
304
|
+
def update_document(self, *args, **kwargs):
|
|
305
|
+
warnings.warn(
|
|
306
|
+
"'workspace.update_document' has been deprecated, use "
|
|
307
|
+
"'workspace.update_text_document' instead",
|
|
308
|
+
DeprecationWarning,
|
|
309
|
+
stacklevel=2,
|
|
310
|
+
)
|
|
311
|
+
return self.update_text_document(*args, **kwargs)
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
jaclang/__init__.py,sha256=hHNAhA8Wkv1is6PThsxehCzVdDXtVfcw6DCnOgpzRM4,227
|
|
2
|
+
jaclang/cli/__init__.py,sha256=RSosEgm2M0H8QS-H1i-qwVrnHcMClY2TGQlGWPRlXYE,175
|
|
3
|
+
jaclang/cli/cli.jac,sha256=iXYL81omJovakmxKtmK2aFmGFYCFxe_UhsxmkDkGolQ,1022
|
|
4
|
+
jaclang/cli/cmds.jac,sha256=N0028kyIi7Yk7Zxln_8SGYDhRzbPHAX_OiMKQAMYn1g,535
|
|
5
|
+
jaclang/cli/__jac_gen__/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
6
|
+
jaclang/cli/__jac_gen__/cli.py,sha256=UfsCHmH6xQQs9Ef4uvncMPALKuTvO8dfg-dcCeMEL8Y,8172
|
|
7
|
+
jaclang/cli/__jac_gen__/cmds.py,sha256=wnsWnAPL9RjEFkpVkObMNWlc6WIRsEst0vmnZRXtGGE,6056
|
|
8
|
+
jaclang/cli/impl/__init__.py,sha256=BTgKqQqL0RDRnEdtLK_MhdR-rLSDnw39xLabPKUotqU,39
|
|
9
|
+
jaclang/cli/impl/cli_impl.jac,sha256=C15SWvyhk3hTlzm3pUeW_Ec-CQtyJqIQv_7GRBvHWPc,2893
|
|
10
|
+
jaclang/cli/impl/cmds_impl.jac,sha256=S5sZLD8wuwECIZk7uHn3B-3gq7yyJPPDv4vaLGt3eos,2453
|
|
11
|
+
jaclang/cli/impl/__jac_gen__/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
12
|
+
jaclang/cli/impl/__jac_gen__/cli_impl.py,sha256=mgItR00YLaK9xBlK2TxBuVY5FHKPhpCbi_ttAbwQM6o,234
|
|
13
|
+
jaclang/cli/impl/__jac_gen__/cmds_impl.py,sha256=N5qjmHUa8Dpi5IgzCh2RP94FFdJfdR_rXLmDSBEGxtY,698
|
|
14
|
+
jaclang/core/__init__.py,sha256=ryqfgdrsv9w9IhhLtrdwGw_V2gkcQ33QCDzrVgC2S6U,249
|
|
15
|
+
jaclang/core/primitives.jac,sha256=jki4papoFkhzSCIpxqmZkRgcbiiiP-UM_vc0DJMrN7w,3007
|
|
16
|
+
jaclang/core/__jac_gen__/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
17
|
+
jaclang/core/__jac_gen__/primitives.py,sha256=JXIOI8rRJxO9ooElXGSLME-MmOxnlrTBsx3jJD40zoY,30057
|
|
18
|
+
jaclang/core/impl/__init__.py,sha256=BTgKqQqL0RDRnEdtLK_MhdR-rLSDnw39xLabPKUotqU,39
|
|
19
|
+
jaclang/core/impl/arch_impl.jac,sha256=L2drGTP4vTEUJUUAsQmzStW0p2w27jbFeRlYIeBEhWM,3869
|
|
20
|
+
jaclang/core/impl/element_impl.jac,sha256=MAPkHiufDKH74eA45L-3efQ-33Y0j0n_Y2owt3FjNdE,3204
|
|
21
|
+
jaclang/core/impl/exec_ctx_impl.jac,sha256=7DcH6cl9jnBOY7olSaLDzVniRRu8U6SWcPhMk7H1rH8,303
|
|
22
|
+
jaclang/core/impl/memory_impl.jac,sha256=R27OWfEajtZ05RxYxR3hjiLYK7SxS9IQyZ9Q6U__L8g,1364
|
|
23
|
+
jaclang/core/impl/__jac_gen__/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
24
|
+
jaclang/core/impl/__jac_gen__/arch_impl.py,sha256=2TldWkmbkN8aSgqWh6UT6Z9roZeqnU73_qkRKtkkmYg,626
|
|
25
|
+
jaclang/core/impl/__jac_gen__/element_impl.py,sha256=RJZOC9FEWex4WV601XzocwlU2bpSIeAwuHECpaotBKw,530
|
|
26
|
+
jaclang/core/impl/__jac_gen__/exec_ctx_impl.py,sha256=swyAaHAsNKX_9GyiFgB9hc-sohb_-t3GYqOlTXlK2bc,391
|
|
27
|
+
jaclang/core/impl/__jac_gen__/memory_impl.py,sha256=KJbXybsm-It7Y9BDdYe6w3laeROCSHrMo3l-hV_Nz_Y,259
|
|
28
|
+
jaclang/jac/__init__.py,sha256=OAIBG-7iYvbebyiu0pJ-lFsua8mD6meBkaTylb8XS64,26
|
|
29
|
+
jaclang/jac/absyntree.py,sha256=2nNaUbFJVwMGo2dh8PI5SgGEC1_iBFjthqAAdE_YXyE,58669
|
|
30
|
+
jaclang/jac/constant.py,sha256=5c04T0JX6hYQ3GX1GmKPvZ_YROwtz_gXDTqtLkzO2bY,5303
|
|
31
|
+
jaclang/jac/importer.py,sha256=GSrgfB4T2rqwvMNl9FPrItXz0GZZ7N1G1x9nJNFgkXM,3607
|
|
32
|
+
jaclang/jac/langserve.py,sha256=qKtt2H2aEr27q_0UPzmcf6vyh7vO0IeJ2TCXflUlg7w,815
|
|
33
|
+
jaclang/jac/lexer.py,sha256=rSODgapTXLN8rTvClgr-Zf1s0LnHhj4SBMPMta9hbFM,11069
|
|
34
|
+
jaclang/jac/parser.py,sha256=yQYM3zf7HisQOvvUhIkbbsMHfwho_T55vjjxZC4KW3c,40895
|
|
35
|
+
jaclang/jac/symtable.py,sha256=EaHavknuxbYooEdHo4NboRkFjKsZoCm0X2Gj3_UHybM,4609
|
|
36
|
+
jaclang/jac/transform.py,sha256=UiYbGWIX6afqzIWnpJXURF_euZKfxSXqREgzEqFCG5o,3563
|
|
37
|
+
jaclang/jac/transpiler.py,sha256=Lhk1ldZzmGhEIe6Zps0_mUcUq_3__DfPQk4p1y7GLdg,2443
|
|
38
|
+
jaclang/jac/passes/__init__.py,sha256=0Tw0d130ZjzA05jVcny9cf5NfLjlaM70PKqFnY4zqn4,69
|
|
39
|
+
jaclang/jac/passes/ir_pass.py,sha256=S0JPHTBN6OR9xcnYbmetWQa13SLN-gWWxFd8A8v6Su8,5553
|
|
40
|
+
jaclang/jac/passes/blue/__init__.py,sha256=zCOjuxAvpHnFtoN_2ky9Vexbasu0QvTh2MUZ-6NfJBk,831
|
|
41
|
+
jaclang/jac/passes/blue/ast_build_pass.py,sha256=Ov8AM7YhLTtwZB6c-iQnkonBDNz3D5tckeIhvLd4ius,101645
|
|
42
|
+
jaclang/jac/passes/blue/blue_pygen_pass.py,sha256=bXYZzEwDMF7oDUlElWUadkmbyPinrbZumTuRPNaAi2w,44976
|
|
43
|
+
jaclang/jac/passes/blue/decl_def_match_pass.py,sha256=ajL4lisiiSzLMqgKEW6WjnFYJAvpYJMcKlqAXab9zZE,2591
|
|
44
|
+
jaclang/jac/passes/blue/import_pass.py,sha256=yWVrIlrSP70IhSO5fWzwQQoaKoFUzobeVVpdJr4s7Cs,2722
|
|
45
|
+
jaclang/jac/passes/blue/pyout_pass.py,sha256=cSPq3iPzCGoMVMkU4ZMA6yCXykmugtVaD6JmSQ9XhdQ,2784
|
|
46
|
+
jaclang/jac/passes/blue/semantic_check_pass.py,sha256=bxyALEl2TSm3S3jF2pfOzyI8MjGiKHx-J29v4Uwza8o,1454
|
|
47
|
+
jaclang/jac/passes/blue/sub_node_tab_pass.py,sha256=FGUJ5AaddsY0pLRrFr66JEaAeD5GCQRKGJ8I-YDVwYs,964
|
|
48
|
+
jaclang/jac/passes/blue/sym_tab_build_pass.py,sha256=dYNgVnVVh3dpYrgM6aHVH0Xn85SN3TfnCYtjygdSFTE,28642
|
|
49
|
+
jaclang/jac/passes/blue/tests/__init__.py,sha256=UBAATLUEH3yuBN4LYKnXXV79kokRc4XB-rX12qfu0ds,28
|
|
50
|
+
jaclang/jac/passes/blue/tests/test_ast_build_pass.py,sha256=vRGN2D7NGgQibmnDen-Muzh5P-c4te-81l4gH42WUDE,2351
|
|
51
|
+
jaclang/jac/passes/blue/tests/test_blue_pygen_pass.py,sha256=ua8e_X44R04j2GlAquP9XYSbvSG-UFoVELKz0h3xoPo,3707
|
|
52
|
+
jaclang/jac/passes/blue/tests/test_decl_def_match_pass.py,sha256=0enG-C6ZB5gm09LI0Os-0NbdlExjCNNxGjix4U1ypcQ,1929
|
|
53
|
+
jaclang/jac/passes/blue/tests/test_import_pass.py,sha256=5__oTikC1BAfQt_iyqYwQEY2ARI-pTEa3Or-qY9kxjk,576
|
|
54
|
+
jaclang/jac/passes/blue/tests/test_sub_node_pass.py,sha256=V4ABc2Na4YoQ6--TP3nH1gSRK0KZrsQp6H_iybDWryc,842
|
|
55
|
+
jaclang/jac/passes/blue/tests/test_sym_tab_build_pass.py,sha256=omZBAfcFdADGmQzELJFHNekNBeeqr3q4hwcdz-gLPwo,710
|
|
56
|
+
jaclang/jac/passes/purple/__init__.py,sha256=Sh2SmmpsVtn6Kzqqdvt-wYnNtOmm4Bm0IwKNfBb6gcI,471
|
|
57
|
+
jaclang/jac/passes/purple/analyze_pass.jac,sha256=GcvLNEYm6rAicPqwxxBcTMOy5uyHjT3kW1385LF_FzU,928
|
|
58
|
+
jaclang/jac/passes/purple/purple_pygen_pass.jac,sha256=KRyPSjD4QwdSQ1-FsnrmJl6XxGqivhNxAjCiUwBjkFc,1339
|
|
59
|
+
jaclang/jac/passes/purple/__jac_gen__/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
60
|
+
jaclang/jac/passes/purple/__jac_gen__/analyze_pass.py,sha256=OAWjPeYMrJ9rNPuMz9-aGY8-xfzQecVHxA59VGKaCzg,1798
|
|
61
|
+
jaclang/jac/passes/purple/__jac_gen__/purple_pygen_pass.py,sha256=hcpbzNhgpAT1kyool47lOwhrQc8ufyPHM8HmjUnIjdc,17204
|
|
62
|
+
jaclang/jac/passes/purple/impl/__init__.py,sha256=BTgKqQqL0RDRnEdtLK_MhdR-rLSDnw39xLabPKUotqU,39
|
|
63
|
+
jaclang/jac/passes/purple/impl/purple_pygen_pass_impl.jac,sha256=1Oog1VmbndqG6I6AGGadmB0kvIZz7dK_RaIBh7Np3Dc,8291
|
|
64
|
+
jaclang/jac/passes/purple/impl/__jac_gen__/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
65
|
+
jaclang/jac/passes/purple/impl/__jac_gen__/purple_pygen_pass_impl.py,sha256=9TGO9T7HnW_3AMi-KW07oi6ZLx8TK1V7Xc8bgnBA52U,362
|
|
66
|
+
jaclang/jac/tests/__init__.py,sha256=qiXa5UNRBanGOcplFKTT9a_9GEyiv7goq1OzuCjDCFE,27
|
|
67
|
+
jaclang/jac/tests/test_importer.py,sha256=mb5c6jb_1cQuW11nxwdJ8ezizuYn26GkIY4bnoY_LJQ,743
|
|
68
|
+
jaclang/jac/tests/test_lexer.py,sha256=-17tdYer5fornLcZh6vf-dy_wq51cpxbWVAIhQVd4OU,1982
|
|
69
|
+
jaclang/jac/tests/test_parser.py,sha256=gI35twfzqHdptJTfp7VnJ6NVxFc6J7J4TH02iVuso9E,2512
|
|
70
|
+
jaclang/jac/tests/fixtures/__init__.py,sha256=udQ0T6rajpW_nMiYKJNckqP8izZ-pH3P4PNTJEln2NU,36
|
|
71
|
+
jaclang/jac/tests/fixtures/activity.py,sha256=fSvxYDKufsPeQIrbuh031zHw_hdbRv5iK9mS7dD8E54,263
|
|
72
|
+
jaclang/jac/tests/fixtures/fam.jac,sha256=sxiTRlWzebfAdZZqFkw5a61VkAPkl1pCzN5-cIgP5wQ,1535
|
|
73
|
+
jaclang/jac/tests/fixtures/hello_world.jac,sha256=uT67nGzdYY7YT6Xj5-OHFAZPEHfIl4zGlfyNs7-zRBI,78
|
|
74
|
+
jaclang/jac/tests/fixtures/kwesc.jac,sha256=OXxVL_fwiFuvYO1YX1RHa2hpETSpb0QD1-gMYnMY6DA,103
|
|
75
|
+
jaclang/jac/tests/fixtures/lexer_fam.jac,sha256=J_bcFC2RnsBxvEsTUoOIgFowkpibbhpB7FSAMYuG9RM,1394
|
|
76
|
+
jaclang/jac/tests/fixtures/mod_doc_test.jac,sha256=p3n-JMJAerocPBA0p_MGf_F7KY-OosIqjHEqcjVrB30,31
|
|
77
|
+
jaclang/jac/tests/fixtures/stuff.jac,sha256=5gFmEO8iPGFoj3xeblcfMF2DA1d-ANJIMjdzlMxEnYU,85
|
|
78
|
+
jaclang/jac/tests/fixtures/__jac_gen__/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
79
|
+
jaclang/jac/tests/fixtures/__jac_gen__/hello_world.py,sha256=wwsJ9fmxMNEYTm_pgJxf3j4MxL4uFGa3KSDPlFnfIak,724
|
|
80
|
+
jaclang/utils/__init__.py,sha256=86LQ_LDyWV-JFkYBpeVHpLaVxkqwFDP60XpWXOFZIQk,46
|
|
81
|
+
jaclang/utils/fstring_parser.py,sha256=TimlAwLdfiYKoUbAIpt3XnaE0i-3DoLbQVf9dbyLk5c,1847
|
|
82
|
+
jaclang/utils/helpers.py,sha256=eURUEoEFbW3ZtEu2fNo5J1GZBLBEp8aDp2Y2XBA0K0Y,3281
|
|
83
|
+
jaclang/utils/lang_tools.py,sha256=R3b9ayrbriBqrOj1w2rZd_1tAw7Ccs_SH0RU1Vi8Pd0,4476
|
|
84
|
+
jaclang/utils/log.py,sha256=copXpha4IB2NsffbhRD4GePA18_ePO39bVBPMBPqhkk,239
|
|
85
|
+
jaclang/utils/test.py,sha256=gyGBridCwqZ298MTjKit3cMq77qhuoLbiTzOYJLaPGg,5494
|
|
86
|
+
jaclang/utils/tests/__init__.py,sha256=8uwVqMsc6cxBAM1DuHLuNuTnzLXqOqM-WRa4ixOMF6w,23
|
|
87
|
+
jaclang/utils/tests/test_fstring_parser.py,sha256=8nZPKhGZA0JNRQ1jhQkXRsjGV6pBK-jKEEf2nFevYK8,1887
|
|
88
|
+
jaclang/vendor/__init__.py,sha256=pbflH5hBfDiKfTJEjIXId44Eof8CVmXQlZwFYDG6_4E,35
|
|
89
|
+
jaclang/vendor/pygls/__init__.py,sha256=rdTb3X-53tCjgNpS5dRsxv0ukMDjEly2pVEOPTnjx5k,1488
|
|
90
|
+
jaclang/vendor/pygls/capabilities.py,sha256=7aZUMTd2J0oRHUbeHhUeUVLBb93oAcdkQZQY4ZRPfFs,17658
|
|
91
|
+
jaclang/vendor/pygls/client.py,sha256=3EvTP439id8f1uzy1R-Zpt0EGG4OIjG_oH2pC2WyKlw,6337
|
|
92
|
+
jaclang/vendor/pygls/constants.py,sha256=0YsX4Egp9jVLuAu9v8T_ThrObrVKGP916-X-9bkmId8,1470
|
|
93
|
+
jaclang/vendor/pygls/exceptions.py,sha256=iAfWKNPO6uFEaPpMkf9rbnRe1I3sYT4DR3ze91o1Jh8,6370
|
|
94
|
+
jaclang/vendor/pygls/feature_manager.py,sha256=N403-0jqv5b4cYeatFPKNfL76c9FcRtdzocHQWVMJB8,8434
|
|
95
|
+
jaclang/vendor/pygls/progress.py,sha256=5xwlao6-UCSh9TK0ffK3w72wjDSvpSDqTutmabM2vEY,2825
|
|
96
|
+
jaclang/vendor/pygls/protocol.py,sha256=lLELIzpQ2zPK5kN7teYKsUObcVgxrzaLrfC4bv36jiU,41340
|
|
97
|
+
jaclang/vendor/pygls/server.py,sha256=F_CTFv0SbJ6WfPl8MZKow7BzQO-SGj4FZczoN6aQxjs,20881
|
|
98
|
+
jaclang/vendor/pygls/uris.py,sha256=n8MfRSlvj-diWq9CCXrycTBWBcaNgrqag15Sm1HLJoU,5779
|
|
99
|
+
jaclang/vendor/pygls/lsp/__init__.py,sha256=URAOdA_FXSE6-LxTfO_F3u5MdSb_R2zz-HkAOfglQC0,5265
|
|
100
|
+
jaclang/vendor/pygls/lsp/client.py,sha256=kc5rtO0rCzKb4wj4G0NqlbcRkxJe0DzrqzjmdXcLszQ,80284
|
|
101
|
+
jaclang/vendor/pygls/lsprotocol/__init__.py,sha256=zoT6Do2JtGHGb7pOeKpahg4ocXIsSpyowjhOrhUhx8g,94
|
|
102
|
+
jaclang/vendor/pygls/lsprotocol/_hooks.py,sha256=hJ1uS0djVixu8meiqD3Mo40CgZl7E3klVF-0ms1x1cE,41477
|
|
103
|
+
jaclang/vendor/pygls/lsprotocol/converters.py,sha256=404tQOVoZL31R9CBrDe6Gx9Nok5cRph3glKlnSx00fo,433
|
|
104
|
+
jaclang/vendor/pygls/lsprotocol/types.py,sha256=sytY5l8QZUzv0UdNVSgTuv_E1ZJMpx3gdSCEAubZUig,451052
|
|
105
|
+
jaclang/vendor/pygls/lsprotocol/validators.py,sha256=5UMUmWhk52_Ps66_KFydjNkMfLNUsPH3wmV0Buv645s,1420
|
|
106
|
+
jaclang/vendor/pygls/workspace/__init__.py,sha256=8tHFq8qiKsMFQQ8rX6kn8sDR3CC6IlW0Jqew0nsEHdc,2248
|
|
107
|
+
jaclang/vendor/pygls/workspace/position.py,sha256=gYZM3kXLEh31Z4S-v7zVIwgjRQ7g3ngxf53HGP_aUOs,7969
|
|
108
|
+
jaclang/vendor/pygls/workspace/text_document.py,sha256=28kKECI4_aJK2GgMVpLS2jkh1rdwdlvqhze0RVBv6SA,8969
|
|
109
|
+
jaclang/vendor/pygls/workspace/workspace.py,sha256=KHYK77yalWXNZs2aueSzUbwQbmhay4NGgP9cRbhXKDQ,11224
|
|
110
|
+
jaclang/vendor/sly/__init__.py,sha256=G1Y7oQ8BtApOGEYXGego223AMaq-8iQnVCn10sKmX8U,115
|
|
111
|
+
jaclang/vendor/sly/docparse.py,sha256=YfDcZCuL1-5AIymgPPXsghdZuD7qSSIpiTUeQSRCFH0,1957
|
|
112
|
+
jaclang/vendor/sly/lex.py,sha256=EyK1PDut3uF22Mc60Kcpa58ybfmV02p8L7ylz_1UVuY,16846
|
|
113
|
+
jaclang/vendor/sly/yacc.py,sha256=KKoDgnmAL6DRpRuatC3WpX2TTjvtcDA5SZ25uCudYvo,88197
|
|
114
|
+
jaclang-0.0.8.dist-info/METADATA,sha256=Oiq86lm3Aq9A7wc2aQpRfOk0uuFVh0UvNFyap7YdeWE,152
|
|
115
|
+
jaclang-0.0.8.dist-info/WHEEL,sha256=yQN5g4mg4AybRjkgi-9yy4iQEFibGQmlz78Pik5Or-A,92
|
|
116
|
+
jaclang-0.0.8.dist-info/entry_points.txt,sha256=xtRv4MQ7W9E_vTxR3JTCHmtDd9TRitKRuI9KOKdR7oM,50
|
|
117
|
+
jaclang-0.0.8.dist-info/top_level.txt,sha256=ZOAoLpE67ozkUJd-v3C59wBNXiteRD8IWPbsYB3M08g,8
|
|
118
|
+
jaclang-0.0.8.dist-info/RECORD,,
|
jaclang/core/jaclang.jac
DELETED
|
@@ -1,62 +0,0 @@
|
|
|
1
|
-
"""Jac's Key Elemental Abstractions"""
|
|
2
|
-
|
|
3
|
-
import:jac from primitives, Element, Object, Node, Edge, Walker;
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
# object Element {
|
|
7
|
-
# has _jinfo: ElementMetaData = ElementMetaData();
|
|
8
|
-
|
|
9
|
-
# can _jac_make_public_ro;
|
|
10
|
-
# can _jac_make_public_rw;
|
|
11
|
-
# can _jac_make_private;
|
|
12
|
-
# can _jac_is_public_ro -> bool;
|
|
13
|
-
# can _jac_is_public_rw -> bool;
|
|
14
|
-
# can _jac_is_private -> bool;
|
|
15
|
-
# can _jac_is_readable(caller_id: UUID) -> bool;
|
|
16
|
-
# can _jac_is_writable(caller_id: UUID) -> bool;
|
|
17
|
-
# can _jac_give_access(caller_id: UUID, read_write: bool = False);
|
|
18
|
-
# can _jac_revoke_access(caller_id: UUID);
|
|
19
|
-
# }
|
|
20
|
-
|
|
21
|
-
# object Object:Element {
|
|
22
|
-
# static has _jac_ds_entry_funcs: list[dict]=[],
|
|
23
|
-
# _jac_ds_exit_funcs: list[dict]=[];
|
|
24
|
-
|
|
25
|
-
# static can _jac_on_entry(cls: type, triggers: list[type]);
|
|
26
|
-
# static can _jac_on_exit(cls: type, triggers: list[type]);
|
|
27
|
-
# }
|
|
28
|
-
|
|
29
|
-
# object Node:Object {
|
|
30
|
-
# has _jac_edges_: dict[EdgeDir, list[Edge]]
|
|
31
|
-
# = {EdgeDir.IN: [], EdgeDir.OUT: []};
|
|
32
|
-
|
|
33
|
-
# can __call__(walk: Walker);
|
|
34
|
-
# can _jac_connect_node_(nd: Node, edg: Edge) -> Node;
|
|
35
|
-
# can _jac_edges_to_nodes_(dir: EdgeDir) -> list[Node];
|
|
36
|
-
# }
|
|
37
|
-
|
|
38
|
-
# object Edge:Object {
|
|
39
|
-
# has _jac_source_: Node?,
|
|
40
|
-
# _jac_target_: Node?,
|
|
41
|
-
# _jac_dir_: EdgeDir?;
|
|
42
|
-
|
|
43
|
-
# can __call__(walk: Walker);
|
|
44
|
-
# can _jac_apply_dir_(dir: EdgeDir) -> Edge;
|
|
45
|
-
# can _jac_attach_(src: Node, trg: Node) -> Edge;
|
|
46
|
-
# }
|
|
47
|
-
|
|
48
|
-
# object Walker:Object {
|
|
49
|
-
# has _jac_path_: list[Node] = [],
|
|
50
|
-
# _jac_next_: list[Node] = [],
|
|
51
|
-
# _jac_disengaged_: bool = False;
|
|
52
|
-
|
|
53
|
-
# can __call__(nd: Node);
|
|
54
|
-
# can _jac_visit_(nds: list[Node]|list[Edge]);
|
|
55
|
-
# can _jac_disengage_;
|
|
56
|
-
# }
|
|
57
|
-
|
|
58
|
-
# object Master:Element {
|
|
59
|
-
# has root_node: Node = Node();
|
|
60
|
-
# }
|
|
61
|
-
|
|
62
|
-
# can make_architype(base_class: type) -> type;
|
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
"""Test type analyze pass module."""
|
|
2
|
-
import inspect
|
|
3
|
-
|
|
4
|
-
from jaclang.jac.passes.blue import BluePygenPass, TypeAnalyzePass
|
|
5
|
-
from jaclang.jac.transpiler import jac_file_to_pass
|
|
6
|
-
from jaclang.utils.helpers import get_ast_nodes_as_snake_case as ast_snakes
|
|
7
|
-
from jaclang.utils.test import TestCaseMicroSuite
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
class TypeAnalyzePassTests(TestCaseMicroSuite):
|
|
11
|
-
"""Test pass module."""
|
|
12
|
-
|
|
13
|
-
def setUp(self) -> None:
|
|
14
|
-
"""Set up test."""
|
|
15
|
-
return super().setUp()
|
|
16
|
-
|
|
17
|
-
def test_pygen_jac_cli(self) -> None:
|
|
18
|
-
"""Basic test for pass."""
|
|
19
|
-
code_gen = jac_file_to_pass(
|
|
20
|
-
self.fixture_abs_path("../../../../../cli/cli.jac"), target=BluePygenPass
|
|
21
|
-
)
|
|
22
|
-
# print(code_gen.ir.meta["py_code"])
|
|
23
|
-
self.assertFalse(code_gen.errors_had)
|
|
24
|
-
self.assertGreater(len(code_gen.ir.meta["py_code"]), 200)
|
|
25
|
-
|
|
26
|
-
def test_pass_ast_complete(self) -> None:
|
|
27
|
-
"""Test for enter/exit name diffs with parser."""
|
|
28
|
-
ast_func_names = [
|
|
29
|
-
x for x in ast_snakes() if x not in ["ast_node", "o_o_p_access_node"]
|
|
30
|
-
]
|
|
31
|
-
pygen_func_names = []
|
|
32
|
-
for name, value in inspect.getmembers(TypeAnalyzePass):
|
|
33
|
-
if (
|
|
34
|
-
(name.startswith("enter_") or name.startswith("exit_"))
|
|
35
|
-
and inspect.isfunction(value)
|
|
36
|
-
and not getattr(TypeAnalyzePass.__base__, value.__name__, False)
|
|
37
|
-
and value.__qualname__.split(".")[0]
|
|
38
|
-
== TypeAnalyzePass.__name__.replace("enter_", "").replace("exit_", "")
|
|
39
|
-
):
|
|
40
|
-
pygen_func_names.append(name.replace("enter_", "").replace("exit_", ""))
|
|
41
|
-
for name in pygen_func_names:
|
|
42
|
-
self.assertIn(name, ast_func_names)
|
|
43
|
-
for name in ast_func_names:
|
|
44
|
-
self.assertIn(name, pygen_func_names)
|
|
45
|
-
|
|
46
|
-
def micro_suite_test(self, filename: str) -> None:
|
|
47
|
-
"""Parse micro jac file."""
|
|
48
|
-
ast = jac_file_to_pass(filename, "", target=BluePygenPass).ir
|
|
49
|
-
typed_ast = TypeAnalyzePass(mod_path=filename, input_ir=ast).ir
|
|
50
|
-
self.assertGreater(len(str(typed_ast.to_dict())), 10)
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
TypeAnalyzePassTests.self_attach_micro_tests()
|