summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/op.cc10
1 files changed, 6 insertions, 4 deletions
diff --git a/src/op.cc b/src/op.cc
index e34be005..1e23d3fe 100644
--- a/src/op.cc
+++ b/src/op.cc
@@ -56,8 +56,8 @@ expr_t::ptr_op_t expr_t::op_t::compile(scope_t& scope)
return this;
ptr_op_t lhs(left()->compile(scope));
- ptr_op_t rhs(has_right() ? (kind == O_LOOKUP ?
- right() : right()->compile(scope)) :
+ ptr_op_t rhs(kind > UNARY_OPERATORS && has_right() ?
+ (kind == O_LOOKUP ? right() : right()->compile(scope)) :
ptr_op_t());
if (lhs == left() && (! rhs || rhs == right()))
@@ -264,14 +264,16 @@ bool expr_t::op_t::print(std::ostream& out, const context_t& context) const
break;
case O_NOT:
- out << "!";
+ out << "!(";
if (left() && left()->print(out, context))
found = true;
+ out << ")";
break;
case O_NEG:
- out << "-";
+ out << "-(";
if (left() && left()->print(out, context))
found = true;
+ out << ")";
break;
case O_ADD: