diff options
author | Eugene Burmako <xeno.by@gmail.com> | 2011-12-05 17:00:55 +0100 |
---|---|---|
committer | Eugene Burmako <xeno.by@gmail.com> | 2011-12-05 17:00:55 +0100 |
commit | 6e9ae187a05b1ca4fe748d8a7b45440a55ceb589 (patch) | |
tree | ecf9aadb4d8e122ebc4be30997bc3b52880b2521 /test/pending/run/reify_timeofday.scala | |
parent | a289465c70630719cbd3a74edf5502a156ef83c4 (diff) | |
download | scala-6e9ae187a05b1ca4fe748d8a7b45440a55ceb589.tar.gz scala-6e9ae187a05b1ca4fe748d8a7b45440a55ceb589.tar.bz2 scala-6e9ae187a05b1ca4fe748d8a7b45440a55ceb589.zip |
Another test pack for reflection
Also see https://github.com/scala/scala/pull/25.
Diffstat (limited to 'test/pending/run/reify_timeofday.scala')
-rw-r--r-- | test/pending/run/reify_timeofday.scala | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/test/pending/run/reify_timeofday.scala b/test/pending/run/reify_timeofday.scala new file mode 100644 index 0000000000..6bd11b0d30 --- /dev/null +++ b/test/pending/run/reify_timeofday.scala @@ -0,0 +1,48 @@ +import scala.tools.nsc.reporters._ +import scala.tools.nsc.Settings +import reflect.runtime.Mirror.ToolBox + +object Test extends App { + val code = scala.reflect.Code.lift{ + class DateError extends Exception + + /** Simulating properties in Scala + * (example 4.2.1 in ScalaReference.pdf) + */ + class TimeOfDayVar { + private var h, m, s: Int = 0 + + def hours = h + + /** A method 'ident_=' is a setter for 'ident'. 'code.ident = ...' will + * be translated to a call to 'ident_=' + */ + def hours_= (h: Int) = + if (0 <= h && h < 24) this.h = h + else throw new DateError() + + def minutes = m + def minutes_= (m: Int) = + if (0 <= m && m < 60) this.m = m + else throw new DateError() + + def seconds = s + def seconds_= (s: Int) = + if (0 <= s && s < 60) this.s = s + else throw new DateError() + } + + val d = new TimeOfDayVar + d.hours = 8; d.minutes = 30; d.seconds = 0 + try { d.hours = 25 // throws a DateError exception + } catch { + case de: DateError => println("DateError") + case e: Exception => println("Exception") + } + }; + + val reporter = new ConsoleReporter(new Settings) + val toolbox = new ToolBox(reporter) + val ttree = toolbox.typeCheck(code.tree) + toolbox.runExpr(ttree) +} |