variable property

Parser<Expression?> get variable

Implementation

Parser<Expression?> get variable => groupOrIdentifier
        .seq((memberArgument.cast() | indexArgument | callArgument).star())
        .map((l) {
      var a = l[0] as Expression?;
      var b = l[1] as List;
      return b.fold(a, (Expression? object, argument) {
        if (argument is Identifier) {
          return MemberExpression(object, argument);
        }
        if (argument is Expression) {
          return IndexExpression(object, argument);
        }
        if (argument is List<Expression>) {
          return CallExpression(object, argument);
        }
        throw ArgumentError('Invalid type ${argument.runtimeType}');
      });
    });