Remove extra/visitor now that we have extra/multi-methods
parent
8373b63076
commit
ba0ecf3ce1
|
@ -1 +0,0 @@
|
|||
Daniel Ehrenberg
|
|
@ -1 +0,0 @@
|
|||
Double-dispatch generic words
|
|
@ -1 +0,0 @@
|
|||
extensions
|
|
@ -1,18 +0,0 @@
|
|||
USING: visitor math sequences math.parser strings tools.test kernel ;
|
||||
|
||||
VISITOR: ++ ( object object -- object )
|
||||
! acts like +, coercing string arguments to a number, unless both arguments are strings, in which case it appends them
|
||||
|
||||
V: number string ++
|
||||
string>number + ;
|
||||
V: string number ++
|
||||
>r string>number r> + ;
|
||||
V: number number ++
|
||||
+ ;
|
||||
V: string string ++
|
||||
append ;
|
||||
|
||||
[ 3 ] [ 1 2 ++ ] unit-test
|
||||
[ 3 ] [ "1" 2 ++ ] unit-test
|
||||
[ 3 ] [ 1 "2" ++ ] unit-test
|
||||
[ "12" ] [ "1" "2" ++ ] unit-test
|
|
@ -1,63 +0,0 @@
|
|||
USING: kernel generic.standard syntax words parser assocs
|
||||
generic quotations sequences effects arrays classes definitions
|
||||
prettyprint sorting prettyprint.backend shuffle ;
|
||||
IN: visitor
|
||||
|
||||
: define-visitor ( word -- )
|
||||
dup dup reset-word define-simple-generic
|
||||
dup H{ } clone "visitor-methods" set-word-prop
|
||||
H{ } clone "visitors" set-word-prop ;
|
||||
|
||||
: VISITOR:
|
||||
CREATE define-visitor ; parsing
|
||||
|
||||
: record-visitor ( top-class generic method-word -- )
|
||||
swap "visitors" word-prop swapd set-at ;
|
||||
|
||||
: define-1generic ( word -- )
|
||||
1 <standard-combination> define-generic ;
|
||||
|
||||
: copy-effect ( from to -- )
|
||||
swap stack-effect "declared-effect" set-word-prop ;
|
||||
|
||||
: new-vmethod ( method bottom-class top-class generic -- )
|
||||
gensym dup define-1generic
|
||||
2dup copy-effect
|
||||
3dup 1quotation -rot define-method
|
||||
[ record-visitor ] keep
|
||||
define-method ;
|
||||
|
||||
: define-visitor-method ( method bottom-class top-class generic -- )
|
||||
4dup >r 2array r> "visitor-methods" word-prop set-at
|
||||
2dup "visitors" word-prop at
|
||||
[ nip define-method ] [ new-vmethod ] ?if ;
|
||||
|
||||
: V:
|
||||
! syntax: V: bottom-class top-class generic body... ;
|
||||
f set-word scan-word scan-word scan-word
|
||||
parse-definition -roll define-visitor-method ; parsing
|
||||
|
||||
! see instance:
|
||||
! see must be redone because "methods" doesn't show methods
|
||||
|
||||
PREDICATE: standard-generic visitor "visitors" word-prop ;
|
||||
PREDICATE: array triple length 3 = ;
|
||||
PREDICATE: triple visitor-spec
|
||||
first3 visitor? >r [ class? ] both? r> and ;
|
||||
|
||||
M: visitor-spec definer drop \ V: \ ; ;
|
||||
M: visitor definer drop \ VISITOR: f ;
|
||||
|
||||
M: visitor-spec synopsis*
|
||||
! same as method-spec#synopsis*
|
||||
dup definer drop pprint-word
|
||||
[ pprint-word ] each ;
|
||||
|
||||
M: visitor-spec definition
|
||||
first3 >r 2array r> "visitor-methods" word-prop at ;
|
||||
|
||||
M: visitor see
|
||||
dup (see)
|
||||
dup see-class
|
||||
dup "visitor-methods" word-prop keys natural-sort swap
|
||||
[ >r first2 r> 3array ] curry map see-all ;
|
Loading…
Reference in New Issue