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

Side by Side Diff: pkg/compiler/lib/src/cps_ir/cps_ir_nodes.dart

Issue 1229673006: Generated source mapping through CPS. (Closed) Base URL: https://github.com/dart-lang/sdk.git@master
Patch Set: Updated cf. comments. Created 5 years, 5 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) 2013, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2013, 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 library dart2js.ir_nodes; 4 library dart2js.ir_nodes;
5 5
6 import '../constants/values.dart' as values show ConstantValue; 6 import '../constants/values.dart' as values show ConstantValue;
7 import '../dart_types.dart' show DartType, InterfaceType, TypeVariableType; 7 import '../dart_types.dart' show DartType, InterfaceType, TypeVariableType;
8 import '../elements/elements.dart'; 8 import '../elements/elements.dart';
9 import '../io/source_information.dart' show SourceInformation; 9 import '../io/source_information.dart' show SourceInformation;
10 import '../types/types.dart' show TypeMask; 10 import '../types/types.dart' show TypeMask;
(...skipping 326 matching lines...) Expand 10 before | Expand all | Expand 10 after
337 /// class will still require an explicit argument. 337 /// class will still require an explicit argument.
338 /// 338 ///
339 /// All optional arguments declared by [target] are passed in explicitly, and 339 /// All optional arguments declared by [target] are passed in explicitly, and
340 /// occur at the end of [arguments] list, in normalized order. 340 /// occur at the end of [arguments] list, in normalized order.
341 class InvokeMethodDirectly extends Expression implements Invoke { 341 class InvokeMethodDirectly extends Expression implements Invoke {
342 Reference<Primitive> receiver; 342 Reference<Primitive> receiver;
343 final FunctionElement target; 343 final FunctionElement target;
344 final Selector selector; 344 final Selector selector;
345 final List<Reference<Primitive>> arguments; 345 final List<Reference<Primitive>> arguments;
346 final Reference<Continuation> continuation; 346 final Reference<Continuation> continuation;
347 final SourceInformation sourceInformation;
347 348
348 InvokeMethodDirectly(Primitive receiver, 349 InvokeMethodDirectly(Primitive receiver,
349 this.target, 350 this.target,
350 this.selector, 351 this.selector,
351 List<Primitive> arguments, 352 List<Primitive> arguments,
352 Continuation continuation) 353 Continuation continuation,
354 this.sourceInformation)
353 : this.receiver = new Reference<Primitive>(receiver), 355 : this.receiver = new Reference<Primitive>(receiver),
354 this.arguments = _referenceList(arguments), 356 this.arguments = _referenceList(arguments),
355 this.continuation = new Reference<Continuation>(continuation); 357 this.continuation = new Reference<Continuation>(continuation);
356 358
357 accept(Visitor visitor) => visitor.visitInvokeMethodDirectly(this); 359 accept(Visitor visitor) => visitor.visitInvokeMethodDirectly(this);
358 } 360 }
359 361
360 /// Non-const call to a constructor. 362 /// Non-const call to a constructor.
361 /// 363 ///
362 /// The [target] may be a generative constructor (forwarding or normal) 364 /// The [target] may be a generative constructor (forwarding or normal)
363 /// or a non-redirecting factory. 365 /// or a non-redirecting factory.
364 /// 366 ///
365 /// All optional arguments declared by [target] are passed in explicitly, and 367 /// All optional arguments declared by [target] are passed in explicitly, and
366 /// occur in the [arguments] list, in normalized order. 368 /// occur in the [arguments] list, in normalized order.
367 /// 369 ///
368 /// Last in the [arguments] list, after the mandatory and optional arguments, 370 /// Last in the [arguments] list, after the mandatory and optional arguments,
369 /// the internal representation of each type argument occurs, unless it could 371 /// the internal representation of each type argument occurs, unless it could
370 /// be determined at build-time that the constructed class has no need for its 372 /// be determined at build-time that the constructed class has no need for its
371 /// runtime type information. 373 /// runtime type information.
372 /// 374 ///
373 /// Note that [InvokeConstructor] does it itself allocate an object. 375 /// Note that [InvokeConstructor] does it itself allocate an object.
374 /// The invoked constructor will do that using [CreateInstance]. 376 /// The invoked constructor will do that using [CreateInstance].
375 class InvokeConstructor extends Expression implements Invoke { 377 class InvokeConstructor extends Expression implements Invoke {
376 final DartType type; 378 final DartType type;
377 final ConstructorElement target; 379 final ConstructorElement target;
378 final List<Reference<Primitive>> arguments; 380 final List<Reference<Primitive>> arguments;
379 final Reference<Continuation> continuation; 381 final Reference<Continuation> continuation;
380 final Selector selector; 382 final Selector selector;
383 final SourceInformation sourceInformation;
381 384
382 InvokeConstructor(this.type, 385 InvokeConstructor(this.type,
383 this.target, 386 this.target,
384 this.selector, 387 this.selector,
385 List<Primitive> args, 388 List<Primitive> args,
386 Continuation cont) 389 Continuation cont,
390 this.sourceInformation)
387 : arguments = _referenceList(args), 391 : arguments = _referenceList(args),
388 continuation = new Reference<Continuation>(cont); 392 continuation = new Reference<Continuation>(cont);
389 393
390 accept(Visitor visitor) => visitor.visitInvokeConstructor(this); 394 accept(Visitor visitor) => visitor.visitInvokeConstructor(this);
391 } 395 }
392 396
393 /// An "is" type test. 397 /// An "is" type test.
394 /// 398 ///
395 /// Returns `true` if [value] is an instance of [type]. 399 /// Returns `true` if [value] is an instance of [type].
396 /// 400 ///
(...skipping 159 matching lines...) Expand 10 before | Expand all | Expand 10 after
556 Expression plug(Expression expr) { 560 Expression plug(Expression expr) {
557 assert(body == null); 561 assert(body == null);
558 return body = expr; 562 return body = expr;
559 } 563 }
560 } 564 }
561 565
562 /// Invoke a continuation in tail position. 566 /// Invoke a continuation in tail position.
563 class InvokeContinuation extends Expression { 567 class InvokeContinuation extends Expression {
564 Reference<Continuation> continuation; 568 Reference<Continuation> continuation;
565 List<Reference<Primitive>> arguments; 569 List<Reference<Primitive>> arguments;
570 SourceInformation sourceInformation;
566 571
567 // An invocation of a continuation is recursive if it occurs in the body of 572 // An invocation of a continuation is recursive if it occurs in the body of
568 // the continuation itself. 573 // the continuation itself.
569 bool isRecursive; 574 bool isRecursive;
570 575
571 /// True if this invocation escapes from the body of a [LetHandler] 576 /// True if this invocation escapes from the body of a [LetHandler]
572 /// (i.e. a try block). Notably, such an invocation cannot be inlined. 577 /// (i.e. a try block). Notably, such an invocation cannot be inlined.
573 bool isEscapingTry; 578 bool isEscapingTry;
574 579
575 InvokeContinuation(Continuation cont, List<Primitive> args, 580 InvokeContinuation(Continuation cont, List<Primitive> args,
576 {this.isRecursive: false, 581 {this.isRecursive: false,
577 this.isEscapingTry: false}) 582 this.isEscapingTry: false,
583 this.sourceInformation})
578 : continuation = new Reference<Continuation>(cont), 584 : continuation = new Reference<Continuation>(cont),
579 arguments = _referenceList(args) { 585 arguments = _referenceList(args) {
580 assert(cont.parameters == null || cont.parameters.length == args.length); 586 assert(cont.parameters == null || cont.parameters.length == args.length);
581 if (isRecursive) cont.isRecursive = true; 587 if (isRecursive) cont.isRecursive = true;
582 } 588 }
583 589
584 /// A continuation invocation whose target and arguments will be filled 590 /// A continuation invocation whose target and arguments will be filled
585 /// in later. 591 /// in later.
586 /// 592 ///
587 /// Used as a placeholder for a jump whose target is not yet created 593 /// Used as a placeholder for a jump whose target is not yet created
588 /// (e.g., in the translation of break and continue). 594 /// (e.g., in the translation of break and continue).
589 InvokeContinuation.uninitialized({this.isRecursive: false, 595 InvokeContinuation.uninitialized({this.isRecursive: false,
590 this.isEscapingTry: false}) 596 this.isEscapingTry: false})
591 : continuation = null, 597 : continuation = null,
592 arguments = null; 598 arguments = null,
599 sourceInformation = null;
593 600
594 accept(Visitor visitor) => visitor.visitInvokeContinuation(this); 601 accept(Visitor visitor) => visitor.visitInvokeContinuation(this);
595 } 602 }
596 603
597 /// The base class of things which can be tested and branched on. 604 /// The base class of things which can be tested and branched on.
598 abstract class Condition extends Node { 605 abstract class Condition extends Node {
599 } 606 }
600 607
601 class IsTrue extends Condition { 608 class IsTrue extends Condition {
602 final Reference<Primitive> value; 609 final Reference<Primitive> value;
(...skipping 188 matching lines...) Expand 10 before | Expand all | Expand 10 after
791 /// The order corresponds to the order of fields on the class. 798 /// The order corresponds to the order of fields on the class.
792 final List<Reference<Primitive>> arguments; 799 final List<Reference<Primitive>> arguments;
793 800
794 /// The runtime type information structure which contains the type arguments. 801 /// The runtime type information structure which contains the type arguments.
795 /// 802 ///
796 /// May be `null` to indicate that no type information is needed because the 803 /// May be `null` to indicate that no type information is needed because the
797 /// compiler determined that the type information for instances of this class 804 /// compiler determined that the type information for instances of this class
798 /// is not needed at runtime. 805 /// is not needed at runtime.
799 final List<Reference<Primitive>> typeInformation; 806 final List<Reference<Primitive>> typeInformation;
800 807
808 final SourceInformation sourceInformation;
809
801 CreateInstance(this.classElement, List<Primitive> arguments, 810 CreateInstance(this.classElement, List<Primitive> arguments,
802 List<Primitive> typeInformation) 811 List<Primitive> typeInformation,
812 this.sourceInformation)
803 : this.arguments = _referenceList(arguments), 813 : this.arguments = _referenceList(arguments),
804 this.typeInformation = _referenceList(typeInformation); 814 this.typeInformation = _referenceList(typeInformation);
805 815
806 accept(Visitor visitor) => visitor.visitCreateInstance(this); 816 accept(Visitor visitor) => visitor.visitCreateInstance(this);
807 817
808 bool get isSafeForElimination => true; 818 bool get isSafeForElimination => true;
809 bool get isSafeForReordering => true; 819 bool get isSafeForReordering => true;
810 } 820 }
811 821
812 class Interceptor extends Primitive { 822 class Interceptor extends Primitive {
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
849 this.nativeBehavior, {Continuation continuation, this.dependency}) 859 this.nativeBehavior, {Continuation continuation, this.dependency})
850 : arguments = _referenceList(arguments), 860 : arguments = _referenceList(arguments),
851 continuation = continuation == null ? null 861 continuation = continuation == null ? null
852 : new Reference<Continuation>(continuation); 862 : new Reference<Continuation>(continuation);
853 863
854 accept(Visitor visitor) => visitor.visitForeignCode(this); 864 accept(Visitor visitor) => visitor.visitForeignCode(this);
855 } 865 }
856 866
857 class Constant extends Primitive { 867 class Constant extends Primitive {
858 final values.ConstantValue value; 868 final values.ConstantValue value;
869 final SourceInformation sourceInformation;
859 870
860 Constant(this.value); 871 Constant(this.value, {this.sourceInformation});
861 872
862 accept(Visitor visitor) => visitor.visitConstant(this); 873 accept(Visitor visitor) => visitor.visitConstant(this);
863 874
864 bool get isSafeForElimination => true; 875 bool get isSafeForElimination => true;
865 bool get isSafeForReordering => true; 876 bool get isSafeForReordering => true;
866 } 877 }
867 878
868 class LiteralList extends Primitive { 879 class LiteralList extends Primitive {
869 /// The List type being created; this is not the type argument. 880 /// The List type being created; this is not the type argument.
870 final InterfaceType type; 881 final InterfaceType type;
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after
952 // gives constant-time access to the continuation from the parent. 963 // gives constant-time access to the continuation from the parent.
953 int parent_index; 964 int parent_index;
954 965
955 // A continuation is recursive if it has any recursive invocations. 966 // A continuation is recursive if it has any recursive invocations.
956 bool isRecursive; 967 bool isRecursive;
957 968
958 bool get isReturnContinuation => body == null; 969 bool get isReturnContinuation => body == null;
959 970
960 Continuation(this.parameters, {this.isRecursive: false}); 971 Continuation(this.parameters, {this.isRecursive: false});
961 972
962 Continuation.retrn() 973 Continuation.retrn()
963 : parameters = <Parameter>[new Parameter(null)], 974 : parameters = <Parameter>[new Parameter(null)],
964 isRecursive = false; 975 isRecursive = false;
965 976
966 accept(Visitor visitor) => visitor.visitContinuation(this); 977 accept(Visitor visitor) => visitor.visitContinuation(this);
967 } 978 }
968 979
969 /// Identifies a mutable variable. 980 /// Identifies a mutable variable.
970 class MutableVariable extends Definition { 981 class MutableVariable extends Definition {
971 Entity hint; 982 Entity hint;
972 983
(...skipping 21 matching lines...) Expand all
994 1005
995 accept(Visitor visitor) => visitor.visitFunctionDefinition(this); 1006 accept(Visitor visitor) => visitor.visitFunctionDefinition(this);
996 } 1007 }
997 1008
998 /// Converts the internal representation of a type to a Dart object of type 1009 /// Converts the internal representation of a type to a Dart object of type
999 /// [Type]. 1010 /// [Type].
1000 class ReifyRuntimeType extends Primitive { 1011 class ReifyRuntimeType extends Primitive {
1001 /// Reference to the internal representation of a type (as produced, for 1012 /// Reference to the internal representation of a type (as produced, for
1002 /// example, by [ReadTypeVariable]). 1013 /// example, by [ReadTypeVariable]).
1003 final Reference<Primitive> value; 1014 final Reference<Primitive> value;
1004 ReifyRuntimeType(Primitive value) 1015
1016 final SourceInformation sourceInformation;
1017
1018 ReifyRuntimeType(Primitive value, this.sourceInformation)
1005 : this.value = new Reference<Primitive>(value); 1019 : this.value = new Reference<Primitive>(value);
1006 1020
1007 @override 1021 @override
1008 accept(Visitor visitor) => visitor.visitReifyRuntimeType(this); 1022 accept(Visitor visitor) => visitor.visitReifyRuntimeType(this);
1009 1023
1010 bool get isSafeForElimination => true; 1024 bool get isSafeForElimination => true;
1011 bool get isSafeForReordering => true; 1025 bool get isSafeForReordering => true;
1012 } 1026 }
1013 1027
1014 /// Read the value the type variable [variable] from the target object. 1028 /// Read the value the type variable [variable] from the target object.
1015 /// 1029 ///
1016 /// The resulting value is an internal representation (and not neccessarily a 1030 /// The resulting value is an internal representation (and not neccessarily a
1017 /// Dart object), and must be reified by [ReifyRuntimeType], if it should be 1031 /// Dart object), and must be reified by [ReifyRuntimeType], if it should be
1018 /// used as a Dart value. 1032 /// used as a Dart value.
1019 class ReadTypeVariable extends Primitive { 1033 class ReadTypeVariable extends Primitive {
1020 final TypeVariableType variable; 1034 final TypeVariableType variable;
1021 final Reference<Primitive> target; 1035 final Reference<Primitive> target;
1036 final SourceInformation sourceInformation;
1022 1037
1023 ReadTypeVariable(this.variable, Primitive target) 1038 ReadTypeVariable(this.variable, Primitive target, this.sourceInformation)
1024 : this.target = new Reference<Primitive>(target); 1039 : this.target = new Reference<Primitive>(target);
1025 1040
1026 @override 1041 @override
1027 accept(Visitor visitor) => visitor.visitReadTypeVariable(this); 1042 accept(Visitor visitor) => visitor.visitReadTypeVariable(this);
1028 1043
1029 bool get isSafeForElimination => true; 1044 bool get isSafeForElimination => true;
1030 bool get isSafeForReordering => true; 1045 bool get isSafeForReordering => true;
1031 } 1046 }
1032 1047
1033 /// Representation of a closed type (that is, a type without type variables). 1048 /// Representation of a closed type (that is, a type without type variables).
(...skipping 395 matching lines...) Expand 10 before | Expand all | Expand 10 after
1429 const RemovalVisitor(); 1444 const RemovalVisitor();
1430 1445
1431 processReference(Reference reference) { 1446 processReference(Reference reference) {
1432 reference.unlink(); 1447 reference.unlink();
1433 } 1448 }
1434 1449
1435 static void remove(Node node) { 1450 static void remove(Node node) {
1436 (const RemovalVisitor()).visit(node); 1451 (const RemovalVisitor()).visit(node);
1437 } 1452 }
1438 } 1453 }
OLDNEW
« no previous file with comments | « pkg/compiler/lib/src/cps_ir/cps_ir_builder_task.dart ('k') | pkg/compiler/lib/src/helpers/helpers.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698