diff options
author | Kartik Agaram <vc@akkartik.com> | 2020-02-21 10:05:04 -0800 |
---|---|---|
committer | Kartik Agaram <vc@akkartik.com> | 2020-02-21 10:09:59 -0800 |
commit | fee1bbd8b4681acca7daba1b3b70ce6d26e52fb4 (patch) | |
tree | ceae46b4b130d02eac6de7cc2379ebcd61bf9564 /apps/factorial.mu | |
parent | 1837f6117632c80214f45ed94a0d3406810e431f (diff) | |
download | mu-fee1bbd8b4681acca7daba1b3b70ce6d26e52fb4.tar.gz |
6041 - array indexing starting to work
And we're using it now in factorial.mu! In the process I had to fix a couple of bugs in pointer dereferencing. There are still some limitations: a) Indexing by a literal doesn't work yet. b) Only arrays of ints supported so far. Looking ahead, I'm not sure how I can support indexing arrays by non-literals (variables in registers) unless the element size is a power of 2.
Diffstat (limited to 'apps/factorial.mu')
-rw-r--r-- | apps/factorial.mu | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/apps/factorial.mu b/apps/factorial.mu index 6117d153..de5bcf54 100644 --- a/apps/factorial.mu +++ b/apps/factorial.mu @@ -1,7 +1,7 @@ -# usage is finicky for now: +# usage: # ./translate_mu apps/factorial.mu -# ./a.elf test # any args? run tests -# ./a.elf # no args? run factorial(5) +# ./a.elf test # to run tests +# ./a.elf # to run factorial(5) fn main args: (addr array kernel-string) -> exit-status/ebx: int { var a/eax: (addr array kernel-string) <- copy args var tmp/ecx: int <- length a @@ -14,11 +14,15 @@ fn main args: (addr array kernel-string) -> exit-status/ebx: int { exit-status <- copy tmp break $main-body } - # if (len(args) != 1) run-tests() + # if (args[1] == "test") run-tests() + var tmp2/ecx: int <- copy 1 # we need this just because we don't yet support `index` on literals; requires some translation-time computation + var tmp3/ecx: (addr kernel-string) <- index a, tmp2 + var tmp4/eax: boolean <- kernel-string-equal? *tmp3, "test" + compare tmp4, 0 { break-if-= run-tests - exit-status <- copy 0 + exit-status <- copy 0 # TODO: get at Num-test-failures somehow } } } |