Skip to content

Commit 944b4c8

Browse files
committed
Optimize variable/label search, a few bytes less.
1 parent a41c4e2 commit 944b4c8

File tree

2 files changed

+12
-14
lines changed

2 files changed

+12
-14
lines changed

src/actions.asm

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@
3434
; From runtime.asm
3535
.import read_word
3636
; From vars.asm
37-
.import var_search, name_new, var_getlen
37+
.import var_search, name_new
3838
.import label_search
3939
.importzp var_namelen, label_count, var_count
4040
; From alloc.asm
@@ -342,7 +342,6 @@ xrts: rts
342342
lda #VT_WORD
343343
sta tmp3 ; Store variable type
344344
; Check if we have a valid name - this exits on error!
345-
jsr var_getlen
346345
; Search existing var
347346
jsr var_search
348347
bcs exit
@@ -357,7 +356,6 @@ exit:
357356
; Creates a new variable, with no type (the type will be set by parser next)
358357
.proc E_VAR_CREATE
359358
; Check if we have a valid name - this exits on error!
360-
jsr var_getlen
361359
; Search existing var
362360
jsr var_search
363361
bcc E_VAR_WORD::not_found ; Exit with error if already exists
@@ -529,7 +527,6 @@ xit: rts
529527

530528
.proc label_create
531529
; Check if we have a valid name - this exits on error!
532-
jsr var_getlen
533530
jsr label_search
534531
bcc xit
535532
; Create a new label

src/vars.asm

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
; Handles a list of names (variables or labels)
2020
; --------------------------------------------
2121

22-
.export var_getlen, var_search, label_search, name_new
22+
.export var_search, label_search, name_new
2323
.exportzp var_namelen, label_count
2424

2525
; From interpreter.asm
@@ -82,18 +82,20 @@ char_ok:
8282
; Inputs:
8383
; (INBUFF + CIX) : Variable name, from parsing code, terminated in any invalid char
8484
.proc label_search
85+
jsr var_getlen
8586
ldx #label_buf - prog_ptr
86-
ldy #label_count
87+
ldy label_count
8788
bne list_search
8889
.endproc
8990

9091
; Search the list of variables by name,
9192
; Inputs:
9293
; (INBUFF + CIX) : Variable name, from parsing code, terminated in any invalid char
9394
.proc var_search
95+
jsr var_getlen
9496
; Pointer to var list to "var"
9597
ldx #var_buf - prog_ptr
96-
ldy #var_count
98+
ldy var_count
9799
.endproc ; Fall through
98100

99101
; Search a list of names - used for variables or labels
@@ -115,7 +117,7 @@ search_loop:
115117
ldy #0
116118
lda (var),y
117119
cmp len
118-
bne next_var
120+
bne next_var_len
119121

120122
; Compare data
121123
tay
@@ -129,6 +131,7 @@ next_var:
129131
; Advance pointer to next var
130132
ldy #0
131133
lda (var),y
134+
next_var_len:
132135
clc
133136
adc #2 ; No carry, as len is max 128
134137
adc var
@@ -139,7 +142,7 @@ next_var:
139142
search_start:
140143
inx
141144
::search_count= * + 1
142-
cpx $12
145+
cpx #0
143146
bne search_loop
144147

145148
not_found:
@@ -207,17 +210,15 @@ exit_2:
207210
; Copy length and name of var/label
208211
ldy #0
209212
lda len
210-
sta (var),y
211213
loop:
212-
lda (name),y
213-
iny
214214
sta (var),y
215+
lda (name),y
215216
cpy len
216-
bne loop
217+
iny
218+
bcc loop
217219

218220
; Set type to 0 initially
219221
lda #0
220-
iny
221222
sta (var), y
222223
rts
223224
.endproc

0 commit comments

Comments
 (0)