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 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(mod)
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
@@ -133,6 +133,8 @@ class Pass(Transform[T]):
133
133
  else:
134
134
  self.prune_signal = False
135
135
  self.cur_node = node
136
+ if self.term_signal:
137
+ return node
136
138
  self.exit_node(node)
137
139
  return node
138
140
 
@@ -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
 
@@ -0,0 +1,3 @@
1
+ from .display import *
2
+ from .color import *
3
+ from .constants import *
@@ -70,19 +70,19 @@ class ImportPassPassTests(TestCase):
70
70
  )
71
71
  assert isinstance(build.ir, ast.Module)
72
72
  p = {
73
- "math": "jaclang/jaclang/vendor/mypy/typeshed/stdlib/math.pyi",
74
- "pygame_mock": "pygame_mock/__init__.py",
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.assertIn(p[i], re.sub(r".*fixtures/", "", build.ir.py_raise_map[i]))
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
- pathlib.Path(os.path.dirname(__file__)).parent.parent.parent.parent
56
- / "stubs"
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
- self.indent_level -= 1
270
- self.emit_ln(node, "")
271
- self.indent_level += 1
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
- if not stmt.gen.jac.endswith("postinit;"):
284
- self.indent_level -= 1
285
- self.emit_ln(stmt, "")
286
- self.emit_ln(node, "")
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 not isinstance(prev_token.kid[-1], ast.CommentToken):
308
- self.indent_level -= 1
309
- self.emit_ln(node, "")
310
- self.indent_level += 1
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
+ }
@@ -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 = node_selected.parent.from_mod_path.abs_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__.py:2:0-2:0"),
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__.py:2:0-2:0"),
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"),
@@ -340,6 +340,7 @@ class JacImporter(Importer):
340
340
  spec.full_target,
341
341
  caller_dir=spec.caller_dir,
342
342
  cachable=spec.cachable,
343
+ reload=reload if reload else False,
343
344
  )
344
345
  try:
345
346
  if not codeobj:
@@ -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
@@ -17,6 +17,10 @@ class Settings:
17
17
  collect_py_dep_debug: bool = False
18
18
  print_py_raised_ast: bool = False
19
19
 
20
+ # Compiler configuration
21
+ disable_mtllm: bool = False
22
+ ignore_test_annex: bool = False
23
+
20
24
  # Formatter configuration
21
25
  max_line_length: int = 88
22
26
 
@@ -31,4 +31,4 @@ walker bar_walk {
31
31
  disengage;
32
32
  }
33
33
  }
34
- }
34
+ }
@@ -1,4 +1,3 @@
1
- import:py from jaclang.plugin.feature, JacFeature as Jac;
2
1
  import:py from jaclang.runtimelib.machine, JacMachine;
3
2
  import:jac from bar, bar_walk;
4
3
  # Test runner to initialize the walker
@@ -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
+ }
@@ -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""" ; ', output
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.18
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=XbxY2D6j0nRrhqaTBg0_e3f9haiHZNo1jUHbJYxZMUo,15878
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=xhPra4i7-zrBYdiuFb_nMgrwejLsSPJchhPEu6C03GM,5554
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=F7CeHKhFip3zp7FVOCpEsua0HRAudwIQdxyjqOp4JdQ,11702
23
- jaclang/compiler/passes/main/py_collect_dep_pass.py,sha256=OTulloovybZpXJXrQFsKgzXoRsgf-x5UfO6qalhJndg,2447
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=p9Lyaf5v4VtNBrdsyxalnJmjWWNZ1js7LSWYdAfyXvs,5755
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=gLzqR3fYe4W3_mwmRMoSp9dFLZF8P9d6p-m9SfsYF28,5144
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=TdMAzdHYXrKv-vTylGhvxjSDylk0HoOQUa7A4OC1d5A,4208
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=ngLu4qrTXev0NYNcL1feng89xHxTBXzZEQ_AYSZO3Qw,89878
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=3aTIGP0PIu8Wku4xRytsdstqPNe6xwU5QGikyj9jdcY,18015
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=FEjC4mmG85sU0O4qykmfu1Ks62mkveKRgpHep4vt3Rk,22908
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=dQWPj3n7Ahschq5FRJVy_r6oghNxp3j8o9zi72FEviE,14291
181
- jaclang/runtimelib/machine.py,sha256=QAodSjVm45-0VmhmFRMEJtFp1j3k2VvoiUi117YVS5g,5455
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=a8q39_6QvMVXGTjAzOwmfYMjk7w3H-iyMCEQADAw5iU,3455
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=9I50W-KAhOqTwcsCkmug8Grm2cPMAhUwsE_fllIQNm8,781
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=drzjyixEuhzEGfhLWfVdAQeeOYVcPe-H7h0RM8q8V2I,1141
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=5Vv2wD0PkBLESiNhKCToT3FAeQoQpzSElv_xwg6BVMo,39082
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.18.dist-info/METADATA,sha256=AEdrDMQWk6zb30Ji2LCf-h5DtAnEvzAPkhyc_3dwWC0,4853
1520
- jaclang-0.7.18.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
1521
- jaclang-0.7.18.dist-info/entry_points.txt,sha256=8sMi4Tvi9f8tQDN2QAXsSA2icO27zQ4GgEdph6bNEZM,49
1522
- jaclang-0.7.18.dist-info/RECORD,,
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,,