about summary refs log tree commit diff stats
path: root/subx/test_apps
diff options
context:
space:
mode:
authorKartik Agaram <vc@akkartik.com>2018-12-30 01:30:56 -0800
committerKartik Agaram <vc@akkartik.com>2018-12-30 01:30:56 -0800
commit395b3ffbebb4656fdc5096887bc1ca7df5180da3 (patch)
treee39fb0e76353cb5db67db39428d6698495878a97 /subx/test_apps
parent76590e79bb45d192ba0ed9cc82952321aec0d682 (diff)
downloadmu-395b3ffbebb4656fdc5096887bc1ca7df5180da3.tar.gz
4894
Done with kinda-safe pointers.

In a real compiler the fast path of 'lookup' would ideally get inlined.
Excluding procedure-call overhead, the current implementation consumes 2
registers besides the input, and requires 9 instructions (2 push, 2 load,
compare, jump, increment, 2 pop). That's large enough that inlining may
become a trade-off. Even if we somehow magically had the registers already
loaded and available, we'd still need 4 instructions (1 pointer dereference,
compare, jump and increment). The price of safety.
Diffstat (limited to 'subx/test_apps')
-rwxr-xr-xsubx/test_apps10
1 files changed, 10 insertions, 0 deletions
diff --git a/subx/test_apps b/subx/test_apps
index 4de0ce06..62df1fe4 100755
--- a/subx/test_apps
+++ b/subx/test_apps
@@ -126,6 +126,16 @@ CFLAGS=-g ./subx translate examples/ex12.subx  -o examples/ex12
 CFLAGS=-g ./subx run examples/ex12  # final byte of mmap'd address is well-nigh guaranteed to be 0
 test `uname` = 'Linux'  &&  examples/ex12
 
+echo handle
+CFLAGS=-g ./subx translate *.subx apps/handle.subx  -o apps/handle
+[ "$1" != record ]  &&  git diff --quiet apps/handle
+CFLAGS=-g ./subx run apps/handle 2>&1  |grep -q 'lookup failed'
+echo
+test `uname` = 'Linux'  &&  {
+  apps/handle test 2>&1  |grep -q 'lookup failed'
+  echo
+}
+
 echo factorial
 CFLAGS=-g ./subx translate *.subx apps/factorial.subx  -o apps/factorial
 [ "$1" != record ]  &&  git diff --quiet apps/factorial