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.
- jaclang/compiler/constant.py +2 -0
- jaclang/compiler/jac.lark +5 -0
- jaclang/compiler/larkparse/jac_parser.py +2 -2
- jaclang/compiler/parser.py +16 -0
- jaclang/compiler/passes/main/__init__.py +2 -0
- jaclang/compiler/passes/main/pyast_gen_pass.py +3 -0
- jaclang/compiler/passes/main/sem_def_match_pass.py +67 -0
- jaclang/compiler/passes/main/sym_tab_build_pass.py +8 -0
- jaclang/compiler/passes/main/tests/fixtures/sem_def_match.impl.jac +12 -0
- jaclang/compiler/passes/main/tests/fixtures/sem_def_match.jac +31 -0
- jaclang/compiler/passes/main/tests/test_sem_def_match_pass.py +38 -0
- jaclang/compiler/passes/tool/doc_ir_gen_pass.py +22 -1
- jaclang/compiler/passes/tool/tests/fixtures/has_frmt.jac +13 -0
- jaclang/compiler/passes/tool/tests/test_jac_format_pass.py +7 -0
- jaclang/compiler/program.py +2 -0
- jaclang/compiler/unitree.py +56 -0
- {jaclang-0.8.2.dist-info → jaclang-0.8.3.dist-info}/METADATA +1 -1
- {jaclang-0.8.2.dist-info → jaclang-0.8.3.dist-info}/RECORD +20 -15
- {jaclang-0.8.2.dist-info → jaclang-0.8.3.dist-info}/WHEEL +0 -0
- {jaclang-0.8.2.dist-info → jaclang-0.8.3.dist-info}/entry_points.txt +0 -0
jaclang/compiler/parser.py
CHANGED
|
@@ -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
|
-
|
|
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(
|
jaclang/compiler/program.py
CHANGED
|
@@ -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
|
]
|
jaclang/compiler/unitree.py
CHANGED
|
@@ -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.
|
|
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=
|
|
10
|
-
jaclang/compiler/jac.lark,sha256=
|
|
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=
|
|
13
|
-
jaclang/compiler/parser.py,sha256=
|
|
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=
|
|
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=
|
|
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/
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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.
|
|
568
|
-
jaclang-0.8.
|
|
569
|
-
jaclang-0.8.
|
|
570
|
-
jaclang-0.8.
|
|
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,,
|
|
File without changes
|
|
File without changes
|