Skip to content

Instantly share code, notes, and snippets.

@crisidev
Forked from georgexsh/goto.py
Created May 5, 2020 14:05
Show Gist options
  • Select an option

  • Save crisidev/3243e8b925ff39eb668d90604a7f7e4a to your computer and use it in GitHub Desktop.

Select an option

Save crisidev/3243e8b925ff39eb668d90604a7f7e4a to your computer and use it in GitHub Desktop.

Revisions

  1. @georgexsh georgexsh created this gist Sep 18, 2017.
    36 changes: 36 additions & 0 deletions goto.py
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,36 @@
    import sys

    def j(lineno):
    frame = sys._getframe().f_back
    called_from = frame

    def hook(frame, event, arg):
    if event == 'line' and frame == called_from:
    try:
    frame.f_lineno = lineno
    except ValueError as e:
    print "jump failed:", e
    while frame:
    frame.f_trace = None
    frame = frame.f_back
    return None
    return hook

    while frame:
    frame.f_trace = hook
    frame = frame.f_back
    sys.settrace(hook)


    def foo():
    a = 1
    j(30)
    a = 2
    print 1
    print 2
    if a == 1:
    j(28)
    print 4


    foo()
    4 changes: 4 additions & 0 deletions output
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,4 @@
    2
    1
    2
    4