aboutsummaryrefslogtreecommitdiff
path: root/amforth-6.5/common/words/rec-intnum.asm
blob: 15400e19e6cbfbd635883f3820093a814eb42877 (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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
; ( -- addr )
; Interpreter
; Method table for single cell integers
.if cpu_msp430==1
    HEADER(XT_DT_NUM,6,"dt:num",DOROM)
.endif

.if cpu_avr8==1
VE_DT_NUM:
    .dw $ff06
    .db "dt:num"
    .dw VE_HEAD
    .set VE_HEAD = VE_DT_NUM
XT_DT_NUM:
    .dw PFA_DOCONSTANT
PFA_DT_NUM:
.endif
    .dw XT_NOOP    ; interpret
    .dw XT_LITERAL ; compile
    .dw XT_LITERAL ; postpone

; ( -- addr )
; Interpreter
; Method table for double cell integers
.if cpu_msp430==1
    HEADER(XT_DT_DNUM,7,"dt:dnum",DOROM)
.endif

.if cpu_avr8==1
VE_DT_DNUM:
    .dw $ff07
    .db "dt:dnum",0
    .dw VE_HEAD
    .set VE_HEAD = VE_DT_DNUM
XT_DT_DNUM:
    .dw PFA_DOCONSTANT
PFA_DT_DNUM:
.endif
    .dw XT_NOOP     ; interpret
    .dw XT_2LITERAL ; compile
    .dw XT_2LITERAL ; postpone

; ( addr len -- f )
; Interpreter
; recognizer for integer numbers
.if cpu_msp430==1
    HEADER(XT_REC_NUM,7,"rec:num",DOCOLON)
.endif

.if cpu_avr8==1

VE_REC_NUM:
    .dw $ff07
    .db "rec:num",0
    .dw VE_HEAD
    .set VE_HEAD = VE_REC_NUM
XT_REC_NUM:
    .dw DO_COLON
PFA_REC_NUM:
.endif
    ; try converting to a number
    .dw XT_NUMBER
    .dw XT_DOCONDBRANCH
    DEST(PFA_REC_NONUMBER)
    .dw XT_ONE
    .dw XT_EQUAL
    .dw XT_DOCONDBRANCH
    DEST(PFA_REC_INTNUM2)
      .dw XT_DT_NUM
      .dw XT_EXIT
PFA_REC_INTNUM2:
      .dw XT_DT_DNUM
      .dw XT_EXIT
PFA_REC_NONUMBER:
    .dw XT_DT_NULL
    .dw XT_EXIT