Methods now remember their file/line
parent
f9b8f32e67
commit
8a6cd181c4
|
@ -29,8 +29,6 @@
|
||||||
- offer to remove generic words which are not called and have no
|
- offer to remove generic words which are not called and have no
|
||||||
methods
|
methods
|
||||||
- forgetting a tuple class should forget the constructor
|
- forgetting a tuple class should forget the constructor
|
||||||
- methods: remember their file/line
|
|
||||||
- { class generic } jedit, reload DTRT
|
|
||||||
- T{ link f "foo" "bar" } see
|
- T{ link f "foo" "bar" } see
|
||||||
- T{ link f "foo" "bar" } jedit
|
- T{ link f "foo" "bar" } jedit
|
||||||
- T{ link f "foo" "bar" } reload
|
- T{ link f "foo" "bar" } reload
|
||||||
|
|
|
@ -3,12 +3,27 @@
|
||||||
IN: generic
|
IN: generic
|
||||||
USING: words hashtables sequences arrays errors kernel ;
|
USING: words hashtables sequences arrays errors kernel ;
|
||||||
|
|
||||||
|
PREDICATE: array method-spec
|
||||||
|
dup length 2 = [
|
||||||
|
first2 generic? >r class? r> and
|
||||||
|
] [
|
||||||
|
drop f
|
||||||
|
] if ;
|
||||||
|
|
||||||
|
TUPLE: method def loc ;
|
||||||
|
|
||||||
|
M: f method-def ;
|
||||||
|
M: f method-loc ;
|
||||||
|
M: quotation method-def ;
|
||||||
|
M: quotation method-loc drop f ;
|
||||||
|
|
||||||
: method ( class generic -- quot )
|
: method ( class generic -- quot )
|
||||||
"methods" word-prop hash ;
|
"methods" word-prop hash method-def ;
|
||||||
|
|
||||||
: methods ( generic -- alist )
|
: methods ( generic -- alist )
|
||||||
"methods" word-prop hash>alist
|
"methods" word-prop hash>alist
|
||||||
[ [ first ] 2apply class-compare ] sort ;
|
[ [ first ] 2apply class-compare ] sort
|
||||||
|
[ first2 method-def 2array ] map ;
|
||||||
|
|
||||||
: order ( generic -- list )
|
: order ( generic -- list )
|
||||||
"methods" word-prop hash-keys [ class-compare ] sort ;
|
"methods" word-prop hash-keys [ class-compare ] sort ;
|
||||||
|
@ -23,7 +38,7 @@ TUPLE: check-method class generic ;
|
||||||
swap [ "methods" word-prop swap call ] keep ?make-generic ;
|
swap [ "methods" word-prop swap call ] keep ?make-generic ;
|
||||||
inline
|
inline
|
||||||
|
|
||||||
: define-method ( definition class generic -- )
|
: define-method ( method class generic -- )
|
||||||
>r bootstrap-word r> check-method
|
>r bootstrap-word r> check-method
|
||||||
[ set-hash ] with-methods ;
|
[ set-hash ] with-methods ;
|
||||||
|
|
||||||
|
|
|
@ -32,10 +32,10 @@ TUPLE: check-vocab name ;
|
||||||
: parsing? ( word -- ? )
|
: parsing? ( word -- ? )
|
||||||
dup word? [ "parsing" word-prop ] [ drop f ] if ;
|
dup word? [ "parsing" word-prop ] [ drop f ] if ;
|
||||||
|
|
||||||
|
: location ( -- loc ) file get line-number get 2array ;
|
||||||
|
|
||||||
: save-location ( word -- )
|
: save-location ( word -- )
|
||||||
dup set-word
|
dup set-word location "loc" set-word-prop ;
|
||||||
dup line-number get "line" set-word-prop
|
|
||||||
file get "file" set-word-prop ;
|
|
||||||
|
|
||||||
: create-in in get create dup save-location ;
|
: create-in in get create dup save-location ;
|
||||||
|
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
! Copyright (C) 2004, 2005 Slava Pestov.
|
! Copyright (C) 2004, 2005 Slava Pestov.
|
||||||
! See http://factor.sf.net/license.txt for BSD license.
|
! See http://factor.sf.net/license.txt for BSD license.
|
||||||
IN: parser
|
IN: parser
|
||||||
USING: errors generic io kernel math namespaces sequences
|
USING: errors generic hashtables io kernel math namespaces
|
||||||
words ;
|
sequences words ;
|
||||||
|
|
||||||
: file-vocabs ( -- )
|
: file-vocabs ( -- )
|
||||||
"scratchpad" set-in { "syntax" "scratchpad" } set-use ;
|
"scratchpad" set-in { "syntax" "scratchpad" } set-use ;
|
||||||
|
@ -41,8 +41,16 @@ words ;
|
||||||
|
|
||||||
: run-resource ( file -- ) parse-resource call ;
|
: run-resource ( file -- ) parse-resource call ;
|
||||||
|
|
||||||
: word-file ( word -- file )
|
GENERIC: where ( spec -- loc )
|
||||||
"file" word-prop dup
|
|
||||||
[ "resource:/" ?head [ resource-path ] when ] when ;
|
|
||||||
|
|
||||||
: reload ( word -- ) word-file run-file ;
|
M: word where "loc" word-prop ;
|
||||||
|
|
||||||
|
M: method-spec where
|
||||||
|
dup first2 "methods" word-prop hash method-loc
|
||||||
|
[ ] [ second where ] ?if ;
|
||||||
|
|
||||||
|
: ?resource-path ( path -- path )
|
||||||
|
"resource:/" ?head [ resource-path ] when ;
|
||||||
|
|
||||||
|
: reload ( spec -- )
|
||||||
|
where first [ ?resource-path run-file ] when* ;
|
||||||
|
|
|
@ -57,10 +57,6 @@ HELP: run-resource "( path -- )"
|
||||||
{ $description "Parses and runs a library resource." }
|
{ $description "Parses and runs a library resource." }
|
||||||
{ $errors "Throws an I/O error if there was an error reading the resource. Throws a parse error if the input is malformed." } ;
|
{ $errors "Throws an I/O error if there was an error reading the resource. Throws a parse error if the input is malformed." } ;
|
||||||
|
|
||||||
HELP: word-file "( word -- file )"
|
|
||||||
{ $values { "word" "a word" } { "file" "a path name string" } }
|
|
||||||
{ $description "Outputs the file name containing the most recent redefinition of the word, or " { $link f } " if the word was not defined in a file." } ;
|
|
||||||
|
|
||||||
HELP: reload "( word -- )"
|
HELP: reload "( word -- )"
|
||||||
{ $values { "word" "a word" } }
|
{ $values { "word" "a word" } }
|
||||||
{ $description "Reloads the source file containing the most recent redefinition of the word." }
|
{ $description "Reloads the source file containing the most recent redefinition of the word." }
|
||||||
|
|
|
@ -52,7 +52,9 @@ DEFER: !PRIMITIVE: parsing
|
||||||
: !: CREATE dup reset-generic [ define-compound ] f ; parsing
|
: !: CREATE dup reset-generic [ define-compound ] f ; parsing
|
||||||
: !GENERIC: CREATE dup reset-word define-generic ; parsing
|
: !GENERIC: CREATE dup reset-word define-generic ; parsing
|
||||||
: !G: CREATE dup reset-word [ define-generic* ] f ; parsing
|
: !G: CREATE dup reset-word [ define-generic* ] f ; parsing
|
||||||
: !M: scan-word scan-word [ -rot define-method ] f ; parsing
|
: !M:
|
||||||
|
scan-word scan-word
|
||||||
|
[ location <method> -rot define-method ] f ; parsing
|
||||||
|
|
||||||
: !UNION: ( -- class predicate definition )
|
: !UNION: ( -- class predicate definition )
|
||||||
CREATE dup intern-symbol dup predicate-word
|
CREATE dup intern-symbol dup predicate-word
|
||||||
|
|
|
@ -4,13 +4,6 @@ IN: prettyprint
|
||||||
USING: arrays generic hashtables io kernel math namespaces
|
USING: arrays generic hashtables io kernel math namespaces
|
||||||
sequences styles words ;
|
sequences styles words ;
|
||||||
|
|
||||||
PREDICATE: array method-spec
|
|
||||||
dup length 2 = [
|
|
||||||
first2 generic? >r class? r> and
|
|
||||||
] [
|
|
||||||
drop f
|
|
||||||
] if ;
|
|
||||||
|
|
||||||
GENERIC: (synopsis) ( spec -- )
|
GENERIC: (synopsis) ( spec -- )
|
||||||
|
|
||||||
: write-vocab ( vocab -- )
|
: write-vocab ( vocab -- )
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
! Copyright (C) 2004, 2005 Slava Pestov.
|
! Copyright (C) 2004, 2006 Slava Pestov.
|
||||||
! See http://factor.sf.net/license.txt for BSD license.
|
! See http://factorcode.org/license.txt for BSD license.
|
||||||
IN: jedit
|
IN: jedit
|
||||||
USING: arrays errors io kernel listener math namespaces
|
USING: arrays errors io kernel listener math namespaces
|
||||||
parser prettyprint sequences strings words shells ;
|
parser prettyprint sequences strings words shells ;
|
||||||
|
@ -36,9 +36,9 @@ parser prettyprint sequences strings words shells ;
|
||||||
: jedit-file ( file -- )
|
: jedit-file ( file -- )
|
||||||
1array make-jedit-request send-jedit-request ;
|
1array make-jedit-request send-jedit-request ;
|
||||||
|
|
||||||
: jedit ( word -- )
|
: jedit ( spec -- )
|
||||||
#! Note that line numbers here start from 1
|
#! Note that line numbers here start from 1
|
||||||
dup word-file swap "line" word-prop jedit-line/file ;
|
where first2 >r ?resource-path r> jedit-line/file ;
|
||||||
|
|
||||||
! Wire protocol for jEdit to evaluate Factor code.
|
! Wire protocol for jEdit to evaluate Factor code.
|
||||||
! Packets are of the form:
|
! Packets are of the form:
|
||||||
|
|
Loading…
Reference in New Issue