Paste: method dispatch ricing

Author: slava
Mode: factor
Date: Thu, 6 Nov 2008 03:51:10
Plain Text |
GENERIC: call ( callable -- )

3 methods: quotation, curry, compose

! ! ! BEFORE:

[
    dup tag dup 3 eq? [
        drop dup 0 slot 8 fixnum-fast dup 6 eq?
        [ drop { quotation } declare quotation=>call ]
        [ drop object=>call ] if
    ] [
        dup 2 eq? [
            drop dup { tuple } declare 1 slot
            { tuple-layout } declare 5 slot dup 1 fixnum>= [
                drop dup { tuple } declare 1 slot
                { tuple-layout } declare 4 slot
                { array } declare 3 slot { word } declare
                dup \ curry eq?
                [ drop { curry } declare curry=>call ] [
                    dup \ compose eq?
                    [ drop { compose } declare compose=>call ]
                    [ drop object=>call ] if
                ] if
            ] [ drop object=>call ] if
        ] [ drop object=>call ] if
    ] if
]

! ! ! AFTER:

[
    dup tag dup 2 eq? [
        drop dup { tuple } declare 1 slot { array } declare
        7 slot dup \ compose eq?
        [ drop { compose } declare compose=>call ] [
            dup \ curry eq?
            [ drop { curry } declare curry=>call ]
            [ drop object=>call ] if
        ] if
    ] [
        dup 3 eq? [
            drop dup { hi-tag } declare 0 slot dup 14 eq?
            [ drop { quotation } declare quotation=>call ]
            [ drop object=>call ] if
        ] [ drop object=>call ] if
    ] if
]

New Annotation

Summary:
Author:
Mode:
Body: