Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
Logical operators are simple data operators that perform bitwise computations on their operands.
-
logical-operator-expression = not-operator-expression / and-operator-expression / or-operator-expression / xor-operator-expression / imp-operator-expression / eqv-operator-expression
Static semantics:
§ Logical operators are statically resolved as simple data operators.
§ A logical operator is invalid if the declared type of any operand is an array or a UDT.
§ For unary logical operators, the operator has the following declared type, based on the declared type of its operand:
|
Operand Declared Type |
Operator Declared Type |
|---|---|
|
Byte |
Byte |
|
Boolean |
Boolean |
|
Integer |
Integer |
|
Any floating-point or fixed-point numeric type, Long, String, String * length or Date |
Long |
|
LongLong |
LongLong |
|
Variant |
Variant |
§ For binary logical operators, the operator has the following declared type, based on the declared type of its operands:
|
Left Operand Declared Type |
Right Operand Declared Type |
Operator Declared Type |
|---|---|---|
|
Byte |
Byte |
Byte |
|
Boolean |
Boolean |
Boolean |
|
Byte or Integer |
Boolean or Integer |
Integer |
|
Boolean or Integer |
Byte or Integer |
Integer |
|
Any floating-point or fixed-point numeric type, Long, String, String * length or Date |
Any numeric type except LongLong, String, String * length or Date |
Long |
|
Any numeric type except LongLong, String, String * length or Date |
Any floating-point or fixed-point numeric type, Long, String, String * length or Date |
Long |
|
LongLong |
Any numeric type, String, String * length or Date |
LongLong |
|
Any numeric type, String, String * length or Date |
LongLong |
LongLong |
|
Any type except an array or UDT |
Variant |
Variant |
Runtime semantics:
§ Logical operators are first evaluated as simple data operators.
§ If the value type of any operand is an array, UDT or Error, runtime error 13 (Type mismatch) is raised.
§ Before evaluating the logical operator, its non-Null operands undergo Let-coercion to the operator’s effective value type.
§ For unary logical operators, the effective value type is determined as follows, based on the value type of the operand:
|
Operand Value Type |
Effective Value Type |
|---|---|
|
Byte |
Byte |
|
Boolean or Integer or Empty |
Integer |
|
Long |
Long |
|
LongLong |
LongLong |
|
Single |
Single |
|
Double or String |
Double |
|
Currency |
Currency |
|
Date |
Date (however, the operand is Let-coerced to Double instead) |
|
Decimal |
Decimal |
|
Null |
Null |
§ For binary logical operators, if either operator is null, the effective value type is determined as follows, based on the value types of the operands:
|
Left Operand Value Type |
Right Operand Value Type |
Effective Value Type |
|---|---|---|
|
Byte or Null |
Byte |
Byte |
|
Byte |
Byte or Null |
Byte |
|
Boolean or Null |
Boolean |
Boolean (however, the operands are Let-coerced to Integer instead) |
|
Boolean |
Boolean or Null |
Boolean (however, the operands are Let-coerced to Integer instead) |
|
Byte, Boolean, Integer, Null or Empty |
Integer or Empty |
Integer |
|
Integer or Empty |
Byte, Boolean, Integer, Null or Empty |
Integer |
|
Byte |
Boolean |
Integer |
|
Boolean |
Byte |
Integer |
|
Any floating-point or fixed-point numeric type, Long, String, Date or Empty |
Any numeric type except LongLong, String, Date, Null or Empty |
Long |
|
Any numeric type except LongLong, String, Date, Null or Empty |
Any floating-point or fixed-point numeric type, Long, String, Date or Empty |
Long |
|
LongLong |
Any numeric type, String, Date or Empty |
LongLong |
|
Any numeric type, String, Date or Empty |
LongLong |
LongLong |
|
Null |
Null |
Null |
The value type of a logical operator is determined from the value the operator produces:
If the logical operator produces a value other than Null, the operator’s value type is its effective value type. The operator’s result value is Let-coerced to this value type.
Otherwise, if the logical operator produces Null, the operator’s value is Null.