pyscript-programming-language 1.12.4__tar.gz → 1.12.6__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.12.4/pyscript_programming_language.egg-info → pyscript_programming_language-1.12.6}/PKG-INFO +1 -1
- pyscript_programming_language-1.12.6/changelog.md +7 -0
- {pyscript_programming_language-1.12.4 → pyscript_programming_language-1.12.6}/pyproject.toml +1 -1
- {pyscript_programming_language-1.12.4 → pyscript_programming_language-1.12.6}/pyscript/__init__.pyi +2 -2
- {pyscript_programming_language-1.12.4 → pyscript_programming_language-1.12.6}/pyscript/__main__.py +36 -13
- {pyscript_programming_language-1.12.4 → pyscript_programming_language-1.12.6}/pyscript/core/analyzer.py +53 -47
- {pyscript_programming_language-1.12.4 → pyscript_programming_language-1.12.6}/pyscript/core/buffer.py +2 -2
- {pyscript_programming_language-1.12.4 → pyscript_programming_language-1.12.6}/pyscript/core/cache.py +1 -1
- {pyscript_programming_language-1.12.4 → pyscript_programming_language-1.12.6}/pyscript/core/checks.py +1 -1
- {pyscript_programming_language-1.12.4 → pyscript_programming_language-1.12.6}/pyscript/core/constants.py +43 -43
- {pyscript_programming_language-1.12.4 → pyscript_programming_language-1.12.6}/pyscript/core/handlers.py +5 -3
- {pyscript_programming_language-1.12.4 → pyscript_programming_language-1.12.6}/pyscript/core/highlight.py +2 -2
- {pyscript_programming_language-1.12.4 → pyscript_programming_language-1.12.6}/pyscript/core/interpreter.py +60 -49
- {pyscript_programming_language-1.12.4 → pyscript_programming_language-1.12.6}/pyscript/core/lexer.py +72 -72
- pyscript_programming_language-1.12.6/pyscript/core/mapping.py +144 -0
- {pyscript_programming_language-1.12.4 → pyscript_programming_language-1.12.6}/pyscript/core/objects.py +20 -8
- {pyscript_programming_language-1.12.4 → pyscript_programming_language-1.12.6}/pyscript/core/parser.py +125 -119
- {pyscript_programming_language-1.12.4 → pyscript_programming_language-1.12.6}/pyscript/core/position.py +1 -1
- {pyscript_programming_language-1.12.4 → pyscript_programming_language-1.12.6}/pyscript/core/pysbuiltins.py +12 -8
- {pyscript_programming_language-1.12.4 → pyscript_programming_language-1.12.6}/pyscript/core/results.py +27 -24
- {pyscript_programming_language-1.12.4 → pyscript_programming_language-1.12.6}/pyscript/core/runner.py +8 -4
- {pyscript_programming_language-1.12.4 → pyscript_programming_language-1.12.6}/pyscript/core/shell.py +34 -14
- {pyscript_programming_language-1.12.4 → pyscript_programming_language-1.12.6}/pyscript/core/symtab.py +5 -1
- {pyscript_programming_language-1.12.4 → pyscript_programming_language-1.12.6}/pyscript/core/utils/ansi.py +6 -5
- {pyscript_programming_language-1.12.4 → pyscript_programming_language-1.12.6}/pyscript/core/utils/debug.py +16 -12
- {pyscript_programming_language-1.12.4 → pyscript_programming_language-1.12.6}/pyscript/core/utils/decorators.py +2 -1
- {pyscript_programming_language-1.12.4 → pyscript_programming_language-1.12.6}/pyscript/core/utils/generic.py +6 -5
- {pyscript_programming_language-1.12.4 → pyscript_programming_language-1.12.6}/pyscript/core/utils/module.py +3 -3
- {pyscript_programming_language-1.12.4 → pyscript_programming_language-1.12.6}/pyscript/core/utils/path.py +6 -6
- {pyscript_programming_language-1.12.4 → pyscript_programming_language-1.12.6}/pyscript/core/utils/similarity.py +3 -2
- {pyscript_programming_language-1.12.4 → pyscript_programming_language-1.12.6}/pyscript/core/utils/string.py +4 -3
- {pyscript_programming_language-1.12.4 → pyscript_programming_language-1.12.6}/pyscript/core/version.py +2 -2
- {pyscript_programming_language-1.12.4 → pyscript_programming_language-1.12.6}/pyscript/lib/ast/ast_dump.py +58 -54
- {pyscript_programming_language-1.12.4 → pyscript_programming_language-1.12.6}/pyscript/lib/ast/ast_literal_eval.py +23 -17
- {pyscript_programming_language-1.12.4 → pyscript_programming_language-1.12.6}/pyscript/lib/ast/ast_unparse.py +44 -42
- {pyscript_programming_language-1.12.4 → pyscript_programming_language-1.12.6}/pyscript/lib/ast/ast_walk.py +7 -2
- {pyscript_programming_language-1.12.4 → pyscript_programming_language-1.12.6}/pyscript/lib/brainfuck.pys +8 -12
- {pyscript_programming_language-1.12.4 → pyscript_programming_language-1.12.6}/pyscript/lib/explorer.pys +2 -2
- {pyscript_programming_language-1.12.4 → pyscript_programming_language-1.12.6}/pyscript/lib/fpstimer/py_fpstimer.py +5 -5
- pyscript_programming_language-1.12.6/pyscript/lib/getch/py_getch.py +18 -0
- {pyscript_programming_language-1.12.4 → pyscript_programming_language-1.12.6}/pyscript/lib/parser.pys +4 -4
- {pyscript_programming_language-1.12.4 → pyscript_programming_language-1.12.6}/pyscript/lib/token.pys +2 -2
- {pyscript_programming_language-1.12.4 → pyscript_programming_language-1.12.6}/pyscript/lib/tokenize/tok_untokenize.py +17 -14
- {pyscript_programming_language-1.12.4 → pyscript_programming_language-1.12.6/pyscript_programming_language.egg-info}/PKG-INFO +1 -1
- {pyscript_programming_language-1.12.4 → pyscript_programming_language-1.12.6}/setup.py +1 -1
- pyscript_programming_language-1.12.4/changelog.md +0 -13
- pyscript_programming_language-1.12.4/pyscript/core/mapping.py +0 -144
- pyscript_programming_language-1.12.4/pyscript/lib/getch/py_getch.py +0 -18
- {pyscript_programming_language-1.12.4 → pyscript_programming_language-1.12.6}/MANIFEST.in +0 -0
- {pyscript_programming_language-1.12.4 → pyscript_programming_language-1.12.6}/README.md +0 -0
- {pyscript_programming_language-1.12.4 → pyscript_programming_language-1.12.6}/pyscript/__init__.py +0 -0
- {pyscript_programming_language-1.12.4 → pyscript_programming_language-1.12.6}/pyscript/core/__init__.py +0 -0
- {pyscript_programming_language-1.12.4 → pyscript_programming_language-1.12.6}/pyscript/core/bases.py +0 -0
- {pyscript_programming_language-1.12.4 → pyscript_programming_language-1.12.6}/pyscript/core/context.py +0 -0
- {pyscript_programming_language-1.12.4 → pyscript_programming_language-1.12.6}/pyscript/core/editor/__init__.py +0 -0
- {pyscript_programming_language-1.12.4 → pyscript_programming_language-1.12.6}/pyscript/core/editor/bases.py +0 -0
- {pyscript_programming_language-1.12.4 → pyscript_programming_language-1.12.6}/pyscript/core/editor/gui.py +0 -0
- {pyscript_programming_language-1.12.4 → pyscript_programming_language-1.12.6}/pyscript/core/editor/terminal.py +0 -0
- {pyscript_programming_language-1.12.4 → pyscript_programming_language-1.12.6}/pyscript/core/exceptions.py +0 -0
- {pyscript_programming_language-1.12.4 → pyscript_programming_language-1.12.6}/pyscript/core/nodes.py +0 -0
- {pyscript_programming_language-1.12.4 → pyscript_programming_language-1.12.6}/pyscript/core/token.py +0 -0
- {pyscript_programming_language-1.12.4 → pyscript_programming_language-1.12.6}/pyscript/core/utils/__init__.py +0 -0
- {pyscript_programming_language-1.12.4 → pyscript_programming_language-1.12.6}/pyscript/core/utils/jsdict.py +0 -0
- {pyscript_programming_language-1.12.4 → pyscript_programming_language-1.12.6}/pyscript/lib/__hello__.pys +0 -0
- {pyscript_programming_language-1.12.4 → pyscript_programming_language-1.12.6}/pyscript/lib/ansi.pys +0 -0
- {pyscript_programming_language-1.12.4 → pyscript_programming_language-1.12.6}/pyscript/lib/ast/__init__.pys +0 -0
- {pyscript_programming_language-1.12.4 → pyscript_programming_language-1.12.6}/pyscript/lib/dis.pys +0 -0
- {pyscript_programming_language-1.12.4 → pyscript_programming_language-1.12.6}/pyscript/lib/fpstimer/__init__.pys +0 -0
- {pyscript_programming_language-1.12.4 → pyscript_programming_language-1.12.6}/pyscript/lib/getch/__init__.pys +0 -0
- {pyscript_programming_language-1.12.4 → pyscript_programming_language-1.12.6}/pyscript/lib/inspect.pys +0 -0
- {pyscript_programming_language-1.12.4 → pyscript_programming_language-1.12.6}/pyscript/lib/jsdict.pys +0 -0
- {pyscript_programming_language-1.12.4 → pyscript_programming_language-1.12.6}/pyscript/lib/keyword.pys +0 -0
- {pyscript_programming_language-1.12.4 → pyscript_programming_language-1.12.6}/pyscript/lib/opcode.pys +0 -0
- {pyscript_programming_language-1.12.4 → pyscript_programming_language-1.12.6}/pyscript/lib/pdisplay.pys +0 -0
- {pyscript_programming_language-1.12.4 → pyscript_programming_language-1.12.6}/pyscript/lib/site.pys +0 -0
- {pyscript_programming_language-1.12.4 → pyscript_programming_language-1.12.6}/pyscript/lib/symtable.pys +0 -0
- {pyscript_programming_language-1.12.4 → pyscript_programming_language-1.12.6}/pyscript/lib/tokenize/__init__.pys +0 -0
- {pyscript_programming_language-1.12.4 → pyscript_programming_language-1.12.6}/pyscript/other/.nomedia +0 -0
- {pyscript_programming_language-1.12.4 → pyscript_programming_language-1.12.6}/pyscript/other/PyScript.ico +0 -0
- {pyscript_programming_language-1.12.4 → pyscript_programming_language-1.12.6}/pyscript/other/copyright +0 -0
- {pyscript_programming_language-1.12.4 → pyscript_programming_language-1.12.6}/pyscript/other/credits +0 -0
- {pyscript_programming_language-1.12.4 → pyscript_programming_language-1.12.6}/pyscript/other/license +0 -0
- {pyscript_programming_language-1.12.4 → pyscript_programming_language-1.12.6}/pyscript/site-packages/this.pys +0 -0
- {pyscript_programming_language-1.12.4 → pyscript_programming_language-1.12.6}/pyscript/this.py +0 -0
- {pyscript_programming_language-1.12.4 → pyscript_programming_language-1.12.6}/pyscript_programming_language.egg-info/SOURCES.txt +0 -0
- {pyscript_programming_language-1.12.4 → pyscript_programming_language-1.12.6}/pyscript_programming_language.egg-info/dependency_links.txt +0 -0
- {pyscript_programming_language-1.12.4 → pyscript_programming_language-1.12.6}/pyscript_programming_language.egg-info/requires.txt +0 -0
- {pyscript_programming_language-1.12.4 → pyscript_programming_language-1.12.6}/pyscript_programming_language.egg-info/top_level.txt +0 -0
- {pyscript_programming_language-1.12.4 → pyscript_programming_language-1.12.6}/setup.cfg +0 -0
{pyscript_programming_language-1.12.4 → pyscript_programming_language-1.12.6}/pyproject.toml
RENAMED
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "pyscript-programming-language"
|
|
7
|
-
version = "1.12.
|
|
7
|
+
version = "1.12.6"
|
|
8
8
|
description = "PyScript Programming Language"
|
|
9
9
|
readme = { file = "README.md", content-type = "text/markdown" }
|
|
10
10
|
requires-python = ">=3.10"
|
{pyscript_programming_language-1.12.4 → pyscript_programming_language-1.12.6}/pyscript/__main__.py
RENAMED
|
@@ -166,17 +166,15 @@ def argument_error(argument, message):
|
|
|
166
166
|
argv = sys.argv[1:]
|
|
167
167
|
|
|
168
168
|
file_idx = sum(1 for arg in argv if arg.startswith('-'))
|
|
169
|
-
end_idx
|
|
170
|
-
end_com
|
|
171
|
-
arg_com
|
|
172
|
-
com_idx
|
|
173
|
-
|
|
169
|
+
end_idx = argv.index('--', 0, file_idx) if '--' in argv[:file_idx] else -1
|
|
170
|
+
end_com = file_idx if end_idx == -1 else end_idx
|
|
171
|
+
arg_com = argv[:end_com]
|
|
172
|
+
com_idx = argv.index('-c', 0, end_com) if '-c' in arg_com else \
|
|
173
|
+
(argv.index('--command', 0, end_com) if '--command' in arg_com else -1)
|
|
174
174
|
|
|
175
175
|
args = parser.parse_args(argv if com_idx == -1 else argv[:com_idx + 2])
|
|
176
176
|
arg = args.arg if com_idx == -1 else argv[com_idx + 2:]
|
|
177
177
|
|
|
178
|
-
del argv, file_idx, end_idx, end_com, arg_com, com_idx
|
|
179
|
-
|
|
180
178
|
if args.terminal:
|
|
181
179
|
|
|
182
180
|
for fd in (sys.stdout, sys.stderr, sys.stdin):
|
|
@@ -213,11 +211,11 @@ code = 0
|
|
|
213
211
|
flags = DEFAULT
|
|
214
212
|
|
|
215
213
|
for condition, flag in [
|
|
216
|
-
(args.notebook
|
|
217
|
-
(args.debug, DEBUG),
|
|
214
|
+
(args.notebook or USE_NOTEBOOK, NOTEBOOK),
|
|
218
215
|
(args.classic_line_shell or is_environ(ENV_PYSCRIPT_CLASSIC_LINE_SHELL), CLASSIC_LINE_SHELL),
|
|
219
216
|
(args.no_color or is_environ('NO_COLOR'), NO_COLOR),
|
|
220
217
|
(args.no_color_prompt or is_environ(ENV_PYSCRIPT_NO_COLOR_PROMPT), NO_COLOR_PROMPT),
|
|
218
|
+
(args.debug, DEBUG),
|
|
221
219
|
(args.q, DONT_SHOW_BANNER_ON_SHELL)
|
|
222
220
|
]:
|
|
223
221
|
if condition:
|
|
@@ -229,6 +227,27 @@ if args.P:
|
|
|
229
227
|
|
|
230
228
|
pys_sys.argv = argv = ['', *arg]
|
|
231
229
|
|
|
230
|
+
# clean up
|
|
231
|
+
try:
|
|
232
|
+
if PYGMENTS:
|
|
233
|
+
del (
|
|
234
|
+
BBCodeFormatter, HtmlFormatter, LatexFormatter, TerminalFormatter, TerminalTrueColorFormatter,
|
|
235
|
+
Terminal256Formatter
|
|
236
|
+
)
|
|
237
|
+
|
|
238
|
+
del (
|
|
239
|
+
ENV_PYSCRIPT_NO_COLOR_PROMPT, ENV_PYSCRIPT_CLASSIC_LINE_SHELL, DEFAULT, DEBUG, NO_COLOR, CLASSIC_LINE_SHELL,
|
|
240
|
+
NO_COLOR_PROMPT, NOTEBOOK, GUI_SUPPORT, TERMINAL_SUPPORT, PYGMENTS, HLFMT_ANSI, HLFMT_HTML, HLFMT_BBCODE,
|
|
241
|
+
USE_NOTEBOOK, OPTIONAL, REMAINDER, file_idx, end_idx, end_com, arg_com, com_idx, arg, pys_sys, __version__,
|
|
242
|
+
is_environ, remove_python_path, getcwd, get_name_from_path, PysGUIEditor, PysTerminalEditor, ArgumentParser
|
|
243
|
+
)
|
|
244
|
+
|
|
245
|
+
del (
|
|
246
|
+
supported, name, class_editor, condition, flag, fd, kernel32, i
|
|
247
|
+
)
|
|
248
|
+
except:
|
|
249
|
+
pass
|
|
250
|
+
|
|
232
251
|
if args.file is not None:
|
|
233
252
|
argv[0] = args.file
|
|
234
253
|
path = normpath(args.file)
|
|
@@ -290,8 +309,10 @@ if args.file is not None:
|
|
|
290
309
|
|
|
291
310
|
code, _ = result.end_process()
|
|
292
311
|
|
|
293
|
-
if args.inspect
|
|
294
|
-
if sys.
|
|
312
|
+
if args.inspect:
|
|
313
|
+
if sys.stdout.closed or sys.stderr.closed:
|
|
314
|
+
code = 1
|
|
315
|
+
elif sys.stdin.closed:
|
|
295
316
|
print("Can't run interactive shell: sys.stdin closed", file=sys.stderr)
|
|
296
317
|
code = 1
|
|
297
318
|
else:
|
|
@@ -314,8 +335,10 @@ elif args.command is not None:
|
|
|
314
335
|
|
|
315
336
|
code, _ = result.end_process()
|
|
316
337
|
|
|
317
|
-
if args.inspect
|
|
318
|
-
if sys.
|
|
338
|
+
if args.inspect:
|
|
339
|
+
if sys.stdout.closed or sys.stderr.closed:
|
|
340
|
+
code = 1
|
|
341
|
+
elif sys.stdin.closed:
|
|
319
342
|
print("Can't run interactive shell: sys.stdin closed", file=sys.stderr)
|
|
320
343
|
code = 1
|
|
321
344
|
else:
|
|
@@ -3,7 +3,7 @@ from .checks import is_list
|
|
|
3
3
|
from .constants import TOKENS, DEFAULT
|
|
4
4
|
from .context import PysContext
|
|
5
5
|
from .exceptions import PysTraceback
|
|
6
|
-
from .nodes import
|
|
6
|
+
from .nodes import *
|
|
7
7
|
from .position import PysPosition
|
|
8
8
|
from .utils.decorators import typechecked
|
|
9
9
|
|
|
@@ -37,7 +37,7 @@ class PysAnalyzer(Pys):
|
|
|
37
37
|
self.visit(self.node)
|
|
38
38
|
return self.error
|
|
39
39
|
|
|
40
|
-
def throw(self, message, position):
|
|
40
|
+
def throw(self, message: str, position: PysPosition) -> None:
|
|
41
41
|
if self.error is None:
|
|
42
42
|
self.error = PysTraceback(
|
|
43
43
|
SyntaxError(message),
|
|
@@ -50,12 +50,12 @@ class PysAnalyzer(Pys):
|
|
|
50
50
|
position
|
|
51
51
|
)
|
|
52
52
|
|
|
53
|
-
def visit(self, node):
|
|
53
|
+
def visit(self, node: PysNode) -> None:
|
|
54
54
|
func = getattr(self, 'visit_' + type(node).__name__.removeprefix('Pys'), None)
|
|
55
55
|
if not self.error and func:
|
|
56
56
|
func(node)
|
|
57
57
|
|
|
58
|
-
def visit_DictionaryNode(self, node):
|
|
58
|
+
def visit_DictionaryNode(self, node: PysDictionaryNode) -> None:
|
|
59
59
|
for key, value in node.pairs:
|
|
60
60
|
|
|
61
61
|
self.visit(key)
|
|
@@ -66,35 +66,35 @@ class PysAnalyzer(Pys):
|
|
|
66
66
|
if self.error:
|
|
67
67
|
return
|
|
68
68
|
|
|
69
|
-
def visit_SetNode(self, node):
|
|
69
|
+
def visit_SetNode(self, node: PysSetNode) -> None:
|
|
70
70
|
for element in node.elements:
|
|
71
71
|
self.visit(element)
|
|
72
72
|
if self.error:
|
|
73
73
|
return
|
|
74
74
|
|
|
75
|
-
def visit_ListNode(self, node):
|
|
75
|
+
def visit_ListNode(self, node: PysListNode) -> None:
|
|
76
76
|
for element in node.elements:
|
|
77
77
|
self.visit(element)
|
|
78
78
|
if self.error:
|
|
79
79
|
return
|
|
80
80
|
|
|
81
|
-
def visit_TupleNode(self, node):
|
|
81
|
+
def visit_TupleNode(self, node: PysTupleNode) -> None:
|
|
82
82
|
for element in node.elements:
|
|
83
83
|
self.visit(element)
|
|
84
84
|
if self.error:
|
|
85
85
|
return
|
|
86
86
|
|
|
87
|
-
def visit_AttributeNode(self, node):
|
|
87
|
+
def visit_AttributeNode(self, node: PysAttributeNode) -> None:
|
|
88
88
|
self.visit(node.target)
|
|
89
89
|
|
|
90
|
-
def visit_SubscriptNode(self, node):
|
|
90
|
+
def visit_SubscriptNode(self, node: PysSubscriptNode) -> None:
|
|
91
91
|
self.visit(node.target)
|
|
92
92
|
if self.error:
|
|
93
93
|
return
|
|
94
94
|
|
|
95
95
|
self.visit_slice_SubscriptNode(node.slice)
|
|
96
96
|
|
|
97
|
-
def visit_CallNode(self, node):
|
|
97
|
+
def visit_CallNode(self, node: PysCallNode) -> None:
|
|
98
98
|
self.visit(node.target)
|
|
99
99
|
if self.error:
|
|
100
100
|
return
|
|
@@ -118,13 +118,13 @@ class PysAnalyzer(Pys):
|
|
|
118
118
|
if self.error:
|
|
119
119
|
return
|
|
120
120
|
|
|
121
|
-
def visit_ChainOperatorNode(self, node):
|
|
121
|
+
def visit_ChainOperatorNode(self, node: PysChainOperatorNode) -> None:
|
|
122
122
|
for expression in node.expressions:
|
|
123
123
|
self.visit(expression)
|
|
124
124
|
if self.error:
|
|
125
125
|
return
|
|
126
126
|
|
|
127
|
-
def visit_TernaryOperatorNode(self, node):
|
|
127
|
+
def visit_TernaryOperatorNode(self, node: PysTernaryOperatorNode) -> None:
|
|
128
128
|
if node.style == 'general':
|
|
129
129
|
self.visit(node.condition)
|
|
130
130
|
if self.error:
|
|
@@ -147,27 +147,27 @@ class PysAnalyzer(Pys):
|
|
|
147
147
|
|
|
148
148
|
self.visit(node.invalid)
|
|
149
149
|
|
|
150
|
-
def visit_BinaryOperatorNode(self, node):
|
|
150
|
+
def visit_BinaryOperatorNode(self, node: PysBinaryOperatorNode) -> None:
|
|
151
151
|
self.visit(node.left)
|
|
152
152
|
if self.error:
|
|
153
153
|
return
|
|
154
154
|
|
|
155
155
|
self.visit(node.right)
|
|
156
156
|
|
|
157
|
-
def visit_UnaryOperatorNode(self, node):
|
|
157
|
+
def visit_UnaryOperatorNode(self, node: PysUnaryOperatorNode) -> None:
|
|
158
158
|
self.visit(node.value)
|
|
159
159
|
|
|
160
|
-
def visit_IncrementalNode(self, node):
|
|
161
|
-
operator = 'increase' if node.operand.type == TOKENS['
|
|
160
|
+
def visit_IncrementalNode(self, node: PysIncrementalNode) -> None:
|
|
161
|
+
operator = 'increase' if node.operand.type == TOKENS['DOUBLE_PLUS'] else 'decrease'
|
|
162
162
|
self.visit_declaration_AssignmentNode(node.target, f"cannot {operator} literal", operator)
|
|
163
163
|
|
|
164
|
-
def visit_StatementsNode(self, node):
|
|
164
|
+
def visit_StatementsNode(self, node: PysStatementsNode) -> None:
|
|
165
165
|
for element in node.body:
|
|
166
166
|
self.visit(element)
|
|
167
167
|
if self.error:
|
|
168
168
|
return
|
|
169
169
|
|
|
170
|
-
def visit_AssignmentNode(self, node):
|
|
170
|
+
def visit_AssignmentNode(self, node: PysAssignmentNode) -> None:
|
|
171
171
|
self.visit_declaration_AssignmentNode(
|
|
172
172
|
node.target,
|
|
173
173
|
"cannot assign to expression here. Maybe you meant '==' instead of '='?"
|
|
@@ -177,7 +177,7 @@ class PysAnalyzer(Pys):
|
|
|
177
177
|
|
|
178
178
|
self.visit(node.value)
|
|
179
179
|
|
|
180
|
-
def visit_IfNode(self, node):
|
|
180
|
+
def visit_IfNode(self, node: PysIfNode) -> None:
|
|
181
181
|
for condition, body in node.cases_body:
|
|
182
182
|
self.visit(condition)
|
|
183
183
|
if self.error:
|
|
@@ -190,7 +190,7 @@ class PysAnalyzer(Pys):
|
|
|
190
190
|
if node.else_body:
|
|
191
191
|
self.visit(node.else_body)
|
|
192
192
|
|
|
193
|
-
def visit_SwitchNode(self, node):
|
|
193
|
+
def visit_SwitchNode(self, node: PysSwitchNode) -> None:
|
|
194
194
|
self.visit(node.target)
|
|
195
195
|
if self.error:
|
|
196
196
|
return
|
|
@@ -213,7 +213,7 @@ class PysAnalyzer(Pys):
|
|
|
213
213
|
|
|
214
214
|
self.in_switch -= 1
|
|
215
215
|
|
|
216
|
-
def visit_MatchNode(self, node):
|
|
216
|
+
def visit_MatchNode(self, node: PysMatchNode) -> None:
|
|
217
217
|
if node.target:
|
|
218
218
|
self.visit(node.target)
|
|
219
219
|
if self.error:
|
|
@@ -231,7 +231,7 @@ class PysAnalyzer(Pys):
|
|
|
231
231
|
if node.default:
|
|
232
232
|
self.visit(node.default)
|
|
233
233
|
|
|
234
|
-
def visit_TryNode(self, node):
|
|
234
|
+
def visit_TryNode(self, node: PysTryNode) -> None:
|
|
235
235
|
self.visit(node.body)
|
|
236
236
|
if self.error:
|
|
237
237
|
return
|
|
@@ -249,7 +249,7 @@ class PysAnalyzer(Pys):
|
|
|
249
249
|
if node.finally_body:
|
|
250
250
|
self.visit(node.finally_body)
|
|
251
251
|
|
|
252
|
-
def visit_WithNode(self, node):
|
|
252
|
+
def visit_WithNode(self, node: PysWithNode) -> None:
|
|
253
253
|
for context, _ in node.contexts:
|
|
254
254
|
self.visit(context)
|
|
255
255
|
if self.error:
|
|
@@ -257,7 +257,7 @@ class PysAnalyzer(Pys):
|
|
|
257
257
|
|
|
258
258
|
self.visit(node.body)
|
|
259
259
|
|
|
260
|
-
def visit_ForNode(self, node):
|
|
260
|
+
def visit_ForNode(self, node: PysForNode) -> None:
|
|
261
261
|
if len(node.header) == 2:
|
|
262
262
|
declaration, iteration = node.header
|
|
263
263
|
|
|
@@ -286,7 +286,7 @@ class PysAnalyzer(Pys):
|
|
|
286
286
|
if node.else_body:
|
|
287
287
|
self.visit(node.else_body)
|
|
288
288
|
|
|
289
|
-
def visit_WhileNode(self, node):
|
|
289
|
+
def visit_WhileNode(self, node: PysWhileNode) -> None:
|
|
290
290
|
self.visit(node.condition)
|
|
291
291
|
if self.error:
|
|
292
292
|
return
|
|
@@ -302,7 +302,7 @@ class PysAnalyzer(Pys):
|
|
|
302
302
|
if node.else_body:
|
|
303
303
|
self.visit(node.else_body)
|
|
304
304
|
|
|
305
|
-
def visit_DoWhileNode(self, node):
|
|
305
|
+
def visit_DoWhileNode(self, node: PysDoWhileNode) -> None:
|
|
306
306
|
self.in_loop += 1
|
|
307
307
|
|
|
308
308
|
self.visit(node.body)
|
|
@@ -318,7 +318,7 @@ class PysAnalyzer(Pys):
|
|
|
318
318
|
if node.else_body:
|
|
319
319
|
self.visit(node.else_body)
|
|
320
320
|
|
|
321
|
-
def visit_RepeatNode(self, node):
|
|
321
|
+
def visit_RepeatNode(self, node: PysRepeatNode) -> None:
|
|
322
322
|
self.in_loop += 1
|
|
323
323
|
|
|
324
324
|
self.visit(node.body)
|
|
@@ -334,7 +334,7 @@ class PysAnalyzer(Pys):
|
|
|
334
334
|
if node.else_body:
|
|
335
335
|
self.visit(node.else_body)
|
|
336
336
|
|
|
337
|
-
def visit_ClassNode(self, node):
|
|
337
|
+
def visit_ClassNode(self, node: PysClassNode) -> None:
|
|
338
338
|
for decorator in node.decorators:
|
|
339
339
|
self.visit(decorator)
|
|
340
340
|
if self.error:
|
|
@@ -363,7 +363,7 @@ class PysAnalyzer(Pys):
|
|
|
363
363
|
self.in_function = in_function
|
|
364
364
|
self.in_switch = in_switch
|
|
365
365
|
|
|
366
|
-
def visit_FunctionNode(self, node):
|
|
366
|
+
def visit_FunctionNode(self, node: PysFunctionNode) -> None:
|
|
367
367
|
if node.constructor and self.in_class == 0:
|
|
368
368
|
self.throw("constructor function outside of class", node.name.position)
|
|
369
369
|
return
|
|
@@ -410,7 +410,7 @@ class PysAnalyzer(Pys):
|
|
|
410
410
|
self.in_class = in_class
|
|
411
411
|
self.in_switch = in_switch
|
|
412
412
|
|
|
413
|
-
def visit_GlobalNode(self, node):
|
|
413
|
+
def visit_GlobalNode(self, node: PysGlobalNode) -> None:
|
|
414
414
|
if self.in_function == 0:
|
|
415
415
|
self.throw("global outside of function", node.position)
|
|
416
416
|
|
|
@@ -419,7 +419,7 @@ class PysAnalyzer(Pys):
|
|
|
419
419
|
self.throw(f"name {identifier.value!r} is parameter and global", identifier.position)
|
|
420
420
|
return
|
|
421
421
|
|
|
422
|
-
def visit_ReturnNode(self, node):
|
|
422
|
+
def visit_ReturnNode(self, node: PysReturnNode) -> None:
|
|
423
423
|
if self.in_function == 0:
|
|
424
424
|
self.throw("return outside of function", node.position)
|
|
425
425
|
return
|
|
@@ -427,7 +427,7 @@ class PysAnalyzer(Pys):
|
|
|
427
427
|
if node.value:
|
|
428
428
|
self.visit(node.value)
|
|
429
429
|
|
|
430
|
-
def visit_ThrowNode(self, node):
|
|
430
|
+
def visit_ThrowNode(self, node: PysThrowNode) -> None:
|
|
431
431
|
self.visit(node.target)
|
|
432
432
|
if self.error:
|
|
433
433
|
return
|
|
@@ -435,7 +435,7 @@ class PysAnalyzer(Pys):
|
|
|
435
435
|
if node.primary:
|
|
436
436
|
self.visit(node.primary)
|
|
437
437
|
|
|
438
|
-
def visit_AssertNode(self, node):
|
|
438
|
+
def visit_AssertNode(self, node: PysAssertNode) -> None:
|
|
439
439
|
self.visit(node.condition)
|
|
440
440
|
if self.error:
|
|
441
441
|
return
|
|
@@ -443,7 +443,7 @@ class PysAnalyzer(Pys):
|
|
|
443
443
|
if node.message:
|
|
444
444
|
self.visit(node.message)
|
|
445
445
|
|
|
446
|
-
def visit_DeleteNode(self, node):
|
|
446
|
+
def visit_DeleteNode(self, node: PysDeleteNode) -> None:
|
|
447
447
|
for target in node.targets:
|
|
448
448
|
type = target.__class__
|
|
449
449
|
|
|
@@ -469,43 +469,49 @@ class PysAnalyzer(Pys):
|
|
|
469
469
|
self.throw("cannot delete literal", target.position)
|
|
470
470
|
return
|
|
471
471
|
|
|
472
|
-
def visit_ContinueNode(self, node):
|
|
472
|
+
def visit_ContinueNode(self, node: PysContinueNode) -> None:
|
|
473
473
|
if self.in_loop == 0:
|
|
474
474
|
self.throw("continue outside of loop", node.position)
|
|
475
475
|
|
|
476
|
-
def visit_BreakNode(self, node):
|
|
476
|
+
def visit_BreakNode(self, node: PysBreakNode) -> None:
|
|
477
477
|
if self.in_loop == 0 and self.in_switch == 0:
|
|
478
478
|
self.throw("break outside of loop or switch case", node.position)
|
|
479
479
|
|
|
480
|
-
def visit_slice_SubscriptNode(self,
|
|
481
|
-
type =
|
|
480
|
+
def visit_slice_SubscriptNode(self, node: PysNode | slice | tuple[PysNode | slice, ...]) -> None:
|
|
481
|
+
type = node.__class__
|
|
482
482
|
|
|
483
483
|
if type is slice:
|
|
484
|
-
if
|
|
485
|
-
self.visit(
|
|
484
|
+
if node.start is not None:
|
|
485
|
+
self.visit(node.start)
|
|
486
486
|
if self.error:
|
|
487
487
|
return
|
|
488
488
|
|
|
489
|
-
if
|
|
490
|
-
self.visit(
|
|
489
|
+
if node.stop is not None:
|
|
490
|
+
self.visit(node.stop)
|
|
491
491
|
if self.error:
|
|
492
492
|
return
|
|
493
493
|
|
|
494
|
-
if
|
|
495
|
-
self.visit(
|
|
494
|
+
if node.step is not None:
|
|
495
|
+
self.visit(node.step)
|
|
496
496
|
if self.error:
|
|
497
497
|
return
|
|
498
498
|
|
|
499
499
|
elif type is tuple:
|
|
500
|
-
for element in
|
|
500
|
+
for element in node:
|
|
501
501
|
self.visit_slice_SubscriptNode(element)
|
|
502
502
|
if self.error:
|
|
503
503
|
return
|
|
504
504
|
|
|
505
505
|
else:
|
|
506
|
-
self.visit(
|
|
506
|
+
self.visit(node)
|
|
507
|
+
|
|
508
|
+
def visit_declaration_AssignmentNode(
|
|
509
|
+
self,
|
|
510
|
+
node: PysIdentifierNode | PysAttributeNode | PysSubscriptNode | PysSetNode | PysListNode | PysTupleNode,
|
|
511
|
+
message: str,
|
|
512
|
+
operator_name: str = 'assign'
|
|
513
|
+
) -> None:
|
|
507
514
|
|
|
508
|
-
def visit_declaration_AssignmentNode(self, node, message, operator_name='assign'):
|
|
509
515
|
type = node.__class__
|
|
510
516
|
|
|
511
517
|
if type is PysAttributeNode:
|
|
@@ -5,7 +5,7 @@ from .utils.string import normstr
|
|
|
5
5
|
|
|
6
6
|
from io import IOBase
|
|
7
7
|
from types import BuiltinMethodType
|
|
8
|
-
from typing import Iterable, Optional
|
|
8
|
+
from typing import Iterable, Optional, Union
|
|
9
9
|
|
|
10
10
|
@immutable
|
|
11
11
|
class PysBuffer(Pys):
|
|
@@ -17,7 +17,7 @@ class PysFileBuffer(PysBuffer):
|
|
|
17
17
|
|
|
18
18
|
def __new__(
|
|
19
19
|
cls,
|
|
20
|
-
text: str
|
|
20
|
+
text: Union[str, bytes, bytearray, Iterable, BuiltinMethodType, IOBase, 'PysFileBuffer'],
|
|
21
21
|
name: Optional[str | bytes] = None
|
|
22
22
|
) -> 'PysFileBuffer':
|
|
23
23
|
|
{pyscript_programming_language-1.12.4 → pyscript_programming_language-1.12.6}/pyscript/core/cache.py
RENAMED
|
@@ -3,8 +3,8 @@ from .constants import PYSCRIPT_PATH, CORE_PATH, LIBRARIES_PATH, SITE_PACKAGES_P
|
|
|
3
3
|
from .utils.debug import print_display, print_traceback, clear_shell
|
|
4
4
|
from .utils.decorators import inheritable, singleton
|
|
5
5
|
|
|
6
|
-
from typing import Literal
|
|
7
6
|
from types import ModuleType
|
|
7
|
+
from typing import Literal
|
|
8
8
|
|
|
9
9
|
import sys
|
|
10
10
|
|
|
@@ -31,15 +31,15 @@ TOKENS = MappingProxyType({
|
|
|
31
31
|
'IDENTIFIER': 2,
|
|
32
32
|
'NUMBER': 3,
|
|
33
33
|
'STRING': 4,
|
|
34
|
-
'
|
|
35
|
-
'
|
|
34
|
+
'NOT_IN': 5,
|
|
35
|
+
'IS_NOT': 6,
|
|
36
36
|
'NEWLINE': ord('\n'),
|
|
37
37
|
'EXCLAMATION': ord('!'),
|
|
38
38
|
'COMMENT': ord('#'),
|
|
39
39
|
'PERCENT': ord('%'),
|
|
40
40
|
'AMPERSAND': ord('&'),
|
|
41
|
-
'
|
|
42
|
-
'
|
|
41
|
+
'RIGHT_PARENTHESIS': ord(')'),
|
|
42
|
+
'LEFT_PARENTHESIS': ord('('),
|
|
43
43
|
'STAR': ord('*'),
|
|
44
44
|
'PLUS': ord('+'),
|
|
45
45
|
'COMMA': ord(','),
|
|
@@ -48,52 +48,52 @@ TOKENS = MappingProxyType({
|
|
|
48
48
|
'SLASH': ord('/'),
|
|
49
49
|
'COLON': ord(':'),
|
|
50
50
|
'SEMICOLON': ord(';'),
|
|
51
|
-
'
|
|
51
|
+
'LESS_THAN': ord('<'),
|
|
52
52
|
'EQUAL': ord('='),
|
|
53
|
-
'
|
|
53
|
+
'GREATER_THAN': ord('>'),
|
|
54
54
|
'QUESTION': ord('?'),
|
|
55
55
|
'AT': ord('@'),
|
|
56
|
-
'
|
|
57
|
-
'
|
|
56
|
+
'LEFT_SQUARE': ord('['),
|
|
57
|
+
'RIGHT_SQUARE': ord(']'),
|
|
58
58
|
'CIRCUMFLEX': ord('^'),
|
|
59
|
-
'
|
|
59
|
+
'LEFT_CURLY': ord('{'),
|
|
60
60
|
'PIPE': ord('|'),
|
|
61
|
-
'
|
|
61
|
+
'RIGHT_CURLY': ord('}'),
|
|
62
62
|
'TILDE': ord('~'),
|
|
63
|
-
'
|
|
64
|
-
'
|
|
65
|
-
'
|
|
66
|
-
'
|
|
67
|
-
'
|
|
68
|
-
'
|
|
69
|
-
'
|
|
70
|
-
'
|
|
71
|
-
'
|
|
72
|
-
'
|
|
73
|
-
'
|
|
74
|
-
'
|
|
75
|
-
'
|
|
76
|
-
'
|
|
77
|
-
'
|
|
78
|
-
'
|
|
79
|
-
'
|
|
80
|
-
'
|
|
81
|
-
'
|
|
82
|
-
'
|
|
83
|
-
'
|
|
84
|
-
'
|
|
85
|
-
'
|
|
86
|
-
'
|
|
87
|
-
'
|
|
88
|
-
'
|
|
89
|
-
'
|
|
90
|
-
'
|
|
91
|
-
'
|
|
63
|
+
'DOUBLE_AMPERSAND': ord('&') + DOUBLE,
|
|
64
|
+
'DOUBLE_STAR': ord('*') + DOUBLE,
|
|
65
|
+
'DOUBLE_PLUS': ord('+') + DOUBLE,
|
|
66
|
+
'DOUBLE_MINUS': ord('-') + DOUBLE,
|
|
67
|
+
'DOUBLE_SLASH': ord('/') + DOUBLE,
|
|
68
|
+
'DOUBLE_LESS_THAN': ord('<') + DOUBLE,
|
|
69
|
+
'DOUBLE_EQUAL': ord('=') + DOUBLE,
|
|
70
|
+
'DOUBLE_GREATER_THAN': ord('>') + DOUBLE,
|
|
71
|
+
'DOUBLE_QUESTION': ord('?') + DOUBLE,
|
|
72
|
+
'DOUBLE_PIPE': ord('|') + DOUBLE,
|
|
73
|
+
'TRIPLE_DOT': ord('.') + TRIPLE,
|
|
74
|
+
'EQUAL_EXCLAMATION': ord('!') + WITH_EQUAL,
|
|
75
|
+
'EQUAL_PERCENT': ord('%') + WITH_EQUAL,
|
|
76
|
+
'EQUAL_AMPERSAND': ord('&') + WITH_EQUAL,
|
|
77
|
+
'EQUAL_STAR': ord('*') + WITH_EQUAL,
|
|
78
|
+
'EQUAL_PLUS': ord('+') + WITH_EQUAL,
|
|
79
|
+
'EQUAL_MINUS': ord('-') + WITH_EQUAL,
|
|
80
|
+
'EQUAL_SLASH': ord('/') + WITH_EQUAL,
|
|
81
|
+
'EQUAL_COLON': ord(':') + WITH_EQUAL,
|
|
82
|
+
'EQUAL_LESS_THAN': ord('<') + WITH_EQUAL,
|
|
83
|
+
'EQUAL_GREATER_THAN': ord('>') + WITH_EQUAL,
|
|
84
|
+
'EQUAL_AT': ord('@') + WITH_EQUAL,
|
|
85
|
+
'EQUAL_CIRCUMFLEX': ord('^') + WITH_EQUAL,
|
|
86
|
+
'EQUAL_PIPE': ord('|') + WITH_EQUAL,
|
|
87
|
+
'EQUAL_TILDE': ord('~') + WITH_EQUAL,
|
|
88
|
+
'EQUAL_DOUBLE_STAR': ord('*') + DOUBLE + WITH_EQUAL,
|
|
89
|
+
'EQUAL_DOUBLE_SLASH': ord('/') + DOUBLE + WITH_EQUAL,
|
|
90
|
+
'EQUAL_DOUBLE_LESS_THAN': ord('<') + DOUBLE + WITH_EQUAL,
|
|
91
|
+
'EQUAL_DOUBLE_GREATER_THAN': ord('>') + DOUBLE + WITH_EQUAL,
|
|
92
92
|
'NONE': SPECIAL,
|
|
93
|
-
'
|
|
94
|
-
'
|
|
95
|
-
'
|
|
96
|
-
'
|
|
93
|
+
'MINUS_GREATER_THAN': ord('-') + SPECIAL,
|
|
94
|
+
'EQUAL_ARROW': ord('>') + SPECIAL,
|
|
95
|
+
'EXCLAMATION_GREATER_THAN': ord('!') + SPECIAL,
|
|
96
|
+
'EXCLAMATION_TILDE': ord('~') + SPECIAL
|
|
97
97
|
})
|
|
98
98
|
|
|
99
99
|
# keywords
|
|
@@ -1,18 +1,20 @@
|
|
|
1
1
|
from .cache import pys_sys
|
|
2
2
|
from .constants import ENV_PYSCRIPT_NO_GIL
|
|
3
|
+
from .context import PysContext
|
|
3
4
|
from .objects import PysFunction
|
|
5
|
+
from .position import PysPosition
|
|
4
6
|
from .utils.generic import is_environ
|
|
5
7
|
|
|
6
8
|
from types import MethodType
|
|
9
|
+
from typing import Any
|
|
7
10
|
|
|
8
11
|
wrapper_function = (MethodType, classmethod, staticmethod)
|
|
9
12
|
|
|
10
13
|
if not is_environ(ENV_PYSCRIPT_NO_GIL):
|
|
11
14
|
from threading import RLock
|
|
12
|
-
|
|
13
15
|
lock = RLock()
|
|
14
16
|
|
|
15
|
-
def handle_call(object, context, position):
|
|
17
|
+
def handle_call(object: Any, context: PysContext, position: PysPosition) -> None:
|
|
16
18
|
with lock:
|
|
17
19
|
|
|
18
20
|
if (ins := isinstance)(object, PysFunction):
|
|
@@ -35,7 +37,7 @@ if not is_environ(ENV_PYSCRIPT_NO_GIL):
|
|
|
35
37
|
GIL = pys_sys.gil = True
|
|
36
38
|
else:
|
|
37
39
|
|
|
38
|
-
def handle_call(object, context, position):
|
|
40
|
+
def handle_call(object: Any, context: PysContext, position: PysPosition) -> None:
|
|
39
41
|
|
|
40
42
|
if (ins := isinstance)(object, PysFunction):
|
|
41
43
|
code = object.__code__
|
|
@@ -356,7 +356,7 @@ try:
|
|
|
356
356
|
|
|
357
357
|
del (
|
|
358
358
|
_set_constant_keywords, _unicode_name, _newlines, _integer, _scientific, _imaginary, _dollar,
|
|
359
|
-
_raw_string_prefixes, _string_or_bytes_prefixes
|
|
359
|
+
_raw_string_prefixes, _string_or_bytes_prefixes
|
|
360
360
|
)
|
|
361
361
|
|
|
362
362
|
PYGMENTS = True
|
|
@@ -508,7 +508,7 @@ def pys_highlight(
|
|
|
508
508
|
type_format = 'identifier-function'
|
|
509
509
|
else:
|
|
510
510
|
j = i + 1
|
|
511
|
-
if (j < len(tokens) and tokens[j].type == TOKENS['
|
|
511
|
+
if (j < len(tokens) and tokens[j].type == TOKENS['LEFT_PARENTHESIS']):
|
|
512
512
|
type_format = 'identifier-function'
|
|
513
513
|
else:
|
|
514
514
|
type_format = 'identifier-constant' if tvalue.isupper() else 'identifier'
|