diff options
author | Iulian Dragos <jaguarul@gmail.com> | 2007-10-11 14:39:17 +0000 |
---|---|---|
committer | Iulian Dragos <jaguarul@gmail.com> | 2007-10-11 14:39:17 +0000 |
commit | e2565c03562743d04f2f2c3557f5342ea5b76fbe (patch) | |
tree | 1b11f0d5cce63b1b7a36dd644051d0db486f2974 /test/files/run | |
parent | ab477e33c3d389a34361e9474848da3d1e57a9fe (diff) | |
download | scala-e2565c03562743d04f2f2c3557f5342ea5b76fbe.tar.gz scala-e2565c03562743d04f2f2c3557f5342ea5b76fbe.tar.bz2 scala-e2565c03562743d04f2f2c3557f5342ea5b76fbe.zip |
- Improved tail call elimination to handle call...
- Improved tail call elimination to handle calls on a different
instance.
- Improved tail calls by skipping trivial arguments (when the argument to the call is the parameter itself)
- added preliminary support for incremental DFA.
Diffstat (limited to 'test/files/run')
-rw-r--r-- | test/files/run/tailcalls.check | 1 | ||||
-rw-r--r-- | test/files/run/tailcalls.scala | 12 |
2 files changed, 13 insertions, 0 deletions
diff --git a/test/files/run/tailcalls.check b/test/files/run/tailcalls.check index 2bf399ec54..7ee9280223 100644 --- a/test/files/run/tailcalls.check +++ b/test/files/run/tailcalls.check @@ -52,3 +52,4 @@ test TailCall.b1 was successful test TailCall.b2 was successful test FancyTailCalls.tcTryLocal was successful test FancyTailCalls.tcTryCatch was successful +test FancyTailCalls.differentInstance was successful diff --git a/test/files/run/tailcalls.scala b/test/files/run/tailcalls.scala index 1bd698a832..0e158ac39f 100644 --- a/test/files/run/tailcalls.scala +++ b/test/files/run/tailcalls.scala @@ -194,6 +194,11 @@ class TailCall[S](s: S) { } +object FancyTailCalls { + val f1 = new FancyTailCalls + val f2 = new FancyTailCalls +} + class FancyTailCalls { def tcTryLocal(x: Int, v: Int): Int = { @@ -214,6 +219,12 @@ class FancyTailCalls { tcTryCatch(x - 1, v) } + import FancyTailCalls._ + final def differentInstance(n: Int, v: Int): Int = { + if (n == 0) v + else if ((n % 2) == 0) f1.differentInstance(n - 1, v) + else f2.differentInstance(n - 1, v) + } } class NonTailCall { @@ -374,6 +385,7 @@ object Test { val FancyTailCalls = new FancyTailCalls; check_success("FancyTailCalls.tcTryLocal", FancyTailCalls.tcTryLocal(max, max), max) check_success("FancyTailCalls.tcTryCatch", FancyTailCalls.tcTryCatch(max, max), max) + check_success("FancyTailCalls.differentInstance", FancyTailCalls.differentInstance(max, 42), 42) } } |