Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(66)

Unified Diff: pkg/front_end/lib/src/fasta/analyzer/ast_builder.dart

Issue 2712023003: Support multiple optional parameters. (Closed)
Patch Set: Created 3 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « pkg/analyzer/test/generated/parser_fasta_test.dart ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: pkg/front_end/lib/src/fasta/analyzer/ast_builder.dart
diff --git a/pkg/front_end/lib/src/fasta/analyzer/ast_builder.dart b/pkg/front_end/lib/src/fasta/analyzer/ast_builder.dart
index 9b0802ce14b5697037edd348a24bd57a2a6d6c51..bca4373845db2931039337658f115f97763a8619 100644
--- a/pkg/front_end/lib/src/fasta/analyzer/ast_builder.dart
+++ b/pkg/front_end/lib/src/fasta/analyzer/ast_builder.dart
@@ -487,6 +487,7 @@ class AstBuilder extends ScopeListener {
void endOptionalFormalParameters(
int count, Token beginToken, Token endToken) {
debugEvent("OptionalFormalParameters");
+ push(new _OptionalFormalParameters(popList(count), beginToken, endToken));
}
void handleValuedFormalParameter(Token equals, Token token) {
@@ -545,9 +546,25 @@ class AstBuilder extends ScopeListener {
void endFormalParameters(int count, Token beginToken, Token endToken) {
debugEvent("FormalParameters");
- List<FormalParameter> parameters = popList(count) ?? <FormalParameter>[];
- push(ast.formalParameterList(toAnalyzerToken(beginToken), parameters, null,
- null, toAnalyzerToken(endToken)));
+ List rawParameters = popList(count) ?? const <Object>[];
+ List<FormalParameter> parameters = <FormalParameter>[];
+ Token leftDelimiter;
+ Token rightDelimiter;
+ for (Object raw in rawParameters) {
+ if (raw is _OptionalFormalParameters) {
+ parameters.addAll(raw.parameters);
+ leftDelimiter = raw.leftDelimiter;
+ rightDelimiter = raw.rightDelimiter;
+ } else {
+ parameters.add(raw as FormalParameter);
+ }
+ }
+ push(ast.formalParameterList(
+ toAnalyzerToken(beginToken),
+ parameters,
+ toAnalyzerToken(leftDelimiter),
+ toAnalyzerToken(rightDelimiter),
+ toAnalyzerToken(endToken)));
}
void handleCatchBlock(Token onKeyword, Token catchKeyword) {
@@ -1268,3 +1285,13 @@ class _ParameterDefaultValue {
_ParameterDefaultValue(this.separator, this.value);
}
+
+/// Data structure placed on the stack as a container for optional parameters.
+class _OptionalFormalParameters {
+ final List<FormalParameter> parameters;
+ final Token leftDelimiter;
+ final Token rightDelimiter;
+
+ _OptionalFormalParameters(
+ this.parameters, this.leftDelimiter, this.rightDelimiter);
+}
« no previous file with comments | « pkg/analyzer/test/generated/parser_fasta_test.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698