factor/library/compiler/optimizer/specializers.factor

62 lines
1.5 KiB
Factor
Raw Normal View History

2006-05-02 00:11:59 -04:00
! Copyright (C) 2006 Slava Pestov.
! See http://factorcode.org/license.txt for BSD license.
IN: compiler
2006-05-05 21:41:57 -04:00
USING: arrays generic hashtables kernel kernel-internals math
namespaces sequences vectors words ;
2006-05-02 00:11:59 -04:00
2006-05-05 21:41:57 -04:00
: make-standard-specializer ( quot class picker -- quot )
2006-05-02 00:11:59 -04:00
over \ object eq? [
2drop
] [
[
, "predicate" word-prop % dup , , \ if ,
] [ ] make
] if ;
2006-05-05 21:41:57 -04:00
: make-math-specializer ( quot picker -- quot )
[
, \ tag , num-tags swap <array> , \ dispatch ,
] [ ] make ;
: make-specializer ( quot class picker -- quot )
over number eq? [
nip make-math-specializer
] [
make-standard-specializer
] if ;
2006-05-02 00:11:59 -04:00
: specialized-def ( word -- quot )
dup word-def swap "specializer" word-prop [
2006-05-14 23:25:34 -04:00
<reversed> { dup over pick } [
2006-05-02 00:11:59 -04:00
make-specializer
] 2each
] when* ;
2006-05-05 21:41:57 -04:00
{ 1+ 1- sq neg recip sgn truncate } [
{ number } "specializer" set-word-prop
] each
2006-05-02 00:11:59 -04:00
{ vneg norm-sq norm normalize } [
{ array } "specializer" set-word-prop
] each
\ n*v { object array } "specializer" set-word-prop
\ v*n { array object } "specializer" set-word-prop
\ n/v { object array } "specializer" set-word-prop
\ v/n { array object } "specializer" set-word-prop
{ v+ v- v* v/ vmax vmin v. } [
{ array array } "specializer" set-word-prop
] each
2006-05-02 06:05:58 -04:00
{ hash* remove-hash set-hash } [
{ hashtable } "specializer" set-word-prop
] each
{ first first2 first3 first4 }
[ { array } "specializer" set-word-prop ] each
2006-05-02 06:05:58 -04:00
{ peek pop* pop push } [
{ vector } "specializer" set-word-prop
] each