visitLogical method

  1. @override
dynamic visitLogical(
  1. LogicalExpr expr
)
override

Implementation

@override
dynamic visitLogical(LogicalExpr expr) {
  final op = expr.operator.lexeme;

  // Short-circuit evaluation
  if (op == 'and' || op == '&&') {
    final left = _toBool(expr.left.accept(this));
    if (!left) return false;
    return _toBool(expr.right.accept(this));
  }

  if (op == 'or' || op == '||') {
    final left = _toBool(expr.left.accept(this));
    if (left) return true;
    return _toBool(expr.right.accept(this));
  }

  throw EvaluationException('Unknown logical operator: $op');
}