jaclang 0.0.1__py3-none-any.whl → 0.0.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.

Files changed (73) hide show
  1. jaclang/__init__.py +4 -0
  2. jaclang/cli/__init__.py +7 -0
  3. jaclang/cli/cli.jac +46 -0
  4. jaclang/cli/cmds.jac +14 -0
  5. jaclang/cli/impl/__init__.py +1 -0
  6. jaclang/cli/impl/cli_impl.jac +93 -0
  7. jaclang/cli/impl/cmds_impl.jac +26 -0
  8. jaclang/core/__init__.py +12 -0
  9. jaclang/core/impl/__init__.py +1 -0
  10. jaclang/core/impl/arch_impl.jac +112 -0
  11. jaclang/core/impl/element_impl.jac +95 -0
  12. jaclang/core/impl/exec_ctx_impl.jac +17 -0
  13. jaclang/core/impl/memory_impl.jac +57 -0
  14. jaclang/core/primitives.jac +104 -0
  15. jaclang/jac/__init__.py +1 -0
  16. jaclang/jac/absyntree.py +1787 -0
  17. jaclang/jac/constant.py +46 -0
  18. jaclang/jac/importer.py +130 -0
  19. jaclang/jac/lexer.py +538 -0
  20. jaclang/jac/parser.py +1474 -0
  21. jaclang/jac/passes/__init__.py +5 -0
  22. jaclang/jac/passes/blue/__init__.py +25 -0
  23. jaclang/jac/passes/blue/ast_build_pass.py +3190 -0
  24. jaclang/jac/passes/blue/blue_pygen_pass.py +1335 -0
  25. jaclang/jac/passes/blue/decl_def_match_pass.py +278 -0
  26. jaclang/jac/passes/blue/import_pass.py +75 -0
  27. jaclang/jac/passes/blue/sub_node_tab_pass.py +30 -0
  28. jaclang/jac/passes/blue/tests/__init__.py +1 -0
  29. jaclang/jac/passes/blue/tests/test_ast_build_pass.py +61 -0
  30. jaclang/jac/passes/blue/tests/test_blue_pygen_pass.py +117 -0
  31. jaclang/jac/passes/blue/tests/test_decl_def_match_pass.py +43 -0
  32. jaclang/jac/passes/blue/tests/test_import_pass.py +18 -0
  33. jaclang/jac/passes/blue/tests/test_sub_node_pass.py +26 -0
  34. jaclang/jac/passes/blue/tests/test_type_analyze_pass.py +53 -0
  35. jaclang/jac/passes/blue/type_analyze_pass.py +731 -0
  36. jaclang/jac/passes/ir_pass.py +154 -0
  37. jaclang/jac/passes/purple/__init__.py +17 -0
  38. jaclang/jac/passes/purple/impl/__init__.py +1 -0
  39. jaclang/jac/passes/purple/impl/purple_pygen_pass_impl.jac +289 -0
  40. jaclang/jac/passes/purple/purple_pygen_pass.jac +35 -0
  41. jaclang/jac/sym_table.py +127 -0
  42. jaclang/jac/tests/__init__.py +1 -0
  43. jaclang/jac/tests/fixtures/__init__.py +1 -0
  44. jaclang/jac/tests/fixtures/activity.py +10 -0
  45. jaclang/jac/tests/fixtures/fam.jac +68 -0
  46. jaclang/jac/tests/fixtures/hello_world.jac +5 -0
  47. jaclang/jac/tests/fixtures/lexer_fam.jac +61 -0
  48. jaclang/jac/tests/fixtures/stuff.jac +6 -0
  49. jaclang/jac/tests/test_importer.py +24 -0
  50. jaclang/jac/tests/test_lexer.py +57 -0
  51. jaclang/jac/tests/test_parser.py +50 -0
  52. jaclang/jac/tests/test_utils.py +12 -0
  53. jaclang/jac/transform.py +63 -0
  54. jaclang/jac/transpiler.py +69 -0
  55. jaclang/jac/utils.py +120 -0
  56. jaclang/utils/__init__.py +1 -0
  57. jaclang/utils/fstring_parser.py +73 -0
  58. jaclang/utils/log.py +9 -0
  59. jaclang/utils/sly/__init__.py +6 -0
  60. jaclang/utils/sly/docparse.py +62 -0
  61. jaclang/utils/sly/lex.py +510 -0
  62. jaclang/utils/sly/yacc.py +2398 -0
  63. jaclang/utils/test.py +81 -0
  64. jaclang/utils/tests/__init__.py +1 -0
  65. jaclang/utils/tests/test_fstring_parser.py +55 -0
  66. jaclang-0.0.3.dist-info/METADATA +12 -0
  67. jaclang-0.0.3.dist-info/RECORD +70 -0
  68. {jaclang-0.0.1.dist-info → jaclang-0.0.3.dist-info}/WHEEL +1 -1
  69. jaclang-0.0.3.dist-info/entry_points.txt +3 -0
  70. jaclang-0.0.3.dist-info/top_level.txt +1 -0
  71. jaclang-0.0.1.dist-info/METADATA +0 -7
  72. jaclang-0.0.1.dist-info/RECORD +0 -4
  73. jaclang-0.0.1.dist-info/top_level.txt +0 -1
jaclang/utils/test.py ADDED
@@ -0,0 +1,81 @@
1
+ """Test case utils for Jaseci."""
2
+
3
+ import inspect
4
+ import os
5
+ from abc import ABC, abstractmethod
6
+ from unittest import TestCase as _TestCase
7
+
8
+
9
+ class TestCase(_TestCase):
10
+ """Base test case for Jaseci."""
11
+
12
+ def setUp(self) -> None:
13
+ """Set up test case."""
14
+ return super().setUp()
15
+
16
+ def tearDown(self) -> None:
17
+ """Tear down test case."""
18
+ return super().tearDown()
19
+
20
+ def load_fixture(self, fixture: str) -> str:
21
+ """Load fixture from fixtures directory."""
22
+ frame = inspect.currentframe()
23
+ if frame is None or frame.f_back is None:
24
+ raise ValueError("Unable to get the previous stack frame.")
25
+ module = inspect.getmodule(frame.f_back)
26
+ if module is None or module.__file__ is None:
27
+ raise ValueError("Unable to determine the file of the module.")
28
+ fixture_src = module.__file__
29
+ fixture_path = os.path.join(os.path.dirname(fixture_src), "fixtures", fixture)
30
+ with open(fixture_path, "r") as f:
31
+ return f.read()
32
+
33
+ def file_to_str(self, file_path: str) -> str:
34
+ """Load fixture from fixtures directory."""
35
+ with open(file_path, "r") as f:
36
+ return f.read()
37
+
38
+ def fixture_abs_path(self, fixture: str) -> str:
39
+ """Get absolute path of a fixture from fixtures directory."""
40
+ frame = inspect.currentframe()
41
+ if frame is None or frame.f_back is None:
42
+ raise ValueError("Unable to get the previous stack frame.")
43
+ module = inspect.getmodule(frame.f_back)
44
+ if module is None or module.__file__ is None:
45
+ raise ValueError("Unable to determine the file of the module.")
46
+ fixture_src = module.__file__
47
+ file_path = os.path.join(os.path.dirname(fixture_src), "fixtures", fixture)
48
+ return os.path.abspath(file_path)
49
+
50
+
51
+ class TestCaseMicroSuite(ABC, TestCase):
52
+ """Base test case for Jaseci."""
53
+
54
+ @classmethod
55
+ def self_attach_micro_tests(cls) -> None:
56
+ """Attach micro tests."""
57
+ directory = os.path.dirname(__file__) + "/../../examples/micro"
58
+ for filename in os.listdir(directory):
59
+ if os.path.isfile(os.path.join(directory, filename)) and filename.endswith(
60
+ ".jac"
61
+ ):
62
+ method_name = f"test_micro_{filename.replace('.jac', '')}"
63
+ file_path = os.path.join(directory, filename)
64
+ setattr(
65
+ cls, method_name, lambda self, f=file_path: self.micro_suite_test(f)
66
+ )
67
+
68
+ def test_micro_jac_files_fully_tested(self) -> None: # noqa: ANN001
69
+ """Test that all micro jac files are fully tested."""
70
+ self.directory = os.path.dirname(__file__) + "/../../examples/micro"
71
+ for filename in os.listdir(self.directory):
72
+ if os.path.isfile(os.path.join(self.directory, filename)):
73
+ method_name = f"test_micro_{filename.replace('.jac', '')}"
74
+ self.assertIn(method_name, dir(self))
75
+
76
+ cls.test_micro_jac_files_fully_tested = test_micro_jac_files_fully_tested
77
+
78
+ @abstractmethod
79
+ def micro_suite_test(self, filename: str) -> None:
80
+ """Test micro jac file."""
81
+ pass
@@ -0,0 +1 @@
1
+ """Tests for utils."""
@@ -0,0 +1,55 @@
1
+ """Test Fstring parser."""
2
+ from typing import Callable
3
+
4
+ from jaclang.utils.fstring_parser import FStringLexer, FStringParser
5
+ from jaclang.utils.test import TestCase
6
+
7
+ fstrings = [
8
+ ["The sum of 7 and 3 is {7 + 3}.", "7 + 3"],
9
+ ["The lowercase version of 'HELLO' is {'HELLO'.lower()}.", "'HELLO'.lower()"],
10
+ [
11
+ "My name is {my_dict['name']} and I am {my_dict['age']} years old.",
12
+ "my_dict['name']",
13
+ "my_dict['age']",
14
+ ],
15
+ ["My favorite fruit is {my_list[0]}.", "my_list[0]"],
16
+ [
17
+ "The sum of 5 and 7 is {(lambda x, y: x + y)(5, 7)}.",
18
+ "(lambda x, y: x + y)(5, 7)",
19
+ ],
20
+ ["The person's name is {person.name}.", "person.name"],
21
+ [
22
+ "{'left aligned':<15} | {'center':^10} | {'right aligned':>15}",
23
+ "'left aligned':<15",
24
+ "'center':^10",
25
+ "'right aligned':>15",
26
+ ],
27
+ ["Pi to 2 decimal places is {3.14159:.2f}.", "3.14159:.2f"],
28
+ ["Integer with leading zeros {42:05}.", "42:05"],
29
+ ["Current date is {datetime.now():%Y-%m-%d}.", "datetime.now():%Y-%m-%d"],
30
+ ]
31
+
32
+
33
+ class TestFstrings(TestCase):
34
+ """Test fstring parser."""
35
+
36
+ pass # Remove existing test case
37
+
38
+
39
+ def make_test_func(example: list[str]) -> Callable:
40
+ """Generate a new test function for each example in fstrings."""
41
+
42
+ def test_func(self) -> None: # noqa: ANN001
43
+ test_string = 'f"' + example[0] + '"'
44
+ tree = FStringParser().parse(FStringLexer().tokenize(test_string))
45
+ for i in example[1:]:
46
+ self.assertTrue(f"'{i}'" in str(tree) or f'"{i}"' in str(tree))
47
+ self.assertEqual(str(tree).count("EXPR_START"), len(example) - 1)
48
+
49
+ return test_func
50
+
51
+
52
+ # Generate a new test case for each example in fstrings
53
+ for idx, example in enumerate(fstrings):
54
+ # Attach the new test function to the test class
55
+ setattr(TestFstrings, f"test_fstring_lexer_{idx}", make_test_func(example))
@@ -0,0 +1,12 @@
1
+ Metadata-Version: 2.1
2
+ Name: jaclang
3
+ Version: 0.0.3
4
+ Summary: UNKNOWN
5
+ Home-page: https://github.com/Jaseci-Labs/jaclang
6
+ Author: Jason Mars
7
+ Author-email: jason@jaseci.org
8
+ License: UNKNOWN
9
+ Platform: UNKNOWN
10
+
11
+ UNKNOWN
12
+
@@ -0,0 +1,70 @@
1
+ jaclang/__init__.py,sha256=n8HR401oKxP7ckVZ1cPYl-HTaYszuKV5y0kSqARu3MQ,194
2
+ jaclang/cli/__init__.py,sha256=RSosEgm2M0H8QS-H1i-qwVrnHcMClY2TGQlGWPRlXYE,175
3
+ jaclang/cli/cli.jac,sha256=ioxo91yk5RHpDy8qhYSxtl4X9U4nHNAuBQks8wkfI5o,1059
4
+ jaclang/cli/cmds.jac,sha256=QjOVFu5-9OTplEqotc49vqm0CqCyT1j_aW-GAf6RwhY,386
5
+ jaclang/cli/impl/__init__.py,sha256=BTgKqQqL0RDRnEdtLK_MhdR-rLSDnw39xLabPKUotqU,39
6
+ jaclang/cli/impl/cli_impl.jac,sha256=2_KsFrNMINzMbNgYG6jRhw3TmARMZ14F5gi_JcV9Z5A,2398
7
+ jaclang/cli/impl/cmds_impl.jac,sha256=HXSLNaDICww2gMy0qWTTU-KFRe29ZyrfDOIxBM8xAeg,719
8
+ jaclang/core/__init__.py,sha256=q35Msw8l4Z37k8ry1OkVfgkMRkG9LY4O6vEayXcN7yA,212
9
+ jaclang/core/primitives.jac,sha256=t--pgZaOAcLqoQ79EYjrRyk5Ef0n3W2HXm6c4GvRSpQ,2786
10
+ jaclang/core/impl/__init__.py,sha256=BTgKqQqL0RDRnEdtLK_MhdR-rLSDnw39xLabPKUotqU,39
11
+ jaclang/core/impl/arch_impl.jac,sha256=A1LJuGNXBhZ0cN_wmSJn_o9tffDu_EUZWgfjjnIWXOk,3063
12
+ jaclang/core/impl/element_impl.jac,sha256=rgu3RcXJ5uRmXKBlEEsVvcADMQgnj3yPL6DDvSScfa8,2486
13
+ jaclang/core/impl/exec_ctx_impl.jac,sha256=blu_ZYWcx0SuXItjJ4oUfnrllvlFUw9eZbff0OXVob8,370
14
+ jaclang/core/impl/memory_impl.jac,sha256=R27OWfEajtZ05RxYxR3hjiLYK7SxS9IQyZ9Q6U__L8g,1364
15
+ jaclang/jac/__init__.py,sha256=OAIBG-7iYvbebyiu0pJ-lFsua8mD6meBkaTylb8XS64,26
16
+ jaclang/jac/absyntree.py,sha256=wE_IeTCDU9IHTP-JRFw3I3SxIfpvs4q6q-eTN5jqAtw,47429
17
+ jaclang/jac/constant.py,sha256=40jhhphWVj_bvEdnPqoH2SflNT74CZPwBSfxKn0hEwo,1107
18
+ jaclang/jac/importer.py,sha256=NcgoMSEQaNuS8n5r9eo8jqYIF1RtV7Vk7OwEGJ00GN4,4645
19
+ jaclang/jac/lexer.py,sha256=QGbnbJv29tEMiQZ-417F91s4eT_zo7Aoa4mcTDY7hc0,13803
20
+ jaclang/jac/parser.py,sha256=EWBopxVFBK7IWof1OfGpmSckWzWvRymMB5WX-0mA2Zw,40357
21
+ jaclang/jac/sym_table.py,sha256=AQfTaOv5-_QyD6RnZxgNybhuvDv0DHMXkTlX9S6qOp4,3422
22
+ jaclang/jac/transform.py,sha256=ZOOr74toCYSnWYnP_N4DUApWtooP1lsxqvF92iW84UE,1768
23
+ jaclang/jac/transpiler.py,sha256=THwkV_o7X1xf9ga3P1wfIcKCaWBuZo-z1WK_LvanHt0,2188
24
+ jaclang/jac/utils.py,sha256=xsncQOozBr0pHkf8DNxk_Pjy6pfrNGa1qssC11VFJu4,3825
25
+ jaclang/jac/passes/__init__.py,sha256=0Tw0d130ZjzA05jVcny9cf5NfLjlaM70PKqFnY4zqn4,69
26
+ jaclang/jac/passes/ir_pass.py,sha256=wIHPmOaXKMRVuaWw_lVGk-T76eHHWWBDkR4l8i4a5do,5141
27
+ jaclang/jac/passes/blue/__init__.py,sha256=vUwA8sMNU4YbOEBbDqD1D9Z7mwEpVmN1-XKD81P1SFE,638
28
+ jaclang/jac/passes/blue/ast_build_pass.py,sha256=OhUQk1WucVTA4ojR0_0cpDoRps1BNWM8b-9HnADxcmk,97828
29
+ jaclang/jac/passes/blue/blue_pygen_pass.py,sha256=_UbHy6Xie8XMnIpsg2KaKbsrXpWT7kLm79EEKBwmwaY,43497
30
+ jaclang/jac/passes/blue/decl_def_match_pass.py,sha256=T3HS1QoAls6ZeWiPF5Rc6JBPhcLQlHnUDzwfI2mPFCM,9711
31
+ jaclang/jac/passes/blue/import_pass.py,sha256=z1NkmF3fGWgxsW-GFn_yPLPWK1NfGyh_MGPQx4aXFMw,2669
32
+ jaclang/jac/passes/blue/sub_node_tab_pass.py,sha256=FGUJ5AaddsY0pLRrFr66JEaAeD5GCQRKGJ8I-YDVwYs,964
33
+ jaclang/jac/passes/blue/type_analyze_pass.py,sha256=P7HjFl8bf-ZnPsl7IlLtAvm8FcpyFsXhQIccv9ahY34,18256
34
+ jaclang/jac/passes/blue/tests/__init__.py,sha256=UBAATLUEH3yuBN4LYKnXXV79kokRc4XB-rX12qfu0ds,28
35
+ jaclang/jac/passes/blue/tests/test_ast_build_pass.py,sha256=CmL0IVCNrTa8I8ua1rZe03pl3o1w3GGeTSPGGv71EF4,2339
36
+ jaclang/jac/passes/blue/tests/test_blue_pygen_pass.py,sha256=36etaT1XYZKVKVMwU_7uw02k8SjCkRdMa0z8JmpgO84,4611
37
+ jaclang/jac/passes/blue/tests/test_decl_def_match_pass.py,sha256=LYhh9k5WpV24A-B5UvKtN2F4vCO7f6X4b0TK9ZlblzM,1676
38
+ jaclang/jac/passes/blue/tests/test_import_pass.py,sha256=5__oTikC1BAfQt_iyqYwQEY2ARI-pTEa3Or-qY9kxjk,576
39
+ jaclang/jac/passes/blue/tests/test_sub_node_pass.py,sha256=V4ABc2Na4YoQ6--TP3nH1gSRK0KZrsQp6H_iybDWryc,842
40
+ jaclang/jac/passes/blue/tests/test_type_analyze_pass.py,sha256=cm8Tf3TnwtJpoOXYd1xlZOyCPTmEmt1_Y_McdS2ARBs,2123
41
+ jaclang/jac/passes/purple/__init__.py,sha256=K0I6Pud7QIQl7xkT8wqpWlxQADSl1t7Ab68P1C3vN3g,343
42
+ jaclang/jac/passes/purple/purple_pygen_pass.jac,sha256=cnkOgFL34yVasCcNA2SbDl5QOKpCRatW--jt5EWeOCQ,1125
43
+ jaclang/jac/passes/purple/impl/__init__.py,sha256=BTgKqQqL0RDRnEdtLK_MhdR-rLSDnw39xLabPKUotqU,39
44
+ jaclang/jac/passes/purple/impl/purple_pygen_pass_impl.jac,sha256=UhBBmUHJfKTtga-ntRoric9yAO8bjsPGi1GyUokjViQ,8501
45
+ jaclang/jac/tests/__init__.py,sha256=qiXa5UNRBanGOcplFKTT9a_9GEyiv7goq1OzuCjDCFE,27
46
+ jaclang/jac/tests/test_importer.py,sha256=mb5c6jb_1cQuW11nxwdJ8ezizuYn26GkIY4bnoY_LJQ,743
47
+ jaclang/jac/tests/test_lexer.py,sha256=iyDawkr9YXYFzdOSgw7V0xJsG-V2Q5yuPP_5JZIde20,1950
48
+ jaclang/jac/tests/test_parser.py,sha256=y7yZ9L09VSaVon_3PHfj9JuHSNC5yxcl_HPbHhvVuX8,1804
49
+ jaclang/jac/tests/test_utils.py,sha256=5S1dAmHpnqnrkYLX3oCucu5sFM7Tah4VL6CGacR_Kg4,382
50
+ jaclang/jac/tests/fixtures/__init__.py,sha256=TTeVvo4UmvhcNxybwcLnAMnHw-OnerDFQ_7vKfqF3qU,35
51
+ jaclang/jac/tests/fixtures/activity.py,sha256=fSvxYDKufsPeQIrbuh031zHw_hdbRv5iK9mS7dD8E54,263
52
+ jaclang/jac/tests/fixtures/fam.jac,sha256=ASMfSvXM78j8p-DmWgPw5NRLDRzwUmMZy46WyhxRFvo,1653
53
+ jaclang/jac/tests/fixtures/hello_world.jac,sha256=uT67nGzdYY7YT6Xj5-OHFAZPEHfIl4zGlfyNs7-zRBI,78
54
+ jaclang/jac/tests/fixtures/lexer_fam.jac,sha256=J_bcFC2RnsBxvEsTUoOIgFowkpibbhpB7FSAMYuG9RM,1394
55
+ jaclang/jac/tests/fixtures/stuff.jac,sha256=5gFmEO8iPGFoj3xeblcfMF2DA1d-ANJIMjdzlMxEnYU,85
56
+ jaclang/utils/__init__.py,sha256=86LQ_LDyWV-JFkYBpeVHpLaVxkqwFDP60XpWXOFZIQk,46
57
+ jaclang/utils/fstring_parser.py,sha256=K7I3wOCEAjQBePEOjWLWvRGFGthqZxIfTYtweUm99Yg,1779
58
+ jaclang/utils/log.py,sha256=copXpha4IB2NsffbhRD4GePA18_ePO39bVBPMBPqhkk,239
59
+ jaclang/utils/test.py,sha256=jy9h1oeGxN7iR0eZrDKWrdprELeakuCzGRcKpCiWObY,3229
60
+ jaclang/utils/sly/__init__.py,sha256=G1Y7oQ8BtApOGEYXGego223AMaq-8iQnVCn10sKmX8U,115
61
+ jaclang/utils/sly/docparse.py,sha256=YfDcZCuL1-5AIymgPPXsghdZuD7qSSIpiTUeQSRCFH0,1957
62
+ jaclang/utils/sly/lex.py,sha256=EyK1PDut3uF22Mc60Kcpa58ybfmV02p8L7ylz_1UVuY,16846
63
+ jaclang/utils/sly/yacc.py,sha256=KKoDgnmAL6DRpRuatC3WpX2TTjvtcDA5SZ25uCudYvo,88197
64
+ jaclang/utils/tests/__init__.py,sha256=8uwVqMsc6cxBAM1DuHLuNuTnzLXqOqM-WRa4ixOMF6w,23
65
+ jaclang/utils/tests/test_fstring_parser.py,sha256=8nZPKhGZA0JNRQ1jhQkXRsjGV6pBK-jKEEf2nFevYK8,1887
66
+ jaclang-0.0.3.dist-info/METADATA,sha256=mn5IRS8lJs-xDIx7z9puVGbswF-_AMm53PE9Kq_DaLo,213
67
+ jaclang-0.0.3.dist-info/WHEEL,sha256=G16H4A3IeoQmnOrYV4ueZGKSjhipXx8zc8nu9FGlvMA,92
68
+ jaclang-0.0.3.dist-info/entry_points.txt,sha256=aMcbIrHSMsY7_wwAjOWoW6F4RzOgrI49M9JYiOORss0,51
69
+ jaclang-0.0.3.dist-info/top_level.txt,sha256=ZOAoLpE67ozkUJd-v3C59wBNXiteRD8IWPbsYB3M08g,8
70
+ jaclang-0.0.3.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: bdist_wheel (0.40.0)
2
+ Generator: bdist_wheel (0.37.1)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5
 
@@ -0,0 +1,3 @@
1
+ [console_scripts]
2
+ jac = jaclang.cli:cli.start_cli
3
+
@@ -0,0 +1 @@
1
+ jaclang
@@ -1,7 +0,0 @@
1
- Metadata-Version: 2.1
2
- Name: jaclang
3
- Version: 0.0.1
4
- Home-page: https://github.com/Jaseci-Labs/jaseci2
5
- Author: Jason Mars
6
- Author-email: jason@jaseci.org
7
-
@@ -1,4 +0,0 @@
1
- jaclang-0.0.1.dist-info/METADATA,sha256=-rBbykWMsQiO1h_gqM9VI1O6_bhbxNMvwHvlSilp3wM,152
2
- jaclang-0.0.1.dist-info/WHEEL,sha256=pkctZYzUS4AYVn6dJ-7367OJZivF2e8RA9b_ZBjif18,92
3
- jaclang-0.0.1.dist-info/top_level.txt,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
4
- jaclang-0.0.1.dist-info/RECORD,,
@@ -1 +0,0 @@
1
-