ui.tools.listener: only recall if the lexer-error is aborted (#375)
parent
7bc1009973
commit
705e2b8d4b
|
@ -321,16 +321,30 @@ M: object accept-completion-hook 2drop ;
|
||||||
[ history>> history-add drop ] [ control-value ] [ select-all ] tri
|
[ history>> history-add drop ] [ control-value ] [ select-all ] tri
|
||||||
parse-lines-interactive ;
|
parse-lines-interactive ;
|
||||||
|
|
||||||
: <debugger-popup> ( error continuation -- popup )
|
: do-recall? ( table error -- ? )
|
||||||
over compute-restarts [ hide-glass ] <debugger>
|
[ selection>> value>> not ] [ lexer-error? ] bi* and ;
|
||||||
|
|
||||||
|
: recall-lexer-error ( interactor error -- )
|
||||||
|
over recall-previous go-to-error ;
|
||||||
|
|
||||||
|
: make-restart-hook-quot ( error interactor -- quot )
|
||||||
|
over '[
|
||||||
|
dup hide-glass
|
||||||
|
_ do-recall? [ _ _ recall-lexer-error ] when
|
||||||
|
] ;
|
||||||
|
|
||||||
|
: frame-debugger ( debugger -- labeled )
|
||||||
"Error" debugger-color <framed-labeled> ;
|
"Error" debugger-color <framed-labeled> ;
|
||||||
|
|
||||||
: recall-on-lexer-error ( interactor error -- )
|
:: <debugger-popup> ( error continuation interactor -- popup )
|
||||||
dup lexer-error? [ over recall-previous go-to-error ] [ 2drop ] if ;
|
error
|
||||||
|
continuation
|
||||||
|
error compute-restarts
|
||||||
|
error interactor make-restart-hook-quot
|
||||||
|
<debugger> frame-debugger ;
|
||||||
|
|
||||||
: debugger-popup ( interactor error continuation -- )
|
: debugger-popup ( interactor error continuation -- )
|
||||||
2over recall-on-lexer-error
|
pick <debugger-popup> one-line-elt swap show-listener-popup ;
|
||||||
[ one-line-elt ] 2dip <debugger-popup> show-listener-popup ;
|
|
||||||
|
|
||||||
: try-parse ( lines -- quot/f )
|
: try-parse ( lines -- quot/f )
|
||||||
[ parse-lines-interactive ] [ nip '[ _ rethrow ] ] recover ;
|
[ parse-lines-interactive ] [ nip '[ _ rethrow ] ] recover ;
|
||||||
|
|
Loading…
Reference in New Issue