| 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, optional; | 10 import '../parser/parser.dart' show FormalParameterType, optional; |
| (...skipping 713 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 724 } else if (context.inDeclaration) { | 724 } else if (context.inDeclaration) { |
| 725 if (context == IdentifierContext.topLevelVariableDeclaration || | 725 if (context == IdentifierContext.topLevelVariableDeclaration || |
| 726 context == IdentifierContext.fieldDeclaration) { | 726 context == IdentifierContext.fieldDeclaration) { |
| 727 constantExpressionRequired = member.isConst; | 727 constantExpressionRequired = member.isConst; |
| 728 } | 728 } |
| 729 } else if (constantExpressionRequired && | 729 } else if (constantExpressionRequired && |
| 730 !context.allowedInConstantExpression) { | 730 !context.allowedInConstantExpression) { |
| 731 addCompileTimeError( | 731 addCompileTimeError( |
| 732 token.charOffset, "Not a constant expression: $context"); | 732 token.charOffset, "Not a constant expression: $context"); |
| 733 } | 733 } |
| 734 push(new Identifier(name)..fileOffset = token.charOffset); | 734 push(new Identifier(name, token.charOffset)); |
| 735 } | 735 } |
| 736 | 736 |
| 737 /// Look up [name] in [scope] using [charOffset] to report any | 737 /// Look up [name] in [scope] using [charOffset] to report any |
| 738 /// problems. [isQualified] should be true if [name] is a qualified access | 738 /// problems. [isQualified] should be true if [name] is a qualified access |
| 739 /// (which implies that it shouldn't be turned into a [ThisPropertyAccessor] | 739 /// (which implies that it shouldn't be turned into a [ThisPropertyAccessor] |
| 740 /// if the name doesn't resolve in the scope). | 740 /// if the name doesn't resolve in the scope). |
| 741 @override | 741 @override |
| 742 scopeLookup(Scope scope, String name, int charOffset, | 742 scopeLookup(Scope scope, String name, int charOffset, |
| 743 {bool isQualified: false}) { | 743 {bool isQualified: false}) { |
| 744 Builder builder = scope.lookup(name, charOffset, uri); | 744 Builder builder = scope.lookup(name, charOffset, uri); |
| (...skipping 712 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1457 push(formals.toFunctionType(returnType)); | 1457 push(formals.toFunctionType(returnType)); |
| 1458 push(name); | 1458 push(name); |
| 1459 functionNestingLevel--; | 1459 functionNestingLevel--; |
| 1460 } | 1460 } |
| 1461 | 1461 |
| 1462 @override | 1462 @override |
| 1463 void handleValuedFormalParameter(Token equals, Token token) { | 1463 void handleValuedFormalParameter(Token equals, Token token) { |
| 1464 debugEvent("ValuedFormalParameter"); | 1464 debugEvent("ValuedFormalParameter"); |
| 1465 Expression initializer = popForValue(); | 1465 Expression initializer = popForValue(); |
| 1466 Identifier name = pop(); | 1466 Identifier name = pop(); |
| 1467 push(new InitializedIdentifier(name.name, initializer)); | 1467 push(new InitializedIdentifier(name.name, initializer, name.fileOffset)); |
| 1468 } | 1468 } |
| 1469 | 1469 |
| 1470 @override | 1470 @override |
| 1471 void handleFormalParameterWithoutValue(Token token) { | 1471 void handleFormalParameterWithoutValue(Token token) { |
| 1472 debugEvent("FormalParameterWithoutValue"); | 1472 debugEvent("FormalParameterWithoutValue"); |
| 1473 } | 1473 } |
| 1474 | 1474 |
| 1475 @override | 1475 @override |
| 1476 void endFormalParameters(int count, Token beginToken, Token endToken) { | 1476 void endFormalParameters(int count, Token beginToken, Token endToken) { |
| 1477 debugEvent("FormalParameters"); | 1477 debugEvent("FormalParameters"); |
| (...skipping 177 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1655 if (type is List) { | 1655 if (type is List) { |
| 1656 var prefix = type[0]; | 1656 var prefix = type[0]; |
| 1657 identifier = type[1]; | 1657 identifier = type[1]; |
| 1658 if (prefix is PrefixBuilder) { | 1658 if (prefix is PrefixBuilder) { |
| 1659 type = scopeLookup(prefix.exports, identifier.name, start.charOffset, | 1659 type = scopeLookup(prefix.exports, identifier.name, start.charOffset, |
| 1660 isQualified: true); | 1660 isQualified: true); |
| 1661 identifier = null; | 1661 identifier = null; |
| 1662 } else if (prefix is ClassBuilder) { | 1662 } else if (prefix is ClassBuilder) { |
| 1663 type = prefix; | 1663 type = prefix; |
| 1664 } else { | 1664 } else { |
| 1665 type = new Identifier(start.lexeme)..fileOffset = start.charOffset; | 1665 type = new Identifier(start.lexeme, start.charOffset); |
| 1666 } | 1666 } |
| 1667 } | 1667 } |
| 1668 String name; | 1668 String name; |
| 1669 if (identifier != null && suffix != null) { | 1669 if (identifier != null && suffix != null) { |
| 1670 name = "${identifier.name}.${suffix.name}"; | 1670 name = "${identifier.name}.${suffix.name}"; |
| 1671 } else if (identifier != null) { | 1671 } else if (identifier != null) { |
| 1672 name = identifier.name; | 1672 name = identifier.name; |
| 1673 } else if (suffix != null) { | 1673 } else if (suffix != null) { |
| 1674 name = suffix.name; | 1674 name = suffix.name; |
| 1675 } else { | 1675 } else { |
| (...skipping 711 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2387 } | 2387 } |
| 2388 | 2388 |
| 2389 @override | 2389 @override |
| 2390 void handleOperator(Token token) { | 2390 void handleOperator(Token token) { |
| 2391 debugEvent("Operator"); | 2391 debugEvent("Operator"); |
| 2392 push(new Operator(token.stringValue)..fileOffset = token.charOffset); | 2392 push(new Operator(token.stringValue)..fileOffset = token.charOffset); |
| 2393 } | 2393 } |
| 2394 | 2394 |
| 2395 @override | 2395 @override |
| 2396 void handleSymbolVoid(Token token) { | 2396 void handleSymbolVoid(Token token) { |
| 2397 logEvent("SymbolVoid"); | 2397 debugEvent("SymbolVoid"); |
| 2398 push(new Identifier(token.stringValue, token.charOffset)); |
| 2398 } | 2399 } |
| 2399 | 2400 |
| 2400 dynamic addCompileTimeError(int charOffset, String message, | 2401 dynamic addCompileTimeError(int charOffset, String message, |
| 2401 {bool silent: false}) { | 2402 {bool silent: false}) { |
| 2402 // TODO(ahe): If constantExpressionRequired is set, set it to false to | 2403 // TODO(ahe): If constantExpressionRequired is set, set it to false to |
| 2403 // avoid a long list of errors. | 2404 // avoid a long list of errors. |
| 2404 return library.addCompileTimeError(charOffset, message, fileUri: uri); | 2405 return library.addCompileTimeError(charOffset, message, fileUri: uri); |
| 2405 } | 2406 } |
| 2406 | 2407 |
| 2407 @override | 2408 @override |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2441 @override | 2442 @override |
| 2442 void debugEvent(String name) { | 2443 void debugEvent(String name) { |
| 2443 // printEvent(name); | 2444 // printEvent(name); |
| 2444 } | 2445 } |
| 2445 } | 2446 } |
| 2446 | 2447 |
| 2447 // TODO(ahe): Shouldn't need to be an expression. | 2448 // TODO(ahe): Shouldn't need to be an expression. |
| 2448 class Identifier extends InvalidExpression { | 2449 class Identifier extends InvalidExpression { |
| 2449 final String name; | 2450 final String name; |
| 2450 | 2451 |
| 2451 Identifier(this.name); | 2452 Identifier(this.name, int charOffset) { |
| 2453 fileOffset = charOffset; |
| 2454 } |
| 2452 | 2455 |
| 2453 Expression get initializer => null; | 2456 Expression get initializer => null; |
| 2454 | 2457 |
| 2455 String toString() => "identifier($name)"; | 2458 String toString() => "identifier($name)"; |
| 2456 } | 2459 } |
| 2457 | 2460 |
| 2458 // TODO(ahe): Shouldn't need to be an expression. | 2461 // TODO(ahe): Shouldn't need to be an expression. |
| 2459 class Operator extends InvalidExpression { | 2462 class Operator extends InvalidExpression { |
| 2460 final String name; | 2463 final String name; |
| 2461 | 2464 |
| 2462 Operator(this.name); | 2465 Operator(this.name); |
| 2463 | 2466 |
| 2464 String toString() => "operator($name)"; | 2467 String toString() => "operator($name)"; |
| 2465 } | 2468 } |
| 2466 | 2469 |
| 2467 class InitializedIdentifier extends Identifier { | 2470 class InitializedIdentifier extends Identifier { |
| 2468 final Expression initializer; | 2471 final Expression initializer; |
| 2469 | 2472 |
| 2470 InitializedIdentifier(String name, this.initializer) : super(name); | 2473 InitializedIdentifier(String name, this.initializer, int charOffset) |
| 2474 : super(name, charOffset); |
| 2471 | 2475 |
| 2472 String toString() => "initialized-identifier($name, $initializer)"; | 2476 String toString() => "initialized-identifier($name, $initializer)"; |
| 2473 } | 2477 } |
| 2474 | 2478 |
| 2475 // TODO(ahe): Shouldn't need to be an expression. | 2479 // TODO(ahe): Shouldn't need to be an expression. |
| 2476 class Label extends InvalidExpression { | 2480 class Label extends InvalidExpression { |
| 2477 String name; | 2481 String name; |
| 2478 | 2482 |
| 2479 Label(this.name); | 2483 Label(this.name); |
| 2480 | 2484 |
| (...skipping 419 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2900 } else if (node is PrefixBuilder) { | 2904 } else if (node is PrefixBuilder) { |
| 2901 return node.name; | 2905 return node.name; |
| 2902 } else if (node is ThisAccessor) { | 2906 } else if (node is ThisAccessor) { |
| 2903 return node.isSuper ? "super" : "this"; | 2907 return node.isSuper ? "super" : "this"; |
| 2904 } else if (node is FastaAccessor) { | 2908 } else if (node is FastaAccessor) { |
| 2905 return node.plainNameForRead; | 2909 return node.plainNameForRead; |
| 2906 } else { | 2910 } else { |
| 2907 return internalError("Unhandled: ${node.runtimeType}"); | 2911 return internalError("Unhandled: ${node.runtimeType}"); |
| 2908 } | 2912 } |
| 2909 } | 2913 } |
| OLD | NEW |