46 lines
1.1 KiB
Factor
46 lines
1.1 KiB
Factor
|
|
USING: kernel words namespaces arrays vectors hashtables
|
|
sequences assocs sets grouping
|
|
combinators.conditional
|
|
combinators.short-circuit
|
|
obj.util obj.alist ;
|
|
|
|
IN: obj
|
|
|
|
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
|
|
|
: properties ( -- properties ) V{ } ;
|
|
|
|
SYM: self properties adjoin
|
|
SYM: type properties adjoin
|
|
SYM: title properties adjoin
|
|
|
|
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
|
|
|
: types ( -- types ) V{ } ;
|
|
|
|
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
|
|
|
: >obj ( val -- obj ) [ symbol? ] [ get ] [ ] 1if ;
|
|
|
|
: -> ( obj pro -- val ) swap >obj at ;
|
|
|
|
PREDICATE: obj < alist { [ self -> ] [ type -> ] } 1&& ;
|
|
|
|
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
|
|
|
: objects ( -- objects ) V{ } ;
|
|
|
|
: define-object ( symbol table -- )
|
|
2 group >vector
|
|
self rot 2array prefix
|
|
dup dup self -> set-global
|
|
self -> objects adjoin ;
|
|
|
|
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
|
|
|
PREDICATE: ptr < symbol get obj? ;
|
|
|
|
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
|
|