From 7bb5ac5863bdb4bc7af04ee18e81657a85aa97f2 Mon Sep 17 00:00:00 2001
From: Leo Tenenbaum <pommicket@gmail.com>
Date: Fri, 13 Mar 2020 15:32:12 -0400
Subject: added where conditions for functions, discovered bug with eval
 returning

---
 tests/test.sh        |  1 +
 tests/where.toc      | 30 ++++++++++++++++++++++++++++++
 tests/where_expected |  1 +
 3 files changed, 32 insertions(+)
 create mode 100644 tests/where.toc
 create mode 100644 tests/where_expected

(limited to 'tests')

diff --git a/tests/test.sh b/tests/test.sh
index 5b2cb14..31ccb6b 100755
--- a/tests/test.sh
+++ b/tests/test.sh
@@ -8,6 +8,7 @@ foreign
 params
 nms
 varargs
+where
 misc'
 
 STARTPWD=$(pwd)
diff --git a/tests/where.toc b/tests/where.toc
new file mode 100644
index 0000000..4223656
--- /dev/null
+++ b/tests/where.toc
@@ -0,0 +1,30 @@
+printf ::= #foreign("printf","libc.so.6") fn(#C &"const char", #C ..) #C int;
+
+tprintf_valid ::= fn(fmt :: []char, nargs: int) bool {
+	if fmt[fmt.len-1] != '\0' {
+		return false;
+	}
+	count := 0;
+	for x, i := fmt {
+		if x == '%' {
+			if i == fmt.len-1 {
+				count += 1;
+			} elif fmt[i+1] != '%' {
+				count += 1;
+			} else {
+				count -= 1;
+			}
+		}
+	}
+	count == nargs
+};
+	
+
+tprintf ::= fn(fmt :: []char, args: ..) where tprintf_valid(fmt, args.len) {
+	f := fmt;
+	printf(&f[0], args);
+};
+
+main ::= fn() {
+	 tprintf("%d %d%%\n\0", 3, 4);
+};
diff --git a/tests/where_expected b/tests/where_expected
new file mode 100644
index 0000000..622c000
--- /dev/null
+++ b/tests/where_expected
@@ -0,0 +1 @@
+3 4%
-- 
cgit v1.2.3