parsePrefix method

ParseResult parsePrefix(
  1. String input, {
  2. TypeChecker<TypeInfo>? typeChecker,
})

Implementation

ParseResult parsePrefix(String input, { TypeChecker? typeChecker}) {
  final result = parser.expression.parse(input);
  if (result is Success<Expression>) {
    var complete = result.position == result.buffer.length;

    // check types

    var valid = true;
    var message = "";
    if (typeChecker != null) {
      var expr = result.value;

      var context = ClassTypeCheckerContext();

      try {
        expr.accept(typeChecker, context);

        valid = context.validPrefix();
        if (!valid)
          message = "unknown property ${context.unknown[0].property}";

        complete = context.unknown.isEmpty;
      }
      catch(e) {
        valid = false;
        message = e.toString();
      }
    }

    // done

    if (valid)
      return ParseResult.success(result.value, complete: complete);
    else
      return ParseResult.failure(message, result.position);
  }
  return ParseResult.failure(result.message, result.position);
}