summaryrefslogtreecommitdiff
path: root/test/files/run/t5923c
diff options
context:
space:
mode:
authorEugene Burmako <xeno.by@gmail.com>2013-10-02 17:21:55 +0200
committerAdriaan Moors <adriaan.moors@typesafe.com>2013-11-12 18:40:01 -0800
commit6038bac3513a834e67ab4074c2c7b03aac11b1b3 (patch)
tree61a5fb1019fd24e69c8fca420b710f1235b27b50 /test/files/run/t5923c
parenta2b523a39b4e56eb9ab5d9a5639f5b59d425e354 (diff)
downloadscala-6038bac3513a834e67ab4074c2c7b03aac11b1b3.tar.gz
scala-6038bac3513a834e67ab4074c2c7b03aac11b1b3.tar.bz2
scala-6038bac3513a834e67ab4074c2c7b03aac11b1b3.zip
blackbox restriction #2: can't guide type inference
When an application of a blackbox macro still has undetermined type parameters after Scala’s type inference algorithm has finished working, these type parameters are inferred forcedly, in exactly the same manner as type inference happens for normal methods. This makes it impossible for blackbox macros to influence type inference, prohibiting fundep materialization.
Diffstat (limited to 'test/files/run/t5923c')
-rw-r--r--test/files/run/t5923c/Macros_1.scala39
-rw-r--r--test/files/run/t5923c/Test_2.scala12
2 files changed, 0 insertions, 51 deletions
diff --git a/test/files/run/t5923c/Macros_1.scala b/test/files/run/t5923c/Macros_1.scala
deleted file mode 100644
index c86e14966b..0000000000
--- a/test/files/run/t5923c/Macros_1.scala
+++ /dev/null
@@ -1,39 +0,0 @@
-import language.experimental.macros
-import scala.reflect.macros.WhiteboxContext
-
-trait Iso[T, U] {
- def to(t : T) : U
- // def from(u : U) : T
-}
-
-object Iso {
- implicit def materializeIso[T, U]: Iso[T, U] = macro impl[T, U]
- def impl[T: c.WeakTypeTag, U: c.WeakTypeTag](c: WhiteboxContext): c.Expr[Iso[T, U]] = {
- import c.universe._
- import definitions._
- import Flag._
-
- val sym = c.weakTypeOf[T].typeSymbol
- if (!sym.isClass || !sym.asClass.isCaseClass) c.abort(c.enclosingPosition, s"$sym is not a case class")
- val fields = sym.typeSignature.declarations.toList.collect{ case x: TermSymbol if x.isVal && x.isCaseAccessor => x }
-
- def mkTpt() = {
- val core = Ident(TupleClass(fields.length) orElse UnitClass)
- if (fields.length == 0) core
- else AppliedTypeTree(core, fields map (f => TypeTree(f.typeSignature)))
- }
-
- def mkFrom() = {
- if (fields.length == 0) Literal(Constant(Unit))
- else Apply(Ident(newTermName("Tuple" + fields.length)), fields map (f => Select(Ident(newTermName("f")), newTermName(f.name.toString.trim))))
- }
-
- val evidenceClass = ClassDef(Modifiers(FINAL), newTypeName("$anon"), List(), Template(
- List(AppliedTypeTree(Ident(newTypeName("Iso")), List(Ident(sym), mkTpt()))),
- emptyValDef,
- List(
- DefDef(Modifiers(), nme.CONSTRUCTOR, List(), List(List()), TypeTree(), Block(List(Apply(Select(Super(This(tpnme.EMPTY), tpnme.EMPTY), nme.CONSTRUCTOR), List())), Literal(Constant(())))),
- DefDef(Modifiers(), newTermName("to"), List(), List(List(ValDef(Modifiers(PARAM), newTermName("f"), Ident(sym), EmptyTree))), TypeTree(), mkFrom()))))
- c.Expr[Iso[T, U]](Block(List(evidenceClass), Apply(Select(New(Ident(newTypeName("$anon"))), nme.CONSTRUCTOR), List())))
- }
-}
diff --git a/test/files/run/t5923c/Test_2.scala b/test/files/run/t5923c/Test_2.scala
deleted file mode 100644
index a00f4ed7db..0000000000
--- a/test/files/run/t5923c/Test_2.scala
+++ /dev/null
@@ -1,12 +0,0 @@
-// see the comments for macroExpandApply.onDelayed for an explanation of what's tested here
-object Test extends App {
- case class Foo(i: Int, s: String, b: Boolean)
- def foo[C, L](c: C)(implicit iso: Iso[C, L]): L = iso.to(c)
-
- {
- val equiv = foo(Foo(23, "foo", true))
- def typed[T](t: => T) {}
- typed[(Int, String, Boolean)](equiv)
- println(equiv)
- }
-} \ No newline at end of file