jaclang 0.7.18__py3-none-any.whl → 0.7.19__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/cli/cli.py +2 -2
- jaclang/compiler/passes/ir_pass.py +2 -0
- jaclang/compiler/passes/main/import_pass.py +2 -1
- jaclang/compiler/passes/main/py_collect_dep_pass.py +8 -0
- jaclang/compiler/passes/main/registry_pass.py +4 -0
- jaclang/compiler/passes/main/tests/fixtures/pygame_mock/__init__.pyi +3 -0
- jaclang/compiler/passes/main/tests/test_import_pass.py +10 -10
- jaclang/compiler/passes/main/type_check_pass.py +4 -4
- jaclang/compiler/passes/tool/jac_formatter_pass.py +50 -32
- jaclang/compiler/passes/tool/tests/fixtures/general_format_checks/line_spacing.jac +55 -0
- jaclang/langserve/engine.py +4 -1
- jaclang/langserve/tests/test_server.py +2 -2
- jaclang/runtimelib/importer.py +1 -0
- jaclang/runtimelib/machine.py +45 -3
- jaclang/settings.py +4 -0
- jaclang/tests/fixtures/bar.jac +1 -1
- jaclang/tests/fixtures/foo.jac +0 -1
- jaclang/tests/fixtures/walker_update.jac +19 -0
- jaclang/tests/test_language.py +60 -2
- {jaclang-0.7.18.dist-info → jaclang-0.7.19.dist-info}/METADATA +4 -2
- {jaclang-0.7.18.dist-info → jaclang-0.7.19.dist-info}/RECORD +23 -20
- {jaclang-0.7.18.dist-info → jaclang-0.7.19.dist-info}/WHEEL +0 -0
- {jaclang-0.7.18.dist-info → jaclang-0.7.19.dist-info}/entry_points.txt +0 -0
jaclang/cli/cli.py
CHANGED
|
@@ -429,8 +429,8 @@ def dot(
|
|
|
429
429
|
|
|
430
430
|
if filename.endswith(".jac"):
|
|
431
431
|
jac_machine = JacMachine(base)
|
|
432
|
-
jac_import(target=mod, base_path=base)
|
|
433
|
-
module = jac_machine.loaded_modules.get(
|
|
432
|
+
jac_import(target=mod, base_path=base, override_name="__main__")
|
|
433
|
+
module = jac_machine.loaded_modules.get("__main__")
|
|
434
434
|
globals().update(vars(module))
|
|
435
435
|
try:
|
|
436
436
|
node = globals().get(initial, eval(initial)) if initial else None
|
|
@@ -13,6 +13,7 @@ from typing import Optional
|
|
|
13
13
|
import jaclang.compiler.absyntree as ast
|
|
14
14
|
from jaclang.compiler.passes import Pass
|
|
15
15
|
from jaclang.compiler.passes.main import SubNodeTabPass, SymTabBuildPass
|
|
16
|
+
from jaclang.settings import settings
|
|
16
17
|
from jaclang.utils.log import logging
|
|
17
18
|
|
|
18
19
|
|
|
@@ -105,7 +106,7 @@ class JacImportPass(Pass):
|
|
|
105
106
|
or test_folder == os.path.dirname(cur_file)
|
|
106
107
|
) and cur_file.endswith(".test.jac"):
|
|
107
108
|
mod = self.import_jac_mod_from_file(cur_file)
|
|
108
|
-
if mod:
|
|
109
|
+
if mod and not settings.ignore_test_annex:
|
|
109
110
|
node.test_mod.append(mod)
|
|
110
111
|
node.add_kids_right([mod], pos_update=False)
|
|
111
112
|
mod.parent = node
|
|
@@ -7,6 +7,8 @@ that are only relevant to actual references source from Jac code.
|
|
|
7
7
|
from __future__ import annotations
|
|
8
8
|
|
|
9
9
|
|
|
10
|
+
import os
|
|
11
|
+
|
|
10
12
|
import jaclang.compiler.absyntree as ast
|
|
11
13
|
from jaclang.compiler.passes import Pass
|
|
12
14
|
from jaclang.settings import settings
|
|
@@ -28,11 +30,15 @@ class PyCollectDepsPass(Pass):
|
|
|
28
30
|
if not isinstance(node, ast.AstSymbolNode):
|
|
29
31
|
return
|
|
30
32
|
|
|
33
|
+
# Adding the path of the file related to the py import
|
|
31
34
|
path: str = ""
|
|
32
35
|
if isinstance(node, ast.ModulePath):
|
|
33
36
|
if node.path:
|
|
34
37
|
path = ".".join([i.value for i in node.path])
|
|
35
38
|
node.abs_path = self.ir.py_mod_dep_map.get(path)
|
|
39
|
+
if node.abs_path and os.path.isfile(node.abs_path.replace(".pyi", ".py")):
|
|
40
|
+
node.abs_path = node.abs_path.replace(".pyi", ".py")
|
|
41
|
+
|
|
36
42
|
elif isinstance(node, ast.ModuleItem):
|
|
37
43
|
imp = node.parent_of_type(ast.Import)
|
|
38
44
|
mod_path_node = imp.get_all_sub_nodes(ast.ModulePath)[0]
|
|
@@ -40,6 +46,8 @@ class PyCollectDepsPass(Pass):
|
|
|
40
46
|
path = ".".join([i.value for i in mod_path_node.path])
|
|
41
47
|
path += f".{node.name.value}"
|
|
42
48
|
node.abs_path = self.ir.py_mod_dep_map.get(path)
|
|
49
|
+
if node.abs_path and os.path.isfile(node.abs_path.replace(".pyi", ".py")):
|
|
50
|
+
node.abs_path = node.abs_path.replace(".pyi", ".py")
|
|
43
51
|
|
|
44
52
|
if len(node.gen.mypy_ast) == 0:
|
|
45
53
|
return
|
|
@@ -14,6 +14,7 @@ from jaclang.compiler.constant import Constants as Con
|
|
|
14
14
|
from jaclang.compiler.passes import Pass
|
|
15
15
|
from jaclang.compiler.semtable import SemInfo, SemRegistry
|
|
16
16
|
from jaclang.runtimelib.utils import get_sem_scope
|
|
17
|
+
from jaclang.settings import settings
|
|
17
18
|
|
|
18
19
|
|
|
19
20
|
class RegistryPass(Pass):
|
|
@@ -23,6 +24,9 @@ class RegistryPass(Pass):
|
|
|
23
24
|
|
|
24
25
|
def enter_module(self, node: ast.Module) -> None:
|
|
25
26
|
"""Create registry for each module."""
|
|
27
|
+
if settings.disable_mtllm:
|
|
28
|
+
self.terminate()
|
|
29
|
+
return None
|
|
26
30
|
node.registry = SemRegistry()
|
|
27
31
|
self.modules_visited.append(node)
|
|
28
32
|
|
|
@@ -70,19 +70,19 @@ class ImportPassPassTests(TestCase):
|
|
|
70
70
|
)
|
|
71
71
|
assert isinstance(build.ir, ast.Module)
|
|
72
72
|
p = {
|
|
73
|
-
"math": "jaclang/
|
|
74
|
-
"pygame_mock": "pygame_mock/__init__.
|
|
75
|
-
"pygame_mock.color": "pygame_mock/color.py",
|
|
76
|
-
"pygame_mock.constants": "pygame_mock/constants.py",
|
|
77
|
-
"argparse": "jaclang/vendor/mypy/typeshed/stdlib/argparse.pyi",
|
|
78
|
-
"builtins": "jaclang/vendor/mypy/typeshed/stdlib/builtins.pyi",
|
|
79
|
-
"pygame_mock.display": "pygame_mock/display.py",
|
|
80
|
-
"os": "jaclang/vendor/mypy/typeshed/stdlib/os/__init__.pyi",
|
|
81
|
-
"genericpath": "jaclang/vendor/mypy/typeshed/stdlib/genericpath.pyi",
|
|
73
|
+
"math": r"jaclang/vendor/mypy/typeshed/stdlib/math.pyi$",
|
|
74
|
+
"pygame_mock": r"pygame_mock/__init__.pyi$",
|
|
75
|
+
"pygame_mock.color": r"pygame_mock/color.py$",
|
|
76
|
+
"pygame_mock.constants": r"pygame_mock/constants.py$",
|
|
77
|
+
"argparse": r"jaclang/vendor/mypy/typeshed/stdlib/argparse.pyi$",
|
|
78
|
+
"builtins": r"jaclang/vendor/mypy/typeshed/stdlib/builtins.pyi$",
|
|
79
|
+
"pygame_mock.display": r"pygame_mock/display.py$",
|
|
80
|
+
"os": r"jaclang/vendor/mypy/typeshed/stdlib/os/__init__.pyi$",
|
|
81
|
+
"genericpath": r"jaclang/vendor/mypy/typeshed/stdlib/genericpath.pyi$",
|
|
82
82
|
}
|
|
83
83
|
for i in p:
|
|
84
84
|
self.assertIn(i, build.ir.py_raise_map)
|
|
85
|
-
self.
|
|
85
|
+
self.assertRegex(re.sub(r".*fixtures/", "", build.ir.py_raise_map[i]), p[i])
|
|
86
86
|
|
|
87
87
|
def test_py_raised_mods(self) -> None:
|
|
88
88
|
"""Basic test for pass."""
|
|
@@ -51,10 +51,10 @@ class JacTypeCheckPass(Pass):
|
|
|
51
51
|
options.ignore_missing_imports = True
|
|
52
52
|
options.cache_dir = Con.JAC_MYPY_CACHE
|
|
53
53
|
options.mypy_path = [
|
|
54
|
-
str(
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
)
|
|
54
|
+
# str( # TODO: Remove me, this was the wrong way to point to stubs
|
|
55
|
+
# pathlib.Path(os.path.dirname(__file__)).parent.parent.parent.parent
|
|
56
|
+
# / "stubs"
|
|
57
|
+
# )
|
|
58
58
|
]
|
|
59
59
|
if top_module_path != "":
|
|
60
60
|
options.mypy_path.append(top_module_path)
|
|
@@ -126,11 +126,14 @@ class JacFormatPass(Pass):
|
|
|
126
126
|
last_element = None
|
|
127
127
|
for counter, i in enumerate(node.body):
|
|
128
128
|
counter += 1
|
|
129
|
+
if last_element and (
|
|
130
|
+
i.loc.first_line - last_element.loc.last_line > 1
|
|
131
|
+
and not last_element.gen.jac.endswith("\n\n")
|
|
132
|
+
):
|
|
133
|
+
self.emit_ln(node, "")
|
|
129
134
|
if isinstance(i, ast.Import):
|
|
130
135
|
self.emit_ln(node, i.gen.jac)
|
|
131
136
|
else:
|
|
132
|
-
if isinstance(last_element, ast.Import):
|
|
133
|
-
self.emit_ln(node, "")
|
|
134
137
|
if last_element and (
|
|
135
138
|
isinstance(i, ast.Architype)
|
|
136
139
|
and isinstance(last_element, ast.Architype)
|
|
@@ -140,21 +143,6 @@ class JacFormatPass(Pass):
|
|
|
140
143
|
self.emit_ln(node, "")
|
|
141
144
|
self.emit_ln(node, i.gen.jac)
|
|
142
145
|
|
|
143
|
-
if counter <= len(node.body) - 1:
|
|
144
|
-
if (
|
|
145
|
-
isinstance(i, ast.Ability)
|
|
146
|
-
and isinstance(node.body[counter], ast.Ability)
|
|
147
|
-
and i.gen.jac.endswith(";")
|
|
148
|
-
or (
|
|
149
|
-
isinstance(i, ast.Architype)
|
|
150
|
-
and len(node.body[counter].kid[-1].kid) == 2
|
|
151
|
-
and len(node.body[counter - 1].kid[-1].kid) == 2
|
|
152
|
-
)
|
|
153
|
-
and node.gen.jac.endswith("\n")
|
|
154
|
-
):
|
|
155
|
-
self.emit(node, "")
|
|
156
|
-
else:
|
|
157
|
-
self.emit_ln(node, "")
|
|
158
146
|
last_element = i
|
|
159
147
|
|
|
160
148
|
def exit_global_vars(self, node: ast.GlobalVars) -> None:
|
|
@@ -222,6 +210,20 @@ class JacFormatPass(Pass):
|
|
|
222
210
|
"""
|
|
223
211
|
prev_token = None
|
|
224
212
|
for stmt in node.kid:
|
|
213
|
+
line_emiited = False
|
|
214
|
+
if prev_token and stmt.loc.first_line - prev_token.loc.last_line > 1:
|
|
215
|
+
if (
|
|
216
|
+
stmt.kid
|
|
217
|
+
and isinstance(stmt.kid[-1], ast.SubNodeList)
|
|
218
|
+
and not isinstance(stmt.kid[-1].kid[-1], ast.CommentToken)
|
|
219
|
+
):
|
|
220
|
+
self.emit(node, "")
|
|
221
|
+
|
|
222
|
+
else:
|
|
223
|
+
line_emiited = True
|
|
224
|
+
self.indent_level -= 1
|
|
225
|
+
self.emit_ln(node, "")
|
|
226
|
+
self.indent_level += 1
|
|
225
227
|
if isinstance(node.parent, (ast.EnumDef, ast.Enum)) and stmt.gen.jac == ",":
|
|
226
228
|
self.indent_level -= 1
|
|
227
229
|
self.emit_ln(node, f"{stmt.gen.jac}")
|
|
@@ -266,9 +268,10 @@ class JacFormatPass(Pass):
|
|
|
266
268
|
self.indent_level += 1
|
|
267
269
|
else:
|
|
268
270
|
self.emit(node, f" {stmt.gen.jac}")
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
271
|
+
if not line_emiited:
|
|
272
|
+
self.indent_level -= 1
|
|
273
|
+
self.emit_ln(node, "")
|
|
274
|
+
self.indent_level += 1
|
|
272
275
|
else:
|
|
273
276
|
if not node.gen.jac.endswith("\n"):
|
|
274
277
|
self.indent_level -= 1
|
|
@@ -280,11 +283,10 @@ class JacFormatPass(Pass):
|
|
|
280
283
|
self.emit(node, f"{stmt.gen.jac}")
|
|
281
284
|
else:
|
|
282
285
|
self.emit(node, stmt.gen.jac)
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
self.indent_level += 1
|
|
286
|
+
self.indent_level -= 1
|
|
287
|
+
self.emit_ln(stmt, "")
|
|
288
|
+
self.emit_ln(node, "")
|
|
289
|
+
self.indent_level += 1
|
|
288
290
|
elif stmt.gen.jac == ",":
|
|
289
291
|
self.emit(node, f"{stmt.value} ")
|
|
290
292
|
elif stmt.value == "=":
|
|
@@ -304,10 +306,29 @@ class JacFormatPass(Pass):
|
|
|
304
306
|
isinstance(prev_token, ast.Ability)
|
|
305
307
|
and isinstance(stmt, (ast.Ability, ast.AbilityDef))
|
|
306
308
|
):
|
|
307
|
-
if
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
309
|
+
if (
|
|
310
|
+
not isinstance(prev_token.kid[-1], ast.CommentToken)
|
|
311
|
+
and not line_emiited
|
|
312
|
+
):
|
|
313
|
+
if (
|
|
314
|
+
prev_token.kid
|
|
315
|
+
and isinstance(prev_token.kid[-1], ast.SubNodeList)
|
|
316
|
+
and isinstance(prev_token.kid[-1].kid[-1], ast.CommentToken)
|
|
317
|
+
):
|
|
318
|
+
if (
|
|
319
|
+
prev_token
|
|
320
|
+
and stmt.loc.first_line - prev_token.kid[-1].kid[-1].line_no
|
|
321
|
+
> 1
|
|
322
|
+
):
|
|
323
|
+
self.indent_level -= 1
|
|
324
|
+
self.emit_ln(node, "")
|
|
325
|
+
self.indent_level += 1
|
|
326
|
+
else:
|
|
327
|
+
self.emit(node, "")
|
|
328
|
+
else:
|
|
329
|
+
self.indent_level -= 1
|
|
330
|
+
self.emit_ln(node, "")
|
|
331
|
+
self.indent_level += 1
|
|
311
332
|
self.emit(node, stmt.gen.jac)
|
|
312
333
|
else:
|
|
313
334
|
if prev_token and prev_token.gen.jac.strip() == "{":
|
|
@@ -907,8 +928,6 @@ class JacFormatPass(Pass):
|
|
|
907
928
|
"""Check if the length of the current generated code exceeds the max line length."""
|
|
908
929
|
if max_line_length == 0:
|
|
909
930
|
max_line_length = self.MAX_LINE_LENGTH
|
|
910
|
-
# print(content)
|
|
911
|
-
# print(len(content))
|
|
912
931
|
return len(content) > max_line_length
|
|
913
932
|
|
|
914
933
|
def exit_binary_expr(self, node: ast.BinaryExpr) -> None:
|
|
@@ -958,7 +977,6 @@ class JacFormatPass(Pass):
|
|
|
958
977
|
self.error(
|
|
959
978
|
f"Binary operator {node.op.value} not supported in bootstrap Jac"
|
|
960
979
|
)
|
|
961
|
-
# print(node.gen)
|
|
962
980
|
if isinstance(
|
|
963
981
|
node.kid[-1], (ast.Semi, ast.CommentToken)
|
|
964
982
|
) and not node.gen.jac.endswith("\n"):
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import:py math;
|
|
2
|
+
|
|
3
|
+
glob RAD = 5;
|
|
4
|
+
glob DIA = 10;
|
|
5
|
+
|
|
6
|
+
# this comment is for walker
|
|
7
|
+
walker decorator_walk {
|
|
8
|
+
can hash(func: Any) {
|
|
9
|
+
can inner(a: Any) {
|
|
10
|
+
print(("#" * 20));
|
|
11
|
+
func(a);
|
|
12
|
+
print(("#" * 20));
|
|
13
|
+
}
|
|
14
|
+
return inner;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
can exclaim(func: Any) {
|
|
18
|
+
can inner(b: Any) {
|
|
19
|
+
print(("!" * 20));
|
|
20
|
+
func(b);
|
|
21
|
+
print(("!" * 20));
|
|
22
|
+
}
|
|
23
|
+
return inner;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
can tilde(func: Any) {
|
|
27
|
+
can inner(c: Any) {
|
|
28
|
+
print(("~" * 20));
|
|
29
|
+
func(c);
|
|
30
|
+
print(("~" * 20));
|
|
31
|
+
}
|
|
32
|
+
return inner;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
can greeter(name: Any) {
|
|
36
|
+
print("Hello, " + name + "!");
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
# Entry point for the walker
|
|
40
|
+
|
|
41
|
+
can start with entry {
|
|
42
|
+
# Apply decorators to greeter
|
|
43
|
+
decorated_greeter = hash(exclaim(tilde(greeter)));
|
|
44
|
+
|
|
45
|
+
# Call the decorated greeter function
|
|
46
|
+
decorated_greeter("World");
|
|
47
|
+
|
|
48
|
+
# this is another comment
|
|
49
|
+
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
with entry {
|
|
54
|
+
root spawn decorator_walk();
|
|
55
|
+
}
|
jaclang/langserve/engine.py
CHANGED
|
@@ -349,7 +349,10 @@ class JacLangServer(LanguageServer):
|
|
|
349
349
|
elif node_selected.parent and isinstance(
|
|
350
350
|
node_selected.parent, ast.ModuleItem
|
|
351
351
|
):
|
|
352
|
-
path =
|
|
352
|
+
path = (
|
|
353
|
+
node_selected.parent.abs_path
|
|
354
|
+
or node_selected.parent.from_mod_path.abs_path
|
|
355
|
+
)
|
|
353
356
|
try: # TODO: Get rid of this when 'from' import is fixed
|
|
354
357
|
loc_range = tuple(
|
|
355
358
|
loc - 1 if loc > 0 else loc
|
|
@@ -218,9 +218,9 @@ class TestJacLangServer(TestCase):
|
|
|
218
218
|
)
|
|
219
219
|
lsp.deep_check(import_file)
|
|
220
220
|
positions = [
|
|
221
|
-
(6, 39, "/pygame_mock/__init__.
|
|
221
|
+
(6, 39, "/pygame_mock/__init__.pyi:2:0-2:0"),
|
|
222
222
|
(6, 45, "/pygame_mock/constants.py:3:0-4:1"),
|
|
223
|
-
(7, 31, "/pygame_mock/__init__.
|
|
223
|
+
(7, 31, "/pygame_mock/__init__.pyi:2:0-2:0"),
|
|
224
224
|
(7, 35, "/pygame_mock/constants.py:3:0-4:1"),
|
|
225
225
|
(20, 51, "/py_imp_test.jac:6:4-6:11"),
|
|
226
226
|
(20, 64, "/pygame_mock/constants.py:4:3-4:15"),
|
jaclang/runtimelib/importer.py
CHANGED
jaclang/runtimelib/machine.py
CHANGED
|
@@ -6,7 +6,7 @@ import os
|
|
|
6
6
|
import sys
|
|
7
7
|
import types
|
|
8
8
|
from contextvars import ContextVar
|
|
9
|
-
from typing import Optional
|
|
9
|
+
from typing import Optional, Union
|
|
10
10
|
|
|
11
11
|
from jaclang.compiler.absyntree import Module
|
|
12
12
|
from jaclang.compiler.compile import compile_jac
|
|
@@ -55,11 +55,12 @@ class JacMachine:
|
|
|
55
55
|
full_target: str,
|
|
56
56
|
caller_dir: str,
|
|
57
57
|
cachable: bool = True,
|
|
58
|
+
reload: bool = False,
|
|
58
59
|
) -> Optional[types.CodeType]:
|
|
59
60
|
"""Retrieve bytecode from the attached JacProgram."""
|
|
60
61
|
if self.jac_program:
|
|
61
62
|
return self.jac_program.get_bytecode(
|
|
62
|
-
module_name, full_target, caller_dir, cachable
|
|
63
|
+
module_name, full_target, caller_dir, cachable, reload=reload
|
|
63
64
|
)
|
|
64
65
|
return None
|
|
65
66
|
|
|
@@ -105,6 +106,46 @@ class JacMachine:
|
|
|
105
106
|
return nodes
|
|
106
107
|
return []
|
|
107
108
|
|
|
109
|
+
def update_walker(
|
|
110
|
+
self, module_name: str, items: Optional[dict[str, Union[str, Optional[str]]]]
|
|
111
|
+
) -> tuple[types.ModuleType, ...]:
|
|
112
|
+
"""Reimport the module."""
|
|
113
|
+
from .importer import JacImporter, ImportPathSpec
|
|
114
|
+
|
|
115
|
+
if module_name in self.loaded_modules:
|
|
116
|
+
try:
|
|
117
|
+
old_module = self.loaded_modules[module_name]
|
|
118
|
+
importer = JacImporter(self)
|
|
119
|
+
spec = ImportPathSpec(
|
|
120
|
+
target=module_name,
|
|
121
|
+
base_path=self.base_path,
|
|
122
|
+
absorb=False,
|
|
123
|
+
cachable=True,
|
|
124
|
+
mdl_alias=None,
|
|
125
|
+
override_name=None,
|
|
126
|
+
lng="jac",
|
|
127
|
+
items=items,
|
|
128
|
+
)
|
|
129
|
+
import_result = importer.run_import(spec, reload=True)
|
|
130
|
+
ret_items = []
|
|
131
|
+
if items:
|
|
132
|
+
for item_name in items:
|
|
133
|
+
if hasattr(old_module, item_name):
|
|
134
|
+
new_attr = getattr(import_result.ret_mod, item_name, None)
|
|
135
|
+
if new_attr:
|
|
136
|
+
ret_items.append(new_attr)
|
|
137
|
+
setattr(
|
|
138
|
+
old_module,
|
|
139
|
+
item_name,
|
|
140
|
+
new_attr,
|
|
141
|
+
)
|
|
142
|
+
return (old_module,) if not items else tuple(ret_items)
|
|
143
|
+
except Exception as e:
|
|
144
|
+
logger.error(f"Failed to update module {module_name}: {e}")
|
|
145
|
+
else:
|
|
146
|
+
logger.warning(f"Module {module_name} not found in loaded modules.")
|
|
147
|
+
return ()
|
|
148
|
+
|
|
108
149
|
@staticmethod
|
|
109
150
|
def get(base_path: str = "") -> "JacMachine":
|
|
110
151
|
"""Get current jac machine."""
|
|
@@ -134,6 +175,7 @@ class JacProgram:
|
|
|
134
175
|
full_target: str,
|
|
135
176
|
caller_dir: str,
|
|
136
177
|
cachable: bool = True,
|
|
178
|
+
reload: bool = False,
|
|
137
179
|
) -> Optional[types.CodeType]:
|
|
138
180
|
"""Get the bytecode for a specific module."""
|
|
139
181
|
if self.mod_bundle and isinstance(self.mod_bundle, Module):
|
|
@@ -141,7 +183,7 @@ class JacProgram:
|
|
|
141
183
|
return marshal.loads(codeobj) if isinstance(codeobj, bytes) else None
|
|
142
184
|
gen_dir = os.path.join(caller_dir, Con.JAC_GEN_DIR)
|
|
143
185
|
pyc_file_path = os.path.join(gen_dir, module_name + ".jbc")
|
|
144
|
-
if cachable and os.path.exists(pyc_file_path):
|
|
186
|
+
if cachable and os.path.exists(pyc_file_path) and not reload:
|
|
145
187
|
with open(pyc_file_path, "rb") as f:
|
|
146
188
|
return marshal.load(f)
|
|
147
189
|
|
jaclang/settings.py
CHANGED
jaclang/tests/fixtures/bar.jac
CHANGED
jaclang/tests/fixtures/foo.jac
CHANGED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import:jac from bar { bar_walk }
|
|
2
|
+
import:py from jaclang.runtimelib.machine { JacMachine }
|
|
3
|
+
import:py os;
|
|
4
|
+
|
|
5
|
+
can update_bar_walker {
|
|
6
|
+
"Updating bar.jac with new behavior." |> print;
|
|
7
|
+
(bar_walk_new, ) = JacMachine.get().update_walker(
|
|
8
|
+
"bar",
|
|
9
|
+
items={'bar_walk': None}
|
|
10
|
+
);
|
|
11
|
+
"Running bar_walk after update..." |> print;
|
|
12
|
+
root spawn bar_walk_new();
|
|
13
|
+
print(f"bar_walk: {bar_walk_new.__dict__}");
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
with entry {
|
|
18
|
+
update_bar_walker();
|
|
19
|
+
}
|
jaclang/tests/test_language.py
CHANGED
|
@@ -522,7 +522,7 @@ class JacLanguageTests(TestCase):
|
|
|
522
522
|
self.assertIn("can greet2(**kwargs: Any) {", output)
|
|
523
523
|
self.assertIn("squares_dict = {x: (x ** 2) for x in numbers};", output)
|
|
524
524
|
self.assertIn(
|
|
525
|
-
'\n\n@ my_decorator \n can say_hello() {\n """Say hello""" ;
|
|
525
|
+
'\n\n@ my_decorator \n can say_hello() {\n\n """Say hello""" ;', output
|
|
526
526
|
)
|
|
527
527
|
|
|
528
528
|
def test_needs_import_2(self) -> None:
|
|
@@ -568,7 +568,7 @@ class JacLanguageTests(TestCase):
|
|
|
568
568
|
py_ast.parse(f.read()), mod_path=py_out_path
|
|
569
569
|
),
|
|
570
570
|
).ir.unparse()
|
|
571
|
-
self.assertIn("class X {\n with entry {\n a_b = 67;", output)
|
|
571
|
+
self.assertIn("class X {\n with entry {\n\n a_b = 67;", output)
|
|
572
572
|
self.assertIn("br = b'Hello\\\\\\\\nWorld'", output)
|
|
573
573
|
self.assertIn("class Circle {\n can init(radius: float", output)
|
|
574
574
|
self.assertIn("<>node = 90; \n print(<>node) ;\n}\n", output)
|
|
@@ -952,6 +952,64 @@ class JacLanguageTests(TestCase):
|
|
|
952
952
|
self.assertIn("Item value: 0", stdout_value)
|
|
953
953
|
self.assertIn("Created 5 items.", stdout_value)
|
|
954
954
|
|
|
955
|
+
def test_walker_dynamic_update(self) -> None:
|
|
956
|
+
"""Test dynamic update of a walker during runtime."""
|
|
957
|
+
session = self.fixture_abs_path("bar_walk.session")
|
|
958
|
+
bar_file_path = self.fixture_abs_path("bar.jac")
|
|
959
|
+
update_file_path = self.fixture_abs_path("walker_update.jac")
|
|
960
|
+
captured_output = io.StringIO()
|
|
961
|
+
sys.stdout = captured_output
|
|
962
|
+
cli.enter(
|
|
963
|
+
filename=bar_file_path,
|
|
964
|
+
session=session,
|
|
965
|
+
entrypoint="bar_walk",
|
|
966
|
+
args=[],
|
|
967
|
+
)
|
|
968
|
+
sys.stdout = sys.__stdout__
|
|
969
|
+
stdout_value = captured_output.getvalue()
|
|
970
|
+
expected_output = "Created 5 items."
|
|
971
|
+
self.assertIn(expected_output, stdout_value.split("\n"))
|
|
972
|
+
# Define the new behavior to be added
|
|
973
|
+
new_behavior = """
|
|
974
|
+
# New behavior added during runtime
|
|
975
|
+
can end with `root exit {
|
|
976
|
+
"bar_walk has been updated with new behavior!" |> print;
|
|
977
|
+
disengage;
|
|
978
|
+
}
|
|
979
|
+
}
|
|
980
|
+
"""
|
|
981
|
+
|
|
982
|
+
# Backup the original file content
|
|
983
|
+
with open(bar_file_path, "r") as bar_file:
|
|
984
|
+
original_content = bar_file.read()
|
|
985
|
+
|
|
986
|
+
# Update the bar.jac file with new behavior
|
|
987
|
+
with open(bar_file_path, "r+") as bar_file:
|
|
988
|
+
content = bar_file.read()
|
|
989
|
+
last_brace_index = content.rfind("}")
|
|
990
|
+
if last_brace_index != -1:
|
|
991
|
+
updated_content = content[:last_brace_index] + new_behavior
|
|
992
|
+
bar_file.seek(0)
|
|
993
|
+
bar_file.write(updated_content)
|
|
994
|
+
bar_file.truncate()
|
|
995
|
+
|
|
996
|
+
captured_output = io.StringIO()
|
|
997
|
+
sys.stdout = captured_output
|
|
998
|
+
|
|
999
|
+
try:
|
|
1000
|
+
cli.run(
|
|
1001
|
+
filename=update_file_path,
|
|
1002
|
+
)
|
|
1003
|
+
sys.stdout = sys.__stdout__
|
|
1004
|
+
stdout_value = captured_output.getvalue()
|
|
1005
|
+
expected_output = "bar_walk has been updated with new behavior!"
|
|
1006
|
+
self.assertIn(expected_output, stdout_value.split("\n"))
|
|
1007
|
+
finally:
|
|
1008
|
+
# Restore the original content of bar.jac
|
|
1009
|
+
with open(bar_file_path, "w") as bar_file:
|
|
1010
|
+
|
|
1011
|
+
bar_file.write(original_content)
|
|
1012
|
+
|
|
955
1013
|
def test_object_ref_interface(self) -> None:
|
|
956
1014
|
"""Test class method output."""
|
|
957
1015
|
captured_output = io.StringIO()
|
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: jaclang
|
|
3
|
-
Version: 0.7.
|
|
3
|
+
Version: 0.7.19
|
|
4
4
|
Summary: Jac is a unique and powerful programming language that runs on top of Python, offering an unprecedented level of intelligence and intuitive understanding.
|
|
5
5
|
Home-page: https://jaseci.org
|
|
6
6
|
License: MIT
|
|
7
7
|
Keywords: jac,jaclang,jaseci,python,programming-language,machine-learning,artificial-intelligence
|
|
8
8
|
Author: Jason Mars
|
|
9
9
|
Author-email: jason@jaseci.org
|
|
10
|
+
Maintainer: Jason Mars
|
|
11
|
+
Maintainer-email: jason@jaseci.org
|
|
10
12
|
Requires-Python: >=3.11.0,<4.0.0
|
|
11
13
|
Classifier: License :: OSI Approved :: MIT License
|
|
12
14
|
Classifier: Programming Language :: Python :: 3
|
|
@@ -42,7 +44,7 @@ This is the main source code repository for the [Jac] programming language. It c
|
|
|
42
44
|
[Documentation]: https://www.jac-lang.org//learn/guide/
|
|
43
45
|
[Contributing]: .github/CONTRIBUTING.md
|
|
44
46
|
|
|
45
|
-
## What and Why Jac?
|
|
47
|
+
## What and Why is Jac?
|
|
46
48
|
|
|
47
49
|
- **Native Superset of Python** - Jac is a native superset of python, meaning the entire python ecosystem is directly interoperable with Jac without any trickery (no interop interface needed). Like Typescript is to Javascript, or C++ is to C, Jac is to Python. (every Jac program can be ejected to pure python, and every python program can be transpiled to a Jac program)
|
|
48
50
|
|
|
@@ -2,7 +2,7 @@ jaclang/__init__.py,sha256=quKqbhKk5CQ0k798jIXMbeAKzQxD0yhOpQGSvYD6TD8,399
|
|
|
2
2
|
jaclang/cli/.gitignore,sha256=NYuons2lzuCpCdefMnztZxeSMgtPVJF6R6zSgVDOV20,27
|
|
3
3
|
jaclang/cli/__init__.py,sha256=7aaPgYddIAHBvkdv36ngbfwsimMnfGaTDcaHYMg_vf4,23
|
|
4
4
|
jaclang/cli/cli.md,sha256=4BPJGdcyvs_rXgd_DPEGjkKSGe5ureXXYaQsf-_z_LU,5939
|
|
5
|
-
jaclang/cli/cli.py,sha256=
|
|
5
|
+
jaclang/cli/cli.py,sha256=P2Hqzpb9q9uR_mbyFb8ojr3ff3oDbcP6m1G1kKWkR80,15911
|
|
6
6
|
jaclang/cli/cmdreg.py,sha256=5mhzLJnpHfc0Z22qKQgcEOICgBaC95G9gSJZ-R7GqvU,8282
|
|
7
7
|
jaclang/compiler/.gitignore,sha256=n1k2_xXTorp9PY8hhYM4psHircn-NMaFx95bSgDKopo,10
|
|
8
8
|
jaclang/compiler/__init__.py,sha256=O1GO5Hb02vRlz7OpYHinQV5lQ7YuNUV9Hgjlc3QWtZg,2780
|
|
@@ -13,20 +13,20 @@ jaclang/compiler/constant.py,sha256=gKccXK4Qf3CWuv8J1oaWrwqdP7CRIf7ndayquRx6Xgs,
|
|
|
13
13
|
jaclang/compiler/jac.lark,sha256=sUft-A-r45E1aZ6CVZa-yDrtV0VTuVB7KNk7POFf3jg,17299
|
|
14
14
|
jaclang/compiler/parser.py,sha256=xyOyP81gurd1zgKMxWYl2iTGcmOqaEDHHch8Fs91Zr0,141276
|
|
15
15
|
jaclang/compiler/passes/__init__.py,sha256=0Tw0d130ZjzA05jVcny9cf5NfLjlaM70PKqFnY4zqn4,69
|
|
16
|
-
jaclang/compiler/passes/ir_pass.py,sha256=
|
|
16
|
+
jaclang/compiler/passes/ir_pass.py,sha256=8F9YL6dUUm6gP2ZkjIuaYgX7GHwyck5MEB7LYJdAhQc,5607
|
|
17
17
|
jaclang/compiler/passes/main/__init__.py,sha256=i37vH_f6706eNvdY3UlfYO0wTjdl0HsWg7vP-pyYItY,947
|
|
18
18
|
jaclang/compiler/passes/main/access_modifier_pass.py,sha256=AuE6xgW079Bvs_K02XWVz5qJkCIuizC6t1zIiQ5s-qE,5328
|
|
19
19
|
jaclang/compiler/passes/main/def_impl_match_pass.py,sha256=yAkwLQm2NBJycJVSmG88Shq0r2GSxTH8goINDfGIHek,4583
|
|
20
20
|
jaclang/compiler/passes/main/def_use_pass.py,sha256=68Uts_v-R-9mzBXC9EfXpcBEQwqnVcpL2JD0sri88AY,9674
|
|
21
21
|
jaclang/compiler/passes/main/fuse_typeinfo_pass.py,sha256=afe2-0zsfdoP6-hUd2y2zKV_ZFtPpxxapm8q2Mkik4Y,22466
|
|
22
|
-
jaclang/compiler/passes/main/import_pass.py,sha256=
|
|
23
|
-
jaclang/compiler/passes/main/py_collect_dep_pass.py,sha256=
|
|
22
|
+
jaclang/compiler/passes/main/import_pass.py,sha256=1n9i_hLIUGgYZebJkbKoBtXKVpQaO_eFUh2z8Chfbl0,11775
|
|
23
|
+
jaclang/compiler/passes/main/py_collect_dep_pass.py,sha256=lzMOYH8TarhkJFt0vqvZFknthZ08OjsdO7tO2u2EN40,2834
|
|
24
24
|
jaclang/compiler/passes/main/pyast_gen_pass.py,sha256=ACUhGsLq34N-Sfo96IAgkTnds9ZY6I7J6okr6rFvPpo,142105
|
|
25
25
|
jaclang/compiler/passes/main/pyast_load_pass.py,sha256=k-tf5cZVlygDg4BGBYcAznO6w0hM4-0Pdzlwr4Sw48I,94027
|
|
26
26
|
jaclang/compiler/passes/main/pybc_gen_pass.py,sha256=CjA9AqyMO3Pv_b5Hh0YI6JmCqIru2ASonO6rhrkau-M,1336
|
|
27
27
|
jaclang/compiler/passes/main/pyjac_ast_link_pass.py,sha256=1pW0uLEnhM5hCwVFAREdd_miyr3qTK0h_SJVfR_ryig,8604
|
|
28
28
|
jaclang/compiler/passes/main/pyout_pass.py,sha256=QWVB-AyVBha3OespP89LMuslRsdG2niZErwtnRPiURM,3191
|
|
29
|
-
jaclang/compiler/passes/main/registry_pass.py,sha256=
|
|
29
|
+
jaclang/compiler/passes/main/registry_pass.py,sha256=dKCfcjSenD3J-msmSd11-mCGgD0h1asX8nFdpo-eyq4,5881
|
|
30
30
|
jaclang/compiler/passes/main/schedules.py,sha256=tkTUTX8aff6pqQYtqt1h2lRbu_n7bVnAov9KmwwDxy0,1417
|
|
31
31
|
jaclang/compiler/passes/main/sub_node_tab_pass.py,sha256=25HEJGBbDlJibyW5MV4ShXQ2vmzG3LDreknV-u2nQjk,1184
|
|
32
32
|
jaclang/compiler/passes/main/sym_tab_build_pass.py,sha256=xitWPNbhKgyJmxD1rvVQltgFqCz4i5IJSOEFMpxkcw8,34892
|
|
@@ -53,6 +53,7 @@ jaclang/compiler/passes/main/tests/fixtures/incautoimpl.jac,sha256=WX54UE-AUAfnj
|
|
|
53
53
|
jaclang/compiler/passes/main/tests/fixtures/multi_def_err.jac,sha256=BxgmNUdz76gKLi6PXnLZE9rartodMgch5ydpGrd25Ec,87
|
|
54
54
|
jaclang/compiler/passes/main/tests/fixtures/py_imp_test.jac,sha256=hWAfWcavT6cUH9d-Rq35ptzVLFuH16StMp84JTsKia0,922
|
|
55
55
|
jaclang/compiler/passes/main/tests/fixtures/pygame_mock/__init__.py,sha256=zrZT2YhxNFr6CKAER5NsSosccWzP8rwmV1vUK4OYWLo,69
|
|
56
|
+
jaclang/compiler/passes/main/tests/fixtures/pygame_mock/__init__.pyi,sha256=zrZT2YhxNFr6CKAER5NsSosccWzP8rwmV1vUK4OYWLo,69
|
|
56
57
|
jaclang/compiler/passes/main/tests/fixtures/pygame_mock/color.py,sha256=pvJICEi1sv2hRU88_fekFPeotv3vFyPs57POOkPHPh8,76
|
|
57
58
|
jaclang/compiler/passes/main/tests/fixtures/pygame_mock/constants.py,sha256=1i-OHdp8rQJNN_Bv6G4Nd3mBfKAn-V0O4pyR4ewg5kA,61
|
|
58
59
|
jaclang/compiler/passes/main/tests/fixtures/pygame_mock/display.py,sha256=uzQZvyHHf4iPAodRBuBxrnwx3CpDPbMxcsGRlUB_9GY,29
|
|
@@ -60,7 +61,7 @@ jaclang/compiler/passes/main/tests/fixtures/registry.jac,sha256=1G6amtU1zIFCgq09
|
|
|
60
61
|
jaclang/compiler/passes/main/tests/fixtures/type_info.jac,sha256=64Im2L-R3YF8DEuTt29QE6mJI5PnFe3PiwcDLKa8gOE,661
|
|
61
62
|
jaclang/compiler/passes/main/tests/test_decl_def_match_pass.py,sha256=zWF2l93RjyG0AWyDXdXsMlPWYOhX46d699YqvIETRGY,1836
|
|
62
63
|
jaclang/compiler/passes/main/tests/test_def_use_pass.py,sha256=0ieyoeiDSK2m3dmVN00oJK2TdJhxWwxA1lnxT95wz0A,843
|
|
63
|
-
jaclang/compiler/passes/main/tests/test_import_pass.py,sha256=
|
|
64
|
+
jaclang/compiler/passes/main/tests/test_import_pass.py,sha256=XR0CaqdEQslYz1GXICpF3wko2PDw-tOnHfvgSWjo8TQ,5158
|
|
64
65
|
jaclang/compiler/passes/main/tests/test_pyast_build_pass.py,sha256=LIT4TP-nhtftRtY5rNySRQlim-dWMSlkfUvkhZTk4pc,1383
|
|
65
66
|
jaclang/compiler/passes/main/tests/test_pyast_gen_pass.py,sha256=6ZpLNYxblzBg6bmWSA0fikNM7nEAR9b9F18LJaO5buM,4679
|
|
66
67
|
jaclang/compiler/passes/main/tests/test_pybc_gen_pass.py,sha256=If8PE4exN5g9o1NRElNC0XdfIwJAp7M7f69rzmYRYUQ,655
|
|
@@ -69,10 +70,10 @@ jaclang/compiler/passes/main/tests/test_sub_node_pass.py,sha256=afz0Kh5xBCeNXQSI
|
|
|
69
70
|
jaclang/compiler/passes/main/tests/test_sym_tab_build_pass.py,sha256=85mUM6mYYLCrQ9AivBIbreG7CgdsJH2zrNOqdcpnwBo,730
|
|
70
71
|
jaclang/compiler/passes/main/tests/test_type_check_pass.py,sha256=v2_KmcyX1_fOpReRKM0mUnlFXKVPRvFCMR3Mw9ftytI,2265
|
|
71
72
|
jaclang/compiler/passes/main/tests/test_typeinfo_pass.py,sha256=ehC0_giLg7NwB7fR10nW5Te8mZ76qmUFxkK1bEjtmrw,129
|
|
72
|
-
jaclang/compiler/passes/main/type_check_pass.py,sha256=
|
|
73
|
+
jaclang/compiler/passes/main/type_check_pass.py,sha256=6L8yGBmZqNZuYabaJKt19mGse4x3r1YKA0Nr7LVPOtE,4276
|
|
73
74
|
jaclang/compiler/passes/tool/__init__.py,sha256=xekCOXysHIcthWm8NRmQoA1Ah1XV8vFbkfeHphJtUdc,223
|
|
74
75
|
jaclang/compiler/passes/tool/fuse_comments_pass.py,sha256=CSnuWy4gZfTcWKe0Q7LBikBgWe1zJr0QmNUkgrZ7B38,3657
|
|
75
|
-
jaclang/compiler/passes/tool/jac_formatter_pass.py,sha256=
|
|
76
|
+
jaclang/compiler/passes/tool/jac_formatter_pass.py,sha256=a9P494bKA4IKyUKTlPNrSyjubTdmZqS3e1CwX6NML3w,90550
|
|
76
77
|
jaclang/compiler/passes/tool/schedules.py,sha256=kmbsCazAMizGAdQuZpFky5BPlYlMXqNw7wOUzdi_wBo,432
|
|
77
78
|
jaclang/compiler/passes/tool/tests/__init__.py,sha256=AeOaZjA1rf6VAr0JqIit6jlcmOzW7pxGr4U1fOwgK_Y,24
|
|
78
79
|
jaclang/compiler/passes/tool/tests/fixtures/corelib.jac,sha256=RGIOyYW5eyadmOf0H-COpLPMJIIkWOFVERI5dNEM3J8,12581
|
|
@@ -92,6 +93,7 @@ jaclang/compiler/passes/tool/tests/fixtures/general_format_checks/comment_alignm
|
|
|
92
93
|
jaclang/compiler/passes/tool/tests/fixtures/general_format_checks/comments.jac,sha256=l4A_QcagIjUaN6h119yo77ohV_ixXndXPFlCMRJFpMM,346
|
|
93
94
|
jaclang/compiler/passes/tool/tests/fixtures/general_format_checks/decorator_stack.jac,sha256=FjrFBbIPL7eD2O17i5RxOLLhOCQrFHUwBMx0yGrgIJ4,544
|
|
94
95
|
jaclang/compiler/passes/tool/tests/fixtures/general_format_checks/esc_keywords.jac,sha256=EQdOQnHWF7NmM7SuQ4Y77fXUD8vkIBR7TG3G1lCGl0I,72
|
|
96
|
+
jaclang/compiler/passes/tool/tests/fixtures/general_format_checks/line_spacing.jac,sha256=7A-a4axfKFpRsEczZTJG3L195Ll1yVaX58hZvtwCZjo,1041
|
|
95
97
|
jaclang/compiler/passes/tool/tests/fixtures/general_format_checks/long_names.jac,sha256=f3ptg81A3mub7OdsVlxvX7FInEmT6Y2D55ZacQ7kZQw,734
|
|
96
98
|
jaclang/compiler/passes/tool/tests/fixtures/general_format_checks/triple_quoted_string.jac,sha256=7Ts6oE3x3x91lJIFQpdko54hrtM6vpMZDi56c5XCkmM,174
|
|
97
99
|
jaclang/compiler/passes/tool/tests/fixtures/multi_def_err.dot,sha256=muQG45ABv5xlMAnj1F0BZdr9-idH9KaZCT__P4lDHcI,1391
|
|
@@ -133,7 +135,7 @@ jaclang/compiler/tests/fixtures/stuff.jac,sha256=qOq6WOwhlprMmJpiqQudgqnr4qTd9uh
|
|
|
133
135
|
jaclang/compiler/tests/test_importer.py,sha256=glEyjV21nJaCVrDXbF5kkcZYBcCTnmWngdUBbuygAxY,2289
|
|
134
136
|
jaclang/compiler/tests/test_parser.py,sha256=Sj9Kz1FghESaPpyx_kEvScs4xvz-vgEdH8yyQJ0iB7M,4820
|
|
135
137
|
jaclang/langserve/__init__.py,sha256=3qbnivBBcLZCfmDYRMIeKkG08Lx7XQsJJg-qG8TU8yc,51
|
|
136
|
-
jaclang/langserve/engine.py,sha256=
|
|
138
|
+
jaclang/langserve/engine.py,sha256=uvm0xBpBuBmAZHcDT46y_MiT3TxYmmKUZDWHYUBsAXg,18108
|
|
137
139
|
jaclang/langserve/sem_manager.py,sha256=d5QzT9WVYarZfTg1sUF_pTfNMYb65HLz3vX839b5Jeo,14918
|
|
138
140
|
jaclang/langserve/server.py,sha256=qkWhsJLaQT2o-obIeOcPqag3B3wANzGFgW5EmC8tYYg,5445
|
|
139
141
|
jaclang/langserve/tests/__init__.py,sha256=iDM47k6c3vahaWhwxpbkdEOshbmX-Zl5x669VONjS2I,23
|
|
@@ -157,7 +159,7 @@ jaclang/langserve/tests/pylsp_jsonrpc/exceptions.py,sha256=NGHeFQawZcjoLUcgDmY3b
|
|
|
157
159
|
jaclang/langserve/tests/pylsp_jsonrpc/streams.py,sha256=R80_FvICIkrbdGmNtlemWYaxrr7-XldPgLaASnyv0W8,3332
|
|
158
160
|
jaclang/langserve/tests/session.py,sha256=3pIRoQjZnsnUWIYnO2SpK7c1PAiHMCFrrStNK2tawRM,9572
|
|
159
161
|
jaclang/langserve/tests/test_sem_tokens.py,sha256=HWNaA1CK5qxFeipmd4AAvjAbJSEW4-09hY2UHVfvtlc,9897
|
|
160
|
-
jaclang/langserve/tests/test_server.py,sha256=
|
|
162
|
+
jaclang/langserve/tests/test_server.py,sha256=ux40mA9U8hb2UkYWZ7-G4c1kILHXreMSn08ll7Mx_uo,22910
|
|
161
163
|
jaclang/langserve/utils.py,sha256=tDsdEOtZdmJ6Xn8b0Ohwt8fRVNm5qtUC4Cub85CG3Mk,19028
|
|
162
164
|
jaclang/plugin/__init__.py,sha256=5t2krHKt_44PrCTGojzxEimxpNHYVQcn89jAiCSXE_k,165
|
|
163
165
|
jaclang/plugin/builtin.py,sha256=Hj8SVcauuhzsPQJBzt8jIfHkSUAcqsKfAFyCPYdBZKA,1300
|
|
@@ -177,12 +179,12 @@ jaclang/runtimelib/__init__.py,sha256=jDDYBCV82qPhmcDVk3NIvHbhng0ebSrXD3xrojg0-e
|
|
|
177
179
|
jaclang/runtimelib/architype.py,sha256=sqsrobtbHaHDYJaqbXx9iapZ3TJ92APXFzw9bSGnQ90,21659
|
|
178
180
|
jaclang/runtimelib/constructs.py,sha256=QWut5kKRaBbIelb12cpTSa_D0xDGPOoHHq4SaDetyo8,760
|
|
179
181
|
jaclang/runtimelib/context.py,sha256=gUiPZ4ZoHoz_vHjxG9kvIw4hlmx8G8lPTquGC6qJoi4,5609
|
|
180
|
-
jaclang/runtimelib/importer.py,sha256=
|
|
181
|
-
jaclang/runtimelib/machine.py,sha256=
|
|
182
|
+
jaclang/runtimelib/importer.py,sha256=bJZTYXZZdoxiD5Tg8HaX7jSi4QVYEguw1WaObl1gMVc,14348
|
|
183
|
+
jaclang/runtimelib/machine.py,sha256=K3HaFNkMFQARSqG63mqHehXGEgRPMXnijSWxcvu3RUs,7248
|
|
182
184
|
jaclang/runtimelib/memory.py,sha256=GlzdN81728IsTmPLOe70HCDFE_JRHIEWlfDzfjWxn8o,5072
|
|
183
185
|
jaclang/runtimelib/test.py,sha256=HRCl3cf0uPTe58Kcx_sBUb6ow8J53rnmpFOhA7g9oAA,2851
|
|
184
186
|
jaclang/runtimelib/utils.py,sha256=P9gVE3XFhRzr745RCDXXIP391AcsL4aL_6HrXws_qa4,8155
|
|
185
|
-
jaclang/settings.py,sha256=
|
|
187
|
+
jaclang/settings.py,sha256=381YK66eXqDSnWhzTHMHfbmvwfQPEI_1yPLa0RFwzKo,3553
|
|
186
188
|
jaclang/tests/fixtures/abc.jac,sha256=HZvLz6IEt3Snlgg8Czs-N4emLjg4fT3IbTo95d3Gdww,1747
|
|
187
189
|
jaclang/tests/fixtures/access_checker.jac,sha256=UVoY7sYW-R0ms2HDA4HXQ5xJNiW0vEbY2T5CCY1avus,281
|
|
188
190
|
jaclang/tests/fixtures/access_modifier.jac,sha256=NJHXbu_N_cWpTkjJnwcHzWkEk2kroaQ8aaalVxPXAW8,2587
|
|
@@ -191,7 +193,7 @@ jaclang/tests/fixtures/assign_compr.jac,sha256=rnoujdtpjNbem4IdtBfxPahSUXl-gxNv4
|
|
|
191
193
|
jaclang/tests/fixtures/assign_compr_dup.jac,sha256=rnoujdtpjNbem4IdtBfxPahSUXl-gxNv4JFNEuUs5iM,286
|
|
192
194
|
jaclang/tests/fixtures/baddy.jac,sha256=waLlwMyW_JCE1x_SuVzRER1RBe1j3XiLTw-0NjznWpI,30
|
|
193
195
|
jaclang/tests/fixtures/baddy.test.jac,sha256=Uq-Nlf44QUAtbOfDCbc9_ceLxmo31PILDTSzAv8nJq4,33
|
|
194
|
-
jaclang/tests/fixtures/bar.jac,sha256=
|
|
196
|
+
jaclang/tests/fixtures/bar.jac,sha256=XZWOrzgMQed2R611DLfzCvWUT4a4gTYZXWRYvizMb18,782
|
|
195
197
|
jaclang/tests/fixtures/blankwithentry.jac,sha256=lnMDDKyKnldsUIx1AVCIHt47KY3gR2CZYhox8663sLM,53
|
|
196
198
|
jaclang/tests/fixtures/builtin_dotgen.jac,sha256=1CCJTSmMD1Zt_FkC-poPGyHRV3rIcst616UtYfuLIrE,1830
|
|
197
199
|
jaclang/tests/fixtures/byllmissue.jac,sha256=vAwxzbRNx5yOM3HTDSH7wafPYXU7AunBOZmgdsT2rhc,86
|
|
@@ -222,7 +224,7 @@ jaclang/tests/fixtures/err.impl.jac,sha256=bCW5RiPOoiEiBJCcCEsPsegBTA98mqY57UYiq
|
|
|
222
224
|
jaclang/tests/fixtures/err.jac,sha256=Df-QWvUlVa2Tc3QtKXNv4VU63Xefmp_iC-BS-1VuOEI,62
|
|
223
225
|
jaclang/tests/fixtures/err2.jac,sha256=x8h69NTVMGJa_UicY-CZblLMdeH09myTeiYqNFamiK0,50
|
|
224
226
|
jaclang/tests/fixtures/err_runtime.jac,sha256=giiZvN1x_cHYWdXtghdzasxYjUp2MNOdH6Pf2H6-aGI,177
|
|
225
|
-
jaclang/tests/fixtures/foo.jac,sha256=
|
|
227
|
+
jaclang/tests/fixtures/foo.jac,sha256=53v2aODH1u73xi8B4UdxyM8Ow6C29H-se8yNwOXs0lg,1083
|
|
226
228
|
jaclang/tests/fixtures/game1.jac,sha256=oiTadkrYJRUo6ZkHUi7I54J_0GoTTtsNLhhofTlz0uY,263
|
|
227
229
|
jaclang/tests/fixtures/gendot_bubble_sort.jac,sha256=2j-SauIfPgmIe5s_pubVxRI7OGwQjL9jHMQnDG6LREk,1542
|
|
228
230
|
jaclang/tests/fixtures/guess_game.jac,sha256=S2sWoF22SY2PbadKQX45QJFtw9lvzwFvrwbG0kbutPE,856
|
|
@@ -279,10 +281,11 @@ jaclang/tests/fixtures/tupleunpack.jac,sha256=AP6rbofc0VmsTNxInY6WLGRKWVY6u8ut0u
|
|
|
279
281
|
jaclang/tests/fixtures/tuplytuples.jac,sha256=6qiXn5OV_qn4cqKwROjJ1VuBAh0nbUGpp-5vtH9n_Dg,344
|
|
280
282
|
jaclang/tests/fixtures/type_info.jac,sha256=4Cw31ef5gny6IS0kLzgeSO-7ArEH1HgFFFip1BGQhZM,316
|
|
281
283
|
jaclang/tests/fixtures/walker_override.jac,sha256=Ok58ZAgxuV6aECNxYrjbbyAWSiqIbnly3N3O6cD563o,271
|
|
284
|
+
jaclang/tests/fixtures/walker_update.jac,sha256=_bN3ASAN6LpfIQFfDMRnrx2oteM-ef7OrbE91f2qvrs,463
|
|
282
285
|
jaclang/tests/fixtures/with_context.jac,sha256=cDA_4YWe5UVmQRgcpktzkZ_zsswQpV_T2Otf_rFnPy8,466
|
|
283
286
|
jaclang/tests/test_bugs.py,sha256=tBPsIlSPqZDIz4QaScNRT-WdGIdJ0uU-aRBWq1XUZ6o,555
|
|
284
287
|
jaclang/tests/test_cli.py,sha256=cqGHeL15sy34qJRZyD48Wu6rnOh1ZDHNS3pg0jOJvag,12515
|
|
285
|
-
jaclang/tests/test_language.py,sha256=
|
|
288
|
+
jaclang/tests/test_language.py,sha256=jOdA1g9icqKOUr4V7SGW5_eKEUw3jELm4I_f02CCDM4,41240
|
|
286
289
|
jaclang/tests/test_man_code.py,sha256=ZdNarlZVfT_-8Jv3FjLplHw76tsvkCuISyfX3M4qxPg,5027
|
|
287
290
|
jaclang/tests/test_reference.py,sha256=FISQpZbB8cmRoAeJOFfXUy13WVxykZjpkPSb1OTotfI,3340
|
|
288
291
|
jaclang/tests/test_settings.py,sha256=TIX5uiu8H9IpZN2__uFiclcdCpBpPpcAwtlEHyFC4kk,1999
|
|
@@ -1516,7 +1519,7 @@ jaclang/vendor/typing_extensions-4.12.2.dist-info/METADATA,sha256=BeUQIa8cnYbrjW
|
|
|
1516
1519
|
jaclang/vendor/typing_extensions-4.12.2.dist-info/RECORD,sha256=XS4fBVrPI7kaNZ56Ggl2RGa76jySWLqTzcrUpZIQTVM,418
|
|
1517
1520
|
jaclang/vendor/typing_extensions-4.12.2.dist-info/WHEEL,sha256=EZbGkh7Ie4PoZfRQ8I0ZuP9VklN_TvcZ6DSE5Uar4z4,81
|
|
1518
1521
|
jaclang/vendor/typing_extensions.py,sha256=gwekpyG9DVG3lxWKX4ni8u7nk3We5slG98mA9F3DJQw,134451
|
|
1519
|
-
jaclang-0.7.
|
|
1520
|
-
jaclang-0.7.
|
|
1521
|
-
jaclang-0.7.
|
|
1522
|
-
jaclang-0.7.
|
|
1522
|
+
jaclang-0.7.19.dist-info/METADATA,sha256=jajbjocbH7EiEBC5DDAdvMRBlK-Ie7v1tJucFYaApCQ,4914
|
|
1523
|
+
jaclang-0.7.19.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
|
|
1524
|
+
jaclang-0.7.19.dist-info/entry_points.txt,sha256=8sMi4Tvi9f8tQDN2QAXsSA2icO27zQ4GgEdph6bNEZM,49
|
|
1525
|
+
jaclang-0.7.19.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|