logical method

Expression logical(
  1. ExpressionToken op,
  2. Expression left,
  3. Expression right
)

&& and || of two bools.

Implementation

Expression logical(ExpressionToken op, Expression left, Expression right) {
  if (!left.type.isBoolean || !right.type.isBoolean) {
    fail(
      '"${op.text}" takes two bools, and was given a ${left.type} and a '
      '${right.type}.',
      where: op,
    );
  }
  return ExpressionBinary(op.text, left, right, ExpressionType.boolean);
}