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

@@ -546,6 +546,22 @@ class JacParser(Transform[uni.Source, uni.Module]):
546
546
  )
547
547
  return impl
548
548
 
549
+ def sem_def(self, _: None) -> uni.SemDef:
550
+ """Grammar rule.
551
+
552
+ sem_def: KW_SEM dotted_name EQ multistring SEMI
553
+ """
554
+ self.consume_token(Tok.KW_SEM)
555
+ target = self.extract_from_list(self.consume(list), uni.NameAtom)
556
+ self.consume_token(Tok.EQ)
557
+ value = self.consume(uni.String)
558
+ self.consume_token(Tok.SEMI)
559
+ return uni.SemDef(
560
+ target=target,
561
+ value=value,
562
+ kid=self.flat_cur_nodes,
563
+ )
564
+
549
565
  def impl_spec(
550
566
  self, _: None
551
567
  ) -> Sequence[uni.Expr] | uni.FuncSignature | uni.EventSignature:
@@ -5,6 +5,7 @@ from .annex_pass import JacAnnexPass # noqa: I100
5
5
  from .sym_tab_build_pass import SymTabBuildPass, UniPass # noqa: I100
6
6
  from .sym_tab_link_pass import SymTabLinkPass # noqa: I100
7
7
  from .def_use_pass import DefUsePass # noqa: I100
8
+ from .sem_def_match_pass import SemDefMatchPass # noqa: I100
8
9
  from .import_pass import JacImportDepsPass, PyImportDepsPass # noqa: I100
9
10
  from .def_impl_match_pass import DeclImplMatchPass # noqa: I100
10
11
  from .pyast_load_pass import PyastBuildPass # type: ignore # noqa: I100
@@ -26,6 +27,7 @@ __all__ = [
26
27
  "SymTabLinkPass",
27
28
  "DeclImplMatchPass",
28
29
  "DefUsePass",
30
+ "SemDefMatchPass",
29
31
  "PyastBuildPass",
30
32
  "PyastGenPass",
31
33
  "PyBytecodeGenPass",
@@ -781,6 +781,9 @@ class PyastGenPass(UniPass):
781
781
  def exit_impl_def(self, node: uni.ImplDef) -> None:
782
782
  pass
783
783
 
784
+ def exit_sem_def(self, node: uni.SemDef) -> None:
785
+ pass
786
+
784
787
  def exit_func_signature(self, node: uni.FuncSignature) -> None:
785
788
  params = (
786
789
  [self.sync(ast3.arg(arg="self", annotation=None))]
@@ -0,0 +1,67 @@
1
+ """Semantic Definition Matching Pass for the Jac compiler.
2
+
3
+ This pass connects semantic string definitions (SemDefs) in the AST to their corresponding
4
+ declarations. It:
5
+
6
+ 1. Establishes links between semantic string definitions in the main module and their declarations
7
+ 2. Handles dotted name resolution for nested symbols
8
+ 3. Issues warnings for unmatched semantic definitions
9
+
10
+ This pass is essential for Jac's semantic annotation system, allowing developers to define
11
+ semantics in one file and link them to their corresponding declarations in another.
12
+ """
13
+
14
+ import jaclang.compiler.unitree as uni
15
+ from jaclang.compiler.passes.transform import Transform
16
+ from jaclang.compiler.unitree import Symbol, UniScopeNode
17
+
18
+
19
+ class SemDefMatchPass(Transform[uni.Module, uni.Module]):
20
+ """Jac Semantic definition match pass."""
21
+
22
+ def transform(self, ir_in: uni.Module) -> uni.Module:
23
+ """Connect Decls and Defs."""
24
+ self.cur_node = ir_in
25
+
26
+ self.connect_sems(ir_in.sym_tab, ir_in.sym_tab)
27
+ for impl_module in ir_in.impl_mod:
28
+ self.connect_sems(impl_module.sym_tab, ir_in.sym_tab)
29
+
30
+ return ir_in
31
+
32
+ def find_symbol_from_dotted_name(
33
+ self, dotted_name: str, target_sym_tab: UniScopeNode
34
+ ) -> Symbol | None:
35
+ """Find a symbol in the target symbol table by its dotted name.
36
+
37
+ Example:
38
+ "Foo.bar.baz" will do the following lookups:
39
+ target_sym_tab.lookup("Foo").lookup("bar").lookup("baz")
40
+ """
41
+ parts = dotted_name.lstrip("sem.").split(".")
42
+ current_sym_tab = target_sym_tab
43
+ sym: uni.Symbol | None = None
44
+ for part in parts:
45
+ if current_sym_tab is None:
46
+ return None
47
+ sym = current_sym_tab.lookup(part, deep=False)
48
+ if sym is None:
49
+ return None
50
+ current_sym_tab = sym.fetch_sym_tab
51
+ return sym
52
+
53
+ def connect_sems(
54
+ self, source_sym_tab: UniScopeNode, target_sym_tab: UniScopeNode
55
+ ) -> None:
56
+ """Connect sem strings from source symbol table to declarations in target symbol table.
57
+
58
+ When source_sym_tab and target_sym_tab are the same, this connects within the same module.
59
+ When different, it connects implementations from impl_mod to declarations in the main module.
60
+ """
61
+ for sym in source_sym_tab.names_in_scope.values():
62
+ if not isinstance(sym.decl.name_of, uni.SemDef):
63
+ continue
64
+ semdef = sym.decl.name_of
65
+ target_sym = self.find_symbol_from_dotted_name(sym.sym_name, target_sym_tab)
66
+ if target_sym is not None:
67
+ target_sym.decl.name_of.semstr = semdef.value.lit_value
@@ -115,6 +115,14 @@ class SymTabBuildPass(UniPass):
115
115
  def exit_impl_def(self, node: uni.ImplDef) -> None:
116
116
  self.pop_scope()
117
117
 
118
+ def enter_sem_def(self, node: uni.SemDef) -> None:
119
+ self.push_scope_and_link(node)
120
+ assert node.parent_scope is not None
121
+ node.parent_scope.def_insert(node, single_decl="sem")
122
+
123
+ def exit_sem_def(self, node: uni.SemDef) -> None:
124
+ self.pop_scope()
125
+
118
126
  def enter_enum(self, node: uni.Enum) -> None:
119
127
  self.push_scope_and_link(node)
120
128
  assert node.parent_scope is not None
@@ -0,0 +1,12 @@
1
+
2
+ sem Person = "A class representing a person.";
3
+ sem Person.name = "The name of the person.";
4
+ sem Person.yob = "The year of birth of the person.";
5
+
6
+ sem Person.calc_age = "Calculate the age of the person.";
7
+ sem Person.calc_age.year = "The year to calculate the age against.";
8
+
9
+
10
+ sem OuterClass = "A class containing an inner class.";
11
+ sem OuterClass.InnerClass = "An inner class within OuterClass.";
12
+ sem OuterClass.InnerClass.inner_value = "A value specific to the inner class.";
@@ -0,0 +1,31 @@
1
+
2
+ enum E {
3
+ A = 0,
4
+ B = 1,
5
+ }
6
+
7
+ sem E = "An enum representing some values.";
8
+ sem E.A = "The first value of the enum E.";
9
+ sem E.B = "The second value of the enum E.";
10
+
11
+ obj Person {
12
+ has name: str;
13
+ has yob: int;
14
+
15
+ def calc_age(year: int) -> int {
16
+ return year - self.yob;
17
+ }
18
+ }
19
+
20
+
21
+ obj OuterClass {
22
+ obj InnerClass {
23
+ has inner_value: str;
24
+ }
25
+ }
26
+
27
+
28
+
29
+ with entry {
30
+ print(E.A);
31
+ }
@@ -0,0 +1,38 @@
1
+ """Test pass module."""
2
+
3
+ import jaclang.compiler.unitree as uni
4
+ from jaclang.compiler.program import JacProgram
5
+ from jaclang.utils.test import TestCase
6
+
7
+
8
+ class SemDefMatchPassTests(TestCase):
9
+ """Test pass module."""
10
+
11
+ def test_sem_def_match(self) -> None:
12
+ """Basic test for pass."""
13
+ (out := JacProgram()).compile(self.fixture_abs_path("sem_def_match.jac"))
14
+ self.assertFalse(out.errors_had)
15
+ mod = out.mod.hub[self.fixture_abs_path("sem_def_match.jac")]
16
+
17
+ self.assertEqual(mod.lookup("E").decl.name_of.semstr, "An enum representing some values.") # type: ignore
18
+ self.assertEqual(mod.lookup("E").fetch_sym_tab.lookup("A").decl.name_of.semstr, "The first value of the enum E.") # type: ignore
19
+ self.assertEqual(mod.lookup("E").fetch_sym_tab.lookup("B").decl.name_of.semstr, "The second value of the enum E.") # type: ignore
20
+
21
+ self.assertEqual(mod.lookup("Person").decl.name_of.semstr, "A class representing a person.") # type: ignore
22
+
23
+ person_scope = mod.lookup("Person").fetch_sym_tab # type: ignore
24
+ self.assertEqual(person_scope.lookup("name").decl.name_of.semstr, "The name of the person.") # type: ignore
25
+ self.assertEqual(person_scope.lookup("yob").decl.name_of.semstr, "The year of birth of the person.") # type: ignore
26
+
27
+ sym_calc_age = person_scope.lookup("calc_age") # type: ignore
28
+ self.assertEqual(sym_calc_age.decl.name_of.semstr, "Calculate the age of the person.") # type: ignore
29
+
30
+ calc_age_scope = sym_calc_age.fetch_sym_tab # type: ignore
31
+ self.assertEqual(calc_age_scope.lookup("year").decl.name_of.semstr, "The year to calculate the age against.") # type: ignore
32
+
33
+ self.assertEqual(mod.lookup("OuterClass").decl.name_of.semstr, "A class containing an inner class.") # type: ignore
34
+ outer_scope = mod.lookup("OuterClass").fetch_sym_tab # type: ignore
35
+ self.assertEqual(outer_scope.lookup("InnerClass").decl.name_of.semstr, "An inner class within OuterClass.") # type: ignore
36
+ inner_scope = outer_scope.lookup("InnerClass").fetch_sym_tab # type: ignore
37
+ self.assertEqual(inner_scope.lookup("inner_value").decl.name_of.semstr, "A value specific to the inner class.") # type: ignore
38
+
@@ -530,6 +530,8 @@ class DocIRGenPass(UniPass):
530
530
  if isinstance(i, uni.Token) and i.name == Tok.LBRACE:
531
531
  parts.append(self.tight_line())
532
532
  parts.append(i.gen.doc_ir)
533
+ elif isinstance(i, uni.Token) and i.name == Tok.RBRACE:
534
+ parts.append(i.gen.doc_ir)
533
535
  else:
534
536
  parts.append(i.gen.doc_ir)
535
537
  parts.append(self.space())
@@ -557,6 +559,7 @@ class DocIRGenPass(UniPass):
557
559
  parts.append(i.gen.doc_ir)
558
560
  else:
559
561
  parts.append(i.gen.doc_ir)
562
+ # parts.pop()
560
563
  node.gen.doc_ir = self.group(self.concat(parts))
561
564
 
562
565
  def exit_arch_has(self, node: uni.ArchHas) -> None:
@@ -569,7 +572,10 @@ class DocIRGenPass(UniPass):
569
572
  elif isinstance(i, uni.Token) and i.name == Tok.SEMI:
570
573
  parts.pop()
571
574
  parts.append(i.gen.doc_ir)
572
- parts.append(self.space())
575
+ elif isinstance(i, uni.Token) and i.name == Tok.COMMA:
576
+ parts.pop()
577
+ parts.append(i.gen.doc_ir)
578
+ parts.append(self.indent(self.hard_line()))
573
579
  else:
574
580
  parts.append(i.gen.doc_ir)
575
581
  parts.append(self.space())
@@ -1316,6 +1322,21 @@ class DocIRGenPass(UniPass):
1316
1322
  parts.append(self.space())
1317
1323
  node.gen.doc_ir = self.group(self.concat(parts))
1318
1324
 
1325
+ def exit_sem_def(self, node: uni.SemDef) -> None:
1326
+ """Generate DocIR for semantic definitions."""
1327
+ parts: list[doc.DocType] = []
1328
+ for i in node.kid:
1329
+ if i in node.target:
1330
+ parts.append(i.gen.doc_ir)
1331
+ elif isinstance(i, uni.Token) and i.name == Tok.SEMI:
1332
+ parts.pop()
1333
+ parts.append(i.gen.doc_ir)
1334
+ parts.append(self.space())
1335
+ else:
1336
+ parts.append(i.gen.doc_ir)
1337
+ parts.append(self.space())
1338
+ node.gen.doc_ir = self.group(self.concat(parts))
1339
+
1319
1340
  def exit_event_signature(self, node: uni.EventSignature) -> None:
1320
1341
  """Generate DocIR for event signatures."""
1321
1342
  parts: list[doc.DocType] = []
@@ -0,0 +1,13 @@
1
+ obj Anchor(ArchetypeProtocol) {
2
+ has ob: object,
3
+ ds_entry_funcs: list[DSFunc],
4
+ ds_exit_funcs: list[DSFunc],
5
+ jid: UUID = :> uuid4(),
6
+ timestamp: datetime = :> datetime.now,
7
+ persist: bool = False,
8
+ access_mode: AccessMode = AccessMode.PRIVATE,
9
+ rw_access: set = :> set(),
10
+ ro_access: set = :> set(),
11
+ owner_id: UUID = exec_ctx.master,
12
+ mem: Memory = exec_ctx.memory;
13
+ }
@@ -57,6 +57,12 @@ class JacFormatPassTests(TestCaseMicroSuite):
57
57
  os.path.join(self.fixture_abs_path(""), "tagbreak.jac"),
58
58
  )
59
59
 
60
+ def test_has_fmt(self) -> None:
61
+ """Tests if the file matches a particular format."""
62
+ self.compare_files(
63
+ os.path.join(self.fixture_abs_path(""), "has_frmt.jac"),
64
+ )
65
+
60
66
  def test_import_fmt(self) -> None:
61
67
  """Tests if the file matches a particular format."""
62
68
  self.compare_files(
@@ -68,6 +74,7 @@ class JacFormatPassTests(TestCaseMicroSuite):
68
74
  self.compare_files(
69
75
  os.path.join(self.fixture_abs_path(""), "archetype_frmt.jac"),
70
76
  )
77
+
71
78
  # def test_corelib_fmt(self) -> None:
72
79
  # """Tests if the file matches a particular format."""
73
80
  # self.compare_files(
@@ -21,6 +21,7 @@ from jaclang.compiler.passes.main import (
21
21
  PyJacAstLinkPass,
22
22
  PyastBuildPass,
23
23
  PyastGenPass,
24
+ SemDefMatchPass,
24
25
  SymTabBuildPass,
25
26
  SymTabLinkPass,
26
27
  Transform,
@@ -39,6 +40,7 @@ ir_gen_sched = [
39
40
  SymTabBuildPass,
40
41
  DeclImplMatchPass,
41
42
  DefUsePass,
43
+ SemDefMatchPass,
42
44
  CFGBuildPass,
43
45
  InheritancePass,
44
46
  ]
@@ -548,6 +548,7 @@ class AstSymbolNode(UniNode):
548
548
  self.name_spec.name_of = self
549
549
  self.name_spec._sym_name = sym_name
550
550
  self.name_spec._sym_category = sym_category
551
+ self.semstr = ""
551
552
 
552
553
  @property
553
554
  def sym(self) -> Optional[Symbol]:
@@ -1621,6 +1622,61 @@ class ImplDef(CodeBlockStmt, ElementStmt, ArchBlockStmt, AstSymbolNode, UniScope
1621
1622
  return res
1622
1623
 
1623
1624
 
1625
+ class SemDef(ElementStmt, AstSymbolNode, UniScopeNode):
1626
+ """SemDef node type for Jac Ast."""
1627
+
1628
+ def __init__(
1629
+ self,
1630
+ target: Sequence[NameAtom],
1631
+ value: String,
1632
+ kid: Sequence[UniNode],
1633
+ ) -> None:
1634
+ self.target = target
1635
+ self.value = value
1636
+ UniNode.__init__(self, kid=kid)
1637
+ AstSymbolNode.__init__(
1638
+ self,
1639
+ sym_name="sem." + ".".join([x.sym_name for x in self.target]),
1640
+ name_spec=self.create_sem_name_node(),
1641
+ sym_category=SymbolType.SEM,
1642
+ )
1643
+ UniScopeNode.__init__(self, name=self.sym_name)
1644
+
1645
+ def create_sem_name_node(self) -> Name:
1646
+ ret = Name(
1647
+ orig_src=self.target[-1].loc.orig_src,
1648
+ name=Tok.NAME.value,
1649
+ value="sem." + ".".join([x.sym_name for x in self.target]),
1650
+ col_start=self.target[0].loc.col_start,
1651
+ col_end=self.target[-1].loc.col_end,
1652
+ line=self.target[0].loc.first_line,
1653
+ end_line=self.target[-1].loc.last_line,
1654
+ pos_start=self.target[0].loc.pos_start,
1655
+ pos_end=self.target[-1].loc.pos_end,
1656
+ )
1657
+ ret.parent = self
1658
+ return ret
1659
+
1660
+ def normalize(self, deep: bool = False) -> bool:
1661
+ res = True
1662
+ if deep:
1663
+ for item in self.target:
1664
+ res = res and item.normalize(deep)
1665
+ res = res and self.value.normalize(deep)
1666
+ new_kid: list[UniNode] = [
1667
+ self.gen_token(Tok.KW_SEM),
1668
+ ]
1669
+ for idx, item in enumerate(self.target):
1670
+ new_kid.append(item)
1671
+ if idx < len(self.target) - 1:
1672
+ new_kid.append(self.gen_token(Tok.DOT))
1673
+ new_kid.append(self.gen_token(Tok.EQ))
1674
+ new_kid.append(self.value)
1675
+ new_kid.append(self.gen_token(Tok.SEMI))
1676
+ self.set_kids(nodes=new_kid)
1677
+ return res
1678
+
1679
+
1624
1680
  class Enum(ArchSpec, AstAccessNode, AstImplNeedingNode, ArchBlockStmt, UniScopeNode):
1625
1681
  """Enum node type for Jac Ast."""
1626
1682
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: jaclang
3
- Version: 0.8.2
3
+ Version: 0.8.3
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
  License: MIT
6
6
  Keywords: jac,jaclang,jaseci,python,programming-language,machine-learning,artificial-intelligence
@@ -6,24 +6,25 @@ jaclang/cli/cli.py,sha256=HhqQ6_c2KwroRf7i4z2ry3B7xlzsW1bytXtUZI5AUDw,19950
6
6
  jaclang/cli/cmdreg.py,sha256=EcFsN2Ll9cJdnBOWwO_R1frp0zP8KBKVfATfYsuWmLQ,14392
7
7
  jaclang/compiler/__init__.py,sha256=RKFpQRMZ-UWKVNEWCVsJmdV4Q8f1bJnAEIDd2p2qqH8,2530
8
8
  jaclang/compiler/codeinfo.py,sha256=ZOSAp1m3dBA8UF-YUz6H6l3wDs1EcuY4xWp13XmgHCo,2332
9
- jaclang/compiler/constant.py,sha256=13pvhTPWwK2DKnVAqcJMIE8geo5-AeTx-THyvVc5yS0,8165
10
- jaclang/compiler/jac.lark,sha256=4DpXcd3CWzZQ1sABUGLLXQAFZKtXkbSIs-2p4xzhFjE,18330
9
+ jaclang/compiler/constant.py,sha256=IQVtg-GuL8y-cxNptaX_3pLnOikH5wstVX6VjpwbpuI,8220
10
+ jaclang/compiler/jac.lark,sha256=3PN9QElJ-YOKvgZShyxAkAh189pbKWOeo9ZPxmSgsKE,18431
11
11
  jaclang/compiler/larkparse/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
12
- jaclang/compiler/larkparse/jac_parser.py,sha256=bf5Hro6vBSx37NVQDcl5gQBONatWNJuIAwstpaLw3aQ,318946
13
- jaclang/compiler/parser.py,sha256=xSLX-r-rNCCdd9RmRaHw3dtxwdGW3K9nJ7jRX0N6quw,106178
12
+ jaclang/compiler/larkparse/jac_parser.py,sha256=Q6oRmW7u2ty_NzlTUTXg3JijiO4aSeUIDOuTvJtpZx8,322714
13
+ jaclang/compiler/parser.py,sha256=6tFri3JTDOuGEUDNpMVXefkkRdEmjn1onY7lGlPgx78,106727
14
14
  jaclang/compiler/passes/__init__.py,sha256=gQjeT9UTNAHTgOvRX9zeY20jC22cZVl2HhKuUKZo66M,100
15
- jaclang/compiler/passes/main/__init__.py,sha256=_9UOkS_4J3FLok_wxLKNk3LqWpcjhRonNs6jVy4JdF8,1186
15
+ jaclang/compiler/passes/main/__init__.py,sha256=9qMiQaoaywqozxVr3qgefud2M9SuF_zZn50ldzOcpdM,1271
16
16
  jaclang/compiler/passes/main/annex_pass.py,sha256=EcMmXTMg8H3VoOCkxHUnCSWzJJykE1U_5YRuKF1VpYw,3082
17
17
  jaclang/compiler/passes/main/cfg_build_pass.py,sha256=3pms5O00l17pt3Za6EqT9pTM_uX2gZlISC8HbhvEmAc,12349
18
18
  jaclang/compiler/passes/main/def_impl_match_pass.py,sha256=AYhqi5ZFzUQyrJVFAPa9H8Bf0FZj4wZau16pTpMBib4,10143
19
19
  jaclang/compiler/passes/main/def_use_pass.py,sha256=dw_dQmwx8KPE0mfa-PLTdhTMbIY6XOJYzAdhwqR7V6w,4945
20
20
  jaclang/compiler/passes/main/import_pass.py,sha256=gloHpNqgF-VzL_h50rAn06Rr9fJS3tpFIhGpE3yOQ0A,15019
21
21
  jaclang/compiler/passes/main/inheritance_pass.py,sha256=8N3wfTa4Udvfl7WLjauvHNJSPNuxH7NO2SEvS6Z5Vvs,5141
22
- jaclang/compiler/passes/main/pyast_gen_pass.py,sha256=a14ErSqOjRp4qV_FNYwlNdCvLN0faBOzQCNlcQ5Nm_I,104077
22
+ jaclang/compiler/passes/main/pyast_gen_pass.py,sha256=WuDunaRNgmCjC14IOqixZZqMBmUQwPd7Oq3va7UHdPk,104145
23
23
  jaclang/compiler/passes/main/pyast_load_pass.py,sha256=zHi9p0STszSk6pHjkgXqz9PQfRa2sfXdMat0mWyXLHM,84794
24
24
  jaclang/compiler/passes/main/pybc_gen_pass.py,sha256=KUQ31396CBb_ib85rYL_QhvHY75ZxyJm8qSps8KYSyE,1876
25
25
  jaclang/compiler/passes/main/pyjac_ast_link_pass.py,sha256=_4l6CLZ_UHDSD0aJyyGesAvY0BSgWtc4F7Deikqgbko,5584
26
- jaclang/compiler/passes/main/sym_tab_build_pass.py,sha256=dmN59uwazmWrG0zRPNmwvzGFRMx82ZQL2Tqq_AxXGyA,7524
26
+ jaclang/compiler/passes/main/sem_def_match_pass.py,sha256=-B9JlObWLhvgnXvAy22wOYPAeiJzNDav0-kyFQKflAU,2697
27
+ jaclang/compiler/passes/main/sym_tab_build_pass.py,sha256=GzggkM2HuGYCgLeDlgsqPIBKumGY_baVL_rh4KgLtxg,7806
27
28
  jaclang/compiler/passes/main/sym_tab_link_pass.py,sha256=2sqSmgxFd4YQZT4CiPxcfRi4Nrlv-ETP82_tSnYuFGA,5497
28
29
  jaclang/compiler/passes/main/tests/__init__.py,sha256=RgheAgh-SqGTa-4kBOY-V-oz8bzMmDWxavFqwlYjfgE,36
29
30
  jaclang/compiler/passes/main/tests/fixtures/access_checker.jac,sha256=UVoY7sYW-R0ms2HDA4HXQ5xJNiW0vEbY2T5CCY1avus,281
@@ -71,6 +72,8 @@ jaclang/compiler/passes/main/tests/fixtures/pygame_mock/__init__.pyi,sha256=Y1RS
71
72
  jaclang/compiler/passes/main/tests/fixtures/pygame_mock/color.py,sha256=pvJICEi1sv2hRU88_fekFPeotv3vFyPs57POOkPHPh8,76
72
73
  jaclang/compiler/passes/main/tests/fixtures/pygame_mock/constants.py,sha256=1i-OHdp8rQJNN_Bv6G4Nd3mBfKAn-V0O4pyR4ewg5kA,61
73
74
  jaclang/compiler/passes/main/tests/fixtures/pygame_mock/display.py,sha256=uzQZvyHHf4iPAodRBuBxrnwx3CpDPbMxcsGRlUB_9GY,29
75
+ jaclang/compiler/passes/main/tests/fixtures/sem_def_match.impl.jac,sha256=RmAD6aW9BGeTlmSihyoZTk5JJCgOKSePiQVazY8cqtM,476
76
+ jaclang/compiler/passes/main/tests/fixtures/sem_def_match.jac,sha256=zQ4zrSxhvYno7YZmdbs1m3edrkrs7fiF6T8RDN4xkYs,410
74
77
  jaclang/compiler/passes/main/tests/fixtures/str2doc.py,sha256=NYewMLGAYR8lrC5NxSNU_P0rNPhWSaiVIcvqg6jtQ54,73
75
78
  jaclang/compiler/passes/main/tests/fixtures/symtab_link_tests/action/__init__.py,sha256=q4Y-kZibGbSLBnW8U_4j_5z_J2tevzBwhcw5EureENU,97
76
79
  jaclang/compiler/passes/main/tests/fixtures/symtab_link_tests/action/actions.jac,sha256=cDHCNudzrjSL0oXMd2uSFj5tpskAhzWKhZy0NZkVR58,283
@@ -85,12 +88,13 @@ jaclang/compiler/passes/main/tests/test_import_pass.py,sha256=2FNsF6Z4zRUsxWOOcb
85
88
  jaclang/compiler/passes/main/tests/test_pyast_build_pass.py,sha256=MIn0rGJ_fdyH-g1mtTNopwng9SQNSzGta5kiEXB4Ffg,1973
86
89
  jaclang/compiler/passes/main/tests/test_pyast_gen_pass.py,sha256=ED5f9r8ck9bKAo4wsKNsZ9HV-n9WrrFsWpY2I-r-XFk,4341
87
90
  jaclang/compiler/passes/main/tests/test_pybc_gen_pass.py,sha256=x92ZvO3vAehSlZojzTE6H4_Sc-mB2tK3gG-dZTWxqFQ,650
91
+ jaclang/compiler/passes/main/tests/test_sem_def_match_pass.py,sha256=-4m_fmLZC6l5Jk4STNB7pXS9qw21CUFulhM4PXlyuYE,2262
88
92
  jaclang/compiler/passes/main/tests/test_sub_node_pass.py,sha256=zO2PNo5DgtD1Qud8rTEdr-gLUVcMUXpQCBY-8-nj684,771
89
93
  jaclang/compiler/passes/main/tests/test_sym_tab_build_pass.py,sha256=7gtUU9vV3q5x2vFt_oHyrq9Q4q538rWcO8911NFtmK4,701
90
94
  jaclang/compiler/passes/main/tests/test_sym_tab_link_pass.py,sha256=N7eNPyIEwiM_1yECaErncmRXTidp89fFRFGFTd_AgIo,1894
91
95
  jaclang/compiler/passes/tool/__init__.py,sha256=8M5dq_jq2TC4FCx4Aqr0-Djzf2i_w_1HtYSMLZ0CXNY,299
92
96
  jaclang/compiler/passes/tool/doc_ir.py,sha256=okuoESF1qLbd3OHQxcfzHs35c6eilcIBp2sWNGg1m5w,5978
93
- jaclang/compiler/passes/tool/doc_ir_gen_pass.py,sha256=BKHnzHaO9WSTZ3V3OkKGg4YQAO7xlt8VCWQ4_X9sJOk,55891
97
+ jaclang/compiler/passes/tool/doc_ir_gen_pass.py,sha256=Yo2akxld2eX2_arsO5SbZkvN3cw3mykBZa9vXTk8RW0,56771
94
98
  jaclang/compiler/passes/tool/fuse_comments_pass.py,sha256=GO-8ISvsD9L98ujeMsT5r_drpmnltRX5MWZCNKOFpGc,4530
95
99
  jaclang/compiler/passes/tool/jac_formatter_pass.py,sha256=9Bk5_jHMKNPNhTsEKpWu40Q7ZL2jfdEYuMbriA1RCU4,6138
96
100
  jaclang/compiler/passes/tool/tests/__init__.py,sha256=AeOaZjA1rf6VAr0JqIit6jlcmOzW7pxGr4U1fOwgK_Y,24
@@ -106,6 +110,7 @@ jaclang/compiler/passes/tool/tests/fixtures/general_format_checks/esc_keywords.j
106
110
  jaclang/compiler/passes/tool/tests/fixtures/general_format_checks/line_spacing.jac,sha256=JAuaxnvG81o92uQG_SWawD9rceDGp4wjnDrreeBcQHw,1040
107
111
  jaclang/compiler/passes/tool/tests/fixtures/general_format_checks/long_names.jac,sha256=f3ptg81A3mub7OdsVlxvX7FInEmT6Y2D55ZacQ7kZQw,734
108
112
  jaclang/compiler/passes/tool/tests/fixtures/general_format_checks/triple_quoted_string.jac,sha256=N8pvJ0XIElQWSpbDSpDF7bx-B9QSVJwIWr0P3RBGoE8,194
113
+ jaclang/compiler/passes/tool/tests/fixtures/has_frmt.jac,sha256=vIRwKItNJxbyAkSPpoFXMVKDnt3DWAQQKhu-5YCT1b0,444
109
114
  jaclang/compiler/passes/tool/tests/fixtures/import_fmt.jac,sha256=AglE8wZwyIXWptkRADT41o39MPucRfXtyRMutjStaX8,241
110
115
  jaclang/compiler/passes/tool/tests/fixtures/multi_def_err.dot,sha256=Y4BtfJXqeqBHmsyRgfn_qjQCl0w-_YcKj9hoTyq80UY,1391
111
116
  jaclang/compiler/passes/tool/tests/fixtures/multi_def_err.jac,sha256=BxgmNUdz76gKLi6PXnLZE9rartodMgch5ydpGrd25Ec,87
@@ -128,12 +133,12 @@ jaclang/compiler/passes/tool/tests/fixtures/simple_walk.jac,sha256=5g_oneTxvkcV7
128
133
  jaclang/compiler/passes/tool/tests/fixtures/simple_walk_fmt.jac,sha256=xHVLZgbuKsPmMAZOw-lPVqffWKXLOXkuAR1wzXn4l40,835
129
134
  jaclang/compiler/passes/tool/tests/fixtures/tagbreak.jac,sha256=6IvbR0f8jMillstauSGmck-BV7ktbdiFnruBKE7Nn9o,343
130
135
  jaclang/compiler/passes/tool/tests/test_fuse_comments_pass.py,sha256=ZeWHsm7VIyyS8KKpoB2SdlHM4jF22fMfSrfTfxt2MQw,398
131
- jaclang/compiler/passes/tool/tests/test_jac_format_pass.py,sha256=BfzOOdr5uGYpkobRcgkGtFCo2jjIHr_dg63e80P_Jyc,6383
136
+ jaclang/compiler/passes/tool/tests/test_jac_format_pass.py,sha256=CXn42HkopQVMSWtK3a5zX0cFP8kAlX5_Ut-Tg4bjxNE,6589
132
137
  jaclang/compiler/passes/tool/tests/test_unparse_validate.py,sha256=fYlz31RQQUwmg3zYWHbXuwBksxli-zxk0HCVP42igAo,2214
133
138
  jaclang/compiler/passes/transform.py,sha256=haZ6zcxT5VJrYVFcQqe8vKPB5wzHhqHW438erTmYxJ0,4544
134
139
  jaclang/compiler/passes/uni_pass.py,sha256=Y1Y3TTrulqlpIGQUCZhBGkHVCvMg-AXfzCjV8dfGQm0,4841
135
140
  jaclang/compiler/passes/utils/__init__.py,sha256=UsI5rUopTUiStAzup4kbPwIwrnC5ofCrqWBCBbM2-k4,35
136
- jaclang/compiler/program.py,sha256=HLfDMXo8DAMnp4Pppsvt2VWekieEY80OHvSYNY3PKD8,5547
141
+ jaclang/compiler/program.py,sha256=csD-_A4N6oXVrfvddt9sj5hbkMH8N6ZtaMnpwqkqIG0,5589
137
142
  jaclang/compiler/tests/__init__.py,sha256=qiXa5UNRBanGOcplFKTT9a_9GEyiv7goq1OzuCjDCFE,27
138
143
  jaclang/compiler/tests/fixtures/__init__.py,sha256=udQ0T6rajpW_nMiYKJNckqP8izZ-pH3P4PNTJEln2NU,36
139
144
  jaclang/compiler/tests/fixtures/activity.py,sha256=fSvxYDKufsPeQIrbuh031zHw_hdbRv5iK9mS7dD8E54,263
@@ -156,7 +161,7 @@ jaclang/compiler/tests/fixtures/staticcheck.jac,sha256=N44QGwRGK_rDY0uACqpkMQYRf
156
161
  jaclang/compiler/tests/fixtures/stuff.jac,sha256=qOq6WOwhlprMmJpiqQudgqnr4qTd9uhulQSDGQ3o6sY,82
157
162
  jaclang/compiler/tests/test_importer.py,sha256=BQOuHdrOL5dd0mWeXvX9Om07O9jN59KVGMghbNewfOE,4621
158
163
  jaclang/compiler/tests/test_parser.py,sha256=LeIVgyQGZmjH_dx8T6g4fOv3KWNzhtfwKn9C3WVdBCM,5888
159
- jaclang/compiler/unitree.py,sha256=KyBaurqng2515S3Y_KY9CwZwCV55Sfhju3IqksDnvZA,152410
164
+ jaclang/compiler/unitree.py,sha256=sUxAl91AkjLQy5HBYfm4TeqS5I0DsPf1dpKTrP2ApLI,154313
160
165
  jaclang/langserve/__init__.jac,sha256=3IEtXWjsqOgLA-LPqCwARCw0Kd8B_NeLedALxGshfAE,33
161
166
  jaclang/langserve/engine.jac,sha256=wrLswykc1hq7Kldm5AnEDb5l_sMuTakZOjklxOCsBrA,21444
162
167
  jaclang/langserve/sem_manager.jac,sha256=Gg95nKvXz9RwUNPshgUPHlrdFI8EWzk7Hxxgvs0xwa4,13795
@@ -564,7 +569,7 @@ jaclang/vendor/pygls-1.3.1.dist-info/METADATA,sha256=UrPOpO2PXE7J37ysVVxbhhnlrDo
564
569
  jaclang/vendor/pygls-1.3.1.dist-info/RECORD,sha256=tDNU1eqobIApvaPBeG0fjRRWIV709NpKeniNk-vCLoI,3056
565
570
  jaclang/vendor/pygls-1.3.1.dist-info/REQUESTED,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
566
571
  jaclang/vendor/pygls-1.3.1.dist-info/WHEEL,sha256=fGIA9gx4Qxk2KDKeNJCbOEwSrmLtjWCwzBz351GyrPQ,88
567
- jaclang-0.8.2.dist-info/METADATA,sha256=QLB7jcht0k7voIvm2kj8UhXx4pO9Kb0930YCS1oME_4,5014
568
- jaclang-0.8.2.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
569
- jaclang-0.8.2.dist-info/entry_points.txt,sha256=8sMi4Tvi9f8tQDN2QAXsSA2icO27zQ4GgEdph6bNEZM,49
570
- jaclang-0.8.2.dist-info/RECORD,,
572
+ jaclang-0.8.3.dist-info/METADATA,sha256=zkiLQi-iWXgb0y3sCdlEqEzviQEBrfp-QzXp4D3OR8c,5014
573
+ jaclang-0.8.3.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
574
+ jaclang-0.8.3.dist-info/entry_points.txt,sha256=8sMi4Tvi9f8tQDN2QAXsSA2icO27zQ4GgEdph6bNEZM,49
575
+ jaclang-0.8.3.dist-info/RECORD,,