Index: tests/compiler/dart2js/value_range2_test.dart |
=================================================================== |
--- tests/compiler/dart2js/value_range2_test.dart (revision 14387) |
+++ tests/compiler/dart2js/value_range2_test.dart (working copy) |
@@ -4,22 +4,25 @@ |
import "../../../lib/compiler/implementation/ssa/ssa.dart"; |
import "../../../lib/compiler/implementation/dart2jslib.dart"; |
+import "../../../lib/compiler/implementation/js_backend/js_backend.dart"; |
-Value instructionValue = new InstructionValue(new HReturn(null)); |
-Value lengthValue = new LengthValue(new HReturn(null)); |
+ValueRangeInfo info = new ValueRangeInfo(const JavaScriptConstantSystem()); |
-Range createSingleRange(Value value) => new Range(value, value); |
-Range createSingleIntRange(int value) => createSingleRange(new IntValue(value)); |
+Value instructionValue = info.newInstructionValue(new HReturn(null)); |
+Value lengthValue = info.newLengthValue(new HReturn(null)); |
+ |
+Range createSingleRange(Value value) => info.newRange(value, value); |
+Range createSingleIntRange(int value) => createSingleRange(info.newIntValue(value)); |
Range createSingleInstructionRange() => createSingleRange(instructionValue); |
Range createSingleLengthRange() => createSingleRange(lengthValue); |
Range createIntRange(int lower, int upper) { |
- return new Range(new IntValue(lower), new IntValue(upper)); |
+ return info.newRange(info.newIntValue(lower), info.newIntValue(upper)); |
} |
Range createLengthRange(int lower) { |
- return new Range(new IntValue(lower), lengthValue); |
+ return info.newRange(info.newIntValue(lower), lengthValue); |
} |
Range createInstructionRange(int lower) { |
- return new Range(new IntValue(lower), instructionValue); |
+ return info.newRange(info.newIntValue(lower), instructionValue); |
} |
Range instruction = createSingleInstructionRange(); |
@@ -35,9 +38,9 @@ |
Range _0_instruction = createInstructionRange(0); |
checkAndRange(Range one, Range two, lower, upper) { |
- if (lower is num) lower = new IntValue(lower); |
- if (upper is num) upper = new IntValue(upper); |
- Range range = new Range(lower, upper); |
+ if (lower is num) lower = info.newIntValue(lower); |
+ if (upper is num) upper = info.newIntValue(upper); |
+ Range range = info.newRange(lower, upper); |
Expect.equals(range, one & two); |
} |
@@ -47,33 +50,33 @@ |
// Create a bound just like our current implementation in dart2js does. |
if (two is IntValue) { |
if (two.isNegative) { |
- return new AddValue(one, -two); |
+ return info.newAddValue(one, -two); |
} else if (two.isZero) { |
return one; |
} |
} |
if (one is IntValue) { |
if (one.isNegative) { |
- return new SubtractValue(-two, -one); |
+ return info.newSubtractValue(-two, -one); |
} else if (one.isZero) { |
return -two; |
} |
} |
- return new SubtractValue(one, two); |
+ return info.newSubtractValue(one, two); |
} |
if (lower == null) { |
lower = buildBound(one.lower, two.upper); |
} else if (lower is num) { |
- lower = new IntValue(lower); |
+ lower = info.newIntValue(lower); |
} |
if (upper == null) { |
upper = buildBound(one.upper, two.lower); |
} else if (upper is num) { |
- upper = new IntValue(upper); |
+ upper = info.newIntValue(upper); |
} |
- Expect.equals(new Range(lower, upper), one - two); |
+ Expect.equals(info.newRange(lower, upper), one - two); |
} |
checkNegateRange(Range range, [arg1, arg2]) { |
@@ -82,20 +85,20 @@ |
} else { |
Value low, up; |
if (arg1 is num) { |
- low = new IntValue(arg1); |
+ low = info.newIntValue(arg1); |
} else if (arg1 == null) { |
- low = new NegateValue(range.upper); |
+ low = info.newNegateValue(range.upper); |
} else { |
low = arg1; |
} |
if (arg2 is num) { |
- up = new IntValue(arg2); |
+ up = info.newIntValue(arg2); |
} else if (arg2 == null) { |
- up = new NegateValue(range.lower); |
+ up = info.newNegateValue(range.lower); |
} else { |
up = arg2; |
} |
- Expect.equals(new Range(low, up), -range); |
+ Expect.equals(info.newRange(low, up), -range); |
} |
} |
@@ -113,6 +116,8 @@ |
checkNegateRange(_0_instruction, -instructionValue, 0); |
} |
+bits32(value) => value & 0xFFFFFFFF; |
+ |
testAnd() { |
checkAndRange( |
instruction, instruction, const MinIntValue(), const MaxIntValue()); |
@@ -162,7 +167,7 @@ |
checkAndRange(nFF, FF, 1, 1); |
checkAndRange(nFF, FA, 0, 0); |
- checkAndRange(nFF, nFF, -0xFF, -0xFF); |
+ checkAndRange(nFF, nFF, bits32(-0xFF), bits32(-0xFF)); |
checkAndRange(nFF, length, 0, length.upper); |
checkAndRange(nFF, _FA_FF, 0, 0xFF); |
checkAndRange(nFF, _0_FF, 0, 0xFF); |