new module typed.namespaces: get/set + type check

db4
Joe Groff 2011-11-10 10:46:56 -08:00
parent ab2e4ae5e6
commit 82e01fb58c
2 changed files with 59 additions and 0 deletions

View File

@ -0,0 +1,19 @@
USING: compiler.tree.debugger math tools.test typed.namespaces ;
IN: typed.namespaces.tests
SYMBOL: pi
[ 22/7 pi float typed-set ] [ variable-type-error? ] must-fail-with
{ 3.14159265358979 } [
3.14159265358979 pi float typed-set
pi float typed-get
] unit-test
[
3.14159265358979 pi float typed-set
pi integer typed-get
] [ variable-type-error? ] must-fail-with
{ t } [ [ 2.0 pi float typed-get * ] { * } inlined? ] unit-test

View File

@ -0,0 +1,40 @@
USING: arrays classes fry kernel kernel.private locals macros
namespaces ;
IN: typed.namespaces
ERROR: variable-type-error variable value type ;
<PRIVATE
MACRO: declare1 ( type -- quot: ( value -- value ) )
1array '[ _ declare ] ;
: typed-get-unsafe ( name type -- value )
[ get ] dip declare1 ; inline
: typed-get-global-unsafe ( name type -- value )
[ get-global ] dip declare1 ; inline
PRIVATE>
:: (typed-get) ( name type getter: ( name -- value ) -- value )
name getter call :> value
value type instance? [ name value type variable-type-error ] unless
value type declare1 ; inline
: typed-get ( name type -- value )
[ get ] (typed-get) ; inline
: typed-get-global ( name type -- value )
[ get-global ] (typed-get) ; inline
:: (typed-set) ( value name type setter: ( value name -- ) -- )
value type instance? [ name value type variable-type-error ] unless
value name setter call ; inline
: typed-set ( value name type -- )
[ set ] (typed-set) ; inline
: typed-set-global ( value name type -- )
[ set-global ] (typed-set) ; inline