factor/basis/ui/tools/debugger/debugger.factor

104 lines
3.1 KiB
Factor
Raw Normal View History

2009-02-09 01:25:05 -05:00
! Copyright (C) 2006, 2009 Slava Pestov.
2007-09-20 18:09:08 -04:00
! See http://factorcode.org/license.txt for BSD license.
2008-11-24 13:29:24 -05:00
USING: accessors arrays hashtables io kernel math models
2009-02-14 01:45:10 -05:00
colors.constants namespaces sequences sequences words continuations
debugger prettyprint help editors fonts ui ui.commands ui.gestures
ui.gadgets ui.pens.solid ui.gadgets.worlds ui.gadgets.packs
ui.gadgets.buttons ui.gadgets.labels ui.gadgets.panes
ui.gadgets.presentations ui.gadgets.viewports ui.gadgets.tables
ui.gadgets.tracks ui.gadgets.scrollers ui.gadgets.panes
ui.gadgets.borders ui.gadgets.status-bar ui.tools.traceback
ui.tools.inspector ;
2007-09-20 18:09:08 -04:00
IN: ui.tools.debugger
2008-11-24 13:29:24 -05:00
TUPLE: debugger < track error restarts restart-hook restart-list continuation ;
<PRIVATE
2009-02-09 01:25:05 -05:00
SINGLETON: restart-renderer
M: restart-renderer row-columns
drop [ name>> ] [ "Abort" ] if* "• " prepend 1array ;
2008-11-24 13:29:24 -05:00
: <restart-list> ( debugger -- gadget )
2009-02-09 01:25:05 -05:00
dup restarts>> f prefix <model> <table>
[ [ \ restart invoke-command ] when* ] >>action
swap restart-hook>> >>hook
restart-renderer >>renderer
t >>selection-required?
t >>single-click? ; inline
2007-09-20 18:09:08 -04:00
2008-11-24 13:29:24 -05:00
: <error-pane> ( error -- pane )
<pane> [ [ print-error ] with-pane ] keep ; inline
2007-09-20 18:09:08 -04:00
2009-02-09 01:25:05 -05:00
: <error-display> ( debugger -- gadget )
[ <filled-pile> ] dip
[ error>> <error-pane> add-gadget ]
[
dup restart-hook>> [
[ "To continue, pick one of the options below:" <label> add-gadget ] dip
restart-list>> add-gadget
] [ drop ] if
] bi ;
2008-11-24 13:29:24 -05:00
PRIVATE>
2007-09-20 18:09:08 -04:00
2009-02-09 01:25:05 -05:00
: <debugger> ( error continuation restarts restart-hook -- gadget )
vertical debugger new-track
2009-02-09 01:25:05 -05:00
{ 3 3 } >>gap
2008-11-24 13:29:24 -05:00
swap >>restart-hook
swap >>restarts
2009-02-09 01:25:05 -05:00
swap >>continuation
2008-11-24 13:29:24 -05:00
swap >>error
2009-02-09 01:25:05 -05:00
add-toolbar
2008-11-24 13:29:24 -05:00
dup <restart-list> >>restart-list
2009-02-14 01:45:10 -05:00
dup <error-display> f track-add
COLOR: white <solid> >>interior ;
2007-09-20 18:09:08 -04:00
2009-02-09 01:25:05 -05:00
M: debugger focusable-child*
dup restart-hook>> [ restart-list>> ] [ drop t ] if ;
2007-09-20 18:09:08 -04:00
2009-02-09 01:25:05 -05:00
: debugger-window ( error continuation -- )
2007-09-20 18:09:08 -04:00
#! No restarts for the debugger window
2009-02-13 02:00:02 -05:00
f f <debugger> "Error" open-status-window ;
2007-09-20 18:09:08 -04:00
GENERIC: error-in-debugger? ( error -- ? )
M: world-error error-in-debugger? world>> gadget-child debugger? ;
M: object error-in-debugger? drop f ;
[
2009-02-09 01:25:05 -05:00
dup error-in-debugger?
[ rethrow ] [ error-continuation get debugger-window ] if
] ui-error-hook set-global
2007-09-20 18:09:08 -04:00
M: world-error error.
"An error occurred while drawing the world " write
dup world>> pprint-short "." print
2007-09-20 18:09:08 -04:00
"This world has been deactivated to prevent cascading errors." print
error>> error. ;
2007-09-20 18:09:08 -04:00
debugger "gestures" f {
{ T{ button-down } request-focus }
} define-command-map
2009-02-09 01:25:05 -05:00
: com-inspect ( debugger -- ) error>> inspector ;
2008-11-24 13:29:24 -05:00
2009-02-09 01:25:05 -05:00
: com-traceback ( debugger -- ) continuation>> traceback-window ;
2008-11-24 13:29:24 -05:00
: com-help ( debugger -- ) error>> (:help) ;
2007-09-20 18:09:08 -04:00
2008-11-24 13:29:24 -05:00
\ com-help H{ { +listener+ t } } define-command
2007-09-20 18:09:08 -04:00
2008-11-24 13:29:24 -05:00
: com-edit ( debugger -- ) error>> (:edit) ;
2007-09-20 18:09:08 -04:00
2008-11-24 13:29:24 -05:00
\ com-edit H{ { +listener+ t } } define-command
2007-09-20 18:09:08 -04:00
debugger "toolbar" f {
2009-02-09 01:25:05 -05:00
{ T{ key-down f { C+ } "i" } com-inspect }
{ T{ key-down f { C+ } "t" } com-traceback }
{ T{ key-down f { C+ } "h" } com-help }
{ T{ key-down f { C+ } "e" } com-edit }
2007-09-20 18:09:08 -04:00
} define-command-map