Files
sdk/pkg/_fe_analyzer_shared/lib/src/parser/parser.dart
T
Johnni Winther 01dddf659e [_fe_analyzer_shared] Shared literal parsing
This adds shared helpers for parsing bool, int, and double literals to
their corresponding values.

The macro metadata literals are updated support digit separators and
to hold the literal value.

Change-Id: I709018b6c3a3b8ab09188d36c28f3c09636e0ea0
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/391964
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
Reviewed-by: Jens Johansen <jensj@google.com>
Commit-Queue: Johnni Winther <johnniwinther@google.com>
2024-10-28 09:03:45 +00:00

77 lines
2.2 KiB
Dart

// Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
library _fe_analyzer_shared.parser;
import '../scanner/token.dart' show Token;
import 'listener.dart' show Listener;
import 'parser_impl.dart' show Parser;
import 'parser_error.dart' show ParserError;
import '../messages/codes.dart'
show Message, messageNativeClauseShouldBeAnnotation;
export 'assert.dart' show Assert;
export 'block_kind.dart' show BlockKind;
export 'class_member_parser.dart' show ClassMemberParser;
export 'constructor_reference_context.dart' show ConstructorReferenceContext;
export 'formal_parameter_kind.dart' show FormalParameterKind;
export 'identifier_context.dart' show IdentifierContext;
export 'listener.dart' show Listener;
export 'declaration_kind.dart' show DeclarationHeaderKind, DeclarationKind;
export 'directive_context.dart' show DirectiveContext;
export 'member_kind.dart' show MemberKind;
export 'parser_impl.dart' show ConstantPatternContext, Parser;
export 'parser_error.dart' show ParserError;
export 'top_level_parser.dart' show TopLevelParser;
export 'util.dart'
show
boolFromToken,
doubleFromToken,
intFromToken,
lengthForToken,
lengthOfSpan,
optional,
stripSeparators;
class ErrorCollectingListener extends Listener {
final List<ParserError> recoverableErrors = <ParserError>[];
@override
void handleRecoverableError(
Message message, Token startToken, Token endToken) {
/// TODO(danrubel): Ignore this error until we deprecate `native` support.
if (message == messageNativeClauseShouldBeAnnotation) {
return;
}
recoverableErrors
.add(new ParserError.fromTokens(startToken, endToken, message));
}
}
List<ParserError> parse(Token tokens,
{bool useImplicitCreationExpression = true}) {
ErrorCollectingListener listener = new ErrorCollectingListener();
Parser parser = new Parser(listener,
useImplicitCreationExpression: useImplicitCreationExpression);
parser.parseUnit(tokens);
return listener.recoverableErrors;
}