changeset 2191:d87a76afbd8a

Add '>', '<', '>=' and '<=' operators to debugger expression engine
author Michael Pavone <pavone@retrodev.com>
date Sat, 20 Aug 2022 12:45:33 -0700
parents 59e0dcc01b2c
children 3247bec692a4
files debug.c
diffstat 1 files changed, 17 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/debug.c	Sat Aug 20 12:08:01 2022 -0700
+++ b/debug.c	Sat Aug 20 12:45:33 2022 -0700
@@ -116,7 +116,9 @@
 	case '~':
 	case '=':
 	case '!':
-		if (*start == '!' && start[1] == '=') {
+	case '>':
+	case '<':
+		if ((*start == '!' || *start == '>' || *start == '<') && start[1] == '=') {
 			*end = start + 2;
 			return (token) {
 				.type = TOKEN_OPER,
@@ -177,6 +179,8 @@
 		case '~':
 		case '=':
 		case '!':
+		case '>':
+		case '<':
 		case '.':
 			done = 1;
 			break;
@@ -323,6 +327,8 @@
 		return maybe_binary(bin, *end, end);
 	case '=':
 	case '!':
+	case '>':
+	case '<':
 		bin->right = parse_expression(after_first, end);
 		return bin;
 	default:
@@ -447,6 +453,8 @@
 		case '-':
 		case '=':
 		case '!':
+		case '>':
+		case '<':
 			ret = bin->left;
 			bin->left = NULL;
 			free_expr(bin);
@@ -572,6 +580,8 @@
 			return maybe_binary(bin, *end, end);
 		case '=':
 		case '!':
+		case '>':
+		case '<':
 			bin->right = parse_expression(after_second, end);
 			if (!bin->right) {
 				fprintf(stderr, "Expected expression to the right of %s\n", second.v.op);
@@ -669,6 +679,12 @@
 		case '!':
 			*out = *out != right;
 			break;
+		case '>':
+			*out = e->op.v.op[1] ? *out >= right : *out > right;
+			break;
+		case '<':
+			*out = e->op.v.op[1] ? *out <= right : *out < right;
+			break;
 		default:
 			return 0;
 		}