From 737b1c8be8912cce40b1874a657a579e15d531ee Mon Sep 17 00:00:00 2001 From: Leo Tenenbaum Date: Thu, 24 Oct 2019 20:43:13 -0400 Subject: better support for compile time tuples --- eval.c | 6 +++++- main.c | 4 ++-- test.toc | 25 ++++++------------------- 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; }; -- cgit v1.2.3