anchor.diff:      // 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]) {
  
positive.code:   } else {
      Value low, up;
      if (arg1 is num) {
        low = new IntValue(arg1);
      } else if (arg1 == null) {
        low = new NegateValue(range.upper);
      } else {
        low = arg1;
      }
      if (arg2 is num) {
        up = new IntValue(arg2);
      } else if (arg2 == null) {
        up = new NegateValue(range.lower);
      } else {
        up = arg2;
      }
      Expect.equals(new Range(low, up), -range);
    }
  }
  
  
negative.code: 
  import "../../../lib/compiler/implementation/ssa/ssa.dart";
  import "../../../lib/compiler/implementation/dart2jslib.dart";
  import "../../../lib/compiler/implementation/js_backend/js_backend.dart";
  
  ValueRangeInfo info = new ValueRangeInfo(const JavaScriptConstantSystem());
  
  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 info.newRange(info.newIntValue(lower), info.newIntValue(upper));
  }
  Range createLengthRange(int lower) {
    return info.newRange(info.newIntValue(lower), lengthValue);
  }
  Range createInstructionRange(int lower) {
    return info.newRange(info.newIntValue(lower), instructionValue);
  }
  
  Range instruction = createSingleInstructionRange();
  