You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
packagebakeryimportscala.language.experimental.macrosimportscala.reflect.macros.ContexttraitFailureCake {
implicitdefliftAnyFails[T:Manifest]:Any=???// This works// implicit def liftAny[T]: Any = ???
}
objectBakery {
deffailure:Any= macro failureImpl
deffailureImpl(c: Context): c.Expr[Any] = {
importc.universe._defdslTrait(dslName: String) = {
valnames= dslName.split("\\.").toList.reverse
assert(names.length >=1, "DSL trait name must be in the valid format. DSL trait name is "+ dslName)
valtpeName= newTypeName(names.head)
names.tail.reverse match {
case head :: tail ⇒Select(tail.foldLeft[Tree](Ident(newTermName(head)))((tree, name) ⇒Select(tree, newTermName(name))), tpeName)
caseNil⇒Ident(tpeName)
}
}
defcomposeDSL(transformedBody: Tree) =ClassDef(Modifiers(), newTypeName("eval"), List(), Template(
List(dslTrait("bakery.FailureCake")),
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("main"), List(), List(List()), Ident(newTypeName("Any")), transformedBody))))
defconstructor=Apply(Select(New(Ident(newTypeName("eval"))), nme.CONSTRUCTOR), List())
c.eval(c.Expr[Any](
c.resetAllAttrs(Block(composeDSL(Literal(Constant(1))), constructor))))
c.Expr[Any](Literal(Constant(1)))
}
}
objectTestextendsApp {
bakery.Bakery.failure
}
11:08~/Projects/210x/sandbox (2.10.x)$ s
exception when typing implicitdefliftAnyFails(evidence$1: reflect.Manifest):Object= bakery.FailureCake$class.liftAnyFails(__wrapper$1$3b9afa84dd664f0ba5c8b75c90de8b24$eval$1.this, evidence$1)
whilecompiling: <no file>
during phase: mixin
library version: version 2.10.2-20130301-114301-5d54cf9e37
compiler version: version 2.10.2-20130301-114301-5d54cf9e37
reconstructed args:
last tree to typer: TypeTree(traitFailureCake)
symbol: traitFailureCake in packagebakery (flags:<interface>abstract<trait><lateinterface>)
symbol definition: abstracttraitFailureCakeextendsObjecttpe: bakery.FailureCake
symbol owners: traitFailureCake->packagebakery
context owners: method liftAnyFails ->class__wrapper$1$3b9afa84dd664f0ba5c8b75c90de8b24$eval$1->package__wrapper$1$3b9afa84dd664f0ba5c8b75c90de8b24==Enclosing template or block ==Apply( // implicit def liftAnyFails(evidence$1: reflect.Manifest): Object in object FailureCake$class, tree.tpe=Object"bakery"."FailureCake$class"."liftAnyFails"// implicit def liftAnyFails(evidence$1: reflect.Manifest): Object in object FailureCake$class, tree.tpe=(x$1: bakery.FailureCake, evidence$1: reflect.Manifest)Object// 2 argumentsThis("__wrapper$1$3b9afa84dd664f0ba5c8b75c90de8b24$eval$1")class__wrapper$1$3b9afa84dd664f0ba5c8b75c90de8b24$eval$1extendsFailureCake in package__wrapper$1$3b9afa84dd664f0ba5c8b75c90de8b24, tree.tpe=__wrapper$1$3b9afa84dd664f0ba5c8b75c90de8b24.__wrapper$1$3b9afa84dd664f0ba5c8b75c90de8b24$eval$1"evidence$1"// evidence$1: reflect.Manifest, tree.tpe=reflect.Manifest
)
==Expandedtypeof tree ==TypeRef(TypeSymbol(abstracttraitFailureCakeextendsObject))
unhandled exception while transforming <no source file>
error: exception during macro expansion:
scala.reflect.internal.FatalError:packagescaladoesnothaveamemberlanguageFeature$implicitConversions
at scala.reflect.internal.Definitions$DefinitionsClass.scala$reflect$internal$Definitions$DefinitionsClass$$fatalMissingSymbol(Definitions.scala:1028)
at scala.reflect.internal.Definitions$DefinitionsClass$$anonfun$getMember$1.apply(Definitions.scala:1052)
at scala.reflect.internal.Definitions$DefinitionsClass$$anonfun$getMember$1.apply(Definitions.scala:1047)
at scala.reflect.internal.Symbols$Symbol.orElse(Symbols.scala:2220)
at scala.reflect.internal.Definitions$DefinitionsClass.getMember(Definitions.scala:1046)
at scala.reflect.internal.Definitions$DefinitionsClass$$anonfun$getMember$1.apply(Definitions.scala:1050)
at scala.reflect.internal.Definitions$DefinitionsClass$$anonfun$getMember$1.apply(Definitions.scala:1047)
at scala.reflect.internal.Symbols$Symbol.orElse(Symbols.scala:2220)
at scala.reflect.internal.Definitions$DefinitionsClass.getMember(Definitions.scala:1046)
at scala.reflect.internal.Definitions$DefinitionsClass.getLanguageFeature(Definitions.scala:1031)
at scala.reflect.internal.Definitions$DefinitionsClass.ImplicitConversionsFeature$lzycompute(Definitions.scala:1000)
at scala.reflect.internal.Definitions$DefinitionsClass.ImplicitConversionsFeature(Definitions.scala:1000)
at scala.tools.nsc.typechecker.Typers$Typer.typedDefDef(Typers.scala:2276)
at scala.tools.nsc.typechecker.Typers$Typer.typed1(Typers.scala:5550)
at scala.tools.nsc.transform.Erasure$Eraser.typed1(Erasure.scala:839)
at scala.tools.nsc.typechecker.Typers$Typer.typed(Typers.scala:5623)
at scala.tools.nsc.typechecker.Typers$Typer.typed(Typers.scala:5680)
at scala.tools.nsc.typechecker.Typers$Typer.typedPos(Typers.scala:5685)
at scala.tools.nsc.transform.Mixin$MixinTransformer.scala$tools$nsc$transform$Mixin$MixinTransformer$$typedPos(Mixin.scala:483)
at scala.tools.nsc.transform.Mixin$MixinTransformer.attributedDef$1(Mixin.scala:653)
at scala.tools.nsc.transform.Mixin$MixinTransformer.scala$tools$nsc$transform$Mixin$MixinTransformer$$addDef$1(Mixin.scala:664)
at scala.tools.nsc.transform.Mixin$MixinTransformer.scala$tools$nsc$transform$Mixin$MixinTransformer$$addDefDef$1(Mixin.scala:672)
at scala.tools.nsc.transform.Mixin$MixinTransformer$$anonfun$addNewDefs$2.apply(Mixin.scala:1093)
at scala.tools.nsc.transform.Mixin$MixinTransformer$$anonfun$addNewDefs$2.apply(Mixin.scala:1040)
at scala.collection.TraversableLike$WithFilter$$anonfun$foreach$1.apply(TraversableLike.scala:772)
at scala.collection.immutable.List.foreach(List.scala:318)
at scala.reflect.internal.Scopes$Scope.foreach(Scopes.scala:315)
at scala.collection.TraversableLike$WithFilter.foreach(TraversableLike.scala:771)
at scala.tools.nsc.transform.Mixin$MixinTransformer.addNewDefs(Mixin.scala:1040)
at scala.tools.nsc.transform.Mixin$MixinTransformer.scala$tools$nsc$transform$Mixin$MixinTransformer$$postTransform(Mixin.scala:1147)
at scala.tools.nsc.transform.Mixin$MixinTransformer$$anonfun$transform$1.apply(Mixin.scala:1261)
at scala.tools.nsc.transform.Mixin$MixinTransformer$$anonfun$transform$1.apply(Mixin.scala:1261)
at scala.reflect.internal.SymbolTable.atPhase(SymbolTable.scala:207)
at scala.reflect.internal.SymbolTable.afterPhase(SymbolTable.scala:216)
at scala.tools.nsc.Global.afterMixin(Global.scala:1103)
at scala.tools.nsc.transform.Mixin$MixinTransformer.transform(Mixin.scala:1261)
at scala.tools.nsc.transform.Mixin$MixinTransformer.transform(Mixin.scala:471)
at scala.reflect.api.Trees$Transformer.transformTemplate(Trees.scala:2904)
at scala.reflect.internal.Trees$$anonfun$itransform$4.apply(Trees.scala:1280)
at scala.reflect.internal.Trees$$anonfun$itransform$4.apply(Trees.scala:1279)
at scala.reflect.api.Trees$Transformer.atOwner(Trees.scala:2936)
at scala.reflect.internal.Trees$class.itransform(Trees.scala:1278)
at scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:13)
at scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:13)
at scala.reflect.api.Trees$Transformer.transform(Trees.scala:2897)
at scala.tools.nsc.transform.Mixin$MixinTransformer.transform(Mixin.scala:1258)
at scala.tools.nsc.transform.Mixin$MixinTransformer.transform(Mixin.scala:471)
at scala.reflect.api.Trees$Transformer$$anonfun$transformStats$1.apply(Trees.scala:2927)
at scala.reflect.api.Trees$Transformer$$anonfun$transformStats$1.apply(Trees.scala:2925)
at scala.collection.immutable.List.loop$1(List.scala:170)
at scala.collection.immutable.List.mapConserve(List.scala:186)
at scala.reflect.api.Trees$Transformer.transformStats(Trees.scala:2925)
at scala.reflect.internal.Trees$$anonfun$itransform$7.apply(Trees.scala:1298)
at scala.reflect.internal.Trees$$anonfun$itransform$7.apply(Trees.scala:1298)
at scala.reflect.api.Trees$Transformer.atOwner(Trees.scala:2936)
at scala.reflect.internal.Trees$class.itransform(Trees.scala:1297)
at scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:13)
at scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:13)
at scala.reflect.api.Trees$Transformer.transform(Trees.scala:2897)
at scala.tools.nsc.transform.Mixin$MixinTransformer.transform(Mixin.scala:1258)
at scala.tools.nsc.transform.Mixin$MixinTransformer.transform(Mixin.scala:471)
at scala.tools.nsc.ast.Trees$Transformer.transformUnit(Trees.scala:227)
at scala.tools.nsc.transform.Transform$Phase.apply(Transform.scala:30)
at scala.tools.nsc.Global$GlobalPhase.applyPhase(Global.scala:464)
at scala.tools.nsc.Global$GlobalPhase$$anonfun$run$1.apply(Global.scala:431)
at scala.tools.nsc.Global$GlobalPhase$$anonfun$run$1.apply(Global.scala:431)
at scala.collection.Iterator$class.foreach(Iterator.scala:727)
at scala.collection.AbstractIterator.foreach(Iterator.scala:1157)
at scala.tools.nsc.Global$GlobalPhase.run(Global.scala:431)
at scala.tools.nsc.Global$Run.compileUnitsInternal(Global.scala:1583)
at scala.tools.nsc.Global$Run.compileUnits(Global.scala:1557)
at scala.tools.reflect.ToolBoxFactory$ToolBoxImpl$ToolBoxGlobal.compile(ToolBoxFactory.scala:251)
at scala.tools.reflect.ToolBoxFactory$ToolBoxImpl.compile(ToolBoxFactory.scala:416)
at scala.tools.reflect.ToolBoxFactory$ToolBoxImpl.eval(ToolBoxFactory.scala:419)
at scala.reflect.macros.runtime.Evals$class.eval(Evals.scala:16)
at scala.reflect.macros.runtime.Context.eval(Context.scala:6)
at bakery.Bakery$.failureImpl(Macros.scala:43)
one error found
The text was updated successfully, but these errors were encountered:
The text was updated successfully, but these errors were encountered: