diff --git a/src/main/scala/inox/ast/Extractors.scala b/src/main/scala/inox/ast/Extractors.scala index 4582f9cb07a629e29c090147e95b11f32e6e7cb4..f7e261e88fe90e080e67abec9a3fee58cfd59326 100644 --- a/src/main/scala/inox/ast/Extractors.scala +++ b/src/main/scala/inox/ast/Extractors.scala @@ -231,14 +231,19 @@ trait TreeDeconstructor { * [[TreeDeconstructor]] instance. */ trait Extractors { self: Trees => - val deconstructor: TreeDeconstructor { + def getDeconstructor(that: Trees): TreeDeconstructor { val s: self.type - val t: self.type + val t: that.type } = new TreeDeconstructor { protected val s: self.type = self - protected val t: self.type = self + protected val t: that.type = that } + val deconstructor: TreeDeconstructor { + val s: self.type + val t: self.type + } = getDeconstructor(self) + /** Operator Extractor to extract any Expression in a consistent way. * * You can match on any Inox Expr, and then get both a Seq[Expr] of diff --git a/src/main/scala/inox/ast/TreeOps.scala b/src/main/scala/inox/ast/TreeOps.scala index 5aeeef5aabd743d0d260d3776ebe0cbda306053b..7116a0ee910793def74f7d097a468a6162769192 100644 --- a/src/main/scala/inox/ast/TreeOps.scala +++ b/src/main/scala/inox/ast/TreeOps.scala @@ -12,11 +12,6 @@ trait TreeOps { self: Trees => trait SelfTreeTransformer extends TreeTransformer { val s: self.type = self val t: self.type = self - - lazy val deconstructor: TreeDeconstructor { - val s: self.type - val t: self.type - } = self.deconstructor } trait IdentityTreeTransformer extends SelfTreeTransformer { @@ -57,10 +52,10 @@ trait TreeTransformer { val s: Trees val t: Trees - val deconstructor: TreeDeconstructor { + lazy val deconstructor: TreeDeconstructor { val s: TreeTransformer.this.s.type val t: TreeTransformer.this.t.type - } + } = s.getDeconstructor(t) def transform(id: Identifier, tpe: s.Type): (Identifier, t.Type) = (id, transform(tpe)) @@ -231,14 +226,6 @@ trait TreeTransformer { } = new TreeTransformerComposition { val t1: TreeTransformer.this.type = TreeTransformer.this val t2: that.type = that - - lazy val deconstructor: TreeDeconstructor { - val s: TreeTransformer.this.s.type - val t: that.t.type - } = new TreeDeconstructor { - protected val s: TreeTransformer.this.s.type = TreeTransformer.this.s - protected val t: that.t.type = that.t - } } }