jaclang 0.2.4__py3-none-any.whl → 0.3.0__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 (82) hide show
  1. jaclang/__init__.py +9 -3
  2. jaclang/cli/__init__.py +0 -1
  3. jaclang/cli/__jac_gen__/cli.py +6 -6
  4. jaclang/cli/__jac_gen__/cli_impl.py +2 -2
  5. jaclang/cli/__jac_gen__/cmds.py +2 -3
  6. jaclang/cli/__jac_gen__/cmds_impl.py +2 -3
  7. jaclang/cli/cmds.jac +1 -1
  8. jaclang/cli/cmds_impl.jac +2 -3
  9. jaclang/core/__init__.py +5 -11
  10. jaclang/core/__jac_gen__/corelib.py +289 -0
  11. jaclang/core/__jac_gen__/corelib_impl.py +220 -0
  12. jaclang/core/corelib.jac +21 -34
  13. jaclang/core/corelib_impl.jac +317 -0
  14. jaclang/jac/__init__.py +1 -0
  15. jaclang/jac/__jac_gen__/jac_parser.py +2 -2
  16. jaclang/jac/absyntree.py +32 -62
  17. jaclang/jac/constant.py +3 -7
  18. jaclang/jac/importer.py +1 -1
  19. jaclang/jac/parser.py +14 -10
  20. jaclang/jac/passes/main/__init__.py +2 -0
  21. jaclang/jac/passes/main/def_use_pass.py +4 -7
  22. jaclang/jac/passes/main/pyast_gen_pass.py +116 -35
  23. jaclang/jac/passes/main/schedules.py +6 -0
  24. jaclang/jac/passes/main/sym_tab_build_pass.py +40 -19
  25. jaclang/jac/passes/main/tests/test_jac_format_pass.py +22 -4
  26. jaclang/jac/passes/main/tests/test_pyast_gen_pass.py +3 -1
  27. jaclang/jac/passes/main/tests/test_type_check_pass.py +42 -0
  28. jaclang/jac/passes/main/type_check_pass.py +103 -0
  29. jaclang/jac/passes/tool/ast_printer_pass.py +8 -2
  30. jaclang/jac/passes/tool/fuse_comments_pass.py +57 -39
  31. jaclang/jac/passes/tool/jac_formatter_pass.py +419 -192
  32. jaclang/jac/passes/tool/sym_tab_printer_pass.py +10 -93
  33. jaclang/jac/passes/tool/tests/test_ast_print_pass.py +2 -1
  34. jaclang/jac/passes/transform.py +0 -39
  35. jaclang/jac/passes/utils/__init__.py +1 -0
  36. jaclang/jac/passes/utils/mypy_ast_build.py +302 -0
  37. jaclang/jac/plugin/__init__.py +5 -2
  38. jaclang/jac/plugin/default.py +20 -4
  39. jaclang/jac/plugin/feature.py +16 -7
  40. jaclang/jac/plugin/spec.py +34 -6
  41. jaclang/jac/symtable.py +6 -0
  42. jaclang/jac/tests/test_workspace.py +55 -1
  43. jaclang/jac/transpiler.py +4 -9
  44. jaclang/utils/helpers.py +0 -33
  45. jaclang/utils/lang_tools.py +3 -0
  46. jaclang/utils/test.py +3 -1
  47. jaclang/utils/treeprinter.py +171 -0
  48. jaclang/vendor/lark/py.typed +0 -0
  49. jaclang/vendor/mypy/checker.py +19 -12
  50. jaclang/vendor/mypy/checkexpr.py +31 -10
  51. jaclang/vendor/mypy/constraints.py +56 -38
  52. jaclang/vendor/mypy/expandtype.py +1 -0
  53. jaclang/vendor/mypy/meet.py +10 -1
  54. jaclang/vendor/mypy/messages.py +16 -4
  55. jaclang/vendor/mypy/moduleinspect.py +10 -4
  56. jaclang/vendor/mypy/py.typed +1 -0
  57. jaclang/vendor/mypy/semanal.py +18 -17
  58. jaclang/vendor/mypy/semanal_enum.py +7 -4
  59. jaclang/vendor/mypy/semanal_namedtuple.py +11 -1
  60. jaclang/vendor/mypy/semanal_typeddict.py +25 -11
  61. jaclang/vendor/mypy/stubdoc.py +18 -4
  62. jaclang/vendor/mypy/stubgen.py +80 -1
  63. jaclang/vendor/mypy/stubgenc.py +47 -5
  64. jaclang/vendor/mypy/stubtest.py +53 -3
  65. jaclang/vendor/mypy/stubutil.py +9 -9
  66. jaclang/vendor/mypy/test/testipc.py +16 -7
  67. jaclang/vendor/mypy/test/teststubtest.py +20 -2
  68. jaclang/vendor/mypy/types.py +1 -1
  69. jaclang/vendor/mypyc/irbuild/prebuildvisitor.py +2 -1
  70. jaclang/vendor/mypyc/test/test_run.py +2 -4
  71. jaclang/vendor/pluggy/py.typed +0 -0
  72. {jaclang-0.2.4.dist-info → jaclang-0.3.0.dist-info}/METADATA +1 -1
  73. {jaclang-0.2.4.dist-info → jaclang-0.3.0.dist-info}/RECORD +77 -71
  74. {jaclang-0.2.4.dist-info → jaclang-0.3.0.dist-info}/WHEEL +1 -1
  75. {jaclang-0.2.4.dist-info → jaclang-0.3.0.dist-info}/entry_points.txt +3 -0
  76. jaclang/core/arch_impl.jac +0 -131
  77. jaclang/core/element_impl.jac +0 -109
  78. jaclang/core/exec_ctx_impl.jac +0 -14
  79. jaclang/core/memory_impl.jac +0 -57
  80. jaclang/jac/tests/fixtures/__jac_gen__/hello_world.py +0 -5
  81. /jaclang/{jac/tests/fixtures → core}/__jac_gen__/__init__.py +0 -0
  82. {jaclang-0.2.4.dist-info → jaclang-0.3.0.dist-info}/top_level.txt +0 -0
@@ -1,131 +0,0 @@
1
- """Implementation for Jac's Element Abstractions"""
2
- import:py from jaclang.jac.constant, EdgeDir;
3
-
4
-
5
- :obj:NodeInterface:can:connect_node
6
- (nd: Node, edg: Edge) -> Node {
7
- (<self>.py_obj, nd) :> edg.attach;
8
- return <self>;
9
- }
10
-
11
- :obj:NodeInterface:can:edges_to_nodes
12
- (dir: EdgeDir) -> list[Node] {
13
- ret_nodes = [];
14
- if dir in [EdgeDir.OUT, EdgeDir.ANY] {
15
- for i in <self>.edges[EdgeDir.OUT] {
16
- ret_nodes.append(i.target);
17
- }
18
- } elif dir in [EdgeDir.IN, EdgeDir.ANY] {
19
- for i in <self>.edges[EdgeDir.IN] {
20
- ret_nodes.append(i.source);
21
- }
22
- }
23
- return ret_nodes;
24
- }
25
-
26
- :obj:EdgeInterface:can:apply_dir
27
- (dir: EdgeDir) -> Edge {
28
- <self>.dir = dir;
29
- return <self>;
30
- }
31
-
32
- :obj:EdgeInterface:can:attach
33
- (src: Node, trg: Node) -> Edge {
34
- if <self>.dir == EdgeDir.IN {
35
- <self>.source = trg;
36
- <self>.target = src;
37
- <self> :> src._jac_.edges[EdgeDir.IN].append;
38
- <self> :> trg._jac_.edges[EdgeDir.OUT].append;
39
- } else {
40
- <self>.source = src;
41
- <self>.target = trg;
42
- <self> :> src._jac_.edges[EdgeDir.OUT].append;
43
- <self> :> trg._jac_.edges[EdgeDir.IN].append;
44
- }
45
-
46
- return <self>;
47
- }
48
-
49
- :obj:WalkerInterface:can:visit_node
50
- (nds: list[Node]|list[Edge]|Node|Edge) {
51
- if isinstance(nds, list) {
52
- for i in nds {
53
- if(i not in <self>.ignores) { i :> <self>.next.append; }
54
- }
55
- } elif nds not in <self>.ignores { nds :> <self>.next.append; }
56
- return len(nds) if isinstance(nds, list) else 1;
57
- }
58
-
59
- :obj:WalkerInterface:can:ignore_node
60
- (nds: list[Node]|list[Edge]|Node|Edge) {
61
- if isinstance(nds, list) {
62
- for i in nds {
63
- i :> <self>.ignores.append;
64
- }
65
- } else { nds :> <self>.ignores.append; }
66
- }
67
-
68
- :obj:WalkerInterface:can:disengage_now {
69
- <self>.next = [];
70
- <self>.disengaged = True;
71
- }
72
-
73
-
74
- :obj:Node:can:__call__
75
- (walk: Walker) {
76
- if not (walk, Walker) :> isinstance {
77
- raise ("Argument must be a Walker instance") :> TypeError;
78
- }
79
- <self> :> walk;
80
- }
81
-
82
-
83
- :obj:Edge:can:__call__
84
- (walk: Walker) {
85
- if not (walk, Walker) :> isinstance {
86
- raise ("Argument must be a Walker instance") :> TypeError;
87
- }
88
- <self>._jac_.target :> walk;
89
- }
90
-
91
- :obj:Walker:can:__call__
92
- (nd: Node) {
93
- <self>._jac_.path = [];
94
- <self>._jac_.next = [nd];
95
- walker_type = <self>.__class__.__name__;
96
- while <self>._jac_.next :> len {
97
- nd = 0 :> <self>._jac_.next.pop;
98
- node_type = nd.__class__.__name__;
99
-
100
- for i in nd._jac_ds_.ds_entry_funcs {
101
- if i['func'].__qualname__.split(".")[0] == node_type and
102
- <self>:>type in i['types'] {
103
- (nd, <self>) :> i['func'];
104
- }
105
- if <self>._jac_.disengaged {return;}
106
- }
107
- for i in <self>._jac_ds_.ds_entry_funcs {
108
- if i['func'].__qualname__.split(".")[0] == walker_type and
109
- (nd:>type in i['types'] or nd in i['types']) { # if nd==root direct chec
110
- (<self>, nd) :> i['func'];
111
- }
112
- if <self>._jac_.disengaged {return;}
113
- }
114
- for i in <self>._jac_ds_.ds_exit_funcs {
115
- if i['func'].__qualname__.split(".")[0] == walker_type and
116
- (nd:>type in i['types'] or nd in i['types']) {
117
- (<self>, nd) :> i['func'];
118
- }
119
- if <self>._jac_.disengaged {return;}
120
- }
121
- for i in nd._jac_ds_.ds_exit_funcs {
122
- if i['func'].__qualname__.split(".")[0] == node_type and
123
- <self>:>type in i['types'] {
124
- (nd, <self>) :> i['func'];
125
- }
126
- if <self>._jac_.disengaged {return;}
127
- }
128
- nd :> <self>._jac_.path.append;
129
- }
130
- <self>._jac_.ignores=[];
131
- }
@@ -1,109 +0,0 @@
1
- """Implementation for Jac's Element Abstractions"""
2
-
3
- :enum:AccessMode {
4
- READ_ONLY,
5
- READ_WRITE,
6
- PRIVATE
7
- }
8
-
9
- :obj:ElementInterface:can:make_public_ro {
10
- <self>.__jinfo.access_mode = AccessMode.READ_ONLY;
11
- }
12
-
13
- :obj:ElementInterface:can:make_public_rw {
14
- <self>.__jinfo.access_mode = AccessMode.READ_WRITE;
15
- }
16
-
17
- :obj:ElementInterface:can:make_private {
18
- <self>.__jinfo.access_mode = AccessMode.PRIVATE;
19
- }
20
-
21
- :obj:ElementInterface:can:is_public_ro -> bool {
22
- return <self>.__jinfo.access_mode == AccessMode.READ_ONLY;
23
- }
24
-
25
- :obj:ElementInterface:can:is_public_rw -> bool {
26
- return <self>.__jinfo.access_mode == AccessMode.READ_WRITE;
27
- }
28
-
29
- :obj:ElementInterface:can:is_private -> bool {
30
- return <self>.__jinfo.access_mode == AccessMode.PRIVATE;
31
- }
32
-
33
- :obj:ElementInterface:can:is_readable
34
- (caller_id: UUID) -> bool {
35
- return (
36
- caller_id == <self>.owner_id
37
- or |> <self>.is_public_read
38
- or caller_id in <self>.ro_access
39
- or caller_id in <self>.rw_access
40
- );
41
- }
42
-
43
- :obj:ElementInterface:can:is_writable
44
- (caller_id: UUID) -> bool {
45
- return (
46
- caller_id == <self>.owner_id
47
- or |> <self>.is_public_write
48
- or caller_id in <self>.rw_access
49
- );
50
- }
51
-
52
- :obj:ElementInterface:can:give_access
53
- (caller_id: UUID, read_write: bool = False) {
54
- if read_write {
55
- caller_id |> <self>.rw_access.add;
56
- }
57
- else {
58
- caller_id |> add .> ro_access .> <self>;
59
- }
60
- }
61
-
62
- :obj:ElementInterface:can:revoke_access
63
- (caller_id: UUID) {
64
- caller_id |> <self>.ro_access.discard;
65
- caller_id |> <self>.rw_access.discard;
66
- }
67
-
68
-
69
- :obj:DataSpatialInterface:can:on_entry
70
- (cls: type, triggers: list) {
71
- can decorator(func: callable) -> callable {
72
- cls.ds_entry_funcs.append({'types': triggers, 'func': func});
73
- can wrapper(*args: list, **kwargs: dict) -> callable {
74
- return func(*args, **kwargs);
75
- }
76
- return wrapper;
77
- }
78
- return decorator;
79
- }
80
-
81
- :obj:DataSpatialInterface:can:on_exit
82
- (cls: type, triggers: list) {
83
- can decorator(func: callable) -> callable {
84
- cls.ds_exit_funcs.append({'types': triggers, 'func': func});
85
- can wrapper(*args: list, **kwargs: dict) -> callable {
86
- return func(*args, **kwargs);
87
- }
88
- return wrapper;
89
- }
90
- return decorator;
91
- }
92
-
93
- :can:make_architype(base_class: type) -> type {
94
- can class_decorator(cls: type) -> type {
95
- # Check if cls is a subclass of base_class
96
- if not issubclass(cls, base_class) {
97
- # If it's not, create a new class with the same name that inherits from both cls and base_class
98
- cls = type(cls.__name__, (cls, base_class), {});
99
- # original_init = cls.__init__;
100
- # can new_init(self: cls, *args: list, **kwargs: dict) -> None {
101
- # base_class.__init__(<self>, *args, **kwargs);
102
- # original_init(<self>, *args, **kwargs);
103
- # }
104
- # cls.__init__ = new_init;
105
- }
106
- return cls;
107
- }
108
- return class_decorator;
109
- }
@@ -1,14 +0,0 @@
1
- """Implementation for Jac's Element Abstractions"""
2
- import:py from uuid, UUID, uuid4;
3
-
4
- :obj:ExecutionContext:c:get_root
5
- () {
6
- if <self>.master :> type == UUID {
7
- <self>.master = Master();
8
- }
9
- return <self>.master.root_node;
10
- }
11
-
12
- :obj:ExecutionContext:c:reset {
13
- <self>.<init>();
14
- }
@@ -1,57 +0,0 @@
1
- """Implementation for Jac's Element Abstractions"""
2
- import:py sys;
3
-
4
- :obj:Memory:can:get_obj
5
- (caller_id: UUID, item_id: UUID, override: bool = False) -> Element {
6
- ret = item_id |> <self>.index.get;
7
- if override or (ret is not None and caller_id |> ret.__is_readable) {
8
- return ret;
9
- }
10
- }
11
-
12
- :obj:Memory:can:has_obj
13
- (item_id: UUID) -> bool {
14
- return item_id in <self>.index;
15
- }
16
-
17
- :obj:Memory:can:save_obj
18
- (caller_id: UUID, item: Element) {
19
- if caller_id |> item.is_writable {
20
- <self>.index[item.id] = item;
21
- if item._persist {
22
- item |> <self>.save_obj_list.add;
23
- }
24
- }
25
- <self>.mem[item.id] = item;
26
- if item._persist {
27
- item |> <self>.save_obj_list.add;
28
- }
29
- }
30
-
31
- :obj:Memory:can:del_obj
32
- (caller_id: UUID, item: Element) {
33
- if caller_id |> item.is_writable {
34
- <self>.index.pop(item.id);
35
- if item._persist {
36
- item |> <self>.save_obj_list.remove;
37
- }
38
- }
39
- }
40
-
41
- :obj:Memory:can:get_object_distribution -> dict {
42
- dist = {};
43
- for i in |> <self>.index.keys {
44
- t = <self>.index[i] |> type;
45
- if t in dist {
46
- dist[t] += 1;
47
- }
48
- else {
49
- dist[t] = 1;
50
- }
51
- }
52
- return dist;
53
- }
54
-
55
- :obj:Memory:can:get_mem_size -> float {
56
- return (<self>.index |> sys.getsizeof) / 1024.0;
57
- }
@@ -1,5 +0,0 @@
1
- """ Basic Hello World function """
2
- from __future__ import annotations
3
-
4
- def hello() -> None:
5
- return 'Hello World!'