diff --git a/compiler/src/dotty/tools/dotc/transform/Splicer.scala b/compiler/src/dotty/tools/dotc/transform/Splicer.scala index b150414d11ee..d68b33a08dc6 100644 --- a/compiler/src/dotty/tools/dotc/transform/Splicer.scala +++ b/compiler/src/dotty/tools/dotc/transform/Splicer.scala @@ -63,8 +63,10 @@ object Splicer { catch { case ex: CompilationUnit.SuspendException => throw ex - case ex: scala.quoted.runtime.StopMacroExpansion if ctx.reporter.hasErrors => - // errors have been emitted + case ex: scala.quoted.runtime.StopMacroExpansion => + if !ctx.reporter.hasErrors then + report.error("Macro expansion was aborted by the macro without any errors reported. Macros should issue errors to end-users to facilitate debugging when aborting a macro expansion.", splicePos) + // errors have been emitted EmptyTree case ex: StopInterpretation => report.error(ex.msg, ex.pos) @@ -546,4 +548,3 @@ object Splicer { } } } - diff --git a/compiler/src/scala/quoted/runtime/impl/QuotesImpl.scala b/compiler/src/scala/quoted/runtime/impl/QuotesImpl.scala index 7a007e914e4f..d9d14ba93fb1 100644 --- a/compiler/src/scala/quoted/runtime/impl/QuotesImpl.scala +++ b/compiler/src/scala/quoted/runtime/impl/QuotesImpl.scala @@ -45,6 +45,14 @@ class QuotesImpl private (using val ctx: Context) extends Quotes, QuoteUnpickler def matches(that: scala.quoted.Expr[Any]): Boolean = treeMatch(reflect.asTerm(self), reflect.asTerm(that)).nonEmpty + def valueOrAbort(using fromExpr: FromExpr[T]): T = + def reportError = + val tree = reflect.asTerm(self) + val code = reflect.Printer.TreeCode.show(tree) + val msg = s"Expected a known value. \n\nThe value of: $code\ncould not be extracted using $fromExpr" + reflect.report.throwError(msg, self) + fromExpr.unapply(self)(using QuotesImpl.this).getOrElse(reportError) + end extension extension (self: scala.quoted.Expr[Any]) @@ -2750,14 +2758,23 @@ class QuotesImpl private (using val ctx: Context) extends Quotes, QuoteUnpickler dotc.report.error(msg, pos) def throwError(msg: String): Nothing = + errorAndAbort(msg) + + def throwError(msg: String, expr: Expr[Any]): Nothing = + errorAndAbort(msg, expr) + + def throwError(msg: String, pos: Position): Nothing = + errorAndAbort(msg, pos) + + def errorAndAbort(msg: String): Nothing = error(msg) throw new scala.quoted.runtime.StopMacroExpansion - def throwError(msg: String, expr: Expr[Any]): Nothing = + def errorAndAbort(msg: String, expr: Expr[Any]): Nothing = error(msg, expr) throw new scala.quoted.runtime.StopMacroExpansion - def throwError(msg: String, pos: Position): Nothing = + def errorAndAbort(msg: String, pos: Position): Nothing = error(msg, pos) throw new scala.quoted.runtime.StopMacroExpansion diff --git a/docs/docs/reference/metaprogramming/macros.md b/docs/docs/reference/metaprogramming/macros.md index cd0166e4120c..5b77a3e5a9d0 100644 --- a/docs/docs/reference/metaprogramming/macros.md +++ b/docs/docs/reference/metaprogramming/macros.md @@ -460,7 +460,7 @@ aspect is also important for macro expansion. To get values out of expressions containing constants `Expr` provides the method `value` (or `valueOrError`). This will convert the `Expr[T]` into a `Some[T]` (or `T`) when the -expression contains value. Otherwise it will retrun `None` (or emit an error). +expression contains value. Otherwise it will return `None` (or emit an error). To avoid having incidental val bindings generated by the inlining of the `def` it is recommended to use an inline parameter. To illustrate this, consider an implementation of the `power` function that makes use of a statically known exponent: diff --git a/library/src/scala/quoted/Quotes.scala b/library/src/scala/quoted/Quotes.scala index 8d7433ae79e1..6ae7bd1af1f7 100644 --- a/library/src/scala/quoted/Quotes.scala +++ b/library/src/scala/quoted/Quotes.scala @@ -54,6 +54,8 @@ trait Quotes { self: runtime.QuoteUnpickler & runtime.QuoteMatching => * Emits an error and throws if the expression does not represent a value or possibly contains side effects. * Otherwise returns the value. */ + // TODO: deprecate in 3.1.0 and remove @experimental from valueOrAbort + // @deprecated("Use valueOrThrow", "3.1.0") def valueOrError(using FromExpr[T]): T = val fromExpr = summon[FromExpr[T]] def reportError = @@ -62,6 +64,14 @@ trait Quotes { self: runtime.QuoteUnpickler & runtime.QuoteMatching => given Quotes = Quotes.this fromExpr.unapply(self).getOrElse(reportError) + /** Return the value of this expression. + * + * Emits an error and aborts if the expression does not represent a value or possibly contains side effects. + * Otherwise returns the value. + */ + @experimental + def valueOrAbort(using FromExpr[T]): T + end extension // Extension methods for `Expr[Any]` that take another explicit type parameter @@ -4169,12 +4179,30 @@ trait Quotes { self: runtime.QuoteUnpickler & runtime.QuoteMatching => def error(msg: String, pos: Position): Unit /** Report an error at the position of the macro expansion and throw a StopMacroExpansion */ + @experimental + def errorAndAbort(msg: String): Nothing + + /** Report an error at the position of `expr` and throw a StopMacroExpansion */ + @experimental + def errorAndAbort(msg: String, expr: Expr[Any]): Nothing + + /** Report an error message at the given position and throw a StopMacroExpansion */ + @experimental + def errorAndAbort(msg: String, pos: Position): Nothing + + /** Report an error at the position of the macro expansion and throw a StopMacroExpansion */ + // TODO: deprecate in 3.1.0 and remove @experimental from errorAndAbort + // @deprecated("Use errorAndAbort", "3.1.0") def throwError(msg: String): Nothing - /** Report an error at the position of `expr` */ + /** Report an error at the position of `expr` and throw a StopMacroExpansion */ + // TODO: deprecate in 3.1.0 and remove @experimental from errorAndAbort + // @deprecated("Use errorAndAbort", "3.1.0") def throwError(msg: String, expr: Expr[Any]): Nothing /** Report an error message at the given position and throw a StopMacroExpansion */ + // TODO: deprecate in 3.1.0 and remove @experimental from errorAndAbort + // @deprecated("Use errorAndAbort", "3.1.0") def throwError(msg: String, pos: Position): Nothing /** Report a warning at the position of the macro expansion */ diff --git a/library/src/scala/quoted/runtime/StopMacroExpansion.scala b/library/src/scala/quoted/runtime/StopMacroExpansion.scala index ebf9ad7e57b6..b4d570167621 100644 --- a/library/src/scala/quoted/runtime/StopMacroExpansion.scala +++ b/library/src/scala/quoted/runtime/StopMacroExpansion.scala @@ -1,4 +1,9 @@ package scala.quoted.runtime -/** Throwable used to stop the expansion of a macro after an error was reported */ -class StopMacroExpansion extends Throwable +/** Throwable used to abort the expansion of a macro after an error was reported */ +class StopMacroExpansion extends Throwable: + + // Do not fill the stacktrace for performance. + // We know that the stacktrace will be ignored + // and only the reported error message will be used. + override def fillInStackTrace(): Throwable = this diff --git a/project/MiMaFilters.scala b/project/MiMaFilters.scala index 334bc15b49ba..82e29ce30543 100644 --- a/project/MiMaFilters.scala +++ b/project/MiMaFilters.scala @@ -5,6 +5,8 @@ import com.typesafe.tools.mima.core.ProblemFilters._ object MiMaFilters { val Library: Seq[ProblemFilter] = Seq( // New APIs marked @experimental in 3.0.1 + exclude[DirectMissingMethodProblem]("scala.quoted.Quotes.valueOrAbort"), + exclude[DirectMissingMethodProblem]("scala.quoted.Quotes#reflectModule#reportModule.errorAndAbort"), exclude[DirectMissingMethodProblem]("scala.quoted.Quotes#reflectModule#SymbolMethods.fieldMember"), exclude[DirectMissingMethodProblem]("scala.quoted.Quotes#reflectModule#SymbolMethods.fieldMembers"), exclude[DirectMissingMethodProblem]("scala.quoted.Quotes#reflectModule#SymbolMethods.methodMember"), @@ -12,8 +14,13 @@ object MiMaFilters { exclude[DirectMissingMethodProblem]("scala.quoted.Quotes#reflectModule#SymbolMethods.typeMember"), exclude[DirectMissingMethodProblem]("scala.quoted.Quotes#reflectModule#SymbolMethods.typeMembers"), exclude[DirectMissingMethodProblem]("scala.quoted.Quotes#reflectModule#TermParamClauseMethods.isErased"), + exclude[DirectMissingMethodProblem]("scala.quoted.Quotes#reflectModule#TermParamClauseMethods.isErased"), + exclude[MissingClassProblem]("scala.annotation.experimental"), exclude[MissingClassProblem]("scala.annotation.experimental"), exclude[MissingClassProblem]("scala.annotation.internal.ErasedParam"), + exclude[MissingClassProblem]("scala.annotation.internal.ErasedParam"), + exclude[ReversedMissingMethodProblem]("scala.quoted.Quotes.valueOrAbort"), + exclude[ReversedMissingMethodProblem]("scala.quoted.Quotes#reflectModule#reportModule.errorAndAbort"), exclude[ReversedMissingMethodProblem]("scala.quoted.Quotes#reflectModule#SymbolMethods.fieldMember"), exclude[ReversedMissingMethodProblem]("scala.quoted.Quotes#reflectModule#SymbolMethods.fieldMembers"), exclude[ReversedMissingMethodProblem]("scala.quoted.Quotes#reflectModule#SymbolMethods.methodMember"), diff --git a/tests/bench/power-macro/PowerMacro.scala b/tests/bench/power-macro/PowerMacro.scala index 03a77d927287..f55d9f1926a3 100644 --- a/tests/bench/power-macro/PowerMacro.scala +++ b/tests/bench/power-macro/PowerMacro.scala @@ -5,7 +5,7 @@ object PowerMacro { inline def power(inline n: Long, x: Double) = ${ powerCode('n, 'x) } def powerCode(n: Expr[Long], x: Expr[Double])(using Quotes): Expr[Double] = - powerCode(n.valueOrError, x) + powerCode(n.valueOrAbort, x) def powerCode(n: Long, x: Expr[Double])(using Quotes): Expr[Double] = if (n == 0) '{1.0} diff --git a/tests/neg-macros/i9014/Macros_1.scala b/tests/neg-macros/i9014/Macros_1.scala index 3bca2bae4dc3..36ae6cafeac2 100644 --- a/tests/neg-macros/i9014/Macros_1.scala +++ b/tests/neg-macros/i9014/Macros_1.scala @@ -1,4 +1,4 @@ import scala.quoted.* trait Bar inline given Bar = ${ impl } -def impl(using Quotes): Expr[Bar] = quotes.reflect.report.throwError("Failed to expand!") +def impl(using Quotes): Expr[Bar] = quotes.reflect.report.errorAndAbort("Failed to expand!") diff --git a/tests/neg-macros/i9014b/Macros_1.scala b/tests/neg-macros/i9014b/Macros_1.scala index 0dcb45d513cb..5af84224ff04 100644 --- a/tests/neg-macros/i9014b/Macros_1.scala +++ b/tests/neg-macros/i9014b/Macros_1.scala @@ -1,4 +1,4 @@ import scala.quoted._ trait Bar transparent inline given Bar = ${ impl } -def impl(using Quotes): Expr[Bar] = quotes.reflect.report.throwError("Failed to expand!") +def impl(using Quotes): Expr[Bar] = quotes.reflect.report.errorAndAbort("Failed to expand!") diff --git a/tests/neg-macros/ill-abort.check b/tests/neg-macros/ill-abort.check new file mode 100644 index 000000000000..25d7654b1b69 --- /dev/null +++ b/tests/neg-macros/ill-abort.check @@ -0,0 +1,6 @@ + +-- Error: tests/neg-macros/ill-abort/quoted_2.scala:1:15 --------------------------------------------------------------- +1 |def test = fail() // error + | ^^^^^^ + |Macro expansion was aborted by the macro without any errors reported. Macros should issue errors to end-users to facilitate debugging when aborting a macro expansion. + | This location contains code that was inlined from quoted_1.scala:3 diff --git a/tests/neg-macros/ill-abort/quoted_1.scala b/tests/neg-macros/ill-abort/quoted_1.scala new file mode 100644 index 000000000000..0392ef5ae571 --- /dev/null +++ b/tests/neg-macros/ill-abort/quoted_1.scala @@ -0,0 +1,7 @@ +import scala.quoted.* + +inline def fail(): Unit = ${ impl } + +private def impl(using Quotes) : Expr[Unit] = + // should never be done without reporting error before (see docs) + throw new scala.quoted.runtime.StopMacroExpansion diff --git a/tests/neg-macros/ill-abort/quoted_2.scala b/tests/neg-macros/ill-abort/quoted_2.scala new file mode 100644 index 000000000000..fae7c594b861 --- /dev/null +++ b/tests/neg-macros/ill-abort/quoted_2.scala @@ -0,0 +1 @@ +def test = fail() // error diff --git a/tests/neg-macros/inline-macro-staged-interpreter/Macro_1.scala b/tests/neg-macros/inline-macro-staged-interpreter/Macro_1.scala index 4e56b946207a..f93082afc747 100644 --- a/tests/neg-macros/inline-macro-staged-interpreter/Macro_1.scala +++ b/tests/neg-macros/inline-macro-staged-interpreter/Macro_1.scala @@ -6,7 +6,7 @@ object E { inline def eval[T](inline x: E[T]): T = ${ impl('x) } - def impl[T: Type](x: Expr[E[T]]) (using Quotes): Expr[T] = x.valueOrError.lift + def impl[T: Type](x: Expr[E[T]]) (using Quotes): Expr[T] = x.valueOrAbort.lift implicit def ev1[T: Type]: FromExpr[E[T]] = new FromExpr { def unapply(x: Expr[E[T]])(using Quotes) = x match { diff --git a/tests/neg-macros/inline-option/Macro_1.scala b/tests/neg-macros/inline-option/Macro_1.scala index f2e3e453fdd2..d436285cd93e 100644 --- a/tests/neg-macros/inline-option/Macro_1.scala +++ b/tests/neg-macros/inline-option/Macro_1.scala @@ -2,7 +2,7 @@ import scala.quoted.* object Macro { - def impl(opt: Expr[Option[Int]]) (using Quotes): Expr[Int] = opt.valueOrError match { + def impl(opt: Expr[Option[Int]]) (using Quotes): Expr[Int] = opt.valueOrAbort match { case Some(i) => Expr(i) case None => '{-1} } diff --git a/tests/neg-macros/inline-tuples-1/Macro_1.scala b/tests/neg-macros/inline-tuples-1/Macro_1.scala index 031fb01cabe4..e0ce4f20419a 100644 --- a/tests/neg-macros/inline-tuples-1/Macro_1.scala +++ b/tests/neg-macros/inline-tuples-1/Macro_1.scala @@ -2,26 +2,26 @@ import scala.quoted.* object Macros { - def tup1(tup: Expr[Tuple1[Int]]) (using Quotes): Expr[Int] = Expr(tup.valueOrError.productIterator.map(_.asInstanceOf[Int]).sum) - def tup2(tup: Expr[Tuple2[Int, Int]]) (using Quotes): Expr[Int] = Expr(tup.valueOrError.productIterator.map(_.asInstanceOf[Int]).sum) - def tup3(tup: Expr[Tuple3[Int, Int, Int]]) (using Quotes): Expr[Int] = Expr(tup.valueOrError.productIterator.map(_.asInstanceOf[Int]).sum) - def tup4(tup: Expr[Tuple4[Int, Int, Int, Int]]) (using Quotes): Expr[Int] = Expr(tup.valueOrError.productIterator.map(_.asInstanceOf[Int]).sum) - def tup5(tup: Expr[Tuple5[Int, Int, Int, Int, Int]]) (using Quotes): Expr[Int] = Expr(tup.valueOrError.productIterator.map(_.asInstanceOf[Int]).sum) - def tup6(tup: Expr[Tuple6[Int, Int, Int, Int, Int, Int]]) (using Quotes): Expr[Int] = Expr(tup.valueOrError.productIterator.map(_.asInstanceOf[Int]).sum) - def tup7(tup: Expr[Tuple7[Int, Int, Int, Int, Int, Int, Int]]) (using Quotes): Expr[Int] = Expr(tup.valueOrError.productIterator.map(_.asInstanceOf[Int]).sum) - def tup8(tup: Expr[Tuple8[Int, Int, Int, Int, Int, Int, Int, Int]]) (using Quotes): Expr[Int] = Expr(tup.valueOrError.productIterator.map(_.asInstanceOf[Int]).sum) - def tup9(tup: Expr[Tuple9[Int, Int, Int, Int, Int, Int, Int, Int, Int]]) (using Quotes): Expr[Int] = Expr(tup.valueOrError.productIterator.map(_.asInstanceOf[Int]).sum) - def tup10(tup: Expr[Tuple10[Int, Int, Int, Int, Int, Int, Int, Int, Int, Int]]) (using Quotes): Expr[Int] = Expr(tup.valueOrError.productIterator.map(_.asInstanceOf[Int]).sum) - def tup11(tup: Expr[Tuple11[Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int]]) (using Quotes): Expr[Int] = Expr(tup.valueOrError.productIterator.map(_.asInstanceOf[Int]).sum) - def tup12(tup: Expr[Tuple12[Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int]]) (using Quotes): Expr[Int] = Expr(tup.valueOrError.productIterator.map(_.asInstanceOf[Int]).sum) - def tup13(tup: Expr[Tuple13[Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int]]) (using Quotes): Expr[Int] = Expr(tup.valueOrError.productIterator.map(_.asInstanceOf[Int]).sum) - def tup14(tup: Expr[Tuple14[Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int]]) (using Quotes): Expr[Int] = Expr(tup.valueOrError.productIterator.map(_.asInstanceOf[Int]).sum) - def tup15(tup: Expr[Tuple15[Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int]]) (using Quotes): Expr[Int] = Expr(tup.valueOrError.productIterator.map(_.asInstanceOf[Int]).sum) - def tup16(tup: Expr[Tuple16[Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int]]) (using Quotes): Expr[Int] = Expr(tup.valueOrError.productIterator.map(_.asInstanceOf[Int]).sum) - def tup17(tup: Expr[Tuple17[Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int]]) (using Quotes): Expr[Int] = Expr(tup.valueOrError.productIterator.map(_.asInstanceOf[Int]).sum) - def tup18(tup: Expr[Tuple18[Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int]]) (using Quotes): Expr[Int] = Expr(tup.valueOrError.productIterator.map(_.asInstanceOf[Int]).sum) - def tup19(tup: Expr[Tuple19[Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int]]) (using Quotes): Expr[Int] = Expr(tup.valueOrError.productIterator.map(_.asInstanceOf[Int]).sum) - def tup20(tup: Expr[Tuple20[Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int]]) (using Quotes): Expr[Int] = Expr(tup.valueOrError.productIterator.map(_.asInstanceOf[Int]).sum) - def tup21(tup: Expr[Tuple21[Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int]]) (using Quotes): Expr[Int] = Expr(tup.valueOrError.productIterator.map(_.asInstanceOf[Int]).sum) - def tup22(tup: Expr[Tuple22[Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int]]) (using Quotes): Expr[Int] = Expr(tup.valueOrError.productIterator.map(_.asInstanceOf[Int]).sum) + def tup1(tup: Expr[Tuple1[Int]]) (using Quotes): Expr[Int] = Expr(tup.valueOrAbort.productIterator.map(_.asInstanceOf[Int]).sum) + def tup2(tup: Expr[Tuple2[Int, Int]]) (using Quotes): Expr[Int] = Expr(tup.valueOrAbort.productIterator.map(_.asInstanceOf[Int]).sum) + def tup3(tup: Expr[Tuple3[Int, Int, Int]]) (using Quotes): Expr[Int] = Expr(tup.valueOrAbort.productIterator.map(_.asInstanceOf[Int]).sum) + def tup4(tup: Expr[Tuple4[Int, Int, Int, Int]]) (using Quotes): Expr[Int] = Expr(tup.valueOrAbort.productIterator.map(_.asInstanceOf[Int]).sum) + def tup5(tup: Expr[Tuple5[Int, Int, Int, Int, Int]]) (using Quotes): Expr[Int] = Expr(tup.valueOrAbort.productIterator.map(_.asInstanceOf[Int]).sum) + def tup6(tup: Expr[Tuple6[Int, Int, Int, Int, Int, Int]]) (using Quotes): Expr[Int] = Expr(tup.valueOrAbort.productIterator.map(_.asInstanceOf[Int]).sum) + def tup7(tup: Expr[Tuple7[Int, Int, Int, Int, Int, Int, Int]]) (using Quotes): Expr[Int] = Expr(tup.valueOrAbort.productIterator.map(_.asInstanceOf[Int]).sum) + def tup8(tup: Expr[Tuple8[Int, Int, Int, Int, Int, Int, Int, Int]]) (using Quotes): Expr[Int] = Expr(tup.valueOrAbort.productIterator.map(_.asInstanceOf[Int]).sum) + def tup9(tup: Expr[Tuple9[Int, Int, Int, Int, Int, Int, Int, Int, Int]]) (using Quotes): Expr[Int] = Expr(tup.valueOrAbort.productIterator.map(_.asInstanceOf[Int]).sum) + def tup10(tup: Expr[Tuple10[Int, Int, Int, Int, Int, Int, Int, Int, Int, Int]]) (using Quotes): Expr[Int] = Expr(tup.valueOrAbort.productIterator.map(_.asInstanceOf[Int]).sum) + def tup11(tup: Expr[Tuple11[Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int]]) (using Quotes): Expr[Int] = Expr(tup.valueOrAbort.productIterator.map(_.asInstanceOf[Int]).sum) + def tup12(tup: Expr[Tuple12[Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int]]) (using Quotes): Expr[Int] = Expr(tup.valueOrAbort.productIterator.map(_.asInstanceOf[Int]).sum) + def tup13(tup: Expr[Tuple13[Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int]]) (using Quotes): Expr[Int] = Expr(tup.valueOrAbort.productIterator.map(_.asInstanceOf[Int]).sum) + def tup14(tup: Expr[Tuple14[Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int]]) (using Quotes): Expr[Int] = Expr(tup.valueOrAbort.productIterator.map(_.asInstanceOf[Int]).sum) + def tup15(tup: Expr[Tuple15[Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int]]) (using Quotes): Expr[Int] = Expr(tup.valueOrAbort.productIterator.map(_.asInstanceOf[Int]).sum) + def tup16(tup: Expr[Tuple16[Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int]]) (using Quotes): Expr[Int] = Expr(tup.valueOrAbort.productIterator.map(_.asInstanceOf[Int]).sum) + def tup17(tup: Expr[Tuple17[Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int]]) (using Quotes): Expr[Int] = Expr(tup.valueOrAbort.productIterator.map(_.asInstanceOf[Int]).sum) + def tup18(tup: Expr[Tuple18[Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int]]) (using Quotes): Expr[Int] = Expr(tup.valueOrAbort.productIterator.map(_.asInstanceOf[Int]).sum) + def tup19(tup: Expr[Tuple19[Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int]]) (using Quotes): Expr[Int] = Expr(tup.valueOrAbort.productIterator.map(_.asInstanceOf[Int]).sum) + def tup20(tup: Expr[Tuple20[Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int]]) (using Quotes): Expr[Int] = Expr(tup.valueOrAbort.productIterator.map(_.asInstanceOf[Int]).sum) + def tup21(tup: Expr[Tuple21[Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int]]) (using Quotes): Expr[Int] = Expr(tup.valueOrAbort.productIterator.map(_.asInstanceOf[Int]).sum) + def tup22(tup: Expr[Tuple22[Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int]]) (using Quotes): Expr[Int] = Expr(tup.valueOrAbort.productIterator.map(_.asInstanceOf[Int]).sum) } diff --git a/tests/neg-macros/quote-error-2/Macro_1.scala b/tests/neg-macros/quote-error-2/Macro_1.scala index 7a98d7145698..a4c8960f04ab 100644 --- a/tests/neg-macros/quote-error-2/Macro_1.scala +++ b/tests/neg-macros/quote-error-2/Macro_1.scala @@ -3,7 +3,7 @@ import quoted.* object Macro_1 { inline def foo(inline b: Boolean): Unit = ${ fooImpl('b) } def fooImpl(b: Expr[Boolean])(using Quotes): Expr[Unit] = - '{println(${msg(b.valueOrError)})} + '{println(${msg(b.valueOrAbort)})} def msg(b: Boolean)(using Quotes): Expr[String] = if (b) '{"foo(true)"} diff --git a/tests/neg-macros/quote-error/Macro_1.scala b/tests/neg-macros/quote-error/Macro_1.scala index 668f2b99c33b..d553eac2b004 100644 --- a/tests/neg-macros/quote-error/Macro_1.scala +++ b/tests/neg-macros/quote-error/Macro_1.scala @@ -3,6 +3,6 @@ import quoted.* object Macro_1 { inline def foo(inline b: Boolean): Unit = ${fooImpl('b)} def fooImpl(b: Expr[Boolean])(using Quotes) : Expr[Unit] = - if (b.valueOrError) '{println("foo(true)")} + if (b.valueOrAbort) '{println("foo(true)")} else { quotes.reflect.report.error("foo cannot be called with false"); '{ ??? } } } diff --git a/tests/neg-macros/quote-exception/Macro_1.scala b/tests/neg-macros/quote-exception/Macro_1.scala index 2fa482a81c56..02b2d049499b 100644 --- a/tests/neg-macros/quote-exception/Macro_1.scala +++ b/tests/neg-macros/quote-exception/Macro_1.scala @@ -3,6 +3,6 @@ import quoted.* object Macro_1 { inline def foo(inline b: Boolean): Unit = ${fooImpl('b)} def fooImpl(b: Expr[Boolean]) (using Quotes): Expr[Unit] = - if (b.valueOrError) '{println("foo(true)")} + if (b.valueOrAbort) '{println("foo(true)")} else ??? } diff --git a/tests/neg-macros/quote-whitebox/Macro_1.scala b/tests/neg-macros/quote-whitebox/Macro_1.scala index a18fccbc166e..78b7c36ccce1 100644 --- a/tests/neg-macros/quote-whitebox/Macro_1.scala +++ b/tests/neg-macros/quote-whitebox/Macro_1.scala @@ -2,7 +2,7 @@ import scala.quoted.* object Macros { transparent inline def defaultOf(inline str: String): Any = ${ defaultOfImpl('str) } - def defaultOfImpl(str: Expr[String]) (using Quotes): Expr[Any] = str.valueOrError match { + def defaultOfImpl(str: Expr[String]) (using Quotes): Expr[Any] = str.valueOrAbort match { case "int" => '{1} case "string" => '{"a"} } diff --git a/tests/neg-macros/reflect-inline/assert_1.scala b/tests/neg-macros/reflect-inline/assert_1.scala index 2c5b324450c5..4ea6f9871ba3 100644 --- a/tests/neg-macros/reflect-inline/assert_1.scala +++ b/tests/neg-macros/reflect-inline/assert_1.scala @@ -5,6 +5,6 @@ object api { ${ stripImpl('x) } private def stripImpl(x: Expr[String])(using Quotes): Expr[String] = - Expr(x.valueOrError.stripMargin) + Expr(x.valueOrAbort.stripMargin) } diff --git a/tests/pos-macros/i11835/X.scala b/tests/pos-macros/i11835/X.scala index a298c0345f03..c5f12c5b8271 100644 --- a/tests/pos-macros/i11835/X.scala +++ b/tests/pos-macros/i11835/X.scala @@ -7,5 +7,5 @@ object X: private def _blah(b: Expr[Boolean])(using Quotes): Expr[Unit] = import quotes.reflect.* b.asTerm - b.valueOrError + b.valueOrAbort '{()} diff --git a/tests/pos-macros/power-macro/Macro_1.scala b/tests/pos-macros/power-macro/Macro_1.scala index 009947d4fe1f..54ac52edf1e4 100644 --- a/tests/pos-macros/power-macro/Macro_1.scala +++ b/tests/pos-macros/power-macro/Macro_1.scala @@ -6,7 +6,7 @@ object PowerMacro { inline def power(inline n: Long, x: Double) = ${powerCode('n, 'x)} def powerCode(n: Expr[Long], x: Expr[Double]) (using Quotes): Expr[Double] = - powerCode(n.valueOrError, x) + powerCode(n.valueOrAbort, x) def powerCode(n: Long, x: Expr[Double])(using Quotes): Expr[Double] = if (n == 0) '{1.0} diff --git a/tests/pos-macros/quote-nested-object/Macro_1.scala b/tests/pos-macros/quote-nested-object/Macro_1.scala index 19746c270840..b6f71f00f131 100644 --- a/tests/pos-macros/quote-nested-object/Macro_1.scala +++ b/tests/pos-macros/quote-nested-object/Macro_1.scala @@ -9,7 +9,7 @@ object Macro { inline def plus(inline n: Int, m: Int): Int = ${ plus('n, 'm) } def plus(n: Expr[Int], m: Expr[Int]) (using Quotes): Expr[Int] = - if (n.valueOrError == 0) m + if (n.valueOrAbort == 0) m else '{ ${n} + $m } object Implementation2 { @@ -17,7 +17,7 @@ object Macro { inline def plus(inline n: Int, m: Int): Int = ${ plus('n, 'm) } def plus(n: Expr[Int], m: Expr[Int]) (using Quotes): Expr[Int] = - if (n.valueOrError == 0) m + if (n.valueOrAbort == 0) m else '{ ${n} + $m } } } diff --git a/tests/pos-macros/quote-whitebox-2/Macro_1.scala b/tests/pos-macros/quote-whitebox-2/Macro_1.scala index 8113cedbc113..f7a3261f0368 100644 --- a/tests/pos-macros/quote-whitebox-2/Macro_1.scala +++ b/tests/pos-macros/quote-whitebox-2/Macro_1.scala @@ -6,7 +6,7 @@ object Macro { transparent inline def charOrString(inline str: String): Any = ${ impl('str) } def impl(strExpr: Expr[String]) (using Quotes)= - val str = strExpr.valueOrError + val str = strExpr.valueOrAbort if (str.length == 1) Expr(str.charAt(0)) else Expr(str) } diff --git a/tests/pos-staging/quote-0.scala b/tests/pos-staging/quote-0.scala index a9eb68ffce5f..8a48c8a2d87b 100644 --- a/tests/pos-staging/quote-0.scala +++ b/tests/pos-staging/quote-0.scala @@ -16,7 +16,7 @@ object Macros { inline def power(inline n: Int, x: Double) = ${ powerCode('n, 'x) } def powerCode(n: Expr[Int], x: Expr[Double]) (using Quotes): Expr[Double] = - powerCode(n.valueOrError, x) + powerCode(n.valueOrAbort, x) def powerCode(n: Int, x: Expr[Double])(using Quotes): Expr[Double] = if (n == 0) '{1.0} diff --git a/tests/run-macros/enum-nat-macro/Macros_2.scala b/tests/run-macros/enum-nat-macro/Macros_2.scala index c533888718ba..a30cfa5729bc 100644 --- a/tests/run-macros/enum-nat-macro/Macros_2.scala +++ b/tests/run-macros/enum-nat-macro/Macros_2.scala @@ -25,6 +25,6 @@ import Nat.* case 0 => acc case n => inner[Succ[N]](n - 1, '{Succ($acc)}) - val i = int.valueOrError + val i = int.valueOrAbort require(i >= 0) inner[Zero.type](i, '{Zero}) diff --git a/tests/run-macros/gestalt-type-toolbox-reflect/Macro_1.scala b/tests/run-macros/gestalt-type-toolbox-reflect/Macro_1.scala index 1d085d3a2c15..5f73f7c84386 100644 --- a/tests/run-macros/gestalt-type-toolbox-reflect/Macro_1.scala +++ b/tests/run-macros/gestalt-type-toolbox-reflect/Macro_1.scala @@ -44,7 +44,7 @@ object TypeToolbox { inline def fieldIn[T](inline mem: String): String = ${fieldInImpl[T]('mem)} private def fieldInImpl[T: Type](mem: Expr[String])(using Quotes) : Expr[String] = { import quotes.reflect.* - val field = TypeTree.of[T].symbol.declaredField(mem.valueOrError) + val field = TypeTree.of[T].symbol.declaredField(mem.valueOrAbort) Expr(if field.isNoSymbol then "" else field.name) } @@ -58,7 +58,7 @@ object TypeToolbox { inline def methodIn[T](inline mem: String): Seq[String] = ${methodInImpl[T]('mem)} private def methodInImpl[T: Type](mem: Expr[String])(using Quotes) : Expr[Seq[String]] = { import quotes.reflect.* - Expr(TypeTree.of[T].symbol.declaredMethod(mem.valueOrError).map(_.name)) + Expr(TypeTree.of[T].symbol.declaredMethod(mem.valueOrAbort).map(_.name)) } inline def methodsIn[T]: Seq[String] = ${methodsInImpl[T]} @@ -70,7 +70,7 @@ object TypeToolbox { inline def method[T](inline mem: String): Seq[String] = ${methodImpl[T]('mem)} private def methodImpl[T: Type](mem: Expr[String])(using Quotes) : Expr[Seq[String]] = { import quotes.reflect.* - Expr(TypeTree.of[T].symbol.memberMethod(mem.valueOrError).map(_.name)) + Expr(TypeTree.of[T].symbol.memberMethod(mem.valueOrAbort).map(_.name)) } inline def methods[T]: Seq[String] = ${methodsImpl[T]} diff --git a/tests/run-macros/i10914a/Macro_1.scala b/tests/run-macros/i10914a/Macro_1.scala index 0a1b8088d04c..0fa34291ee14 100644 --- a/tests/run-macros/i10914a/Macro_1.scala +++ b/tests/run-macros/i10914a/Macro_1.scala @@ -24,7 +24,7 @@ object Dsl { import quotes.reflect.* val inputs = c match case '{ Container($list) } => - list.valueOrError + list.valueOrAbort case _ => report.throwError("Cannot Extract List from Container") '{ Entity(${Expr(inputs.head.value)}) } } diff --git a/tests/run-macros/i10914b/Macro_1.scala b/tests/run-macros/i10914b/Macro_1.scala index 680f189a3566..c5b375031846 100644 --- a/tests/run-macros/i10914b/Macro_1.scala +++ b/tests/run-macros/i10914b/Macro_1.scala @@ -13,7 +13,7 @@ object Dsl { //println("Getting Input: " + Printer.TreeStructure.show(c.asTerm)) val entExpr = c match case '{ Input($ent) } => ent - case _ => report.throwError("Cannot Extract Entity from Input") + case _ => report.errorAndAbort("Cannot Extract Entity from Input") '{ Container(List($entExpr)) } @@ -28,7 +28,7 @@ object Dsl { import quotes.reflect.* val inputs = c match case '{ Container($list) } => - list.valueOrError - case _ => report.throwError("Cannot Extract List from Container") + list.valueOrAbort + case _ => report.errorAndAbort("Cannot Extract List from Container") '{ Entity(${Expr(inputs.head.value)}) } } diff --git a/tests/run-macros/i11161/Macro_1.scala b/tests/run-macros/i11161/Macro_1.scala index c189eaac46d3..9918234d4659 100644 --- a/tests/run-macros/i11161/Macro_1.scala +++ b/tests/run-macros/i11161/Macro_1.scala @@ -8,4 +8,4 @@ private def showTypeImpl[T: Type](using Quotes): Expr[String] = case Some(ct) => '{ $ct.runtimeClass.getName } case None => import quotes.reflect._ - report.throwError(s"Unable to find a ClassTag for type ${Type.show[T]}", Position.ofMacroExpansion) + report.errorAndAbort(s"Unable to find a ClassTag for type ${Type.show[T]}", Position.ofMacroExpansion) diff --git a/tests/run-macros/i11856/Test_1.scala b/tests/run-macros/i11856/Test_1.scala index 2b31f3a4a570..0ec8952863fc 100644 --- a/tests/run-macros/i11856/Test_1.scala +++ b/tests/run-macros/i11856/Test_1.scala @@ -5,8 +5,8 @@ object Str: ${ evalConcat('a, 'b) } def evalConcat(expra: Expr[String], exprb: Expr[String])(using Quotes): Expr[String] = - val a = expra.valueOrError - val b = exprb.valueOrError + val a = expra.valueOrAbort + val b = exprb.valueOrAbort Expr(a ++ b) object I: @@ -14,6 +14,6 @@ object I: ${ evalConcat('a, 'b) } def evalConcat(expra: Expr[Int], exprb: Expr[Int])(using Quotes): Expr[Int] = - val a = expra.valueOrError - val b = exprb.valueOrError + val a = expra.valueOrAbort + val b = exprb.valueOrAbort Expr(a + b) \ No newline at end of file diff --git a/tests/run-macros/i4734/Macro_1.scala b/tests/run-macros/i4734/Macro_1.scala index 30b12d2fce36..39d2457af9d5 100644 --- a/tests/run-macros/i4734/Macro_1.scala +++ b/tests/run-macros/i4734/Macro_1.scala @@ -6,7 +6,7 @@ object Macros { ${ unrolledForeachImpl('seq, 'f, 'unrollSize) } def unrolledForeachImpl(seq: Expr[IndexedSeq[Int]], f: Expr[Int => Unit], unrollSizeExpr: Expr[Int]) (using Quotes): Expr[Unit] = - unrolledForeachImpl(seq, f, unrollSizeExpr.valueOrError) + unrolledForeachImpl(seq, f, unrollSizeExpr.valueOrAbort) def unrolledForeachImpl(seq: Expr[IndexedSeq[Int]], f: Expr[Int => Unit], unrollSize: Int)(using Quotes): Expr[Unit] = '{ val size = ($seq).length diff --git a/tests/run-macros/i4735/Macro_1.scala b/tests/run-macros/i4735/Macro_1.scala index 54cdcb574c91..de96230c7a6c 100644 --- a/tests/run-macros/i4735/Macro_1.scala +++ b/tests/run-macros/i4735/Macro_1.scala @@ -14,7 +14,7 @@ object Macro { while (i < size) { println(" start loop") ${ - for (j <- new UnrolledRange(0, unrollSize.valueOrError)) '{ + for (j <- new UnrolledRange(0, unrollSize.valueOrAbort)) '{ val element = ($seq)(i + ${Expr(j)}) ${Expr.betaReduce('{$f(element)})} // or `($f)(element)` if `f` should not be inlined } diff --git a/tests/run-macros/i4803/Macro_1.scala b/tests/run-macros/i4803/Macro_1.scala index 9ff32194c708..cac39ac4640d 100644 --- a/tests/run-macros/i4803/Macro_1.scala +++ b/tests/run-macros/i4803/Macro_1.scala @@ -2,7 +2,7 @@ import scala.quoted.* object PowerMacro { def powerCode(x: Expr[Double], n: Expr[Long]) (using Quotes): Expr[Double] = - powerCode(x, n.valueOrError) + powerCode(x, n.valueOrAbort) def powerCode(x: Expr[Double], n: Long) (using Quotes): Expr[Double] = if (n == 0) '{1.0} diff --git a/tests/run-macros/i4803b/Macro_1.scala b/tests/run-macros/i4803b/Macro_1.scala index ab82cb100dc3..af782a153b73 100644 --- a/tests/run-macros/i4803b/Macro_1.scala +++ b/tests/run-macros/i4803b/Macro_1.scala @@ -2,7 +2,7 @@ import scala.quoted.* object PowerMacro { def powerCode(x: Expr[Double], n: Expr[Long]) (using Quotes): Expr[Double] = - powerCode(x, n.valueOrError) + powerCode(x, n.valueOrAbort) def powerCode(x: Expr[Double], n: Long) (using Quotes): Expr[Double] = if (n == 0) '{1.0} diff --git a/tests/run-macros/i4803c/Macro_1.scala b/tests/run-macros/i4803c/Macro_1.scala index 2058a0bc4b3b..eb4d25bdfaea 100644 --- a/tests/run-macros/i4803c/Macro_1.scala +++ b/tests/run-macros/i4803c/Macro_1.scala @@ -2,7 +2,7 @@ import scala.quoted.* object PowerMacro { def powerCode(x: Expr[Double], n: Expr[Long]) (using Quotes): Expr[Double] = - powerCode(x, n.valueOrError) + powerCode(x, n.valueOrAbort) def powerCode(x: Expr[Double], n: Long) (using Quotes): Expr[Double] = if (n == 0) '{1.0} diff --git a/tests/run-macros/i5188a/Macro_1.scala b/tests/run-macros/i5188a/Macro_1.scala index 252f5245c9ea..04782ac8edd8 100644 --- a/tests/run-macros/i5188a/Macro_1.scala +++ b/tests/run-macros/i5188a/Macro_1.scala @@ -2,5 +2,5 @@ import scala.quoted.* object Lib { inline def sum(inline args: Int*): Int = ${ impl('args) } - def impl(args: Expr[Seq[Int]]) (using Quotes): Expr[Int] = Expr(args.valueOrError.sum) + def impl(args: Expr[Seq[Int]]) (using Quotes): Expr[Int] = Expr(args.valueOrAbort.sum) } diff --git a/tests/run-macros/i6201/macro_1.scala b/tests/run-macros/i6201/macro_1.scala index 2b87f431f3d9..ca1fecde3c02 100644 --- a/tests/run-macros/i6201/macro_1.scala +++ b/tests/run-macros/i6201/macro_1.scala @@ -4,10 +4,10 @@ extension (inline x: String) inline def strip: String = ${ stripImpl('x) } def stripImpl(x: Expr[String])(using Quotes) : Expr[String] = - Expr(x.valueOrError.stripMargin) + Expr(x.valueOrAbort.stripMargin) inline def isHello(inline x: String): Boolean = ${ isHelloImpl('x) } def isHelloImpl(x: Expr[String])(using Quotes) : Expr[Boolean] = - if (x.valueOrError == "hello") Expr(true) else Expr(false) + if (x.valueOrAbort == "hello") Expr(true) else Expr(false) diff --git a/tests/run-macros/i6765-c/Macro_1.scala b/tests/run-macros/i6765-c/Macro_1.scala index c3401a7f53da..73fe899ed1a5 100644 --- a/tests/run-macros/i6765-c/Macro_1.scala +++ b/tests/run-macros/i6765-c/Macro_1.scala @@ -3,6 +3,6 @@ import scala.quoted.* inline def foo(inline n: Int) = ${fooImpl('n)} def fooImpl(n: Expr[Int])(using Quotes) = { - val res = Expr.ofList(List.tabulate(n.valueOrError)(i => Expr("#" + i))) + val res = Expr.ofList(List.tabulate(n.valueOrAbort)(i => Expr("#" + i))) '{ ${Expr(res.show)} + "\n" + $res.toString + "\n" } } diff --git a/tests/run-macros/i8671/Macro_1.scala b/tests/run-macros/i8671/Macro_1.scala index c00d901a66e3..2a7af715e2dc 100644 --- a/tests/run-macros/i8671/Macro_1.scala +++ b/tests/run-macros/i8671/Macro_1.scala @@ -19,10 +19,10 @@ object FileName { case Right(fn) => '{FileName.unsafe(${Expr(fn.name)})} // Or `Expr(fn)` if there is a `ToExpr[FileName]` case Left(_) => - report.throwError(s"$s is not a valid file name! It must not contain a /", fileName) + report.errorAndAbort(s"$s is not a valid file name! It must not contain a /", fileName) } case _ => - report.throwError(s"$fileName is not a valid file name. It must be a literal string", fileName) + report.errorAndAbort(s"$fileName is not a valid file name. It must be a literal string", fileName) } } diff --git a/tests/run-macros/inline-macro-staged-interpreter/Macro_1.scala b/tests/run-macros/inline-macro-staged-interpreter/Macro_1.scala index d8cf1c788851..148ca05f685e 100644 --- a/tests/run-macros/inline-macro-staged-interpreter/Macro_1.scala +++ b/tests/run-macros/inline-macro-staged-interpreter/Macro_1.scala @@ -7,7 +7,7 @@ object E { inline def eval[T](inline x: E[T]): T = ${ impl('x) } def impl[T: Type](expr: Expr[E[T]]) (using Quotes): Expr[T] = - expr.valueOrError.lift + expr.valueOrAbort.lift implicit def ev1[T: Type]: FromExpr[E[T]] = new FromExpr { // TODO use type class derivation def unapply(x: Expr[E[T]])(using Quotes) = (x match { diff --git a/tests/run-macros/inline-option/Macro_1.scala b/tests/run-macros/inline-option/Macro_1.scala index 4021658bc17a..abdedc679a5c 100644 --- a/tests/run-macros/inline-option/Macro_1.scala +++ b/tests/run-macros/inline-option/Macro_1.scala @@ -3,11 +3,11 @@ import scala.quoted.* object Macros { - def impl(opt: Expr[Option[Int]]) (using Quotes): Expr[Int] = opt.valueOrError match { + def impl(opt: Expr[Option[Int]]) (using Quotes): Expr[Int] = opt.valueOrAbort match { case Some(i) => Expr(i) case None => '{-1} } - def impl2(opt: Expr[Option[Option[Int]]]) (using Quotes): Expr[Int] = impl(Expr(opt.valueOrError.flatten)) + def impl2(opt: Expr[Option[Option[Int]]]) (using Quotes): Expr[Int] = impl(Expr(opt.valueOrAbort.flatten)) } diff --git a/tests/run-macros/inline-tuples-1/Macro_1.scala b/tests/run-macros/inline-tuples-1/Macro_1.scala index 031fb01cabe4..e0ce4f20419a 100644 --- a/tests/run-macros/inline-tuples-1/Macro_1.scala +++ b/tests/run-macros/inline-tuples-1/Macro_1.scala @@ -2,26 +2,26 @@ import scala.quoted.* object Macros { - def tup1(tup: Expr[Tuple1[Int]]) (using Quotes): Expr[Int] = Expr(tup.valueOrError.productIterator.map(_.asInstanceOf[Int]).sum) - def tup2(tup: Expr[Tuple2[Int, Int]]) (using Quotes): Expr[Int] = Expr(tup.valueOrError.productIterator.map(_.asInstanceOf[Int]).sum) - def tup3(tup: Expr[Tuple3[Int, Int, Int]]) (using Quotes): Expr[Int] = Expr(tup.valueOrError.productIterator.map(_.asInstanceOf[Int]).sum) - def tup4(tup: Expr[Tuple4[Int, Int, Int, Int]]) (using Quotes): Expr[Int] = Expr(tup.valueOrError.productIterator.map(_.asInstanceOf[Int]).sum) - def tup5(tup: Expr[Tuple5[Int, Int, Int, Int, Int]]) (using Quotes): Expr[Int] = Expr(tup.valueOrError.productIterator.map(_.asInstanceOf[Int]).sum) - def tup6(tup: Expr[Tuple6[Int, Int, Int, Int, Int, Int]]) (using Quotes): Expr[Int] = Expr(tup.valueOrError.productIterator.map(_.asInstanceOf[Int]).sum) - def tup7(tup: Expr[Tuple7[Int, Int, Int, Int, Int, Int, Int]]) (using Quotes): Expr[Int] = Expr(tup.valueOrError.productIterator.map(_.asInstanceOf[Int]).sum) - def tup8(tup: Expr[Tuple8[Int, Int, Int, Int, Int, Int, Int, Int]]) (using Quotes): Expr[Int] = Expr(tup.valueOrError.productIterator.map(_.asInstanceOf[Int]).sum) - def tup9(tup: Expr[Tuple9[Int, Int, Int, Int, Int, Int, Int, Int, Int]]) (using Quotes): Expr[Int] = Expr(tup.valueOrError.productIterator.map(_.asInstanceOf[Int]).sum) - def tup10(tup: Expr[Tuple10[Int, Int, Int, Int, Int, Int, Int, Int, Int, Int]]) (using Quotes): Expr[Int] = Expr(tup.valueOrError.productIterator.map(_.asInstanceOf[Int]).sum) - def tup11(tup: Expr[Tuple11[Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int]]) (using Quotes): Expr[Int] = Expr(tup.valueOrError.productIterator.map(_.asInstanceOf[Int]).sum) - def tup12(tup: Expr[Tuple12[Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int]]) (using Quotes): Expr[Int] = Expr(tup.valueOrError.productIterator.map(_.asInstanceOf[Int]).sum) - def tup13(tup: Expr[Tuple13[Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int]]) (using Quotes): Expr[Int] = Expr(tup.valueOrError.productIterator.map(_.asInstanceOf[Int]).sum) - def tup14(tup: Expr[Tuple14[Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int]]) (using Quotes): Expr[Int] = Expr(tup.valueOrError.productIterator.map(_.asInstanceOf[Int]).sum) - def tup15(tup: Expr[Tuple15[Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int]]) (using Quotes): Expr[Int] = Expr(tup.valueOrError.productIterator.map(_.asInstanceOf[Int]).sum) - def tup16(tup: Expr[Tuple16[Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int]]) (using Quotes): Expr[Int] = Expr(tup.valueOrError.productIterator.map(_.asInstanceOf[Int]).sum) - def tup17(tup: Expr[Tuple17[Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int]]) (using Quotes): Expr[Int] = Expr(tup.valueOrError.productIterator.map(_.asInstanceOf[Int]).sum) - def tup18(tup: Expr[Tuple18[Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int]]) (using Quotes): Expr[Int] = Expr(tup.valueOrError.productIterator.map(_.asInstanceOf[Int]).sum) - def tup19(tup: Expr[Tuple19[Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int]]) (using Quotes): Expr[Int] = Expr(tup.valueOrError.productIterator.map(_.asInstanceOf[Int]).sum) - def tup20(tup: Expr[Tuple20[Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int]]) (using Quotes): Expr[Int] = Expr(tup.valueOrError.productIterator.map(_.asInstanceOf[Int]).sum) - def tup21(tup: Expr[Tuple21[Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int]]) (using Quotes): Expr[Int] = Expr(tup.valueOrError.productIterator.map(_.asInstanceOf[Int]).sum) - def tup22(tup: Expr[Tuple22[Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int]]) (using Quotes): Expr[Int] = Expr(tup.valueOrError.productIterator.map(_.asInstanceOf[Int]).sum) + def tup1(tup: Expr[Tuple1[Int]]) (using Quotes): Expr[Int] = Expr(tup.valueOrAbort.productIterator.map(_.asInstanceOf[Int]).sum) + def tup2(tup: Expr[Tuple2[Int, Int]]) (using Quotes): Expr[Int] = Expr(tup.valueOrAbort.productIterator.map(_.asInstanceOf[Int]).sum) + def tup3(tup: Expr[Tuple3[Int, Int, Int]]) (using Quotes): Expr[Int] = Expr(tup.valueOrAbort.productIterator.map(_.asInstanceOf[Int]).sum) + def tup4(tup: Expr[Tuple4[Int, Int, Int, Int]]) (using Quotes): Expr[Int] = Expr(tup.valueOrAbort.productIterator.map(_.asInstanceOf[Int]).sum) + def tup5(tup: Expr[Tuple5[Int, Int, Int, Int, Int]]) (using Quotes): Expr[Int] = Expr(tup.valueOrAbort.productIterator.map(_.asInstanceOf[Int]).sum) + def tup6(tup: Expr[Tuple6[Int, Int, Int, Int, Int, Int]]) (using Quotes): Expr[Int] = Expr(tup.valueOrAbort.productIterator.map(_.asInstanceOf[Int]).sum) + def tup7(tup: Expr[Tuple7[Int, Int, Int, Int, Int, Int, Int]]) (using Quotes): Expr[Int] = Expr(tup.valueOrAbort.productIterator.map(_.asInstanceOf[Int]).sum) + def tup8(tup: Expr[Tuple8[Int, Int, Int, Int, Int, Int, Int, Int]]) (using Quotes): Expr[Int] = Expr(tup.valueOrAbort.productIterator.map(_.asInstanceOf[Int]).sum) + def tup9(tup: Expr[Tuple9[Int, Int, Int, Int, Int, Int, Int, Int, Int]]) (using Quotes): Expr[Int] = Expr(tup.valueOrAbort.productIterator.map(_.asInstanceOf[Int]).sum) + def tup10(tup: Expr[Tuple10[Int, Int, Int, Int, Int, Int, Int, Int, Int, Int]]) (using Quotes): Expr[Int] = Expr(tup.valueOrAbort.productIterator.map(_.asInstanceOf[Int]).sum) + def tup11(tup: Expr[Tuple11[Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int]]) (using Quotes): Expr[Int] = Expr(tup.valueOrAbort.productIterator.map(_.asInstanceOf[Int]).sum) + def tup12(tup: Expr[Tuple12[Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int]]) (using Quotes): Expr[Int] = Expr(tup.valueOrAbort.productIterator.map(_.asInstanceOf[Int]).sum) + def tup13(tup: Expr[Tuple13[Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int]]) (using Quotes): Expr[Int] = Expr(tup.valueOrAbort.productIterator.map(_.asInstanceOf[Int]).sum) + def tup14(tup: Expr[Tuple14[Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int]]) (using Quotes): Expr[Int] = Expr(tup.valueOrAbort.productIterator.map(_.asInstanceOf[Int]).sum) + def tup15(tup: Expr[Tuple15[Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int]]) (using Quotes): Expr[Int] = Expr(tup.valueOrAbort.productIterator.map(_.asInstanceOf[Int]).sum) + def tup16(tup: Expr[Tuple16[Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int]]) (using Quotes): Expr[Int] = Expr(tup.valueOrAbort.productIterator.map(_.asInstanceOf[Int]).sum) + def tup17(tup: Expr[Tuple17[Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int]]) (using Quotes): Expr[Int] = Expr(tup.valueOrAbort.productIterator.map(_.asInstanceOf[Int]).sum) + def tup18(tup: Expr[Tuple18[Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int]]) (using Quotes): Expr[Int] = Expr(tup.valueOrAbort.productIterator.map(_.asInstanceOf[Int]).sum) + def tup19(tup: Expr[Tuple19[Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int]]) (using Quotes): Expr[Int] = Expr(tup.valueOrAbort.productIterator.map(_.asInstanceOf[Int]).sum) + def tup20(tup: Expr[Tuple20[Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int]]) (using Quotes): Expr[Int] = Expr(tup.valueOrAbort.productIterator.map(_.asInstanceOf[Int]).sum) + def tup21(tup: Expr[Tuple21[Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int]]) (using Quotes): Expr[Int] = Expr(tup.valueOrAbort.productIterator.map(_.asInstanceOf[Int]).sum) + def tup22(tup: Expr[Tuple22[Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int, Int]]) (using Quotes): Expr[Int] = Expr(tup.valueOrAbort.productIterator.map(_.asInstanceOf[Int]).sum) } diff --git a/tests/run-macros/inline-tuples-2/Macro_1.scala b/tests/run-macros/inline-tuples-2/Macro_1.scala index 7027a1f2680a..263ae5b8f645 100644 --- a/tests/run-macros/inline-tuples-2/Macro_1.scala +++ b/tests/run-macros/inline-tuples-2/Macro_1.scala @@ -3,8 +3,8 @@ import scala.quoted.* object Macros { - def impl(tup: Expr[Tuple1[Int]]) (using Quotes): Expr[Int] = Expr(tup.valueOrError._1) + def impl(tup: Expr[Tuple1[Int]]) (using Quotes): Expr[Int] = Expr(tup.valueOrAbort._1) - def impl2(tup: Expr[Tuple1[Tuple1[Int]]]) (using Quotes): Expr[Int] = impl(Expr(tup.valueOrError._1)) + def impl2(tup: Expr[Tuple1[Tuple1[Int]]]) (using Quotes): Expr[Int] = impl(Expr(tup.valueOrAbort._1)) } diff --git a/tests/run-macros/inline-varargs-1/Macro_1.scala b/tests/run-macros/inline-varargs-1/Macro_1.scala index ed58d1479059..22580c3c42c2 100644 --- a/tests/run-macros/inline-varargs-1/Macro_1.scala +++ b/tests/run-macros/inline-varargs-1/Macro_1.scala @@ -2,5 +2,5 @@ import scala.quoted.* object Macros { - def sum(nums: Expr[Int]*) (using Quotes): Expr[Int] = Expr(nums.map(_.valueOrError).sum) + def sum(nums: Expr[Int]*) (using Quotes): Expr[Int] = Expr(nums.map(_.valueOrAbort).sum) } diff --git a/tests/run-macros/power-macro/Macro_1.scala b/tests/run-macros/power-macro/Macro_1.scala index 57d468fd7dc1..abb22c4f2c96 100644 --- a/tests/run-macros/power-macro/Macro_1.scala +++ b/tests/run-macros/power-macro/Macro_1.scala @@ -4,7 +4,7 @@ import scala.quoted.* inline def power(x: Double, inline n: Int) = ${ powerCode1('x, 'n) } private def powerCode1(using Quotes)(x: Expr[Double], n: Expr[Int]): Expr[Double] = - powerCode(x, n.valueOrError) + powerCode(x, n.valueOrAbort) private def powerCode(using Quotes)(x: Expr[Double], n: Int): Expr[Double] = if (n == 0) Expr(1.0) diff --git a/tests/run-macros/quote-and-splice/Macros_1.scala b/tests/run-macros/quote-and-splice/Macros_1.scala index e799318eac12..91c4f586d0e2 100644 --- a/tests/run-macros/quote-and-splice/Macros_1.scala +++ b/tests/run-macros/quote-and-splice/Macros_1.scala @@ -6,7 +6,7 @@ object Macros { def macro1Impl (using Quotes)= '{3} inline def macro2(inline p: Boolean) = ${ macro2Impl('p) } - def macro2Impl(p: Expr[Boolean]) (using Quotes)= if (p.valueOrError) '{3} else '{4} + def macro2Impl(p: Expr[Boolean]) (using Quotes)= if (p.valueOrAbort) '{3} else '{4} inline def macro3(n: Int) = ${ macro3Impl('n) } def macro3Impl(p: Expr[Int]) (using Quotes)= '{ 2 + $p } @@ -20,7 +20,7 @@ object Macros { inline def power(inline n: Int, x: Double) = ${ powerCode('n, 'x) } def powerCode(n: Expr[Int], x: Expr[Double]) (using Quotes): Expr[Double] = - powerCode(n.valueOrError, x) + powerCode(n.valueOrAbort, x) def powerCode(n: Int, x: Expr[Double]) (using Quotes): Expr[Double] = if (n == 0) '{1.0} diff --git a/tests/run-macros/quote-matcher-power/Macro_1.scala b/tests/run-macros/quote-matcher-power/Macro_1.scala index da21736282df..194744bcf85f 100644 --- a/tests/run-macros/quote-matcher-power/Macro_1.scala +++ b/tests/run-macros/quote-matcher-power/Macro_1.scala @@ -4,7 +4,7 @@ import scala.quoted.* object Macros { def power_s(x: Expr[Double], n: Expr[Int]) (using Quotes): Expr[Double] = - power_s(x, n.valueOrError) + power_s(x, n.valueOrAbort) def power_s(x: Expr[Double], n: Int) (using Quotes): Expr[Double] = if (n == 0) '{1.0} diff --git a/tests/run-macros/quote-matcher-string-interpolator-2/quoted_1.scala b/tests/run-macros/quote-matcher-string-interpolator-2/quoted_1.scala index f425cd25ae6d..f42935c5f6df 100644 --- a/tests/run-macros/quote-matcher-string-interpolator-2/quoted_1.scala +++ b/tests/run-macros/quote-matcher-string-interpolator-2/quoted_1.scala @@ -9,8 +9,8 @@ object Macros { private def impl(self: Expr[StringContext], args: Expr[Seq[String]])(using Quotes): Expr[String] = { (self, args) match { case ('{ StringContext(${Varargs(parts)}*) }, Varargs(args1)) => - val strParts = parts.map(_.valueOrError.reverse) - val strArgs = args1.map(_.valueOrError) + val strParts = parts.map(_.valueOrAbort.reverse) + val strArgs = args1.map(_.valueOrAbort) Expr(StringContext(strParts*).s(strArgs*)) case _ => ??? } diff --git a/tests/run-macros/quote-simple-macro/quoted_1.scala b/tests/run-macros/quote-simple-macro/quoted_1.scala index bd39612bf3ca..174164320fa0 100644 --- a/tests/run-macros/quote-simple-macro/quoted_1.scala +++ b/tests/run-macros/quote-simple-macro/quoted_1.scala @@ -2,5 +2,5 @@ import scala.quoted.* object Macros { inline def foo(inline i: Int, dummy: Int, j: Int): Int = ${ bar('i, 'j) } - def bar(x: Expr[Int], y: Expr[Int]) (using Quotes): Expr[Int] = '{ ${Expr(x.valueOrError)} + $y } + def bar(x: Expr[Int], y: Expr[Int]) (using Quotes): Expr[Int] = '{ ${Expr(x.valueOrAbort)} + $y } } diff --git a/tests/run-macros/quote-unrolled-foreach/quoted_1.scala b/tests/run-macros/quote-unrolled-foreach/quoted_1.scala index c84cd639bda7..bc974bce6d07 100644 --- a/tests/run-macros/quote-unrolled-foreach/quoted_1.scala +++ b/tests/run-macros/quote-unrolled-foreach/quoted_1.scala @@ -7,7 +7,7 @@ object Macro { ${unrolledForeachImpl('unrollSize, 'seq, 'f)} private def unrolledForeachImpl(unrollSizeExpr: Expr[Int], seq: Expr[Array[Int]], f: Expr[Int => Unit]) (using Quotes): Expr[Unit] = - unrolledForeachImpl(unrollSizeExpr.valueOrError, seq, f) + unrolledForeachImpl(unrollSizeExpr.valueOrAbort, seq, f) private def unrolledForeachImpl(unrollSize: Int, seq: Expr[Array[Int]], f: Expr[Int => Unit])(using Quotes): Expr[Unit] = '{ val size = $seq.length diff --git a/tests/run-macros/quote-whitebox/Macro_1.scala b/tests/run-macros/quote-whitebox/Macro_1.scala index a18fccbc166e..78b7c36ccce1 100644 --- a/tests/run-macros/quote-whitebox/Macro_1.scala +++ b/tests/run-macros/quote-whitebox/Macro_1.scala @@ -2,7 +2,7 @@ import scala.quoted.* object Macros { transparent inline def defaultOf(inline str: String): Any = ${ defaultOfImpl('str) } - def defaultOfImpl(str: Expr[String]) (using Quotes): Expr[Any] = str.valueOrError match { + def defaultOfImpl(str: Expr[String]) (using Quotes): Expr[Any] = str.valueOrAbort match { case "int" => '{1} case "string" => '{"a"} } diff --git a/tests/run-macros/quoted-ToExpr-derivation-macro/Derivation_1.scala b/tests/run-macros/quoted-ToExpr-derivation-macro/Derivation_1.scala index a080ad96109d..7ac7a341d6b1 100644 --- a/tests/run-macros/quoted-ToExpr-derivation-macro/Derivation_1.scala +++ b/tests/run-macros/quoted-ToExpr-derivation-macro/Derivation_1.scala @@ -62,7 +62,7 @@ object ToExprMaker { Expr.summon[T] match case Some(expr) => expr case None => - quotes.reflect.report.throwError(s"Could not find implicit ${Type.show[T]}") + quotes.reflect.report.errorAndAbort(s"Could not find implicit ${Type.show[T]}") private def switchExpr(scrutinee: Expr[Int], seq: List[Expr[ToExpr[_]]])(using Quotes): Expr[ToExpr[_]] = import quotes.reflect._ diff --git a/tests/run-macros/quoted-expr-block/quoted_1.scala b/tests/run-macros/quoted-expr-block/quoted_1.scala index 8d2403df4c10..910382c42de0 100644 --- a/tests/run-macros/quoted-expr-block/quoted_1.scala +++ b/tests/run-macros/quoted-expr-block/quoted_1.scala @@ -5,5 +5,5 @@ inline def replicate(inline times: Int, code: => Any) = ${replicateImpl('times, private def replicateImpl(times: Expr[Int], code: Expr[Any]) (using Quotes)= { @annotation.tailrec def loop(n: Int, accum: List[Expr[Any]]): List[Expr[Any]] = if (n > 0) loop(n - 1, code :: accum) else accum - Expr.block(loop(times.valueOrError, Nil), '{}) + Expr.block(loop(times.valueOrAbort, Nil), '{}) } diff --git a/tests/run-macros/quoted-liftable-derivation-macro-2/Derivation_1.scala b/tests/run-macros/quoted-liftable-derivation-macro-2/Derivation_1.scala index 7c199910652c..1b45835006c0 100644 --- a/tests/run-macros/quoted-liftable-derivation-macro-2/Derivation_1.scala +++ b/tests/run-macros/quoted-liftable-derivation-macro-2/Derivation_1.scala @@ -65,7 +65,7 @@ object Lft { Expr.summon[T] match case Some(expr) => expr case None => - quotes.reflect.report.throwError(s"Could not find implicit ${Type.show[T]}") + quotes.reflect.report.errorAndAbort(s"Could not find implicit ${Type.show[T]}") private def switchExpr(scrutinee: Expr[Int], seq: List[Expr[Lft[_]]])(using Quotes): Expr[Lft[_]] = import quotes.reflect._ diff --git a/tests/run-macros/quoted-liftable-derivation-macro/Derivation_1.scala b/tests/run-macros/quoted-liftable-derivation-macro/Derivation_1.scala index 059ebc16e446..8ecde7988f4e 100644 --- a/tests/run-macros/quoted-liftable-derivation-macro/Derivation_1.scala +++ b/tests/run-macros/quoted-liftable-derivation-macro/Derivation_1.scala @@ -52,7 +52,7 @@ object Lft { private def elemTypesLfts[X: Type](using Quotes): List[Expr[Lft[_]]] = Type.of[X] match case '[ head *: tail ] => - Expr.summon[Lft[head]].getOrElse(quotes.reflect.report.throwError(s"Could not find given Lft[${Type.show[head]}]")) :: elemTypesLfts[tail] + Expr.summon[Lft[head]].getOrElse(quotes.reflect.report.errorAndAbort(s"Could not find given Lft[${Type.show[head]}]")) :: elemTypesLfts[tail] case '[ EmptyTuple ] => Nil private def elemType[X: Type](ordinal: Int)(using Quotes): Type[_] = diff --git a/tests/run-macros/reflect-inline/assert_1.scala b/tests/run-macros/reflect-inline/assert_1.scala index 6c797be0fc85..95bf9dbf04b8 100644 --- a/tests/run-macros/reflect-inline/assert_1.scala +++ b/tests/run-macros/reflect-inline/assert_1.scala @@ -5,12 +5,12 @@ object api { ${ stripImpl('x) } private def stripImpl(x: Expr[String])(using Quotes): Expr[String] = - Expr(augmentString(x.valueOrError).stripMargin) + Expr(augmentString(x.valueOrAbort).stripMargin) inline def typeChecks(inline x: String): Boolean = ${ typeChecksImpl('{scala.compiletime.testing.typeChecks(x)}) } private def typeChecksImpl(b: Expr[Boolean])(using Quotes): Expr[Boolean] = { - if (b.valueOrError) Expr(true) else Expr(false) + if (b.valueOrAbort) Expr(true) else Expr(false) } } diff --git a/tests/run-macros/simple-interpreter/Macro_1.scala b/tests/run-macros/simple-interpreter/Macro_1.scala index 98ce017e563c..324b03676185 100644 --- a/tests/run-macros/simple-interpreter/Macro_1.scala +++ b/tests/run-macros/simple-interpreter/Macro_1.scala @@ -34,7 +34,7 @@ object SchemaInterpreter { vSchema <- interpretSchema(vSchemaExpr) yield Schema.mapSchema(using kSchema, vSchema).asInstanceOf[Schema[T]] case _ => - None // could also hangle with `quotes.reflect.{error, throwError}` + None // could also hangle with `quotes.reflect.{error, errorAndAbort}` } } diff --git a/tests/run-macros/tasty-string-interpolation-reporter-test/Macros_1.scala b/tests/run-macros/tasty-string-interpolation-reporter-test/Macros_1.scala index 14d43bd98657..219cd5cfbebf 100644 --- a/tests/run-macros/tasty-string-interpolation-reporter-test/Macros_1.scala +++ b/tests/run-macros/tasty-string-interpolation-reporter-test/Macros_1.scala @@ -52,7 +52,7 @@ object Macro { private def fooCore(parts: Seq[Expr[String]], args: Seq[Expr[Any]], reporter: Reporter)(using Quotes): Expr[String] = { for ((part, idx) <- parts.zipWithIndex) { - val v = part.valueOrError + val v = part.valueOrAbort if (v.contains("#")) reporter.errorOnPart("Cannot use #", idx) } diff --git a/tests/run-macros/xml-interpolation-3/XmlQuote_1.scala b/tests/run-macros/xml-interpolation-3/XmlQuote_1.scala index 5f3505be3fe7..65d32d9bfbe8 100644 --- a/tests/run-macros/xml-interpolation-3/XmlQuote_1.scala +++ b/tests/run-macros/xml-interpolation-3/XmlQuote_1.scala @@ -12,7 +12,7 @@ object XmlQuote { } def impl(receiver: Expr[StringContext], args: Expr[Seq[Any]])(using Quotes): Expr[Xml] = { - val string = receiver.valueOrError.parts.mkString("??") + val string = receiver.valueOrAbort.parts.mkString("??") '{new Xml(${Expr(string)}, $args.toList)} } }