/*
 *  If a property put base value is not an object, the PutValue() algorithm
 *  will reject any attempt to create or update a data property on the
 *  temporary object created by coercion.
 *
 *  This only has a visible effect in strict mode.
 *
 *  See E5 Section 8.7.2, step 7.a of the variant [[Put]] algorithm.
 *
 *  Note that the check in E5 Section 8.7.2, step 4 seems impossible to
 *  trigger.  The possible temporary objects created are: Boolean, Number,
 *  String.  Boolean and Number have no "own properties" while String has
 *  only non-writable properties which would trigger the [[CanPut]] check
 *  in step 2 so step 4 would never be reached.
 */

/*===
TypeError
===*/

function f() {
  'use strict';

  "foo".bar = 1;  /* TypeError in strict mode */
};

try {
    f();
    print("not thrown");
} catch (e) {
    print(e.name);
}

