OLD | NEW |
1 library dart2js.unsugar_cps; | 1 library dart2js.unsugar_cps; |
2 | 2 |
3 import '../../cps_ir/cps_ir_nodes.dart'; | 3 import '../../cps_ir/cps_ir_nodes.dart'; |
4 | 4 |
5 import '../../cps_ir/optimizers.dart' show ParentVisitor; | 5 import '../../cps_ir/optimizers.dart' show ParentVisitor; |
6 import '../../constants/expressions.dart'; | 6 import '../../constants/expressions.dart'; |
7 import '../../constants/values.dart'; | 7 import '../../constants/values.dart'; |
8 import '../../elements/elements.dart' show | 8 import '../../elements/elements.dart' show |
9 ClassElement, | 9 ClassElement, |
10 FieldElement, | 10 FieldElement, |
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
118 originalBody.body = function.body; | 118 originalBody.body = function.body; |
119 | 119 |
120 Continuation returnFalse = new Continuation(<Parameter>[]); | 120 Continuation returnFalse = new Continuation(<Parameter>[]); |
121 Primitive falsePrimitive = falseConstant; | 121 Primitive falsePrimitive = falseConstant; |
122 returnFalse.body = | 122 returnFalse.body = |
123 new LetPrim(falsePrimitive, | 123 new LetPrim(falsePrimitive, |
124 new InvokeContinuation( | 124 new InvokeContinuation( |
125 function.returnContinuation, <Primitive>[falsePrimitive])); | 125 function.returnContinuation, <Primitive>[falsePrimitive])); |
126 | 126 |
127 Primitive nullPrimitive = nullConstant; | 127 Primitive nullPrimitive = nullConstant; |
128 Primitive test = new Identical(function.parameters.single, nullPrimitive); | 128 Primitive test = new ApplyBuiltinOperator( |
| 129 BuiltinOperator.Identical, |
| 130 <Primitive>[function.parameters.single, nullPrimitive]); |
129 | 131 |
130 Expression newBody = | 132 Expression newBody = |
131 new LetCont.many(<Continuation>[returnFalse, originalBody], | 133 new LetCont.many(<Continuation>[returnFalse, originalBody], |
132 new LetPrim(nullPrimitive, | 134 new LetPrim(nullPrimitive, |
133 new LetPrim(test, | 135 new LetPrim(test, |
134 new Branch( | 136 new Branch( |
135 new IsTrue(test), | 137 new IsTrue(test), |
136 returnFalse, | 138 returnFalse, |
137 originalBody)))); | 139 originalBody)))); |
138 function.body = newBody; | 140 function.body = newBody; |
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
263 // `this`), not `null`. | 265 // `this`), not `null`. |
264 node.receiver = new Reference<Primitive>(nullPrim); | 266 node.receiver = new Reference<Primitive>(nullPrim); |
265 } | 267 } |
266 } | 268 } |
267 | 269 |
268 processBranch(Branch node) { | 270 processBranch(Branch node) { |
269 // TODO(karlklose): implement the checked mode part of boolean conversion. | 271 // TODO(karlklose): implement the checked mode part of boolean conversion. |
270 InteriorNode parent = node.parent; | 272 InteriorNode parent = node.parent; |
271 IsTrue condition = node.condition; | 273 IsTrue condition = node.condition; |
272 Primitive t = trueConstant; | 274 Primitive t = trueConstant; |
273 Primitive i = new Identical(condition.value.definition, t); | 275 Primitive i = new ApplyBuiltinOperator( |
| 276 BuiltinOperator.Identical, |
| 277 <Primitive>[condition.value.definition, t]); |
274 LetPrim newNode = new LetPrim(t, | 278 LetPrim newNode = new LetPrim(t, |
275 new LetPrim(i, | 279 new LetPrim(i, |
276 new Branch(new IsTrue(i), | 280 new Branch(new IsTrue(i), |
277 node.trueContinuation.definition, | 281 node.trueContinuation.definition, |
278 node.falseContinuation.definition))); | 282 node.falseContinuation.definition))); |
279 condition.value.unlink(); | 283 condition.value.unlink(); |
280 node.trueContinuation.unlink(); | 284 node.trueContinuation.unlink(); |
281 node.falseContinuation.unlink(); | 285 node.falseContinuation.unlink(); |
282 parent.body = newNode; | 286 parent.body = newNode; |
283 } | 287 } |
284 | 288 |
285 processInterceptor(Interceptor node) { | 289 processInterceptor(Interceptor node) { |
286 _glue.registerSpecializedGetInterceptor(node.interceptedClasses); | 290 _glue.registerSpecializedGetInterceptor(node.interceptedClasses); |
287 } | 291 } |
288 } | 292 } |
OLD | NEW |