OLD | NEW |
---|---|
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 Loading... | |
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 Loading... | |
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 Loading... | |
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 } |
OLD | NEW |