jaclang 0.6.5__py3-none-any.whl → 0.7.1__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.

Files changed (36) hide show
  1. jaclang/compiler/absyntree.py +4 -36
  2. jaclang/compiler/compile.py +21 -0
  3. jaclang/compiler/parser.py +13 -4
  4. jaclang/compiler/passes/main/__init__.py +2 -2
  5. jaclang/compiler/passes/main/def_impl_match_pass.py +1 -5
  6. jaclang/compiler/passes/main/def_use_pass.py +14 -7
  7. jaclang/compiler/passes/main/import_pass.py +56 -10
  8. jaclang/compiler/passes/main/pyast_gen_pass.py +55 -2
  9. jaclang/compiler/passes/main/schedules.py +4 -3
  10. jaclang/compiler/passes/main/tests/fixtures/incautoimpl.jac +7 -0
  11. jaclang/compiler/passes/main/tests/test_decl_def_match_pass.py +4 -4
  12. jaclang/compiler/passes/main/tests/test_import_pass.py +13 -0
  13. jaclang/compiler/passes/tool/jac_formatter_pass.py +2 -2
  14. jaclang/compiler/passes/transform.py +13 -4
  15. jaclang/compiler/tests/fixtures/mod_doc_test.jac +3 -1
  16. jaclang/langserve/engine.py +375 -0
  17. jaclang/langserve/server.py +112 -74
  18. jaclang/langserve/tests/fixtures/circle.jac +73 -0
  19. jaclang/langserve/tests/fixtures/circle_err.jac +73 -0
  20. jaclang/langserve/tests/fixtures/circle_pure.impl.jac +28 -0
  21. jaclang/langserve/tests/fixtures/circle_pure.jac +34 -0
  22. jaclang/langserve/tests/fixtures/circle_pure_err.impl.jac +32 -0
  23. jaclang/langserve/tests/fixtures/circle_pure_err.jac +34 -0
  24. jaclang/langserve/tests/test_server.py +33 -1
  25. jaclang/langserve/utils.py +53 -16
  26. jaclang/plugin/default.py +1 -1
  27. jaclang/tests/fixtures/type_info.jac +1 -1
  28. jaclang/tests/test_cli.py +1 -1
  29. jaclang/utils/helpers.py +3 -5
  30. jaclang/utils/test.py +1 -1
  31. {jaclang-0.6.5.dist-info → jaclang-0.7.1.dist-info}/METADATA +8 -16
  32. {jaclang-0.6.5.dist-info → jaclang-0.7.1.dist-info}/RECORD +34 -28
  33. jaclang/compiler/tests/test_workspace.py +0 -93
  34. jaclang/compiler/workspace.py +0 -234
  35. {jaclang-0.6.5.dist-info → jaclang-0.7.1.dist-info}/WHEEL +0 -0
  36. {jaclang-0.6.5.dist-info → jaclang-0.7.1.dist-info}/entry_points.txt +0 -0
@@ -0,0 +1,73 @@
1
+ """
2
+ This module demonstrates a simple circle class and a function to calculate
3
+ the area of a circle in all of Jac's glory.
4
+ """
5
+
6
+ import:py math;
7
+ # Module-level global var
8
+
9
+ glob RAD = 5;
10
+
11
+ """Function to calculate the area of a circle."""
12
+ can calculate_area(radius: float) -> float {
13
+ return math.pi * radius * radius;
14
+ }
15
+ #* (This is multiline comments in Jac)
16
+ Above we have the demonstration of a function to calculate the area of a circle.
17
+ Below we have the demonstration of a class to calculate the area of a circle.
18
+ *#
19
+
20
+ """Enum for shape types"""
21
+ enum ShapeType {
22
+ CIRCLE="Circle"
23
+ UNKNOWN="Unknown"
24
+ }
25
+
26
+ """Base class for a shape."""
27
+ obj Shape {
28
+ has shape_type: ShapeType;
29
+
30
+ """Abstract method to calculate the area of a shape."""
31
+ can area -> float abs;
32
+ }
33
+
34
+ """Circle class inherits from Shape."""
35
+ obj Circle :Shape: {
36
+ can init(radius: float) {
37
+ super.init(ShapeType.CIRCLE);
38
+ self.radius = radius;
39
+ }
40
+
41
+ """Overridden method to calculate the area of the circle."""
42
+ override can area -> float {
43
+ return math.pi * self.radius * self.radius;
44
+ }
45
+ }
46
+
47
+ with entry {
48
+ c = Circle(RAD);
49
+ }
50
+ # Global also works here
51
+
52
+ with entry:__main__ {
53
+ # To run the program functionality
54
+ print(f"Area of a circle with radius {RAD} using function: {calculate_area(RAD)}");
55
+ print(f"Area of a {c.shape_type.value} with radius {RAD} using class: {c.area()}");
56
+ }
57
+ # Unit Tests!
58
+
59
+ glob expected_area = 78.53981633974483;
60
+
61
+ test calc_area {
62
+ check.assertAlmostEqual(calculate_area(RAD), expected_area);
63
+ }
64
+
65
+ test circle_area {
66
+ c = Circle(RAD);
67
+ check.assertAlmostEqual(c.area(), expected_area);
68
+ }
69
+
70
+ test circle_type {
71
+ c = Circle(RAD);
72
+ check.assertEqual(c.shape_type, ShapeType.CIRCLE);
73
+ }
@@ -0,0 +1,28 @@
1
+ """Enum for shape types"""
2
+
3
+ :enum:ShapeType {
4
+ CIRCLE="Circle",
5
+ UNKNOWN="Unknown"
6
+ }
7
+
8
+ """Function to calculate the area of a circle."""
9
+ :can:calculate_area
10
+ (radius: float) -> float {
11
+ return math.pi * radius * radius;
12
+ }
13
+
14
+ :obj:Circle:can:init
15
+ (radius: float) {
16
+ self.radius = radius;
17
+ super.init(ShapeType.CIRCLE);
18
+ }
19
+
20
+ """Overridden method to calculate the area of the circle."""
21
+ :obj:Circle:can:area -> float {
22
+ return math.pi * self.radius * self.radius;
23
+ }
24
+
25
+ :can:main_run {
26
+ print(f"Area of a circle with radius {RAD} using function: {calculate_area(RAD)}");
27
+ print(f"Area of a {c.shape_type.value} with radius {RAD} using class: {c.area()}");
28
+ }
@@ -0,0 +1,34 @@
1
+ """
2
+ This module demonstrates a simple circle class and a function to calculate
3
+ the area of a circle in all of Jac's glory.
4
+ """
5
+
6
+ import:py math;
7
+
8
+ enum ShapeType;
9
+
10
+ can calculate_area(radius: float) -> float;
11
+ can main_run;
12
+
13
+ """Base class for a shape."""
14
+ obj Shape {
15
+ has shape_type: ShapeType;
16
+
17
+ can area -> float abs;
18
+ }
19
+
20
+ """Circle class inherits from Shape."""
21
+ obj Circle :Shape: {
22
+ has radius: float;
23
+
24
+ can init(radius: float);
25
+ can area -> float;
26
+ }
27
+ # Radius of the demo circle
28
+
29
+ glob RAD = 5, c = Circle(radius=RAD);
30
+
31
+ """Here we run the main program."""
32
+ with entry:__main__ {
33
+ main_run();
34
+ }
@@ -0,0 +1,32 @@
1
+ """Enum for shape types"""
2
+
3
+ :enum:ShapeType {
4
+ CIRCLE = "Circle",
5
+ UNKNOWN = "Unknown"
6
+ }
7
+
8
+ """Function to calculate the area of a circle."""
9
+ :can:calculate_area
10
+ (radius: float) -> float {
11
+ return math.pi * radius * radius;
12
+ }
13
+
14
+ :obj:Circle:can:init
15
+ (radius: float) {
16
+ self.radius = radius;
17
+ super.init(ShapeType.CIRCLE);
18
+ }
19
+
20
+ """Overridden method to calculate the area of the circle."""
21
+ :obj:Circle:can:area -> float {
22
+ return math.pi * self.radius * self.radius;
23
+ }
24
+
25
+ :can:main_run {
26
+ print(
27
+ f"Area of a circle with radius {RAD} using function: {calculate_area(RAD)}"
28
+ );
29
+ print(
30
+ f"Area of a {c.shape_type.value} with radius {RAD} using class: {c.area()}"
31
+ );
32
+ }
@@ -0,0 +1,34 @@
1
+ """
2
+ This module demonstrates a simple circle class and a function to calculate
3
+ the area of a circle in all of Jac's glory.
4
+ """
5
+
6
+ import:py math;
7
+
8
+ enum ShapeType;
9
+
10
+ can calculate_area(radius: float) -> float;
11
+ can main_run;
12
+
13
+ """Base class for a shape."""
14
+ obj Shape {
15
+ has shape_type: ShapeType;
16
+
17
+ can area -> float abs;
18
+ }
19
+
20
+ """Circle class inherits from Shape."""
21
+ obj Circle :Shape: {
22
+ has radius: float;
23
+
24
+ can init(radius: float);
25
+ can area -> float;
26
+ }
27
+ # Radius of the demo circle
28
+
29
+ glob RAD = 5, c = Circle(radius=RAD);
30
+
31
+ """Here we run the main program."""
32
+ with entry:__main__ {
33
+ main_run();
34
+ }
@@ -1,5 +1,7 @@
1
1
  from jaclang.utils.test import TestCase
2
2
  from jaclang.vendor.pygls import uris
3
+ from jaclang.vendor.pygls.workspace import Workspace
4
+ from jaclang.langserve.engine import JacLangServer
3
5
  from .session import LspSession
4
6
 
5
7
 
@@ -28,9 +30,39 @@ class TestJacLangServer(TestCase):
28
30
  {
29
31
  "range": {
30
32
  "start": {"line": 0, "character": 0},
31
- "end": {"line": 4, "character": 0},
33
+ "end": {"line": 2, "character": 0},
32
34
  },
33
35
  "newText": 'with entry {\n print("Hello, World!");\n}\n',
34
36
  }
35
37
  ],
36
38
  )
39
+
40
+ def test_syntax_diagnostics(self) -> None:
41
+ """Test diagnostics."""
42
+ lsp = JacLangServer()
43
+ # Set up the workspace path to "fixtures/"
44
+ workspace_path = self.fixture_abs_path("")
45
+ workspace = Workspace(workspace_path, lsp)
46
+ lsp.lsp._workspace = workspace
47
+ circle_file = uris.from_fs_path(self.fixture_abs_path("circle_err.jac"))
48
+ lsp.quick_check(circle_file)
49
+ self.assertEqual(len(lsp.modules), 1)
50
+ self.assertEqual(lsp.modules[circle_file].diagnostics[0].range.start.line, 22)
51
+
52
+ def test_doesnt_run_if_syntax_error(self) -> None:
53
+ """Test that the server doesn't run if there is a syntax error."""
54
+ lsp = JacLangServer()
55
+ # Set up the workspace path to "fixtures/"
56
+ workspace_path = self.fixture_abs_path("")
57
+ workspace = Workspace(workspace_path, lsp)
58
+ lsp.lsp._workspace = workspace
59
+ circle_file = uris.from_fs_path(self.fixture_abs_path("circle_err.jac"))
60
+ lsp.quick_check(circle_file)
61
+ self.assertEqual(len(lsp.modules), 1)
62
+ self.assertEqual(lsp.modules[circle_file].diagnostics[0].range.start.line, 22)
63
+ lsp.deep_check(circle_file)
64
+ self.assertEqual(len(lsp.modules), 1)
65
+ self.assertEqual(lsp.modules[circle_file].diagnostics[0].range.start.line, 22)
66
+ lsp.type_check(circle_file)
67
+ self.assertEqual(len(lsp.modules), 1)
68
+ self.assertEqual(lsp.modules[circle_file].diagnostics[0].range.start.line, 22)
@@ -1,24 +1,11 @@
1
1
  """Utility functions for the language server."""
2
2
 
3
3
  import asyncio
4
- import logging
5
4
  from functools import wraps
6
- from typing import Any, Awaitable, Callable, Coroutine, ParamSpec, TypeVar
5
+ from typing import Any, Awaitable, Callable, Coroutine, Optional, ParamSpec, TypeVar
7
6
 
8
- from jaclang.vendor.pygls.server import LanguageServer
9
-
10
- import lsprotocol.types as lspt
11
-
12
-
13
- def log_error(ls: LanguageServer, message: str) -> None:
14
- """Log an error message."""
15
- ls.show_message_log(message, lspt.MessageType.Error)
16
- ls.show_message(message, lspt.MessageType.Error)
17
-
18
-
19
- def log(info: str) -> None:
20
- """Log an info message."""
21
- logging.warning(info)
7
+ import jaclang.compiler.absyntree as ast
8
+ from jaclang.compiler.symtable import SymbolTable
22
9
 
23
10
 
24
11
  T = TypeVar("T", bound=Callable[..., Coroutine[Any, Any, Any]])
@@ -51,3 +38,53 @@ def debounce(wait: float) -> Callable[[T], Callable[..., Awaitable[None]]]:
51
38
  return debounced
52
39
 
53
40
  return decorator
41
+
42
+
43
+ def sym_tab_list(sym_tab: SymbolTable, file_path: str) -> list[SymbolTable]:
44
+ """Iterate through symbol table."""
45
+ sym_tabs = (
46
+ [sym_tab]
47
+ if not (
48
+ isinstance(sym_tab.owner, ast.Module)
49
+ and sym_tab.owner.loc.mod_path != file_path
50
+ )
51
+ else []
52
+ )
53
+ for i in sym_tab.kid:
54
+ sym_tabs += sym_tab_list(i, file_path=file_path)
55
+ return sym_tabs
56
+
57
+
58
+ def find_deepest_node_at_pos(
59
+ node: ast.AstNode, line: int, character: int
60
+ ) -> Optional[ast.AstNode]:
61
+ """Return the deepest node that contains the given position."""
62
+ if position_within_node(node, line, character):
63
+ for i in node.kid:
64
+ if position_within_node(i, line, character):
65
+ return find_deepest_node_at_pos(i, line, character)
66
+ return node
67
+ else:
68
+ return None
69
+
70
+
71
+ def position_within_node(node: ast.AstNode, line: int, character: int) -> bool:
72
+ """Check if the position falls within the node's location."""
73
+ if node.loc.first_line < line + 1 < node.loc.last_line:
74
+ return True
75
+ if (
76
+ node.loc.first_line == line + 1
77
+ and node.loc.col_start <= character + 1
78
+ and (
79
+ node.loc.last_line == line + 1
80
+ and node.loc.col_end >= character + 1
81
+ or node.loc.last_line > line + 1
82
+ )
83
+ ):
84
+ return True
85
+ if (
86
+ node.loc.last_line == line + 1
87
+ and node.loc.col_start <= character + 1 <= node.loc.col_end
88
+ ):
89
+ return True
90
+ return False
jaclang/plugin/default.py CHANGED
@@ -189,8 +189,8 @@ class JacFeatureDefaults:
189
189
 
190
190
  @wraps(inner_init)
191
191
  def new_init(self: Architype, *args: object, **kwargs: object) -> None:
192
- inner_init(self, *args, **kwargs)
193
192
  arch_base.__init__(self)
193
+ inner_init(self, *args, **kwargs)
194
194
 
195
195
  cls.__init__ = new_init # type: ignore
196
196
  return cls
@@ -10,6 +10,6 @@ obj ServerWrapper {
10
10
  self.file = file;
11
11
  }
12
12
 
13
- :obj:ServerWrapper:can:get_server{
13
+ :obj:ServerWrapper:can:get_server {
14
14
  return pygls.server.LanguageServer("test_server", "1");
15
15
  }
jaclang/tests/test_cli.py CHANGED
@@ -114,7 +114,7 @@ class JacCliTests(TestCase):
114
114
  stdout_value = captured_output.getvalue()
115
115
  self.assertEqual(stdout_value.count("type_info.ServerWrapper"), 6)
116
116
  self.assertEqual(stdout_value.count("builtins.int"), 2)
117
- self.assertEqual(stdout_value.count("builtins.str"), 9)
117
+ self.assertEqual(stdout_value.count("builtins.str"), 7)
118
118
 
119
119
  def test_build_and_run(self) -> None:
120
120
  """Testing for print AstTool."""
jaclang/utils/helpers.py CHANGED
@@ -128,15 +128,13 @@ def auto_generate_refs() -> None:
128
128
 
129
129
 
130
130
  def import_target_to_relative_path(
131
- import_level: int,
132
- import_target: str,
133
- base_path: Optional[str] = None,
131
+ level: int, target: str, base_path: Optional[str] = None
134
132
  ) -> str:
135
133
  """Convert an import target string into a relative file path."""
136
134
  if not base_path:
137
135
  base_path = os.getcwd()
138
- parts = import_target.split(".")
139
- traversal_levels = import_level - 1 if import_level > 0 else 0
136
+ parts = target.split(".")
137
+ traversal_levels = level - 1 if level > 0 else 0
140
138
  actual_parts = parts[traversal_levels:]
141
139
  for _ in range(traversal_levels):
142
140
  base_path = os.path.dirname(base_path)
jaclang/utils/test.py CHANGED
@@ -68,7 +68,7 @@ class TestCaseMicroSuite(TestCase):
68
68
  os.path.dirname(os.path.dirname(jaclang.__file__))
69
69
  )
70
70
  for name in files
71
- if name.endswith(".jac") and not name.startswith("err")
71
+ if name.endswith(".jac") and "err" not in name
72
72
  ]:
73
73
  method_name = (
74
74
  f"test_micro_{filename.replace('.jac', '').replace(os.sep, '_')}"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: jaclang
3
- Version: 0.6.5
3
+ Version: 0.7.1
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
@@ -25,7 +25,7 @@ Description-Content-Type: text/markdown
25
25
  width="20%">
26
26
  </picture>
27
27
 
28
- [Website][Jaclang] | [Getting started] | [Learn] | [Documentation] | [Contributing]
28
+ [Jac Website] | [Getting started] | [Learn] | [Documentation] | [Contributing]
29
29
 
30
30
  [![PyPI version](https://img.shields.io/pypi/v/jaclang.svg)](https://pypi.org/project/jaclang/) [![Tests](https://github.com/chandralegend/jaclang/actions/workflows/run_pytest.yml/badge.svg?branch=main)](https://github.com/chandralegend/jaclang/actions/workflows/run_pytest.yml) [![codecov](https://codecov.io/github/chandralegend/jaclang/graph/badge.svg?token=OAX26B0FE4)](https://codecov.io/github/chandralegend/jaclang)
31
31
  </div>
@@ -33,30 +33,22 @@ Description-Content-Type: text/markdown
33
33
  This is the main source code repository for the [Jac] programming language. It contains the compiler, language server, and documentation.
34
34
 
35
35
  [Jac]: https://www.jac-lang.org/
36
+ [Jac Website]: https://www.jac-lang.org/
36
37
  [Getting Started]: https://www.jac-lang.org//start/
37
38
  [Learn]: https://www.jac-lang.org//learn
38
39
  [Documentation]: https://www.jac-lang.org//learn/guide/
39
40
  [Contributing]: .github/CONTRIBUTING.md
40
41
 
41
- ## Why Jac?
42
+ ## What and Why Jac?
42
43
 
43
- - **Easy:** Jac is designed to be easy to learn and use, while also being powerful.
44
+ - **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)
44
45
 
45
- - **Reliability:** Our rich type system and runtime checks ensure your code is correct.
46
+ - **AI as a Programming Language Constructs** - Jac includes a novel (neurosymbolic) language construct that allows replacing code with generative AI models themselves. Jac's philosophy abstracts away prompt engineering. (Imagine taking a function body and swapping it out with a model.)
46
47
 
47
- - **AI Ready:** Jac provide easy to use Abstractions specially designed for LLMs.
48
+ - **New Modern Abstractions** - Jac introduces a paradigm that reasons about persistence and the notion of users as a language level construct. This enables writing simple programs for which no code changes are needed whether they run in a simple command terminal, or distributed across a large cloud. Jac's philosophy abstracts away dev ops and container/cloud configuration.
48
49
 
49
- - **Data Spatial Programming:** Jac provides easy to use Abstractions for Data Spatial Programming.
50
+ - **Jac Improves on Python** - Jac makes multiple thoughtful quality-of-life improvements/additions to Python. These include new modern operators, new types of comprehensions, new ways of organizing modules (i.e., separating implementations from declarations), etc.
50
51
 
51
- - **Support:** Jac compiles to Python, which is widely used and has a large ecosystem. Making it easy to integrate with existing code.
52
-
53
- - **Dev Friendly:** Highly Refactorable, Jac is designed to be easy to refactor and maintain. VSCode Editor support. Builtin language server protocol support.
54
-
55
- - **Cloud-native:** Jac is designed to be cloud-native, making it easy to deploy and scale.
56
-
57
-
58
-
59
- [jac-analyzer]: https://github.com/Jaseci-Labs/jac-analyzer
60
52
 
61
53
  ## Quick Start
62
54
 
@@ -6,27 +6,27 @@ jaclang/cli/cli.py,sha256=d352zfA5_Da5InyQkv4V-qaxIcdIaVYJVeYt8npSB3I,13553
6
6
  jaclang/cli/cmdreg.py,sha256=u0jAd6A8czt7tBgPBBKBhYAG4By1FrjEGaTU2XFKeYs,8372
7
7
  jaclang/compiler/.gitignore,sha256=n1k2_xXTorp9PY8hhYM4psHircn-NMaFx95bSgDKopo,10
8
8
  jaclang/compiler/__init__.py,sha256=JA3L1ran0PlZI5Pcj2CIrFgrZGRNFHHC5kRh1QYgYlY,3146
9
- jaclang/compiler/absyntree.py,sha256=PXHefWmwDO2ZD9iShs_Mt3-m_JP0f0HVCsE4UfPZjQg,126904
9
+ jaclang/compiler/absyntree.py,sha256=RC32GBkSoOUggcCKG6ud9TzcRvgDobHQzw2E8n6lXgo,125944
10
10
  jaclang/compiler/codeloc.py,sha256=KMwf5OMQu3_uDjIdH7ta2piacUtXNPgUV1t8OuLjpzE,2828
11
- jaclang/compiler/compile.py,sha256=IOjTLv42IULW6HbCpFINNrRhwjHDebKO1vdon0EX85k,2772
11
+ jaclang/compiler/compile.py,sha256=0d8p4i2LXg2RCu1XfWx_Jq_dx7pK2Zn2VIj-apvX_nI,3389
12
12
  jaclang/compiler/constant.py,sha256=C8nOgWLAg-fRg8Qax_jRcYp6jGyWSSA1gwzk9Zdy7HE,6534
13
13
  jaclang/compiler/jac.lark,sha256=TI8ctvs_cASPp-EDPrMiCeL80Ngvj_7WxGMUFtGN7vs,17040
14
- jaclang/compiler/parser.py,sha256=Cp_3p5lR7QekGqYYGYm6Blye5tmQAux7EuP6CBDRNpY,138547
14
+ jaclang/compiler/parser.py,sha256=Fy6qsTdh82YvXSgXoevIT5dIGjAn3hqbN45muJ5jFNY,138789
15
15
  jaclang/compiler/passes/__init__.py,sha256=0Tw0d130ZjzA05jVcny9cf5NfLjlaM70PKqFnY4zqn4,69
16
16
  jaclang/compiler/passes/ir_pass.py,sha256=gh1Zd8ouu79FoxerW1sMxktmfeC9gHyp4H_MoAviYP8,5504
17
- jaclang/compiler/passes/main/__init__.py,sha256=m8vZ0F6EiwOm0e0DWKRYgc8JcgiT2ayBrY6GojZkTfY,945
17
+ jaclang/compiler/passes/main/__init__.py,sha256=YSWVNkgnJKF32LpJwX__FwvYrpTSoxFqvnw410WrhkA,947
18
18
  jaclang/compiler/passes/main/access_modifier_pass.py,sha256=1tQJ9bNlOVX3sgL0DK4jv643Pu5xl68oL8LNsaHf-MY,4864
19
- jaclang/compiler/passes/main/def_impl_match_pass.py,sha256=NlHHHMT1C-8RoCWjL7E2oYDBXeX82g0dWn_SnEWEtMk,3753
20
- jaclang/compiler/passes/main/def_use_pass.py,sha256=d2REmfme2HjUj8avDcXUuPbv3yKfvYHqpL49sxniLhQ,8576
19
+ jaclang/compiler/passes/main/def_impl_match_pass.py,sha256=omMqI2vGBD42sBtBU1YFR7mP_M4k9c3UluRUoG3xKHU,3522
20
+ jaclang/compiler/passes/main/def_use_pass.py,sha256=3JeiqNxegTQ8a2gk3Tlc4frUrSQ1ZZeiv2qwNA1OPp0,8887
21
21
  jaclang/compiler/passes/main/fuse_typeinfo_pass.py,sha256=9alMH5yPLzFZ1iZJw0UCjh-9BOOxNALA_QjW0IqQdDg,16322
22
- jaclang/compiler/passes/main/import_pass.py,sha256=NlCzK6Cdke-59mHm6q9LDHIUbXBpFOVZ725GYcbhqK0,8055
23
- jaclang/compiler/passes/main/pyast_gen_pass.py,sha256=sL5VIR2cT_NQYlyFopZz5XSXjQcisltVwdmLL8pXf3w,136197
22
+ jaclang/compiler/passes/main/import_pass.py,sha256=rNlik9QXBJ8xnye5TiegOVWpuhXAPeq1SlDC8fMYVv4,10153
23
+ jaclang/compiler/passes/main/pyast_gen_pass.py,sha256=5l3KVs-eyrUa9OtSekemXGeaf5VCJcNYbf2CwzWFfDI,138114
24
24
  jaclang/compiler/passes/main/pyast_load_pass.py,sha256=lFJhcaXbsDKi2WJzVlD0EdSEKosUjopHFHzAYV3KvhQ,90650
25
25
  jaclang/compiler/passes/main/pybc_gen_pass.py,sha256=CjA9AqyMO3Pv_b5Hh0YI6JmCqIru2ASonO6rhrkau-M,1336
26
26
  jaclang/compiler/passes/main/pyjac_ast_link_pass.py,sha256=K5jNHRPrFcC_-RbgY7lngSNSDQLQr27N31_aUrGUACo,7864
27
27
  jaclang/compiler/passes/main/pyout_pass.py,sha256=clJkASFiBiki5w0MQXYIwcdvahYETgqAjKlYOYVYKNQ,3137
28
28
  jaclang/compiler/passes/main/registry_pass.py,sha256=Lp_EqlflXkSgQuJe_EVBtzC16YAJx70bDO6X0nJIX5U,4579
29
- jaclang/compiler/passes/main/schedules.py,sha256=oTH2EvvopLdmrtPl8b-CENWAPviIZe7qNLOuODJ5Iuw,1253
29
+ jaclang/compiler/passes/main/schedules.py,sha256=cu3-AIckvbKGe3C-DbtDwwAdvnX25CdDP6j9QLps9Kg,1298
30
30
  jaclang/compiler/passes/main/sub_node_tab_pass.py,sha256=fGgK0CBWsuD6BS4BsLwXPl1b5UC2N2YEOGa6jNMu8N8,1332
31
31
  jaclang/compiler/passes/main/sym_tab_build_pass.py,sha256=1bUU-p0zCoLoF7_HgLr2FKxUuc_4y2O7-5FSJD8mfWc,42020
32
32
  jaclang/compiler/passes/main/tests/__init__.py,sha256=UBAATLUEH3yuBN4LYKnXXV79kokRc4XB-rX12qfu0ds,28
@@ -47,12 +47,13 @@ jaclang/compiler/passes/main/tests/fixtures/game1.jac,sha256=oiTadkrYJRUo6ZkHUi7
47
47
  jaclang/compiler/passes/main/tests/fixtures/impl/defs1.jac,sha256=MIYBOmcG4NnxsJcR4f-bposvl5ILfshU0tKJ7qMjjzU,112
48
48
  jaclang/compiler/passes/main/tests/fixtures/impl/defs2.jac,sha256=MIYBOmcG4NnxsJcR4f-bposvl5ILfshU0tKJ7qMjjzU,112
49
49
  jaclang/compiler/passes/main/tests/fixtures/impl/imps.jac,sha256=MTVCw95_OwssjB7MtEPTYoHSHcceZAhFLokW8Zaruzg,135
50
+ jaclang/compiler/passes/main/tests/fixtures/incautoimpl.jac,sha256=WX54UE-AUAfnjva0y9NkSl8-0aJAE1HqO0gw4rtCqhs,71
50
51
  jaclang/compiler/passes/main/tests/fixtures/multi_def_err.jac,sha256=BxgmNUdz76gKLi6PXnLZE9rartodMgch5ydpGrd25Ec,87
51
52
  jaclang/compiler/passes/main/tests/fixtures/registry.jac,sha256=1G6amtU1zIFCgq09v7xTp9zZ5sw5IbXHfYVlOo-drPg,993
52
53
  jaclang/compiler/passes/main/tests/fixtures/type_info.jac,sha256=64Im2L-R3YF8DEuTt29QE6mJI5PnFe3PiwcDLKa8gOE,661
53
- jaclang/compiler/passes/main/tests/test_decl_def_match_pass.py,sha256=QDsvTEpJt3AuS3GRwfq-1mezRCpx7rwEEyg1AbusaBs,1374
54
+ jaclang/compiler/passes/main/tests/test_decl_def_match_pass.py,sha256=-qb9-XV6XbPCbL3JoUQsbS86w-WjkAKCnAYuDFORoIE,1378
54
55
  jaclang/compiler/passes/main/tests/test_def_use_pass.py,sha256=dmyZgXugOCN-_YY7dxkNHgt8vqey8qzNJf8sWyLLZ5w,1013
55
- jaclang/compiler/passes/main/tests/test_import_pass.py,sha256=2oRz8lO1ORiTn36NkkshpXeT_K0L_jM8KZuvxgVzbbE,1141
56
+ jaclang/compiler/passes/main/tests/test_import_pass.py,sha256=eG7ZopSrjTjZrPdqnXgq877FO-DcaA922zC1YiZPd_0,1733
56
57
  jaclang/compiler/passes/main/tests/test_pyast_build_pass.py,sha256=LIT4TP-nhtftRtY5rNySRQlim-dWMSlkfUvkhZTk4pc,1383
57
58
  jaclang/compiler/passes/main/tests/test_pyast_gen_pass.py,sha256=fNL_FS26AQGlRCvwWfl-Qyt7iW2_A99GIHOAnnkpw9A,4731
58
59
  jaclang/compiler/passes/main/tests/test_pybc_gen_pass.py,sha256=If8PE4exN5g9o1NRElNC0XdfIwJAp7M7f69rzmYRYUQ,655
@@ -64,7 +65,7 @@ jaclang/compiler/passes/main/tests/test_typeinfo_pass.py,sha256=ehC0_giLg7NwB7fR
64
65
  jaclang/compiler/passes/main/type_check_pass.py,sha256=-f41Ukr3B1w4rkQdZ2xJy6nozymgnVKjJ8E1fn7qJmI,3339
65
66
  jaclang/compiler/passes/tool/__init__.py,sha256=xekCOXysHIcthWm8NRmQoA1Ah1XV8vFbkfeHphJtUdc,223
66
67
  jaclang/compiler/passes/tool/fuse_comments_pass.py,sha256=N9a84qArNuTXX1iaXsBzqcufx6A3zYq2p-1ieH6FmHc,3133
67
- jaclang/compiler/passes/tool/jac_formatter_pass.py,sha256=oYXDWWlxYj0FGXxXUOPnmwnkFPmayd2fRoWngvDgXwc,86113
68
+ jaclang/compiler/passes/tool/jac_formatter_pass.py,sha256=xpM10gIhILS37Ne2NVFMruJwmG1GfDcY0y8fbgqWrdM,86134
68
69
  jaclang/compiler/passes/tool/schedules.py,sha256=kmbsCazAMizGAdQuZpFky5BPlYlMXqNw7wOUzdi_wBo,432
69
70
  jaclang/compiler/passes/tool/tests/__init__.py,sha256=AeOaZjA1rf6VAr0JqIit6jlcmOzW7pxGr4U1fOwgK_Y,24
70
71
  jaclang/compiler/passes/tool/tests/fixtures/corelib.jac,sha256=GA5_CDQQo9awG6H8wed8tp06KoWtQ8nR70LVbBwCFIY,12416
@@ -99,7 +100,7 @@ jaclang/compiler/passes/tool/tests/fixtures/simple_walk_fmt.jac,sha256=6jwYKXxJ1
99
100
  jaclang/compiler/passes/tool/tests/test_fuse_comments_pass.py,sha256=ZeWHsm7VIyyS8KKpoB2SdlHM4jF22fMfSrfTfxt2MQw,398
100
101
  jaclang/compiler/passes/tool/tests/test_jac_format_pass.py,sha256=P4vBRbwVAkb8svFSAOf4VKioZS8BkoaVfYdn-LCrRqA,6144
101
102
  jaclang/compiler/passes/tool/tests/test_unparse_validate.py,sha256=Tg9k7BOSkWngAZLvSHmPt95ILJzdIvdHxKBT__mgpS0,2910
102
- jaclang/compiler/passes/transform.py,sha256=Z3TuHMJ7TyyBHt0XmRWEjMk8-t6logKs7XG_OTDJIvo,2162
103
+ jaclang/compiler/passes/transform.py,sha256=jh2pMGFs6J9ZbQ2E-3r21khDm53yKXbNq5GstLMkBpg,2374
103
104
  jaclang/compiler/passes/utils/__init__.py,sha256=UsI5rUopTUiStAzup4kbPwIwrnC5ofCrqWBCBbM2-k4,35
104
105
  jaclang/compiler/passes/utils/mypy_ast_build.py,sha256=DbTYKwQ2K-3JXS_RybLyvqDz_381Li8JfFKNeEQhbRY,26324
105
106
  jaclang/compiler/symtable.py,sha256=f-9c3eQJTDhEG22kYC3Vd4i5gRWf77_CsqFm7t8Wsng,6031
@@ -109,13 +110,11 @@ jaclang/compiler/tests/fixtures/activity.py,sha256=fSvxYDKufsPeQIrbuh031zHw_hdbR
109
110
  jaclang/compiler/tests/fixtures/fam.jac,sha256=DGR9vJI8H73plbyvwdTHbsvSRd_0hT-Kq9IIIrQ1GLU,1544
110
111
  jaclang/compiler/tests/fixtures/hello_world.jac,sha256=uT67nGzdYY7YT6Xj5-OHFAZPEHfIl4zGlfyNs7-zRBI,78
111
112
  jaclang/compiler/tests/fixtures/kwesc.jac,sha256=OXxVL_fwiFuvYO1YX1RHa2hpETSpb0QD1-gMYnMY6DA,103
112
- jaclang/compiler/tests/fixtures/mod_doc_test.jac,sha256=p3n-JMJAerocPBA0p_MGf_F7KY-OosIqjHEqcjVrB30,31
113
+ jaclang/compiler/tests/fixtures/mod_doc_test.jac,sha256=aFZpjn7V5lvCHp0lPoGXtdkcY3CK8_-SKeZGruutv4Y,35
113
114
  jaclang/compiler/tests/fixtures/staticcheck.jac,sha256=t849--dTkSSjCJX1OiMV-lgao_hIDSKwKVs-aS6IwK8,342
114
115
  jaclang/compiler/tests/fixtures/stuff.jac,sha256=qOq6WOwhlprMmJpiqQudgqnr4qTd9uhulQSDGQ3o6sY,82
115
116
  jaclang/compiler/tests/test_importer.py,sha256=JNmte5FsHhnng9jzw7N5BenflAFCasuhezN1sytDVyg,1739
116
117
  jaclang/compiler/tests/test_parser.py,sha256=C81mUo8EGwypPTTLRVS9BglP0Dyye9xaPSQtw7cwnnI,4814
117
- jaclang/compiler/tests/test_workspace.py,sha256=SEBcvz_daTbonrLHK9FbjiH86TUbOtVGH-iZ3xkJSMk,3184
118
- jaclang/compiler/workspace.py,sha256=I1MF2jaSylDOcQQV4Ez3svi4FdOyfmbNupuZT7q9aFQ,7797
119
118
  jaclang/core/__init__.py,sha256=jDDYBCV82qPhmcDVk3NIvHbhng0ebSrXD3xrojg0-eo,34
120
119
  jaclang/core/aott.py,sha256=MMFmel9cf1KrREjLUY9vV0b38pdb_4N3pxe5jMedBYA,7582
121
120
  jaclang/core/construct.py,sha256=ZwgOO-P2OTv8d7mnxBkRg-AitrzYxsbFNqJZjRE9YqM,18649
@@ -134,9 +133,16 @@ jaclang/core/registry.py,sha256=4uuXahPN4SMVEWwJ6Gjm5LM14rePMGoyjQtSbDQmQZs,4178
134
133
  jaclang/core/shelve_storage.py,sha256=UsZRHM8KPGUlZTX_bfcxzabInNrTaQVNMatQifycMYg,1692
135
134
  jaclang/core/utils.py,sha256=5e4DyjtSweFxKeIuEyeYGV2MsuTtfnncfIwRdoyFdys,7736
136
135
  jaclang/langserve/__init__.py,sha256=3qbnivBBcLZCfmDYRMIeKkG08Lx7XQsJJg-qG8TU8yc,51
137
- jaclang/langserve/server.py,sha256=6SSsYDU6OBNHbgO0p6O38yrLZrjqFfpiRMwVnA79XJs,3553
136
+ jaclang/langserve/engine.py,sha256=xz_Qmss5d79nevli_gKN5giD61Ibt7O2MwA8Migu_t4,14910
137
+ jaclang/langserve/server.py,sha256=2CUO_5y2YFg7x0THrmseomYSaiUWukZqDxjdIvp02H0,4280
138
138
  jaclang/langserve/tests/__init__.py,sha256=iDM47k6c3vahaWhwxpbkdEOshbmX-Zl5x669VONjS2I,23
139
139
  jaclang/langserve/tests/defaults.py,sha256=8UWHuCHY-WatPcWFhyX9-4KLuJgODTlLNj0wNnKomIM,7608
140
+ jaclang/langserve/tests/fixtures/circle.jac,sha256=M-OOMttQ9D5qyvfJibKJVW6ce3YRmXKDUAWzyy4N4mU,1733
141
+ jaclang/langserve/tests/fixtures/circle_err.jac,sha256=6Cn3PtP3ujjC8DjiOQWFbdb5C6wW12wAv9BwLwvX7b4,1732
142
+ jaclang/langserve/tests/fixtures/circle_pure.impl.jac,sha256=wj2hs7EwA35a-7oGVZppQlNlgIhYOdmqW2LP4i1uQsc,670
143
+ jaclang/langserve/tests/fixtures/circle_pure.jac,sha256=jQ5QX0G5khGACoY82CM-6LcOX57w4e29tHVicE2eMgw,608
144
+ jaclang/langserve/tests/fixtures/circle_pure_err.impl.jac,sha256=rsXatY9a-wZONRPJ6VOuw7Bj9R_CrJO_TEwAVXj1PjU,702
145
+ jaclang/langserve/tests/fixtures/circle_pure_err.jac,sha256=jQ5QX0G5khGACoY82CM-6LcOX57w4e29tHVicE2eMgw,608
140
146
  jaclang/langserve/tests/fixtures/hello.jac,sha256=iRMKtYVCw1zLvjOQbj3q__3Manj1Di1YeDTNMEvYtBc,36
141
147
  jaclang/langserve/tests/pylsp_jsonrpc/__init__.py,sha256=bDWxRjmELPCVGy243_0kNrG7PttyZsv_eZ9JTKQrU1E,105
142
148
  jaclang/langserve/tests/pylsp_jsonrpc/dispatchers.py,sha256=zEZWu6C2_n4lPoA8H8OO67746P93VhbYaXZMdtrD8Z0,1038
@@ -144,11 +150,11 @@ jaclang/langserve/tests/pylsp_jsonrpc/endpoint.py,sha256=TxDpWUd-8AGJwdRQN_iiCXY
144
150
  jaclang/langserve/tests/pylsp_jsonrpc/exceptions.py,sha256=NGHeFQawZcjoLUcgDmY3bF7BqZR83g7TmdKyzCmRaKM,2836
145
151
  jaclang/langserve/tests/pylsp_jsonrpc/streams.py,sha256=R80_FvICIkrbdGmNtlemWYaxrr7-XldPgLaASnyv0W8,3332
146
152
  jaclang/langserve/tests/session.py,sha256=3pIRoQjZnsnUWIYnO2SpK7c1PAiHMCFrrStNK2tawRM,9572
147
- jaclang/langserve/tests/test_server.py,sha256=Zqo4bnlUg9TH1xHSpT4VBpTefT6tLCWjOZbFI9hEzUs,1411
148
- jaclang/langserve/utils.py,sha256=VsSdZQNVW5lS8ko8z-h4CnbCugs4UK44NLAqYqTGjwA,1490
153
+ jaclang/langserve/tests/test_server.py,sha256=oteZHprqS61mR9TCnpvuTo0A9XV66gX--h5isSazb08,3010
154
+ jaclang/langserve/utils.py,sha256=cEW-nOLA5KLShTE1cBXItSelaKj2qyNZNTtlPE1T8Xk,2717
149
155
  jaclang/plugin/__init__.py,sha256=5t2krHKt_44PrCTGojzxEimxpNHYVQcn89jAiCSXE_k,165
150
156
  jaclang/plugin/builtin.py,sha256=PP2Vs4p_oDbGYEx0iBFDYH49I4uSRnNVWgx2aOzorVA,1187
151
- jaclang/plugin/default.py,sha256=EegsveW7I41Pvkh261LVr3smC08rcbUXLBkrhLTh9mY,27142
157
+ jaclang/plugin/default.py,sha256=bi8qyiKkXAwr-TjT_VSI0_KSW4l5fqHCGp7dV0egfI0,27142
152
158
  jaclang/plugin/feature.py,sha256=Qi30JWJvt51s9nx3eJ0_BSTYIeTYLHe-e26y0IjJLz8,9444
153
159
  jaclang/plugin/spec.py,sha256=mJRUMGaIhlHbZIvO2J-A1q3eNhnIWJ0iBCPmxhHiHx4,9043
154
160
  jaclang/plugin/tests/__init__.py,sha256=rn_tNG8jCHWwBc_rx4yFkGc4N1GISb7aPuTFVRTvrTk,38
@@ -229,22 +235,22 @@ jaclang/tests/fixtures/sub_abil_sep_multilev.jac,sha256=wm7-RGdwfUGHjQo20jj2fTp0
229
235
  jaclang/tests/fixtures/try_finally.jac,sha256=I4bjOZz0vZbY1rQZlPy-RCMYP2-LQwtsShlmKR1_UFE,574
230
236
  jaclang/tests/fixtures/tupleunpack.jac,sha256=AP6rbofc0VmsTNxInY6WLGRKWVY6u8ut0uzQX_52QyI,64
231
237
  jaclang/tests/fixtures/tuplytuples.jac,sha256=6qiXn5OV_qn4cqKwROjJ1VuBAh0nbUGpp-5vtH9n_Dg,344
232
- jaclang/tests/fixtures/type_info.jac,sha256=n3v2snKNNZu2-4qdicKhw67Jc_rS4oIB3puXDx9-FUA,315
238
+ jaclang/tests/fixtures/type_info.jac,sha256=4Cw31ef5gny6IS0kLzgeSO-7ArEH1HgFFFip1BGQhZM,316
233
239
  jaclang/tests/fixtures/with_context.jac,sha256=cDA_4YWe5UVmQRgcpktzkZ_zsswQpV_T2Otf_rFnPy8,466
234
240
  jaclang/tests/fixtures/with_llm_function.jac,sha256=hcDBO2Ch5IScrV0VBzeYaNaL4GhmVwg_odOzfOb1pwk,804
235
241
  jaclang/tests/fixtures/with_llm_lower.jac,sha256=S3a8luL38neLReoxNzs-nLeN36oys059MS8g7g_oqJg,1878
236
242
  jaclang/tests/fixtures/with_llm_method.jac,sha256=l76E50hIygLwkiIpjf3iYGv97C3yZlUABE2D5GnqQ44,1420
237
243
  jaclang/tests/fixtures/with_llm_type.jac,sha256=LKotFGtBl9mzo08SbTkzBWa3rGWt4AuzgianHFkAZvU,1778
238
- jaclang/tests/test_cli.py,sha256=2HAKgbEWvi6NWrpVU_mXYTk-I1EWlR6yYi0c61_IK5c,8703
244
+ jaclang/tests/test_cli.py,sha256=eHnlkHg6_p52q_jvRhFr0LzblZj9cAtlNDbxm-EVixs,8703
239
245
  jaclang/tests/test_language.py,sha256=V7SsMd5M_746LkZ5H_JHq6pODPu0kJTkfV3GZMqIoLs,34203
240
246
  jaclang/tests/test_man_code.py,sha256=Kq93zg3hEfiouvpWvmfCgR6lDT5RKDp28k5ZaWe1Xeg,4519
241
247
  jaclang/tests/test_reference.py,sha256=b6mR0WTJ0-sKkvZtMGsGooxzkkmD4WfXj_hOY6ZnhYw,3341
242
248
  jaclang/tests/test_settings.py,sha256=TIX5uiu8H9IpZN2__uFiclcdCpBpPpcAwtlEHyFC4kk,1999
243
249
  jaclang/utils/__init__.py,sha256=86LQ_LDyWV-JFkYBpeVHpLaVxkqwFDP60XpWXOFZIQk,46
244
- jaclang/utils/helpers.py,sha256=7I7v3GhT0djRpo4cgRHKxUuAarTJBjhOBI3998wJTLw,6186
250
+ jaclang/utils/helpers.py,sha256=v-jQ-SDzGLrrLXKxoL1PaCguJqcV-X1UlwjWSL3GNAI,6142
245
251
  jaclang/utils/lang_tools.py,sha256=odv66Os8bJvw9JIUUkccGWvEPL98c-60veAiOiNyTy4,9956
246
252
  jaclang/utils/log.py,sha256=G8Y_DnETgTh9xzvlW5gh9zqJ1ap4YY_MDTwIMu5Uc0Y,262
247
- jaclang/utils/test.py,sha256=7-2Te0GQcKY3RJfNKa3cEJjG-RMC1r-0fHuOcFXrmE8,5383
253
+ jaclang/utils/test.py,sha256=5VK0hVo_IyfFiMFN_gz-dFx01yF3tPVZ56RKoAAZfaU,5374
248
254
  jaclang/utils/tests/__init__.py,sha256=8uwVqMsc6cxBAM1DuHLuNuTnzLXqOqM-WRa4ixOMF6w,23
249
255
  jaclang/utils/tests/test_lang_tools.py,sha256=hFQzkzdmJIhP99xqjR5z7bqkefMLmE6kwldXYrfK--E,4831
250
256
  jaclang/utils/treeprinter.py,sha256=q0x2ztq_HmFPPHqZD--7um9yvxmMhe7E6ETJN_KLy7k,11676
@@ -1470,7 +1476,7 @@ jaclang/vendor/typing_extensions-4.12.2.dist-info/METADATA,sha256=BeUQIa8cnYbrjW
1470
1476
  jaclang/vendor/typing_extensions-4.12.2.dist-info/RECORD,sha256=XS4fBVrPI7kaNZ56Ggl2RGa76jySWLqTzcrUpZIQTVM,418
1471
1477
  jaclang/vendor/typing_extensions-4.12.2.dist-info/WHEEL,sha256=EZbGkh7Ie4PoZfRQ8I0ZuP9VklN_TvcZ6DSE5Uar4z4,81
1472
1478
  jaclang/vendor/typing_extensions.py,sha256=gwekpyG9DVG3lxWKX4ni8u7nk3We5slG98mA9F3DJQw,134451
1473
- jaclang-0.6.5.dist-info/METADATA,sha256=6vtnoi2-XOXoeB-n3ZgVJv5X7qAQ4C8p-LQglGBl-nc,4213
1474
- jaclang-0.6.5.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
1475
- jaclang-0.6.5.dist-info/entry_points.txt,sha256=8sMi4Tvi9f8tQDN2QAXsSA2icO27zQ4GgEdph6bNEZM,49
1476
- jaclang-0.6.5.dist-info/RECORD,,
1479
+ jaclang-0.7.1.dist-info/METADATA,sha256=RkmhZ27yRPFOXpv9JlwGdiRjtBqoqWCHGLFMuWtygA8,4756
1480
+ jaclang-0.7.1.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
1481
+ jaclang-0.7.1.dist-info/entry_points.txt,sha256=8sMi4Tvi9f8tQDN2QAXsSA2icO27zQ4GgEdph6bNEZM,49
1482
+ jaclang-0.7.1.dist-info/RECORD,,