@@ -19,25 +19,28 @@ object ConcolicDriver {
19
19
20
20
def symVToZ3 (symV : SymVal ): Z3AST = symV match {
21
21
case SymV (name) => z3Ctx.mkConst(name, intSort) // might not be an int?
22
- case SymBinary (op, lhs, rhs) => op match {
23
- case Add (_) => z3Ctx.mkAdd(symVToZ3(lhs), symVToZ3(rhs)) // does numtype matter?
24
- case Sub (_) => z3Ctx.mkSub(symVToZ3(lhs), symVToZ3(rhs))
25
- case Mul (_) => z3Ctx.mkMul(symVToZ3(lhs), symVToZ3(rhs))
26
- case _ => ???
27
- }
28
- case SymUnary (op, v) => op match {
29
- case _ => ???
30
- }
22
+ case SymBinary (op, lhs, rhs) =>
23
+ op match {
24
+ case Add (_) => z3Ctx.mkAdd(symVToZ3(lhs), symVToZ3(rhs)) // does numtype matter?
25
+ case Sub (_) => z3Ctx.mkSub(symVToZ3(lhs), symVToZ3(rhs))
26
+ case Mul (_) => z3Ctx.mkMul(symVToZ3(lhs), symVToZ3(rhs))
27
+ case _ => ???
28
+ }
29
+ case SymUnary (op, v) =>
30
+ op match {
31
+ case _ => ???
32
+ }
31
33
case SymIte (cond, thenV, elseV) => z3Ctx.mkITE(condToZ3(cond), symVToZ3(thenV), symVToZ3(elseV))
32
- case Concrete (v) => ???
33
- case _ => ???
34
+ case Concrete (v) => ???
35
+ case _ => ???
34
36
}
35
37
def condToZ3 (cond : Cond ): Z3AST = cond match {
36
38
case CondEqz (v) => z3Ctx.mkEq(symVToZ3(v), z3Ctx.mkInt(0 , intSort))
37
- case Not (cond) => z3Ctx.mkNot(condToZ3(cond))
38
- case RelCond (op, lhs, rhs) => op match {
39
- case _ => ???
40
- }
39
+ case Not (cond) => z3Ctx.mkNot(condToZ3(cond))
40
+ case RelCond (op, lhs, rhs) =>
41
+ op match {
42
+ case _ => ???
43
+ }
41
44
}
42
45
43
46
val solver = z3Ctx.mkSolver()
@@ -85,16 +88,21 @@ object ConcolicDriver {
85
88
def loop (worklist : Queue [HashMap [Int , Value ]]): Unit = worklist match {
86
89
case Queue () => ()
87
90
case env +: rest => {
88
- Evaluator .execWholeProgram(module, mainFun, env, (_endStack, _endSymStack, pathConds) => {
89
- println(s " env: $env" )
90
- val newEnv = condsToEnv(pathConds)
91
- val newWork = for (i <- 0 until pathConds.length) yield {
92
- val newConds = negateCond(pathConds, i)
93
- checkPCToFile(newConds)
94
- condsToEnv(newConds)
91
+ val moduleInst = ModuleInstance (module)
92
+ Evaluator (moduleInst).execWholeProgram(
93
+ Some (mainFun),
94
+ env,
95
+ (_endStack, _endSymStack, pathConds) => {
96
+ println(s " env: $env" )
97
+ val newEnv = condsToEnv(pathConds)
98
+ val newWork = for (i <- 0 until pathConds.length) yield {
99
+ val newConds = negateCond(pathConds, i)
100
+ checkPCToFile(newConds)
101
+ condsToEnv(newConds)
102
+ }
103
+ loop(rest ++ newWork)
95
104
}
96
- loop(rest ++ newWork)
97
- })
105
+ )
98
106
}
99
107
}
100
108
@@ -110,6 +118,5 @@ object DriverSimpleTest {
110
118
ConcolicDriver .exec(module, mainFun, startEnv)(new Z3Context ())
111
119
}
112
120
113
- def main (args : Array [String ]) = {
114
- }
121
+ def main (args : Array [String ]) = {}
115
122
}
0 commit comments