OLD | NEW |
1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2014, 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 dart2js.new_js_emitter.model; | 5 library dart2js.new_js_emitter.model; |
6 | 6 |
7 import '../js/js.dart' as js show Expression, Statement, Name, Literal, | 7 import '../js/js.dart' as js show Expression, Statement, Name, Literal, |
8 TokenFinalizer; | 8 TokenFinalizer; |
9 import '../constants/values.dart' show ConstantValue; | 9 import '../constants/values.dart' show ConstantValue; |
10 | 10 |
(...skipping 362 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
373 /// The element should only be used during the transition to the new model. | 373 /// The element should only be used during the transition to the new model. |
374 /// Uses indicate missing information in the model. | 374 /// Uses indicate missing information in the model. |
375 final Element element; | 375 final Element element; |
376 final js.Name name; | 376 final js.Name name; |
377 final js.Expression code; | 377 final js.Expression code; |
378 | 378 |
379 Method(this.element, this.name, this.code); | 379 Method(this.element, this.name, this.code); |
380 } | 380 } |
381 | 381 |
382 /// A method that corresponds to a method in the original Dart program. | 382 /// A method that corresponds to a method in the original Dart program. |
383 class DartMethod extends Method { | 383 abstract class DartMethod extends Method { |
384 final bool needsTearOff; | 384 final bool needsTearOff; |
385 final js.Name tearOffName; | 385 final js.Name tearOffName; |
386 final List<ParameterStubMethod> parameterStubs; | 386 final List<ParameterStubMethod> parameterStubs; |
387 final bool canBeApplied; | 387 final bool canBeApplied; |
388 final bool canBeReflected; | 388 final bool canBeReflected; |
389 | 389 |
390 // Is non-null if [needsTearOff] or [canBeReflected]. | 390 // Is non-null if [needsTearOff] or [canBeReflected]. |
391 // | 391 // |
392 // If the type is encoded in the metadata table this field contains an index | 392 // If the type is encoded in the metadata table this field contains an index |
393 // into the table. Otherwise the type contains type variables in which case | 393 // into the table. Otherwise the type contains type variables in which case |
(...skipping 17 matching lines...) Expand all Loading... |
411 this.optionalParameterDefaultValues, this.functionType}) | 411 this.optionalParameterDefaultValues, this.functionType}) |
412 : super(element, name, code) { | 412 : super(element, name, code) { |
413 assert(needsTearOff != null); | 413 assert(needsTearOff != null); |
414 assert(!needsTearOff || tearOffName != null); | 414 assert(!needsTearOff || tearOffName != null); |
415 assert(canBeApplied != null); | 415 assert(canBeApplied != null); |
416 assert(canBeReflected != null); | 416 assert(canBeReflected != null); |
417 assert((!canBeReflected && !canBeApplied) || | 417 assert((!canBeReflected && !canBeApplied) || |
418 (requiredParameterCount != null && | 418 (requiredParameterCount != null && |
419 optionalParameterDefaultValues != null)); | 419 optionalParameterDefaultValues != null)); |
420 } | 420 } |
| 421 |
| 422 bool get isStatic; |
421 } | 423 } |
422 | 424 |
423 class InstanceMethod extends DartMethod { | 425 class InstanceMethod extends DartMethod { |
424 /// An alternative name for this method. This is used to model calls to | 426 /// An alternative name for this method. This is used to model calls to |
425 /// a method via `super`. If [aliasName] is non-null, the emitter has to | 427 /// a method via `super`. If [aliasName] is non-null, the emitter has to |
426 /// ensure that this method is registered on the prototype under both [name] | 428 /// ensure that this method is registered on the prototype under both [name] |
427 /// and [aliasName]. | 429 /// and [aliasName]. |
428 final js.Name aliasName; | 430 final js.Name aliasName; |
429 final bool isClosure; | 431 final bool isClosure; |
430 | 432 |
(...skipping 13 matching lines...) Expand all Loading... |
444 : super(element, name, code, parameterStubs, callName, | 446 : super(element, name, code, parameterStubs, callName, |
445 needsTearOff: needsTearOff, | 447 needsTearOff: needsTearOff, |
446 tearOffName: tearOffName, | 448 tearOffName: tearOffName, |
447 canBeApplied: canBeApplied, | 449 canBeApplied: canBeApplied, |
448 canBeReflected: canBeReflected, | 450 canBeReflected: canBeReflected, |
449 requiredParameterCount: requiredParameterCount, | 451 requiredParameterCount: requiredParameterCount, |
450 optionalParameterDefaultValues: optionalParameterDefaultValues, | 452 optionalParameterDefaultValues: optionalParameterDefaultValues, |
451 functionType: functionType) { | 453 functionType: functionType) { |
452 assert(isClosure != null); | 454 assert(isClosure != null); |
453 } | 455 } |
| 456 |
| 457 bool get isStatic => false; |
454 } | 458 } |
455 | 459 |
456 /// A method that is generated by the backend and has not direct correspondence | 460 /// A method that is generated by the backend and has not direct correspondence |
457 /// to a method in the original Dart program. Examples are getter and setter | 461 /// to a method in the original Dart program. Examples are getter and setter |
458 /// stubs and stubs to dispatch calls to methods with optional parameters. | 462 /// stubs and stubs to dispatch calls to methods with optional parameters. |
459 class StubMethod extends Method { | 463 class StubMethod extends Method { |
460 StubMethod(js.Name name, js.Expression code, | 464 StubMethod(js.Name name, js.Expression code, |
461 {Element element}) | 465 {Element element}) |
462 : super(element, name, code); | 466 : super(element, name, code); |
463 } | 467 } |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
499 /* List | Map */ optionalParameterDefaultValues, | 503 /* List | Map */ optionalParameterDefaultValues, |
500 js.Expression functionType}) | 504 js.Expression functionType}) |
501 : super(element, name, code, parameterStubs, callName, | 505 : super(element, name, code, parameterStubs, callName, |
502 needsTearOff: needsTearOff, | 506 needsTearOff: needsTearOff, |
503 tearOffName : tearOffName, | 507 tearOffName : tearOffName, |
504 canBeApplied : canBeApplied, | 508 canBeApplied : canBeApplied, |
505 canBeReflected : canBeReflected, | 509 canBeReflected : canBeReflected, |
506 requiredParameterCount: requiredParameterCount, | 510 requiredParameterCount: requiredParameterCount, |
507 optionalParameterDefaultValues: optionalParameterDefaultValues, | 511 optionalParameterDefaultValues: optionalParameterDefaultValues, |
508 functionType: functionType); | 512 functionType: functionType); |
| 513 |
| 514 bool get isStatic => true; |
509 } | 515 } |
510 | 516 |
511 class StaticStubMethod extends StubMethod implements StaticMethod { | 517 class StaticStubMethod extends StubMethod implements StaticMethod { |
512 Holder holder; | 518 Holder holder; |
513 StaticStubMethod(js.Name name, this.holder, js.Expression code) | 519 StaticStubMethod(js.Name name, this.holder, js.Expression code) |
514 : super(name, code); | 520 : super(name, code); |
515 } | 521 } |
OLD | NEW |