diff --git a/src/main/scala/inox/ast/Extractors.scala b/src/main/scala/inox/ast/Extractors.scala index cecd9b42674ff9e0bc4c64ac75ed06de229a65e8..4582f9cb07a629e29c090147e95b11f32e6e7cb4 100644 --- a/src/main/scala/inox/ast/Extractors.scala +++ b/src/main/scala/inox/ast/Extractors.scala @@ -234,6 +234,9 @@ trait Extractors { self: Trees => val deconstructor: TreeDeconstructor { val s: self.type val t: self.type + } = new TreeDeconstructor { + protected val s: self.type = self + protected val t: self.type = self } /** Operator Extractor to extract any Expression in a consistent way. diff --git a/src/main/scala/inox/ast/SimpleSymbols.scala b/src/main/scala/inox/ast/SimpleSymbols.scala index bd5e6ddf2a18c06dcb52a27d9af6e5f119d28466..36c2afda03c66235ccf6ec13ff43a6c8e5a37e32 100644 --- a/src/main/scala/inox/ast/SimpleSymbols.scala +++ b/src/main/scala/inox/ast/SimpleSymbols.scala @@ -5,19 +5,18 @@ package ast trait SimpleSymbols { self: Trees => - val NoSymbols = new Symbols(Map.empty, Map.empty) + val NoSymbols = Symbols(Map.empty, Map.empty) - class Symbols( - val functions: Map[Identifier, FunDef], - val adts: Map[Identifier, ADTDefinition] - ) extends AbstractSymbols { + val Symbols: (Map[Identifier, FunDef], Map[Identifier, ADTDefinition]) => Symbols - def withFunctions(functions: Seq[FunDef]): Symbols = new Symbols( + abstract class SimpleSymbols extends AbstractSymbols { self: Symbols => + + def withFunctions(functions: Seq[FunDef]): Symbols = Symbols( this.functions ++ functions.map(fd => fd.id -> fd), this.adts ) - def withADTs(adts: Seq[ADTDefinition]): Symbols = new Symbols( + def withADTs(adts: Seq[ADTDefinition]): Symbols = Symbols( this.functions, this.adts ++ adts.map(adt => adt.id -> adt) ) diff --git a/src/main/scala/inox/package.scala b/src/main/scala/inox/package.scala index bf2325f005810d67314d6a8a51b84141f4950d0c..14426583e5476ab5fb3d44a21da228063e409060 100644 --- a/src/main/scala/inox/package.scala +++ b/src/main/scala/inox/package.scala @@ -42,9 +42,9 @@ package object inox { } object trees extends ast.Trees with ast.SimpleSymbols { - object deconstructor extends { - protected val s: trees.type = trees - protected val t: trees.type = trees - } with ast.TreeDeconstructor + case class Symbols( + functions: Map[Identifier, FunDef], + adts: Map[Identifier, ADTDefinition] + ) extends SimpleSymbols } }