@@ -72,9 +72,9 @@ object Splicer {
7272 *
7373 * See: `Staging`
7474 */
75- def canBeSpliced (tree : Tree )(implicit ctx : Context ): Boolean = tree match {
76- case Quoted (_) => true
77- case _ => (new CanBeInterpreted ).apply(tree)
75+ def checkValidMacroBody (tree : Tree )(implicit ctx : Context ): Unit = tree match {
76+ case Quoted (_) => // ok
77+ case _ => (new CheckValidMacroBody ).apply(tree)
7878 }
7979
8080 /** Tree interpreter that evaluates the tree */
@@ -276,27 +276,37 @@ object Splicer {
276276 }
277277
278278 /** Tree interpreter that tests if tree can be interpreted */
279- private class CanBeInterpreted (implicit ctx : Context ) extends AbstractInterpreter {
279+ private class CheckValidMacroBody (implicit ctx : Context ) extends AbstractInterpreter {
280280
281- type Result = Boolean
281+ type Result = Unit
282282
283- def apply (tree : Tree ): Boolean = interpretTree(tree)(Map .empty)
283+ def apply (tree : Tree ): Unit = interpretTree(tree)(Map .empty)
284284
285- protected def interpretQuote (tree : tpd.Tree )(implicit env : Env ): Boolean = true
286- protected def interpretTypeQuote (tree : tpd.Tree )(implicit env : Env ): Boolean = true
287- protected def interpretLiteral (value : Any )(implicit env : Env ): Boolean = true
288- protected def interpretVarargs (args : List [Boolean ])(implicit env : Env ): Boolean = args.forall(identity )
289- protected def interpretTastyContext ()(implicit env : Env ): Boolean = true
290- protected def interpretQuoteContext ()(implicit env : Env ): Boolean = true
291- protected def interpretStaticMethodCall (module : Symbol , fn : Symbol , args : => List [Boolean ])(implicit env : Env ): Boolean = args.forall (identity)
292- protected def interpretModuleAccess (fn : Symbol )(implicit env : Env ): Boolean = true
293- protected def interpretNew (fn : Symbol , args : => List [Boolean ])(implicit env : Env ): Boolean = args.forall (identity)
285+ protected def interpretQuote (tree : tpd.Tree )(implicit env : Env ): Unit = ()
286+ protected def interpretTypeQuote (tree : tpd.Tree )(implicit env : Env ): Unit = ()
287+ protected def interpretLiteral (value : Any )(implicit env : Env ): Unit = ()
288+ protected def interpretVarargs (args : List [Unit ])(implicit env : Env ): Unit = ( )
289+ protected def interpretTastyContext ()(implicit env : Env ): Unit = ()
290+ protected def interpretQuoteContext ()(implicit env : Env ): Unit = ()
291+ protected def interpretStaticMethodCall (module : Symbol , fn : Symbol , args : => List [Unit ])(implicit env : Env ): Unit = args.foreach (identity)
292+ protected def interpretModuleAccess (fn : Symbol )(implicit env : Env ): Unit = ()
293+ protected def interpretNew (fn : Symbol , args : => List [Unit ])(implicit env : Env ): Unit = args.foreach (identity)
294294
295- def unexpectedTree (tree : tpd.Tree )(implicit env : Env ): Boolean = {
295+ def unexpectedTree (tree : tpd.Tree )(implicit env : Env ): Unit = {
296296 // Assuming that top-level splices can only be in inline methods
297297 // and splices are expanded at inline site, references to inline values
298298 // will be known literal constant trees.
299- tree.symbol.is(Inline )
299+ if (! tree.symbol.is(Inline ))
300+ ctx.error(
301+ """ Malformed macro.
302+ |
303+ |Expected the splice ${...} to contain a single call to a static method.
304+ |
305+ |Where parameters may be:
306+ | * Quoted paramers or fields
307+ | * References to inline parameters
308+ | * Literal values of primitive types
309+ """ .stripMargin, tree.sourcePos)
300310 }
301311 }
302312
0 commit comments