shithub: rgbds

Download patch

ref: 57b734a7dfc3767cedc1940ed55cce3262a955ef
parent: 5be1c0da622d4cf7a294b7a8011f08394d045931
author: ISSOtm <eldredhabert0@gmail.com>
date: Sun Jan 10 20:37:36 EST 2021

Reinstate RL into the _RS family

Removal of colon-less labels lifted the grammar ambiguity that
prevented `RL` from being usable as a variable declarator.
Thus, reinstate its functionality.

--- a/src/asm/parser.y
+++ b/src/asm/parser.y
@@ -450,7 +450,7 @@
 %token	T_POP_SECTION T_POP_FRAGMENT
 %token	T_POP_RB
 %token	T_POP_RW
-%token	T_POP_RL
+// There is no T_POP_RL, only T_Z80_RL
 %token	T_POP_MACRO
 %token	T_POP_ENDM
 %token	T_POP_RSRESET T_POP_RSSET
@@ -864,7 +864,7 @@
 		| uconst
 ;
 
-rl		: T_LABEL T_POP_RL rs_uconst {
+rl		: T_LABEL T_Z80_RL rs_uconst {
 			sym_AddEqu($1, sym_GetConstantValue("_RS"));
 			sym_AddSet("_RS", sym_GetConstantValue("_RS") + 4 * $3);
 		}
--- a/src/asm/rgbasm.5
+++ b/src/asm/rgbasm.5
@@ -971,7 +971,6 @@
 .It Ic RB Ar constexpr Ta Sets the preceding symbol to Ic _RS No and adds Ar constexpr No to Ic _RS .
 .It Ic RW Ar constexpr Ta Sets the preceding symbol to Ic _RS No and adds Ar constexpr No * 2 to Ic _RS .
 .It Ic RL Ar constexpr Ta Sets the preceding symbol to Ic _RS No and adds Ar constexpr No * 4 to Ic _RS .
-(In practice, this one cannot be used due to a bug).
 .El
 .Pp
 If the argument to
--- /dev/null
+++ b/test/asm/rs.asm
@@ -1,0 +1,43 @@
+
+a1 rb 1
+a2 rw 1
+a3 rl 1
+
+PRINTLN "a1 = ", a1
+PRINTLN "a2 = ", a2
+PRINTLN "a3 = ", a3
+PRINTLN "_RS = ", _RS
+
+
+b1 rb 1
+b2 rw 1
+b3 rl 1
+
+PRINTLN "b1 = ", b1
+PRINTLN "b2 = ", b2
+PRINTLN "b3 = ", b3
+PRINTLN "_RS = ", _RS
+
+
+rsset 42
+c1 rb 1
+c2 rw 1
+c3 rl 1
+
+PRINTLN "c1 = ", c1
+PRINTLN "c2 = ", c2
+PRINTLN "c3 = ", c3
+PRINTLN "_RS = ", _RS
+
+
+rsreset
+d1 rb 1
+d2 rw 1
+d3 rl 1
+
+PRINTLN "d1 = ", d1
+PRINTLN "d2 = ", d2
+PRINTLN "d3 = ", d3
+PRINTLN "_RS = ", _RS
+
+
--- /dev/null
+++ b/test/asm/rs.out
@@ -1,0 +1,16 @@
+a1 = $0
+a2 = $1
+a3 = $3
+_RS = $7
+b1 = $7
+b2 = $8
+b3 = $A
+_RS = $E
+c1 = $2A
+c2 = $2B
+c3 = $2D
+_RS = $31
+d1 = $0
+d2 = $1
+d3 = $3
+_RS = $7