Annotation of gforth/quotations.fs, revision 1.2

1.1       pazsan      1: \ anonymous definitions in a definition
                      2: 
                      3: :noname  false :noname ;
                      4: :noname  locals-wordlist last @ lastcfa @
1.2     ! pazsan      5:     postpone AHEAD
        !             6:     locals-list @  locals-list off
        !             7:     locals-dp @ dup >r     postpone SCOPE
        !             8:     true  :noname  r> locals-dp ! ;
        !             9: interpret/compile: [: ( -- quotation-sys )
        !            10: \G Starts a quotation
1.1       pazsan     11: 
1.2     ! pazsan     12: : ;] ( compile-time: quotation-sys -- ; run-time: -- xt )
        !            13:     \g ends a quotation
1.1       pazsan     14:     POSTPONE ; >r IF
1.2     ! pazsan     15:        ]  postpone ENDSCOPE
        !            16:        locals-dp !  locals-list !
        !            17:        postpone THEN
1.1       pazsan     18:        lastcfa ! last ! to locals-wordlist
1.2     ! pazsan     19:        r> postpone ALiteral
1.1       pazsan     20:     ELSE  r>  THEN ( xt ) ; immediate
                     21: 
1.2     ! pazsan     22: 0 [IF] \ tests
1.1       pazsan     23: : if-else ( ... f xt1 xt2 -- ... )
                     24: \ Postscript-style if-else
                     25:     rot IF
                     26:        drop
                     27:     ELSE
                     28:        nip
                     29:     THEN
                     30:     execute ;
                     31: 
                     32: : test ( f -- )
                     33:     [: ." true" ;]
                     34:     [: ." false" ;]
                     35:     if-else ;
                     36:    
                     37: 1 test cr \ writes "true"
                     38: 0 test cr \ writes "false"
1.2     ! pazsan     39: 
        !            40: \ locals within quotations
        !            41: 
        !            42: : foo { a b } a b
        !            43:     [: { x y } x y + ;] execute . a . b . ;
        !            44: 2 3 foo
        !            45: [THEN]

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>