aboutsummaryrefslogtreecommitdiff
path: root/tests/run/inlineTest.scala
blob: feaa43fbb37e8e81a170fa2edbb387e8974c31d0 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
import collection.mutable

object Test {

  final val monitored = false

  @dotty.annotation.inline
  def f(x: Int): Int = x * x

  val hits = new mutable.HashMap[String, Int] {
    override def default(key: String): Int = 0
  }

  def record(fn: String, n: Int = 1) = {
    if (monitored) {
      val name = if (fn.startsWith("member-")) "member" else fn
      hits(name) += n
    }
  }

  @volatile private var stack: List[String] = Nil

  @dotty.annotation.inline
  def track[T](fn: String)(op: => T) =
    if (monitored) {
      stack = fn :: stack
      record(fn)
      try op
      finally stack = stack.tail
    } else op

  class Outer {
    def f = "Outer.f"
    class Inner {
      val msg = " Inner"
      @dotty.annotation.inline def g = f
      @dotty.annotation.inline def h = f ++ this.msg
    }
  }

  def main(args: Array[String]): Unit = {
    println(f(10))
    println(f(f(10)))

    track("hello") { println("") }

    val o = new Outer
    val i = new o.Inner
    println(i.g)
    //println(i.h)
  }

}