POSTFIX
} opType;
+ //The default operation type is PREFIX
+ opType = PREFIX;
+
stringstream op; // operation (such as '+')
switch(n.getKind()) {
// UF
case kind::APPLY_UF:
- toStream(op, n.getOperator(), depth, types, true);
+ toStream(op, n.getOperator(), depth, types, false);
break;
+
case kind::FUNCTION_TYPE:
if (n.getNumChildren() > 1) {
if (n.getNumChildren() > 2) {
case kind::SELECT:
toStream(out, n[0], depth, types, false);
out << '[';
- toStream(out, n[0], depth, types, false);
+ toStream(out, n[1], depth, types, false);
out << ']';
return;
break;
break;
// BITVECTORS
- case kind::BITVECTOR_PLUS:
- op << "BVPLUS";
- break;
- case kind::BITVECTOR_SUB:
- op << "BVSUB";
- break;
case kind::BITVECTOR_XOR:
op << "BVXOR";
break;
case kind::BITVECTOR_COMP:
op << "BVCOMP";
break;
- case kind::BITVECTOR_MULT:
- op << "BVMULT";
- break;
case kind::BITVECTOR_UDIV:
op << "BVUDIV";
break;
op << "@";
opType = INFIX;
break;
+ case kind::BITVECTOR_PLUS:
+ //This interprets a BITVECTOR_PLUS as a bvadd in SMT-LIB
+ out << "BVPLUS(";
+ Assert(n.getType().isBitVector());
+ out << BitVectorType(n.getType().toType()).getSize();
+ out << ',';
+ toStream(out, n[0], depth, types, false);
+ out << ',';
+ toStream(out, n[1], depth, types, false);
+ out << ')';
+ return;
+ break;
+ case kind::BITVECTOR_SUB:
+ out << "BVSUB(";
+ Assert(n.getType().isBitVector());
+ out << BitVectorType(n.getType().toType()).getSize();
+ out << ',';
+ toStream(out, n[0], depth, types, false);
+ out << ',';
+ toStream(out, n[1], depth, types, false);
+ out << ')';
+ return;
+ break;
+ case kind::BITVECTOR_MULT:
+ out << "BVMULT(";
+ Assert(n.getType().isBitVector());
+ out << BitVectorType(n.getType().toType()).getSize();
+ out << ',';
+ toStream(out, n[0], depth, types, false);
+ out << ',';
+ toStream(out, n[1], depth, types, false);
+ out << ')';
+ return;
+ break;
case kind::BITVECTOR_EXTRACT:
op << n.getOperator().getConst<BitVectorExtract>();
opType = POSTFIX;
switch (opType) {
case PREFIX:
- if (bracket) {
- out << op.str() << '(';
- }
+ out << op.str() << '(';
break;
case INFIX:
if (bracket) {
}
break;
case POSTFIX:
+ out << '(';
break;
}
switch (opType) {
case PREFIX:
- if (bracket) {
- out << ')';
- }
+ out << ')';
break;
case INFIX:
if (bracket) {
}
break;
case POSTFIX:
- out << op.str();
+ out << ')' << op.str();
break;
}