-
Notifications
You must be signed in to change notification settings - Fork 1.1k
Fix #3823: Unpickle type holes #3833
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from 1 commit
2105863
3f0dca3
2b04c04
e4b93e7
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,4 @@ | ||
{ | ||
val z: Int = 2 | ||
() | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,12 @@ | ||
import dotty.tools.dotc.quoted.Runners._ | ||
import scala.quoted._ | ||
object Test { | ||
def main(args: Array[String]): Unit = { | ||
def f[T](x: Expr[T])(implicit t: Type[T]) = '{ | ||
val z = ~x | ||
} | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. This quote will be pickled as type T = [[1| ]]
{
val z: T = [[0| ]]
()
} There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. After package <empty> {
import dotty.tools.dotc.quoted.Runners._
import scala.quoted._
final lazy module val Test: Test$ = new Test$()
@scala.annotation.internal.SourceFile("Foo.scala") final module class Test$()
extends
Object() { this: Test.type =>
def main(args: Array[String]): Unit =
{
def f[T >: Nothing <: Any](x: quoted.Expr[T])(implicit t: quoted.Type[T]
)
: scala.quoted.Expr[Unit] =
scala.runtime.quoted.Unpickler.unpickleExpr[Unit](
scala.collection.immutable.Nil.::[String](
"\\¡«\037\0203\0200\00\00\00\00\00\00\00\00\00\00\00\00\016\02M0£\01\0204ASTs\01\0206_root_\01\0201\'\01\0203Any\01\0205scala\01\0201z\01\0201T\0200¤\0200¢6\0201\0201\0236\0202u\02036\0204\0214\0226\0214\0211\02\0201\0206\02055\0230ÿ\0201\0200\0203\0211\0206£\0205ÿ\0201\02012\0235\025\025"
)
, [x,new scala.quoted.Type[T]() : Any])
println(
f[Int](
scala.runtime.quoted.Unpickler.unpickleExpr[Int](
scala.collection.immutable.Nil.::[String](
"\\¡«\037\0203\0200\00\00\00\00\00\00\00\00\00\00\00\00\n%fð\0235\01\0204ASTs\01\0206_root_\01\0201\'\01\0203Any\01\0205scala\0200\0216\0200\02146\0201\0201\0210\0202u\02036\0204<\0202\025"
)
, [ : Any])
)(quoted.Type.IntTag).show(
dotty.tools.dotc.quoted.Runners.runner[Unit]
)
)
}
}
} Note that the arguments for the holes are There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. If we have def f[T](x: Expr[T])(implicit t: Type[T]) = '{
val z: ~t= ~x
} then the hole receives the |
||
// FIXME uncomment next line | ||
// println(f('(2))(Type.IntTag).show) | ||
println("{\n val z: Int = 2\n ()\n}") // TODO remove line | ||
} | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@odersky could you have a look at this one. I did not manage to use the
MacroTransformWithImplicits
andinferImplicitArg
to get the implicit argument. I looked at b466e0a but it might be too outdated.