Implement correct checking for inherited readonliness on assignment.
authorrossberg@chromium.org <rossberg@chromium.org@ce2b1a6d-e550-0410-aec6-3dcde31c8c00>
Fri, 1 Jun 2012 10:51:36 +0000 (10:51 +0000)
committerrossberg@chromium.org <rossberg@chromium.org@ce2b1a6d-e550-0410-aec6-3dcde31c8c00>
Fri, 1 Jun 2012 10:51:36 +0000 (10:51 +0000)
commite4c472a7afbe193b3570bc968a187969b1d1b0a2
treebcfa3ded74884bdddd5b7ab90f02c8818fdfb32a
parentdd54b0acf74f128571fd16cb26658ffd7489d4ac
Implement correct checking for inherited readonliness on assignment.

Removes 6 out of 8 of our remaining unintentional failures on test262.

Also fixes treatment of inherited setters added after the fact.

Specifically:

- In the runtime, when looking for setter callbacks in the prototype chain,
  also look for read-only properties. If one is found, reject (exception in
  strict mode). If a proxy is found, invoke proper trap.
  Note: this folds in the CanPut function from the spec and avoids an extra
  lookup over the prototype chain.

- In generated code for stores, insert a test for the maps from the prototype
  chain, but only up to the object where the property already exists (which
  may be the object itself).
  In Hydrogen, if the found property is read-only or not cacheable (e.g. a
  proxy), bail out; in a stub, generate an unconditional miss (to get an
  exception in strict mode).

- Add test cases and adapt existing test expectations.

R=mstarzinger@chromium.org
BUG=
TEST=

Review URL: https://chromiumcodereview.appspot.com/10388047

git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@11694 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
15 files changed:
src/arm/stub-cache-arm.cc
src/hydrogen.cc
src/ia32/stub-cache-ia32.cc
src/objects.cc
src/objects.h
src/stub-cache.h
src/x64/stub-cache-x64.cc
test/cctest/test-api.cc
test/mjsunit/harmony/proxies.js
test/mjsunit/override-read-only-property.js
test/mjsunit/readonly.js [new file with mode: 0644]
test/mjsunit/regress/regress-1199637.js
test/mjsunit/regress/regress-334.js
test/mjsunit/with-readonly.js
test/test262/test262.status