1 ! Copyright (C) 2008 Slava Pestov.
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: kernel sets namespaces sequences inspector parser
4 lexer combinators words classes.parser classes.tuple ;
5 IN: classes.tuple.parser
7 : shadowed-slots ( superclass slots -- shadowed )
8 >r all-slot-names r> intersect ;
10 : check-slot-shadowing ( class superclass slots -- )
13 "Definition of slot ``" %
17 "'' shadows a superclass slot" %
21 ERROR: invalid-slot-name name ;
23 M: invalid-slot-name summary
27 : (parse-tuple-slots) ( -- )
28 #! This isn't meant to enforce any kind of policy, just
29 #! to check for mistakes of this form:
31 #! TUPLE: blahblah foo bing
35 { [ dup not ] [ unexpected-eof ] }
36 { [ dup { ":" "(" "<" } member? ] [ invalid-slot-name ] }
37 { [ dup ";" = ] [ drop ] }
38 [ , (parse-tuple-slots) ]
41 : parse-tuple-slots ( -- seq )
42 [ (parse-tuple-slots) ] { } make ;
44 : parse-tuple-definition ( -- class superclass slots )
48 { "<" [ scan-word parse-tuple-slots ] }
49 [ >r tuple parse-tuple-slots r> prefix ]
50 } case 3dup check-slot-shadowing ;