shithub: rgbds

Download patch

ref: 73396166aaca4542fc1708d6febd0a959e05df88
parent: e4f5df1306c4eb09de57728f9756b951b41565aa
parent: 4c5d5c708591fa878fcba297172da2d51579f908
author: Eldred Habert <eldredhabert0@gmail.com>
date: Tue Oct 13 06:42:05 EDT 2020

Merge pull request #605 from NieDzejkob/invalid-labels

Don't consider difference of invalid labels constant

--- a/include/asm/symbol.h
+++ b/include/asm/symbol.h
@@ -125,7 +125,6 @@
 struct Symbol *sym_AddMacro(char const *symName, int32_t defLineNo, char *body, size_t size);
 struct Symbol *sym_Ref(char const *symName);
 struct Symbol *sym_AddString(char const *symName, char const *value);
-uint32_t sym_GetDefinedValue(char const *s);
 void sym_Purge(char const *symName);
 void sym_Init(void);
 
--- a/src/asm/rpn.c
+++ b/src/asm/rpn.c
@@ -309,7 +309,9 @@
 	if (!sym1 || !sym || sym1->type != SYM_LABEL || sym->type != SYM_LABEL)
 		return false;
 
-	return sym_GetSection(sym1) == sym_GetSection(sym);
+	struct Section const *section1 = sym_GetSection(sym1);
+	struct Section const *section2 = sym_GetSection(sym);
+	return section1 && (section1 == section2);
 }
 
 static bool isDiffConstant(struct Expression const *src1,
--- a/src/asm/symbol.c
+++ b/src/asm/symbol.c
@@ -322,23 +322,6 @@
 	return 0;
 }
 
-/*
- * Return a defined symbols value... aborts if not defined yet
- */
-uint32_t sym_GetDefinedValue(char const *s)
-{
-	struct Symbol const *sym = sym_FindSymbol(s);
-
-	if (sym == NULL || !sym_IsDefined(sym))
-		error("'%s' not defined\n", s);
-	else if (!sym_IsNumeric(sym))
-		error("'%s' is a macro or string symbol\n", s);
-	else
-		return sym_GetValue(sym);
-
-	return 0;
-}
-
 char const *sym_GetCurrentSymbolScope(void)
 {
 	return labelScope;
--- /dev/null
+++ b/test/asm/use-label-outside-section.asm
@@ -1,0 +1,3 @@
+lab:
+	PRINTV lab-lab
+	PRINTT "\n"
--- /dev/null
+++ b/test/asm/use-label-outside-section.err
@@ -1,0 +1,5 @@
+ERROR: use-label-outside-section.asm(1):
+    Label "lab" created outside of a SECTION
+ERROR: use-label-outside-section.asm(2):
+    Expected constant expression: 'lab' is not constant at assembly time
+error: Assembly aborted (2 errors)!
--- /dev/null
+++ b/test/asm/use-label-outside-section.out
@@ -1,0 +1,1 @@
+$0