OLD | NEW |
1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2016, 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 fasta.body_builder; | 5 library fasta.body_builder; |
6 | 6 |
7 import '../fasta_codes.dart' | 7 import '../fasta_codes.dart' |
8 show FastaMessage, codeExpectedButGot, codeExpectedFunctionBody; | 8 show FastaMessage, codeExpectedButGot, codeExpectedFunctionBody; |
9 | 9 |
10 import '../parser/parser.dart' show FormalParameterType, MemberKind, optional; | 10 import '../parser/parser.dart' show FormalParameterType, MemberKind, optional; |
(...skipping 1459 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1470 pop(); | 1470 pop(); |
1471 warning("Type variables can only be used in instance methods.", | 1471 warning("Type variables can only be used in instance methods.", |
1472 beginToken.charOffset); | 1472 beginToken.charOffset); |
1473 push(const DynamicType()); | 1473 push(const DynamicType()); |
1474 } | 1474 } |
1475 } | 1475 } |
1476 } | 1476 } |
1477 | 1477 |
1478 @override | 1478 @override |
1479 void handleFunctionType(Token functionToken, Token endToken) { | 1479 void handleFunctionType(Token functionToken, Token endToken) { |
| 1480 debugEvent("FunctionType"); |
1480 FormalParameters formals = pop(); | 1481 FormalParameters formals = pop(); |
1481 ignore(Unhandled.TypeVariables); | 1482 ignore(Unhandled.TypeVariables); |
1482 DartType returnType = pop(); | 1483 DartType returnType = pop(); |
1483 push(formals.toFunctionType(returnType)); | 1484 push(formals.toFunctionType(returnType)); |
1484 } | 1485 } |
1485 | 1486 |
1486 @override | 1487 @override |
1487 void handleVoidKeyword(Token token) { | 1488 void handleVoidKeyword(Token token) { |
1488 debugEvent("VoidKeyword"); | 1489 debugEvent("VoidKeyword"); |
1489 push(const VoidType()); | 1490 push(const VoidType()); |
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1583 type: type, | 1584 type: type, |
1584 initializer: name.initializer, | 1585 initializer: name.initializer, |
1585 isFinal: isFinal, | 1586 isFinal: isFinal, |
1586 isConst: isConst); | 1587 isConst: isConst); |
1587 } else { | 1588 } else { |
1588 addCompileTimeError(offsetForToken(name.token), | 1589 addCompileTimeError(offsetForToken(name.token), |
1589 "'${name.name}' isn't a field in this class."); | 1590 "'${name.name}' isn't a field in this class."); |
1590 } | 1591 } |
1591 } | 1592 } |
1592 variable ??= astFactory.variableDeclaration( | 1593 variable ??= astFactory.variableDeclaration( |
1593 name.name, name.token, functionNestingLevel, | 1594 name?.name, name?.token, functionNestingLevel, |
1594 type: type, | 1595 type: type, |
1595 initializer: name.initializer, | 1596 initializer: name?.initializer, |
1596 isFinal: isFinal, | 1597 isFinal: isFinal, |
1597 isConst: isConst); | 1598 isConst: isConst); |
1598 push(variable); | 1599 push(variable); |
1599 } | 1600 } |
1600 | 1601 |
1601 @override | 1602 @override |
1602 void endOptionalFormalParameters( | 1603 void endOptionalFormalParameters( |
1603 int count, Token beginToken, Token endToken) { | 1604 int count, Token beginToken, Token endToken) { |
1604 debugEvent("OptionalFormalParameters"); | 1605 debugEvent("OptionalFormalParameters"); |
1605 FormalParameterType kind = optional("{", beginToken) | 1606 FormalParameterType kind = optional("{", beginToken) |
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1650 OptionalFormals optional; | 1651 OptionalFormals optional; |
1651 if (count > 0 && peek() is OptionalFormals) { | 1652 if (count > 0 && peek() is OptionalFormals) { |
1652 optional = pop(); | 1653 optional = pop(); |
1653 count--; | 1654 count--; |
1654 } | 1655 } |
1655 FormalParameters formals = new FormalParameters( | 1656 FormalParameters formals = new FormalParameters( |
1656 popList(count) ?? <VariableDeclaration>[], | 1657 popList(count) ?? <VariableDeclaration>[], |
1657 optional, | 1658 optional, |
1658 beginToken.charOffset); | 1659 beginToken.charOffset); |
1659 push(formals); | 1660 push(formals); |
1660 if (inCatchClause || functionNestingLevel != 0) { | 1661 if ((inCatchClause || functionNestingLevel != 0) && |
| 1662 kind != MemberKind.GeneralizedFunctionType) { |
1661 enterLocalScope(formals.computeFormalParameterScope( | 1663 enterLocalScope(formals.computeFormalParameterScope( |
1662 scope, member ?? classBuilder ?? library)); | 1664 scope, member ?? classBuilder ?? library)); |
1663 } | 1665 } |
1664 } | 1666 } |
1665 | 1667 |
1666 @override | 1668 @override |
1667 void beginCatchClause(Token token) { | 1669 void beginCatchClause(Token token) { |
1668 debugEvent("beginCatchClause"); | 1670 debugEvent("beginCatchClause"); |
1669 inCatchClause = true; | 1671 inCatchClause = true; |
1670 } | 1672 } |
(...skipping 1493 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3164 if (starToken == null) { | 3166 if (starToken == null) { |
3165 return AsyncMarker.Async; | 3167 return AsyncMarker.Async; |
3166 } else { | 3168 } else { |
3167 assert(identical(starToken.stringValue, "*")); | 3169 assert(identical(starToken.stringValue, "*")); |
3168 return AsyncMarker.AsyncStar; | 3170 return AsyncMarker.AsyncStar; |
3169 } | 3171 } |
3170 } else { | 3172 } else { |
3171 return internalError("Unknown async modifier: $asyncToken"); | 3173 return internalError("Unknown async modifier: $asyncToken"); |
3172 } | 3174 } |
3173 } | 3175 } |
OLD | NEW |