^ | 17 ^ 12 (29) | Bitwise XOR
& | 7 & 3 (3) | Binary AND
| | 2 | 3 (3) | Binary OR
-&& | true && false (false) | Logical AND
-|| | true || false (true) | Logical OR
+&& | true && false (false), 3 && 7 (7), 0 && 7 (0) | Logical AND
+|| | true || false (true), 0 || 7 (7)| Logical OR
< | 3 < 5 (true) | Less than
> | 3 > 5 (false) | Greater than
<= | 3 <= 3 (true) | Less than or equal
## <a id="boolean-values"></a> Boolean Values
-The `assign where` and `ignore where` statements, the `!`, `&&` and `||`
-operators as well as the `bool()` function convert their arguments to a
-boolean value based on the following rules:
+The `assign where`, `ignore where`, `if` and `while` statements, the `!` operator as
+well as the `bool()` function convert their arguments to a boolean value based on the
+following rules:
Description | Example Value | Boolean Value
---------------------|-------------------|--------------
Value LogicalAndExpression::DoEvaluate(ScriptFrame& frame, DebugHint *dhint) const
{
- return m_Operand1->Evaluate(frame).ToBool() && m_Operand2->Evaluate(frame).ToBool();
+ Value left = m_Operand1->Evaluate(frame);
+
+ if (!left.ToBool())
+ return left;
+ else
+ return m_Operand2->Evaluate(frame);
}
Value LogicalOrExpression::DoEvaluate(ScriptFrame& frame, DebugHint *dhint) const
{
- return m_Operand1->Evaluate(frame).ToBool() || m_Operand2->Evaluate(frame).ToBool();
+ Value left = m_Operand1->Evaluate(frame);
+
+ if (left.ToBool())
+ return left;
+ else
+ return m_Operand2->Evaluate(frame);
}
Value FunctionCallExpression::DoEvaluate(ScriptFrame& frame, DebugHint *dhint) const