aboutsummaryrefslogtreecommitdiff
path: root/amforth-6.5/avr8/lib/forth2012/core/evaluate.frt
blob: 80659bc59891421591430640a2383eda995d105d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
\ evaluate
\ temporarily redirect the input source
\ to string buffer. Return the the previous
\ input source afterwards and continue

\ #require imove.frt

\ some helper words
variable strlen
variable str
: source-string str @ strlen @ ;

\ we have to distinguish between interpreted (RAM)
\ and compiled (Flash) strings. First the RAM
\ strings

: (evaluate) \ i*x addr len -- j*y 
    ['] source defer@ >r 
    >in @ >r
    0 >in !
    strlen !
    str !
    ['] source-string is source
    ['] interpret catch
    r> >in !
    r> is source
    throw
;

\ the compiled (Flash) strings are transferred
\ to RAM and processed there.
: [evaluate]
   ( iaddr len -- )
    dup >r
    here imove
    here r> (evaluate)
;

\ a state smart word to decide what to do.
: evaluate
   state @ if
     postpone [evaluate]
   else
     (evaluate)
   then
; immediate