anchor.diff:      }
   
       bool generateAtUseSite = isGenerateAtUseSite(input);
  -    if (input is HIdentity && generateAtUseSite) {
  +    if (input is HIs) {
  +      emitIs(input, '!==');
  +    } else if (input is HIdentity && generateAtUseSite) {
         emitIdentityComparison(input.left, input.right, true);
       } else if (input is HBoolify && generateAtUseSite) {
         use(input.inputs[0]);
  
positive.code:     push(new js.Binary('!=', pop(), new js.LiteralNull()));
    }
  
    void checkFunction(HInstruction input, DartType type) {
      checkTypeOf(input, '===', 'function');
      js.Expression functionTest = pop();
      checkObject(input, '===');
      js.Expression objectTest = pop();
      checkType(input, type);
      push(new js.Binary('||',
                         functionTest,
                         new js.Binary('&&', objectTest, pop())));
    }
  
    void checkType(HInstruction input, DartType type, {bool negative: false}) {
  
negative.code:     use(input);
      js.Expression right = pop();
      // TODO(4984): Deal with infinity and -0.0.
      push(js.js('Math.floor(#) $cmp #', <js.Expression>[left, right]));
    }
  
    void checkTypeOf(HInstruction input, String cmp, String typeName) {
  