Chromium Code Reviews| Index: tools/gn/operators.cc |
| diff --git a/tools/gn/operators.cc b/tools/gn/operators.cc |
| index 5824ac3d23de98cd6ca1bcf4a3fa513f1cbfa433..d22b7d15bb04fddaa78f22abef80fdc9bb294c74 100644 |
| --- a/tools/gn/operators.cc |
| +++ b/tools/gn/operators.cc |
| @@ -416,11 +416,15 @@ Value ExecuteOr(Scope* scope, |
| const Value& right, |
| Err* err) { |
| if (left.type() != Value::BOOLEAN) { |
| - *err = Err(left, "Left side of || operator is not a boolean."); |
| - err->AppendRange(op_node->GetRange()); |
| + *err = Err(op_node->left(), "Left side of || operator is not a boolean.", |
| + "Type is \"" + std::string(Value::DescribeType(left.type())) + |
| + "\" instead."); |
|
scottmg
2014/04/02 17:03:23
do these need the AppendRange still?
brettw
2014/04/02 17:06:01
No. I don't know what I was thinking with this bef
|
| + return Value(); |
| } else if (right.type() != Value::BOOLEAN) { |
| - *err = Err(right, "Right side of || operator is not a boolean."); |
| - err->AppendRange(op_node->GetRange()); |
| + *err = Err(op_node->right(), "Right side of || operator is not a boolean.", |
| + "Type is \"" + std::string(Value::DescribeType(right.type())) + |
| + "\" instead."); |
| + return Value(); |
| } |
| return Value(op_node, left.boolean_value() || right.boolean_value()); |
| } |
| @@ -431,11 +435,15 @@ Value ExecuteAnd(Scope* scope, |
| const Value& right, |
| Err* err) { |
| if (left.type() != Value::BOOLEAN) { |
| - *err = Err(left, "Left side of && operator is not a boolean."); |
| - err->AppendRange(op_node->GetRange()); |
| + *err = Err(op_node->left(), "Left side of && operator is not a boolean.", |
| + "Type is \"" + std::string(Value::DescribeType(left.type())) + |
| + "\" instead."); |
| + return Value(); |
| } else if (right.type() != Value::BOOLEAN) { |
| - *err = Err(right, "Right side of && operator is not a boolean."); |
| - err->AppendRange(op_node->GetRange()); |
| + *err = Err(op_node->right(), "Right side of && operator is not a boolean.", |
| + "Type is \"" + std::string(Value::DescribeType(right.type())) + |
| + "\" instead."); |
| + return Value(); |
| } |
| return Value(op_node, left.boolean_value() && right.boolean_value()); |
| } |
| @@ -487,8 +495,9 @@ Value ExecuteUnaryOperator(Scope* scope, |
| DCHECK(op_node->op().type() == Token::BANG); |
| if (expr.type() != Value::BOOLEAN) { |
| - *err = Err(expr, "Operand of ! operator is not a boolean."); |
| - err->AppendRange(op_node->GetRange()); |
| + *err = Err(op_node, "Operand of ! operator is not a boolean.", |
| + "Type is \"" + std::string(Value::DescribeType(expr.type())) + |
| + "\" instead."); |
| return Value(); |
| } |
| // TODO(scottmg): Why no unary minus? |