cpyte 2.2.0__tar.gz → 2.3.0__tar.gz

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.
Files changed (28) hide show
  1. {cpyte-2.2.0 → cpyte-2.3.0}/PKG-INFO +1 -1
  2. {cpyte-2.2.0 → cpyte-2.3.0}/pyproject.toml +1 -1
  3. cpyte-2.3.0/source/cpyte/_gc_bc.py +187 -0
  4. {cpyte-2.2.0 → cpyte-2.3.0}/source/cpyte/astparse.py +36 -36
  5. {cpyte-2.2.0 → cpyte-2.3.0}/source/cpyte/bytecoding.py +328 -68
  6. {cpyte-2.2.0 → cpyte-2.3.0}/source/cpyte/clib.py +0 -5
  7. {cpyte-2.2.0 → cpyte-2.3.0}/source/cpyte/compiling.py +9 -49
  8. {cpyte-2.2.0 → cpyte-2.3.0}/source/cpyte/lsp_server.py +1 -1
  9. {cpyte-2.2.0 → cpyte-2.3.0}/source/cpyte/mainpie.py +13 -9
  10. {cpyte-2.2.0 → cpyte-2.3.0}/source/cpyte/semantic_analasis.py +97 -29
  11. {cpyte-2.2.0 → cpyte-2.3.0}/source/cpyte.egg-info/PKG-INFO +1 -1
  12. {cpyte-2.2.0 → cpyte-2.3.0}/source/cpyte.egg-info/SOURCES.txt +1 -0
  13. {cpyte-2.2.0 → cpyte-2.3.0}/readme.md +0 -0
  14. {cpyte-2.2.0 → cpyte-2.3.0}/setup.cfg +0 -0
  15. {cpyte-2.2.0 → cpyte-2.3.0}/source/cpyte/__init__.py +0 -0
  16. {cpyte-2.2.0 → cpyte-2.3.0}/source/cpyte/__main__.py +0 -0
  17. {cpyte-2.2.0 → cpyte-2.3.0}/source/cpyte/_bignum_bc.py +0 -0
  18. {cpyte-2.2.0 → cpyte-2.3.0}/source/cpyte/_runtime_bc.py +0 -0
  19. {cpyte-2.2.0 → cpyte-2.3.0}/source/cpyte/extension_hooks.py +0 -0
  20. {cpyte-2.2.0 → cpyte-2.3.0}/source/cpyte/generate_bc.py +0 -0
  21. {cpyte-2.2.0 → cpyte-2.3.0}/source/cpyte/lexar.py +0 -0
  22. {cpyte-2.2.0 → cpyte-2.3.0}/source/cpyte/linker.py +0 -0
  23. {cpyte-2.2.0 → cpyte-2.3.0}/source/cpyte/package_manifest.py +0 -0
  24. {cpyte-2.2.0 → cpyte-2.3.0}/source/cpyte.egg-info/dependency_links.txt +0 -0
  25. {cpyte-2.2.0 → cpyte-2.3.0}/source/cpyte.egg-info/entry_points.txt +0 -0
  26. {cpyte-2.2.0 → cpyte-2.3.0}/source/cpyte.egg-info/requires.txt +0 -0
  27. {cpyte-2.2.0 → cpyte-2.3.0}/source/cpyte.egg-info/top_level.txt +0 -0
  28. {cpyte-2.2.0 → cpyte-2.3.0}/test/test_bignum_jit.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: cpyte
3
- Version: 2.2.0
3
+ Version: 2.3.0
4
4
  Summary: The Cpyte programming language compiler
5
5
  Author: Hoang Duy Tung
6
6
  License: MIT
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "cpyte"
7
- version = "2.2.0"
7
+ version = "2.3.0"
8
8
  description = "The Cpyte programming language compiler"
9
9
  readme = "readme.md"
10
10
  requires-python = ">=3.11"
@@ -0,0 +1,187 @@
1
+ import base64
2
+ import zlib
3
+
4
+ from llvmlite import binding
5
+
6
+ _B64 = (
7
+ 'eJyNew1cU+fZ930+knMIIRwwaNAkngjaaNUGtBYE2nwgppZ1kdrNdW5JQBRbxRCQD9tuJx+a'
8
+ '6GiX+lDHs/m2wdLWdX320L6u8/n93JYAZdTxOGpdx3z8OXBorbMtbe3mtr7v3us+5wQCdntH'
9
+ 'a7jPda5z3dd9Xf/7f1/XiV5KLMhE8KOFP+oyhP4OP3ZH4tLdIGBAVqu2FB49+tKLf/7tL77x'
10
+ 'zkn3337ifuezL2duFqoJhExqhJ6DpzNJEyJBdwn8YQIFz9iG6fuVXHHpESKsXqpg8430d2oF'
11
+ '3QbSfiTTPsgVa0tY3QOq4tqos2+7yXEwSm/UF9sLm4bZnMLl1oOd3ANE8fYwe0TPF1RFr6D8'
12
+ 'Ijudv8K8IrZ5G1/wX9aD6vwB5ld5+bWdnYVMfnHtytLhWE7BcG5UY1i/vXLjMLfEUUXmL0SH'
13
+ 'eITuxT7toLnX7cFDOTXw8UxTv8upylhWNaSw1y5jzwq5HN1dYG088lI0d9nzxeG/80Ig+q2M'
14
+ 'LMTrC76Us7T63nr2F+EuL44PsnUXoAOlpMWpnyjfddjs/eTb7xH84VvPvx9lPbfyH13y42/b'
15
+ '7U2Fnb7vrt3QZfnLvH7unIN1mg/nCPaVEF0vcaYPWfPnW80k6qol1MgcRF2efy9gN72G7La8'
16
+ 'HnTYg5aiw0hbjw4f1yjhgeWb8LygKwRXhAi01LLJpaZ7hSKF74g4Q3/oS4Mf0W/dZ/KaHxT9'
17
+ '/33GkecbXmL/trQQu7tZh9AOCqFFU0tv4ZwSPpRhDvFqsl8/adJf6NFfQMZLJsPFgPGMzYja'
18
+ '2pm2BqrVHPFZGMEXgfH+WMQnMO1Opq0ksq4h4oszLeiazXi9R49qjddM+iGvASxMThiu9eiH'
19
+ 'AsZLNuMFq/56Uj/So5/sybpqMtwEzXLE7meZjpKIPx5Zp2PaTzC8fpwwjsHsccNlxIOdyQn9'
20
+ 'mYDxQkJ/xqS/1mOc7NFfJbaGfOZIhyd0N8u0xpm20UhTH7NuK9UUj7SAUBdp4pl2aeBk/Am4'
21
+ 'FWoC44I4aI+0Ckxrgmk7EWnFOkyHDj/rdzL74ZKPtMWZ9likjcfCZk/EVyKqWZj2hpAvFmnt'
22
+ 'Y8qlyyhVZoFboprA7G+PtPhEC5bIfg/TKinApSvSoYu0+ZjHYeyJdJixfpsZS2DQzkb2Q9zg'
23
+ 'lhDxx5jmhpQ8FvHzTIe0RohzNxaCn+2iqx286FI30yR+trBMqTyISIN2c6QJLHQzkKMWnehV'
24
+ 'd6SDE62B/75QCYvtPJ6g7omFfClh6bQwPiNcLwtDPrSOs6NYv7KWQzVjVo6yqhZ12pGT4EJZ'
25
+ 'YRvq7QuUIKt63dphjKXsxHL0LeS0Lqbf4IM8i/+P9004SUFDNoMdFTGVPNj2tf8Lmt/mR2zG'
26
+ '/h7DmZ6s8QnDuSRGyyQBAPNF1nkifpZpRmxbe2RdnOlgIYMQ5EhzQ6iVZfZbGQHAYDxD8FcD'
27
+ 'xn6v/l2wYDNeArh69dcmDICxwR7jSFIP6L3gMZ6zLT5DJCghHoEkNpuZ/Q2hJiGyH/UTxvEA'
28
+ 'nv2CSYOCxn6b8WwPwCwLUNofMF63gTWjcDeLgwng8XmY/T7mSZ2YTY7Z75Sh5ZegpYu08MwT'
29
+ 'EvAEGYFtDTBgnvBF9jeIOrFIkwizlriIunZmv8B0tDN+EVStLKxOQlRkHeyLBgbSIV2W9FFw'
30
+ 'S4ZiPNIG+0600HwChIykAJf7uiNNsFXF7dDaHcFmfRGYpU3EmO8EjhsGmJnpAPTKckAa449J'
31
+ 'a6Q6WBl1EB/saozxi553cOKnFQJIyYNucQDQ1YlYhRw5I01xUQ3A2Z2CU3QaTtQMxrpnhOun'
32
+ 'hSdSQpbxhE5bMJTuo5s57iqfPTGquTKqnJrSvD+uuenSfIJODZSdcizqc5SGQ6UoXHbasWg0'
33
+ 'VB6myhOO9acGSk/aysJURZyyZn/iyr6CuE+t2RMWzR/BAp/9kTX7ikVzc0rzyajysiv7qkdz'
34
+ 'hc/eY8l+Pw6a44R11FEyPFDaRVWcTJYkHBVoAmVPJfDsH3AMsmVP8NnvuTQ3R5VXXZoJa/Zn'
35
+ 'PFjLTiwMO0pHqEWv2iAPFadC93aGKvqSC6NURS8IkyWdVGlCGjjWx6h74VbnQEmCKhcHZSdh'
36
+ 'QN17ylFxUtQZHigBecyxfhQuidLTVEUiVH6aKgVhN1UWhtWBPFCacCwKh8pPhirGCelSPxaA'
37
+ 'W2WiWvnoQFlvqGxU1DwPwpCogDXXjwyUnA6VjWHjZSMObPaUoxQkMEg4Ss7juMGt8q5Qebej'
38
+ 'TJaHyruo0mFpjYHy8AD2HPxMiK4OU6JLyfKo+BmHABLyYEQcJBylnWBhoBxy1DtQMiqqjYRK'
39
+ 'RGsV44FFgzZsZ4wyngrowynhyLSQMEwLz6eEYarP9M3vY4wsRocswA8ROJ7WCdLWwHSaMFxK'
40
+ 'Gi4IBjg4Rgj+4gSMjXC0wfkCPHMWb3n9NcKAgCT3mxkB2JKNNG0FC3g/7gcKhV0Wi6zjIvst'
41
+ 'DDBGR0Oow8k8aWZQdjpRDBHG6wSmJgbP3hApST/RLJjB9p8Qdwd6l9cDmYx5svoDhmtJw02v'
42
+ '/kYg612r/prJAMIhr36YMEqDcwH9FNzy6IcwO+HBpR4D0NRU0nC9R1S2GYdALoAmfmQYDlkC'
43
+ 'H7XDIEzox0z6s6LaCGG8wMNpa7hBZEuXlxOaEbglqo0H5PMd3+oxjgUMkgJcnvcahyYMF5P4'
44
+ '1pjXeAbrG86ABAYI6NoIcYNb48DVSf2FlByO5mGRMOEWxPkqXp0RljAkDoZFl67a9PiTMPTb'
45
+ 'NPLAKw0wb+PDPQA5MgyJXl31GgdFa+D/RV7Tj90wTiWyJnm9LPTMCK9NC+MpIa8Xsj67/DmG'
46
+ 'CIoRHJHr1XzCaT5wafag7I9img+BB/hsASP8JFHW5SjppqzAKieJimEH3puwfY45Fp10AFzX'
47
+ 'o5t89mcuDSrKvslp/tCHLXwyhYnoD9bsj4A9eM1nHg0QAlDKpzHNX0HTiOgK2J7HHKWjjkWd'
48
+ 'VPl5itNMoewbMPuopglxYOcTn+aKNXsP8A8HpoCpNJ8iIJAucXOFqbLRUNm1gRK8TwMlo471'
49
+ 'EmnEZNIo6aVKx2VuKZe45bSjLEGVjYfKzjvwnoUd1ykSSC+FuSg2AGxQPjxQFhM5oc9Rcswh'
50
+ 'c8VJW8mwAwjBKF0OBgyw8fskkqEqTgOjiha6HRV9VJmkAJcnBsqBu06JRNc3APwA+mVdIBHZ'
51
+ 'I+yogLiJlFI6HCo9mZIDh8REKsC84ZAYAPwUXQ2Ux0SXgBnwJ7U+HNLLgwFpAA+WiCwEOVrf'
52
+ 'KXo1MlAeFa1horDNsMfwNHskZ4Sj00JbilJsJWjR5JW/YJSYukMin7DNUHQ1RPwNVLtU18H2'
53
+ 'R0AgF3uyoDTtT+pRv+FSTxaUu7h+gE00getVKBhGCTgET0T8KNoBlYYusq8B13KYjqAMawcO'
54
+ 'oZpOMM1AC0As3ZGWUdCcSq9yPfrxHqOA62oofqDOiaZXLFQzlN/xyH7xpAYa6RG3GMA+YLxo'
55
+ 'Wzwk7tbBgPGcRB0BvUQdQybDMLFYIpZxiWGACWFALL7YY7wg6kx68d4ZNhmuiawCRZRYSmHh'
56
+ 'SMDQD6uTGKMnC3jvQtI4JYiXJs2NBNySqeaaVL+JmtdBmBQVQNNquOrVAxVjuhMMV3uw2Ys9'
57
+ 'WII5xATKxlGRQKBUA3aS5cAkAYkQMHv0S6wCSxBdnQyILnmMg+LnKARQkAdXxQFQ05DIRZCj'
58
+ 'c1AQimpAPldTdHF5mi6sMxxydVoozAivp4T9xNioVaxJ0MvoFsETT3Jj/axc3/YfLFQJdDyU'
59
+ 'AM45VIgyXIqraLf5JZ6NZSk+ww85LExSefyvYqsVW8e/K9bJKB/l8HvMPxZRFywVGzGvI5Bh'
60
+ 'E9D90J/poU+bF7Xqohl2vlpHersttL2ohw0HLMvUSVM1G8ygjpjnhTd0cyvnKat0y9RPWarZ'
61
+ 'Yxn9BdXm+V6+M4PW3n8m7M05mBGw2LiDGUFXNafx2i1f0oUD3RZXvyVwAgbc1nnhB7qtLOWt'
62
+ '5pap0bw+sc2h1kO/M41DOBnbIx0JprSPukeA/0NZL4s8tn8KM6Hfx0D718wzcFL6cYnFtHHi'
63
+ 'WBRKCjButUIrwrSMKt+HT/FyT0yDW7U4gz9HlR9aZLU9lkxJ8tK4BixsymZzcu0HO7X5xFp7'
64
+ '97Elp0u/8Vzr80+WmfmM8H06Vuy+BZ5AHuZZNoxUFCFKOGhzb8Tnv8zZvbwoQEEaCYYtL+mC'
65
+ 'ZjUlCqwxhPpCC0NUzqY0HfRKoYDQh/GrglP5kJNE+NWFZH4fU2061m+VNOkMhMpObHYiIk9J'
66
+ 'ihLeidCY7bX+F9WvxDhQwC8FSJSIParnlEhAqR+eOLjlj7G1yMLKAg5lWHqPM0MwxbSSUzDl'
67
+ 'OXkNkj0Fa1ZS/UPX8Q7k4VN2UK7H+fC8TgoNpJ4iYsjxSp9Hj3RKWcIKtK7mJ2++g9VTP4WJ'
68
+ '2OG7jAw6SMgCErv0o4B1jkvff8pMovgslzoKc5E6ZVt06cILTcijS3fpxcUsjULpLq3I2bwQ'
69
+ '6eh0l15zXkbIku7SK1UxMJxySYxSxetrQX1aCVyy/1sdicbTXfrND5x53IwSdsm+Ya5LP1nx'
70
+ '1Jwordj2tbkuPZX5Nr6V5tL1bVwmUs6K0kfHq5FFnx6lMwveIwWbLBFEl96y6DikSndphzIE'
71
+ 't6ZtY5fWdSsggCkJTtzbgbmJ++8HjxBzEtfWmwm30qP0YV2DFa1Mj9LxxddJ8DYtSnkqwyIO'
72
+ 'qdNd+uaJbgE1pLu0wXE/NTtxrxiLi3mUWi4So5QzOSdxjz7dlYGEFE5Fl56km+Yk7tEXd85J'
73
+ 'XN5dReBRKgAilkbfel9A7eku1X/5WYZG08vFLj37yL28+CZx2qXfda0hkG9WlF49ls0K0w5g'
74
+ 'l/w/qUYzK8EuXb+ThYCUpE/3m0eqATdppoRBZaD/QCZCX+Ph0gh/io3d+vyc6lhnxrKNQ7RD'
75
+ 'VYWiOiJeSwudOWjFmd/95JHfCE/nILuL0yx/+56S7/7iA8sP/o/xj9aP1hturgtduPKnrz/H'
76
+ '9Exeaf9Z+cvfeyt+5Oea3Pfev9KxybaBIEklZyGtG4hl158Jktz9VTmjJUfjedu7rCZtZSl6'
77
+ 'DRwbhfnXsIJ+cEK/Q0tURB0l4YFOu9iwNHc3qa+i7A+gkhQ0a9R2Yz/ucfQ7LApRLbRILJkq'
78
+ 'oGQaae+EkuZxFnfrPqhtfFRre8THR/JHcjQ3YpoJS3ajJfsPU5opl2YNN2i4ZIKGAqp04w7L'
79
+ 'IVwqjzqg1ys/jXvtspEpbauHebyBuQcXS8w9Aq5VfB5ohZjWWwow2yZE3HB26KBiiXR0B1Z+'
80
+ 'OKX5cFzzWUJzw0LVDuM3gdL7QP1FL36/B3XlGa/y3ZgDd5rd4uepgRKozKMUFJZ3waSfB8tw'
81
+ 'Mzug/uWuiG9rxO8LteAXLJEWXaQlHsk/+1D2hwgX0pMxXJlP8Bqot9fwZtzLQOlyzqSHfufi'
82
+ 'OJRbhuuEcYduc0mfY/2xUNmIq1BeiCfS1s60d2+uvhnLxhEwPiq+UDLhsuRbBO5xRkyGKa9y'
83
+ 'ywHoXgfK+qDKdZR+3l8+6SiLwuVA55sqWGmkDfxhcd3o7w5s+wMHhZLmCpT3loLkORt0agvG'
84
+ 'JgyXwAFnPjTmFSdDi8IDJZ1Q1g6Un0qWQol+niofcZ5sYvG7nSaxLc3/nyHNDU/2B+P4DcYV'
85
+ 'C+5c/uTSNEIzYtHA5afjyvfHNZMuzS1LweUbXj30mGMTC26YDFdNhkFoMKG0My3ewf+vstOO'
86
+ 'ilNUaVeodGTracg+LBba1f1O/MIt/1fvaT6yZE+Ma963ii9DLAMEfr8Ea3F3A1RwhHHJ2h0I'
87
+ '20rHofF3VECmRqyDccMZ6E+hYkzqdxTWWTQTOL/Z7+PXLA5TaJ+OaXZG3PHIEwI8+1oXAV0D'
88
+ 'LuOhowE4jUDE1E5Tnt1rBFfPJg01Ae2O6p0WDXRVH40rP3Jl38SmNFfGlfJbIMsL1lBrA+73'
89
+ '82sWQr8GOOyFPgJiSOHOAnoECGbXgHpj1ijU6oRRDIVhyAuFsfEMgTpgI9thHx0xOnlHVJ2f'
90
+ 'sX378Ft8oJMurqqqmhewx2MfDw6zpVBuXA58DqS2t8/81ttb4ST3+XbX83W7vY07+dZ6f/Ou'
91
+ 'vY18cdFqy2oLbxalq4qLLJbVRfg/S9Hyhyof4L8iqbXVNXj97uZd++td9zv46vrW+t372lq8'
92
+ 'tbvrd/i9e+pX+fbuamyp9+/e3bpn9e69e32r9+xrbvH59+701zc3owL24IpOvjMJH7pXLUHP'
93
+ 'SSg5J1QF7NCdIxy9Rh2NjVjMA8UDCW5Y7XjIvEb9VM8Ipy/O7Y5vGRu7cWHbueEzF69VZXy/'
94
+ 'U7y6cGn4+tiZbSNj/WevVi0/xhwuRD8EXlkF8chU+c2wX5n9W33Q553C6S0dHQhe1Q9JjU4S'
95
+ 'Q0naB/PX/sGjec+F34RNWlPvw/qEAH7PgXd/e6RJwv5W37GBEuite0MVXQPkY/jNBLRKF3nc'
96
+ 'cMDnNfHFLWRpWAKsN0lkQ589ATkXNJlRCTiKX4svq4AMBgC2ZbBLgMOGqTJMz29DlYXPS2ZE'
97
+ 'bNaBJKiKODSXjpLYAD79vGaE1sHvAjbYZ4Xf+Iwq7ESxzao3Xbn1CNUtQaE8p7ea9vSRyzsP'
98
+ 'IfVX+APFK3tZ1XKbfRjF2mvZN/ZEbaYAr1v7Ohcj+Y8HuZZzXMhO2iwNDSaesV4+ZLrVm1sS'
99
+ '5pFJhS+40Ms0BUMnhR8+w69IWofF4VnrikCek8bDc3zWsDh416reZOFqiMLndMF1HOUXB/cM'
100
+ 'g+yIOCwZcyKuHw/J9dZQrjrcjg7dcTChGY3TTVaxvMHrU0nrK8oRkqpeFxmIIb4SOT+30O9s'
101
+ 'CQY4ku8VL96tCQYson5eWjxwjLZ30bPjoO3hl/JsDsr9str2JlgLo2GOqoMl+7baWCfB+RH2'
102
+ 'aJUpwB3U6bRsMPmpqjIh+bIw3RfLMtKyNaA9bI2B6zQyUVbQn8cGA80qu1Up4HAOcNvUGah4'
103
+ 'MNFt5dT6h3kyiAq/pSM/MBHWKBkzKYfooGf8dJDjlHyYSHnhsbE6ee25aWvBhURhl20pjktq'
104
+ 'PWFPn92sTfJLzWRGOE4WsETslpft25hFcjbe6dJmHD5uHaulK7OqpNhk/HP/L0dMJ16BC+Jf'
105
+ '1O1K6S64LeaE7GMPwAUWK2LtxAEa5dd6qnlW+eByjliO7GphcJ5DMBVOZ6AmwG6N6cS1Zh5E'
106
+ '07UqnuMOcY7ozBxaCk14pfGd4cPkF2FdBk001JXkt8MkIrKFTSZzpXWblRU4iq9h++9QE6WQ'
107
+ 'o3gMcsQ/zKpyuddFBPwndpzizqHt0UARbJGSEBdT8lcyoplbBZ2Uj68frD6e7iNzO1YBA87c'
108
+ 'DHSOTOlI+/Xp6f0K+MwoQJW/mZVXb1+/edYaLMvslq0m7VAlq7wzbC9aWKPaoa011bvYIhHH'
109
+ 'L8es7IsseT++IHRrC7mg+hin0PwoweaxrqM8x/AO9WEVnbR+/4BVUcVtZFdY7BriFlnAzwPU'
110
+ 'avMAtV2ZAVUn/yy3xRPWk1MZVdZ1deqrluASrfIrvJPhXidSYRjn6R/zi61RJgXgaIg71Z+v'
111
+ 'ltennoOFwjlYAOB0a3NZWnHgFezdKCk/t0R87uA01gFDGRvQHA4Tsc5mILsSI8e3qhBFC8kp'
112
+ 'hd2qFtRF5kKOpk5oySM4fcHVwE3HrFpZHlLmkf1iWi3twDqXp5P6U56exFsvBMhobzTFdP+f'
113
+ 'XDLpudR/wR4ZqkTKO2P2fBZ8lH1yaoN2OqwF8LucAH7OTL/IQuLs2GnLMlDYmBcW9MiUkWKQ'
114
+ 'd1T2RHBQwkcma2WfU9A8zc3gTJ8Wq3/CcZh64icA1r0udouHXi6ioxWgAtmfD9k38ao0HuoN'
115
+ 'ciUBxSECzcz7Kp43b2beLnHe74vzKsV5bctjLnIawhkbrFVFc3M2jeNgUtUjB2nTBFcjZuPX'
116
+ 'gIjDOVxQTJkl7uS5PF1R9yDb7WK32lyKsAUfCXG1OReFy1Pk8TQXJQIi7Bf6liaidVHptBkv'
117
+ 'IDCWc9kgcTLT9kPSvhJjZEqpzwi7XuVhb9NUVBucyqq0rhNiGnzWjQUWdnn4QYp9P8yHitnN'
118
+ 'LuWrZMEWPiGjYTzJOvNFL+9roMCBOGFlF6axwanQCQIfijpFKU9YnYumb9mRajALO5hcfoPI'
119
+ 'SHFL/HF2k54OD4KqHlWqiFuqAn6fSIzberROFLMzhKkVcUcYvGTr/Bq8XdrggBSv4/M34evH'
120
+ 'eTq/0x4Nbvbk6XpIYtgsuvdN54FcdSBM4r01pXCDM+wKMaC+E3AjfIIUvWS+bg7cye08NVAU'
121
+ 'zhOjVzpJZqCabSZ+MA/ZtxGYC79nJg4pUrA130HaM8XJDf148jdEZy8RC2ADHclEpv9CKeio'
122
+ '7ePzQSLj+6lH6PACcYaKuCNjMHDqzaKVTjUtY+qoguFYh606nTclPHdOWdBcPu+hSZMY5Jgq'
123
+ 'l61UVA3HSTdPD6a4vOFz3hdcNExgx/oO0OTmQE7xWP9GLeFNRX1hDXsxQQ7KfK3cNIuvs2+v'
124
+ 'nVybBYGufAohh5rLpJPx10Nf04U90WQTJNbyQz5zn5VZOn/ZI56JbrVkY2PansBzbNG6bF0O'
125
+ 'BfGvnU2WZccl0tACafR3swmPokY3j9C9alUpmpylC+0aYRhRsGSHmkV00nOd+mWM5pdmsED1'
126
+ 'd7HEli4hpuA/vsJ1ElXBoHYZX19EXVa+rqUVWu5lSOiZjRbiELLHg4OZQQ4YbIOKfQYtoday'
127
+ 'z2+mG01a6xZXoar82aQ+/JGV/ClskaYgJ9jeIu3FKdp8bD6Zf9F2K3cpX4e4c0Thz/VkxWhI'
128
+ 'TnvnAFfy5qpCtSpI3i0UK4kmKpOjpDjfFzOnxZn7JzypqqGDMQKOZ2c+OU2ZIWU2aYf9JNWm'
129
+ '7ZxFsrPqH+LEW13pvf3cD0J96FCrMuhk4ngoriVMG2yXQ8SCvriOaCKAgElhWFA976ILCeDK'
130
+ '3L0a22+fQfwkEdWSmCaMAkRMoWID+BaRv70QsT2ohgxwKtlo3HYgkTdISs8GFj6xNDO9NlCu'
131
+ 'mRWDnDlY26K1H/rBR09/uevv2WjWGuCMq0RR1eGVDuuwi9PyUbISGLIWcnroDdmW4QvjeTuE'
132
+ 'JNCgUKiWDutS29Olp6+wrC21QVaW4pLnCAoXKmzbuKagha7PYHehmqPCrKr0EytUpXjuZVL9'
133
+ 'MicH6lBe1TS+zWk5OIiTO5MDjjBVSjkQaLS8CsowtZwDmnCeLqX1G0kBqqwaNnEPZwu8MqE+'
134
+ 'hwov6YOWPiBIUjGoqF8YmlAX57+gIGpRKs4PztrTa0X/js7sR7wZ4fe/uh+l8+mZmJ2HE3t5'
135
+ 'WqE4fIcZCkXAjLaQp4mo+vWpHMd47nFUqdhwnK/Jj9mA0H0ZTSj3Dja55TkhxsjLHl9ywKps'
136
+ '4H5OZcBBdcvPnrdmycf8msw/ciWDSwdJZzlPe119wilBESWm13X3LPw40upGmWcypJpRNevc'
137
+ 'lyd9JLSVd9hiOXCYUZTNMnohwW7KgUO3UvnQrSivk6CQZb5G2lTBowgc0oFDy5gHXF0Cp+CL'
138
+ 'E/33sEmJY09dExawd8H5q8iv9W2Hp35gYH/GqYv4tbBP39LEC5xbuFzMDMHiUejtisXhmpIU'
139
+ 'Sdwk19O9ZIqv/8TzX7U512u1CrJrH2v+WiR4pNkMx/LHeVWui4TmxBrpBE9uUN2wrhcGM+2c'
140
+ 'chWbS8lrhp5gK5UWE+OcWnOLlkVfxAfF2rA6Bf/5BvoAC+7UQlSGzyagFYgSuBgBlK28M2ll'
141
+ 'a2K3POOK1bzYorU3s6d/CEef2hp9COQcU8TCEpWp+SU+is3Mv4X7B7XPTB8SRlH1cVyyqoRh'
142
+ 'j+r3PP0hz1ov0yaXuAsLH+TIlwoJaLHlQLzJBNQJ/onKHNiNcmr/GrIq67h7X2AvFklb+McV'
143
+ 'LCNmgFxjoZaIg7VWiD/LBD3c7+zre5OcTKu/yh5JGtTpfbVJeQCy5Pt34k5ZZUjj6Tltr4xI'
144
+ '0z+s/I+EtFZFinMOyPVwnD+Aa+qZWpkNqtAzgdyfW9mLlkE0AY6tfzDvaGMTRWEdi6hzRIwV'
145
+ 'tkWrdfwgQVeZdT+2bghwd5P/YI+Ga6c5MZNdpXtI+dVbdKGM398uOk/eTx8nC7b3HdjLy2sZ'
146
+ '7STvOhW6Ybe9tUpbqUrCrpS1n1r+uf1jhSV+1vfLGWQf1PEGQP7LSvXq8rMS1906J7y9bfQN'
147
+ 'VCTvwy/N4hepLz54TvXrwhOIyzdPZIYFqLCkLZ38nqLae+BgSYAQdcvT8CH2NFperOLxOklp'
148
+ 'nY+YtmrRHP4UMWNS0ijoseyRk15DbU1t2uWj/bL/5/j5mzZnLYj164pLRu/QE6WdPUH75aBt'
149
+ 'wUnMrpusF6H/GU6oFm+mwyK7XqoE9rqDxw2PtB3tJj7buknL3cO9pVthLlytO9OjDuY+MZjf'
150
+ 'W1ylWseZv2rZhosnvOe+fvDB42+od/APw9hWK337h+u5fk+SoPtd3O60GKnmnHVpuUaFXFTV'
151
+ 'GQtoX0lE56f0zV8Qp7ylXxQn1W39cfGWXva8j8jpNFHUk/05XL+0EL8pE44MPz2YNQkb7pWp'
152
+ 'nA3Wo8F4PHCODq9Eh+6JjL8Aty/D7bP8d4tqfAHroeAEuSSvVzxYpPVWw3qf25L6lqmJl3rU'
153
+ 'Yg23JKx6JesUf0lQf5g15romaHo0t1x/FLiERvfaDSF3UlPy9i1BezR768TnwvyL2e0EG9Ad'
154
+ '4rqbVIGFb3KnXjME9H/JudZjDix+J5etWR1Y0jWvxL8+UDg0L3r53sDyXu2tIw8Gig7lmUNf'
155
+ 'D6wZzHP+722Bu8/nddc1BMqemT/86e5Axf/Ml3yqhxr0KXAwl+pq0Mux/h0p9WbVMidtlf3H'
156
+ 'v/HfBzfLX8D9HvRws/tnUvomK0PWS91Hsj7++Tsp3a9Dkq74N44KYUxJuX5Mfl6U89gfhLLg'
157
+ 'ugVJ7wNS+ospSU9ItwP6ZpBr4DqKpOdS8nWynWfT7YDcIct75shdlFRr/geSavvUvB5Zfjpd'
158
+ 'Dvo+2Z9fzfGng5Levb2DpLotZec78non56z3Wdn/D+b4/4Js/69z7L8KcvyPDkhCspeS/1S2'
159
+ 'rybS7MO8SdlOHjE7/mcoaf0GQrKXkr9LSXpmQuLmlPwSyOfB9V2EtD4sZ1ci9LHsj22OP5/L'
160
+ '63qAmL0uFS3NuzV9XpDPpyVuryMkfhDtw7yLaMn/ncTsOBTS0vN758x7Fy3lqYOQ5k/J76Ul'
161
+ 'PyLETN6x/QdAng/X/0ZImE7Jt8vyH82RP0lLecUv0bk0+0/Tkh/vzIl/Ny3F7WJ63ED+I1qK'
162
+ '74eEtOewPAry12npPfRNQvp3JSn9X9LS+llyJi9Y/mtaej6blOKXkv9G9kdLzsbb7+V5DeTM'
163
+ 'vFj/qryuAjJtXSD/sxznNWRanEFOKiT9ijn68xTS9ZfI2fuoQCHFfxs5e99ZFJJeAzmTL+zP'
164
+ 'fSDHVNVKSvFI4e1hheTHd8gZ/GB9t2znaJodPG+jPG/vHPuPKyQ/Xidn4z8ir+tnc9bVLdv5'
165
+ 'b3I2L70o+4PS9zX8/KdC4lQsI9Pkr8t+4jk1afKkQpJhzKnS5CMKKe8FKG0/ws95ed4VafOy'
166
+ 'kKtLCimva9DMPsIAnpT9vwel+Q8/H8t2HHP8/5tC8gWfBQvS7OCfb4CBqHR2rMVnx97aR93i'
167
+ 'l3Y763bWub27d++tc9d2tNQ3w5V/X2PjrsadMALpY253c8v2er/ft7q5xQ+ylgZ/fXPD3t3b'
168
+ '5bF3u9tdt7exuWX1jGBH4+qW5n1wvatxVwv+Xbe73uvHA3/9zl3NLfXi2LevuQH/bq5vAQu7'
169
+ '9/pTF4317S2psc9f3yo9CCaa67Gr6Zeggi9TT7T5d7XUu2u9fv8uaY5pu3u8j9W7d/q9HeLM'
170
+ 'stF9jbt3NT6GR627miVPwTmf/ODu+roWeQ3it5l76vfAdKt9ltW71q3FqnXeRnddbZo3dbU4'
171
+ 'rvsaW/zeusd2+OvrG7zNDW5fi19UbW4BKVbY1ewWNeq3++SANdfv3pEa74RVi6re7dv97kbf'
172
+ 'bXL83SvIZ2y6/d7GnfXiInEiUw/s2ddS3y7msO4L5LB2uLPD59/V2LLDW7vX3yJiAvslmZkb'
173
+ 'zllBwalJRwL44W+R05+Og9ScdfDZUp8KY52vA4dRiiThbvQ27m3eXV/vEw3t9cmPE+7U04/u'
174
+ 'BTzCvYZ9Ldv3tuEhhFB2RkJqQ73XJ34pLX2J7fXvWbd2lRd/yb1qj7dub3N78TosLwcMwwP3'
175
+ 'ulPgdE+j050OT3cKn+5ZAHWnI9SdDlH3HIy654DUnUKp+zaYuqdx6p4FVHcKqe4ZqLqnsepO'
176
+ 'gdWdhlZ3alW349U9A1j3LMS60yDrxph1p0DrTkPYbNi603Hr/kfAvf2GjFz3XOi6p7Hrvh28'
177
+ '7rovuiPB1y3j1y0C2D2N4JS122I9O1azUOyeA2N3Oo7ds4Hs/kIkzwDZPRvJs4DsTkOyey6U'
178
+ '3elYdk+zNBbP5mn3DFG7p5k6RdXVbkzWqQVMr05yotr9DwgbnxP/D+YHFWw='
179
+ )
180
+
181
+ _DATA = None
182
+
183
+ def load_gc_bc():
184
+ global _DATA
185
+ if _DATA is None:
186
+ _DATA = zlib.decompress(base64.b64decode("".join(_B64)))
187
+ return binding.parse_bitcode(_DATA)
@@ -37,33 +37,6 @@ def _get_all_parser_hooks(enable_extensions: bool) -> List[Any]:
37
37
  return hooks
38
38
 
39
39
 
40
- def parse_f(tree: list[Token]):
41
- node = {}
42
-
43
- node["type"] = tree[0].value
44
- node["name"] = tree[1].value
45
-
46
- i = 3
47
- params = {}
48
-
49
- while i < len(tree) and tree[i].type != TokenType.RPAREN:
50
- if tree[i].type != TokenType.IDENTIFIER:
51
- i += 1
52
- continue
53
- param_name = tree[i].value
54
- i += 1
55
- while i < len(tree) and tree[i].type != TokenType.IDENTIFIER:
56
- i += 1
57
- if i < len(tree) and tree[i].type == TokenType.IDENTIFIER:
58
- param_type = tree[i].value
59
- i += 1
60
- params[param_name] = param_type
61
-
62
- node["params"] = params
63
- node["body"] = tree[i + 1:] if i < len(tree) else []
64
-
65
- return node
66
-
67
40
  def _loc(node):
68
41
  token = getattr(node, '_token', None)
69
42
  if token:
@@ -519,6 +492,7 @@ def parse_class(tokens: list[Token], pos: int):
519
492
  raise ParseError('Expected class name', tokens[pos] if pos < len(tokens) else None)
520
493
  name = tokens[pos].value
521
494
  pos += 1
495
+ generic_params, pos = parse_generic_params(tokens, pos)
522
496
  base = None
523
497
  if pos < len(tokens) and tokens[pos].type == TokenType.LPAREN:
524
498
  pos += 1
@@ -530,7 +504,15 @@ def parse_class(tokens: list[Token], pos: int):
530
504
  raise ParseError('Expected ")" after base class name', tokens[pos] if pos < len(tokens) else None)
531
505
  pos += 1
532
506
  body, pos = parse_suite(tokens, pos)
533
- return {'type': 'class', 'name': name, 'base': base, 'body': body, '_token': tok}, pos
507
+ fields = []
508
+ methods = []
509
+ for stmt in body:
510
+ if isinstance(stmt, FuncDef):
511
+ methods.append(stmt)
512
+ elif isinstance(stmt, VarDecl):
513
+ fields.append(Field(stmt.name, stmt.var_type, token=stmt._token))
514
+ return ClassDef(name, base=base, fields=fields, methods=methods,
515
+ generic_params=generic_params, token=tok), pos
534
516
 
535
517
 
536
518
  def parse_try(tokens: list[Token], pos: int):
@@ -737,13 +719,14 @@ class If:
737
719
  return f'If({self.cond}, {self.body}, {self.orelse})'
738
720
 
739
721
  class FuncDef:
740
- __slots__ = ('name', 'params', 'rettype', 'body', 'visibility', '_token')
741
- def __init__(self, name: str, params: dict, body, rettype: str | None = None, visibility: str | None = None, token=None):
722
+ __slots__ = ('name', 'params', 'rettype', 'body', 'visibility', 'generic_params', '_token')
723
+ def __init__(self, name: str, params: dict, body, rettype: str | None = None, visibility: str | None = None, generic_params: list | None = None, token=None):
742
724
  self.name = name
743
725
  self.params = params
744
726
  self.rettype = rettype
745
727
  self.body = body
746
728
  self.visibility = visibility
729
+ self.generic_params = generic_params or []
747
730
  self._token = token
748
731
  def __repr__(self):
749
732
  vis = f'{self.visibility} ' if self.visibility else ''
@@ -926,6 +909,20 @@ class InlineAsm:
926
909
  return f'InlineAsm({self.template}, volatile={self.volatile})'
927
910
 
928
911
 
912
+ class ClassDef:
913
+ __slots__ = ('name', 'base', 'fields', 'methods', 'generic_params', '_token')
914
+ def __init__(self, name: str, base: str | None = None, fields: list | None = None,
915
+ methods: list | None = None, generic_params: list | None = None, token=None):
916
+ self.name = name
917
+ self.base = base
918
+ self.fields = fields or []
919
+ self.methods = methods or []
920
+ self.generic_params = generic_params or []
921
+ self._token = token
922
+ def __repr__(self):
923
+ return f'ClassDef({self.name}, base={self.base}, fields={self.fields}, methods={self.methods})'
924
+
925
+
929
926
  def parse_inline_asm(tokens: list[Token], pos: int):
930
927
  tok = tokens[pos]
931
928
  pos += 1
@@ -1058,6 +1055,9 @@ def _looks_like_type(tokens, pos):
1058
1055
  depth += 1
1059
1056
  elif tokens[i].type == TokenType.GREATER:
1060
1057
  depth -= 1
1058
+ elif tokens[i].type == TokenType.COMMA and depth == 1:
1059
+ i += 1
1060
+ continue
1061
1061
  i += 1
1062
1062
  continue
1063
1063
  break
@@ -1087,17 +1087,17 @@ def parse_type(tokens: list[Token], pos: int):
1087
1087
  if t.type == TokenType.LBRACKET:
1088
1088
  if pos + 1 < len(tokens) and tokens[pos + 1].type == TokenType.RBRACKET:
1089
1089
  pos += 2
1090
- base = base + '[]'
1090
+ base = _type_to_str(base) + '[]' if not isinstance(base, str) else base + '[]'
1091
1091
  continue
1092
1092
  break
1093
1093
  elif t.type == TokenType.STAR:
1094
- base = base + '*'
1094
+ base = _type_to_str(base) + '*'
1095
1095
  pos += 1
1096
1096
  elif t.type == TokenType.POW:
1097
- base = base + '**'
1097
+ base = _type_to_str(base) + '**'
1098
1098
  pos += 1
1099
1099
  elif t.type == TokenType.AMPERSAND:
1100
- base = base + '&'
1100
+ base = _type_to_str(base) + '&'
1101
1101
  pos += 1
1102
1102
  elif t.type == TokenType.LESS and isinstance(base, str):
1103
1103
  pos += 1
@@ -1112,7 +1112,7 @@ def parse_type(tokens: list[Token], pos: int):
1112
1112
  raise ParseError('Expected ">" to close generic type', t)
1113
1113
  pos += 1
1114
1114
  base = (base, tuple(params))
1115
- break
1115
+ continue
1116
1116
  else:
1117
1117
  break
1118
1118
  return base, pos
@@ -1434,7 +1434,7 @@ def parse_def(tokens: list[Token], pos: int):
1434
1434
  params, pos = _parse_func_params(tokens, pos)
1435
1435
  rettype, pos = _parse_func_rettype(tokens, pos)
1436
1436
  body, pos = parse_suite(tokens, pos)
1437
- return FuncDef(name, params, body, rettype, token=tok), pos
1437
+ return FuncDef(name, params, body, rettype, generic_params=generic_params, token=tok), pos
1438
1438
 
1439
1439
 
1440
1440
  def _is_assignable(expr):