-
Notifications
You must be signed in to change notification settings - Fork 0
/
cmdLET.inc
55 lines (45 loc) · 1.72 KB
/
cmdLET.inc
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
;-----------------------------------------------------------------------------
cmdLET: .proc cmdLET
;-----------------------------------------------------------------------------
;
; Assign an expression to a variable
;
; LET A = 1
; LET A = A + 1
;
;-------|-----------------------------------|-------------------------------------
DEBUGPRINT "[cmdLET]\r\n"
CALL GetParsedToken ; Get the variable name
MOV tokenAddr @dest
CALL GetParsedToken ; Get the equals sign
DEBUGPRINT "[cmdLET calling ParseExpression]\r\n"
CALL ParseExpression ; Get the value expression
DEBUGPRINT "[cmdLET returned from ParseExpression]\r\n"
; DEBUGPRINT "tokenType=" ;debug
; PUSH tokenType ;debug
; CALL PrintInteger ;debug
; PRINTCRLF ;debug
CMPEQ tokenType TT_NUMBER @isNum ; If the value is a number
CMPEQ tokenType TT_VARINT @isNum ; If the value is a integer variable
CMPEQ tokenType TT_STRING @isString ; If the value is a string
JMP SyntaxError
@isNum:
INDEXEDWR expression @dest ; Store the value in the variable
JMP Statement
@isString:
MOV tokenStr @src
; DEBUGPRINT "tokenStr='" ;debug
; PUSH @src ;debug
; CALL PrintString ;debug
; PRINTCRLF ;debug
@isStringLoop:
INDEXEDRD @src @ch
INDEXEDWR @ch @dest ; Store the value in the variable
INC @src
INC @dest
JMPN0 @ch @isStringLoop
JMP Statement
@src: .data 0
@dest: .data 0
@ch: .data 0
.endp