add initial-quot: syntax for tuples

db4
Doug Coleman 2009-06-11 19:48:14 -05:00
parent 46a50fe0b9
commit 059eb399f0
5 changed files with 45 additions and 6 deletions

View File

@ -80,6 +80,7 @@ IN: bootstrap.syntax
">>" ">>"
"call-next-method" "call-next-method"
"initial:" "initial:"
"initial-quot:"
"read-only" "read-only"
"call(" "call("
"execute(" "execute("

View File

@ -1,7 +1,7 @@
IN: classes.tuple.parser.tests IN: classes.tuple.parser.tests
USING: accessors classes.tuple.parser lexer words classes USING: accessors classes.tuple.parser lexer words classes
sequences math kernel slots tools.test parser compiler.units sequences math kernel slots tools.test parser compiler.units
arrays classes.tuple eval ; arrays classes.tuple eval multiline ;
TUPLE: test-1 ; TUPLE: test-1 ;
@ -142,3 +142,17 @@ TUPLE: parsing-corner-case x ;
" x 3 }" " x 3 }"
} "\n" join eval( -- tuple ) } "\n" join eval( -- tuple )
] [ error>> unexpected-eof? ] must-fail-with ] [ error>> unexpected-eof? ] must-fail-with
[ ] [
<" USE: sequences
IN: classes.tuple.tests
TUPLE: book { name initial-quot: [ "Lord of the " "Rings" append ] } ;">
eval( -- )
] unit-test
[ ] [
<" IN: classes.tuple.tests
TUPLE: monster { hp virtual } ;">
eval( -- )
] unit-test

View File

@ -50,8 +50,19 @@ M: tuple class layout-of 2 slot { word } declare ;
PRIVATE> PRIVATE>
: initial-value ( slot -- obj )
dup initial>> [
nip
] [
dup initial-quot>> [
nip call( -- obj )
] [
drop f
] if*
] if* ;
: initial-values ( class -- slots ) : initial-values ( class -- slots )
all-slots [ initial>> ] map ; all-slots [ initial-value ] map ;
: pad-slots ( slots class -- slots' class ) : pad-slots ( slots class -- slots' class )
[ initial-values over length tail append ] keep ; inline [ initial-values over length tail append ] keep ; inline
@ -176,7 +187,7 @@ ERROR: bad-superclass class ;
: compute-slot-permutation ( new-slots old-slots -- triples ) : compute-slot-permutation ( new-slots old-slots -- triples )
[ [ [ name>> ] map ] bi@ [ index ] curry map ] [ [ [ name>> ] map ] bi@ [ index ] curry map ]
[ drop [ class>> ] map ] [ drop [ class>> ] map ]
[ drop [ initial>> ] map ] [ drop [ initial-value ] map ]
2tri 3array flip ; 2tri 3array flip ;
: update-slot ( old-values n class initial -- value ) : update-slot ( old-values n class initial -- value )

View File

@ -3,10 +3,10 @@
USING: arrays byte-arrays kernel kernel.private math namespaces USING: arrays byte-arrays kernel kernel.private math namespaces
make sequences strings effects generic generic.standard make sequences strings effects generic generic.standard
classes classes.algebra slots.private combinators accessors classes classes.algebra slots.private combinators accessors
words sequences.private assocs alien quotations hashtables ; words sequences.private assocs alien quotations hashtables summary ;
IN: slots IN: slots
TUPLE: slot-spec name offset class initial read-only ; TUPLE: slot-spec name offset class initial initial-quot read-only ;
PREDICATE: reader < word "reader" word-prop ; PREDICATE: reader < word "reader" word-prop ;
@ -190,6 +190,7 @@ ERROR: bad-slot-attribute key ;
dup empty? [ dup empty? [
unclip { unclip {
{ initial: [ [ first >>initial ] [ rest ] bi ] } { initial: [ [ first >>initial ] [ rest ] bi ] }
{ initial-quot: [ [ first >>initial-quot ] [ rest ] bi ] }
{ read-only [ [ t >>read-only ] dip ] } { read-only [ [ t >>read-only ] dip ] }
[ bad-slot-attribute ] [ bad-slot-attribute ]
} case } case
@ -197,7 +198,17 @@ ERROR: bad-slot-attribute key ;
ERROR: bad-initial-value name ; ERROR: bad-initial-value name ;
ERROR: duplicate-initial-values slot ;
M: duplicate-initial-values summary
drop "Slots can either define initial: or initial-quot:, but not both" ;
: check-duplicate-initial-values ( slot-spec -- slot-spec )
dup [ initial>> ] [ initial-quot>> ] bi and
[ duplicate-initial-values ] when ;
: check-initial-value ( slot-spec -- slot-spec ) : check-initial-value ( slot-spec -- slot-spec )
check-duplicate-initial-values
dup initial>> [ dup initial>> [
[ ] [ [ ] [
dup [ initial>> ] [ class>> ] bi instance? dup [ initial>> ] [ class>> ] bi instance?

View File

@ -246,6 +246,8 @@ IN: bootstrap.syntax
"initial:" "syntax" lookup define-symbol "initial:" "syntax" lookup define-symbol
"initial-quot:" "syntax" lookup define-symbol
"read-only" "syntax" lookup define-symbol "read-only" "syntax" lookup define-symbol
"call(" [ \ call-effect parse-call( ] define-core-syntax "call(" [ \ call-effect parse-call( ] define-core-syntax