@@ -96,10 +96,8 @@ trait Decider {
9696 // slower, so this tradeoff seems worth it.
9797 def freshFunctions : Set [FunctionDecl ]
9898 def freshMacros : Vector [MacroDecl ]
99- def declareAndRecordAsFreshFunctions (functions : Set [FunctionDecl ], toStack : Boolean ): Unit
100- def declareAndRecordAsFreshMacros (functions : Seq [MacroDecl ], toStack : Boolean ): Unit
101- def pushSymbolStack (): Unit
102- def popSymbolStack (): (Set [FunctionDecl ], Seq [MacroDecl ])
99+ def declareAndRecordAsFreshFunctions (functions : Set [FunctionDecl ]): Unit
100+ def declareAndRecordAsFreshMacros (functions : Seq [MacroDecl ]): Unit
103101 def setPcs (other : PathConditionStack ): Unit
104102
105103 def statistics (): Map [String , String ]
@@ -126,17 +124,12 @@ trait DefaultDeciderProvider extends VerifierComponent { this: Verifier =>
126124
127125 private var _declaredFreshFunctions : Set [FunctionDecl ] = _ /* [BRANCH-PARALLELISATION] */
128126 private var _declaredFreshMacros : Vector [MacroDecl ] = _
129-
130- private var _freshFunctionStack : Stack [mutable.HashSet [FunctionDecl ]] = _
131- private var _freshMacroStack : Stack [mutable.ListBuffer [MacroDecl ]] = _
127+ private var _declaredFreshMacroNames : Set [String ] = _ /* contains names of _declaredFreshMacros for faster lookup */
132128
133129 private var _proverOptions : Map [String , String ] = Map .empty
134130 private var _proverResetOptions : Map [String , String ] = Map .empty
135131 private val _debuggerAssumedTerms : mutable.Set [Term ] = mutable.Set .empty
136-
137-
138- // private val TODODELETEtermSources = mutable.Map.empty[Term, DebugExp]
139-
132+
140133 def functionDecls : Set [FunctionDecl ] = _declaredFreshFunctions
141134 def macroDecls : Vector [MacroDecl ] = _declaredFreshMacros
142135
@@ -221,8 +214,7 @@ trait DefaultDeciderProvider extends VerifierComponent { this: Verifier =>
221214 pathConditions = new LayeredPathConditionStack ()
222215 _declaredFreshFunctions = if (Verifier .config.parallelizeBranches()) HashSet .empty else InsertionOrderedSet .empty /* [BRANCH-PARALLELISATION] */
223216 _declaredFreshMacros = Vector .empty
224- _freshMacroStack = Stack .empty
225- _freshFunctionStack = Stack .empty
217+ _declaredFreshMacroNames = HashSet .empty
226218 createProver(Verifier .config.prover(), Verifier .config.proverArgs)
227219 }
228220
@@ -231,8 +223,7 @@ trait DefaultDeciderProvider extends VerifierComponent { this: Verifier =>
231223 pathConditions = new LayeredPathConditionStack ()
232224 _declaredFreshFunctions = if (Verifier .config.parallelizeBranches()) HashSet .empty else InsertionOrderedSet .empty /* [BRANCH-PARALLELISATION] */
233225 _declaredFreshMacros = Vector .empty
234- _freshMacroStack = Stack .empty
235- _freshFunctionStack = Stack .empty
226+ _declaredFreshMacroNames = HashSet .empty
236227 _proverOptions = Map .empty
237228 }
238229
@@ -466,7 +457,7 @@ trait DefaultDeciderProvider extends VerifierComponent { this: Verifier =>
466457 prover.declare(macroDecl)
467458
468459 _declaredFreshMacros = _declaredFreshMacros :+ macroDecl /* [BRANCH-PARALLELISATION] */
469- _freshMacroStack.foreach(l => l.append(macroDecl))
460+ _declaredFreshMacroNames = _declaredFreshMacroNames + name.name
470461
471462 macroDecl
472463 }
@@ -504,7 +495,6 @@ trait DefaultDeciderProvider extends VerifierComponent { this: Verifier =>
504495
505496 val decl = FunctionDecl (fun)
506497 _declaredFreshFunctions = _declaredFreshFunctions + decl /* [BRANCH-PARALLELISATION] */
507- _freshFunctionStack.foreach(s => s.add(decl))
508498
509499 fun
510500 }
@@ -514,57 +504,25 @@ trait DefaultDeciderProvider extends VerifierComponent { this: Verifier =>
514504 def freshFunctions : Set [FunctionDecl ] = _declaredFreshFunctions
515505 def freshMacros : Vector [MacroDecl ] = _declaredFreshMacros
516506
517- def declareAndRecordAsFreshFunctions (functions : Set [FunctionDecl ], toSymbolStack : Boolean ): Unit = {
518- if (! toSymbolStack) {
519- for (f <- functions) {
520- if (! _declaredFreshFunctions.contains(f))
521- prover.declare(f)
522-
523- _declaredFreshFunctions = _declaredFreshFunctions + f
524- }
525- } else {
526- for (f <- functions) {
527- if (! _declaredFreshFunctions.contains(f))
528- prover.declare(f)
529-
507+ def declareAndRecordAsFreshFunctions (functions : Set [FunctionDecl ]): Unit = {
508+ for (f <- functions) {
509+ if (! _declaredFreshFunctions.contains(f)) {
510+ prover.declare(f)
530511 _declaredFreshFunctions = _declaredFreshFunctions + f
531- _freshFunctionStack.foreach(s => s.add(f))
532512 }
533513 }
534514 }
535515
536- def declareAndRecordAsFreshMacros (macros : Seq [MacroDecl ], toStack : Boolean ): Unit = {
537- if (! toStack) {
538- for (m <- macros) {
539- if (! _declaredFreshMacros.contains(m)) {
540- prover.declare(m)
541- _declaredFreshMacros = _declaredFreshMacros.appended(m)
542- }
543- }
544- } else {
545- for (m <- macros) {
546- if (! _declaredFreshMacros.contains(m)) {
547- prover.declare(m)
548- _declaredFreshMacros = _declaredFreshMacros.appended(m)
549- }
550- _freshMacroStack.foreach(l => l.append(m))
516+ def declareAndRecordAsFreshMacros (macros : Seq [MacroDecl ]): Unit = {
517+ for (m <- macros) {
518+ if (! _declaredFreshMacroNames.contains(m.id.name)) {
519+ prover.declare(m)
520+ _declaredFreshMacros = _declaredFreshMacros.appended(m)
521+ _declaredFreshMacroNames = _declaredFreshMacroNames + m.id.name
551522 }
552523 }
553524 }
554525
555- def pushSymbolStack (): Unit = {
556- _freshFunctionStack = _freshFunctionStack.prepended(mutable.HashSet ())
557- _freshMacroStack = _freshMacroStack.prepended(mutable.ListBuffer ())
558- }
559-
560- def popSymbolStack (): (Set [FunctionDecl ], Seq [MacroDecl ]) = {
561- val funcDecls = _freshFunctionStack.head.toSet
562- _freshFunctionStack = _freshFunctionStack.tail
563- val macroDecls = _freshMacroStack.head.toSeq
564- _freshMacroStack = _freshMacroStack.tail
565- (funcDecls, macroDecls)
566- }
567-
568526 /* Misc */
569527
570528 def statistics (): Map [String , String ] = prover.statistics()
0 commit comments