diff options
author | Aleksandar Prokopec <axel22@gmail.com> | 2012-02-16 13:34:06 +0100 |
---|---|---|
committer | Aleksandar Prokopec <axel22@gmail.com> | 2012-02-16 13:34:06 +0100 |
commit | 53b05bb12f5a7a50448bcac9434389bf95273c45 (patch) | |
tree | d10140f4a3f2ea46dd39b47828c1326e9a61681e /test/files/run/reify_timeofday.scala | |
parent | f2ccb43a844e484ae511c8cff3fbf534a0d86ebe (diff) | |
parent | 91148376049a152edec12348ff9b7e9e93e6ebe1 (diff) | |
download | scala-53b05bb12f5a7a50448bcac9434389bf95273c45.tar.gz scala-53b05bb12f5a7a50448bcac9434389bf95273c45.tar.bz2 scala-53b05bb12f5a7a50448bcac9434389bf95273c45.zip |
Merge branch 'master' into execution-context
Conflicts:
src/library/scala/package.scala
Diffstat (limited to 'test/files/run/reify_timeofday.scala')
-rw-r--r-- | test/files/run/reify_timeofday.scala | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/test/files/run/reify_timeofday.scala b/test/files/run/reify_timeofday.scala new file mode 100644 index 0000000000..122d7a6d52 --- /dev/null +++ b/test/files/run/reify_timeofday.scala @@ -0,0 +1,47 @@ +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) + toolbox.runExpr(code.tree) +} |