| 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.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 "../dart_types.dart" show DartType, InterfaceType; | 7 import "../dart_types.dart" show DartType, InterfaceType; |
| 8 import "../elements/elements.dart" | 8 import "../elements/elements.dart" |
| 9 show | 9 show |
| 10 AstElement, | 10 AstElement, |
| (...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 123 name, | 123 name, |
| 124 new ir.Arguments(<ir.Expression>[argument])); | 124 new ir.Arguments(<ir.Expression>[argument])); |
| 125 } | 125 } |
| 126 | 126 |
| 127 ir.Expression buildThrowSingleArgumentError( | 127 ir.Expression buildThrowSingleArgumentError( |
| 128 ir.Procedure exceptionBuilder, String errorMessage) { | 128 ir.Procedure exceptionBuilder, String errorMessage) { |
| 129 return new ir.Throw(new ir.StaticInvocation(exceptionBuilder, | 129 return new ir.Throw(new ir.StaticInvocation(exceptionBuilder, |
| 130 new ir.Arguments(<ir.Expression>[new ir.StringLiteral(errorMessage)]))); | 130 new ir.Arguments(<ir.Expression>[new ir.StringLiteral(errorMessage)]))); |
| 131 } | 131 } |
| 132 | 132 |
| 133 SuperIndexAccessor buildUnresolvedSuperIndexAccessor( |
| 134 Node index, Element element) { |
| 135 ir.Member member = possiblyErroneousFunctionToIr(element); |
| 136 return new SuperIndexAccessor(this, visitForValue(index), member, member); |
| 137 } |
| 138 |
| 139 SuperPropertyAccessor buildUnresolvedSuperPropertyAccessor( |
| 140 String name, Element getter) { |
| 141 return new SuperPropertyAccessor(this, kernel.irName(name, currentElement), |
| 142 getter == null ? null : possiblyErroneousFunctionToIr(getter), null); |
| 143 } |
| 144 |
| 133 ir.Expression visitUnresolvedClassConstructorInvoke( | 145 ir.Expression visitUnresolvedClassConstructorInvoke( |
| 134 NewExpression node, | 146 NewExpression node, |
| 135 ErroneousElement element, | 147 ErroneousElement element, |
| 136 DartType type, | 148 DartType type, |
| 137 NodeList arguments, | 149 NodeList arguments, |
| 138 Selector selector, | 150 Selector selector, |
| 139 _) { | 151 _) { |
| 140 // TODO(asgerf): The VM includes source information as part of the error | 152 // TODO(asgerf): The VM includes source information as part of the error |
| 141 // message. We could do the same when we add source maps. | 153 // message. We could do the same when we add source maps. |
| 142 return buildThrowSingleArgumentError( | 154 return buildThrowSingleArgumentError( |
| (...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 273 new ir.Arguments(<ir.Expression>[visitForValue(argument)])); | 285 new ir.Arguments(<ir.Expression>[visitForValue(argument)])); |
| 274 } | 286 } |
| 275 | 287 |
| 276 ir.Expression visitUnresolvedSuperCompound( | 288 ir.Expression visitUnresolvedSuperCompound( |
| 277 Send node, Element element, AssignmentOperator operator, Node rhs, _) { | 289 Send node, Element element, AssignmentOperator operator, Node rhs, _) { |
| 278 return buildThrowUnresolvedSuperGetter('${node.selector}'); | 290 return buildThrowUnresolvedSuperGetter('${node.selector}'); |
| 279 } | 291 } |
| 280 | 292 |
| 281 ir.Expression visitUnresolvedSuperCompoundIndexSet(Send node, Element element, | 293 ir.Expression visitUnresolvedSuperCompoundIndexSet(Send node, Element element, |
| 282 Node index, AssignmentOperator operator, Node rhs, _) { | 294 Node index, AssignmentOperator operator, Node rhs, _) { |
| 283 var accessor = new SuperIndexAccessor(this, visitForValue(index), | 295 return buildUnresolvedSuperIndexAccessor(index, element) |
| 284 possiblyErroneousFunctionToIr(element), null); | 296 .buildCompoundAssignment( |
| 285 return accessor.buildCompoundAssignment( | 297 new ir.Name(operator.selectorName), visitForValue(rhs)); |
| 286 new ir.Name(operator.selectorName), visitForValue(rhs)); | |
| 287 } | 298 } |
| 288 | 299 |
| 289 ir.Expression visitUnresolvedSuperGet(Send node, Element element, _) { | 300 ir.Expression visitUnresolvedSuperGet(Send node, Element element, _) { |
| 290 return buildThrowUnresolvedSuperGetter('${node.selector}'); | 301 return buildThrowUnresolvedSuperGetter('${node.selector}'); |
| 291 } | 302 } |
| 292 | 303 |
| 293 ir.Expression visitUnresolvedSuperGetterCompound(Send node, Element element, | 304 ir.Expression visitUnresolvedSuperGetterCompound(Send node, Element element, |
| 294 MethodElement setter, AssignmentOperator operator, Node rhs, _) { | 305 MethodElement setter, AssignmentOperator operator, Node rhs, _) { |
| 295 return buildThrowUnresolvedSuperGetter('${node.selector}'); | 306 return buildThrowUnresolvedSuperGetter('${node.selector}'); |
| 296 } | 307 } |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 336 return buildThrowUnresolvedSuperGetter('${node.selector}'); | 347 return buildThrowUnresolvedSuperGetter('${node.selector}'); |
| 337 } | 348 } |
| 338 | 349 |
| 339 ir.Expression visitUnresolvedSuperGetterSetIfNull( | 350 ir.Expression visitUnresolvedSuperGetterSetIfNull( |
| 340 Send node, Element element, MethodElement setter, Node rhs, _) { | 351 Send node, Element element, MethodElement setter, Node rhs, _) { |
| 341 return buildThrowUnresolvedSuperGetter('${node.selector}'); | 352 return buildThrowUnresolvedSuperGetter('${node.selector}'); |
| 342 } | 353 } |
| 343 | 354 |
| 344 ir.Expression visitUnresolvedSuperIndex( | 355 ir.Expression visitUnresolvedSuperIndex( |
| 345 Send node, Element element, Node index, _) { | 356 Send node, Element element, Node index, _) { |
| 346 return new SuperIndexAccessor(this, visitForValue(index), null, null) | 357 return buildUnresolvedSuperIndexAccessor(index, element).buildSimpleRead(); |
| 347 .buildSimpleRead(); | |
| 348 } | 358 } |
| 349 | 359 |
| 350 ir.Expression visitUnresolvedSuperIndexPostfix( | 360 ir.Expression visitUnresolvedSuperIndexPostfix( |
| 351 Send node, Element element, Node index, IncDecOperator operator, _) { | 361 Send node, Element element, Node index, IncDecOperator operator, _) { |
| 352 return new SuperIndexAccessor(this, visitForValue(index), null, null) | 362 return buildUnresolvedSuperIndexAccessor(index, element).buildSimpleRead(); |
| 353 .buildSimpleRead(); | |
| 354 } | 363 } |
| 355 | 364 |
| 356 ir.Expression visitUnresolvedSuperIndexPrefix( | 365 ir.Expression visitUnresolvedSuperIndexPrefix( |
| 357 Send node, Element element, Node index, IncDecOperator operator, _) { | 366 Send node, Element element, Node index, IncDecOperator operator, _) { |
| 358 return new SuperIndexAccessor(this, visitForValue(index), null, null) | 367 return buildUnresolvedSuperIndexAccessor(index, element).buildSimpleRead(); |
| 359 .buildSimpleRead(); | |
| 360 } | 368 } |
| 361 | 369 |
| 362 ir.Expression visitUnresolvedSuperIndexSet( | 370 ir.Expression visitUnresolvedSuperIndexSet( |
| 363 Send node, Element element, Node index, Node rhs, _) { | 371 Send node, Element element, Node index, Node rhs, _) { |
| 364 return new SuperIndexAccessor(this, visitForValue(index), null, null) | 372 return buildUnresolvedSuperIndexAccessor(index, element) |
| 365 .buildAssignment(visitForValue(rhs)); | 373 .buildAssignment(visitForValue(rhs)); |
| 366 } | 374 } |
| 367 | 375 |
| 368 ir.Expression visitUnresolvedSuperInvoke( | 376 ir.Expression visitUnresolvedSuperInvoke( |
| 369 Send node, Element element, NodeList arguments, Selector selector, _) { | 377 Send node, Element element, NodeList arguments, Selector selector, _) { |
| 370 // TODO(asgerf): Should really invoke 'super.noSuchMethod'. | 378 // TODO(asgerf): Should really invoke 'super.noSuchMethod'. |
| 371 return buildThrowNoSuchMethodError(kernel.getUnresolvedSuperMethodBuilder(), | 379 return buildThrowNoSuchMethodError(kernel.getUnresolvedSuperMethodBuilder(), |
| 372 new ir.ThisExpression(), '${node.selector}', buildArguments(arguments)); | 380 new ir.ThisExpression(), '${node.selector}', buildArguments(arguments)); |
| 373 } | 381 } |
| 374 | 382 |
| (...skipping 12 matching lines...) Expand all Loading... |
| 387 return buildThrowUnresolvedSuperGetter('${node.selector}'); | 395 return buildThrowUnresolvedSuperGetter('${node.selector}'); |
| 388 } | 396 } |
| 389 | 397 |
| 390 ir.Expression visitUnresolvedSuperSetterCompound( | 398 ir.Expression visitUnresolvedSuperSetterCompound( |
| 391 Send node, | 399 Send node, |
| 392 MethodElement getter, | 400 MethodElement getter, |
| 393 Element element, | 401 Element element, |
| 394 AssignmentOperator operator, | 402 AssignmentOperator operator, |
| 395 Node rhs, | 403 Node rhs, |
| 396 _) { | 404 _) { |
| 397 var accessor = new SuperPropertyAccessor( | 405 return buildUnresolvedSuperPropertyAccessor('${node.selector}', getter) |
| 398 this, '${node.selector}', possiblyErroneousFunctionToIr(getter), null); | 406 .buildCompoundAssignment( |
| 399 return accessor.buildCompoundAssignment( | 407 new ir.Name(operator.selectorName), visitForValue(rhs)); |
| 400 new ir.Name(operator.selectorName), visitForValue(rhs)); | |
| 401 } | 408 } |
| 402 | 409 |
| 403 ir.Expression visitUnresolvedSuperSetterCompoundIndexSet( | 410 ir.Expression visitUnresolvedSuperSetterCompoundIndexSet( |
| 404 Send node, | 411 Send node, |
| 405 MethodElement getter, | 412 MethodElement getter, |
| 406 Element element, | 413 Element element, |
| 407 Node index, | 414 Node index, |
| 408 AssignmentOperator operator, | 415 AssignmentOperator operator, |
| 409 Node rhs, | 416 Node rhs, |
| 410 _) { | 417 _) { |
| 411 var accessor = new SuperIndexAccessor(this, visitForValue(index), | 418 return buildUnresolvedSuperIndexAccessor(index, element) |
| 412 possiblyErroneousFunctionToIr(getter), null); | 419 .buildCompoundAssignment( |
| 413 return accessor.buildCompoundAssignment( | 420 new ir.Name(operator.selectorName), visitForValue(rhs)); |
| 414 new ir.Name(operator.selectorName), visitForValue(rhs)); | |
| 415 } | 421 } |
| 416 | 422 |
| 417 ir.Expression visitUnresolvedSuperSetterIndexPostfix( | 423 ir.Expression visitUnresolvedSuperSetterIndexPostfix( |
| 418 Send node, | 424 Send node, |
| 419 MethodElement indexFunction, | 425 MethodElement indexFunction, |
| 420 Element element, | 426 Element element, |
| 421 Node index, | 427 Node index, |
| 422 IncDecOperator operator, | 428 IncDecOperator operator, |
| 423 _) { | 429 _) { |
| 424 var accessor = new SuperIndexAccessor(this, visitForValue(index), | 430 return buildUnresolvedSuperIndexAccessor(index, element) |
| 425 possiblyErroneousFunctionToIr(indexFunction), null); | 431 .buildPostfixIncrement(new ir.Name(operator.selectorName)); |
| 426 return accessor.buildPostfixIncrement(new ir.Name(operator.selectorName)); | |
| 427 } | 432 } |
| 428 | 433 |
| 429 ir.Expression visitUnresolvedSuperSetterIndexPrefix( | 434 ir.Expression visitUnresolvedSuperSetterIndexPrefix( |
| 430 Send node, | 435 Send node, |
| 431 MethodElement indexFunction, | 436 MethodElement indexFunction, |
| 432 Element element, | 437 Element element, |
| 433 Node index, | 438 Node index, |
| 434 IncDecOperator operator, | 439 IncDecOperator operator, |
| 435 _) { | 440 _) { |
| 436 var accessor = new SuperIndexAccessor(this, visitForValue(index), | 441 return buildUnresolvedSuperIndexAccessor(index, element) |
| 437 possiblyErroneousFunctionToIr(indexFunction), null); | 442 .buildPrefixIncrement(new ir.Name(operator.selectorName)); |
| 438 return accessor.buildPrefixIncrement(new ir.Name(operator.selectorName)); | |
| 439 } | 443 } |
| 440 | 444 |
| 441 ir.Expression visitUnresolvedSuperSetterPostfix(Send node, | 445 ir.Expression visitUnresolvedSuperSetterPostfix(Send node, |
| 442 MethodElement getter, Element element, IncDecOperator operator, _) { | 446 MethodElement getter, Element element, IncDecOperator operator, _) { |
| 443 var accessor = new SuperPropertyAccessor( | 447 return buildUnresolvedSuperPropertyAccessor('${node.selector}', getter) |
| 444 this, '${node.selector}', possiblyErroneousFunctionToIr(getter), null); | 448 .buildPostfixIncrement(new ir.Name(operator.selectorName)); |
| 445 return accessor.buildPostfixIncrement(new ir.Name(operator.selectorName)); | |
| 446 } | 449 } |
| 447 | 450 |
| 448 ir.Expression visitUnresolvedSuperSetterPrefix(Send node, | 451 ir.Expression visitUnresolvedSuperSetterPrefix(Send node, |
| 449 MethodElement getter, Element element, IncDecOperator operator, _) { | 452 MethodElement getter, Element element, IncDecOperator operator, _) { |
| 450 var accessor = new SuperPropertyAccessor( | 453 return buildUnresolvedSuperPropertyAccessor('${node.selector}', getter) |
| 451 this, '${node.selector}', possiblyErroneousFunctionToIr(getter), null); | 454 .buildPrefixIncrement(new ir.Name(operator.selectorName)); |
| 452 return accessor.buildPrefixIncrement(new ir.Name(operator.selectorName)); | |
| 453 } | 455 } |
| 454 | 456 |
| 455 ir.Expression visitUnresolvedSuperSetterSetIfNull( | 457 ir.Expression visitUnresolvedSuperSetterSetIfNull( |
| 456 Send node, MethodElement getter, Element element, Node rhs, _) { | 458 Send node, MethodElement getter, Element element, Node rhs, _) { |
| 457 var accessor = new SuperPropertyAccessor( | 459 return buildUnresolvedSuperPropertyAccessor('${node.selector}', getter) |
| 458 this, '${node.selector}', possiblyErroneousFunctionToIr(getter), null); | 460 .buildNullAwareAssignment(visitForValue(rhs)); |
| 459 return accessor.buildNullAwareAssignment(visitForValue(rhs)); | |
| 460 } | 461 } |
| 461 | 462 |
| 462 ir.Expression visitUnresolvedSuperUnary( | 463 ir.Expression visitUnresolvedSuperUnary( |
| 463 Send node, UnaryOperator operator, Element element, _) { | 464 Send node, UnaryOperator operator, Element element, _) { |
| 464 // TODO(asgerf): Should really call 'super.noSuchMethod'. | 465 // TODO(asgerf): Should really call 'super.noSuchMethod'. |
| 465 return buildThrowNoSuchMethodError( | 466 return buildThrowNoSuchMethodError( |
| 466 kernel.getUnresolvedSuperMethodBuilder(), | 467 kernel.getUnresolvedSuperMethodBuilder(), |
| 467 new ir.ThisExpression(), | 468 new ir.ThisExpression(), |
| 468 operator.selectorName, | 469 operator.selectorName, |
| 469 new ir.Arguments.empty()); | 470 new ir.Arguments.empty()); |
| (...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 531 ir.Expression visitUnresolvedTopLevelSetterSetIfNull( | 532 ir.Expression visitUnresolvedTopLevelSetterSetIfNull( |
| 532 Send node, MethodElement getter, Element element, Node rhs, _) { | 533 Send node, MethodElement getter, Element element, Node rhs, _) { |
| 533 var accessor = new TopLevelStaticAccessor( | 534 var accessor = new TopLevelStaticAccessor( |
| 534 this, getter.name, possiblyErroneousFunctionToIr(getter), null); | 535 this, getter.name, possiblyErroneousFunctionToIr(getter), null); |
| 535 return accessor.buildNullAwareAssignment(visitForValue(rhs), | 536 return accessor.buildNullAwareAssignment(visitForValue(rhs), |
| 536 voidContext: isVoidContext); | 537 voidContext: isVoidContext); |
| 537 } | 538 } |
| 538 | 539 |
| 539 ir.Expression visitUnresolvedSuperGetterIndexSetIfNull(Send node, | 540 ir.Expression visitUnresolvedSuperGetterIndexSetIfNull(Send node, |
| 540 Element element, MethodElement setter, Node index, Node rhs, _) { | 541 Element element, MethodElement setter, Node index, Node rhs, _) { |
| 541 var accessor = new SuperIndexAccessor(this, visitForValue(index), null, | 542 return buildUnresolvedSuperIndexAccessor(index, element) |
| 542 possiblyErroneousFunctionToIr(setter)); | 543 .buildNullAwareAssignment(visitForValue(rhs)); |
| 543 return accessor.buildNullAwareAssignment(visitForValue(rhs)); | |
| 544 } | 544 } |
| 545 | 545 |
| 546 ir.Expression visitUnresolvedSuperSetterIndexSetIfNull(Send node, | 546 ir.Expression visitUnresolvedSuperSetterIndexSetIfNull(Send node, |
| 547 MethodElement getter, Element element, Node index, Node rhs, _) { | 547 MethodElement getter, Element element, Node index, Node rhs, _) { |
| 548 var accessor = new SuperIndexAccessor(this, visitForValue(index), | 548 return buildUnresolvedSuperIndexAccessor(index, element) |
| 549 possiblyErroneousFunctionToIr(getter), null); | 549 .buildNullAwareAssignment(visitForValue(rhs)); |
| 550 return accessor.buildNullAwareAssignment(visitForValue(rhs)); | |
| 551 } | 550 } |
| 552 | 551 |
| 553 ir.Expression visitUnresolvedSuperIndexSetIfNull( | 552 ir.Expression visitUnresolvedSuperIndexSetIfNull( |
| 554 Send node, Element element, Node index, Node rhs, _) { | 553 Send node, Element element, Node index, Node rhs, _) { |
| 555 var accessor = | 554 return buildUnresolvedSuperIndexAccessor(index, element) |
| 556 new SuperIndexAccessor(this, visitForValue(index), null, null); | 555 .buildNullAwareAssignment(visitForValue(rhs)); |
| 557 return accessor.buildNullAwareAssignment(visitForValue(rhs)); | |
| 558 } | 556 } |
| 559 | 557 |
| 560 ir.Expression visitUnresolvedSuperSet( | 558 ir.Expression visitUnresolvedSuperSet( |
| 561 Send node, Element element, Node rhs, _) { | 559 Send node, Element element, Node rhs, _) { |
| 562 return buildThrowUnresolvedSuperSetter( | 560 return buildThrowUnresolvedSuperSetter( |
| 563 '${node.selector}', visitForValue(rhs)); | 561 '${node.selector}', visitForValue(rhs)); |
| 564 } | 562 } |
| 565 } | 563 } |
| OLD | NEW |