2010-01-14 10:10:13 -05:00
|
|
|
! Copyright (C) 2009, 2010 Slava Pestov.
|
2009-03-30 06:31:50 -04:00
|
|
|
! See http://factorcode.org/license.txt for BSD license.
|
2010-01-14 10:10:13 -05:00
|
|
|
USING: arrays combinators effects generic generic.standard
|
2009-03-30 21:45:01 -04:00
|
|
|
kernel sequences words lexer ;
|
2009-03-30 06:31:50 -04:00
|
|
|
IN: smalltalk.selectors
|
|
|
|
|
|
|
|
SYMBOLS: unary binary keyword ;
|
|
|
|
|
|
|
|
: selector-type ( selector -- type )
|
|
|
|
{
|
2009-03-30 21:45:01 -04:00
|
|
|
{ [ dup [ "~!@%&*-+=|\\<>,?/" member? ] all? ] [ binary ] }
|
2009-03-30 06:31:50 -04:00
|
|
|
{ [ CHAR: : over member? ] [ keyword ] }
|
|
|
|
[ unary ]
|
|
|
|
} cond nip ;
|
|
|
|
|
|
|
|
: selector>effect ( selector -- effect )
|
|
|
|
dup selector-type {
|
2010-01-14 10:10:13 -05:00
|
|
|
{ unary [ drop { } ] }
|
|
|
|
{ binary [ drop { "x" } ] }
|
|
|
|
{ keyword [ [ CHAR: : = ] count "x" <array> ] }
|
2009-03-30 06:31:50 -04:00
|
|
|
} case "receiver" suffix { "result" } <effect> ;
|
|
|
|
|
|
|
|
: selector>generic ( selector -- generic )
|
|
|
|
[ "selector-" prepend "smalltalk.selectors" create dup ]
|
|
|
|
[ selector>effect ]
|
|
|
|
bi define-simple-generic ;
|
2009-03-30 21:45:01 -04:00
|
|
|
|
2011-09-27 16:20:07 -04:00
|
|
|
SYNTAX: SELECTOR: scan-token selector>generic drop ;
|