pyscript-programming-language 1.3.1__tar.gz → 1.5.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (69) hide show
  1. {pyscript_programming_language-1.3.1 → pyscript_programming_language-1.5.0}/PKG-INFO +5 -2
  2. pyscript_programming_language-1.5.0/pyscript/__init__.py +34 -0
  3. pyscript_programming_language-1.5.0/pyscript/__init__.pyi +73 -0
  4. pyscript_programming_language-1.5.0/pyscript/__main__.py +172 -0
  5. {pyscript_programming_language-1.3.1 → pyscript_programming_language-1.5.0}/pyscript/core/__init__.py +1 -1
  6. {pyscript_programming_language-1.3.1 → pyscript_programming_language-1.5.0}/pyscript/core/analyzer.py +154 -101
  7. pyscript_programming_language-1.5.0/pyscript/core/bases.py +2 -0
  8. pyscript_programming_language-1.5.0/pyscript/core/buffer.py +33 -0
  9. pyscript_programming_language-1.5.0/pyscript/core/cache.py +96 -0
  10. {pyscript_programming_language-1.3.1 → pyscript_programming_language-1.5.0}/pyscript/core/constants.py +46 -35
  11. pyscript_programming_language-1.5.0/pyscript/core/context.py +54 -0
  12. pyscript_programming_language-1.5.0/pyscript/core/exceptions.py +110 -0
  13. pyscript_programming_language-1.5.0/pyscript/core/handlers.py +82 -0
  14. {pyscript_programming_language-1.3.1 → pyscript_programming_language-1.5.0}/pyscript/core/highlight.py +46 -39
  15. pyscript_programming_language-1.5.0/pyscript/core/interpreter.py +1265 -0
  16. {pyscript_programming_language-1.3.1 → pyscript_programming_language-1.5.0}/pyscript/core/lexer.py +56 -33
  17. pyscript_programming_language-1.5.0/pyscript/core/nodes.py +503 -0
  18. {pyscript_programming_language-1.3.1 → pyscript_programming_language-1.5.0}/pyscript/core/objects.py +58 -57
  19. {pyscript_programming_language-1.3.1 → pyscript_programming_language-1.5.0}/pyscript/core/parser.py +608 -299
  20. pyscript_programming_language-1.5.0/pyscript/core/position.py +97 -0
  21. {pyscript_programming_language-1.3.1 → pyscript_programming_language-1.5.0}/pyscript/core/pysbuiltins.py +99 -75
  22. {pyscript_programming_language-1.3.1 → pyscript_programming_language-1.5.0}/pyscript/core/results.py +5 -5
  23. {pyscript_programming_language-1.3.1 → pyscript_programming_language-1.5.0}/pyscript/core/runner.py +116 -80
  24. {pyscript_programming_language-1.3.1 → pyscript_programming_language-1.5.0}/pyscript/core/symtab.py +28 -15
  25. pyscript_programming_language-1.5.0/pyscript/core/token.py +39 -0
  26. pyscript_programming_language-1.5.0/pyscript/core/utils/__init__.py +13 -0
  27. pyscript_programming_language-1.5.0/pyscript/core/utils/constants.py +151 -0
  28. pyscript_programming_language-1.5.0/pyscript/core/utils/debug.py +35 -0
  29. pyscript_programming_language-1.5.0/pyscript/core/utils/decorators.py +44 -0
  30. pyscript_programming_language-1.5.0/pyscript/core/utils/general.py +139 -0
  31. pyscript_programming_language-1.5.0/pyscript/core/version.py +36 -0
  32. pyscript_programming_language-1.5.0/pyscript/lib/67.pys +1 -0
  33. pyscript_programming_language-1.5.0/pyscript/lib/__hello__.pys +7 -0
  34. {pyscript_programming_language-1.3.1 → pyscript_programming_language-1.5.0}/pyscript/lib/brainfuck.pys +53 -42
  35. {pyscript_programming_language-1.3.1 → pyscript_programming_language-1.5.0}/pyscript/lib/getch.pys +2 -1
  36. {pyscript_programming_language-1.3.1 → pyscript_programming_language-1.5.0}/pyscript/lib/jsdict.pys +1 -9
  37. pyscript_programming_language-1.5.0/pyscript/lib/parser.pys +161 -0
  38. pyscript_programming_language-1.5.0/pyscript/lib/this.pys +19 -0
  39. {pyscript_programming_language-1.3.1 → pyscript_programming_language-1.5.0}/pyscript_programming_language.egg-info/PKG-INFO +5 -2
  40. {pyscript_programming_language-1.3.1 → pyscript_programming_language-1.5.0}/pyscript_programming_language.egg-info/SOURCES.txt +7 -2
  41. pyscript_programming_language-1.5.0/pyscript_programming_language.egg-info/requires.txt +3 -0
  42. {pyscript_programming_language-1.3.1 → pyscript_programming_language-1.5.0}/setup.py +5 -2
  43. pyscript_programming_language-1.3.1/pyscript/__init__.py +0 -33
  44. pyscript_programming_language-1.3.1/pyscript/__init__.pyi +0 -54
  45. pyscript_programming_language-1.3.1/pyscript/__main__.py +0 -142
  46. pyscript_programming_language-1.3.1/pyscript/core/bases.py +0 -4
  47. pyscript_programming_language-1.3.1/pyscript/core/buffer.py +0 -26
  48. pyscript_programming_language-1.3.1/pyscript/core/cache.py +0 -15
  49. pyscript_programming_language-1.3.1/pyscript/core/context.py +0 -19
  50. pyscript_programming_language-1.3.1/pyscript/core/exceptions.py +0 -81
  51. pyscript_programming_language-1.3.1/pyscript/core/handlers.py +0 -62
  52. pyscript_programming_language-1.3.1/pyscript/core/interpreter.py +0 -1192
  53. pyscript_programming_language-1.3.1/pyscript/core/nodes.py +0 -328
  54. pyscript_programming_language-1.3.1/pyscript/core/position.py +0 -92
  55. pyscript_programming_language-1.3.1/pyscript/core/singletons.py +0 -119
  56. pyscript_programming_language-1.3.1/pyscript/core/token.py +0 -25
  57. pyscript_programming_language-1.3.1/pyscript/core/utils.py +0 -168
  58. pyscript_programming_language-1.3.1/pyscript/core/version.py +0 -5
  59. pyscript_programming_language-1.3.1/pyscript/lib/__hello__.pys +0 -5
  60. pyscript_programming_language-1.3.1/pyscript/lib/parser.pys +0 -93
  61. pyscript_programming_language-1.3.1/pyscript/lib/this.pys +0 -19
  62. {pyscript_programming_language-1.3.1 → pyscript_programming_language-1.5.0}/MANIFEST.in +0 -0
  63. {pyscript_programming_language-1.3.1 → pyscript_programming_language-1.5.0}/README.md +0 -0
  64. {pyscript_programming_language-1.3.1 → pyscript_programming_language-1.5.0}/pyscript/lib/clock.pys +0 -0
  65. {pyscript_programming_language-1.3.1 → pyscript_programming_language-1.5.0}/pyscript/lib/sys.pys +0 -0
  66. {pyscript_programming_language-1.3.1 → pyscript_programming_language-1.5.0}/pyscript/this.py +0 -0
  67. {pyscript_programming_language-1.3.1 → pyscript_programming_language-1.5.0}/pyscript_programming_language.egg-info/dependency_links.txt +0 -0
  68. {pyscript_programming_language-1.3.1 → pyscript_programming_language-1.5.0}/pyscript_programming_language.egg-info/top_level.txt +0 -0
  69. {pyscript_programming_language-1.3.1 → pyscript_programming_language-1.5.0}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pyscript-programming-language
3
- Version: 1.3.1
3
+ Version: 1.5.0
4
4
  Summary: PyScript Programming Language
5
5
  Home-page: https://github.com/azzammuhyala/pyscript
6
6
  Author: azzammuhyala
@@ -15,8 +15,10 @@ Classifier: Intended Audience :: Developers
15
15
  Classifier: Topic :: Software Development :: Libraries :: Python Modules
16
16
  Classifier: Topic :: Software Development :: Interpreters
17
17
  Classifier: Topic :: Software Development :: Compilers
18
- Requires-Python: >=3.5
18
+ Requires-Python: >=3.10
19
19
  Description-Content-Type: text/markdown
20
+ Provides-Extra: typecheck
21
+ Requires-Dist: beartype; extra == "typecheck"
20
22
  Dynamic: author
21
23
  Dynamic: author-email
22
24
  Dynamic: classifier
@@ -26,6 +28,7 @@ Dynamic: home-page
26
28
  Dynamic: keywords
27
29
  Dynamic: license
28
30
  Dynamic: project-url
31
+ Dynamic: provides-extra
29
32
  Dynamic: requires-python
30
33
  Dynamic: summary
31
34
 
@@ -0,0 +1,34 @@
1
+ """
2
+ PyScript is a programming language written in Python. \
3
+ This language is not isolated and is directly integrated with the Python's library and namespace levels.
4
+ """
5
+
6
+ if __import__('sys').version_info < (3, 10):
7
+ raise ImportError("Python version 3.10 and above is required to run PyScript")
8
+
9
+ from . import core
10
+
11
+ from .core.constants import DEFAULT, DEBUG, SILENT, RETRES, COMMENT, NO_COLOR, REVERSE_POW_XOR
12
+ from .core.cache import undefined
13
+ from .core.highlight import HLFMT_HTML, HLFMT_ANSI, pys_highlight
14
+ from .core.runner import pys_exec, pys_eval, pys_shell
15
+ from .core.version import version_info, __version__, __date__
16
+
17
+ __all__ = (
18
+ 'core',
19
+ 'DEFAULT',
20
+ 'DEBUG',
21
+ 'SILENT',
22
+ 'RETRES',
23
+ 'COMMENT',
24
+ 'NO_COLOR',
25
+ 'REVERSE_POW_XOR',
26
+ 'HLFMT_HTML',
27
+ 'HLFMT_ANSI',
28
+ 'undefined',
29
+ 'version_info',
30
+ 'pys_highlight',
31
+ 'pys_exec',
32
+ 'pys_eval',
33
+ 'pys_shell'
34
+ )
@@ -0,0 +1,73 @@
1
+ from typing import TYPE_CHECKING, Any, Callable, Iterator, Literal, Optional
2
+
3
+ if TYPE_CHECKING:
4
+ from .core.buffer import PysFileBuffer
5
+ from .core.cache import PysUndefined
6
+ from .core.highlight import _HighlightFormatter
7
+ from .core.position import PysPosition
8
+ from .core.results import PysExecuteResult
9
+ from .core.symtab import PysSymbolTable
10
+ from .core.version import PysVersionInfo
11
+
12
+ from io import IOBase
13
+
14
+ from . import core as core
15
+
16
+ DEFAULT: int
17
+ DEBUG: int
18
+ SILENT: int
19
+ RETRES: int
20
+ COMMENT: int
21
+ NO_COLOR: int
22
+ REVERSE_POW_XOR: int
23
+
24
+ HLFMT_HTML: _HighlightFormatter
25
+ HLFMT_ANSI: _HighlightFormatter
26
+
27
+ undefined: PysUndefined
28
+ version_info: PysVersionInfo
29
+
30
+ def pys_highlight(
31
+ source: str | bytes | bytearray | Iterator | Callable | IOBase | PysFileBuffer,
32
+ format: Optional[
33
+ Callable[
34
+ [
35
+ str | Literal[
36
+ 'start',
37
+ 'bracket-unmatch',
38
+ 'identifier', 'identifier-const', 'identifier-call', 'identifier-class',
39
+ 'keyword', 'keyword-identifier',
40
+ 'number', 'string', 'comment', 'newline',
41
+ 'default',
42
+ 'end'
43
+ ],
44
+ PysPosition,
45
+ str
46
+ ],
47
+ str
48
+ ]
49
+ ] = None,
50
+ max_parenthesis_level: int = 3,
51
+ flags: int = DEFAULT
52
+ ) -> str: ...
53
+
54
+ def pys_exec(
55
+ source: str | bytes | bytearray | Iterator | Callable | IOBase | PysFileBuffer,
56
+ globals: Optional[dict[str, Any] | PysSymbolTable | PysUndefined] = None,
57
+ flags: int = DEFAULT
58
+ ) -> None | PysExecuteResult: ...
59
+
60
+ def pys_eval(
61
+ source: str | bytes | bytearray | Iterator | Callable | IOBase | PysFileBuffer,
62
+ globals: Optional[dict[str, Any] | PysSymbolTable | PysUndefined] = None,
63
+ flags: int = DEFAULT
64
+ ) -> Any | PysExecuteResult: ...
65
+
66
+ def pys_shell(
67
+ globals: Optional[dict[str, Any] | PysSymbolTable | PysUndefined] = None,
68
+ flags: int = DEFAULT
69
+ ) -> int | Any: ...
70
+
71
+ __version__: str
72
+ __date__: str
73
+ __all__: tuple[str]
@@ -0,0 +1,172 @@
1
+ from .core.buffer import PysFileBuffer
2
+ from .core.cache import undefined
3
+ from .core.constants import DEFAULT, DEBUG, NO_COLOR
4
+ from .core.handlers import handle_execute
5
+ from .core.highlight import HLFMT_HTML, HLFMT_ANSI, pys_highlight
6
+ from .core.runner import pys_runner, pys_shell
7
+ from .core.symtab import build_symbol_table
8
+ from .core.utils.general import normalize_path
9
+ from .core.version import __version__
10
+
11
+ from argparse import ArgumentParser
12
+
13
+ from sys import executable, version_info, exit, setrecursionlimit
14
+ from os.path import basename, splitext
15
+
16
+ parser = ArgumentParser(
17
+ prog=splitext(basename(executable))[0] + ' -m pyscript',
18
+ description='PyScript Launcher for Python Version ' + '.'.join(map(str, version_info))
19
+ )
20
+
21
+ parser.add_argument(
22
+ 'file',
23
+ type=str,
24
+ nargs='?',
25
+ default=None,
26
+ help="file path"
27
+ )
28
+
29
+ parser.add_argument(
30
+ '-v', '--version',
31
+ action='version',
32
+ version=f"PyScript {__version__}",
33
+ )
34
+
35
+ parser.add_argument(
36
+ '-c', '--command',
37
+ type=str,
38
+ default=None,
39
+ help="execute PyScript from argument",
40
+ )
41
+
42
+ parser.add_argument(
43
+ '-d', '--debug',
44
+ action='store_true',
45
+ help="set a debug flag, this will remove the assert statement"
46
+ )
47
+
48
+ parser.add_argument(
49
+ '-i', '--inspect',
50
+ action='store_true',
51
+ help="inspect interactively after running a file",
52
+ )
53
+
54
+ parser.add_argument(
55
+ '-l', '--highlight',
56
+ choices=('html', 'ansi'),
57
+ default=None,
58
+ help='generate PyScript highlight code from a file'
59
+ )
60
+
61
+ parser.add_argument(
62
+ '-n', '--no-color',
63
+ action='store_true',
64
+ help="no colorful traceback"
65
+ )
66
+
67
+ parser.add_argument(
68
+ '-r', '--py-recursion',
69
+ type=int,
70
+ default=None,
71
+ help="set a python recursion limit"
72
+ )
73
+
74
+ args = parser.parse_args()
75
+
76
+ if args.highlight and args.file is None:
77
+ parser.error("-l, --highlight: file path require")
78
+
79
+ if args.py_recursion is not None:
80
+ try:
81
+ setrecursionlimit(args.py_recursion)
82
+ except BaseException as e:
83
+ parser.error(f"-r, --py-recursion: {e}")
84
+
85
+ code = 0
86
+ flags = DEFAULT
87
+
88
+ if args.debug:
89
+ flags |= DEBUG
90
+ if args.no_color:
91
+ flags |= NO_COLOR
92
+
93
+ if args.file is not None:
94
+ path = normalize_path(args.file)
95
+
96
+ try:
97
+ with open(path, 'r') as file:
98
+ file = PysFileBuffer(file, path)
99
+
100
+ except FileNotFoundError:
101
+ parser.error(f"can't open file {path!r}: No such file or directory")
102
+
103
+ except PermissionError:
104
+ parser.error(f"can't open file {path!r}: Permission denied.")
105
+
106
+ except IsADirectoryError:
107
+ parser.error(f"can't open file {path!r}: Path is not a file.")
108
+
109
+ except NotADirectoryError:
110
+ parser.error(f"can't open file {path!r}: Attempting to access directory from file.")
111
+
112
+ except (OSError, IOError):
113
+ parser.error(f"can't open file {path!r}: Attempting to access a system directory or file.")
114
+
115
+ except UnicodeDecodeError:
116
+ parser.error(f"can't read file {path!r}: Bad file.")
117
+
118
+ except BaseException as e:
119
+ parser.error(f"file {path!r}: Unexpected error: {e}")
120
+
121
+ if args.highlight:
122
+ try:
123
+ print(
124
+ pys_highlight(
125
+ file,
126
+ HLFMT_HTML if args.highlight == 'html' else HLFMT_ANSI
127
+ )
128
+ )
129
+ except BaseException as e:
130
+ parser.error(f"file {path!r}: Tokenize error: {e}")
131
+
132
+ else:
133
+ symtab = build_symbol_table(file)
134
+ symtab.set('__name__', '__main__')
135
+
136
+ result = pys_runner(
137
+ file=file,
138
+ mode='exec',
139
+ symbol_table=symtab,
140
+ flags=flags
141
+ )
142
+
143
+ code = handle_execute(result)
144
+
145
+ if args.inspect:
146
+ code = pys_shell(
147
+ globals=result.context.symbol_table,
148
+ flags=result.context.flags
149
+ )
150
+
151
+ elif args.command is not None:
152
+ file = PysFileBuffer(args.command)
153
+
154
+ symtab = build_symbol_table(file)
155
+ symtab.set('__name__', '__main__')
156
+
157
+ code = handle_execute(
158
+ pys_runner(
159
+ file=file,
160
+ mode='exec',
161
+ symbol_table=symtab,
162
+ flags=flags
163
+ )
164
+ )
165
+
166
+ else:
167
+ code = pys_shell(
168
+ globals=undefined,
169
+ flags=flags
170
+ )
171
+
172
+ exit(code)
@@ -21,7 +21,6 @@ from . import (
21
21
  pysbuiltins,
22
22
  results,
23
23
  runner,
24
- singletons,
25
24
  symtab,
26
25
  token,
27
26
  utils,
@@ -38,6 +37,7 @@ __all__ = (
38
37
  'exceptions',
39
38
  'handlers',
40
39
  'highlight',
40
+ 'immutables',
41
41
  'interpreter',
42
42
  'lexer',
43
43
  'nodes',