new module typed.namespaces: get/set + type check
parent
ab2e4ae5e6
commit
82e01fb58c
|
@ -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
|
|
@ -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
|
||||||
|
|
Loading…
Reference in New Issue