commit a9a8fc00f773543bcd569ba40f843d728b84d637
parent f5e7aa1f1e1d2f98a75bf61b1e24aeeeb1106b2e
Author: Ed van Bruggen <edvb@uw.edu>
Date:   Thu, 12 Apr 2018 18:34:48 -0700
Add + prefix to indicate positive numbers
Diffstat:
3 files changed, 12 insertions(+), 4 deletions(-)
diff --git a/t/simple/self.expect b/t/simple/self.expect
@@ -6,6 +6,8 @@
 -4
 -83
 0
+4
+123
 "foo"
 "foo bar"
 t
diff --git a/t/simple/self.tsp b/t/simple/self.tsp
@@ -6,6 +6,8 @@
 -4
 -083
 -0
++4
++123
 "foo"
 "foo bar"
 t
diff --git a/tisp.c b/tisp.c
@@ -24,7 +24,8 @@ skip_spaces(Str str)
 static int
 issym(char c)
 {
-	return BETWEEN(c, 'a', 'z') || strchr("+-*/=?", c);
+	return BETWEEN(c, 'a', 'z') || BETWEEN(c, 'A', 'Z') ||
+	       BETWEEN(c, '0', '9') || strchr("+-*/=?", c);
 }
 
 static int
@@ -274,9 +275,12 @@ mk_list(int n, Val *a)
 static int
 read_int(Str str) {
 	int ret, sign = 1;
-	if (*str->d == '-') {
-		str->d++;
+	switch (*str->d) {
+	case '-':
 		sign = -1;
+	case '+':
+		str->d++;
+		break;
 	}
 	for (ret = 0; isdigit(*str->d); str->d++)
 		ret = ret * 10 + *str->d - '0';
@@ -343,7 +347,7 @@ Val
 tisp_read(Str str)
 {
 	skip_spaces(str);
-	if (isdigit(*str->d) || (*str->d == '-' && isdigit(str->d[1])))
+	if (isdigit(*str->d) || ((*str->d == '-' || *str->d == '+') && isdigit(str->d[1])))
 		return read_num(str);
 	if (*str->d == '"')
 		return read_str(str);