Browse code

(uxnasm) Fix valid macro names being rejected.

Macro names that begin with the name of an opcode were being rejected
incorrectly. “STA” would not be a valid macro name since it is an
opcode, but “STACK” should be fine.

Andrew Alderwick authored on 14/04/2022 17:24:48
Showing 1 changed files
... ...
@@ -99,30 +99,27 @@ findlabel(char *name)
99 99
 	return NULL;
100 100
 }
101 101
 
102
-static Uint8
103
-findmode(char *s)
104
-{
105
-	int i = 0;
106
-	while(s[0]) {
107
-		switch(s[0]) {
108
-		case '2': i |= (1 << 5); break; /* mode: short */
109
-		case 'r': i |= (1 << 6); break; /* mode: return */
110
-		case 'k': i |= (1 << 7); break; /* mode: keep */
111
-		}
112
-		s++;
113
-	}
114
-	return i;
115
-}
116
-
117 102
 static Uint8
118 103
 findopcode(char *s)
119 104
 {
120 105
 	int i;
121 106
 	for(i = 0; i < 0x20; i++) {
107
+		int m = 0;
122 108
 		if(!scmp(ops[i], s, 3))
123 109
 			continue;
124 110
 		if(!i) i |= (1 << 7); /* force keep for LIT */
125
-		return i |= findmode(s + 3);
111
+		while(s[3 + m]) {
112
+			if(s[3 + m] == '2')
113
+				i |= (1 << 5); /* mode: short */
114
+			else if(s[3 + m] == 'r')
115
+				i |= (1 << 6); /* mode: return */
116
+			else if(s[3 + m] == 'k')
117
+				i |= (1 << 7); /* mode: keep */
118
+			else
119
+				return 0; /* failed to match */
120
+			m++;
121
+		}
122
+		return i;
126 123
 	}
127 124
 	return 0;
128 125
 }