Skip to content

Latest commit

 

History

History
47 lines (33 loc) · 2.17 KB

README.md

File metadata and controls

47 lines (33 loc) · 2.17 KB

Adding GOTO statement into Python

GOTO Considered harmful by Edgar Dijkstra

"Your scientists were so preoccupied with whether or not they could, they didn’t stop to think if they should." - That JURASSIC PARK guy

You guys remember basic.

Just what it sounds like, a decorator that patches the bytecode of a decorated function to allow variable assignments to specific string constants to be treated as GOTO/JUMP statements and LABELS to jump to.

Just in case it needs to be said, yes this is a joke and has no actual uses, nor should anyone use it for anything real other than having fun.

XKCD Comic, GOTO

All relevant code in main.py.

Use:

@goto_mutator            #   << Decorate func you want to patch GOTOs into with mutator
some_func():
  pass                   #   << Do regular stuff
  pass
  pass 
  x = "#GOTO_mylabel"    #   << This is the goto statement, var name does not matter,
                         #      statement has to be a string const, 
                         #      starting with keyword #GOTO_ after that label name
  pass
  pass
  pass                     #  <<  Do more regular stuff, of course after patching 
                           #      the goto statemet will skip right over this secion
                              
  x = "#GOTOLABEL_mylabel" #  << This is the LABEL we will that will be jumped to
  pass 
  pass                     #  << Keep doing stuff 

You should be able to define as many jumps and labels as desired, mutator will build a map and patch in jumps.

Live REPL demo here: https://replit.com/@HristoGueorguie/Adding-GOTO-statement-to-Python-cue-eveil-laughter.


Links to refs:

https://rushter.com/blog/python-bytecode-patch/ - Patching bytecode article by Artem Golubin

https://www.aosabook.org/en/500L/a-python-interpreter-written-in-python.html - Python Interpreter in Python article by Allison Kaptur