Fixed the parsing of comparison operators as well as their priorities. Fixes #155
This commit is contained in:
parent
0da2930109
commit
49d8a5cb44
@ -350,15 +350,15 @@ static struct {
|
|||||||
{"&", 1, and},
|
{"&", 1, and},
|
||||||
{"^", 1, xor},
|
{"^", 1, xor},
|
||||||
{"<<", 2, shleft},
|
{"<<", 2, shleft},
|
||||||
{"<=", 3, lower_equals},
|
{"<=", -1, lower_equals},
|
||||||
{"<", 3, lower},
|
{"<", -1, lower},
|
||||||
{">>", 2, shright},
|
{">>", 2, shright},
|
||||||
{">=", 3, greater_equals},
|
{">=", -1, greater_equals},
|
||||||
{">", 3, greater},
|
{">", -1, greater},
|
||||||
{"==", 3, equals},
|
{"==", -1, equals},
|
||||||
{"=", -1, NULL, assign},
|
{"=", -2, NULL, assign},
|
||||||
{"!=", 3, different},
|
{"!=", -1, different},
|
||||||
{":", 4, bank},
|
{":", 3, bank},
|
||||||
};
|
};
|
||||||
|
|
||||||
value_t debugger_evaluate(GB_gameboy_t *gb, const char *string,
|
value_t debugger_evaluate(GB_gameboy_t *gb, const char *string,
|
||||||
@ -575,9 +575,13 @@ value_t debugger_evaluate(GB_gameboy_t *gb, const char *string,
|
|||||||
for (int j = 0; j < sizeof(operators) / sizeof(operators[0]); j++) {
|
for (int j = 0; j < sizeof(operators) / sizeof(operators[0]); j++) {
|
||||||
if (strlen(operators[j].string) > length - i) continue; // Operator too big.
|
if (strlen(operators[j].string) > length - i) continue; // Operator too big.
|
||||||
// Priority higher than what we already have.
|
// Priority higher than what we already have.
|
||||||
if (operator_index != -1 && operators[operator_index].priority < operators[j].priority) continue;
|
|
||||||
unsigned long operator_length = strlen(operators[j].string);
|
unsigned long operator_length = strlen(operators[j].string);
|
||||||
if (memcmp(string + i, operators[j].string, operator_length) == 0) {
|
if (memcmp(string + i, operators[j].string, operator_length) == 0) {
|
||||||
|
if (operator_index != -1 && operators[operator_index].priority < operators[j].priority) {
|
||||||
|
/* for supporting = vs ==, etc*/
|
||||||
|
i += operator_length - 1;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
// Found an operator!
|
// Found an operator!
|
||||||
operator_pos = i;
|
operator_pos = i;
|
||||||
operator_index = j;
|
operator_index = j;
|
||||||
|
Loading…
Reference in New Issue
Block a user