# file opened: label_as_name.asm
 1    0000                  ;; classic syntax (name is after MACRO directive)
 2    0000                  MACRO   classicNameNoArg
 3    0000 ~                    dz  "classic-no-arg\n"
 4    0000                  ENDM
 5    0000                  MACRO   classicNameOneArg arg1?
 6    0000 ~                    db  "classic-1-arg: ", arg1?, "\n", 0
 7    0000                  ENDM
 8    0000                  MACRO   classicNameTwoArg arg1?, arg2?
 9    0000 ~                    db  "classic-2-arg: ", arg1?, arg2?, "\n", 0
10    0000                  ENDM
11    0000
12    0000                  ;; new optional syntax (label on MACRO line is used as macro name)
13    0000              newNameNoArg    MACRO
14    0000 ~                                dz  "new-no-arg\n"
15    0000                              ENDM
16    0000              newNameOneArg   MACRO  arg1?
17    0000 ~                                db  "new-1-arg: ", arg1?, "\n", 0
18    0000                              ENDM
19    0000              newNameTwoArg   MACRO  arg1?, arg2?
20    0000 ~                                db  "new-1-arg: ", arg1?, arg2?, "\n", 0
21    0000                              ENDM
22    0000
23    0000                  ;; but label doesn't work over colon separator
24    0000              Label
24    0000                  MACRO nameOrArg?
25    0000 ~                                dz  "name-or-arg as name\n"
26    0000                              ENDM
27    0000
28    0000                  ;; DEFL labels also don't work, even without colon
label_as_name.asm(29): error: Unexpected: MACRO nameOrArg2?
29    0000              Babel = 2       MACRO nameOrArg2?
30    0000              ;                     dz  "name-or-arg2 as name\n"
label_as_name.asm(31): error: [ENDM] End macro without macro
31    0000                              ENDM
32    0000
33    0000                  MODULE module1  ; first version did use "module1" as part of macro name - now fixed+tested
34    0000
35    0000              newInModule     MACRO arg1?
36    0000 ~                                db "in-module-new-1-arg: ", arg1?, "\n", 0
37    0000                              ENDM
38    0000
39    0000                              MACRO classicInModule arg1?
40    0000 ~                                db "in-module-classic-1-arg: ", arg1?, "\n", 0
41    0000                              ENDM
42    0000
43    0000                  ENDMODULE
44    0000
45    0000                  OUTPUT "label_as_name.bin"      ; verify defined macros (by checking bin output)
46    0000                  classicNameNoArg
46    0000 63 6C 61 73 >        dz  "classic-no-arg\n"
46    0004 73 69 63 2D >
46    0008 6E 6F 2D 61 >
46    000C 72 67 0A 00 >
46    0010                classicNameOneArg 'a'
46    0010 63 6C 61 73 >        db  "classic-1-arg: ", 'a', "\n", 0
46    0014 73 69 63 2D >
46    0018 31 2D 61 72 >
46    001C 67 3A 20 61 >
46    0020 0A 00       >
46    0022                classicNameTwoArg 'b', 'c'
46    0022 63 6C 61 73 >        db  "classic-2-arg: ", 'b', 'c', "\n", 0
46    0026 73 69 63 2D >
46    002A 32 2D 61 72 >
46    002E 67 3A 20 62 >
46    0032 63 0A 00    >
47    0035                  newNameNoArg
47    0035 6E 65 77 2D >                    dz  "new-no-arg\n"
47    0039 6E 6F 2D 61 >
47    003D 72 67 0A 00 >
47    0041                newNameOneArg 'a'
47    0041 6E 65 77 2D >                    db  "new-1-arg: ", 'a', "\n", 0
47    0045 31 2D 61 72 >
47    0049 67 3A 20 61 >
47    004D 0A 00       >
47    004F                newNameTwoArg 'b', 'c'
47    004F 6E 65 77 2D >                    db  "new-1-arg: ", 'b', 'c', "\n", 0
47    0053 31 2D 61 72 >
47    0057 67 3A 20 62 >
47    005B 63 0A 00    >
48    005E                  nameOrArg?
48    005E 6E 61 6D 65 >                    dz  "name-or-arg as name\n"
48    0062 2D 6F 72 2D >
48    0066 61 72 67 20 >
48    006A 61 73 20 6E >
48    006E 61 6D 65 0A >
48    0072 00          >
label_as_name.asm(48): error: Unrecognized instruction: nameOrArg2?
48    0073                nameOrArg2?
49    0073                  newInModule 'm'
49    0073 69 6E 2D 6D >                    db "in-module-new-1-arg: ", 'm', "\n", 0
49    0077 6F 64 75 6C >
49    007B 65 2D 6E 65 >
49    007F 77 2D 31 2D >
49    0083 61 72 67 3A >
49    0087 20 6D 0A 00 >
49    008B                classicInModule 'M'
49    008B 69 6E 2D 6D >                    db "in-module-classic-1-arg: ", 'M', "\n", 0
49    008F 6F 64 75 6C >
49    0093 65 2D 63 6C >
49    0097 61 73 73 69 >
49    009B 63 2D 31 2D >
49    009F 61 72 67 3A >
49    00A3 20 4D 0A 00 >
50    00A7
51    00A7                  ;; invalid macro names
label_as_name.asm(52): error: [MACRO] Illegal macroname:  @invalidClassic
52    00A7                              MACRO @invalidClassic   ; no need for "ENDM" due to error
label_as_name.asm(53): error: [MACRO] Illegal macroname: @invalidNew
53    00A7              @invalidNew     MACRO
54    00A7
label_as_name.asm(55): error: [MACRO] Illegal macroname:  #invalidClassic2 arg1?
55    00A7                              MACRO #invalidClassic2 arg1?    ; no need for "ENDM" due to error
label_as_name.asm(56): error: [MACRO] Illegal macroname: #invalidNew2
56    00A7              #invalidNew2    MACRO arg1?
57    00A7
label_as_name.asm(58): error: [MACRO] Illegal macroname: trailingChar$
58    00A7              trailingChar$   MACRO arg1
59    00A7
label_as_name.asm(60): error: [MACRO] Illegal macroname:  trailingChar$ arg1
60    00A7                              MACRO trailingChar$ arg1
61    00A7
# file closed: label_as_name.asm

Value    Label
------ - -----------------------------------------------------------
0x0002 X Babel
0x0000 X Label
