]> Shamusworld >> Repos - rmac/blobdiff - procln.c
Actually implement ^^FILESIZE this time :)
[rmac] / procln.c
index 0bb52e6a733eafe35eb0c944b57048e074f45999..9c207bfdefe8481ca71195ad1ad7c3aaaf7c3471 100644 (file)
--- a/procln.c
+++ b/procln.c
@@ -1,7 +1,7 @@
 //
 // RMAC - Reboot's Macro Assembler for all Atari computers
 // PROCLN.C - Line Processing
-// Copyright (C) 199x Landon Dyer, 2011-2018 Reboot and Friends
+// Copyright (C) 199x Landon Dyer, 2011-2020 Reboot and Friends
 // RMAC derived from MADMAC v1.07 Written by Landon Dyer, 1986
 // Source utilised with the kind permission of Landon Dyer
 //
@@ -53,6 +53,7 @@ int disabled;                                 // Assembly conditionally disabled
 int just_bss;                                  // 1, ds.b in microprocessor mode
 uint32_t pcloc;                                        // Value of "PC" at beginning of line
 SYM * lab_sym;                                 // Label on line (or NULL)
+char * label_defined;                  // The name of the last label defined in current line (if any)
 
 const char extra_stuff[] = "extra (unexpected) text found after addressing mode";
 const char comma_error[] = "missing comma";
@@ -186,6 +187,7 @@ DEBUG { printf("Assemble: Found TKEOF flag...\n"); }
 
        state = -3;                                                             // No keyword (just EOL)
        label = NULL;                                                   // No label
+       label_defined = NULL;                                   // No label defined yet
        lab_sym = NULL;                                                 // No (exported) label
        equate = NULL;                                                  // No equate
        tk = tok;                                                               // Save first token in line
@@ -233,6 +235,8 @@ as68label:
                        if (HandleLabel(label, labtyp) != 0)
                                goto loop;
 
+                       label_defined = label;
+
                        goto as68label;
                }
        }
@@ -363,6 +367,8 @@ as68label:
                                {
                                        if (HandleLabel(label, labtyp) != 0)
                                                goto loop;
+
+                                       label_defined = label;
                                }
 
                                HandleRept();
@@ -587,7 +593,7 @@ When checking to see if it's already been equated, issue a warning.
                if (list_flag)                                  // Put value in listing
                        listvalue((uint32_t)eval);
 
-               at_eol();                                               // Must be at EOL now
+               ErrorIfNotAtEOL();                              // Must be at EOL now
                goto loop;
        }
 
@@ -597,6 +603,8 @@ When checking to see if it's already been equated, issue a warning.
                // Non-zero == error occurred
                if (HandleLabel(label, labtyp) != 0)
                        goto loop;
+
+               label_defined = label;
        }
 
        // Punt on EOL