| OLD | NEW |
| 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, 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 interface HVisitor<R> { | 5 interface HVisitor<R> { |
| 6 R visitAdd(HAdd node); | 6 R visitAdd(HAdd node); |
| 7 R visitBailoutTarget(HBailoutTarget node); | 7 R visitBailoutTarget(HBailoutTarget node); |
| 8 R visitBitAnd(HBitAnd node); | 8 R visitBitAnd(HBitAnd node); |
| 9 R visitBitNot(HBitNot node); | 9 R visitBitNot(HBitNot node); |
| 10 R visitBitOr(HBitOr node); | 10 R visitBitOr(HBitOr node); |
| (...skipping 1141 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1152 HInvoke(List<HInstruction> inputs) : super(inputs); | 1152 HInvoke(List<HInstruction> inputs) : super(inputs); |
| 1153 static final int ARGUMENTS_OFFSET = 1; | 1153 static final int ARGUMENTS_OFFSET = 1; |
| 1154 | 1154 |
| 1155 // TODO(floitsch): make class abstract instead of adding an abstract method. | 1155 // TODO(floitsch): make class abstract instead of adding an abstract method. |
| 1156 abstract accept(HVisitor visitor); | 1156 abstract accept(HVisitor visitor); |
| 1157 } | 1157 } |
| 1158 | 1158 |
| 1159 class HInvokeDynamic extends HInvoke { | 1159 class HInvokeDynamic extends HInvoke { |
| 1160 final Selector selector; | 1160 final Selector selector; |
| 1161 Element element; | 1161 Element element; |
| 1162 SourceString name; | |
| 1163 | 1162 |
| 1164 HInvokeDynamic(this.selector, this.element, this.name, | 1163 HInvokeDynamic(this.selector, this.element, List<HInstruction> inputs) |
| 1165 List<HInstruction> inputs) : super(inputs); | 1164 : super(inputs); |
| 1166 toString() => 'invoke dynamic: $name'; | 1165 toString() => 'invoke dynamic: $selector'; |
| 1167 HInstruction get receiver() => inputs[0]; | 1166 HInstruction get receiver() => inputs[0]; |
| 1168 | 1167 |
| 1169 // TODO(floitsch): make class abstract instead of adding an abstract method. | 1168 // TODO(floitsch): make class abstract instead of adding an abstract method. |
| 1170 abstract accept(HVisitor visitor); | 1169 abstract accept(HVisitor visitor); |
| 1171 } | 1170 } |
| 1172 | 1171 |
| 1173 class HInvokeClosure extends HInvokeDynamic { | 1172 class HInvokeClosure extends HInvokeDynamic { |
| 1174 HInvokeClosure(Selector selector, List<HInstruction> inputs) | 1173 HInvokeClosure(Selector selector, List<HInstruction> inputs) |
| 1175 : super(selector, null, const SourceString('call'), inputs); | 1174 : super(selector, null, inputs); |
| 1176 accept(HVisitor visitor) => visitor.visitInvokeClosure(this); | 1175 accept(HVisitor visitor) => visitor.visitInvokeClosure(this); |
| 1177 } | 1176 } |
| 1178 | 1177 |
| 1179 class HInvokeDynamicMethod extends HInvokeDynamic { | 1178 class HInvokeDynamicMethod extends HInvokeDynamic { |
| 1180 HInvokeDynamicMethod(Selector selector, | 1179 HInvokeDynamicMethod(Selector selector, List<HInstruction> inputs) |
| 1181 SourceString methodName, | 1180 : super(selector, null, inputs); |
| 1182 List<HInstruction> inputs) | 1181 toString() => 'invoke dynamic method: $selector'; |
| 1183 : super(selector, null, methodName, inputs); | |
| 1184 toString() => 'invoke dynamic method: $name'; | |
| 1185 accept(HVisitor visitor) => visitor.visitInvokeDynamicMethod(this); | 1182 accept(HVisitor visitor) => visitor.visitInvokeDynamicMethod(this); |
| 1186 } | 1183 } |
| 1187 | 1184 |
| 1188 class HInvokeDynamicField extends HInvokeDynamic { | 1185 class HInvokeDynamicField extends HInvokeDynamic { |
| 1189 HInvokeDynamicField(Selector selector, | 1186 HInvokeDynamicField(Selector selector, Element element, |
| 1190 Element element, | 1187 List<HInstruction> inputs) |
| 1191 SourceString name, | 1188 : super(selector, element, inputs); |
| 1192 List<HInstruction>inputs) | 1189 toString() => 'invoke dynamic field: $selector'; |
| 1193 : super(selector, element, name, inputs); | |
| 1194 toString() => 'invoke dynamic field: $name'; | |
| 1195 | 1190 |
| 1196 // TODO(floitsch): make class abstract instead of adding an abstract method. | 1191 // TODO(floitsch): make class abstract instead of adding an abstract method. |
| 1197 abstract accept(HVisitor visitor); | 1192 abstract accept(HVisitor visitor); |
| 1198 } | 1193 } |
| 1199 | 1194 |
| 1200 class HInvokeDynamicGetter extends HInvokeDynamicField { | 1195 class HInvokeDynamicGetter extends HInvokeDynamicField { |
| 1201 HInvokeDynamicGetter(selector, element, name, receiver) | 1196 HInvokeDynamicGetter(selector, element, receiver) |
| 1202 : super(selector, element, name, [receiver]); | 1197 : super(selector, element,[receiver]); |
| 1203 toString() => 'invoke dynamic getter: $name'; | 1198 toString() => 'invoke dynamic getter: $selector'; |
| 1204 accept(HVisitor visitor) => visitor.visitInvokeDynamicGetter(this); | 1199 accept(HVisitor visitor) => visitor.visitInvokeDynamicGetter(this); |
| 1205 } | 1200 } |
| 1206 | 1201 |
| 1207 class HInvokeDynamicSetter extends HInvokeDynamicField { | 1202 class HInvokeDynamicSetter extends HInvokeDynamicField { |
| 1208 HInvokeDynamicSetter(selector, element, name, receiver, value) | 1203 HInvokeDynamicSetter(selector, element, receiver, value) |
| 1209 : super(selector, element, name, [receiver, value]); | 1204 : super(selector, element, [receiver, value]); |
| 1210 toString() => 'invoke dynamic setter: $name'; | 1205 toString() => 'invoke dynamic setter: $selector'; |
| 1211 accept(HVisitor visitor) => visitor.visitInvokeDynamicSetter(this); | 1206 accept(HVisitor visitor) => visitor.visitInvokeDynamicSetter(this); |
| 1212 } | 1207 } |
| 1213 | 1208 |
| 1214 class HInvokeStatic extends HInvoke { | 1209 class HInvokeStatic extends HInvoke { |
| 1215 static final int INVOKE_STATIC_TYPECODE = 30; | 1210 static final int INVOKE_STATIC_TYPECODE = 30; |
| 1216 | 1211 |
| 1217 /** The first input must be the target. */ | 1212 /** The first input must be the target. */ |
| 1218 HInvokeStatic(inputs, [HType knownType = HType.UNKNOWN]) : super(inputs) { | 1213 HInvokeStatic(inputs, [HType knownType = HType.UNKNOWN]) : super(inputs) { |
| 1219 guaranteedType = knownType; | 1214 guaranteedType = knownType; |
| 1220 } | 1215 } |
| (...skipping 1522 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2743 HBasicBlock get start() => expression.start; | 2738 HBasicBlock get start() => expression.start; |
| 2744 HBasicBlock get end() { | 2739 HBasicBlock get end() { |
| 2745 // We don't create a switch block if there are no cases. | 2740 // We don't create a switch block if there are no cases. |
| 2746 assert(!statements.isEmpty()); | 2741 assert(!statements.isEmpty()); |
| 2747 return statements.last().end; | 2742 return statements.last().end; |
| 2748 } | 2743 } |
| 2749 | 2744 |
| 2750 bool accept(HStatementInformationVisitor visitor) => | 2745 bool accept(HStatementInformationVisitor visitor) => |
| 2751 visitor.visitSwitchInfo(this); | 2746 visitor.visitSwitchInfo(this); |
| 2752 } | 2747 } |
| OLD | NEW |