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

Side by Side Diff: pkg/compiler/lib/src/js_backend/constant_system_javascript.dart

Issue 2561533002: dart2js: Constant folding and specialization for remainder (Closed)
Patch Set: fix range analysis Created 4 years 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) 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 library dart2js.constant_system.js; 5 library dart2js.constant_system.js;
6 6
7 import '../compiler.dart' show Compiler; 7 import '../compiler.dart' show Compiler;
8 import '../constant_system_dart.dart'; 8 import '../constant_system_dart.dart';
9 import '../constants/constant_system.dart'; 9 import '../constants/constant_system.dart';
10 import '../constants/values.dart'; 10 import '../constants/values.dart';
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after
117 ConstantValue result = _addOperation.fold(left, right); 117 ConstantValue result = _addOperation.fold(left, right);
118 if (result != null && result.isNum) { 118 if (result != null && result.isNum) {
119 return JAVA_SCRIPT_CONSTANT_SYSTEM.convertToJavaScriptConstant(result); 119 return JAVA_SCRIPT_CONSTANT_SYSTEM.convertToJavaScriptConstant(result);
120 } 120 }
121 return result; 121 return result;
122 } 122 }
123 123
124 apply(left, right) => _addOperation.apply(left, right); 124 apply(left, right) => _addOperation.apply(left, right);
125 } 125 }
126 126
127 class JavaScriptRemainderOperation extends ArithmeticNumOperation {
128 String get name => 'remainder';
129
130 const JavaScriptRemainderOperation();
131
132 int foldInts(int left, int right) {
133 if (right == 0) return null;
134 return left.remainder(right);
135 }
136
137 num foldNums(num left, num right) => left.remainder(right);
138 apply(left, right) => left.remainder(right);
139 }
140
127 class JavaScriptBinaryArithmeticOperation implements BinaryOperation { 141 class JavaScriptBinaryArithmeticOperation implements BinaryOperation {
128 final BinaryOperation dartArithmeticOperation; 142 final BinaryOperation dartArithmeticOperation;
129 143
130 const JavaScriptBinaryArithmeticOperation(this.dartArithmeticOperation); 144 const JavaScriptBinaryArithmeticOperation(this.dartArithmeticOperation);
131 145
132 String get name => dartArithmeticOperation.name; 146 String get name => dartArithmeticOperation.name;
133 147
134 ConstantValue fold(ConstantValue left, ConstantValue right) { 148 ConstantValue fold(ConstantValue left, ConstantValue right) {
135 ConstantValue result = dartArithmeticOperation.fold(left, right); 149 ConstantValue result = dartArithmeticOperation.fold(left, right);
136 if (result == null) return result; 150 if (result == null) return result;
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after
226 final identity = const JavaScriptIdentityOperation(); 240 final identity = const JavaScriptIdentityOperation();
227 final ifNull = const IfNullOperation(); 241 final ifNull = const IfNullOperation();
228 final lessEqual = const LessEqualOperation(); 242 final lessEqual = const LessEqualOperation();
229 final less = const LessOperation(); 243 final less = const LessOperation();
230 final modulo = 244 final modulo =
231 const JavaScriptBinaryArithmeticOperation(const ModuloOperation()); 245 const JavaScriptBinaryArithmeticOperation(const ModuloOperation());
232 final multiply = 246 final multiply =
233 const JavaScriptBinaryArithmeticOperation(const MultiplyOperation()); 247 const JavaScriptBinaryArithmeticOperation(const MultiplyOperation());
234 final negate = const JavaScriptNegateOperation(); 248 final negate = const JavaScriptNegateOperation();
235 final not = const NotOperation(); 249 final not = const NotOperation();
250 final remainder = const JavaScriptRemainderOperation();
236 final shiftLeft = 251 final shiftLeft =
237 const JavaScriptBinaryBitOperation(const ShiftLeftOperation()); 252 const JavaScriptBinaryBitOperation(const ShiftLeftOperation());
238 final shiftRight = const JavaScriptShiftRightOperation(); 253 final shiftRight = const JavaScriptShiftRightOperation();
239 final subtract = 254 final subtract =
240 const JavaScriptBinaryArithmeticOperation(const SubtractOperation()); 255 const JavaScriptBinaryArithmeticOperation(const SubtractOperation());
241 final truncatingDivide = const JavaScriptBinaryArithmeticOperation( 256 final truncatingDivide = const JavaScriptBinaryArithmeticOperation(
242 const TruncatingDivideOperation()); 257 const TruncatingDivideOperation());
243 final codeUnitAt = const CodeUnitAtRuntimeOperation(); 258 final codeUnitAt = const CodeUnitAtRuntimeOperation();
244 final round = const JavaScriptRoundOperation(); 259 final round = const JavaScriptRoundOperation();
245 260
(...skipping 193 matching lines...) Expand 10 before | Expand all | Expand 10 after
439 result.add(keyList); 454 result.add(keyList);
440 } else { 455 } else {
441 // Add the keys individually to avoid generating an unused list constant 456 // Add the keys individually to avoid generating an unused list constant
442 // for the keys. 457 // for the keys.
443 result.addAll(keys); 458 result.addAll(keys);
444 } 459 }
445 result.addAll(values); 460 result.addAll(values);
446 return result; 461 return result;
447 } 462 }
448 } 463 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698