@@ -463,6 +463,8 @@ xit: rts
463463
464464::laddr_search_num = cpnum + 1
465465::laddr_search_start:
466+ ::last_label_num = *+1
467+ ldx #0
466468 lda laddr_buf
467469 ldy laddr_buf+1
468470 sty tmp1+1
@@ -500,12 +502,10 @@ xit: rts
500502xit: rts
501503.endproc
502504
503- ; Label definition search/ create
505+ ; Pushes the PROC/DATA loop, search, create a label and define the location
504506.proc E_LABEL_DEF
505-
506- ; Search and create the label
507- jsr E_LABEL_CREATE
508- bcs add_laddr_list ::xit ; Label already defined
507+ lda #LT_PROC_DATA
508+ jsr push_codep
509509
510510 ; Search in the label list
511511 jsr laddr_search_start
@@ -531,7 +531,7 @@ cloop: bmi xit_label_err
531531 ; No more entries, adds our address as a "definition" (A = 128)
532532nfound:
533533 lda #128
534- jmp add_laddr_list
534+ bmi add_laddr_list
535535.endproc
536536
537537; Label search on use
@@ -542,6 +542,7 @@ nfound:
542542 ; Check if we have a valid name - this exits on error!
543543 jsr label_search
544544 bcs xit
545+ stx last_label_num
545546
546547 ; Check if type is compatible
547548 cmp tmp3
@@ -554,7 +555,6 @@ xit: rts
554555; label (and create it if needed), then parse arguments and at last emit the
555556; call address
556557::E_DO_EXEC:
557- ldx #0
558558
559559 ; Emits a label, searching the label address in the label list
560560start_searching:
@@ -581,24 +581,18 @@ ret: rts
581581; Label search and create if not exists
582582.proc E_LABEL_CREATE
583583 jsr label_search
584- bcc check_var
584+ stx last_label_num
585+ ; Already defined, just store index
586+ bcc ret
585587
586588do_create:
587589 ; Create a new label
588590 ldx #label_ptr - prog_ptr
589591 jsr name_new
590- ldx label_count
591592 inc label_count
592593 clc
593- set_var:
594- stx E_DO_EXEC+1
595- rts
594+ ret: rts
596595
597- ; Check if label is PROC, error if not
598- check_var:
599- beq set_var
600- sec
601- rts
602596.endproc
603597
604598;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
0 commit comments