summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSøren Sandmann Pedersen <ssp@redhat.com>2012-06-13 10:12:12 -0400
committerSøren Sandmann Pedersen <ssp@redhat.com>2012-06-13 10:12:12 -0400
commitc1dbe312f27a236f3bfd15bcd01ad43fbe7a27ef (patch)
tree28af813c2dc1c5231fbad896a0bb567d5447df1a
parenta08e6a8f792cb5f610040374c11b2081d44437f5 (diff)
asdf
-rw-r--r--TODO3
-rw-r--r--examples/crasher.nl36
2 files changed, 26 insertions, 13 deletions
diff --git a/TODO b/TODO
index bb37277..6a57ae2 100644
--- a/TODO
+++ b/TODO
@@ -2,7 +2,8 @@
- Short-term tasks:
- - Fix crasher.nl
+ - Fix crasher.nl (actually this was just a bug in the program,
+ generating NULL pointer exceptions is really needed)
- Test suite
- Rename
diff --git a/examples/crasher.nl b/examples/crasher.nl
index f1a4a49..6a28dfa 100644
--- a/examples/crasher.nl
+++ b/examples/crasher.nl
@@ -1,19 +1,28 @@
class tree_t
{
- left, right: tree_t;
- value: int32;
- exceptional: bool;
+ left, right: tree_t;
+ value: int32;
+ exceptional: bool;
};
-sum (t: tree_t, exit: label) -> int32
+sum (t: tree_t, exit: fn (why: string)) -> int32
{
- if (t.exceptional)
- goto exit;
-
if (t != null)
- return sum (t.left, exit) + sum (t.right, exit) + t.value;
+ {
+ print t.value;
+
+ if (t.exceptional)
+ exit ("Something terrible happened");
+
+ return
+ sum (t.left, exit) +
+ sum (t.right, exit) +
+ t.value;
+ }
else
+ {
return 0;
+ }
}
make_tree (level: int32, generator: fn() -> int32) -> tree_t
@@ -58,9 +67,12 @@ v: int32 = 0;
t: tree_t = make_tree (7, fn() -> int32 { return v++; });
-sum (t, handler);
-for (;;);
+sum (t, fn (s: string) {
+ print "something went wrong:";
+ print s;
+ goto done;
+ });
-@handler:
- print "Something went terribly wrong";
+@done:
+print "we are now done";