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

Side by Side Diff: pkg/compiler/lib/src/parser/parser.dart

Issue 2567133002: Add support for the new function-type syntax. (Closed)
Patch Set: Fix comments. Created 4 years 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 unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 library dart2js.parser; 5 library dart2js.parser;
6 6
7 import '../common.dart'; 7 import '../common.dart';
8 import '../tokens/keyword.dart' show Keyword; 8 import '../tokens/keyword.dart' show Keyword;
9 import '../tokens/precedence.dart' show PrecedenceInfo; 9 import '../tokens/precedence.dart' show PrecedenceInfo;
10 import '../tokens/precedence_constants.dart' 10 import '../tokens/precedence_constants.dart'
(...skipping 344 matching lines...) Expand 10 before | Expand all | Expand 10 after
355 period = token; 355 period = token;
356 token = parseIdentifier(token.next); 356 token = parseIdentifier(token.next);
357 } 357 }
358 token = parseArgumentsOpt(token); 358 token = parseArgumentsOpt(token);
359 listener.endMetadata(atToken, period, token); 359 listener.endMetadata(atToken, period, token);
360 return token; 360 return token;
361 } 361 }
362 362
363 Token parseTypedef(Token token) { 363 Token parseTypedef(Token token) {
364 Token typedefKeyword = token; 364 Token typedefKeyword = token;
365 listener.beginFunctionTypeAlias(token); 365 if (optional('=', peekAfterType(token.next))) {
366 token = parseReturnTypeOpt(token.next); 366 listener.beginNewFunctionTypeAlias(token);
367 token = parseIdentifier(token); 367 token = parseIdentifier(token.next);
368 token = parseTypeVariablesOpt(token); 368 token = parseTypeVariablesOpt(token);
369 token = parseFormalParameters(token); 369 token = expect('=', token);
370 listener.endFunctionTypeAlias(typedefKeyword, token); 370 token = parseFunctionType(token);
371 listener.endNewFunctionTypeAlias(typedefKeyword, token);
372 } else {
373 listener.beginFunctionTypeAlias(token);
374 token = parseReturnTypeOpt(token.next);
375 token = parseIdentifier(token);
376 token = parseTypeVariablesOpt(token);
377 token = parseFormalParameters(token);
378 listener.endFunctionTypeAlias(typedefKeyword, token);
Siggi Cherem (dart-lang) 2016/12/12 23:20:40 a suggestion to make this match closer to what the
floitsch 2016/12/29 19:57:46 Done.
379 }
371 return expect(';', token); 380 return expect(';', token);
372 } 381 }
373 382
374 Token parseMixinApplication(Token token) { 383 Token parseMixinApplication(Token token) {
375 listener.beginMixinApplication(token); 384 listener.beginMixinApplication(token);
376 token = parseType(token); 385 token = parseType(token);
377 token = expect('with', token); 386 token = expect('with', token);
378 token = parseTypeList(token); 387 token = parseTypeList(token);
379 listener.endMixinApplication(); 388 listener.endMixinApplication();
380 return token; 389 return token;
(...skipping 425 matching lines...) Expand 10 before | Expand all | Expand 10 after
806 token = parseIdentifier(token); 815 token = parseIdentifier(token);
807 token = parseQualifiedRestOpt(token); 816 token = parseQualifiedRestOpt(token);
808 } else { 817 } else {
809 token = listener.expectedType(token); 818 token = listener.expectedType(token);
810 } 819 }
811 token = parseTypeArgumentsOpt(token); 820 token = parseTypeArgumentsOpt(token);
812 listener.endType(begin, token); 821 listener.endType(begin, token);
813 return token; 822 return token;
814 } 823 }
815 824
825 Token parseFunctionType(Token token) {
826 Token begin = token;
827 listener.beginFunctionType(token);
828 token = parseReturnTypeOpt(token);
829 // TODO(floitsch): don't use string comparison, but the keyword-state table
830 // is currently not set up to deal with upper-case characters.
Siggi Cherem (dart-lang) 2016/12/12 23:20:40 can this count as a reason to switch to `fun` or `
floitsch 2016/12/29 19:57:46 nice try ;)
831 if (token.value != "Function") {
832 return listener.expected("Function", token);
833 }
834 token = token.next;
835 token = parseTypeVariablesOpt(token);
836 token = parseFormalParameters(token);
837 listener.endFunctionType(begin, token);
838 return token;
839 }
840
816 Token parseTypeArgumentsOpt(Token token) { 841 Token parseTypeArgumentsOpt(Token token) {
817 return parseStuff( 842 return parseStuff(
818 token, 843 token,
819 (t) => listener.beginTypeArguments(t), 844 (t) => listener.beginTypeArguments(t),
820 (t) => parseType(t), 845 (t) => parseType(t),
821 (c, bt, et) => listener.endTypeArguments(c, bt, et), 846 (c, bt, et) => listener.endTypeArguments(c, bt, et),
822 (t) => listener.handleNoTypeArguments(t)); 847 (t) => listener.handleNoTypeArguments(t));
823 } 848 }
824 849
825 Token parseTypeVariablesOpt(Token token) { 850 Token parseTypeVariablesOpt(Token token) {
(...skipping 2143 matching lines...) Expand 10 before | Expand all | Expand 10 after
2969 } 2994 }
2970 listener.handleContinueStatement(hasTarget, continueKeyword, token); 2995 listener.handleContinueStatement(hasTarget, continueKeyword, token);
2971 return expectSemicolon(token); 2996 return expectSemicolon(token);
2972 } 2997 }
2973 2998
2974 Token parseEmptyStatement(Token token) { 2999 Token parseEmptyStatement(Token token) {
2975 listener.handleEmptyStatement(token); 3000 listener.handleEmptyStatement(token);
2976 return expectSemicolon(token); 3001 return expectSemicolon(token);
2977 } 3002 }
2978 } 3003 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698