pyscript-programming-language 1.6.1__tar.gz → 1.7.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.6.1/pyscript_programming_language.egg-info → pyscript_programming_language-1.7.1}/PKG-INFO +8 -4
- {pyscript_programming_language-1.6.1 → pyscript_programming_language-1.7.1}/README.md +3 -0
- {pyscript_programming_language-1.6.1 → pyscript_programming_language-1.7.1}/pyscript/__init__.py +3 -2
- {pyscript_programming_language-1.6.1 → pyscript_programming_language-1.7.1}/pyscript/__init__.pyi +9 -6
- {pyscript_programming_language-1.6.1 → pyscript_programming_language-1.7.1}/pyscript/__main__.py +11 -14
- {pyscript_programming_language-1.6.1 → pyscript_programming_language-1.7.1}/pyscript/core/analyzer.py +2 -2
- {pyscript_programming_language-1.6.1 → pyscript_programming_language-1.7.1}/pyscript/core/cache.py +20 -4
- {pyscript_programming_language-1.6.1 → pyscript_programming_language-1.7.1}/pyscript/core/checks.py +10 -14
- {pyscript_programming_language-1.6.1 → pyscript_programming_language-1.7.1}/pyscript/core/constants.py +11 -4
- {pyscript_programming_language-1.6.1 → pyscript_programming_language-1.7.1}/pyscript/core/exceptions.py +12 -17
- pyscript_programming_language-1.7.1/pyscript/core/handlers.py +61 -0
- pyscript_programming_language-1.7.1/pyscript/core/highlight.py +425 -0
- {pyscript_programming_language-1.6.1 → pyscript_programming_language-1.7.1}/pyscript/core/interpreter.py +79 -63
- {pyscript_programming_language-1.6.1 → pyscript_programming_language-1.7.1}/pyscript/core/lexer.py +42 -39
- {pyscript_programming_language-1.6.1 → pyscript_programming_language-1.7.1}/pyscript/core/mapping.py +5 -2
- {pyscript_programming_language-1.6.1 → pyscript_programming_language-1.7.1}/pyscript/core/parser.py +107 -92
- {pyscript_programming_language-1.6.1 → pyscript_programming_language-1.7.1}/pyscript/core/position.py +3 -3
- {pyscript_programming_language-1.6.1 → pyscript_programming_language-1.7.1}/pyscript/core/pysbuiltins.py +89 -3
- {pyscript_programming_language-1.6.1 → pyscript_programming_language-1.7.1}/pyscript/core/results.py +64 -5
- {pyscript_programming_language-1.6.1 → pyscript_programming_language-1.7.1}/pyscript/core/runner.py +39 -133
- {pyscript_programming_language-1.6.1 → pyscript_programming_language-1.7.1}/pyscript/core/utils/__init__.py +2 -0
- {pyscript_programming_language-1.6.1 → pyscript_programming_language-1.7.1}/pyscript/core/utils/ansi.py +1 -1
- {pyscript_programming_language-1.6.1 → pyscript_programming_language-1.7.1}/pyscript/core/utils/debug.py +2 -2
- {pyscript_programming_language-1.6.1 → pyscript_programming_language-1.7.1}/pyscript/core/utils/decorators.py +7 -3
- {pyscript_programming_language-1.6.1 → pyscript_programming_language-1.7.1}/pyscript/core/utils/generic.py +24 -0
- pyscript_programming_language-1.7.1/pyscript/core/utils/shell.py +109 -0
- {pyscript_programming_language-1.6.1 → pyscript_programming_language-1.7.1}/pyscript/core/utils/string.py +3 -2
- {pyscript_programming_language-1.6.1 → pyscript_programming_language-1.7.1}/pyscript/core/version.py +3 -3
- pyscript_programming_language-1.7.1/pyscript/lib/ansi.pys +10 -0
- {pyscript_programming_language-1.6.1 → pyscript_programming_language-1.7.1}/pyscript/lib/ast/__init__.pys +1 -1
- {pyscript_programming_language-1.6.1 → pyscript_programming_language-1.7.1}/pyscript/lib/ast/ast_unparse.py +1 -0
- {pyscript_programming_language-1.6.1 → pyscript_programming_language-1.7.1}/pyscript/lib/explorer.pys +1 -2
- {pyscript_programming_language-1.6.1 → pyscript_programming_language-1.7.1}/pyscript/lib/fpstimer.pys +8 -8
- {pyscript_programming_language-1.6.1 → pyscript_programming_language-1.7.1}/pyscript/lib/inspect.pys +5 -1
- pyscript_programming_language-1.7.1/pyscript/lib/jsdict.pys +25 -0
- {pyscript_programming_language-1.6.1 → pyscript_programming_language-1.7.1}/pyscript/lib/parser.pys +23 -43
- {pyscript_programming_language-1.6.1 → pyscript_programming_language-1.7.1}/pyscript/lib/sys.pys +2 -2
- {pyscript_programming_language-1.6.1 → pyscript_programming_language-1.7.1}/pyscript/lib/tokenize/tok_untokenize.py +1 -0
- pyscript_programming_language-1.7.1/pyscript/site-packages/67.pys +1 -0
- {pyscript_programming_language-1.6.1 → pyscript_programming_language-1.7.1/pyscript_programming_language.egg-info}/PKG-INFO +8 -4
- {pyscript_programming_language-1.6.1 → pyscript_programming_language-1.7.1}/pyscript_programming_language.egg-info/SOURCES.txt +2 -0
- pyscript_programming_language-1.7.1/pyscript_programming_language.egg-info/requires.txt +4 -0
- {pyscript_programming_language-1.6.1 → pyscript_programming_language-1.7.1}/setup.py +3 -3
- pyscript_programming_language-1.6.1/pyscript/core/handlers.py +0 -117
- pyscript_programming_language-1.6.1/pyscript/core/highlight.py +0 -217
- pyscript_programming_language-1.6.1/pyscript/lib/jsdict.pys +0 -34
- pyscript_programming_language-1.6.1/pyscript/site-packages/67.pys +0 -1
- pyscript_programming_language-1.6.1/pyscript_programming_language.egg-info/requires.txt +0 -3
- {pyscript_programming_language-1.6.1 → pyscript_programming_language-1.7.1}/MANIFEST.in +0 -0
- {pyscript_programming_language-1.6.1 → pyscript_programming_language-1.7.1}/pyscript/core/__init__.py +0 -0
- {pyscript_programming_language-1.6.1 → pyscript_programming_language-1.7.1}/pyscript/core/bases.py +0 -0
- {pyscript_programming_language-1.6.1 → pyscript_programming_language-1.7.1}/pyscript/core/buffer.py +0 -0
- {pyscript_programming_language-1.6.1 → pyscript_programming_language-1.7.1}/pyscript/core/context.py +0 -0
- {pyscript_programming_language-1.6.1 → pyscript_programming_language-1.7.1}/pyscript/core/nodes.py +0 -0
- {pyscript_programming_language-1.6.1 → pyscript_programming_language-1.7.1}/pyscript/core/objects.py +0 -0
- {pyscript_programming_language-1.6.1 → pyscript_programming_language-1.7.1}/pyscript/core/symtab.py +0 -0
- {pyscript_programming_language-1.6.1 → pyscript_programming_language-1.7.1}/pyscript/core/token.py +0 -0
- {pyscript_programming_language-1.6.1 → pyscript_programming_language-1.7.1}/pyscript/core/utils/module.py +0 -0
- {pyscript_programming_language-1.6.1 → pyscript_programming_language-1.7.1}/pyscript/core/utils/path.py +0 -0
- {pyscript_programming_language-1.6.1 → pyscript_programming_language-1.7.1}/pyscript/core/utils/similarity.py +0 -0
- {pyscript_programming_language-1.6.1 → pyscript_programming_language-1.7.1}/pyscript/lib/__hello__.pys +0 -0
- {pyscript_programming_language-1.6.1 → pyscript_programming_language-1.7.1}/pyscript/lib/ast/ast_dump.py +0 -0
- {pyscript_programming_language-1.6.1 → pyscript_programming_language-1.7.1}/pyscript/lib/ast/ast_walk.py +0 -0
- {pyscript_programming_language-1.6.1 → pyscript_programming_language-1.7.1}/pyscript/lib/brainfuck.pys +0 -0
- {pyscript_programming_language-1.6.1 → pyscript_programming_language-1.7.1}/pyscript/lib/dis.pys +0 -0
- {pyscript_programming_language-1.6.1 → pyscript_programming_language-1.7.1}/pyscript/lib/getch.pys +0 -0
- {pyscript_programming_language-1.6.1 → pyscript_programming_language-1.7.1}/pyscript/lib/keyword.pys +0 -0
- {pyscript_programming_language-1.6.1 → pyscript_programming_language-1.7.1}/pyscript/lib/site.pys +0 -0
- {pyscript_programming_language-1.6.1 → pyscript_programming_language-1.7.1}/pyscript/lib/symtable.pys +0 -0
- {pyscript_programming_language-1.6.1 → pyscript_programming_language-1.7.1}/pyscript/lib/this.pys +0 -0
- {pyscript_programming_language-1.6.1 → pyscript_programming_language-1.7.1}/pyscript/lib/token.pys +0 -0
- {pyscript_programming_language-1.6.1 → pyscript_programming_language-1.7.1}/pyscript/lib/tokenize/__init__.pys +0 -0
- {pyscript_programming_language-1.6.1 → pyscript_programming_language-1.7.1}/pyscript/this.py +0 -0
- {pyscript_programming_language-1.6.1 → pyscript_programming_language-1.7.1}/pyscript_programming_language.egg-info/dependency_links.txt +0 -0
- {pyscript_programming_language-1.6.1 → pyscript_programming_language-1.7.1}/pyscript_programming_language.egg-info/top_level.txt +0 -0
- {pyscript_programming_language-1.6.1 → pyscript_programming_language-1.7.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.7.1
|
|
4
4
|
Summary: PyScript Programming Language
|
|
5
5
|
Home-page: https://github.com/azzammuhyala/pyscript
|
|
6
6
|
Author: azzammuhyala
|
|
@@ -8,7 +8,7 @@ Author-email: azzammuhyala@gmail.com
|
|
|
8
8
|
License: MIT
|
|
9
9
|
Project-URL: Source, https://github.com/azzammuhyala/pyscript
|
|
10
10
|
Project-URL: Bug Tracker, https://github.com/azzammuhyala/pyscript/issues
|
|
11
|
-
Keywords: pyscript,pys,programming,language,programming language
|
|
11
|
+
Keywords: pyscript,pyslang,pys,programming,language,programming language
|
|
12
12
|
Classifier: Programming Language :: Python
|
|
13
13
|
Classifier: Programming Language :: Python :: 3
|
|
14
14
|
Classifier: Intended Audience :: Developers
|
|
@@ -17,8 +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 == "
|
|
20
|
+
Provides-Extra: extras
|
|
21
|
+
Requires-Dist: beartype; extra == "extras"
|
|
22
|
+
Requires-Dist: pygments; extra == "extras"
|
|
22
23
|
Dynamic: author
|
|
23
24
|
Dynamic: author-email
|
|
24
25
|
Dynamic: classifier
|
|
@@ -73,6 +74,9 @@ python -m pyscript
|
|
|
73
74
|
```
|
|
74
75
|
If successful, you can see the version, release date, and a `>>>` like Python shell (_REPL_).
|
|
75
76
|
|
|
77
|
+
> If you are using the VS Code editor, you can use the
|
|
78
|
+
[PyScript extension](https://marketplace.visualstudio.com/items?itemName=azzammuhyala.pyslang) for Syntax Highlight!
|
|
79
|
+
|
|
76
80
|
## Syntax
|
|
77
81
|
<pre><span style="color:#C586C0">func</span><span style="color:#D4D4D4"> </span><span style="color:#DCDCAA">greet</span><span style="color:#FFD705">(</span><span style="color:#8CDCFE">name</span><span style="color:#FFD705">)</span><span style="color:#D4D4D4"> </span><span style="color:#FFD705">{</span><br><span style="color:#D4D4D4"> </span><span style="color:#DCDCAA">print</span><span style="color:#D45DBA">(</span><span style="color:#CE9178">"Hello, "</span><span style="color:#D4D4D4"> + </span><span style="color:#8CDCFE">name</span><span style="color:#D4D4D4">.</span><span style="color:#DCDCAA">title</span><span style="color:#1A9FFF">()</span><span style="color:#D4D4D4"> + </span><span style="color:#CE9178">"!"</span><span style="color:#D45DBA">)</span><br><span style="color:#FFD705">}</span><br><br><span style="color:#DCDCAA">greet</span><span style="color:#FFD705">(</span><span style="color:#CE9178">"charlie klik"</span><span style="color:#FFD705">)</span></pre>
|
|
78
82
|
|
|
@@ -39,6 +39,9 @@ python -m pyscript
|
|
|
39
39
|
```
|
|
40
40
|
If successful, you can see the version, release date, and a `>>>` like Python shell (_REPL_).
|
|
41
41
|
|
|
42
|
+
> If you are using the VS Code editor, you can use the
|
|
43
|
+
[PyScript extension](https://marketplace.visualstudio.com/items?itemName=azzammuhyala.pyslang) for Syntax Highlight!
|
|
44
|
+
|
|
42
45
|
## Syntax
|
|
43
46
|
<pre><span style="color:#C586C0">func</span><span style="color:#D4D4D4"> </span><span style="color:#DCDCAA">greet</span><span style="color:#FFD705">(</span><span style="color:#8CDCFE">name</span><span style="color:#FFD705">)</span><span style="color:#D4D4D4"> </span><span style="color:#FFD705">{</span><br><span style="color:#D4D4D4"> </span><span style="color:#DCDCAA">print</span><span style="color:#D45DBA">(</span><span style="color:#CE9178">"Hello, "</span><span style="color:#D4D4D4"> + </span><span style="color:#8CDCFE">name</span><span style="color:#D4D4D4">.</span><span style="color:#DCDCAA">title</span><span style="color:#1A9FFF">()</span><span style="color:#D4D4D4"> + </span><span style="color:#CE9178">"!"</span><span style="color:#D45DBA">)</span><br><span style="color:#FFD705">}</span><br><br><span style="color:#DCDCAA">greet</span><span style="color:#FFD705">(</span><span style="color:#CE9178">"charlie klik"</span><span style="color:#FFD705">)</span></pre>
|
|
44
47
|
|
{pyscript_programming_language-1.6.1 → pyscript_programming_language-1.7.1}/pyscript/__init__.py
RENAMED
|
@@ -10,7 +10,7 @@ from . import core
|
|
|
10
10
|
|
|
11
11
|
from .core.constants import DEFAULT, DEBUG, SILENT, RETRES, HIGHLIGHT, NO_COLOR, REVERSE_POW_XOR
|
|
12
12
|
from .core.cache import undefined
|
|
13
|
-
from .core.highlight import HLFMT_HTML, HLFMT_ANSI, HLFMT_BBCODE, pys_highlight
|
|
13
|
+
from .core.highlight import HLFMT_HTML, HLFMT_ANSI, HLFMT_BBCODE, pys_highlight, PygmentsPyScriptLexer
|
|
14
14
|
from .core.runner import pys_exec, pys_eval, pys_require, pys_shell
|
|
15
15
|
from .core.version import version_info, __version__, __date__
|
|
16
16
|
|
|
@@ -32,5 +32,6 @@ __all__ = (
|
|
|
32
32
|
'pys_exec',
|
|
33
33
|
'pys_eval',
|
|
34
34
|
'pys_require',
|
|
35
|
-
'pys_shell'
|
|
35
|
+
'pys_shell',
|
|
36
|
+
'PygmentsPyScriptLexer'
|
|
36
37
|
)
|
{pyscript_programming_language-1.6.1 → pyscript_programming_language-1.7.1}/pyscript/__init__.pyi
RENAMED
|
@@ -1,9 +1,11 @@
|
|
|
1
|
+
from .core.highlight import PygmentsPyScriptLexer as PygmentsPyScriptLexer
|
|
2
|
+
|
|
1
3
|
from typing import TYPE_CHECKING, Any, Callable, Iterator, Literal, Optional
|
|
2
4
|
|
|
3
5
|
if TYPE_CHECKING:
|
|
4
6
|
from .core.buffer import PysFileBuffer
|
|
5
7
|
from .core.cache import PysUndefined
|
|
6
|
-
from .core.highlight import
|
|
8
|
+
from .core.highlight import _PysHighlightFormatter
|
|
7
9
|
from .core.position import PysPosition
|
|
8
10
|
from .core.results import PysExecuteResult
|
|
9
11
|
from .core.symtab import PysSymbolTable
|
|
@@ -22,9 +24,9 @@ HIGHLIGHT: int
|
|
|
22
24
|
NO_COLOR: int
|
|
23
25
|
REVERSE_POW_XOR: int
|
|
24
26
|
|
|
25
|
-
HLFMT_HTML:
|
|
26
|
-
HLFMT_ANSI:
|
|
27
|
-
HLFMT_BBCODE:
|
|
27
|
+
HLFMT_HTML: _PysHighlightFormatter
|
|
28
|
+
HLFMT_ANSI: _PysHighlightFormatter
|
|
29
|
+
HLFMT_BBCODE: _PysHighlightFormatter
|
|
28
30
|
|
|
29
31
|
undefined: PysUndefined
|
|
30
32
|
version_info: PysVersionInfo
|
|
@@ -49,7 +51,7 @@ def pys_highlight(
|
|
|
49
51
|
str
|
|
50
52
|
]
|
|
51
53
|
] = None,
|
|
52
|
-
|
|
54
|
+
max_bracket_level: int = 3
|
|
53
55
|
) -> str: ...
|
|
54
56
|
|
|
55
57
|
def pys_exec(
|
|
@@ -65,7 +67,8 @@ def pys_eval(
|
|
|
65
67
|
) -> Any | PysExecuteResult: ...
|
|
66
68
|
|
|
67
69
|
def pys_require(
|
|
68
|
-
name: str | bytes
|
|
70
|
+
name: str | bytes,
|
|
71
|
+
flags: int = DEFAULT
|
|
69
72
|
) -> ModuleType | Any: ...
|
|
70
73
|
|
|
71
74
|
def pys_shell(
|
{pyscript_programming_language-1.6.1 → pyscript_programming_language-1.7.1}/pyscript/__main__.py
RENAMED
|
@@ -1,15 +1,14 @@
|
|
|
1
1
|
from .core.buffer import PysFileBuffer
|
|
2
2
|
from .core.cache import path, undefined
|
|
3
3
|
from .core.constants import DEFAULT, DEBUG, NO_COLOR
|
|
4
|
-
from .core.handlers import handle_execute
|
|
5
4
|
from .core.highlight import HLFMT_HTML, HLFMT_ANSI, HLFMT_BBCODE, pys_highlight
|
|
6
|
-
from .core.runner import pys_runner, pys_shell
|
|
7
|
-
from .core.symtab import new_symbol_table
|
|
5
|
+
from .core.runner import _normalize_globals, pys_runner, pys_shell
|
|
8
6
|
from .core.utils.module import get_module_name_from_path
|
|
9
7
|
from .core.utils.path import normpath
|
|
10
8
|
from .core.version import __version__
|
|
11
9
|
|
|
12
10
|
from argparse import ArgumentParser
|
|
11
|
+
from os import environ
|
|
13
12
|
from sys import executable, stderr, version_info, exit, setrecursionlimit
|
|
14
13
|
|
|
15
14
|
FORMAT_HIGHLIGHT_MAP = {
|
|
@@ -96,7 +95,7 @@ flags = DEFAULT
|
|
|
96
95
|
|
|
97
96
|
if args.debug:
|
|
98
97
|
flags |= DEBUG
|
|
99
|
-
if args.no_color:
|
|
98
|
+
if args.no_color or environ.get('NO_COLOR') is not None:
|
|
100
99
|
flags |= NO_COLOR
|
|
101
100
|
|
|
102
101
|
if args.file is not None:
|
|
@@ -130,25 +129,23 @@ if args.file is not None:
|
|
|
130
129
|
result = pys_runner(
|
|
131
130
|
file=file,
|
|
132
131
|
mode='exec',
|
|
133
|
-
symbol_table=
|
|
132
|
+
symbol_table=_normalize_globals(file, undefined),
|
|
134
133
|
flags=flags
|
|
135
134
|
)
|
|
136
135
|
|
|
137
136
|
if args.inspect:
|
|
138
137
|
code = pys_shell(result.context.symbol_table, result.context.flags)
|
|
139
138
|
else:
|
|
140
|
-
code =
|
|
139
|
+
code = result.process()[0]
|
|
141
140
|
|
|
142
141
|
elif args.command is not None:
|
|
143
142
|
file = PysFileBuffer(args.command)
|
|
144
|
-
code =
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
)
|
|
151
|
-
)
|
|
143
|
+
code = pys_runner(
|
|
144
|
+
file=file,
|
|
145
|
+
mode='exec',
|
|
146
|
+
symbol_table=_normalize_globals(file, undefined),
|
|
147
|
+
flags=flags
|
|
148
|
+
).process()[0]
|
|
152
149
|
|
|
153
150
|
else:
|
|
154
151
|
code = pys_shell(undefined, flags)
|
|
@@ -454,7 +454,7 @@ class PysAnalyzer(Pys):
|
|
|
454
454
|
if self.in_loop == 0 and self.in_switch == 0:
|
|
455
455
|
self.throw("break outside of loop or switch case", node.position)
|
|
456
456
|
|
|
457
|
-
def visit_slice_SubscriptNode(self, nslice
|
|
457
|
+
def visit_slice_SubscriptNode(self, nslice):
|
|
458
458
|
type = nslice.__class__
|
|
459
459
|
|
|
460
460
|
if type is slice:
|
|
@@ -482,7 +482,7 @@ class PysAnalyzer(Pys):
|
|
|
482
482
|
else:
|
|
483
483
|
self.visit(nslice)
|
|
484
484
|
|
|
485
|
-
def visit_declaration_AssignNode(self, node
|
|
485
|
+
def visit_declaration_AssignNode(self, node, message):
|
|
486
486
|
type = node.__class__
|
|
487
487
|
|
|
488
488
|
if type is PysAttributeNode:
|
{pyscript_programming_language-1.6.1 → pyscript_programming_language-1.7.1}/pyscript/core/cache.py
RENAMED
|
@@ -1,17 +1,15 @@
|
|
|
1
1
|
from .bases import Pys
|
|
2
2
|
from .constants import LIBRARIES_PATH, SITE_PACKAGES_PATH
|
|
3
|
-
from .utils.debug import print_traceback
|
|
3
|
+
from .utils.debug import print_display, print_traceback
|
|
4
4
|
from .utils.decorators import inheritable, singleton
|
|
5
5
|
|
|
6
6
|
from threading import RLock
|
|
7
|
-
from re import compile as re_compile
|
|
8
7
|
|
|
9
8
|
loading_modules = set()
|
|
10
9
|
lock = RLock()
|
|
11
10
|
modules = dict()
|
|
12
11
|
path = [SITE_PACKAGES_PATH, LIBRARIES_PATH]
|
|
13
12
|
singletons = dict()
|
|
14
|
-
version_match = re_compile(r'^(\d+)\.(\d+)\.(\d+)((?:a|b|rc)(\d+)|\.(dev|post)(\d+))?$').match
|
|
15
13
|
|
|
16
14
|
@singleton
|
|
17
15
|
@inheritable
|
|
@@ -39,7 +37,9 @@ class PysHook(Pys):
|
|
|
39
37
|
def __new_singleton__(cls):
|
|
40
38
|
global hook
|
|
41
39
|
hook = super(cls, cls).__new__(cls)
|
|
42
|
-
hook.
|
|
40
|
+
hook.running_shell = False
|
|
41
|
+
hook.running_breakpoint = False
|
|
42
|
+
hook.display = print_display
|
|
43
43
|
hook.exception = print_traceback
|
|
44
44
|
hook.ps1 = '>>> '
|
|
45
45
|
hook.ps2 = '... '
|
|
@@ -48,6 +48,22 @@ class PysHook(Pys):
|
|
|
48
48
|
def __repr__(self):
|
|
49
49
|
return f'<hook object at {id(self):016X}>'
|
|
50
50
|
|
|
51
|
+
@property
|
|
52
|
+
def running_shell(self):
|
|
53
|
+
return singletons['hook.running_shell']
|
|
54
|
+
|
|
55
|
+
@running_shell.setter
|
|
56
|
+
def running_shell(self, value):
|
|
57
|
+
singletons['hook.running_shell'] = bool(value)
|
|
58
|
+
|
|
59
|
+
@property
|
|
60
|
+
def running_breakpoint(self):
|
|
61
|
+
return singletons['hook.running_breakpoint']
|
|
62
|
+
|
|
63
|
+
@running_breakpoint.setter
|
|
64
|
+
def running_breakpoint(self, value):
|
|
65
|
+
singletons['hook.running_breakpoint'] = bool(value)
|
|
66
|
+
|
|
51
67
|
@property
|
|
52
68
|
def display(self):
|
|
53
69
|
return singletons['hook.display']
|
{pyscript_programming_language-1.6.1 → pyscript_programming_language-1.7.1}/pyscript/core/checks.py
RENAMED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
from .constants import TOKENS, KEYWORDS
|
|
2
|
-
from .mapping import
|
|
1
|
+
from .constants import TOKENS, KEYWORDS, CONSTANT_KEYWORDS
|
|
2
|
+
from .mapping import BRACKETS_MAP
|
|
3
3
|
from .nodes import *
|
|
4
4
|
|
|
5
5
|
is_expression = frozenset([
|
|
@@ -33,19 +33,15 @@ is_incremental = frozenset([
|
|
|
33
33
|
]).__contains__
|
|
34
34
|
|
|
35
35
|
is_blacklist_python_builtins = frozenset([
|
|
36
|
-
'IndentationError', 'TabError', 'compile', 'copyright', 'credits', 'dir', 'eval', 'exec', 'help',
|
|
37
|
-
'license', 'locals', 'vars'
|
|
36
|
+
'IndentationError', 'TabError', 'breakpoint', 'compile', 'copyright', 'credits', 'dir', 'eval', 'exec', 'help',
|
|
37
|
+
'globals', 'license', 'locals', 'vars'
|
|
38
38
|
]).__contains__
|
|
39
39
|
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
40
|
+
is_left_bracket = frozenset(BRACKETS_MAP.keys()).__contains__
|
|
41
|
+
is_right_bracket = frozenset(BRACKETS_MAP.values()).__contains__
|
|
42
|
+
is_bracket = frozenset(BRACKETS_MAP.keys() | BRACKETS_MAP.values()).__contains__
|
|
43
43
|
|
|
44
|
-
is_constant_keywords = frozenset(
|
|
45
|
-
KEYWORDS['__debug__'], KEYWORDS['of'], KEYWORDS['in'], KEYWORDS['is'], KEYWORDS['and'], KEYWORDS['or'],
|
|
46
|
-
KEYWORDS['not'], KEYWORDS['False'], KEYWORDS['None'], KEYWORDS['True'], KEYWORDS['class'], KEYWORDS['false'],
|
|
47
|
-
KEYWORDS['func'], KEYWORDS['function'], KEYWORDS['global'], KEYWORDS['none'], KEYWORDS['true']
|
|
48
|
-
]).__contains__
|
|
44
|
+
is_constant_keywords = frozenset(CONSTANT_KEYWORDS).__contains__
|
|
49
45
|
|
|
50
|
-
is_private_attribute = lambda name : name.startswith('_')
|
|
51
|
-
is_public_attribute = lambda name : not name.startswith('_')
|
|
46
|
+
is_private_attribute = lambda name : name.startswith('_') if isinstance(name, str) else name
|
|
47
|
+
is_public_attribute = lambda name : not name.startswith('_') if isinstance(name, str) else name
|
|
@@ -8,10 +8,10 @@ LIBRARIES_PATH = join(PYSCRIPT_PATH, 'lib')
|
|
|
8
8
|
SITE_PACKAGES_PATH = join(PYSCRIPT_PATH, 'site-packages')
|
|
9
9
|
|
|
10
10
|
# environment variables
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
11
|
+
ENV_PYSCRIPT_NO_EXCEPTHOOK = 'PYSCRIPT_NO_EXCEPTHOOK'
|
|
12
|
+
ENV_PYSCRIPT_NO_GIL = 'PYSCRIPT_NO_GIL'
|
|
13
|
+
ENV_PYSCRIPT_NO_READLINE = 'PYSCRIPT_NO_READLINE'
|
|
14
|
+
ENV_PYSCRIPT_NO_TYPECHECK = 'PYSCRIPT_NO_TYPECHECK'
|
|
15
15
|
|
|
16
16
|
# tokens offset
|
|
17
17
|
DOUBLE = 2**8
|
|
@@ -85,6 +85,7 @@ TOKENS = MappingProxyType({
|
|
|
85
85
|
'EQUAL-DOUBLE-LESS-THAN': ord('<') + DOUBLE + WITH_EQUAL,
|
|
86
86
|
'EQUAL-DOUBLE-GREATER-THAN': ord('>') + DOUBLE + WITH_EQUAL,
|
|
87
87
|
'NONE': SPECIAL,
|
|
88
|
+
'EQUAL-ARROW': ord('>') + SPECIAL,
|
|
88
89
|
'EXCLAMATION-TILDE': ord('~') + SPECIAL
|
|
89
90
|
})
|
|
90
91
|
|
|
@@ -133,6 +134,12 @@ KEYWORDS = MappingProxyType({
|
|
|
133
134
|
'with': 'with'
|
|
134
135
|
})
|
|
135
136
|
|
|
137
|
+
CONSTANT_KEYWORDS = (
|
|
138
|
+
KEYWORDS['__debug__'], KEYWORDS['False'], KEYWORDS['None'], KEYWORDS['True'], KEYWORDS['and'], KEYWORDS['class'],
|
|
139
|
+
KEYWORDS['extends'], KEYWORDS['func'], KEYWORDS['function'], KEYWORDS['false'], KEYWORDS['global'], KEYWORDS['in'],
|
|
140
|
+
KEYWORDS['is'], KEYWORDS['not'], KEYWORDS['none'], KEYWORDS['of'], KEYWORDS['or'], KEYWORDS['true']
|
|
141
|
+
)
|
|
142
|
+
|
|
136
143
|
# flags
|
|
137
144
|
DEFAULT = 0
|
|
138
145
|
DEBUG = 1 << 0
|
|
@@ -24,17 +24,14 @@ class PysTraceback(Pys):
|
|
|
24
24
|
context = self.context
|
|
25
25
|
position = self.position
|
|
26
26
|
|
|
27
|
-
|
|
28
|
-
colored = not no_colored
|
|
29
|
-
|
|
30
|
-
if no_colored:
|
|
31
|
-
reset = ''
|
|
32
|
-
magenta = ''
|
|
33
|
-
bmagenta = ''
|
|
34
|
-
else:
|
|
27
|
+
if colored := not (context.flags & NO_COLOR):
|
|
35
28
|
reset = acolor('reset')
|
|
36
29
|
magenta = acolor('magenta')
|
|
37
30
|
bmagenta = acolor('magenta', BOLD)
|
|
31
|
+
else:
|
|
32
|
+
reset = ''
|
|
33
|
+
magenta = ''
|
|
34
|
+
bmagenta = ''
|
|
38
35
|
|
|
39
36
|
frames = []
|
|
40
37
|
|
|
@@ -79,17 +76,15 @@ class PysTraceback(Pys):
|
|
|
79
76
|
result += f'{bmagenta}{self.exception.__name__}{reset}'
|
|
80
77
|
else:
|
|
81
78
|
message = str(self.exception)
|
|
82
|
-
result += (
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
)
|
|
79
|
+
result += f'{bmagenta}{type(self.exception).__name__}{reset}'
|
|
80
|
+
if message:
|
|
81
|
+
result += f': {magenta}{message}{reset}'
|
|
86
82
|
|
|
87
83
|
return (
|
|
88
|
-
self.cause.string_traceback() +
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
) + result
|
|
84
|
+
self.cause.string_traceback() +
|
|
85
|
+
('\n\nThe above exception was the direct cause of the following exception:\n\n'
|
|
86
|
+
if self.directly else
|
|
87
|
+
'\n\nDuring handling of the above exception, another exception occurred:\n\n') + result
|
|
93
88
|
if self.cause else
|
|
94
89
|
result
|
|
95
90
|
)
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
from .cache import lock
|
|
2
|
+
from .constants import ENV_PYSCRIPT_NO_GIL
|
|
3
|
+
from .objects import PysPythonFunction, PysFunction
|
|
4
|
+
|
|
5
|
+
from os import environ
|
|
6
|
+
from types import MethodType
|
|
7
|
+
|
|
8
|
+
if environ.get(ENV_PYSCRIPT_NO_GIL) is None:
|
|
9
|
+
|
|
10
|
+
def handle_call(object, context, position):
|
|
11
|
+
with lock:
|
|
12
|
+
|
|
13
|
+
if isinstance(object, PysFunction):
|
|
14
|
+
code = object.__code__
|
|
15
|
+
code.call_context = context
|
|
16
|
+
code.position = position
|
|
17
|
+
|
|
18
|
+
elif isinstance(object, PysPythonFunction):
|
|
19
|
+
code = object.__code__
|
|
20
|
+
code.context = context
|
|
21
|
+
code.position = position
|
|
22
|
+
|
|
23
|
+
elif isinstance(object, type):
|
|
24
|
+
method = getattr(object, '__new__', None)
|
|
25
|
+
if method is not None:
|
|
26
|
+
handle_call(method, context, position)
|
|
27
|
+
|
|
28
|
+
method = getattr(object, '__init__', None)
|
|
29
|
+
if method is not None:
|
|
30
|
+
handle_call(method, context, position)
|
|
31
|
+
|
|
32
|
+
elif isinstance(object, MethodType):
|
|
33
|
+
handle_call(object.__func__, context, position)
|
|
34
|
+
|
|
35
|
+
_GIL = True
|
|
36
|
+
else:
|
|
37
|
+
|
|
38
|
+
def handle_call(object, context, position):
|
|
39
|
+
if isinstance(object, PysFunction):
|
|
40
|
+
code = object.__code__
|
|
41
|
+
code.call_context = context
|
|
42
|
+
code.position = position
|
|
43
|
+
|
|
44
|
+
elif isinstance(object, PysPythonFunction):
|
|
45
|
+
code = object.__code__
|
|
46
|
+
code.context = context
|
|
47
|
+
code.position = position
|
|
48
|
+
|
|
49
|
+
elif isinstance(object, type):
|
|
50
|
+
method = getattr(object, '__new__', None)
|
|
51
|
+
if method is not None:
|
|
52
|
+
handle_call(method, context, position)
|
|
53
|
+
|
|
54
|
+
method = getattr(object, '__init__', None)
|
|
55
|
+
if method is not None:
|
|
56
|
+
handle_call(method, context, position)
|
|
57
|
+
|
|
58
|
+
elif isinstance(object, MethodType):
|
|
59
|
+
handle_call(object.__func__, context, position)
|
|
60
|
+
|
|
61
|
+
_GIL = False
|