summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLeo Tenenbaum <pommicket@gmail.com>2019-10-24 20:43:13 -0400
committerLeo Tenenbaum <pommicket@gmail.com>2019-10-24 20:43:13 -0400
commit737b1c8be8912cce40b1874a657a579e15d531ee (patch)
treea0efc1722117ccc9b1049aa9b818dd457c9c02c0
parenta87d34c7584c1c69faed8238def13331d56aa996 (diff)
better support for compile time tuples
-rw-r--r--eval.c6
-rw-r--r--main.c4
-rw-r--r--test.toc25
3 files changed, 13 insertions, 22 deletions
diff --git a/eval.c b/eval.c
index 471d164..4c0402b 100644
--- a/eval.c
+++ b/eval.c
@@ -483,8 +483,12 @@ static bool eval_set(Evaluator *ev, Expression *set, Value *to) {
} break;
default: break;
}
+ break;
case EXPR_TUPLE:
- /* TODO */
+ for (size_t i = 0; i < arr_len(set->tuple); i++) {
+ if (!eval_set(ev, &set->tuple[i], &to->tuple[i]))
+ return false;
+ }
break;
default:
assert(0);
diff --git a/main.c b/main.c
index 1b8e48e..638e72c 100644
--- a/main.c
+++ b/main.c
@@ -1,15 +1,15 @@
/*
TODO:
-pointer arithmetic
compile time arrays, slices
-unicode variable names
make sure initializers for global variables are compile-time constants
structs
length of slice/arr with .len
don't allow while {3; 5} (once break is added)
+allow omission of trailing ; in foo @= fn() {}
any odd number of "s for a string
modifiable strings:
s := ["sakjdfhkjh ksjdahfkjsd ahs ahdf hsdaf khsadkjfh"];
+unicode variable names
*/
#include "toc.c"
diff --git a/test.toc b/test.toc
index 48e0e1e..87e4e47 100644
--- a/test.toc
+++ b/test.toc
@@ -13,30 +13,17 @@ putf @= fn(x: float) {
");
};
-sum @= fn(x: []int, n: int) int {
- p := &x[0];
- end := &x[n-1];
- total := 0;
- while p <= end {
- total = total + *p;
- p = p + 1;
- }
- total
+ptriple @= fn(m: int, n: int) (int, int, int) {
+ m*m-n*n, 2*m*n, m*m+n*n
};
f @= fn() int {
- N @= 10;
-
- numbers := new(int, N);
- i := 0;
- while i < N {
- numbers[i] = i;
- i = i + 1;
- }
- sum(numbers, N)
+ a, b, c : int;
+ a, b, c = ptriple(3, 2);
+ a + b + c
};
main @= fn() {
- a: [f()]int;
puti(f());
+ A : [f()]int;
};