diff --git a/library/src-bootstrapped/dotty/internal/CompileTimeMacros.scala b/library/src-bootstrapped/dotty/internal/CompileTimeMacros.scala new file mode 100644 index 000000000000..4af284097d93 --- /dev/null +++ b/library/src-bootstrapped/dotty/internal/CompileTimeMacros.scala @@ -0,0 +1,11 @@ +package dotty.internal + +import scala.quoted._ + +object CompileTimeMacros: + def codeExpr(using qctx: QuoteContext)(sc: Expr[StringContext], args: Expr[Seq[Any]]): Expr[String] = + (sc, args) match + case (Expr.StringContext(Consts(parts)), Varargs(args2)) => + Expr(StringContext(parts: _*).s(args2.map(_.show): _*)) + case _ => + qctx.throwError("compiletime.code must be used as a string interpolator `code\"...\"`") diff --git a/library/src/scala/internal/quoted/CompileTime.scala b/library/src-bootstrapped/scala/internal/quoted/CompileTime.scala similarity index 100% rename from library/src/scala/internal/quoted/CompileTime.scala rename to library/src-bootstrapped/scala/internal/quoted/CompileTime.scala diff --git a/library/src/scala/quoted/Const.scala b/library/src-bootstrapped/scala/quoted/Const.scala similarity index 100% rename from library/src/scala/quoted/Const.scala rename to library/src-bootstrapped/scala/quoted/Const.scala diff --git a/library/src/scala/quoted/Consts.scala b/library/src-bootstrapped/scala/quoted/Consts.scala similarity index 100% rename from library/src/scala/quoted/Consts.scala rename to library/src-bootstrapped/scala/quoted/Consts.scala diff --git a/library/src/scala/quoted/Expr.scala b/library/src-bootstrapped/scala/quoted/Expr.scala similarity index 100% rename from library/src/scala/quoted/Expr.scala rename to library/src-bootstrapped/scala/quoted/Expr.scala diff --git a/library/src/scala/quoted/Lambda.scala b/library/src-bootstrapped/scala/quoted/Lambda.scala similarity index 100% rename from library/src/scala/quoted/Lambda.scala rename to library/src-bootstrapped/scala/quoted/Lambda.scala diff --git a/library/src/scala/quoted/Liftable.scala b/library/src-bootstrapped/scala/quoted/Liftable.scala similarity index 100% rename from library/src/scala/quoted/Liftable.scala rename to library/src-bootstrapped/scala/quoted/Liftable.scala diff --git a/library/src/scala/quoted/QuoteContext.scala b/library/src-bootstrapped/scala/quoted/QuoteContext.scala similarity index 100% rename from library/src/scala/quoted/QuoteContext.scala rename to library/src-bootstrapped/scala/quoted/QuoteContext.scala diff --git a/library/src/scala/quoted/Type.scala b/library/src-bootstrapped/scala/quoted/Type.scala similarity index 100% rename from library/src/scala/quoted/Type.scala rename to library/src-bootstrapped/scala/quoted/Type.scala diff --git a/library/src/scala/quoted/Unliftable.scala b/library/src-bootstrapped/scala/quoted/Unliftable.scala similarity index 100% rename from library/src/scala/quoted/Unliftable.scala rename to library/src-bootstrapped/scala/quoted/Unliftable.scala diff --git a/library/src/scala/quoted/Unlifted.scala b/library/src-bootstrapped/scala/quoted/Unlifted.scala similarity index 100% rename from library/src/scala/quoted/Unlifted.scala rename to library/src-bootstrapped/scala/quoted/Unlifted.scala diff --git a/library/src/scala/quoted/Varargs.scala b/library/src-bootstrapped/scala/quoted/Varargs.scala similarity index 100% rename from library/src/scala/quoted/Varargs.scala rename to library/src-bootstrapped/scala/quoted/Varargs.scala diff --git a/library/src/scala/quoted/autolift.scala b/library/src-bootstrapped/scala/quoted/autolift.scala similarity index 100% rename from library/src/scala/quoted/autolift.scala rename to library/src-bootstrapped/scala/quoted/autolift.scala diff --git a/library/src/scala/quoted/unsafe/UnsafeExpr.scala b/library/src-bootstrapped/scala/quoted/unsafe/UnsafeExpr.scala similarity index 100% rename from library/src/scala/quoted/unsafe/UnsafeExpr.scala rename to library/src-bootstrapped/scala/quoted/unsafe/UnsafeExpr.scala diff --git a/library/src/scala/quoted/util/ExprMap.scala b/library/src-bootstrapped/scala/quoted/util/ExprMap.scala similarity index 100% rename from library/src/scala/quoted/util/ExprMap.scala rename to library/src-bootstrapped/scala/quoted/util/ExprMap.scala diff --git a/library/src/scala/quoted/util/Var.scala b/library/src-bootstrapped/scala/quoted/util/Var.scala similarity index 100% rename from library/src/scala/quoted/util/Var.scala rename to library/src-bootstrapped/scala/quoted/util/Var.scala diff --git a/library/src-non-bootstrapped/dotty/internal/CompileTimeMacros.scala b/library/src-non-bootstrapped/dotty/internal/CompileTimeMacros.scala new file mode 100644 index 000000000000..0643f1db8cfe --- /dev/null +++ b/library/src-non-bootstrapped/dotty/internal/CompileTimeMacros.scala @@ -0,0 +1,7 @@ +package dotty.internal + +import scala.quoted._ + +object CompileTimeMacros: + def codeExpr(using qctx: QuoteContext)(sc: Expr[StringContext], args: Expr[Seq[Any]]): Expr[String] = + throw new Exception("Non bootstrapped library") diff --git a/library/src-non-bootstrapped/scala/internal/quoted/CompileTime.scala b/library/src-non-bootstrapped/scala/internal/quoted/CompileTime.scala new file mode 100644 index 000000000000..02c03da8d42a --- /dev/null +++ b/library/src-non-bootstrapped/scala/internal/quoted/CompileTime.scala @@ -0,0 +1,36 @@ +package scala.internal.quoted + +import scala.annotation.{Annotation, compileTimeOnly} +import scala.quoted._ + +@compileTimeOnly("Illegal reference to `scala.internal.quoted.CompileTime`") +object CompileTime { + + @compileTimeOnly("Illegal reference to `scala.internal.quoted.CompileTime.exprQuote`") + def exprQuote[T](x: T): QuoteContext ?=> Expr[T] = ??? + + @compileTimeOnly("Illegal reference to `scala.internal.quoted.CompileTime.exprSplice`") + def exprSplice[T](x: QuoteContext ?=> Expr[T]): T = ??? + + @compileTimeOnly("Illegal reference to `scala.internal.quoted.CompileTime.exprNestedSplice`") + def exprNestedSplice[T](ctx: QuoteContext)(x: ctx.Nested ?=> Expr[T]): T = ??? + + @compileTimeOnly("Illegal reference to `scala.internal.quoted.CompileTime.typeQuote`") + def typeQuote[T <: AnyKind]: Type[T] = ??? + + @compileTimeOnly("Illegal reference to `scala.internal.quoted.CompileTime.patternHole`") + def patternHole[T]: T = ??? + + @compileTimeOnly("Illegal reference to `scala.internal.quoted.CompileTime.patternBindHole`") + class patternBindHole extends Annotation + + @compileTimeOnly("Illegal reference to `scala.internal.quoted.CompileTime.patternType`") + class patternType extends Annotation + + @compileTimeOnly("Illegal reference to `scala.internal.quoted.CompileTime.fromAbove`") + class fromAbove extends Annotation + + @compileTimeOnly("Illegal reference to `scala.internal.quoted.CompileTime.quoteTypeTag`") + class quoteTypeTag extends Annotation + +} diff --git a/library/src-non-bootstrapped/scala/quoted/Expr.scala b/library/src-non-bootstrapped/scala/quoted/Expr.scala new file mode 100644 index 000000000000..7d7c18feb079 --- /dev/null +++ b/library/src-non-bootstrapped/scala/quoted/Expr.scala @@ -0,0 +1,5 @@ +package scala.quoted + +class Expr[+T] private[scala]: + def unseal(using qctx: QuoteContext): qctx.tasty.Term = + throw new Exception("Non bootstrapped library") diff --git a/library/src-non-bootstrapped/scala/quoted/QuoteContext.scala b/library/src-non-bootstrapped/scala/quoted/QuoteContext.scala new file mode 100644 index 000000000000..1c351c45160e --- /dev/null +++ b/library/src-non-bootstrapped/scala/quoted/QuoteContext.scala @@ -0,0 +1,11 @@ +package scala.quoted + +trait QuoteContext { self => + + val tasty: scala.tasty.Reflection + + type Nested = QuoteContext { + val tasty: self.tasty.type + } + +} diff --git a/library/src-non-bootstrapped/scala/quoted/Type.scala b/library/src-non-bootstrapped/scala/quoted/Type.scala new file mode 100644 index 000000000000..d67c5739d6e4 --- /dev/null +++ b/library/src-non-bootstrapped/scala/quoted/Type.scala @@ -0,0 +1,6 @@ +package scala.quoted + +class Type[T <: AnyKind] private[scala]: + type `$splice` = T + def unseal(using qctx: QuoteContext): qctx.tasty.TypeTree = + throw new Exception("Non bootstrapped library") diff --git a/library/src/scala/compiletime/package.scala b/library/src/scala/compiletime/package.scala index ecdff6b72c0a..dbc60f3b9298 100644 --- a/library/src/scala/compiletime/package.scala +++ b/library/src/scala/compiletime/package.scala @@ -35,13 +35,8 @@ package object compiletime { * @note only by-name arguments will be displayed as "code". * Other values may display unintutively. */ - transparent inline def (inline self: StringContext) code (inline args: Any*): String = ${ codeExpr('self, 'args) } - private def codeExpr(using qctx: QuoteContext)(sc: Expr[StringContext], args: Expr[Seq[Any]]): Expr[String] = - (sc, args) match - case (Expr.StringContext(Consts(parts)), Varargs(args2)) => - Expr(StringContext(parts: _*).s(args2.map(_.show): _*)) - case _ => - qctx.throwError("compiletime.code must be used as a string interpolator `code\"...\"`") + transparent inline def (inline self: StringContext) code (inline args: Any*): String = + ${ dotty.internal.CompileTimeMacros.codeExpr('self, 'args) } inline def constValueOpt[T]: Option[T] = ??? diff --git a/tests/neg/i6622f.scala b/tests/neg-macros/i6622f.scala similarity index 100% rename from tests/neg/i6622f.scala rename to tests/neg-macros/i6622f.scala diff --git a/tests/run/i6622.scala b/tests/run-macros/i6622.scala similarity index 100% rename from tests/run/i6622.scala rename to tests/run-macros/i6622.scala diff --git a/tests/run/i8306.scala b/tests/run-macros/i8306.scala similarity index 100% rename from tests/run/i8306.scala rename to tests/run-macros/i8306.scala diff --git a/tests/run/i8746/Macro_1.scala b/tests/run-macros/i8746/Macro_1.scala similarity index 100% rename from tests/run/i8746/Macro_1.scala rename to tests/run-macros/i8746/Macro_1.scala diff --git a/tests/run/i8746/Test_2.scala b/tests/run-macros/i8746/Test_2.scala similarity index 100% rename from tests/run/i8746/Test_2.scala rename to tests/run-macros/i8746/Test_2.scala diff --git a/tests/run/i8746b/Macro_1.scala b/tests/run-macros/i8746b/Macro_1.scala similarity index 100% rename from tests/run/i8746b/Macro_1.scala rename to tests/run-macros/i8746b/Macro_1.scala diff --git a/tests/run/i8746b/Test_2.scala b/tests/run-macros/i8746b/Test_2.scala similarity index 100% rename from tests/run/i8746b/Test_2.scala rename to tests/run-macros/i8746b/Test_2.scala