pyscript-programming-language 1.9.0__tar.gz → 1.10.1__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.
- {pyscript_programming_language-1.9.0/pyscript_programming_language.egg-info → pyscript_programming_language-1.10.1}/PKG-INFO +8 -7
- {pyscript_programming_language-1.9.0 → pyscript_programming_language-1.10.1}/README.md +4 -3
- {pyscript_programming_language-1.9.0 → pyscript_programming_language-1.10.1}/pyscript/__init__.py +10 -4
- {pyscript_programming_language-1.9.0 → pyscript_programming_language-1.10.1}/pyscript/__init__.pyi +13 -6
- {pyscript_programming_language-1.9.0 → pyscript_programming_language-1.10.1}/pyscript/__main__.py +72 -10
- {pyscript_programming_language-1.9.0 → pyscript_programming_language-1.10.1}/pyscript/core/analyzer.py +48 -65
- {pyscript_programming_language-1.9.0 → pyscript_programming_language-1.10.1}/pyscript/core/buffer.py +13 -9
- {pyscript_programming_language-1.9.0 → pyscript_programming_language-1.10.1}/pyscript/core/cache.py +13 -4
- {pyscript_programming_language-1.9.0 → pyscript_programming_language-1.10.1}/pyscript/core/checks.py +3 -7
- {pyscript_programming_language-1.9.0 → pyscript_programming_language-1.10.1}/pyscript/core/constants.py +22 -9
- {pyscript_programming_language-1.9.0 → pyscript_programming_language-1.10.1}/pyscript/core/context.py +4 -2
- {pyscript_programming_language-1.9.0 → pyscript_programming_language-1.10.1}/pyscript/core/exceptions.py +16 -17
- {pyscript_programming_language-1.9.0 → pyscript_programming_language-1.10.1}/pyscript/core/handlers.py +9 -18
- {pyscript_programming_language-1.9.0 → pyscript_programming_language-1.10.1}/pyscript/core/highlight.py +117 -87
- {pyscript_programming_language-1.9.0 → pyscript_programming_language-1.10.1}/pyscript/core/interpreter.py +158 -81
- {pyscript_programming_language-1.9.0 → pyscript_programming_language-1.10.1}/pyscript/core/lexer.py +82 -72
- {pyscript_programming_language-1.9.0 → pyscript_programming_language-1.10.1}/pyscript/core/mapping.py +20 -14
- {pyscript_programming_language-1.9.0 → pyscript_programming_language-1.10.1}/pyscript/core/nodes.py +53 -11
- {pyscript_programming_language-1.9.0 → pyscript_programming_language-1.10.1}/pyscript/core/objects.py +70 -52
- {pyscript_programming_language-1.9.0 → pyscript_programming_language-1.10.1}/pyscript/core/parser.py +361 -301
- {pyscript_programming_language-1.9.0 → pyscript_programming_language-1.10.1}/pyscript/core/position.py +5 -9
- {pyscript_programming_language-1.9.0 → pyscript_programming_language-1.10.1}/pyscript/core/pysbuiltins.py +84 -37
- {pyscript_programming_language-1.9.0 → pyscript_programming_language-1.10.1}/pyscript/core/results.py +6 -4
- {pyscript_programming_language-1.9.0 → pyscript_programming_language-1.10.1}/pyscript/core/runner.py +39 -24
- {pyscript_programming_language-1.9.0 → pyscript_programming_language-1.10.1}/pyscript/core/symtab.py +34 -31
- {pyscript_programming_language-1.9.0 → pyscript_programming_language-1.10.1}/pyscript/core/token.py +2 -5
- {pyscript_programming_language-1.9.0 → pyscript_programming_language-1.10.1}/pyscript/core/utils/__init__.py +2 -0
- {pyscript_programming_language-1.9.0 → pyscript_programming_language-1.10.1}/pyscript/core/utils/ansi.py +22 -22
- {pyscript_programming_language-1.9.0 → pyscript_programming_language-1.10.1}/pyscript/core/utils/debug.py +0 -1
- {pyscript_programming_language-1.9.0 → pyscript_programming_language-1.10.1}/pyscript/core/utils/decorators.py +4 -3
- {pyscript_programming_language-1.9.0 → pyscript_programming_language-1.10.1}/pyscript/core/utils/generic.py +13 -14
- pyscript_programming_language-1.10.1/pyscript/core/utils/jsdict.py +34 -0
- {pyscript_programming_language-1.9.0 → pyscript_programming_language-1.10.1}/pyscript/core/utils/module.py +2 -1
- {pyscript_programming_language-1.9.0 → pyscript_programming_language-1.10.1}/pyscript/core/utils/shell.py +5 -3
- pyscript_programming_language-1.10.1/pyscript/core/utils/similarity.py +22 -0
- {pyscript_programming_language-1.9.0 → pyscript_programming_language-1.10.1}/pyscript/core/utils/string.py +5 -3
- {pyscript_programming_language-1.9.0 → pyscript_programming_language-1.10.1}/pyscript/core/version.py +5 -3
- {pyscript_programming_language-1.9.0 → pyscript_programming_language-1.10.1}/pyscript/lib/ansi.pys +1 -1
- {pyscript_programming_language-1.9.0 → pyscript_programming_language-1.10.1}/pyscript/lib/ast/__init__.pys +3 -3
- {pyscript_programming_language-1.9.0 → pyscript_programming_language-1.10.1}/pyscript/lib/ast/ast_dump.py +22 -2
- pyscript_programming_language-1.10.1/pyscript/lib/ast/ast_literal_eval.py +84 -0
- {pyscript_programming_language-1.9.0 → pyscript_programming_language-1.10.1}/pyscript/lib/ast/ast_unparse.py +72 -16
- {pyscript_programming_language-1.9.0 → pyscript_programming_language-1.10.1}/pyscript/lib/ast/ast_walk.py +19 -18
- {pyscript_programming_language-1.9.0 → pyscript_programming_language-1.10.1}/pyscript/lib/brainfuck.pys +69 -76
- {pyscript_programming_language-1.9.0 → pyscript_programming_language-1.10.1}/pyscript/lib/inspect.pys +1 -1
- pyscript_programming_language-1.10.1/pyscript/lib/jsdict.pys +5 -0
- {pyscript_programming_language-1.9.0 → pyscript_programming_language-1.10.1}/pyscript/lib/parser.pys +10 -13
- {pyscript_programming_language-1.9.0 → pyscript_programming_language-1.10.1}/pyscript/lib/site.pys +10 -13
- {pyscript_programming_language-1.9.0 → pyscript_programming_language-1.10.1}/pyscript/lib/sys.pys +3 -0
- {pyscript_programming_language-1.9.0 → pyscript_programming_language-1.10.1/pyscript_programming_language.egg-info}/PKG-INFO +8 -7
- {pyscript_programming_language-1.9.0 → pyscript_programming_language-1.10.1}/pyscript_programming_language.egg-info/SOURCES.txt +2 -2
- {pyscript_programming_language-1.9.0 → pyscript_programming_language-1.10.1}/pyscript_programming_language.egg-info/requires.txt +1 -1
- {pyscript_programming_language-1.9.0 → pyscript_programming_language-1.10.1}/setup.py +2 -2
- pyscript_programming_language-1.9.0/pyscript/core/utils/similarity.py +0 -22
- pyscript_programming_language-1.9.0/pyscript/lib/ast/ast_literal_eval.py +0 -51
- pyscript_programming_language-1.9.0/pyscript/lib/jsdict.pys +0 -22
- pyscript_programming_language-1.9.0/pyscript/site-packages/67.pys +0 -1
- {pyscript_programming_language-1.9.0 → pyscript_programming_language-1.10.1}/MANIFEST.in +0 -0
- {pyscript_programming_language-1.9.0 → pyscript_programming_language-1.10.1}/pyscript/core/__init__.py +0 -0
- {pyscript_programming_language-1.9.0 → pyscript_programming_language-1.10.1}/pyscript/core/bases.py +0 -0
- {pyscript_programming_language-1.9.0 → pyscript_programming_language-1.10.1}/pyscript/core/utils/path.py +0 -0
- {pyscript_programming_language-1.9.0 → pyscript_programming_language-1.10.1}/pyscript/lib/__hello__.pys +0 -0
- {pyscript_programming_language-1.9.0 → pyscript_programming_language-1.10.1}/pyscript/lib/dis.pys +0 -0
- {pyscript_programming_language-1.9.0 → pyscript_programming_language-1.10.1}/pyscript/lib/explorer.pys +0 -0
- {pyscript_programming_language-1.9.0 → pyscript_programming_language-1.10.1}/pyscript/lib/fpstimer.pys +0 -0
- {pyscript_programming_language-1.9.0 → pyscript_programming_language-1.10.1}/pyscript/lib/getch.pys +0 -0
- {pyscript_programming_language-1.9.0 → pyscript_programming_language-1.10.1}/pyscript/lib/keyword.pys +0 -0
- {pyscript_programming_language-1.9.0 → pyscript_programming_language-1.10.1}/pyscript/lib/symtable.pys +0 -0
- {pyscript_programming_language-1.9.0 → pyscript_programming_language-1.10.1}/pyscript/lib/token.pys +0 -0
- {pyscript_programming_language-1.9.0 → pyscript_programming_language-1.10.1}/pyscript/lib/tokenize/__init__.pys +0 -0
- {pyscript_programming_language-1.9.0 → pyscript_programming_language-1.10.1}/pyscript/lib/tokenize/tok_untokenize.py +0 -0
- {pyscript_programming_language-1.9.0/pyscript/lib → pyscript_programming_language-1.10.1/pyscript/site-packages}/this.pys +0 -0
- {pyscript_programming_language-1.9.0 → pyscript_programming_language-1.10.1}/pyscript/this.py +0 -0
- {pyscript_programming_language-1.9.0 → pyscript_programming_language-1.10.1}/pyscript_programming_language.egg-info/dependency_links.txt +0 -0
- {pyscript_programming_language-1.9.0 → pyscript_programming_language-1.10.1}/pyscript_programming_language.egg-info/top_level.txt +0 -0
- {pyscript_programming_language-1.9.0 → pyscript_programming_language-1.10.1}/setup.cfg +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: pyscript-programming-language
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.10.1
|
|
4
4
|
Summary: PyScript Programming Language
|
|
5
5
|
Home-page: https://azzammuhyala.github.io/pyscript
|
|
6
6
|
Author: azzammuhyala
|
|
@@ -17,9 +17,9 @@ Classifier: Topic :: Software Development :: Interpreters
|
|
|
17
17
|
Classifier: Topic :: Software Development :: Compilers
|
|
18
18
|
Requires-Python: >=3.10
|
|
19
19
|
Description-Content-Type: text/markdown
|
|
20
|
-
Provides-Extra:
|
|
21
|
-
Requires-Dist: beartype; extra == "
|
|
22
|
-
Requires-Dist: pygments; extra == "
|
|
20
|
+
Provides-Extra: other
|
|
21
|
+
Requires-Dist: beartype; extra == "other"
|
|
22
|
+
Requires-Dist: pygments; extra == "other"
|
|
23
23
|
Dynamic: author
|
|
24
24
|
Dynamic: author-email
|
|
25
25
|
Dynamic: classifier
|
|
@@ -35,9 +35,9 @@ Dynamic: summary
|
|
|
35
35
|
|
|
36
36
|
# PyScript
|
|
37
37
|
|
|
38
|
-
<
|
|
38
|
+
<div align="center">
|
|
39
39
|
<img src="https://github.com/azzammuhyala/pyscript/blob/main/PyScript.png?raw=true" alt="PyScript Logo" width="200">
|
|
40
|
-
</
|
|
40
|
+
</div>
|
|
41
41
|
|
|
42
42
|
PyScript is a simple programming language built on top of Python. It combines some syntax from Python and JavaScript,
|
|
43
43
|
so if you're already familiar with Python or JavaScript, or both, it should be quite easy to learn.
|
|
@@ -65,7 +65,7 @@ Next, after downloading and configuring the Python application, you can download
|
|
|
65
65
|
[PyScript releases](https://github.com/azzammuhyala/pyscript/releases) or from Python Pip with this command
|
|
66
66
|
(_Recommended_):
|
|
67
67
|
```sh
|
|
68
|
-
|
|
68
|
+
pip install -U pyscript-programming-language
|
|
69
69
|
```
|
|
70
70
|
|
|
71
71
|
After that, you can run the PyScript shell (_REPL_) with this command:
|
|
@@ -78,6 +78,7 @@ If successful, you can see the version, release date, and a `>>>` like Python sh
|
|
|
78
78
|
[PyScript extension](https://marketplace.visualstudio.com/items?itemName=azzammuhyala.pyslang) for Syntax Highlight!
|
|
79
79
|
|
|
80
80
|
## Syntax
|
|
81
|
+
Familiar? There it is!
|
|
81
82
|
<pre><span style="color:#8CDCFE">a</span><span style="color:#D4D4D4"> = </span><span style="color:#4EC9B0">float</span><span style="color:#FFD705">(</span><span style="color:#DCDCAA">input</span><span style="color:#D45DBA">(</span><span style="color:#CE9178">"Enter a first number : "</span><span style="color:#D45DBA">)</span><span style="color:#FFD705">)</span><br><span style="color:#8CDCFE">b</span><span style="color:#D4D4D4"> = </span><span style="color:#4EC9B0">float</span><span style="color:#FFD705">(</span><span style="color:#DCDCAA">input</span><span style="color:#D45DBA">(</span><span style="color:#CE9178">"Enter a second number: "</span><span style="color:#D45DBA">)</span><span style="color:#FFD705">)</span><br><span style="color:#8CDCFE">op</span><span style="color:#D4D4D4"> = </span><span style="color:#DCDCAA">input</span><span style="color:#FFD705">(</span><span style="color:#CE9178">"Enter an operation (+, -, *, /): "</span><span style="color:#FFD705">)</span><br><br><span style="color:#C586C0">switch</span><span style="color:#D4D4D4"> </span><span style="color:#FFD705">(</span><span style="color:#8CDCFE">op</span><span style="color:#D4D4D4">.</span><span style="color:#DCDCAA">strip</span><span style="color:#D45DBA">()</span><span style="color:#FFD705">)</span><br><span style="color:#FFD705">{</span><br><span style="color:#D4D4D4"> </span><span style="color:#C586C0">case</span><span style="color:#D4D4D4"> </span><span style="color:#CE9178">'+'</span><span style="color:#D4D4D4">:</span><br><span style="color:#D4D4D4"> </span><span style="color:#8CDCFE">result</span><span style="color:#D4D4D4"> = </span><span style="color:#8CDCFE">a</span><span style="color:#D4D4D4"> + </span><span style="color:#8CDCFE">b</span><br><span style="color:#D4D4D4"> </span><span style="color:#DCDCAA">print</span><span style="color:#D45DBA">(</span><span style="color:#CE9178">"Result of {} + {} = {}"</span><span style="color:#D4D4D4">.</span><span style="color:#DCDCAA">format</span><span style="color:#1A9FFF">(</span><span style="color:#8CDCFE">a</span><span style="color:#D4D4D4">, </span><span style="color:#8CDCFE">b</span><span style="color:#D4D4D4">, </span><span style="color:#8CDCFE">result</span><span style="color:#1A9FFF">)</span><span style="color:#D45DBA">)</span><br><span style="color:#D4D4D4"> </span><span style="color:#C586C0">break</span><br><br><span style="color:#D4D4D4"> </span><span style="color:#C586C0">case</span><span style="color:#D4D4D4"> </span><span style="color:#CE9178">'-'</span><span style="color:#D4D4D4">:</span><br><span style="color:#D4D4D4"> </span><span style="color:#8CDCFE">result</span><span style="color:#D4D4D4"> = </span><span style="color:#8CDCFE">a</span><span style="color:#D4D4D4"> - </span><span style="color:#8CDCFE">b</span><br><span style="color:#D4D4D4"> </span><span style="color:#DCDCAA">print</span><span style="color:#D45DBA">(</span><span style="color:#CE9178">"Result of {} - {} = {}"</span><span style="color:#D4D4D4">.</span><span style="color:#DCDCAA">format</span><span style="color:#1A9FFF">(</span><span style="color:#8CDCFE">a</span><span style="color:#D4D4D4">, </span><span style="color:#8CDCFE">b</span><span style="color:#D4D4D4">, </span><span style="color:#8CDCFE">result</span><span style="color:#1A9FFF">)</span><span style="color:#D45DBA">)</span><br><span style="color:#D4D4D4"> </span><span style="color:#C586C0">break</span><br><br><span style="color:#D4D4D4"> </span><span style="color:#C586C0">case</span><span style="color:#D4D4D4"> </span><span style="color:#CE9178">'*'</span><span style="color:#D4D4D4">:</span><br><span style="color:#D4D4D4"> </span><span style="color:#8CDCFE">result</span><span style="color:#D4D4D4"> = </span><span style="color:#8CDCFE">a</span><span style="color:#D4D4D4"> * </span><span style="color:#8CDCFE">b</span><br><span style="color:#D4D4D4"> </span><span style="color:#DCDCAA">print</span><span style="color:#D45DBA">(</span><span style="color:#CE9178">"Result of {} * {} = {}"</span><span style="color:#D4D4D4">.</span><span style="color:#DCDCAA">format</span><span style="color:#1A9FFF">(</span><span style="color:#8CDCFE">a</span><span style="color:#D4D4D4">, </span><span style="color:#8CDCFE">b</span><span style="color:#D4D4D4">, </span><span style="color:#8CDCFE">result</span><span style="color:#1A9FFF">)</span><span style="color:#D45DBA">)</span><br><span style="color:#D4D4D4"> </span><span style="color:#C586C0">break</span><br><br><span style="color:#D4D4D4"> </span><span style="color:#C586C0">case</span><span style="color:#D4D4D4"> </span><span style="color:#CE9178">'/'</span><span style="color:#D4D4D4">:</span><br><span style="color:#D4D4D4"> </span><span style="color:#8CDCFE">result</span><span style="color:#D4D4D4"> = </span><span style="color:#8CDCFE">b</span><span style="color:#D4D4D4"> != </span><span style="color:#B5CEA8">0</span><span style="color:#D4D4D4"> ? </span><span style="color:#8CDCFE">a</span><span style="color:#D4D4D4"> / </span><span style="color:#8CDCFE">b</span><span style="color:#D4D4D4"> : </span><span style="color:#CE9178">"Cannot be divided by 0!"</span><br><span style="color:#D4D4D4"> </span><span style="color:#DCDCAA">print</span><span style="color:#D45DBA">(</span><span style="color:#CE9178">"Result of {} / {} = {}"</span><span style="color:#D4D4D4">.</span><span style="color:#DCDCAA">format</span><span style="color:#1A9FFF">(</span><span style="color:#8CDCFE">a</span><span style="color:#D4D4D4">, </span><span style="color:#8CDCFE">b</span><span style="color:#D4D4D4">, </span><span style="color:#8CDCFE">result</span><span style="color:#1A9FFF">)</span><span style="color:#D45DBA">)</span><br><span style="color:#D4D4D4"> </span><span style="color:#C586C0">break</span><br><br><span style="color:#D4D4D4"> </span><span style="color:#C586C0">default</span><span style="color:#D4D4D4">:</span><br><span style="color:#D4D4D4"> </span><span style="color:#DCDCAA">print</span><span style="color:#D45DBA">(</span><span style="color:#CE9178">"Unknown operation"</span><span style="color:#D45DBA">)</span><br><span style="color:#FFD705">}</span></pre>
|
|
82
83
|
|
|
83
84
|
## Behind it
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
# PyScript
|
|
2
2
|
|
|
3
|
-
<
|
|
3
|
+
<div align="center">
|
|
4
4
|
<img src="https://github.com/azzammuhyala/pyscript/blob/main/PyScript.png?raw=true" alt="PyScript Logo" width="200">
|
|
5
|
-
</
|
|
5
|
+
</div>
|
|
6
6
|
|
|
7
7
|
PyScript is a simple programming language built on top of Python. It combines some syntax from Python and JavaScript,
|
|
8
8
|
so if you're already familiar with Python or JavaScript, or both, it should be quite easy to learn.
|
|
@@ -30,7 +30,7 @@ Next, after downloading and configuring the Python application, you can download
|
|
|
30
30
|
[PyScript releases](https://github.com/azzammuhyala/pyscript/releases) or from Python Pip with this command
|
|
31
31
|
(_Recommended_):
|
|
32
32
|
```sh
|
|
33
|
-
|
|
33
|
+
pip install -U pyscript-programming-language
|
|
34
34
|
```
|
|
35
35
|
|
|
36
36
|
After that, you can run the PyScript shell (_REPL_) with this command:
|
|
@@ -43,6 +43,7 @@ If successful, you can see the version, release date, and a `>>>` like Python sh
|
|
|
43
43
|
[PyScript extension](https://marketplace.visualstudio.com/items?itemName=azzammuhyala.pyslang) for Syntax Highlight!
|
|
44
44
|
|
|
45
45
|
## Syntax
|
|
46
|
+
Familiar? There it is!
|
|
46
47
|
<pre><span style="color:#8CDCFE">a</span><span style="color:#D4D4D4"> = </span><span style="color:#4EC9B0">float</span><span style="color:#FFD705">(</span><span style="color:#DCDCAA">input</span><span style="color:#D45DBA">(</span><span style="color:#CE9178">"Enter a first number : "</span><span style="color:#D45DBA">)</span><span style="color:#FFD705">)</span><br><span style="color:#8CDCFE">b</span><span style="color:#D4D4D4"> = </span><span style="color:#4EC9B0">float</span><span style="color:#FFD705">(</span><span style="color:#DCDCAA">input</span><span style="color:#D45DBA">(</span><span style="color:#CE9178">"Enter a second number: "</span><span style="color:#D45DBA">)</span><span style="color:#FFD705">)</span><br><span style="color:#8CDCFE">op</span><span style="color:#D4D4D4"> = </span><span style="color:#DCDCAA">input</span><span style="color:#FFD705">(</span><span style="color:#CE9178">"Enter an operation (+, -, *, /): "</span><span style="color:#FFD705">)</span><br><br><span style="color:#C586C0">switch</span><span style="color:#D4D4D4"> </span><span style="color:#FFD705">(</span><span style="color:#8CDCFE">op</span><span style="color:#D4D4D4">.</span><span style="color:#DCDCAA">strip</span><span style="color:#D45DBA">()</span><span style="color:#FFD705">)</span><br><span style="color:#FFD705">{</span><br><span style="color:#D4D4D4"> </span><span style="color:#C586C0">case</span><span style="color:#D4D4D4"> </span><span style="color:#CE9178">'+'</span><span style="color:#D4D4D4">:</span><br><span style="color:#D4D4D4"> </span><span style="color:#8CDCFE">result</span><span style="color:#D4D4D4"> = </span><span style="color:#8CDCFE">a</span><span style="color:#D4D4D4"> + </span><span style="color:#8CDCFE">b</span><br><span style="color:#D4D4D4"> </span><span style="color:#DCDCAA">print</span><span style="color:#D45DBA">(</span><span style="color:#CE9178">"Result of {} + {} = {}"</span><span style="color:#D4D4D4">.</span><span style="color:#DCDCAA">format</span><span style="color:#1A9FFF">(</span><span style="color:#8CDCFE">a</span><span style="color:#D4D4D4">, </span><span style="color:#8CDCFE">b</span><span style="color:#D4D4D4">, </span><span style="color:#8CDCFE">result</span><span style="color:#1A9FFF">)</span><span style="color:#D45DBA">)</span><br><span style="color:#D4D4D4"> </span><span style="color:#C586C0">break</span><br><br><span style="color:#D4D4D4"> </span><span style="color:#C586C0">case</span><span style="color:#D4D4D4"> </span><span style="color:#CE9178">'-'</span><span style="color:#D4D4D4">:</span><br><span style="color:#D4D4D4"> </span><span style="color:#8CDCFE">result</span><span style="color:#D4D4D4"> = </span><span style="color:#8CDCFE">a</span><span style="color:#D4D4D4"> - </span><span style="color:#8CDCFE">b</span><br><span style="color:#D4D4D4"> </span><span style="color:#DCDCAA">print</span><span style="color:#D45DBA">(</span><span style="color:#CE9178">"Result of {} - {} = {}"</span><span style="color:#D4D4D4">.</span><span style="color:#DCDCAA">format</span><span style="color:#1A9FFF">(</span><span style="color:#8CDCFE">a</span><span style="color:#D4D4D4">, </span><span style="color:#8CDCFE">b</span><span style="color:#D4D4D4">, </span><span style="color:#8CDCFE">result</span><span style="color:#1A9FFF">)</span><span style="color:#D45DBA">)</span><br><span style="color:#D4D4D4"> </span><span style="color:#C586C0">break</span><br><br><span style="color:#D4D4D4"> </span><span style="color:#C586C0">case</span><span style="color:#D4D4D4"> </span><span style="color:#CE9178">'*'</span><span style="color:#D4D4D4">:</span><br><span style="color:#D4D4D4"> </span><span style="color:#8CDCFE">result</span><span style="color:#D4D4D4"> = </span><span style="color:#8CDCFE">a</span><span style="color:#D4D4D4"> * </span><span style="color:#8CDCFE">b</span><br><span style="color:#D4D4D4"> </span><span style="color:#DCDCAA">print</span><span style="color:#D45DBA">(</span><span style="color:#CE9178">"Result of {} * {} = {}"</span><span style="color:#D4D4D4">.</span><span style="color:#DCDCAA">format</span><span style="color:#1A9FFF">(</span><span style="color:#8CDCFE">a</span><span style="color:#D4D4D4">, </span><span style="color:#8CDCFE">b</span><span style="color:#D4D4D4">, </span><span style="color:#8CDCFE">result</span><span style="color:#1A9FFF">)</span><span style="color:#D45DBA">)</span><br><span style="color:#D4D4D4"> </span><span style="color:#C586C0">break</span><br><br><span style="color:#D4D4D4"> </span><span style="color:#C586C0">case</span><span style="color:#D4D4D4"> </span><span style="color:#CE9178">'/'</span><span style="color:#D4D4D4">:</span><br><span style="color:#D4D4D4"> </span><span style="color:#8CDCFE">result</span><span style="color:#D4D4D4"> = </span><span style="color:#8CDCFE">b</span><span style="color:#D4D4D4"> != </span><span style="color:#B5CEA8">0</span><span style="color:#D4D4D4"> ? </span><span style="color:#8CDCFE">a</span><span style="color:#D4D4D4"> / </span><span style="color:#8CDCFE">b</span><span style="color:#D4D4D4"> : </span><span style="color:#CE9178">"Cannot be divided by 0!"</span><br><span style="color:#D4D4D4"> </span><span style="color:#DCDCAA">print</span><span style="color:#D45DBA">(</span><span style="color:#CE9178">"Result of {} / {} = {}"</span><span style="color:#D4D4D4">.</span><span style="color:#DCDCAA">format</span><span style="color:#1A9FFF">(</span><span style="color:#8CDCFE">a</span><span style="color:#D4D4D4">, </span><span style="color:#8CDCFE">b</span><span style="color:#D4D4D4">, </span><span style="color:#8CDCFE">result</span><span style="color:#1A9FFF">)</span><span style="color:#D45DBA">)</span><br><span style="color:#D4D4D4"> </span><span style="color:#C586C0">break</span><br><br><span style="color:#D4D4D4"> </span><span style="color:#C586C0">default</span><span style="color:#D4D4D4">:</span><br><span style="color:#D4D4D4"> </span><span style="color:#DCDCAA">print</span><span style="color:#D45DBA">(</span><span style="color:#CE9178">"Unknown operation"</span><span style="color:#D45DBA">)</span><br><span style="color:#FFD705">}</span></pre>
|
|
47
48
|
|
|
48
49
|
## Behind it
|
{pyscript_programming_language-1.9.0 → pyscript_programming_language-1.10.1}/pyscript/__init__.py
RENAMED
|
@@ -8,21 +8,26 @@ if __import__('sys').version_info < (3, 10):
|
|
|
8
8
|
|
|
9
9
|
from . import core
|
|
10
10
|
|
|
11
|
-
from .core.constants import
|
|
11
|
+
from .core.constants import (
|
|
12
|
+
DEFAULT, NO_COLOR, DEBUG, SILENT, RETURN_RESULT, DONT_SHOW_BANNER_ON_SHELL, HIGHLIGHT, DICT_TO_JSDICT
|
|
13
|
+
)
|
|
12
14
|
from .core.cache import undefined, hook
|
|
13
|
-
from .core.highlight import
|
|
15
|
+
from .core.highlight import (
|
|
16
|
+
HLFMT_HTML, HLFMT_ANSI, HLFMT_BBCODE, pys_highlight, PygmentsPyScriptStyle, PygmentsPyScriptLexer
|
|
17
|
+
)
|
|
14
18
|
from .core.runner import pys_exec, pys_eval, pys_require, pys_shell
|
|
15
19
|
from .core.version import version, version_info, __version__, __date__
|
|
16
20
|
|
|
17
21
|
__all__ = (
|
|
18
22
|
'core',
|
|
19
23
|
'DEFAULT',
|
|
24
|
+
'NO_COLOR',
|
|
20
25
|
'DEBUG',
|
|
21
26
|
'SILENT',
|
|
22
27
|
'RETURN_RESULT',
|
|
28
|
+
'DONT_SHOW_BANNER_ON_SHELL',
|
|
23
29
|
'HIGHLIGHT',
|
|
24
|
-
'
|
|
25
|
-
'REVERSE_POW_XOR',
|
|
30
|
+
'DICT_TO_JSDICT',
|
|
26
31
|
'HLFMT_HTML',
|
|
27
32
|
'HLFMT_ANSI',
|
|
28
33
|
'HLFMT_BBCODE',
|
|
@@ -35,5 +40,6 @@ __all__ = (
|
|
|
35
40
|
'pys_eval',
|
|
36
41
|
'pys_require',
|
|
37
42
|
'pys_shell',
|
|
43
|
+
'PygmentsPyScriptStyle',
|
|
38
44
|
'PygmentsPyScriptLexer'
|
|
39
45
|
)
|
{pyscript_programming_language-1.9.0 → pyscript_programming_language-1.10.1}/pyscript/__init__.pyi
RENAMED
|
@@ -13,15 +13,19 @@ if TYPE_CHECKING:
|
|
|
13
13
|
from types import BuiltinMethodType, ModuleType
|
|
14
14
|
|
|
15
15
|
from . import core as core
|
|
16
|
-
from .core.highlight import
|
|
16
|
+
from .core.highlight import (
|
|
17
|
+
PygmentsPyScriptStyle as PygmentsPyScriptStyle,
|
|
18
|
+
PygmentsPyScriptLexer as PygmentsPyScriptLexer
|
|
19
|
+
)
|
|
17
20
|
|
|
18
21
|
DEFAULT: int
|
|
22
|
+
NO_COLOR: int
|
|
19
23
|
DEBUG: int
|
|
20
24
|
SILENT: int
|
|
21
25
|
RETURN_RESULT: int
|
|
26
|
+
DONT_SHOW_BANNER_ON_SHELL: int
|
|
22
27
|
HIGHLIGHT: int
|
|
23
|
-
|
|
24
|
-
REVERSE_POW_XOR: int
|
|
28
|
+
DICT_TO_JSDICT: int
|
|
25
29
|
|
|
26
30
|
HLFMT_HTML: _PysHighlightFormatter
|
|
27
31
|
HLFMT_ANSI: _PysHighlightFormatter
|
|
@@ -53,13 +57,15 @@ def pys_highlight(
|
|
|
53
57
|
def pys_exec(
|
|
54
58
|
source: str | bytes | bytearray | Iterable | BuiltinMethodType | IOBase | PysFileBuffer,
|
|
55
59
|
globals: Optional[dict[str, Any] | PysSymbolTable | PysUndefined] = None,
|
|
56
|
-
flags: int = DEFAULT
|
|
60
|
+
flags: int = DEFAULT,
|
|
61
|
+
parser_flags: int = DEFAULT
|
|
57
62
|
) -> None | PysExecuteResult: ...
|
|
58
63
|
|
|
59
64
|
def pys_eval(
|
|
60
65
|
source: str | bytes | bytearray | Iterable | BuiltinMethodType | IOBase | PysFileBuffer,
|
|
61
66
|
globals: Optional[dict[str, Any] | PysSymbolTable | PysUndefined] = None,
|
|
62
|
-
flags: int = DEFAULT
|
|
67
|
+
flags: int = DEFAULT,
|
|
68
|
+
parser_flags: int = DEFAULT
|
|
63
69
|
) -> Any | PysExecuteResult: ...
|
|
64
70
|
|
|
65
71
|
def pys_require(
|
|
@@ -69,7 +75,8 @@ def pys_require(
|
|
|
69
75
|
|
|
70
76
|
def pys_shell(
|
|
71
77
|
globals: Optional[dict[str, Any] | PysSymbolTable | PysUndefined] = None,
|
|
72
|
-
flags: int = DEFAULT
|
|
78
|
+
flags: int = DEFAULT,
|
|
79
|
+
parser_flags: int = DEFAULT
|
|
73
80
|
) -> int | Any: ...
|
|
74
81
|
|
|
75
82
|
__version__: str
|
{pyscript_programming_language-1.9.0 → pyscript_programming_language-1.10.1}/pyscript/__main__.py
RENAMED
|
@@ -1,17 +1,49 @@
|
|
|
1
1
|
from .core.buffer import PysFileBuffer
|
|
2
|
-
from .core.cache import path, undefined
|
|
3
|
-
from .core.constants import DEFAULT, DEBUG, NO_COLOR
|
|
4
|
-
from .core.highlight import
|
|
2
|
+
from .core.cache import path, undefined, hook
|
|
3
|
+
from .core.constants import DEFAULT, DEBUG, DONT_SHOW_BANNER_ON_SHELL, NO_COLOR
|
|
4
|
+
from .core.highlight import (
|
|
5
|
+
HLFMT_HTML, HLFMT_ANSI, HLFMT_BBCODE, pys_highlight, PygmentsPyScriptStyle, PygmentsPyScriptLexer
|
|
6
|
+
)
|
|
5
7
|
from .core.runner import _normalize_globals, pys_runner, pys_shell
|
|
6
8
|
from .core.utils.module import get_module_name_from_path
|
|
7
9
|
from .core.utils.path import normpath
|
|
8
10
|
from .core.version import __version__
|
|
9
11
|
|
|
12
|
+
try:
|
|
13
|
+
from pygments import highlight
|
|
14
|
+
from pygments.formatters import TerminalFormatter, TerminalTrueColorFormatter, Terminal256Formatter
|
|
15
|
+
|
|
16
|
+
FORMAT_PYGMENTS_MAP = {
|
|
17
|
+
'pm-terminal': TerminalFormatter,
|
|
18
|
+
'pm-true-terminal': TerminalTrueColorFormatter,
|
|
19
|
+
'pm-256-terminal': Terminal256Formatter
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
PYGMENTS = True
|
|
23
|
+
except ImportError:
|
|
24
|
+
PYGMENTS = False
|
|
25
|
+
|
|
10
26
|
from argparse import ArgumentParser
|
|
11
27
|
from os import environ
|
|
12
28
|
|
|
13
29
|
import sys
|
|
14
30
|
|
|
31
|
+
def split_argv():
|
|
32
|
+
need_value_arguments = {'-c', '--command', '-l', '--highlight', '-r', '--py-recursion'}
|
|
33
|
+
argv = sys.argv
|
|
34
|
+
i = 1
|
|
35
|
+
|
|
36
|
+
while i < len(argv):
|
|
37
|
+
argument = argv[i]
|
|
38
|
+
if argument in need_value_arguments:
|
|
39
|
+
i += 1
|
|
40
|
+
elif not argument.startswith('-'):
|
|
41
|
+
break
|
|
42
|
+
i += 1
|
|
43
|
+
|
|
44
|
+
hook.argv = argv[i:]
|
|
45
|
+
return argv[1:i + 1]
|
|
46
|
+
|
|
15
47
|
FORMAT_HIGHLIGHT_MAP = {
|
|
16
48
|
'html': HLFMT_HTML,
|
|
17
49
|
'ansi': HLFMT_ANSI,
|
|
@@ -58,7 +90,7 @@ parser.add_argument(
|
|
|
58
90
|
|
|
59
91
|
parser.add_argument(
|
|
60
92
|
'-l', '--highlight',
|
|
61
|
-
choices=tuple(FORMAT_HIGHLIGHT_MAP.keys()),
|
|
93
|
+
choices=tuple(FORMAT_HIGHLIGHT_MAP.keys()) + tuple(FORMAT_PYGMENTS_MAP.keys() if PYGMENTS else ()),
|
|
62
94
|
default=None,
|
|
63
95
|
help="Generate highlight code from a 'file'"
|
|
64
96
|
)
|
|
@@ -76,11 +108,17 @@ parser.add_argument(
|
|
|
76
108
|
help="Set a Python recursion limit"
|
|
77
109
|
)
|
|
78
110
|
|
|
111
|
+
parser.add_argument(
|
|
112
|
+
'-q',
|
|
113
|
+
action='store_true',
|
|
114
|
+
help="Don't print version and copyright messages on interactive startup"
|
|
115
|
+
)
|
|
116
|
+
|
|
79
117
|
def argument_error(argument, message):
|
|
80
118
|
parser.print_usage(sys.stderr)
|
|
81
119
|
parser.exit(2, f"{parser.prog}: error: argument {argument}: {message}\n")
|
|
82
120
|
|
|
83
|
-
args = parser.parse_args()
|
|
121
|
+
args = parser.parse_args(split_argv())
|
|
84
122
|
|
|
85
123
|
if args.highlight and args.file is None:
|
|
86
124
|
argument_error("-l/--highlight", "argument 'file' required")
|
|
@@ -98,6 +136,8 @@ if args.debug:
|
|
|
98
136
|
flags |= DEBUG
|
|
99
137
|
if args.no_color or environ.get('NO_COLOR') is not None:
|
|
100
138
|
flags |= NO_COLOR
|
|
139
|
+
if args.q:
|
|
140
|
+
flags |= DONT_SHOW_BANNER_ON_SHELL
|
|
101
141
|
|
|
102
142
|
if args.file is not None:
|
|
103
143
|
path = normpath(args.file)
|
|
@@ -122,7 +162,22 @@ if args.file is not None:
|
|
|
122
162
|
|
|
123
163
|
if args.highlight:
|
|
124
164
|
try:
|
|
125
|
-
|
|
165
|
+
if args.highlight in FORMAT_HIGHLIGHT_MAP:
|
|
166
|
+
print(
|
|
167
|
+
pys_highlight(
|
|
168
|
+
source=file,
|
|
169
|
+
format=FORMAT_HIGHLIGHT_MAP[args.highlight]
|
|
170
|
+
)
|
|
171
|
+
)
|
|
172
|
+
else:
|
|
173
|
+
print(
|
|
174
|
+
flush=True,
|
|
175
|
+
end=highlight(
|
|
176
|
+
code=file.text,
|
|
177
|
+
lexer=PygmentsPyScriptLexer(),
|
|
178
|
+
formatter=FORMAT_PYGMENTS_MAP[args.highlight](style=PygmentsPyScriptStyle)
|
|
179
|
+
)
|
|
180
|
+
)
|
|
126
181
|
except BaseException as e:
|
|
127
182
|
parser.error(f"file {path!r}: Highlight error: {e}")
|
|
128
183
|
|
|
@@ -135,9 +190,13 @@ if args.file is not None:
|
|
|
135
190
|
)
|
|
136
191
|
|
|
137
192
|
if args.inspect:
|
|
138
|
-
code = pys_shell(
|
|
193
|
+
code = pys_shell(
|
|
194
|
+
globals=result.context.symbol_table,
|
|
195
|
+
flags=result.context.flags,
|
|
196
|
+
parser_flags=result.parser_flags
|
|
197
|
+
)
|
|
139
198
|
else:
|
|
140
|
-
code = result.
|
|
199
|
+
code = result.end_process()[0]
|
|
141
200
|
|
|
142
201
|
elif args.command is not None:
|
|
143
202
|
file = PysFileBuffer(args.command)
|
|
@@ -146,9 +205,12 @@ elif args.command is not None:
|
|
|
146
205
|
mode='exec',
|
|
147
206
|
symbol_table=_normalize_globals(file, undefined),
|
|
148
207
|
flags=flags
|
|
149
|
-
).
|
|
208
|
+
).end_process()[0]
|
|
150
209
|
|
|
151
210
|
else:
|
|
152
|
-
code = pys_shell(
|
|
211
|
+
code = pys_shell(
|
|
212
|
+
globals=undefined,
|
|
213
|
+
flags=flags
|
|
214
|
+
)
|
|
153
215
|
|
|
154
216
|
sys.exit(code)
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
from .bases import Pys
|
|
2
|
-
from .checks import is_unpack_assignment
|
|
2
|
+
from .checks import is_unpack_assignment
|
|
3
3
|
from .constants import TOKENS, KEYWORDS, DEFAULT
|
|
4
4
|
from .context import PysContext
|
|
5
5
|
from .exceptions import PysTraceback
|
|
@@ -22,22 +22,9 @@ class PysAnalyzer(Pys):
|
|
|
22
22
|
|
|
23
23
|
self.node = node
|
|
24
24
|
self.flags = flags
|
|
25
|
-
self.
|
|
25
|
+
self.context_parent = context_parent
|
|
26
26
|
self.context_parent_entry_position = context_parent_entry_position
|
|
27
27
|
|
|
28
|
-
def throw(self, message, position):
|
|
29
|
-
if self.error is None:
|
|
30
|
-
self.error = PysTraceback(
|
|
31
|
-
SyntaxError(message),
|
|
32
|
-
PysContext(
|
|
33
|
-
file=self.node.position.file,
|
|
34
|
-
flags=self.flags,
|
|
35
|
-
parent=self.context,
|
|
36
|
-
parent_entry_position=self.context_parent_entry_position
|
|
37
|
-
),
|
|
38
|
-
position
|
|
39
|
-
)
|
|
40
|
-
|
|
41
28
|
@typechecked
|
|
42
29
|
def analyze(self) -> PysTraceback | None:
|
|
43
30
|
self.in_loop = 0
|
|
@@ -50,6 +37,19 @@ class PysAnalyzer(Pys):
|
|
|
50
37
|
self.visit(self.node)
|
|
51
38
|
return self.error
|
|
52
39
|
|
|
40
|
+
def throw(self, message, position):
|
|
41
|
+
if self.error is None:
|
|
42
|
+
self.error = PysTraceback(
|
|
43
|
+
SyntaxError(message),
|
|
44
|
+
PysContext(
|
|
45
|
+
file=self.node.position.file,
|
|
46
|
+
flags=self.flags,
|
|
47
|
+
parent=self.context_parent,
|
|
48
|
+
parent_entry_position=self.context_parent_entry_position
|
|
49
|
+
),
|
|
50
|
+
position
|
|
51
|
+
)
|
|
52
|
+
|
|
53
53
|
def visit(self, node):
|
|
54
54
|
func = getattr(self, 'visit_' + type(node).__name__.removeprefix('Pys'), None)
|
|
55
55
|
if not self.error and func:
|
|
@@ -106,11 +106,9 @@ class PysAnalyzer(Pys):
|
|
|
106
106
|
if isinstance(element, tuple):
|
|
107
107
|
token, value = element
|
|
108
108
|
name = token.value
|
|
109
|
-
|
|
110
109
|
if name in keyword_names:
|
|
111
110
|
self.throw(f"duplicate argument {name!r} in call definition", token.position)
|
|
112
111
|
return
|
|
113
|
-
|
|
114
112
|
keyword_names.add(name)
|
|
115
113
|
|
|
116
114
|
else:
|
|
@@ -136,6 +134,8 @@ class PysAnalyzer(Pys):
|
|
|
136
134
|
if self.error:
|
|
137
135
|
return
|
|
138
136
|
|
|
137
|
+
self.visit(node.invalid)
|
|
138
|
+
|
|
139
139
|
elif node.style == 'pythonic':
|
|
140
140
|
self.visit(node.valid)
|
|
141
141
|
if self.error:
|
|
@@ -145,10 +145,7 @@ class PysAnalyzer(Pys):
|
|
|
145
145
|
if self.error:
|
|
146
146
|
return
|
|
147
147
|
|
|
148
|
-
|
|
149
|
-
raise ValueError(f"unknown ternary operator style {node.style!r}")
|
|
150
|
-
|
|
151
|
-
self.visit(node.invalid)
|
|
148
|
+
self.visit(node.invalid)
|
|
152
149
|
|
|
153
150
|
def visit_BinaryOperatorNode(self, node):
|
|
154
151
|
self.visit(node.left)
|
|
@@ -158,25 +155,11 @@ class PysAnalyzer(Pys):
|
|
|
158
155
|
self.visit(node.right)
|
|
159
156
|
|
|
160
157
|
def visit_UnaryOperatorNode(self, node):
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
if is_incremental(node.operand.type):
|
|
164
|
-
type = value.__class__
|
|
165
|
-
operator = 'increase' if node.operand.type == TOKENS['DOUBLE-PLUS'] else 'decrease'
|
|
166
|
-
|
|
167
|
-
if type is PysKeywordNode:
|
|
168
|
-
self.throw(f"cannot {operator} {value.name.value}", value.position)
|
|
169
|
-
return
|
|
170
|
-
|
|
171
|
-
elif isinstance(value, PysNode):
|
|
172
|
-
if type not in (PysIdentifierNode, PysAttributeNode, PysSubscriptNode):
|
|
173
|
-
self.throw(f"cannot {operator} literal", value.position)
|
|
174
|
-
return
|
|
175
|
-
|
|
176
|
-
else:
|
|
177
|
-
raise TypeError("UnaryOperator: node.value is not PysNode")
|
|
158
|
+
self.visit(node.value)
|
|
178
159
|
|
|
179
|
-
|
|
160
|
+
def visit_IncrementalNode(self, node):
|
|
161
|
+
operator = 'increase' if node.operand.type == TOKENS['DOUBLE-PLUS'] else 'decrease'
|
|
162
|
+
self.visit_declaration_AssignNode(node.target, f"cannot {operator} literal", operator)
|
|
180
163
|
|
|
181
164
|
def visit_StatementsNode(self, node):
|
|
182
165
|
for element in node.body:
|
|
@@ -185,11 +168,8 @@ class PysAnalyzer(Pys):
|
|
|
185
168
|
return
|
|
186
169
|
|
|
187
170
|
def visit_AssignNode(self, node):
|
|
188
|
-
self.visit_declaration_AssignNode(
|
|
189
|
-
|
|
190
|
-
"cannot assign to expression here. Maybe you meant '==' instead of '='?"
|
|
191
|
-
)
|
|
192
|
-
|
|
171
|
+
self.visit_declaration_AssignNode(node.target,
|
|
172
|
+
"cannot assign to expression here. Maybe you meant '==' instead of '='?")
|
|
193
173
|
if self.error:
|
|
194
174
|
return
|
|
195
175
|
|
|
@@ -248,8 +228,6 @@ class PysAnalyzer(Pys):
|
|
|
248
228
|
|
|
249
229
|
if node.default:
|
|
250
230
|
self.visit(node.default)
|
|
251
|
-
if self.error:
|
|
252
|
-
return
|
|
253
231
|
|
|
254
232
|
def visit_TryNode(self, node):
|
|
255
233
|
self.visit(node.body)
|
|
@@ -295,9 +273,6 @@ class PysAnalyzer(Pys):
|
|
|
295
273
|
if self.error:
|
|
296
274
|
return
|
|
297
275
|
|
|
298
|
-
else:
|
|
299
|
-
raise ValueError(f"unknown header struct {node.header}")
|
|
300
|
-
|
|
301
276
|
self.in_loop += 1
|
|
302
277
|
|
|
303
278
|
self.visit(node.body)
|
|
@@ -341,6 +316,22 @@ class PysAnalyzer(Pys):
|
|
|
341
316
|
if node.else_body:
|
|
342
317
|
self.visit(node.else_body)
|
|
343
318
|
|
|
319
|
+
def visit_RepeatNode(self, node):
|
|
320
|
+
self.in_loop += 1
|
|
321
|
+
|
|
322
|
+
self.visit(node.body)
|
|
323
|
+
if self.error:
|
|
324
|
+
return
|
|
325
|
+
|
|
326
|
+
self.in_loop -= 1
|
|
327
|
+
|
|
328
|
+
self.visit(node.condition)
|
|
329
|
+
if self.error:
|
|
330
|
+
return
|
|
331
|
+
|
|
332
|
+
if node.else_body:
|
|
333
|
+
self.visit(node.else_body)
|
|
334
|
+
|
|
344
335
|
def visit_ClassNode(self, node):
|
|
345
336
|
for decorator in node.decorators:
|
|
346
337
|
self.visit(decorator)
|
|
@@ -471,13 +462,9 @@ class PysAnalyzer(Pys):
|
|
|
471
462
|
self.throw(f"cannot {KEYWORDS['delete']} {target.name.value}", target.position)
|
|
472
463
|
return
|
|
473
464
|
|
|
474
|
-
elif
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
return
|
|
478
|
-
|
|
479
|
-
else:
|
|
480
|
-
raise TypeError("DeleteNode: node.targets, target is not PysNode")
|
|
465
|
+
elif type is not PysIdentifierNode:
|
|
466
|
+
self.throw(f"cannot {KEYWORDS['delete']} literal", target.position)
|
|
467
|
+
return
|
|
481
468
|
|
|
482
469
|
def visit_ContinueNode(self, node):
|
|
483
470
|
if self.in_loop == 0:
|
|
@@ -515,7 +502,7 @@ class PysAnalyzer(Pys):
|
|
|
515
502
|
else:
|
|
516
503
|
self.visit(nslice)
|
|
517
504
|
|
|
518
|
-
def visit_declaration_AssignNode(self, node, message):
|
|
505
|
+
def visit_declaration_AssignNode(self, node, message, operator_name='assign'):
|
|
519
506
|
type = node.__class__
|
|
520
507
|
|
|
521
508
|
if type is PysAttributeNode:
|
|
@@ -530,16 +517,12 @@ class PysAnalyzer(Pys):
|
|
|
530
517
|
|
|
531
518
|
elif is_unpack_assignment(type):
|
|
532
519
|
for element in node.elements:
|
|
533
|
-
self.visit_declaration_AssignNode(element, message)
|
|
520
|
+
self.visit_declaration_AssignNode(element, message, operator_name)
|
|
534
521
|
if self.error:
|
|
535
522
|
return
|
|
536
523
|
|
|
537
524
|
elif type is PysKeywordNode:
|
|
538
|
-
self.throw(f"cannot
|
|
539
|
-
|
|
540
|
-
elif isinstance(node, PysNode):
|
|
541
|
-
if type is not PysIdentifierNode:
|
|
542
|
-
self.throw(message, node.position)
|
|
525
|
+
self.throw(f"cannot {operator_name} to {node.name.value}", node.position)
|
|
543
526
|
|
|
544
|
-
|
|
545
|
-
|
|
527
|
+
elif type is not PysIdentifierNode:
|
|
528
|
+
self.throw(message, node.position)
|
{pyscript_programming_language-1.9.0 → pyscript_programming_language-1.10.1}/pyscript/core/buffer.py
RENAMED
|
@@ -4,7 +4,8 @@ from .utils.generic import setimuattr
|
|
|
4
4
|
from .utils.string import normstr
|
|
5
5
|
|
|
6
6
|
from io import IOBase
|
|
7
|
-
from
|
|
7
|
+
from types import BuiltinMethodType
|
|
8
|
+
from typing import Iterable, Optional
|
|
8
9
|
|
|
9
10
|
@immutable
|
|
10
11
|
class PysBuffer(Pys):
|
|
@@ -14,15 +15,14 @@ class PysFileBuffer(PysBuffer):
|
|
|
14
15
|
|
|
15
16
|
__slots__ = ('text', 'name')
|
|
16
17
|
|
|
17
|
-
def
|
|
18
|
-
|
|
19
|
-
text: str | bytes | bytearray | Iterable |
|
|
18
|
+
def __new__(
|
|
19
|
+
cls,
|
|
20
|
+
text: str | bytes | bytearray | Iterable | BuiltinMethodType | IOBase | 'PysFileBuffer',
|
|
20
21
|
name: Optional[str | bytes] = None
|
|
21
|
-
) ->
|
|
22
|
+
) -> 'PysFileBuffer':
|
|
22
23
|
|
|
23
24
|
if isinstance(text, PysFileBuffer):
|
|
24
|
-
|
|
25
|
-
text = normstr(text.text)
|
|
25
|
+
return text
|
|
26
26
|
|
|
27
27
|
elif isinstance(text, IOBase):
|
|
28
28
|
name = normstr(getattr(text, 'name', '<io>') if name is None else name)
|
|
@@ -32,8 +32,12 @@ class PysFileBuffer(PysBuffer):
|
|
|
32
32
|
name = '<string>' if name is None else normstr(name)
|
|
33
33
|
text = normstr(text)
|
|
34
34
|
|
|
35
|
-
|
|
36
|
-
|
|
35
|
+
instance = super().__new__(cls)
|
|
36
|
+
|
|
37
|
+
setimuattr(instance, 'text', text)
|
|
38
|
+
setimuattr(instance, 'name', name)
|
|
39
|
+
|
|
40
|
+
return instance
|
|
37
41
|
|
|
38
42
|
def __repr__(self) -> str:
|
|
39
43
|
return f'<FileBuffer from {self.name!r}>'
|
{pyscript_programming_language-1.9.0 → pyscript_programming_language-1.10.1}/pyscript/core/cache.py
RENAMED
|
@@ -4,14 +4,12 @@ from .exceptions import PysTraceback
|
|
|
4
4
|
from .utils.debug import print_display, print_traceback
|
|
5
5
|
from .utils.decorators import inheritable, singleton
|
|
6
6
|
|
|
7
|
-
from threading import RLock
|
|
8
7
|
from typing import Any, Callable, Literal
|
|
9
8
|
|
|
10
9
|
loading_modules = set()
|
|
11
|
-
|
|
12
|
-
modules = dict()
|
|
10
|
+
modules = {}
|
|
13
11
|
path = [SITE_PACKAGES_PATH, LIBRARIES_PATH]
|
|
14
|
-
singletons =
|
|
12
|
+
singletons = {}
|
|
15
13
|
|
|
16
14
|
@singleton
|
|
17
15
|
@inheritable
|
|
@@ -39,6 +37,7 @@ class PysHook(Pys):
|
|
|
39
37
|
def __new_singleton__(cls) -> 'PysHook':
|
|
40
38
|
global hook
|
|
41
39
|
hook = super(cls, cls).__new__(cls)
|
|
40
|
+
hook.argv = []
|
|
42
41
|
hook.running_shell = False
|
|
43
42
|
hook.running_breakpoint = False
|
|
44
43
|
hook.display = print_display
|
|
@@ -50,6 +49,16 @@ class PysHook(Pys):
|
|
|
50
49
|
def __repr__(self) -> str:
|
|
51
50
|
return f'<hook object at {id(self):016X}>'
|
|
52
51
|
|
|
52
|
+
@property
|
|
53
|
+
def argv(self) -> list[str]:
|
|
54
|
+
return singletons['hook.argv']
|
|
55
|
+
|
|
56
|
+
@argv.setter
|
|
57
|
+
def argv(self, value: list[str]) -> None:
|
|
58
|
+
if not isinstance(value, list) or not all(isinstance(arg, str) for arg in value):
|
|
59
|
+
raise TypeError("hook.argv: argv must be list of strings")
|
|
60
|
+
singletons['hook.argv'] = value
|
|
61
|
+
|
|
53
62
|
@property
|
|
54
63
|
def running_shell(self) -> bool:
|
|
55
64
|
return singletons['hook.running_shell']
|