Paste: idea for -unsafe words/validators
        
	
	
	
		| Author:  | erg | 
		| Mode:  | factor | 
		| Date:  | Tue, 13 Sep 2011 18:20:53 | 
	
	Plain Text |
	
	HOOK: (send) io-backend ( packet addrspec datagram -- )
M: unix (send)
    [ make-sockaddr/size ] [ [ handle>> ] keep ] bi* do-send ;
ERROR: invalid-port object ;
: check-port ( packet addrspec port -- packet addrspec port )
    2dup addr>> [ class ] bi@ assert=
    pick class byte-array assert= ;
: check-connectionless-port ( port -- port )
    dup { [ datagram-port? ] [ raw-port? ] } 1|| [ invalid-port ] unless ;
: check-send ( packet addrspec port -- packet addrspec port )
    check-connectionless-port dup check-disposed check-port ;
: send ( packet addrspec datagram -- ) check-send (send) ;
---------------------
V: send ( packet addrspec datagram -- )
    check-connectionless-port dup check-disposed check-port ;
: send ( packet addrspec datagram -- ) (send) ;
or 
V: send check-connectionless-port ;
V: send dup check-disposed ;
V: send check-port ;
: send ( packet addrspec datagram -- ) (send) ;
Calling send would call all of the V: validators as before-methods (in random order).  Calling send-unsafe would call (send) directly.
V: could require leaving all the arguments on the stack or dropping them.
You could also do more things with static type declarations and multimethods.
	
	
		New Annotation