visitUnaryExpr method

  1. @override
Object? visitUnaryExpr(
  1. UnaryExpr expr
)
override

Implementation

@override
Object? visitUnaryExpr(UnaryExpr expr) {
  final op = expr.prefix.type;
  if (op == TokenType.kHash) {
    final rhs = expr.rhs.accept(this);
    if (rhs is LuaObject) {
      return rhs.tableSize;
    } else if (rhs != null) {
      return 1;
    } else {
      final String lineInfo = this.lineInfo(expr.prefix);
      throw '$lineInfo Length operator # used on nil value.';
    }
  } else {
    final ret = expr.rhs.accept(this);
    if (ret != null) {
      if (op == TokenType.kSub) {
        return switch (ret) {
          final int i => -i,
          final double d => -d,
          _ => ret,
        };
      }
    }

    return ret;
  }
}