! Copyright (C) 2009 Daniel Ehrenberg ! See http://factorcode.org/license.txt for BSD license. USING: words kernel locals accessors compiler.tree.propagation.info sequences kernel.private assocs fry parser math quotations effects arrays definitions compiler.units namespaces ; IN: specialized : in-compilation-unit? ( -- ? ) changed-definitions get >boolean ; : evil-define-temp ( quot effect -- word ) in-compilation-unit? [ define-temp ] [ [ define-temp ] with-compilation-unit ] if ; :: lookup-specialized ( #call word n -- special-word/f ) #call in-d>> n tail* >array [ value-info class>> ] map dup [ object = ] all? [ drop f ] [ word "specialized-defs" word-prop [ [ declare ] curry word def>> compose word stack-effect evil-define-temp 1quotation ] cache ] if ; : specialized-quot ( word n -- quot ) '[ _ _ lookup-specialized ] ; : define-specialized ( word n -- ) [ drop H{ } clone "specialized-defs" set-word-prop ] [ dupd specialized-quot "custom-inlining" set-word-prop ] 2bi ; ERROR: bad-specialized ; SYNTAX: SPECIALIZED: scan-word scan-object dup integer? [ bad-specialized ] unless define-specialized ;