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 tree_ir_nodes; | 5 library tree_ir_nodes; |
6 | 6 |
7 import '../constants/expressions.dart'; | 7 import '../constants/expressions.dart'; |
8 import '../constants/values.dart' as values; | 8 import '../constants/values.dart' as values; |
9 import '../dart_types.dart' show DartType, InterfaceType, TypeVariableType; | 9 import '../dart_types.dart' show DartType, InterfaceType, TypeVariableType; |
10 import '../elements/elements.dart'; | 10 import '../elements/elements.dart'; |
(...skipping 750 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
761 | 761 |
762 accept(ExpressionVisitor visitor) { | 762 accept(ExpressionVisitor visitor) { |
763 return visitor.visitCreateInvocationMirror(this); | 763 return visitor.visitCreateInvocationMirror(this); |
764 } | 764 } |
765 | 765 |
766 accept1(ExpressionVisitor1 visitor, arg) { | 766 accept1(ExpressionVisitor1 visitor, arg) { |
767 return visitor.visitCreateInvocationMirror(this, arg); | 767 return visitor.visitCreateInvocationMirror(this, arg); |
768 } | 768 } |
769 } | 769 } |
770 | 770 |
| 771 class Interceptor extends Expression { |
| 772 Expression input; |
| 773 Set<ClassElement> interceptedClasses; |
| 774 |
| 775 Interceptor(this.input, this.interceptedClasses); |
| 776 |
| 777 accept(ExpressionVisitor visitor) { |
| 778 return visitor.visitInterceptor(this); |
| 779 } |
| 780 |
| 781 accept1(ExpressionVisitor1 visitor, arg) { |
| 782 return visitor.visitInterceptor(this, arg); |
| 783 } |
| 784 } |
| 785 |
771 class ForeignCode extends Node { | 786 class ForeignCode extends Node { |
772 final js.Template codeTemplate; | 787 final js.Template codeTemplate; |
773 final types.TypeMask type; | 788 final types.TypeMask type; |
774 final List<Expression> arguments; | 789 final List<Expression> arguments; |
775 final native.NativeBehavior nativeBehavior; | 790 final native.NativeBehavior nativeBehavior; |
776 final Element dependency; | 791 final Element dependency; |
777 | 792 |
778 ForeignCode(this.codeTemplate, this.type, this.arguments, this.nativeBehavior, | 793 ForeignCode(this.codeTemplate, this.type, this.arguments, this.nativeBehavior, |
779 this.dependency); | 794 this.dependency); |
780 } | 795 } |
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
855 E visitGetField(GetField node); | 870 E visitGetField(GetField node); |
856 E visitSetField(SetField node); | 871 E visitSetField(SetField node); |
857 E visitGetStatic(GetStatic node); | 872 E visitGetStatic(GetStatic node); |
858 E visitSetStatic(SetStatic node); | 873 E visitSetStatic(SetStatic node); |
859 E visitCreateBox(CreateBox node); | 874 E visitCreateBox(CreateBox node); |
860 E visitCreateInstance(CreateInstance node); | 875 E visitCreateInstance(CreateInstance node); |
861 E visitReifyRuntimeType(ReifyRuntimeType node); | 876 E visitReifyRuntimeType(ReifyRuntimeType node); |
862 E visitReadTypeVariable(ReadTypeVariable node); | 877 E visitReadTypeVariable(ReadTypeVariable node); |
863 E visitTypeExpression(TypeExpression node); | 878 E visitTypeExpression(TypeExpression node); |
864 E visitCreateInvocationMirror(CreateInvocationMirror node); | 879 E visitCreateInvocationMirror(CreateInvocationMirror node); |
| 880 E visitInterceptor(Interceptor node); |
865 E visitApplyBuiltinOperator(ApplyBuiltinOperator node); | 881 E visitApplyBuiltinOperator(ApplyBuiltinOperator node); |
866 E visitForeignExpression(ForeignExpression node); | 882 E visitForeignExpression(ForeignExpression node); |
867 } | 883 } |
868 | 884 |
869 abstract class ExpressionVisitor1<E, A> { | 885 abstract class ExpressionVisitor1<E, A> { |
870 E visitExpression(Expression node, A arg) => node.accept1(this, arg); | 886 E visitExpression(Expression node, A arg) => node.accept1(this, arg); |
871 E visitVariableUse(VariableUse node, A arg); | 887 E visitVariableUse(VariableUse node, A arg); |
872 E visitAssign(Assign node, A arg); | 888 E visitAssign(Assign node, A arg); |
873 E visitInvokeStatic(InvokeStatic node, A arg); | 889 E visitInvokeStatic(InvokeStatic node, A arg); |
874 E visitInvokeMethod(InvokeMethod node, A arg); | 890 E visitInvokeMethod(InvokeMethod node, A arg); |
(...skipping 11 matching lines...) Expand all Loading... |
886 E visitGetField(GetField node, A arg); | 902 E visitGetField(GetField node, A arg); |
887 E visitSetField(SetField node, A arg); | 903 E visitSetField(SetField node, A arg); |
888 E visitGetStatic(GetStatic node, A arg); | 904 E visitGetStatic(GetStatic node, A arg); |
889 E visitSetStatic(SetStatic node, A arg); | 905 E visitSetStatic(SetStatic node, A arg); |
890 E visitCreateBox(CreateBox node, A arg); | 906 E visitCreateBox(CreateBox node, A arg); |
891 E visitCreateInstance(CreateInstance node, A arg); | 907 E visitCreateInstance(CreateInstance node, A arg); |
892 E visitReifyRuntimeType(ReifyRuntimeType node, A arg); | 908 E visitReifyRuntimeType(ReifyRuntimeType node, A arg); |
893 E visitReadTypeVariable(ReadTypeVariable node, A arg); | 909 E visitReadTypeVariable(ReadTypeVariable node, A arg); |
894 E visitTypeExpression(TypeExpression node, A arg); | 910 E visitTypeExpression(TypeExpression node, A arg); |
895 E visitCreateInvocationMirror(CreateInvocationMirror node, A arg); | 911 E visitCreateInvocationMirror(CreateInvocationMirror node, A arg); |
| 912 E visitInterceptor(Interceptor node, A arg); |
896 E visitApplyBuiltinOperator(ApplyBuiltinOperator node, A arg); | 913 E visitApplyBuiltinOperator(ApplyBuiltinOperator node, A arg); |
897 E visitForeignExpression(ForeignExpression node, A arg); | 914 E visitForeignExpression(ForeignExpression node, A arg); |
898 } | 915 } |
899 | 916 |
900 abstract class StatementVisitor<S> { | 917 abstract class StatementVisitor<S> { |
901 S visitStatement(Statement node) => node.accept(this); | 918 S visitStatement(Statement node) => node.accept(this); |
902 S visitLabeledStatement(LabeledStatement node); | 919 S visitLabeledStatement(LabeledStatement node); |
903 S visitReturn(Return node); | 920 S visitReturn(Return node); |
904 S visitThrow(Throw node); | 921 S visitThrow(Throw node); |
905 S visitRethrow(Rethrow node); | 922 S visitRethrow(Rethrow node); |
(...skipping 184 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1090 node.arguments.forEach(visitExpression); | 1107 node.arguments.forEach(visitExpression); |
1091 } | 1108 } |
1092 | 1109 |
1093 visitUnreachable(Unreachable node) { | 1110 visitUnreachable(Unreachable node) { |
1094 } | 1111 } |
1095 | 1112 |
1096 visitApplyBuiltinOperator(ApplyBuiltinOperator node) { | 1113 visitApplyBuiltinOperator(ApplyBuiltinOperator node) { |
1097 node.arguments.forEach(visitExpression); | 1114 node.arguments.forEach(visitExpression); |
1098 } | 1115 } |
1099 | 1116 |
| 1117 visitInterceptor(Interceptor node) { |
| 1118 visitExpression(node.input); |
| 1119 } |
| 1120 |
1100 visitForeignCode(ForeignCode node) { | 1121 visitForeignCode(ForeignCode node) { |
1101 node.arguments.forEach(visitExpression); | 1122 node.arguments.forEach(visitExpression); |
1102 } | 1123 } |
1103 | 1124 |
1104 visitForeignExpression(ForeignExpression node) => visitForeignCode(node); | 1125 visitForeignExpression(ForeignExpression node) => visitForeignCode(node); |
1105 visitForeignStatement(ForeignStatement node) => visitForeignCode(node); | 1126 visitForeignStatement(ForeignStatement node) => visitForeignCode(node); |
1106 } | 1127 } |
1107 | 1128 |
1108 abstract class Transformer implements ExpressionVisitor<Expression>, | 1129 abstract class Transformer implements ExpressionVisitor<Expression>, |
1109 StatementVisitor<Statement> { | 1130 StatementVisitor<Statement> { |
(...skipping 196 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1306 } | 1327 } |
1307 | 1328 |
1308 visitUnreachable(Unreachable node) { | 1329 visitUnreachable(Unreachable node) { |
1309 return node; | 1330 return node; |
1310 } | 1331 } |
1311 | 1332 |
1312 visitApplyBuiltinOperator(ApplyBuiltinOperator node) { | 1333 visitApplyBuiltinOperator(ApplyBuiltinOperator node) { |
1313 _replaceExpressions(node.arguments); | 1334 _replaceExpressions(node.arguments); |
1314 return node; | 1335 return node; |
1315 } | 1336 } |
| 1337 |
| 1338 visitInterceptor(Interceptor node) { |
| 1339 node.input = visitExpression(node.input); |
| 1340 return node; |
| 1341 } |
1316 } | 1342 } |
OLD | NEW |