1 ! Copyright (C) 2009, 2010 Slava Pestov.
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: arrays combinators effects generic.standard
4 kernel sequences words lexer ;
5 IN: smalltalk.selectors
7 SYMBOLS: unary binary keyword ;
9 : selector-type ( selector -- type )
11 { [ dup [ "~!@%&*-+=|\\<>,?/" member? ] all? ] [ binary ] }
12 { [ CHAR: : over member? ] [ keyword ] }
16 : selector>effect ( selector -- effect )
18 { unary [ drop { } ] }
19 { binary [ drop { "x" } ] }
20 { keyword [ [ CHAR: : = ] count "x" <array> ] }
21 } case "receiver" suffix { "result" } <effect> ;
23 : selector>generic ( selector -- generic )
24 [ "selector-" prepend "smalltalk.selectors" create-word dup ]
26 bi define-simple-generic ;
28 SYNTAX: SELECTOR: scan-token selector>generic drop ;