bytecode macro lib
exposes (a slightly modified version of) the bytecode of a function to allow for run-time modification of python syntax.
how to use
for a description of how to use and install the program, please go to the docs folder on the github (https://github.com/Glubs9/bytecodemacro).
cool example to get you excited
this is a cool example to get you excited with what this library could do and the fun you can have doing it.
def goto(tups):
ret = []
for n in tups:
inst, arg = n
if inst == "LOAD_CONST" and len(arg) > 6 and arg[1:5] == "goto":
ret.append(("JUMP_ABSOLUTE", arg[6:-1]))
elif inst == "LOAD_CONST" and len(arg) > 2 and arg[-2] == ":":
ret.append(("LABEL", arg[1:-2]))
else:
ret.append(n)
return ret
@macro(goto)
def f():
n = 0
while n < 10:
if n > 5:
_ = "goto exit"
print(n)
n+=1
_ = "exit:"
f() #prints 1 2 3 4 5 !
please have fun writing your own macros! or just have fun looking at the examples in docs/examples.py in the github
basic installation
please read through install.txt for requirements but if you just want to get it installed before looking through the library the comamnd is.
python3 -m pip install bytecodemacro
todo
- add error / semantics checking for the returned bytecode (maybe)
- add more examples
- order examples.py by ease of understanding
- so the easy ones to read like constant and add_arg are at the top but the ones
that are harder like cloop or join are at the bottom
- fix walrus.py
- test and then handle encountering the extended arg instruction in the uncompile package
- i am also still lost on closures and co_freevars
Release files for bytecodemacro 2.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| bytecodemacro-2.1.0.tar.gz | 27.0 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| bytecodemacro-2.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 61.8 kB
Release files / bytecodemacro-2.1.0.tar.gz
| Download URL | bytecodemacro-2.1.0.tar.gz |
|---|---|
| Size | 27.0 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
b95ebcc861aa1cf3999418621a952fd5dee21daeacaf537508a7b141fc362279
|
|
BLAKE2b-256 checksum How to use checksums |
f3c034dbcd0fec332ac7fe4afa6a3c5baa70f979da4e3f2d13fffa97af0f4a35
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/3.4.1 importlib_metadata/4.0.1 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.60.0 CPython/3.9.0
|
Release files / bytecodemacro-2.1.0-py3-none-any.whl
| Download URL | bytecodemacro-2.1.0-py3-none-any.whl |
|---|---|
| Size | 34.8 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
0bc07f261587c7a9130a6e71c1cc03bdcf003be7efc21a653476e4aa88a0334d
|
|
BLAKE2b-256 checksum How to use checksums |
06be8472aabfd919150d0c33e8077e60e118a68d9cd459208fdda9536f1605a4
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/3.4.1 importlib_metadata/4.0.1 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.60.0 CPython/3.9.0
|