parseStrict method

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

Parse input requiring complete success.

Implementation

ParseResult parseStrict(String input, { TypeChecker? typeChecker}) {
  final result = parser.expression.end().parse(input);
  if (result is Success<Expression>) {
    // check types

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

      try {
        var context = typeChecker.resolver.makeContext();
        expr.accept(typeChecker, context);

        valid = context.isValid();
        if (!valid) {
          message = "unknown property ${(context as ClassTypeCheckerContext).unknown[0].property}";
        }
      }
      catch(e) {
        valid = false;
        message = e.toString();
      }
    }

    // done

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