; Copyright 2018 faddenSoft. All Rights Reserved.
; See the LICENSE.txt file for distribution terms (Apache 2.0).
;
; Assembler: Merlin 32

; NOTE: select CPU=65C02

EXTSYM      equ     $8888           ;EDIT: give this a long label

            org     $1000

            nop
start       lda     :local1
            lda     nextglob
            lda     pastglob
            lda     :local2

:local1     nop
:local2     nop
nextglob    nop                     ;EDIT: mark label as global
pastglob    nop

            lda     nlocal
nlocal      lda     #$11            ;EDIT: mark label as global

reach1G     nop                     ;EDIT: mark label as global
:local      lda     :local          ;EDIT: edit operand to symbol=reach1G

            lda     reach4          ;EDIT: set operand to symbol=reach2; should stay local
reach2      nop
reach3G     nop                     ;EDIT: mark label as global
reach4      nop
            lda     reach2          ;EDIT: edit operand to symbol=reach4; should stay local

            lda     $00
            beq     :local          ;should be local
            jsr     reach4          ;should be local
            jsr     start           ;should be global
:local      lda     #$22

            lda     gtest2
gtest1      nop                     ;EDIT: mark label as global
            lda     gtest3
gtest2      nop                     ;...which forces this to be global
gtest3      nop                     ;...and then this is forced to be global

            lda     #$33

            lda     midlocal        ;EDIT: reformat as hex
topglob     nop                     ;EDIT: mark label as global
            lda     farlocal        ;should be local label ref
midlocal    nop                     ;auto-label here should vanish
            nop
farlocal    nop

            lda     #$44
globalnm    jsr     :local2         ;EDIT: mark label as global
:local1     nop
:local2     nop
:local3     nop
nglobal     nop                     ;should get marked as global
globlat     jsr     nglobal         ;EDIT: mark label as global

            bra     cont
cont        nop                     ;EDIT: mark label as global
            lda     EXTSYM

; test localizer uniquification
; only relevant for 64tass, which uses a leading '_' to indicate local labels
_uname      nop
X_uname11   nop
X_uname1    nop
X_uname     nop

; test labels with opcode names (not really a localization thing)
; EDIT: set these names, mark as global to prevent localization
            lda     #$00
ANDl        bne     ANDl            ;leave label local
JMPg        bne     JMPg            ;make label global
jmpg        bne     jmpg            ;lower case name
TSBg        bne     TSBg
XCEg        bne     XCEg            ;should be allowed
            rts
