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

Side by Side Diff: pkg/compiler/lib/src/kernel/unresolved.dart

Issue 2621433002: dart2js-kernel: handle top-level / static unresolved methods / getters / setters (Closed)
Patch Set: remove print Created 3 years, 11 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
OLDNEW
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.md file. 3 // BSD-style license that can be found in the LICENSE.md file.
4 4
5 import 'package:kernel/ast.dart' as ir; 5 import 'package:kernel/ast.dart' as ir;
6 6
7 import "../elements/resolution_types.dart" 7 import "../elements/resolution_types.dart"
8 show ResolutionDartType, ResolutionInterfaceType; 8 show ResolutionDartType, ResolutionInterfaceType;
9 import "../elements/elements.dart" 9 import "../elements/elements.dart"
10 show 10 show
(...skipping 12 matching lines...) Expand all
23 import "kernel.dart" show Kernel; 23 import "kernel.dart" show Kernel;
24 24
25 abstract class UnresolvedVisitor { 25 abstract class UnresolvedVisitor {
26 Kernel get kernel; 26 Kernel get kernel;
27 27
28 // Implemented in KernelVisitor 28 // Implemented in KernelVisitor
29 AstElement get currentElement; 29 AstElement get currentElement;
30 bool get isVoidContext; 30 bool get isVoidContext;
31 ir.Arguments buildArguments(NodeList arguments); 31 ir.Arguments buildArguments(NodeList arguments);
32 ir.TreeNode visitForValue(Expression node); 32 ir.TreeNode visitForValue(Expression node);
33 void associateCompoundComponents(Accessor accessor, Node node);
33 34
34 // TODO(ahe): Delete this method. 35 // TODO(ahe): Delete this method.
35 ir.InvalidExpression handleUnresolved(Node node); 36 ir.InvalidExpression handleUnresolved(Node node);
36 37
37 /// Similar to [Kernel.functionToIr] but returns null if [function] is a 38 /// Similar to [Kernel.functionToIr] but returns null if [function] is a
38 /// synthetic function created for error recovery. 39 /// synthetic function created for error recovery.
39 ir.Member possiblyErroneousFunctionToIr(FunctionElement function) { 40 ir.Member possiblyErroneousFunctionToIr(FunctionElement function) {
40 return kernel.isSyntheticError(function) 41 return kernel.isSyntheticError(function)
41 ? null 42 ? null
42 : kernel.functionToIr(function); 43 : kernel.functionToIr(function);
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after
117 [ir.Procedure exceptionBuilder]) { 118 [ir.Procedure exceptionBuilder]) {
118 // TODO(asgerf): We should remove this fallback, but in some cases we do 119 // TODO(asgerf): We should remove this fallback, but in some cases we do
119 // not get sufficient information to determine exactly what kind of 120 // not get sufficient information to determine exactly what kind of
120 // setter it is. 121 // setter it is.
121 exceptionBuilder ??= kernel.getGenericNoSuchMethodBuilder(); 122 exceptionBuilder ??= kernel.getGenericNoSuchMethodBuilder();
122 return buildThrowNoSuchMethodError(exceptionBuilder, new ir.NullLiteral(), 123 return buildThrowNoSuchMethodError(exceptionBuilder, new ir.NullLiteral(),
123 name, new ir.Arguments(<ir.Expression>[argument])); 124 name, new ir.Arguments(<ir.Expression>[argument]));
124 } 125 }
125 126
126 ir.Expression buildThrowUnresolvedSuperGetter(String name) { 127 ir.Expression buildThrowUnresolvedSuperGetter(String name) {
128 // TODO(sra): This is incorrect when the superclass defines noSuchMethod.
127 return buildThrowNoSuchMethodError(kernel.getUnresolvedSuperGetterBuilder(), 129 return buildThrowNoSuchMethodError(kernel.getUnresolvedSuperGetterBuilder(),
128 new ir.ThisExpression(), name, new ir.Arguments.empty()); 130 new ir.ThisExpression(), name, new ir.Arguments.empty());
129 } 131 }
130 132
131 ir.Expression buildThrowUnresolvedSuperSetter( 133 ir.Expression buildThrowUnresolvedSuperSetter(
132 String name, ir.Expression argument) { 134 String name, ir.Expression argument) {
133 return buildThrowNoSuchMethodError( 135 return buildThrowNoSuchMethodError(
134 kernel.getUnresolvedSuperSetterBuilder(), 136 kernel.getUnresolvedSuperSetterBuilder(),
135 new ir.ThisExpression(), 137 new ir.ThisExpression(),
136 name, 138 name,
(...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after
262 Node rhs, 264 Node rhs,
263 _) { 265 _) {
264 return buildThrowUnresolvedSetter('${node.selector}', visitForValue(rhs), 266 return buildThrowUnresolvedSetter('${node.selector}', visitForValue(rhs),
265 kernel.getUnresolvedStaticSetterBuilder()); 267 kernel.getUnresolvedStaticSetterBuilder());
266 } 268 }
267 269
268 ir.Expression visitUnresolvedStaticSetterPostfix(Send node, 270 ir.Expression visitUnresolvedStaticSetterPostfix(Send node,
269 MethodElement getter, Element element, IncDecOperator operator, _) { 271 MethodElement getter, Element element, IncDecOperator operator, _) {
270 var accessor = new ClassStaticAccessor( 272 var accessor = new ClassStaticAccessor(
271 this, getter.name, possiblyErroneousFunctionToIr(getter), null); 273 this, getter.name, possiblyErroneousFunctionToIr(getter), null);
272 return accessor.buildPostfixIncrement(new ir.Name(operator.selectorName), 274 var result = accessor.buildPostfixIncrement(
275 new ir.Name(operator.selectorName),
273 voidContext: isVoidContext); 276 voidContext: isVoidContext);
277 associateCompoundComponents(accessor, node);
278 return result;
274 } 279 }
275 280
276 ir.Expression visitUnresolvedStaticSetterPrefix(Send node, 281 ir.Expression visitUnresolvedStaticSetterPrefix(Send node,
277 MethodElement getter, Element element, IncDecOperator operator, _) { 282 MethodElement getter, Element element, IncDecOperator operator, _) {
278 var accessor = new ClassStaticAccessor( 283 var accessor = new ClassStaticAccessor(
279 this, getter.name, possiblyErroneousFunctionToIr(getter), null); 284 this, getter.name, possiblyErroneousFunctionToIr(getter), null);
280 return accessor.buildPrefixIncrement(new ir.Name(operator.selectorName), 285 var result = accessor.buildPrefixIncrement(
286 new ir.Name(operator.selectorName),
281 voidContext: isVoidContext); 287 voidContext: isVoidContext);
288 associateCompoundComponents(accessor, node);
289 return result;
282 } 290 }
283 291
284 ir.Expression visitUnresolvedStaticSetterSetIfNull( 292 ir.Expression visitUnresolvedStaticSetterSetIfNull(
285 Send node, MethodElement getter, Element element, Node rhs, _) { 293 Send node, MethodElement getter, Element element, Node rhs, _) {
286 var accessor = new ClassStaticAccessor( 294 var accessor = new ClassStaticAccessor(
287 this, getter.name, possiblyErroneousFunctionToIr(getter), null); 295 this, getter.name, possiblyErroneousFunctionToIr(getter), null);
288 return accessor.buildNullAwareAssignment(visitForValue(rhs), null, 296 return accessor.buildNullAwareAssignment(visitForValue(rhs), null,
289 voidContext: isVoidContext); 297 voidContext: isVoidContext);
290 } 298 }
291 299
292 ir.Expression visitUnresolvedSuperBinary( 300 ir.Expression visitUnresolvedSuperBinary(
293 Send node, Element element, BinaryOperator operator, Node argument, _) { 301 Send node, Element element, BinaryOperator operator, Node argument, _) {
302 // TODO(sra): This is incorrect when the superclass defines noSuchMethod.
294 return buildThrowNoSuchMethodError( 303 return buildThrowNoSuchMethodError(
295 kernel.getUnresolvedSuperMethodBuilder(), 304 kernel.getUnresolvedSuperMethodBuilder(),
296 new ir.ThisExpression(), 305 new ir.ThisExpression(),
297 operator.selectorName, 306 operator.selectorName,
298 new ir.Arguments(<ir.Expression>[visitForValue(argument)])); 307 new ir.Arguments(<ir.Expression>[visitForValue(argument)]));
299 } 308 }
300 309
301 ir.Expression visitUnresolvedSuperCompound( 310 ir.Expression visitUnresolvedSuperCompound(
302 Send node, Element element, AssignmentOperator operator, Node rhs, _) { 311 Send node, Element element, AssignmentOperator operator, Node rhs, _) {
303 return buildThrowUnresolvedSuperGetter('${node.selector}'); 312 return buildThrowUnresolvedSuperGetter('${node.selector}');
(...skipping 210 matching lines...) Expand 10 before | Expand all | Expand 10 after
514 523
515 ir.Expression visitUnresolvedTopLevelSetterCompound( 524 ir.Expression visitUnresolvedTopLevelSetterCompound(
516 Send node, 525 Send node,
517 MethodElement getter, 526 MethodElement getter,
518 Element element, 527 Element element,
519 AssignmentOperator operator, 528 AssignmentOperator operator,
520 Node rhs, 529 Node rhs,
521 _) { 530 _) {
522 var accessor = new TopLevelStaticAccessor( 531 var accessor = new TopLevelStaticAccessor(
523 this, getter.name, possiblyErroneousFunctionToIr(getter), null); 532 this, getter.name, possiblyErroneousFunctionToIr(getter), null);
524 return accessor.buildCompoundAssignment( 533 var result = accessor.buildCompoundAssignment(
525 new ir.Name(operator.selectorName), visitForValue(rhs), 534 new ir.Name(operator.selectorName), visitForValue(rhs),
526 voidContext: isVoidContext); 535 voidContext: isVoidContext);
536 associateCompoundComponents(accessor, node);
537 return result;
527 } 538 }
528 539
529 ir.Expression visitUnresolvedTopLevelSetterPostfix(Send node, 540 ir.Expression visitUnresolvedTopLevelSetterPostfix(Send node,
530 MethodElement getter, Element element, IncDecOperator operator, _) { 541 MethodElement getter, Element element, IncDecOperator operator, _) {
531 var accessor = new TopLevelStaticAccessor( 542 var accessor = new TopLevelStaticAccessor(
532 this, getter.name, possiblyErroneousFunctionToIr(getter), null); 543 this, getter.name, possiblyErroneousFunctionToIr(getter), null);
533 return accessor.buildPostfixIncrement(new ir.Name(operator.selectorName), 544 var result = accessor.buildPostfixIncrement(
545 new ir.Name(operator.selectorName),
534 voidContext: isVoidContext); 546 voidContext: isVoidContext);
547 associateCompoundComponents(accessor, node);
548 return result;
535 } 549 }
536 550
537 ir.Expression visitUnresolvedTopLevelSetterPrefix(Send node, 551 ir.Expression visitUnresolvedTopLevelSetterPrefix(Send node,
538 MethodElement getter, Element element, IncDecOperator operator, _) { 552 MethodElement getter, Element element, IncDecOperator operator, _) {
539 var accessor = new TopLevelStaticAccessor( 553 var accessor = new TopLevelStaticAccessor(
540 this, getter.name, possiblyErroneousFunctionToIr(getter), null); 554 this, getter.name, possiblyErroneousFunctionToIr(getter), null);
541 return accessor.buildPrefixIncrement(new ir.Name(operator.selectorName), 555 var result = accessor.buildPrefixIncrement(
556 new ir.Name(operator.selectorName),
542 voidContext: isVoidContext); 557 voidContext: isVoidContext);
558 associateCompoundComponents(accessor, node);
559 return result;
543 } 560 }
544 561
545 ir.Expression visitUnresolvedTopLevelSetterSetIfNull( 562 ir.Expression visitUnresolvedTopLevelSetterSetIfNull(
546 Send node, MethodElement getter, Element element, Node rhs, _) { 563 Send node, MethodElement getter, Element element, Node rhs, _) {
547 var accessor = new TopLevelStaticAccessor( 564 var accessor = new TopLevelStaticAccessor(
548 this, getter.name, possiblyErroneousFunctionToIr(getter), null); 565 this, getter.name, possiblyErroneousFunctionToIr(getter), null);
549 return accessor.buildNullAwareAssignment(visitForValue(rhs), null, 566 return accessor.buildNullAwareAssignment(visitForValue(rhs), null,
550 voidContext: isVoidContext); 567 voidContext: isVoidContext);
551 } 568 }
552 569
(...skipping 14 matching lines...) Expand all
567 return buildUnresolvedSuperIndexAccessor(index, element) 584 return buildUnresolvedSuperIndexAccessor(index, element)
568 .buildNullAwareAssignment(visitForValue(rhs), null); 585 .buildNullAwareAssignment(visitForValue(rhs), null);
569 } 586 }
570 587
571 ir.Expression visitUnresolvedSuperSet( 588 ir.Expression visitUnresolvedSuperSet(
572 Send node, Element element, Node rhs, _) { 589 Send node, Element element, Node rhs, _) {
573 return buildThrowUnresolvedSuperSetter( 590 return buildThrowUnresolvedSuperSetter(
574 '${node.selector}', visitForValue(rhs)); 591 '${node.selector}', visitForValue(rhs));
575 } 592 }
576 } 593 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698