commit 0893e1ee17289221264a84798f0381d4405e8ab0
parent 88bbdb2d351a75fc74f33d7dd6bc0a2caca186b9
Author: Travis Geiselbrecht <geist@foobox.com>
Date:   Mon,  9 Apr 2012 00:11:30 -0700
assembler: fix for indirect back label references
Diffstat:
1 file changed, 8 insertions(+), 4 deletions(-)
diff --git a/assembler.c b/assembler.c
@@ -276,6 +276,7 @@ void assemble_imm_or_label(void) {
 
 int assemble_operand(void) {
 	u16 n;
+
 	next();
 	switch (token) {
 	case tA: case tB: case tC: case tX:
@@ -303,6 +304,8 @@ int assemble_operand(void) {
 		if (token != tOBRACK)
 			die("expected [");
 	}
+
+	/* we must have seen a '[' */
 	next();
 	switch (token) {
 	case tA: case tB: case tC: case tX:
@@ -315,8 +318,7 @@ int assemble_operand(void) {
 			die("expected , or +");
 		next();
 		if (token == tSTRING) {
-			use_label(tstring, PC);
-			image[PC++] = 0;
+			use_label(tstring, PC++);
 		} else if (token == tNUMBER) {
 			image[PC++] = tnumber;
 		} else {
@@ -325,9 +327,11 @@ int assemble_operand(void) {
 		expect(tCBRACK);
 		return 0x10 | n;
 	case tSTRING:
-		use_label(tstring, PC);
+		use_label(tstring, PC++);
 	case tNUMBER:
-		image[PC++] = tnumber;
+		if (token == tNUMBER)
+			image[PC++] = tnumber;
+
 		next();
 		if (token == tCBRACK) {
 			return 0x1e;