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

Side by Side Diff: sdk/lib/_internal/compiler/implementation/ssa/codegen.dart

Issue 11861007: Move indexSet and unary operators to the new interceptor mechanism. (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 7 years, 11 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 | Annotate | Revision Log
OLDNEW
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 part of ssa; 5 part of ssa;
6 6
7 class SsaCodeGeneratorTask extends CompilerTask { 7 class SsaCodeGeneratorTask extends CompilerTask {
8 8
9 final JavaScriptBackend backend; 9 final JavaScriptBackend backend;
10 10
(...skipping 1261 matching lines...) Expand 10 before | Expand all | Expand 10 after
1272 // We want the outcome of bit-operations to be positive. We use the unsigned 1272 // We want the outcome of bit-operations to be positive. We use the unsigned
1273 // shift operator to achieve this. 1273 // shift operator to achieve this.
1274 visitBitInvokeBinary(HBinaryBitOp node, String op) { 1274 visitBitInvokeBinary(HBinaryBitOp node, String op) {
1275 visitInvokeBinary(node, op); 1275 visitInvokeBinary(node, op);
1276 if (node.isBuiltin(types) && requiresUintConversion(node)) { 1276 if (node.isBuiltin(types) && requiresUintConversion(node)) {
1277 push(new js.Binary(">>>", pop(), new js.LiteralNumber("0")), node); 1277 push(new js.Binary(">>>", pop(), new js.LiteralNumber("0")), node);
1278 } 1278 }
1279 } 1279 }
1280 1280
1281 visitInvokeUnary(HInvokeUnary node, String op) { 1281 visitInvokeUnary(HInvokeUnary node, String op) {
1282 if (node.isBuiltin(types)) { 1282 use(node.operand);
1283 use(node.operand); 1283 push(new js.Prefix(op, pop()), node);
1284 push(new js.Prefix(op, pop()), node);
1285 } else {
1286 visitInvokeStatic(node);
1287 }
1288 } 1284 }
1289 1285
1290 // We want the outcome of bit-operations to be positive. We use the unsigned 1286 // We want the outcome of bit-operations to be positive. We use the unsigned
1291 // shift operator to achieve this. 1287 // shift operator to achieve this.
1292 visitBitInvokeUnary(HInvokeUnary node, String op) { 1288 visitBitInvokeUnary(HInvokeUnary node, String op) {
1293 visitInvokeUnary(node, op); 1289 visitInvokeUnary(node, op);
1294 if (node.isBuiltin(types) && requiresUintConversion(node)) { 1290 if (requiresUintConversion(node)) {
1295 push(new js.Binary(">>>", pop(), new js.LiteralNumber("0")), node); 1291 push(new js.Binary(">>>", pop(), new js.LiteralNumber("0")), node);
1296 } 1292 }
1297 } 1293 }
1298 1294
1299 void emitIdentityComparison(HInstruction left, HInstruction right) { 1295 void emitIdentityComparison(HInstruction left, HInstruction right) {
1300 String op = singleIdentityComparison(left, right, types); 1296 String op = singleIdentityComparison(left, right, types);
1301 if (op != null) { 1297 if (op != null) {
1302 use(left); 1298 use(left);
1303 js.Expression jsLeft = pop(); 1299 js.Expression jsLeft = pop();
1304 use(right); 1300 use(right);
(...skipping 831 matching lines...) Expand 10 before | Expand all | Expand 10 after
2136 } 2132 }
2137 2133
2138 void visitIndex(HIndex node) { 2134 void visitIndex(HIndex node) {
2139 use(node.receiver); 2135 use(node.receiver);
2140 js.Expression receiver = pop(); 2136 js.Expression receiver = pop();
2141 use(node.index); 2137 use(node.index);
2142 push(new js.PropertyAccess(receiver, pop()), node); 2138 push(new js.PropertyAccess(receiver, pop()), node);
2143 } 2139 }
2144 2140
2145 void visitIndexAssign(HIndexAssign node) { 2141 void visitIndexAssign(HIndexAssign node) {
2146 if (node.isBuiltin(types)) { 2142 use(node.receiver);
2147 use(node.inputs[1]); 2143 js.Expression receiver = pop();
2148 js.Expression receiver = pop(); 2144 use(node.index);
2149 use(node.inputs[2]); 2145 js.Expression index = pop();
2150 js.Expression index = pop(); 2146 use(node.value);
2151 use(node.inputs[3]); 2147 push(new js.Assignment(new js.PropertyAccess(receiver, index), pop()),
2152 push(new js.Assignment(new js.PropertyAccess(receiver, index), pop()), 2148 node);
2153 node);
2154 } else {
2155 visitInvokeStatic(node);
2156 }
2157 } 2149 }
2158 2150
2159 void checkInt(HInstruction input, String cmp) { 2151 void checkInt(HInstruction input, String cmp) {
2160 use(input); 2152 use(input);
2161 js.Expression left = pop(); 2153 js.Expression left = pop();
2162 use(input); 2154 use(input);
2163 js.Expression or0 = new js.Binary("|", pop(), new js.LiteralNumber("0")); 2155 js.Expression or0 = new js.Binary("|", pop(), new js.LiteralNumber("0"));
2164 push(new js.Binary(cmp, left, or0)); 2156 push(new js.Binary(cmp, left, or0));
2165 } 2157 }
2166 2158
(...skipping 860 matching lines...) Expand 10 before | Expand all | Expand 10 after
3027 if (leftType.canBeNull() && rightType.canBeNull()) { 3019 if (leftType.canBeNull() && rightType.canBeNull()) {
3028 if (left.isConstantNull() || right.isConstantNull() || 3020 if (left.isConstantNull() || right.isConstantNull() ||
3029 (leftType.isPrimitive() && leftType == rightType)) { 3021 (leftType.isPrimitive() && leftType == rightType)) {
3030 return '=='; 3022 return '==';
3031 } 3023 }
3032 return null; 3024 return null;
3033 } else { 3025 } else {
3034 return '==='; 3026 return '===';
3035 } 3027 }
3036 } 3028 }
OLDNEW
« no previous file with comments | « sdk/lib/_internal/compiler/implementation/ssa/builder.dart ('k') | sdk/lib/_internal/compiler/implementation/ssa/nodes.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698