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

Side by Side Diff: sdk/lib/_internal/compiler/implementation/tree/nodes.dart

Issue 24211003: Let the inferrer know that lazy variables can also be null incase their initializer throws. (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 7 years, 3 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 unified diff | Download patch | Annotate | Revision Log
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 part of tree; 5 part of tree;
6 6
7 abstract class Visitor<R> { 7 abstract class Visitor<R> {
8 const Visitor(); 8 const Visitor();
9 9
10 R visitNode(Node node); 10 R visitNode(Node node);
(...skipping 156 matching lines...) Expand 10 before | Expand all | Expand 10 after
167 LiteralInt asLiteralInt() => null; 167 LiteralInt asLiteralInt() => null;
168 LiteralList asLiteralList() => null; 168 LiteralList asLiteralList() => null;
169 LiteralMap asLiteralMap() => null; 169 LiteralMap asLiteralMap() => null;
170 LiteralMapEntry asLiteralMapEntry() => null; 170 LiteralMapEntry asLiteralMapEntry() => null;
171 LiteralNull asLiteralNull() => null; 171 LiteralNull asLiteralNull() => null;
172 LiteralString asLiteralString() => null; 172 LiteralString asLiteralString() => null;
173 MixinApplication asMixinApplication() => null; 173 MixinApplication asMixinApplication() => null;
174 Modifiers asModifiers() => null; 174 Modifiers asModifiers() => null;
175 NamedArgument asNamedArgument() => null; 175 NamedArgument asNamedArgument() => null;
176 NamedMixinApplication asNamedMixinApplication() => null; 176 NamedMixinApplication asNamedMixinApplication() => null;
177 NewExpression asNewExpression() => null;
177 NodeList asNodeList() => null; 178 NodeList asNodeList() => null;
178 Operator asOperator() => null; 179 Operator asOperator() => null;
179 ParenthesizedExpression asParenthesizedExpression() => null; 180 ParenthesizedExpression asParenthesizedExpression() => null;
180 Part asPart() => null; 181 Part asPart() => null;
181 PartOf asPartOf() => null; 182 PartOf asPartOf() => null;
182 Rethrow asRethrow() => null; 183 Rethrow asRethrow() => null;
183 Return asReturn() => null; 184 Return asReturn() => null;
184 Send asSend() => null; 185 Send asSend() => null;
185 SendSet asSendSet() => null; 186 SendSet asSendSet() => null;
186 Statement asStatement() => null; 187 Statement asStatement() => null;
(...skipping 279 matching lines...) Expand 10 before | Expand all | Expand 10 after
466 467
467 class NewExpression extends Expression { 468 class NewExpression extends Expression {
468 /** The token NEW or CONST */ 469 /** The token NEW or CONST */
469 final Token newToken; 470 final Token newToken;
470 471
471 // Note: we expect that send.receiver is null. 472 // Note: we expect that send.receiver is null.
472 final Send send; 473 final Send send;
473 474
474 NewExpression([this.newToken, this.send]); 475 NewExpression([this.newToken, this.send]);
475 476
477 NewExpression asNewExpression() => this;
478
476 accept(Visitor visitor) => visitor.visitNewExpression(this); 479 accept(Visitor visitor) => visitor.visitNewExpression(this);
477 480
478 visitChildren(Visitor visitor) { 481 visitChildren(Visitor visitor) {
479 if (send != null) send.accept(visitor); 482 if (send != null) send.accept(visitor);
480 } 483 }
481 484
482 bool isConst() { 485 bool isConst() {
483 return identical(newToken.stringValue, 'const') 486 return identical(newToken.stringValue, 'const')
484 || identical(newToken.stringValue, '@'); 487 || identical(newToken.stringValue, '@');
485 } 488 }
(...skipping 1588 matching lines...) Expand 10 before | Expand all | Expand 10 after
2074 * argument). 2077 * argument).
2075 * 2078 *
2076 * TODO(ahe): This method is controversial, the team needs to discuss 2079 * TODO(ahe): This method is controversial, the team needs to discuss
2077 * if top-level methods are acceptable and what naming conventions to 2080 * if top-level methods are acceptable and what naming conventions to
2078 * use. 2081 * use.
2079 */ 2082 */
2080 initializerDo(Node node, f(Node node)) { 2083 initializerDo(Node node, f(Node node)) {
2081 SendSet send = node.asSendSet(); 2084 SendSet send = node.asSendSet();
2082 if (send != null) return f(send.arguments.head); 2085 if (send != null) return f(send.arguments.head);
2083 } 2086 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698