anchor.diff:        js.Binary notIndexingTest = new js.Binary('&&', arrayTest, pop());
         js.Binary notObjectOrIndexingTest =
             new js.Binary('||', objectTest, notIndexingTest);
  -      js.Binary test =
  -          new js.Binary('&&', stringTest, notObjectOrIndexingTest);
  -      js.Statement then = bailout(node, 'Not a string or array');
  -      pushStatement(new js.If.noElse(test, then), node);
  +      test = new js.Binary('&&', stringTest, notObjectOrIndexingTest);
  +      message = 'Not a string or array';
       } else {
         compiler.internalError('Unexpected type guard', instruction: input);
       }
  +    pushStatement(new js.If.noElse(test, bailout(node, message)), node);
     }
   
     void visitBailoutTarget(HBailoutTarget target) {
  
positive.code:       checkArray(input, '!==');
        js.Expression arrayTest = pop();
        checkFixedArray(input);
        js.Binary test = new js.Binary('||', objectTest, arrayTest);
        test = new js.Binary('||', test, pop());
        js.Statement then = bailout(node, 'Not an extendable array');
        pushStatement(new js.If.noElse(test, then), node);
      } else if (node.isMutableArray()) {
        // if (input is !Object
        //     || ((input is !Array || input.isImmutable)
  
negative.code:       js.Expression arrayTest = pop();
        checkType(input, indexingBehavior, negative: true);
        js.Expression notIndexing = new js.Binary('&&', arrayTest, pop());
        test = new js.Binary('||', objectTest, notIndexing);
        message = 'Not an array';
      } else if (node.isIndexablePrimitive()) {
        // if (input is !String
        //     && (input is !Object
  