From f669d2c9f18d11b6b8f7ffddd492220d5a405be4 Mon Sep 17 00:00:00 2001 From: Slava Pestov Date: Fri, 4 Apr 2008 04:12:25 -0500 Subject: [PATCH] Fixing editors for parse-error/condition changes --- extra/editors/editors.factor | 39 ++++++++++++++++++++++++------------ 1 file changed, 26 insertions(+), 13 deletions(-) diff --git a/extra/editors/editors.factor b/extra/editors/editors.factor index e871d5f808..16de8f5eee 100755 --- a/extra/editors/editors.factor +++ b/extra/editors/editors.factor @@ -3,7 +3,7 @@ USING: parser kernel namespaces sequences definitions io.files inspector continuations tools.crossref tools.vocabs io prettyprint source-files assocs vocabs vocabs.loader -io.backend splitting classes.tuple ; +io.backend splitting accessors ; IN: editors TUPLE: no-edit-hook ; @@ -18,7 +18,7 @@ SYMBOL: edit-hook : editor-restarts ( -- alist ) available-editors - [ "Load " over append swap ] { } map>assoc ; + [ [ "Load " prepend ] keep ] { } map>assoc ; : no-edit-hook ( -- ) \ no-edit-hook construct-empty @@ -26,7 +26,7 @@ SYMBOL: edit-hook require ; : edit-location ( file line -- ) - >r (normalize-path) "\\\\?\\" ?head drop r> + >r (normalize-path) r> edit-hook get [ call ] [ no-edit-hook edit-location ] if* ; : edit ( defspec -- ) @@ -35,18 +35,31 @@ SYMBOL: edit-hook : edit-vocab ( name -- ) vocab-source-path 1 edit-location ; +GENERIC: find-parse-error ( error -- error' ) + +M: parse-error find-parse-error + dup error>> find-parse-error [ ] [ ] ?if ; + +M: condition find-parse-error + error>> find-parse-error ; + +M: object find-parse-error + drop f ; + : :edit ( -- ) - error get delegates [ parse-error? ] find-last nip [ - dup parse-error-file source-file-path - swap parse-error-line edit-location + error get find-parse-error [ + [ file>> path>> ] [ line>> ] bi edit-location ] when* ; : fix ( word -- ) - "Fixing " write dup pprint " and all usages..." print nl - dup usage swap prefix [ - "Editing " write dup . - "RETURN moves on to the next usage, C+d stops." print - flush - edit - readln + [ "Fixing " write pprint " and all usages..." print nl ] + [ [ usage ] keep prefix ] bi + [ + [ "Editing " write . ] + [ + "RETURN moves on to the next usage, C+d stops." print + flush + edit + readln + ] bi ] all? drop ;