Separating transitions from descriptors.
authorverwaest@chromium.org <verwaest@chromium.org@ce2b1a6d-e550-0410-aec6-3dcde31c8c00>
Thu, 5 Jul 2012 13:54:20 +0000 (13:54 +0000)
committerverwaest@chromium.org <verwaest@chromium.org@ce2b1a6d-e550-0410-aec6-3dcde31c8c00>
Thu, 5 Jul 2012 13:54:20 +0000 (13:54 +0000)
commitd7a5b7d5e2a4cec2b2d06025ea0997f22934c6fe
tree78454a00ae1c17af4a308f0865802a7a0fdf2533
parentf97df41fcf07db9c246833f0ae07ce83175643a2
Separating transitions from descriptors.

In this design maps contain descriptor arrays, which in turn can contain transition arrays. If transitions are needed when no descriptor array is present, a descriptor array without real descriptors is inserted just so it can point at the transition array.

The transition array does not contain details about the field it transitions to. In order to weed out transitions to FIELDs from CONSTANT_FUNCTION (what used to be MAP_TRANSITION vs CONSTANT_TRANSITION), the transition needs to be followed and the details need to be looked up in the target map. CALLBACKS transitions are still easy to recognize since the transition targets are stored as an AccessorPair containing the maps, rather than the maps directly.

Currently AccessorPairs containing a transition and an accessor are shared between the descriptor array and the transition array. This simplifies lookup since we only have to look in one of both arrays. This will change in subsequent revisions, when descriptor arrays will become shared between multiple maps, since transitions cannot be shared.

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

git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@11994 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
33 files changed:
src/SConscript
src/arm/lithium-codegen-arm.cc
src/ast.cc
src/bootstrapper.cc
src/factory.cc
src/handles.cc
src/hydrogen-instructions.cc
src/hydrogen.cc
src/ia32/lithium-codegen-ia32.cc
src/ic.cc
src/mark-compact.cc
src/mark-compact.h
src/mips/lithium-codegen-mips.cc
src/mirror-debugger.js
src/objects-debug.cc
src/objects-inl.h
src/objects-printer.cc
src/objects.cc
src/objects.h
src/profile-generator.cc
src/property-details.h
src/property.cc
src/property.h
src/runtime.cc
src/transitions-inl.h [new file with mode: 0644]
src/transitions.cc [new file with mode: 0644]
src/transitions.h [new file with mode: 0644]
src/v8globals.h
src/x64/lithium-codegen-x64.cc
test/cctest/test-debug.cc
test/cctest/test-heap.cc
tools/grokdump.py
tools/gyp/v8.gyp