1fa458e413c3e5b8d479e49258d060b7bb4567c57danno@chromium.org// Copyright 2012 the V8 project authors. All rights reserved. 23484964a86451e86dcf04be9bd8c0d76ee04f081rossberg@chromium.org// Use of this source code is governed by a BSD-style license that can be 33484964a86451e86dcf04be9bd8c0d76ee04f081rossberg@chromium.org// found in the LICENSE file. 443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// 543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// Review notes: 643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// 73291210ab99f306b74430ebbc4b7d939629e699fager@chromium.org// - The use of macros in these inline functions may seem superfluous 843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// but it is absolutely needed to make sure gcc generates optimal 943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// code. gcc is not happy when attempting to inline too deep. 1043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// 1143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 1243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen#ifndef V8_OBJECTS_INL_H_ 1343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen#define V8_OBJECTS_INL_H_ 1443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 151e2d50cf3d94ff48285da107b7a9da1ad0fc873dmachenbach@chromium.org#include "src/base/atomicops.h" 16196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org#include "src/elements.h" 17196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org#include "src/objects.h" 18196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org#include "src/contexts.h" 19196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org#include "src/conversions-inl.h" 20e7a6d372100022f492c88886898add6a51e66977machenbach@chromium.org#include "src/field-index-inl.h" 21196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org#include "src/heap.h" 22196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org#include "src/isolate.h" 23196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org#include "src/heap-inl.h" 24196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org#include "src/property.h" 25196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org#include "src/spaces.h" 26196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org#include "src/store-buffer.h" 27196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org#include "src/v8memory.h" 28196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org#include "src/factory.h" 29196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org#include "src/incremental-marking.h" 30196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org#include "src/transitions-inl.h" 31196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org#include "src/objects-visiting.h" 328ddb15e9094939a28890ee8bbc7f7fa246ecea49machenbach@chromium.org#include "src/lookup.h" 33c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com 3471affb54842da76b24f0bb3184e9f0960523f89dkasperl@chromium.orgnamespace v8 { 3571affb54842da76b24f0bb3184e9f0960523f89dkasperl@chromium.orgnamespace internal { 3643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 3743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenPropertyDetails::PropertyDetails(Smi* smi) { 3843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen value_ = smi->value(); 3943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 4043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 4143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 42f5a24546072ecdbbd6372c85c42157e01e913561titzer@chromium.orgSmi* PropertyDetails::AsSmi() const { 4379e7902fa5f94747b5383dd40f3002dd8b62303arossberg@chromium.org // Ensure the upper 2 bits have the same value by sign extending it. This is 4479e7902fa5f94747b5383dd40f3002dd8b62303arossberg@chromium.org // necessary to be able to use the 31st bit of the property details. 4579e7902fa5f94747b5383dd40f3002dd8b62303arossberg@chromium.org int value = value_ << 1; 4679e7902fa5f94747b5383dd40f3002dd8b62303arossberg@chromium.org return Smi::FromInt(value >> 1); 4743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 4843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 4943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 50f5a24546072ecdbbd6372c85c42157e01e913561titzer@chromium.orgPropertyDetails PropertyDetails::AsDeleted() const { 51378b34e3f8852e94739bb77a528278fe0e2bb532ager@chromium.org Smi* smi = Smi::FromInt(value_ | DeletedField::encode(1)); 522abc450936e88b5c98a5e9d43ee6230ccc748272kasperl@chromium.org return PropertyDetails(smi); 532abc450936e88b5c98a5e9d43ee6230ccc748272kasperl@chromium.org} 542abc450936e88b5c98a5e9d43ee6230ccc748272kasperl@chromium.org 552abc450936e88b5c98a5e9d43ee6230ccc748272kasperl@chromium.org 56394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com#define TYPE_CHECKER(type, instancetype) \ 57394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com bool Object::Is##type() { \ 58394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com return Object::IsHeapObject() && \ 59394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com HeapObject::cast(this)->map()->instance_type() == instancetype; \ 60394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com } 61394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com 62394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com 6343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen#define CAST_ACCESSOR(type) \ 6443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen type* type::cast(Object* object) { \ 65ef33a5482a35a9a25f702f8e3f02bb6b49f3854cjkummerow@chromium.org SLOW_ASSERT(object->Is##type()); \ 6643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return reinterpret_cast<type*>(object); \ 6743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 6843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 6943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 7043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen#define INT_ACCESSORS(holder, name, offset) \ 7143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen int holder::name() { return READ_INT_FIELD(this, offset); } \ 7243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen void holder::set_##name(int value) { WRITE_INT_FIELD(this, offset, value); } 7343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 7443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 7543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen#define ACCESSORS(holder, name, type, offset) \ 7643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen type* holder::name() { return type::cast(READ_FIELD(this, offset)); } \ 775a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org void holder::set_##name(type* value, WriteBarrierMode mode) { \ 7843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen WRITE_FIELD(this, offset, value); \ 79c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com CONDITIONAL_WRITE_BARRIER(GetHeap(), this, offset, value, mode); \ 8043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 8143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 8243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 832c067b150f65db3e076b6b5a813e7f6f2492f770rossberg@chromium.org// Getter that returns a tagged Smi and setter that writes a tagged Smi. 842c067b150f65db3e076b6b5a813e7f6f2492f770rossberg@chromium.org#define ACCESSORS_TO_SMI(holder, name, offset) \ 852c067b150f65db3e076b6b5a813e7f6f2492f770rossberg@chromium.org Smi* holder::name() { return Smi::cast(READ_FIELD(this, offset)); } \ 862c067b150f65db3e076b6b5a813e7f6f2492f770rossberg@chromium.org void holder::set_##name(Smi* value, WriteBarrierMode mode) { \ 872c067b150f65db3e076b6b5a813e7f6f2492f770rossberg@chromium.org WRITE_FIELD(this, offset, value); \ 882c067b150f65db3e076b6b5a813e7f6f2492f770rossberg@chromium.org } 892c067b150f65db3e076b6b5a813e7f6f2492f770rossberg@chromium.org 902c067b150f65db3e076b6b5a813e7f6f2492f770rossberg@chromium.org 912c067b150f65db3e076b6b5a813e7f6f2492f770rossberg@chromium.org// Getter that returns a Smi as an int and writes an int as a Smi. 9243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen#define SMI_ACCESSORS(holder, name, offset) \ 9343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen int holder::name() { \ 9443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Object* value = READ_FIELD(this, offset); \ 9543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return Smi::cast(value)->value(); \ 9643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } \ 9743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen void holder::set_##name(int value) { \ 9843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen WRITE_FIELD(this, offset, Smi::FromInt(value)); \ 9943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 10043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 10163a7c9f848e755c52a37721debae242cf5d1682dmachenbach@chromium.org#define SYNCHRONIZED_SMI_ACCESSORS(holder, name, offset) \ 10263a7c9f848e755c52a37721debae242cf5d1682dmachenbach@chromium.org int holder::synchronized_##name() { \ 10363a7c9f848e755c52a37721debae242cf5d1682dmachenbach@chromium.org Object* value = ACQUIRE_READ_FIELD(this, offset); \ 10463a7c9f848e755c52a37721debae242cf5d1682dmachenbach@chromium.org return Smi::cast(value)->value(); \ 10563a7c9f848e755c52a37721debae242cf5d1682dmachenbach@chromium.org } \ 10663a7c9f848e755c52a37721debae242cf5d1682dmachenbach@chromium.org void holder::synchronized_set_##name(int value) { \ 10763a7c9f848e755c52a37721debae242cf5d1682dmachenbach@chromium.org RELEASE_WRITE_FIELD(this, offset, Smi::FromInt(value)); \ 10863a7c9f848e755c52a37721debae242cf5d1682dmachenbach@chromium.org } 10963a7c9f848e755c52a37721debae242cf5d1682dmachenbach@chromium.org 1109e41f9ecf5042292a9efcb36e264b37621199553machenbach@chromium.org#define NOBARRIER_SMI_ACCESSORS(holder, name, offset) \ 1119e41f9ecf5042292a9efcb36e264b37621199553machenbach@chromium.org int holder::nobarrier_##name() { \ 1129e41f9ecf5042292a9efcb36e264b37621199553machenbach@chromium.org Object* value = NOBARRIER_READ_FIELD(this, offset); \ 1139e41f9ecf5042292a9efcb36e264b37621199553machenbach@chromium.org return Smi::cast(value)->value(); \ 1149e41f9ecf5042292a9efcb36e264b37621199553machenbach@chromium.org } \ 1159e41f9ecf5042292a9efcb36e264b37621199553machenbach@chromium.org void holder::nobarrier_set_##name(int value) { \ 1169e41f9ecf5042292a9efcb36e264b37621199553machenbach@chromium.org NOBARRIER_WRITE_FIELD(this, offset, Smi::FromInt(value)); \ 1179e41f9ecf5042292a9efcb36e264b37621199553machenbach@chromium.org } 11843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 119911335cff40a2630bbe1dfb77b1897be991241bfsgjesse@chromium.org#define BOOL_GETTER(holder, field, name, offset) \ 120911335cff40a2630bbe1dfb77b1897be991241bfsgjesse@chromium.org bool holder::name() { \ 121911335cff40a2630bbe1dfb77b1897be991241bfsgjesse@chromium.org return BooleanBit::get(field(), offset); \ 122911335cff40a2630bbe1dfb77b1897be991241bfsgjesse@chromium.org } \ 123911335cff40a2630bbe1dfb77b1897be991241bfsgjesse@chromium.org 124911335cff40a2630bbe1dfb77b1897be991241bfsgjesse@chromium.org 125911335cff40a2630bbe1dfb77b1897be991241bfsgjesse@chromium.org#define BOOL_ACCESSORS(holder, field, name, offset) \ 12643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen bool holder::name() { \ 12743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return BooleanBit::get(field(), offset); \ 12843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } \ 12943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen void holder::set_##name(bool value) { \ 13043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen set_##field(BooleanBit::set(field(), offset, value)); \ 13143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 13243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 13343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 134394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.combool Object::IsFixedArrayBase() { 1355c88bc39690cc94affe78cf5777eb8180c4af8a4machenbach@chromium.org return IsFixedArray() || IsFixedDoubleArray() || IsConstantPoolArray() || 1365c88bc39690cc94affe78cf5777eb8180c4af8a4machenbach@chromium.org IsFixedTypedArrayBase() || IsExternalArray(); 137394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com} 138394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com 139394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com 140eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.org// External objects are not extensible, so the map check is enough. 141eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.orgbool Object::IsExternal() { 142eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.org return Object::IsHeapObject() && 143eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.org HeapObject::cast(this)->map() == 144eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.org HeapObject::cast(this)->GetHeap()->external_map(); 145eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.org} 146eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.org 147eeb44b681a16e45f1415dfacff0ba3dba9de5d8cyangguo@chromium.org 1487c3372bc426136cb79479c1b59d1770f5528882ahpayer@chromium.orgbool Object::IsAccessorInfo() { 1497c3372bc426136cb79479c1b59d1770f5528882ahpayer@chromium.org return IsExecutableAccessorInfo() || IsDeclaredAccessorInfo(); 1507c3372bc426136cb79479c1b59d1770f5528882ahpayer@chromium.org} 1517c3372bc426136cb79479c1b59d1770f5528882ahpayer@chromium.org 1527c3372bc426136cb79479c1b59d1770f5528882ahpayer@chromium.org 15343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenbool Object::IsSmi() { 15443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return HAS_SMI_TAG(this); 15543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 15643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 15743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 15843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenbool Object::IsHeapObject() { 15918ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org return Internals::HasHeapObjectTag(this); 16043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 16143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 16243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 163394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.comTYPE_CHECKER(HeapNumber, HEAP_NUMBER_TYPE) 1644a9f6553038df6b893b3d3ccae351723f4cbbae7yangguo@chromium.orgTYPE_CHECKER(Symbol, SYMBOL_TYPE) 16543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 16643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 16743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenbool Object::IsString() { 16843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return Object::IsHeapObject() 16943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen && HeapObject::cast(this)->map()->instance_type() < FIRST_NONSTRING_TYPE; 17043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 17143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 17243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 1734a9f6553038df6b893b3d3ccae351723f4cbbae7yangguo@chromium.orgbool Object::IsName() { 1744a9f6553038df6b893b3d3ccae351723f4cbbae7yangguo@chromium.org return IsString() || IsSymbol(); 1754a9f6553038df6b893b3d3ccae351723f4cbbae7yangguo@chromium.org} 1764a9f6553038df6b893b3d3ccae351723f4cbbae7yangguo@chromium.org 1774a9f6553038df6b893b3d3ccae351723f4cbbae7yangguo@chromium.org 1784a9f6553038df6b893b3d3ccae351723f4cbbae7yangguo@chromium.orgbool Object::IsUniqueName() { 1794a9f6553038df6b893b3d3ccae351723f4cbbae7yangguo@chromium.org return IsInternalizedString() || IsSymbol(); 1804a9f6553038df6b893b3d3ccae351723f4cbbae7yangguo@chromium.org} 1814a9f6553038df6b893b3d3ccae351723f4cbbae7yangguo@chromium.org 1824a9f6553038df6b893b3d3ccae351723f4cbbae7yangguo@chromium.org 1839fa09679c31dd1fc79a07ed24431b6951227240aricow@chromium.orgbool Object::IsSpecObject() { 1849fa09679c31dd1fc79a07ed24431b6951227240aricow@chromium.org return Object::IsHeapObject() 1859fa09679c31dd1fc79a07ed24431b6951227240aricow@chromium.org && HeapObject::cast(this)->map()->instance_type() >= FIRST_SPEC_OBJECT_TYPE; 1869fa09679c31dd1fc79a07ed24431b6951227240aricow@chromium.org} 1879fa09679c31dd1fc79a07ed24431b6951227240aricow@chromium.org 1889fa09679c31dd1fc79a07ed24431b6951227240aricow@chromium.org 189c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.combool Object::IsSpecFunction() { 190c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com if (!Object::IsHeapObject()) return false; 191c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com InstanceType type = HeapObject::cast(this)->map()->instance_type(); 192c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com return type == JS_FUNCTION_TYPE || type == JS_FUNCTION_PROXY_TYPE; 193c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com} 194c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com 195c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com 1963484964a86451e86dcf04be9bd8c0d76ee04f081rossberg@chromium.orgbool Object::IsTemplateInfo() { 1973484964a86451e86dcf04be9bd8c0d76ee04f081rossberg@chromium.org return IsObjectTemplateInfo() || IsFunctionTemplateInfo(); 1983484964a86451e86dcf04be9bd8c0d76ee04f081rossberg@chromium.org} 1993484964a86451e86dcf04be9bd8c0d76ee04f081rossberg@chromium.org 2003484964a86451e86dcf04be9bd8c0d76ee04f081rossberg@chromium.org 2014a9f6553038df6b893b3d3ccae351723f4cbbae7yangguo@chromium.orgbool Object::IsInternalizedString() { 202870a0b67c822d289024711912e2512af01b66c3bager@chromium.org if (!this->IsHeapObject()) return false; 203870a0b67c822d289024711912e2512af01b66c3bager@chromium.org uint32_t type = HeapObject::cast(this)->map()->instance_type(); 204ba72ec861b69b67139c93fc6dd56f4a73c9b3135jkummerow@chromium.org STATIC_ASSERT(kNotInternalizedTag != 0); 205ba72ec861b69b67139c93fc6dd56f4a73c9b3135jkummerow@chromium.org return (type & (kIsNotStringMask | kIsNotInternalizedMask)) == 206ba72ec861b69b67139c93fc6dd56f4a73c9b3135jkummerow@chromium.org (kStringTag | kInternalizedTag); 20743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 20843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 20943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 210870a0b67c822d289024711912e2512af01b66c3bager@chromium.orgbool Object::IsConsString() { 2114668a2c7a746d01b382f23aa32e163701e3075f8ricow@chromium.org if (!IsString()) return false; 2124668a2c7a746d01b382f23aa32e163701e3075f8ricow@chromium.org return StringShape(String::cast(this)).IsCons(); 2134668a2c7a746d01b382f23aa32e163701e3075f8ricow@chromium.org} 2144668a2c7a746d01b382f23aa32e163701e3075f8ricow@chromium.org 2154668a2c7a746d01b382f23aa32e163701e3075f8ricow@chromium.org 2164668a2c7a746d01b382f23aa32e163701e3075f8ricow@chromium.orgbool Object::IsSlicedString() { 2174668a2c7a746d01b382f23aa32e163701e3075f8ricow@chromium.org if (!IsString()) return false; 2184668a2c7a746d01b382f23aa32e163701e3075f8ricow@chromium.org return StringShape(String::cast(this)).IsSliced(); 21943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 22043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 22143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 222870a0b67c822d289024711912e2512af01b66c3bager@chromium.orgbool Object::IsSeqString() { 223870a0b67c822d289024711912e2512af01b66c3bager@chromium.org if (!IsString()) return false; 224870a0b67c822d289024711912e2512af01b66c3bager@chromium.org return StringShape(String::cast(this)).IsSequential(); 225870a0b67c822d289024711912e2512af01b66c3bager@chromium.org} 226870a0b67c822d289024711912e2512af01b66c3bager@chromium.org 227870a0b67c822d289024711912e2512af01b66c3bager@chromium.org 228fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.orgbool Object::IsSeqOneByteString() { 229870a0b67c822d289024711912e2512af01b66c3bager@chromium.org if (!IsString()) return false; 230bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org return StringShape(String::cast(this)).IsSequential() && 2318e8d8825f97138de12985f8e0d3163074dff5258ulan@chromium.org String::cast(this)->IsOneByteRepresentation(); 2325a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org} 2335a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org 2345a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org 2357c537e2abe09729ed6cb827b4dd206470d8c4a42ager@chromium.orgbool Object::IsSeqTwoByteString() { 236870a0b67c822d289024711912e2512af01b66c3bager@chromium.org if (!IsString()) return false; 237bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org return StringShape(String::cast(this)).IsSequential() && 2385ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org String::cast(this)->IsTwoByteRepresentation(); 2397c537e2abe09729ed6cb827b4dd206470d8c4a42ager@chromium.org} 2407c537e2abe09729ed6cb827b4dd206470d8c4a42ager@chromium.org 2417c537e2abe09729ed6cb827b4dd206470d8c4a42ager@chromium.org 242870a0b67c822d289024711912e2512af01b66c3bager@chromium.orgbool Object::IsExternalString() { 243870a0b67c822d289024711912e2512af01b66c3bager@chromium.org if (!IsString()) return false; 244870a0b67c822d289024711912e2512af01b66c3bager@chromium.org return StringShape(String::cast(this)).IsExternal(); 2457c537e2abe09729ed6cb827b4dd206470d8c4a42ager@chromium.org} 2467c537e2abe09729ed6cb827b4dd206470d8c4a42ager@chromium.org 2477c537e2abe09729ed6cb827b4dd206470d8c4a42ager@chromium.org 248870a0b67c822d289024711912e2512af01b66c3bager@chromium.orgbool Object::IsExternalAsciiString() { 249870a0b67c822d289024711912e2512af01b66c3bager@chromium.org if (!IsString()) return false; 250bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org return StringShape(String::cast(this)).IsExternal() && 2518e8d8825f97138de12985f8e0d3163074dff5258ulan@chromium.org String::cast(this)->IsOneByteRepresentation(); 25243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 25343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 25443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 255870a0b67c822d289024711912e2512af01b66c3bager@chromium.orgbool Object::IsExternalTwoByteString() { 256870a0b67c822d289024711912e2512af01b66c3bager@chromium.org if (!IsString()) return false; 257bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org return StringShape(String::cast(this)).IsExternal() && 2585ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org String::cast(this)->IsTwoByteRepresentation(); 25943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 26043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 261e9fd6580f52407c94d77bfcb4be04207f2ebb2f1machenbach@chromium.org 2626d786c9805481bd13ecb29c3155540f2f32950e1svenpanne@chromium.orgbool Object::HasValidElements() { 2636d786c9805481bd13ecb29c3155540f2f32950e1svenpanne@chromium.org // Dictionary is covered under FixedArray. 2645c88bc39690cc94affe78cf5777eb8180c4af8a4machenbach@chromium.org return IsFixedArray() || IsFixedDoubleArray() || IsExternalArray() || 2655c88bc39690cc94affe78cf5777eb8180c4af8a4machenbach@chromium.org IsFixedTypedArrayBase(); 2666d786c9805481bd13ecb29c3155540f2f32950e1svenpanne@chromium.org} 26743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 26857ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org 269e9fd6580f52407c94d77bfcb4be04207f2ebb2f1machenbach@chromium.orgHandle<Object> Object::NewStorageFor(Isolate* isolate, 270e9fd6580f52407c94d77bfcb4be04207f2ebb2f1machenbach@chromium.org Handle<Object> object, 271e9fd6580f52407c94d77bfcb4be04207f2ebb2f1machenbach@chromium.org Representation representation) { 272e9fd6580f52407c94d77bfcb4be04207f2ebb2f1machenbach@chromium.org if (representation.IsSmi() && object->IsUninitialized()) { 273e9fd6580f52407c94d77bfcb4be04207f2ebb2f1machenbach@chromium.org return handle(Smi::FromInt(0), isolate); 27471ea97f146aa116d61baeba1912b87a60feda71fhpayer@chromium.org } 275e9fd6580f52407c94d77bfcb4be04207f2ebb2f1machenbach@chromium.org if (!representation.IsDouble()) return object; 276e9fd6580f52407c94d77bfcb4be04207f2ebb2f1machenbach@chromium.org if (object->IsUninitialized()) { 277e9fd6580f52407c94d77bfcb4be04207f2ebb2f1machenbach@chromium.org return isolate->factory()->NewHeapNumber(0); 2781fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org } 279e9fd6580f52407c94d77bfcb4be04207f2ebb2f1machenbach@chromium.org return isolate->factory()->NewHeapNumber(object->Number()); 28057ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org} 28157ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org 28257ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.org 283870a0b67c822d289024711912e2512af01b66c3bager@chromium.orgStringShape::StringShape(String* str) 284870a0b67c822d289024711912e2512af01b66c3bager@chromium.org : type_(str->map()->instance_type()) { 285870a0b67c822d289024711912e2512af01b66c3bager@chromium.org set_valid(); 286870a0b67c822d289024711912e2512af01b66c3bager@chromium.org ASSERT((type_ & kIsNotStringMask) == kStringTag); 28743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 28843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 28943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 290870a0b67c822d289024711912e2512af01b66c3bager@chromium.orgStringShape::StringShape(Map* map) 291870a0b67c822d289024711912e2512af01b66c3bager@chromium.org : type_(map->instance_type()) { 292870a0b67c822d289024711912e2512af01b66c3bager@chromium.org set_valid(); 293870a0b67c822d289024711912e2512af01b66c3bager@chromium.org ASSERT((type_ & kIsNotStringMask) == kStringTag); 29443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 29543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 29643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 297870a0b67c822d289024711912e2512af01b66c3bager@chromium.orgStringShape::StringShape(InstanceType t) 298870a0b67c822d289024711912e2512af01b66c3bager@chromium.org : type_(static_cast<uint32_t>(t)) { 299870a0b67c822d289024711912e2512af01b66c3bager@chromium.org set_valid(); 300870a0b67c822d289024711912e2512af01b66c3bager@chromium.org ASSERT((type_ & kIsNotStringMask) == kStringTag); 30143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 30243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 30343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 3044a9f6553038df6b893b3d3ccae351723f4cbbae7yangguo@chromium.orgbool StringShape::IsInternalized() { 305870a0b67c822d289024711912e2512af01b66c3bager@chromium.org ASSERT(valid()); 306ba72ec861b69b67139c93fc6dd56f4a73c9b3135jkummerow@chromium.org STATIC_ASSERT(kNotInternalizedTag != 0); 307ba72ec861b69b67139c93fc6dd56f4a73c9b3135jkummerow@chromium.org return (type_ & (kIsNotStringMask | kIsNotInternalizedMask)) == 308ba72ec861b69b67139c93fc6dd56f4a73c9b3135jkummerow@chromium.org (kStringTag | kInternalizedTag); 30943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 31043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 31143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 3128e8d8825f97138de12985f8e0d3163074dff5258ulan@chromium.orgbool String::IsOneByteRepresentation() { 3135ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org uint32_t type = map()->instance_type(); 314e4ac3ef2f6fa9300bc78c5a4cb7d4cb66ac6e83dmvstanton@chromium.org return (type & kStringEncodingMask) == kOneByteStringTag; 31543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 31643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 31743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 3185ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.orgbool String::IsTwoByteRepresentation() { 3195ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org uint32_t type = map()->instance_type(); 3205ec4892aef9cca42940d7d92302abf674365f6b7ager@chromium.org return (type & kStringEncodingMask) == kTwoByteStringTag; 32143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 32243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 32343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 3248e8d8825f97138de12985f8e0d3163074dff5258ulan@chromium.orgbool String::IsOneByteRepresentationUnderneath() { 3254668a2c7a746d01b382f23aa32e163701e3075f8ricow@chromium.org uint32_t type = map()->instance_type(); 3264668a2c7a746d01b382f23aa32e163701e3075f8ricow@chromium.org STATIC_ASSERT(kIsIndirectStringTag != 0); 3274668a2c7a746d01b382f23aa32e163701e3075f8ricow@chromium.org STATIC_ASSERT((kIsIndirectStringMask & kStringEncodingMask) == 0); 3284668a2c7a746d01b382f23aa32e163701e3075f8ricow@chromium.org ASSERT(IsFlat()); 3294668a2c7a746d01b382f23aa32e163701e3075f8ricow@chromium.org switch (type & (kIsIndirectStringMask | kStringEncodingMask)) { 330e4ac3ef2f6fa9300bc78c5a4cb7d4cb66ac6e83dmvstanton@chromium.org case kOneByteStringTag: 3314668a2c7a746d01b382f23aa32e163701e3075f8ricow@chromium.org return true; 3324668a2c7a746d01b382f23aa32e163701e3075f8ricow@chromium.org case kTwoByteStringTag: 3334668a2c7a746d01b382f23aa32e163701e3075f8ricow@chromium.org return false; 3344668a2c7a746d01b382f23aa32e163701e3075f8ricow@chromium.org default: // Cons or sliced string. Need to go deeper. 3358e8d8825f97138de12985f8e0d3163074dff5258ulan@chromium.org return GetUnderlying()->IsOneByteRepresentation(); 3364668a2c7a746d01b382f23aa32e163701e3075f8ricow@chromium.org } 3374668a2c7a746d01b382f23aa32e163701e3075f8ricow@chromium.org} 3384668a2c7a746d01b382f23aa32e163701e3075f8ricow@chromium.org 3394668a2c7a746d01b382f23aa32e163701e3075f8ricow@chromium.org 3404668a2c7a746d01b382f23aa32e163701e3075f8ricow@chromium.orgbool String::IsTwoByteRepresentationUnderneath() { 3414668a2c7a746d01b382f23aa32e163701e3075f8ricow@chromium.org uint32_t type = map()->instance_type(); 3424668a2c7a746d01b382f23aa32e163701e3075f8ricow@chromium.org STATIC_ASSERT(kIsIndirectStringTag != 0); 3434668a2c7a746d01b382f23aa32e163701e3075f8ricow@chromium.org STATIC_ASSERT((kIsIndirectStringMask & kStringEncodingMask) == 0); 3444668a2c7a746d01b382f23aa32e163701e3075f8ricow@chromium.org ASSERT(IsFlat()); 3454668a2c7a746d01b382f23aa32e163701e3075f8ricow@chromium.org switch (type & (kIsIndirectStringMask | kStringEncodingMask)) { 346e4ac3ef2f6fa9300bc78c5a4cb7d4cb66ac6e83dmvstanton@chromium.org case kOneByteStringTag: 3474668a2c7a746d01b382f23aa32e163701e3075f8ricow@chromium.org return false; 3484668a2c7a746d01b382f23aa32e163701e3075f8ricow@chromium.org case kTwoByteStringTag: 3494668a2c7a746d01b382f23aa32e163701e3075f8ricow@chromium.org return true; 3504668a2c7a746d01b382f23aa32e163701e3075f8ricow@chromium.org default: // Cons or sliced string. Need to go deeper. 3514668a2c7a746d01b382f23aa32e163701e3075f8ricow@chromium.org return GetUnderlying()->IsTwoByteRepresentation(); 3524668a2c7a746d01b382f23aa32e163701e3075f8ricow@chromium.org } 3534668a2c7a746d01b382f23aa32e163701e3075f8ricow@chromium.org} 3544668a2c7a746d01b382f23aa32e163701e3075f8ricow@chromium.org 3554668a2c7a746d01b382f23aa32e163701e3075f8ricow@chromium.org 356ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.orgbool String::HasOnlyOneByteChars() { 3575ad5acef6bd4ebc785f946d8bcc2a88b1e031827ricow@chromium.org uint32_t type = map()->instance_type(); 358f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org return (type & kOneByteDataHintMask) == kOneByteDataHintTag || 359f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org IsOneByteRepresentation(); 36059297c735ad2a41156ae9c723a39ff259ad061e0jkummerow@chromium.org} 36159297c735ad2a41156ae9c723a39ff259ad061e0jkummerow@chromium.org 36259297c735ad2a41156ae9c723a39ff259ad061e0jkummerow@chromium.org 363870a0b67c822d289024711912e2512af01b66c3bager@chromium.orgbool StringShape::IsCons() { 364870a0b67c822d289024711912e2512af01b66c3bager@chromium.org return (type_ & kStringRepresentationMask) == kConsStringTag; 365870a0b67c822d289024711912e2512af01b66c3bager@chromium.org} 366870a0b67c822d289024711912e2512af01b66c3bager@chromium.org 367870a0b67c822d289024711912e2512af01b66c3bager@chromium.org 3684668a2c7a746d01b382f23aa32e163701e3075f8ricow@chromium.orgbool StringShape::IsSliced() { 3694668a2c7a746d01b382f23aa32e163701e3075f8ricow@chromium.org return (type_ & kStringRepresentationMask) == kSlicedStringTag; 3704668a2c7a746d01b382f23aa32e163701e3075f8ricow@chromium.org} 3714668a2c7a746d01b382f23aa32e163701e3075f8ricow@chromium.org 3724668a2c7a746d01b382f23aa32e163701e3075f8ricow@chromium.org 3734668a2c7a746d01b382f23aa32e163701e3075f8ricow@chromium.orgbool StringShape::IsIndirect() { 3744668a2c7a746d01b382f23aa32e163701e3075f8ricow@chromium.org return (type_ & kIsIndirectStringMask) == kIsIndirectStringTag; 3754668a2c7a746d01b382f23aa32e163701e3075f8ricow@chromium.org} 3764668a2c7a746d01b382f23aa32e163701e3075f8ricow@chromium.org 3774668a2c7a746d01b382f23aa32e163701e3075f8ricow@chromium.org 378870a0b67c822d289024711912e2512af01b66c3bager@chromium.orgbool StringShape::IsExternal() { 379870a0b67c822d289024711912e2512af01b66c3bager@chromium.org return (type_ & kStringRepresentationMask) == kExternalStringTag; 380870a0b67c822d289024711912e2512af01b66c3bager@chromium.org} 381870a0b67c822d289024711912e2512af01b66c3bager@chromium.org 382870a0b67c822d289024711912e2512af01b66c3bager@chromium.org 383870a0b67c822d289024711912e2512af01b66c3bager@chromium.orgbool StringShape::IsSequential() { 384870a0b67c822d289024711912e2512af01b66c3bager@chromium.org return (type_ & kStringRepresentationMask) == kSeqStringTag; 385870a0b67c822d289024711912e2512af01b66c3bager@chromium.org} 386870a0b67c822d289024711912e2512af01b66c3bager@chromium.org 387870a0b67c822d289024711912e2512af01b66c3bager@chromium.org 388870a0b67c822d289024711912e2512af01b66c3bager@chromium.orgStringRepresentationTag StringShape::representation_tag() { 389870a0b67c822d289024711912e2512af01b66c3bager@chromium.org uint32_t tag = (type_ & kStringRepresentationMask); 390870a0b67c822d289024711912e2512af01b66c3bager@chromium.org return static_cast<StringRepresentationTag>(tag); 391870a0b67c822d289024711912e2512af01b66c3bager@chromium.org} 392870a0b67c822d289024711912e2512af01b66c3bager@chromium.org 393870a0b67c822d289024711912e2512af01b66c3bager@chromium.org 394ddd545c4c343dcf4331b9d80d2a0bdfa373a4a0fricow@chromium.orguint32_t StringShape::encoding_tag() { 395ddd545c4c343dcf4331b9d80d2a0bdfa373a4a0fricow@chromium.org return type_ & kStringEncodingMask; 396ddd545c4c343dcf4331b9d80d2a0bdfa373a4a0fricow@chromium.org} 397ddd545c4c343dcf4331b9d80d2a0bdfa373a4a0fricow@chromium.org 398ddd545c4c343dcf4331b9d80d2a0bdfa373a4a0fricow@chromium.org 399870a0b67c822d289024711912e2512af01b66c3bager@chromium.orguint32_t StringShape::full_representation_tag() { 400870a0b67c822d289024711912e2512af01b66c3bager@chromium.org return (type_ & (kStringRepresentationMask | kStringEncodingMask)); 401870a0b67c822d289024711912e2512af01b66c3bager@chromium.org} 402870a0b67c822d289024711912e2512af01b66c3bager@chromium.org 403870a0b67c822d289024711912e2512af01b66c3bager@chromium.org 404d06b9264b1c886fc80a100e9915cf8ae07fdb4e5machenbach@chromium.orgSTATIC_ASSERT((kStringRepresentationMask | kStringEncodingMask) == 40518ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org Internals::kFullStringRepresentationMask); 40618ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org 407d06b9264b1c886fc80a100e9915cf8ae07fdb4e5machenbach@chromium.orgSTATIC_ASSERT(static_cast<uint32_t>(kStringEncodingMask) == 40856c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org Internals::kStringEncodingMask); 40956c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org 41018ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org 411870a0b67c822d289024711912e2512af01b66c3bager@chromium.orgbool StringShape::IsSequentialAscii() { 412e4ac3ef2f6fa9300bc78c5a4cb7d4cb66ac6e83dmvstanton@chromium.org return full_representation_tag() == (kSeqStringTag | kOneByteStringTag); 413870a0b67c822d289024711912e2512af01b66c3bager@chromium.org} 414870a0b67c822d289024711912e2512af01b66c3bager@chromium.org 415870a0b67c822d289024711912e2512af01b66c3bager@chromium.org 416870a0b67c822d289024711912e2512af01b66c3bager@chromium.orgbool StringShape::IsSequentialTwoByte() { 41780787b746bb069464275b81973655617c0c62872ager@chromium.org return full_representation_tag() == (kSeqStringTag | kTwoByteStringTag); 418870a0b67c822d289024711912e2512af01b66c3bager@chromium.org} 419870a0b67c822d289024711912e2512af01b66c3bager@chromium.org 420870a0b67c822d289024711912e2512af01b66c3bager@chromium.org 421870a0b67c822d289024711912e2512af01b66c3bager@chromium.orgbool StringShape::IsExternalAscii() { 422e4ac3ef2f6fa9300bc78c5a4cb7d4cb66ac6e83dmvstanton@chromium.org return full_representation_tag() == (kExternalStringTag | kOneByteStringTag); 423870a0b67c822d289024711912e2512af01b66c3bager@chromium.org} 424870a0b67c822d289024711912e2512af01b66c3bager@chromium.org 425870a0b67c822d289024711912e2512af01b66c3bager@chromium.org 426d06b9264b1c886fc80a100e9915cf8ae07fdb4e5machenbach@chromium.orgSTATIC_ASSERT((kExternalStringTag | kOneByteStringTag) == 42756c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org Internals::kExternalAsciiRepresentationTag); 42856c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org 429d06b9264b1c886fc80a100e9915cf8ae07fdb4e5machenbach@chromium.orgSTATIC_ASSERT(v8::String::ASCII_ENCODING == kOneByteStringTag); 43056c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org 43156c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org 432870a0b67c822d289024711912e2512af01b66c3bager@chromium.orgbool StringShape::IsExternalTwoByte() { 43380787b746bb069464275b81973655617c0c62872ager@chromium.org return full_representation_tag() == (kExternalStringTag | kTwoByteStringTag); 43443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 43543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 43643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 437d06b9264b1c886fc80a100e9915cf8ae07fdb4e5machenbach@chromium.orgSTATIC_ASSERT((kExternalStringTag | kTwoByteStringTag) == 43818ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org Internals::kExternalTwoByteRepresentationTag); 43918ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org 440d06b9264b1c886fc80a100e9915cf8ae07fdb4e5machenbach@chromium.orgSTATIC_ASSERT(v8::String::TWO_BYTE_ENCODING == kTwoByteStringTag); 44118ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org 442a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.orguc32 FlatStringReader::Get(int index) { 443a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org ASSERT(0 <= index && index <= length_); 444a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org if (is_ascii_) { 445a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org return static_cast<const byte*>(start_)[index]; 446a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org } else { 447a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org return static_cast<const uc16*>(start_)[index]; 448a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org } 449a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org} 450a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org 451a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org 452865f51ff8c94f86f4c97636d70addc0f29e79674machenbach@chromium.orgHandle<Object> StringTableShape::AsHandle(Isolate* isolate, HashTableKey* key) { 453865f51ff8c94f86f4c97636d70addc0f29e79674machenbach@chromium.org return key->AsHandle(isolate); 454b67f96038c787a6bd6a835e6c436c82e1b245486machenbach@chromium.org} 455b67f96038c787a6bd6a835e6c436c82e1b245486machenbach@chromium.org 456b67f96038c787a6bd6a835e6c436c82e1b245486machenbach@chromium.org 457865f51ff8c94f86f4c97636d70addc0f29e79674machenbach@chromium.orgHandle<Object> MapCacheShape::AsHandle(Isolate* isolate, HashTableKey* key) { 458865f51ff8c94f86f4c97636d70addc0f29e79674machenbach@chromium.org return key->AsHandle(isolate); 459865f51ff8c94f86f4c97636d70addc0f29e79674machenbach@chromium.org} 460865f51ff8c94f86f4c97636d70addc0f29e79674machenbach@chromium.org 461865f51ff8c94f86f4c97636d70addc0f29e79674machenbach@chromium.org 462865f51ff8c94f86f4c97636d70addc0f29e79674machenbach@chromium.orgHandle<Object> CompilationCacheShape::AsHandle(Isolate* isolate, 463865f51ff8c94f86f4c97636d70addc0f29e79674machenbach@chromium.org HashTableKey* key) { 464865f51ff8c94f86f4c97636d70addc0f29e79674machenbach@chromium.org return key->AsHandle(isolate); 465865f51ff8c94f86f4c97636d70addc0f29e79674machenbach@chromium.org} 466865f51ff8c94f86f4c97636d70addc0f29e79674machenbach@chromium.org 467865f51ff8c94f86f4c97636d70addc0f29e79674machenbach@chromium.org 468865f51ff8c94f86f4c97636d70addc0f29e79674machenbach@chromium.orgHandle<Object> CodeCacheHashTableShape::AsHandle(Isolate* isolate, 469865f51ff8c94f86f4c97636d70addc0f29e79674machenbach@chromium.org HashTableKey* key) { 470865f51ff8c94f86f4c97636d70addc0f29e79674machenbach@chromium.org return key->AsHandle(isolate); 471865f51ff8c94f86f4c97636d70addc0f29e79674machenbach@chromium.org} 472865f51ff8c94f86f4c97636d70addc0f29e79674machenbach@chromium.org 47343c51e51fafad9405752a3d7e953367531469575machenbach@chromium.orgtemplate <typename Char> 47443c51e51fafad9405752a3d7e953367531469575machenbach@chromium.orgclass SequentialStringKey : public HashTableKey { 47543c51e51fafad9405752a3d7e953367531469575machenbach@chromium.org public: 47643c51e51fafad9405752a3d7e953367531469575machenbach@chromium.org explicit SequentialStringKey(Vector<const Char> string, uint32_t seed) 47743c51e51fafad9405752a3d7e953367531469575machenbach@chromium.org : string_(string), hash_field_(0), seed_(seed) { } 47843c51e51fafad9405752a3d7e953367531469575machenbach@chromium.org 479b67f96038c787a6bd6a835e6c436c82e1b245486machenbach@chromium.org virtual uint32_t Hash() V8_OVERRIDE { 48043c51e51fafad9405752a3d7e953367531469575machenbach@chromium.org hash_field_ = StringHasher::HashSequentialString<Char>(string_.start(), 48143c51e51fafad9405752a3d7e953367531469575machenbach@chromium.org string_.length(), 48243c51e51fafad9405752a3d7e953367531469575machenbach@chromium.org seed_); 48343c51e51fafad9405752a3d7e953367531469575machenbach@chromium.org 48443c51e51fafad9405752a3d7e953367531469575machenbach@chromium.org uint32_t result = hash_field_ >> String::kHashShift; 48543c51e51fafad9405752a3d7e953367531469575machenbach@chromium.org ASSERT(result != 0); // Ensure that the hash value of 0 is never computed. 48643c51e51fafad9405752a3d7e953367531469575machenbach@chromium.org return result; 48743c51e51fafad9405752a3d7e953367531469575machenbach@chromium.org } 48843c51e51fafad9405752a3d7e953367531469575machenbach@chromium.org 48943c51e51fafad9405752a3d7e953367531469575machenbach@chromium.org 490b67f96038c787a6bd6a835e6c436c82e1b245486machenbach@chromium.org virtual uint32_t HashForObject(Object* other) V8_OVERRIDE { 49143c51e51fafad9405752a3d7e953367531469575machenbach@chromium.org return String::cast(other)->Hash(); 49243c51e51fafad9405752a3d7e953367531469575machenbach@chromium.org } 49343c51e51fafad9405752a3d7e953367531469575machenbach@chromium.org 49443c51e51fafad9405752a3d7e953367531469575machenbach@chromium.org Vector<const Char> string_; 49543c51e51fafad9405752a3d7e953367531469575machenbach@chromium.org uint32_t hash_field_; 49643c51e51fafad9405752a3d7e953367531469575machenbach@chromium.org uint32_t seed_; 49743c51e51fafad9405752a3d7e953367531469575machenbach@chromium.org}; 49843c51e51fafad9405752a3d7e953367531469575machenbach@chromium.org 49943c51e51fafad9405752a3d7e953367531469575machenbach@chromium.org 50043c51e51fafad9405752a3d7e953367531469575machenbach@chromium.orgclass OneByteStringKey : public SequentialStringKey<uint8_t> { 50143c51e51fafad9405752a3d7e953367531469575machenbach@chromium.org public: 50243c51e51fafad9405752a3d7e953367531469575machenbach@chromium.org OneByteStringKey(Vector<const uint8_t> str, uint32_t seed) 50343c51e51fafad9405752a3d7e953367531469575machenbach@chromium.org : SequentialStringKey<uint8_t>(str, seed) { } 50443c51e51fafad9405752a3d7e953367531469575machenbach@chromium.org 505b67f96038c787a6bd6a835e6c436c82e1b245486machenbach@chromium.org virtual bool IsMatch(Object* string) V8_OVERRIDE { 50643c51e51fafad9405752a3d7e953367531469575machenbach@chromium.org return String::cast(string)->IsOneByteEqualTo(string_); 50743c51e51fafad9405752a3d7e953367531469575machenbach@chromium.org } 50843c51e51fafad9405752a3d7e953367531469575machenbach@chromium.org 509865f51ff8c94f86f4c97636d70addc0f29e79674machenbach@chromium.org virtual Handle<Object> AsHandle(Isolate* isolate) V8_OVERRIDE; 51043c51e51fafad9405752a3d7e953367531469575machenbach@chromium.org}; 51143c51e51fafad9405752a3d7e953367531469575machenbach@chromium.org 51243c51e51fafad9405752a3d7e953367531469575machenbach@chromium.org 51309cae8d7af4e66e8d0088c19dcd0033042fa8a6bmachenbach@chromium.orgtemplate<class Char> 51409cae8d7af4e66e8d0088c19dcd0033042fa8a6bmachenbach@chromium.orgclass SubStringKey : public HashTableKey { 51543c51e51fafad9405752a3d7e953367531469575machenbach@chromium.org public: 51609cae8d7af4e66e8d0088c19dcd0033042fa8a6bmachenbach@chromium.org SubStringKey(Handle<String> string, int from, int length) 51709cae8d7af4e66e8d0088c19dcd0033042fa8a6bmachenbach@chromium.org : string_(string), from_(from), length_(length) { 51809cae8d7af4e66e8d0088c19dcd0033042fa8a6bmachenbach@chromium.org if (string_->IsSlicedString()) { 51909cae8d7af4e66e8d0088c19dcd0033042fa8a6bmachenbach@chromium.org string_ = Handle<String>(Unslice(*string_, &from_)); 52009cae8d7af4e66e8d0088c19dcd0033042fa8a6bmachenbach@chromium.org } 52109cae8d7af4e66e8d0088c19dcd0033042fa8a6bmachenbach@chromium.org ASSERT(string_->IsSeqString() || string->IsExternalString()); 52209cae8d7af4e66e8d0088c19dcd0033042fa8a6bmachenbach@chromium.org } 52343c51e51fafad9405752a3d7e953367531469575machenbach@chromium.org 524b67f96038c787a6bd6a835e6c436c82e1b245486machenbach@chromium.org virtual uint32_t Hash() V8_OVERRIDE { 52543c51e51fafad9405752a3d7e953367531469575machenbach@chromium.org ASSERT(length_ >= 0); 52643c51e51fafad9405752a3d7e953367531469575machenbach@chromium.org ASSERT(from_ + length_ <= string_->length()); 52709cae8d7af4e66e8d0088c19dcd0033042fa8a6bmachenbach@chromium.org const Char* chars = GetChars() + from_; 52843c51e51fafad9405752a3d7e953367531469575machenbach@chromium.org hash_field_ = StringHasher::HashSequentialString( 52943c51e51fafad9405752a3d7e953367531469575machenbach@chromium.org chars, length_, string_->GetHeap()->HashSeed()); 53043c51e51fafad9405752a3d7e953367531469575machenbach@chromium.org uint32_t result = hash_field_ >> String::kHashShift; 53143c51e51fafad9405752a3d7e953367531469575machenbach@chromium.org ASSERT(result != 0); // Ensure that the hash value of 0 is never computed. 53243c51e51fafad9405752a3d7e953367531469575machenbach@chromium.org return result; 53343c51e51fafad9405752a3d7e953367531469575machenbach@chromium.org } 53443c51e51fafad9405752a3d7e953367531469575machenbach@chromium.org 535b67f96038c787a6bd6a835e6c436c82e1b245486machenbach@chromium.org virtual uint32_t HashForObject(Object* other) V8_OVERRIDE { 53643c51e51fafad9405752a3d7e953367531469575machenbach@chromium.org return String::cast(other)->Hash(); 53743c51e51fafad9405752a3d7e953367531469575machenbach@chromium.org } 53843c51e51fafad9405752a3d7e953367531469575machenbach@chromium.org 539b67f96038c787a6bd6a835e6c436c82e1b245486machenbach@chromium.org virtual bool IsMatch(Object* string) V8_OVERRIDE; 540865f51ff8c94f86f4c97636d70addc0f29e79674machenbach@chromium.org virtual Handle<Object> AsHandle(Isolate* isolate) V8_OVERRIDE; 54143c51e51fafad9405752a3d7e953367531469575machenbach@chromium.org 54243c51e51fafad9405752a3d7e953367531469575machenbach@chromium.org private: 54309cae8d7af4e66e8d0088c19dcd0033042fa8a6bmachenbach@chromium.org const Char* GetChars(); 54409cae8d7af4e66e8d0088c19dcd0033042fa8a6bmachenbach@chromium.org String* Unslice(String* string, int* offset) { 54509cae8d7af4e66e8d0088c19dcd0033042fa8a6bmachenbach@chromium.org while (string->IsSlicedString()) { 54609cae8d7af4e66e8d0088c19dcd0033042fa8a6bmachenbach@chromium.org SlicedString* sliced = SlicedString::cast(string); 54709cae8d7af4e66e8d0088c19dcd0033042fa8a6bmachenbach@chromium.org *offset += sliced->offset(); 54809cae8d7af4e66e8d0088c19dcd0033042fa8a6bmachenbach@chromium.org string = sliced->parent(); 54909cae8d7af4e66e8d0088c19dcd0033042fa8a6bmachenbach@chromium.org } 55009cae8d7af4e66e8d0088c19dcd0033042fa8a6bmachenbach@chromium.org return string; 55109cae8d7af4e66e8d0088c19dcd0033042fa8a6bmachenbach@chromium.org } 55209cae8d7af4e66e8d0088c19dcd0033042fa8a6bmachenbach@chromium.org 55309cae8d7af4e66e8d0088c19dcd0033042fa8a6bmachenbach@chromium.org Handle<String> string_; 55443c51e51fafad9405752a3d7e953367531469575machenbach@chromium.org int from_; 55543c51e51fafad9405752a3d7e953367531469575machenbach@chromium.org int length_; 55643c51e51fafad9405752a3d7e953367531469575machenbach@chromium.org uint32_t hash_field_; 55743c51e51fafad9405752a3d7e953367531469575machenbach@chromium.org}; 55843c51e51fafad9405752a3d7e953367531469575machenbach@chromium.org 55943c51e51fafad9405752a3d7e953367531469575machenbach@chromium.org 56043c51e51fafad9405752a3d7e953367531469575machenbach@chromium.orgclass TwoByteStringKey : public SequentialStringKey<uc16> { 56143c51e51fafad9405752a3d7e953367531469575machenbach@chromium.org public: 56243c51e51fafad9405752a3d7e953367531469575machenbach@chromium.org explicit TwoByteStringKey(Vector<const uc16> str, uint32_t seed) 56343c51e51fafad9405752a3d7e953367531469575machenbach@chromium.org : SequentialStringKey<uc16>(str, seed) { } 56443c51e51fafad9405752a3d7e953367531469575machenbach@chromium.org 565b67f96038c787a6bd6a835e6c436c82e1b245486machenbach@chromium.org virtual bool IsMatch(Object* string) V8_OVERRIDE { 56643c51e51fafad9405752a3d7e953367531469575machenbach@chromium.org return String::cast(string)->IsTwoByteEqualTo(string_); 56743c51e51fafad9405752a3d7e953367531469575machenbach@chromium.org } 56843c51e51fafad9405752a3d7e953367531469575machenbach@chromium.org 569865f51ff8c94f86f4c97636d70addc0f29e79674machenbach@chromium.org virtual Handle<Object> AsHandle(Isolate* isolate) V8_OVERRIDE; 57043c51e51fafad9405752a3d7e953367531469575machenbach@chromium.org}; 57143c51e51fafad9405752a3d7e953367531469575machenbach@chromium.org 57243c51e51fafad9405752a3d7e953367531469575machenbach@chromium.org 57343c51e51fafad9405752a3d7e953367531469575machenbach@chromium.org// Utf8StringKey carries a vector of chars as key. 57443c51e51fafad9405752a3d7e953367531469575machenbach@chromium.orgclass Utf8StringKey : public HashTableKey { 57543c51e51fafad9405752a3d7e953367531469575machenbach@chromium.org public: 57643c51e51fafad9405752a3d7e953367531469575machenbach@chromium.org explicit Utf8StringKey(Vector<const char> string, uint32_t seed) 57743c51e51fafad9405752a3d7e953367531469575machenbach@chromium.org : string_(string), hash_field_(0), seed_(seed) { } 57843c51e51fafad9405752a3d7e953367531469575machenbach@chromium.org 579b67f96038c787a6bd6a835e6c436c82e1b245486machenbach@chromium.org virtual bool IsMatch(Object* string) V8_OVERRIDE { 58043c51e51fafad9405752a3d7e953367531469575machenbach@chromium.org return String::cast(string)->IsUtf8EqualTo(string_); 58143c51e51fafad9405752a3d7e953367531469575machenbach@chromium.org } 58243c51e51fafad9405752a3d7e953367531469575machenbach@chromium.org 583b67f96038c787a6bd6a835e6c436c82e1b245486machenbach@chromium.org virtual uint32_t Hash() V8_OVERRIDE { 58443c51e51fafad9405752a3d7e953367531469575machenbach@chromium.org if (hash_field_ != 0) return hash_field_ >> String::kHashShift; 58543c51e51fafad9405752a3d7e953367531469575machenbach@chromium.org hash_field_ = StringHasher::ComputeUtf8Hash(string_, seed_, &chars_); 58643c51e51fafad9405752a3d7e953367531469575machenbach@chromium.org uint32_t result = hash_field_ >> String::kHashShift; 58743c51e51fafad9405752a3d7e953367531469575machenbach@chromium.org ASSERT(result != 0); // Ensure that the hash value of 0 is never computed. 58843c51e51fafad9405752a3d7e953367531469575machenbach@chromium.org return result; 58943c51e51fafad9405752a3d7e953367531469575machenbach@chromium.org } 59043c51e51fafad9405752a3d7e953367531469575machenbach@chromium.org 591b67f96038c787a6bd6a835e6c436c82e1b245486machenbach@chromium.org virtual uint32_t HashForObject(Object* other) V8_OVERRIDE { 59243c51e51fafad9405752a3d7e953367531469575machenbach@chromium.org return String::cast(other)->Hash(); 59343c51e51fafad9405752a3d7e953367531469575machenbach@chromium.org } 59443c51e51fafad9405752a3d7e953367531469575machenbach@chromium.org 595865f51ff8c94f86f4c97636d70addc0f29e79674machenbach@chromium.org virtual Handle<Object> AsHandle(Isolate* isolate) V8_OVERRIDE { 59643c51e51fafad9405752a3d7e953367531469575machenbach@chromium.org if (hash_field_ == 0) Hash(); 597865f51ff8c94f86f4c97636d70addc0f29e79674machenbach@chromium.org return isolate->factory()->NewInternalizedStringFromUtf8( 598865f51ff8c94f86f4c97636d70addc0f29e79674machenbach@chromium.org string_, chars_, hash_field_); 59943c51e51fafad9405752a3d7e953367531469575machenbach@chromium.org } 60043c51e51fafad9405752a3d7e953367531469575machenbach@chromium.org 60143c51e51fafad9405752a3d7e953367531469575machenbach@chromium.org Vector<const char> string_; 60243c51e51fafad9405752a3d7e953367531469575machenbach@chromium.org uint32_t hash_field_; 60343c51e51fafad9405752a3d7e953367531469575machenbach@chromium.org int chars_; // Caches the number of characters when computing the hash code. 60443c51e51fafad9405752a3d7e953367531469575machenbach@chromium.org uint32_t seed_; 60543c51e51fafad9405752a3d7e953367531469575machenbach@chromium.org}; 60643c51e51fafad9405752a3d7e953367531469575machenbach@chromium.org 60743c51e51fafad9405752a3d7e953367531469575machenbach@chromium.org 60843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenbool Object::IsNumber() { 60943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return IsSmi() || IsHeapNumber(); 61043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 61143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 61243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 613394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.comTYPE_CHECKER(ByteArray, BYTE_ARRAY_TYPE) 614394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.comTYPE_CHECKER(FreeSpace, FREE_SPACE_TYPE) 615c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com 616c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com 617c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.combool Object::IsFiller() { 618c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com if (!Object::IsHeapObject()) return false; 619c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com InstanceType instance_type = HeapObject::cast(this)->map()->instance_type(); 620c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com return instance_type == FREE_SPACE_TYPE || instance_type == FILLER_TYPE; 621c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com} 622c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com 623c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com 6243811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.orgbool Object::IsExternalArray() { 6253811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org if (!Object::IsHeapObject()) 6263811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org return false; 6273811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org InstanceType instance_type = 6283811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org HeapObject::cast(this)->map()->instance_type(); 6290c20e676f8a0209982ff89e5a9c707771748a585fschneider@chromium.org return (instance_type >= FIRST_EXTERNAL_ARRAY_TYPE && 6300c20e676f8a0209982ff89e5a9c707771748a585fschneider@chromium.org instance_type <= LAST_EXTERNAL_ARRAY_TYPE); 6313811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org} 6323811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org 6333811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org 634af4fba3c6d2a18866505de3e6798757dd1448c6dmachenbach@chromium.org#define TYPED_ARRAY_TYPE_CHECKER(Type, type, TYPE, ctype, size) \ 635af4fba3c6d2a18866505de3e6798757dd1448c6dmachenbach@chromium.org TYPE_CHECKER(External##Type##Array, EXTERNAL_##TYPE##_ARRAY_TYPE) \ 636af4fba3c6d2a18866505de3e6798757dd1448c6dmachenbach@chromium.org TYPE_CHECKER(Fixed##Type##Array, FIXED_##TYPE##_ARRAY_TYPE) 637af4fba3c6d2a18866505de3e6798757dd1448c6dmachenbach@chromium.org 638af4fba3c6d2a18866505de3e6798757dd1448c6dmachenbach@chromium.orgTYPED_ARRAYS(TYPED_ARRAY_TYPE_CHECKER) 639af4fba3c6d2a18866505de3e6798757dd1448c6dmachenbach@chromium.org#undef TYPED_ARRAY_TYPE_CHECKER 6403847bd5ff857259e945a01d75fdb383e2351d166erik.corry@gmail.com 6413847bd5ff857259e945a01d75fdb383e2351d166erik.corry@gmail.com 6425c88bc39690cc94affe78cf5777eb8180c4af8a4machenbach@chromium.orgbool Object::IsFixedTypedArrayBase() { 6435c88bc39690cc94affe78cf5777eb8180c4af8a4machenbach@chromium.org if (!Object::IsHeapObject()) return false; 6445c88bc39690cc94affe78cf5777eb8180c4af8a4machenbach@chromium.org 6455c88bc39690cc94affe78cf5777eb8180c4af8a4machenbach@chromium.org InstanceType instance_type = 6465c88bc39690cc94affe78cf5777eb8180c4af8a4machenbach@chromium.org HeapObject::cast(this)->map()->instance_type(); 6475c88bc39690cc94affe78cf5777eb8180c4af8a4machenbach@chromium.org return (instance_type >= FIRST_FIXED_TYPED_ARRAY_TYPE && 6485c88bc39690cc94affe78cf5777eb8180c4af8a4machenbach@chromium.org instance_type <= LAST_FIXED_TYPED_ARRAY_TYPE); 6495c88bc39690cc94affe78cf5777eb8180c4af8a4machenbach@chromium.org} 6505c88bc39690cc94affe78cf5777eb8180c4af8a4machenbach@chromium.org 6515c88bc39690cc94affe78cf5777eb8180c4af8a4machenbach@chromium.org 652d2be901879306d8ff27e78e37783028d581d46fcricow@chromium.orgbool Object::IsJSReceiver() { 653c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com STATIC_ASSERT(LAST_JS_RECEIVER_TYPE == LAST_TYPE); 654d2be901879306d8ff27e78e37783028d581d46fcricow@chromium.org return IsHeapObject() && 655d2be901879306d8ff27e78e37783028d581d46fcricow@chromium.org HeapObject::cast(this)->map()->instance_type() >= FIRST_JS_RECEIVER_TYPE; 656d2be901879306d8ff27e78e37783028d581d46fcricow@chromium.org} 657d2be901879306d8ff27e78e37783028d581d46fcricow@chromium.org 658d2be901879306d8ff27e78e37783028d581d46fcricow@chromium.org 65943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenbool Object::IsJSObject() { 660c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com STATIC_ASSERT(LAST_JS_OBJECT_TYPE == LAST_TYPE); 661c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com return IsHeapObject() && 662c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com HeapObject::cast(this)->map()->instance_type() >= FIRST_JS_OBJECT_TYPE; 663d2be901879306d8ff27e78e37783028d581d46fcricow@chromium.org} 664d2be901879306d8ff27e78e37783028d581d46fcricow@chromium.org 665d2be901879306d8ff27e78e37783028d581d46fcricow@chromium.org 666d2be901879306d8ff27e78e37783028d581d46fcricow@chromium.orgbool Object::IsJSProxy() { 667c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com if (!Object::IsHeapObject()) return false; 6688ddb15e9094939a28890ee8bbc7f7fa246ecea49machenbach@chromium.org return HeapObject::cast(this)->map()->IsJSProxyMap(); 669d2be901879306d8ff27e78e37783028d581d46fcricow@chromium.org} 670d2be901879306d8ff27e78e37783028d581d46fcricow@chromium.org 671d2be901879306d8ff27e78e37783028d581d46fcricow@chromium.org 672394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.comTYPE_CHECKER(JSFunctionProxy, JS_FUNCTION_PROXY_TYPE) 673394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.comTYPE_CHECKER(JSSet, JS_SET_TYPE) 674394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.comTYPE_CHECKER(JSMap, JS_MAP_TYPE) 6754ef23eea527ce7f45bdc5edd52bd4d1a989e2359machenbach@chromium.orgTYPE_CHECKER(JSSetIterator, JS_SET_ITERATOR_TYPE) 6764ef23eea527ce7f45bdc5edd52bd4d1a989e2359machenbach@chromium.orgTYPE_CHECKER(JSMapIterator, JS_MAP_ITERATOR_TYPE) 677394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.comTYPE_CHECKER(JSWeakMap, JS_WEAK_MAP_TYPE) 678ba72ec861b69b67139c93fc6dd56f4a73c9b3135jkummerow@chromium.orgTYPE_CHECKER(JSWeakSet, JS_WEAK_SET_TYPE) 679394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.comTYPE_CHECKER(JSContextExtensionObject, JS_CONTEXT_EXTENSION_OBJECT_TYPE) 680394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.comTYPE_CHECKER(Map, MAP_TYPE) 681394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.comTYPE_CHECKER(FixedArray, FIXED_ARRAY_TYPE) 682394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.comTYPE_CHECKER(FixedDoubleArray, FIXED_DOUBLE_ARRAY_TYPE) 683a2e1a40f85577979749d4c0d6de30e992d996659mstarzinger@chromium.orgTYPE_CHECKER(ConstantPoolArray, CONSTANT_POOL_ARRAY_TYPE) 6846d786c9805481bd13ecb29c3155540f2f32950e1svenpanne@chromium.org 6856d786c9805481bd13ecb29c3155540f2f32950e1svenpanne@chromium.org 686ba72ec861b69b67139c93fc6dd56f4a73c9b3135jkummerow@chromium.orgbool Object::IsJSWeakCollection() { 687ba72ec861b69b67139c93fc6dd56f4a73c9b3135jkummerow@chromium.org return IsJSWeakMap() || IsJSWeakSet(); 688ba72ec861b69b67139c93fc6dd56f4a73c9b3135jkummerow@chromium.org} 689ba72ec861b69b67139c93fc6dd56f4a73c9b3135jkummerow@chromium.org 690ba72ec861b69b67139c93fc6dd56f4a73c9b3135jkummerow@chromium.org 69143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenbool Object::IsDescriptorArray() { 69243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return IsFixedArray(); 69343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 69443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 69543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 69699aa490225c81012235659d9a183226b286178c8yangguo@chromium.orgbool Object::IsTransitionArray() { 69799aa490225c81012235659d9a183226b286178c8yangguo@chromium.org return IsFixedArray(); 69899aa490225c81012235659d9a183226b286178c8yangguo@chromium.org} 69999aa490225c81012235659d9a183226b286178c8yangguo@chromium.org 70099aa490225c81012235659d9a183226b286178c8yangguo@chromium.org 701a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.orgbool Object::IsDeoptimizationInputData() { 702a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org // Must be a fixed array. 703a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org if (!IsFixedArray()) return false; 704a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org 705a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org // There's no sure way to detect the difference between a fixed array and 706a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org // a deoptimization data array. Since this is used for asserts we can 707a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org // check that the length is zero or else the fixed size plus a multiple of 708a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org // the entry size. 709a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org int length = FixedArray::cast(this)->length(); 710a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org if (length == 0) return true; 711a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org 712a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org length -= DeoptimizationInputData::kFirstDeoptEntryIndex; 713a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org return length >= 0 && 714a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org length % DeoptimizationInputData::kDeoptEntrySize == 0; 715a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org} 716a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org 717a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org 718a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.orgbool Object::IsDeoptimizationOutputData() { 719a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org if (!IsFixedArray()) return false; 720a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org // There's actually no way to see the difference between a fixed array and 721a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org // a deoptimization data array. Since this is used for asserts we can check 722a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org // that the length is plausible though. 723a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org if (FixedArray::cast(this)->length() % 2 != 0) return false; 724a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org return true; 725a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org} 726a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org 727a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org 7282e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.orgbool Object::IsDependentCode() { 729003650ee766f5e92756d470a37973fd371757485yangguo@chromium.org if (!IsFixedArray()) return false; 730003650ee766f5e92756d470a37973fd371757485yangguo@chromium.org // There's actually no way to see the difference between a fixed array and 731003650ee766f5e92756d470a37973fd371757485yangguo@chromium.org // a dependent codes array. 732003650ee766f5e92756d470a37973fd371757485yangguo@chromium.org return true; 733003650ee766f5e92756d470a37973fd371757485yangguo@chromium.org} 734003650ee766f5e92756d470a37973fd371757485yangguo@chromium.org 735003650ee766f5e92756d470a37973fd371757485yangguo@chromium.org 73643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenbool Object::IsContext() { 73746839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org if (!Object::IsHeapObject()) return false; 73846839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org Map* map = HeapObject::cast(this)->map(); 73946839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org Heap* heap = map->GetHeap(); 74046839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org return (map == heap->function_context_map() || 74146839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org map == heap->catch_context_map() || 74246839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org map == heap->with_context_map() || 74346839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org map == heap->native_context_map() || 74446839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org map == heap->block_context_map() || 74546839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org map == heap->module_context_map() || 74646839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org map == heap->global_context_map()); 74743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 74843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 74943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 75046839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.orgbool Object::IsNativeContext() { 751ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.com return Object::IsHeapObject() && 752ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.com HeapObject::cast(this)->map() == 75346839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org HeapObject::cast(this)->GetHeap()->native_context_map(); 754ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.com} 755ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.com 756ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.com 757c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.orgbool Object::IsScopeInfo() { 7584acdc2c8d4caecf7606db8af710366c1d6e28fe5whesse@chromium.org return Object::IsHeapObject() && 7594acdc2c8d4caecf7606db8af710366c1d6e28fe5whesse@chromium.org HeapObject::cast(this)->map() == 760c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org HeapObject::cast(this)->GetHeap()->scope_info_map(); 7614acdc2c8d4caecf7606db8af710366c1d6e28fe5whesse@chromium.org} 7624acdc2c8d4caecf7606db8af710366c1d6e28fe5whesse@chromium.org 7634acdc2c8d4caecf7606db8af710366c1d6e28fe5whesse@chromium.org 764394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.comTYPE_CHECKER(JSFunction, JS_FUNCTION_TYPE) 76543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 76643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 767c27e4e79503d86932450a812ce8fd6ee6d9a5bdcager@chromium.orgtemplate <> inline bool Is<JSFunction>(Object* obj) { 76843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return obj->IsJSFunction(); 76943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 77043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 77143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 772394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.comTYPE_CHECKER(Code, CODE_TYPE) 773394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.comTYPE_CHECKER(Oddball, ODDBALL_TYPE) 77441728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.orgTYPE_CHECKER(Cell, CELL_TYPE) 775b752d4061aaeb7d6a6ec368607871789d54b0207dslomov@chromium.orgTYPE_CHECKER(PropertyCell, PROPERTY_CELL_TYPE) 776394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.comTYPE_CHECKER(SharedFunctionInfo, SHARED_FUNCTION_INFO_TYPE) 777e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.orgTYPE_CHECKER(JSGeneratorObject, JS_GENERATOR_OBJECT_TYPE) 778ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.comTYPE_CHECKER(JSModule, JS_MODULE_TYPE) 779394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.comTYPE_CHECKER(JSValue, JS_VALUE_TYPE) 7804efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.orgTYPE_CHECKER(JSDate, JS_DATE_TYPE) 781394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.comTYPE_CHECKER(JSMessageObject, JS_MESSAGE_OBJECT_TYPE) 78243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 78343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 7849fe21c6d4c657d15af27c8751257d3e2bf113e45kasperl@chromium.orgbool Object::IsStringWrapper() { 7859fe21c6d4c657d15af27c8751257d3e2bf113e45kasperl@chromium.org return IsJSValue() && JSValue::cast(this)->value()->IsString(); 7869fe21c6d4c657d15af27c8751257d3e2bf113e45kasperl@chromium.org} 7879fe21c6d4c657d15af27c8751257d3e2bf113e45kasperl@chromium.org 7889fe21c6d4c657d15af27c8751257d3e2bf113e45kasperl@chromium.org 789394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.comTYPE_CHECKER(Foreign, FOREIGN_TYPE) 79043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 79143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 79243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenbool Object::IsBoolean() { 793ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org return IsOddball() && 794ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org ((Oddball::cast(this)->kind() & Oddball::kNotBooleanMask) == 0); 79543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 79643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 79743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 798394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.comTYPE_CHECKER(JSArray, JS_ARRAY_TYPE) 799f705b5034dc5bc422ac1019b591469a7d0534772mstarzinger@chromium.orgTYPE_CHECKER(JSArrayBuffer, JS_ARRAY_BUFFER_TYPE) 800e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.orgTYPE_CHECKER(JSTypedArray, JS_TYPED_ARRAY_TYPE) 8011510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgTYPE_CHECKER(JSDataView, JS_DATA_VIEW_TYPE) 8021510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org 8031510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org 8041510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgbool Object::IsJSArrayBufferView() { 8051510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org return IsJSDataView() || IsJSTypedArray(); 8061510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org} 8071510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org 8081510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org 809394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.comTYPE_CHECKER(JSRegExp, JS_REGEXP_TYPE) 810236ad9617a7359a463144a6ebeb5431a70f769cfager@chromium.org 811236ad9617a7359a463144a6ebeb5431a70f769cfager@chromium.org 812c27e4e79503d86932450a812ce8fd6ee6d9a5bdcager@chromium.orgtemplate <> inline bool Is<JSArray>(Object* obj) { 81343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return obj->IsJSArray(); 81443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 81543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 81643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 81743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenbool Object::IsHashTable() { 818ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org return Object::IsHeapObject() && 819ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org HeapObject::cast(this)->map() == 820ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org HeapObject::cast(this)->GetHeap()->hash_table_map(); 82143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 82243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 82343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 82443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenbool Object::IsDictionary() { 8257b26015ac58e54e88f4214e248f772ad4f055477whesse@chromium.org return IsHashTable() && 8264a9f6553038df6b893b3d3ccae351723f4cbbae7yangguo@chromium.org this != HeapObject::cast(this)->GetHeap()->string_table(); 82743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 82843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 82943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 8304a9f6553038df6b893b3d3ccae351723f4cbbae7yangguo@chromium.orgbool Object::IsStringTable() { 831c2e08d7d6b03e672e13fc3bf274a292009decce6machenbach@chromium.org return IsHashTable(); 83243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 83343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 83443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 835ac091b7d178f1853ede4a5cba58e767e6adf7d96ager@chromium.orgbool Object::IsJSFunctionResultCache() { 836ac091b7d178f1853ede4a5cba58e767e6adf7d96ager@chromium.org if (!IsFixedArray()) return false; 837ac091b7d178f1853ede4a5cba58e767e6adf7d96ager@chromium.org FixedArray* self = FixedArray::cast(this); 838ac091b7d178f1853ede4a5cba58e767e6adf7d96ager@chromium.org int length = self->length(); 839ac091b7d178f1853ede4a5cba58e767e6adf7d96ager@chromium.org if (length < JSFunctionResultCache::kEntriesIndex) return false; 840ac091b7d178f1853ede4a5cba58e767e6adf7d96ager@chromium.org if ((length - JSFunctionResultCache::kEntriesIndex) 841ac091b7d178f1853ede4a5cba58e767e6adf7d96ager@chromium.org % JSFunctionResultCache::kEntrySize != 0) { 842ac091b7d178f1853ede4a5cba58e767e6adf7d96ager@chromium.org return false; 843ac091b7d178f1853ede4a5cba58e767e6adf7d96ager@chromium.org } 844c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org#ifdef VERIFY_HEAP 845394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com if (FLAG_verify_heap) { 846394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com reinterpret_cast<JSFunctionResultCache*>(this)-> 847394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com JSFunctionResultCacheVerify(); 848394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com } 849ac091b7d178f1853ede4a5cba58e767e6adf7d96ager@chromium.org#endif 850ac091b7d178f1853ede4a5cba58e767e6adf7d96ager@chromium.org return true; 851ac091b7d178f1853ede4a5cba58e767e6adf7d96ager@chromium.org} 852ac091b7d178f1853ede4a5cba58e767e6adf7d96ager@chromium.org 853ac091b7d178f1853ede4a5cba58e767e6adf7d96ager@chromium.org 85465fae84840520e9ce49a78bf542abf073b49ac3fricow@chromium.orgbool Object::IsNormalizedMapCache() { 855c8e8806f9e54a027d667425f1bb1b28cf9cbb6f7machenbach@chromium.org return NormalizedMapCache::IsNormalizedMapCache(this); 856c8e8806f9e54a027d667425f1bb1b28cf9cbb6f7machenbach@chromium.org} 857c8e8806f9e54a027d667425f1bb1b28cf9cbb6f7machenbach@chromium.org 858c8e8806f9e54a027d667425f1bb1b28cf9cbb6f7machenbach@chromium.org 859c8e8806f9e54a027d667425f1bb1b28cf9cbb6f7machenbach@chromium.orgint NormalizedMapCache::GetIndex(Handle<Map> map) { 860c8e8806f9e54a027d667425f1bb1b28cf9cbb6f7machenbach@chromium.org return map->Hash() % NormalizedMapCache::kEntries; 861c8e8806f9e54a027d667425f1bb1b28cf9cbb6f7machenbach@chromium.org} 862c8e8806f9e54a027d667425f1bb1b28cf9cbb6f7machenbach@chromium.org 863c8e8806f9e54a027d667425f1bb1b28cf9cbb6f7machenbach@chromium.org 864c8e8806f9e54a027d667425f1bb1b28cf9cbb6f7machenbach@chromium.orgbool NormalizedMapCache::IsNormalizedMapCache(Object* obj) { 865c8e8806f9e54a027d667425f1bb1b28cf9cbb6f7machenbach@chromium.org if (!obj->IsFixedArray()) return false; 866c8e8806f9e54a027d667425f1bb1b28cf9cbb6f7machenbach@chromium.org if (FixedArray::cast(obj)->length() != NormalizedMapCache::kEntries) { 86765fae84840520e9ce49a78bf542abf073b49ac3fricow@chromium.org return false; 86865fae84840520e9ce49a78bf542abf073b49ac3fricow@chromium.org } 869c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org#ifdef VERIFY_HEAP 870394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com if (FLAG_verify_heap) { 871c8e8806f9e54a027d667425f1bb1b28cf9cbb6f7machenbach@chromium.org reinterpret_cast<NormalizedMapCache*>(obj)->NormalizedMapCacheVerify(); 872394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com } 87365fae84840520e9ce49a78bf542abf073b49ac3fricow@chromium.org#endif 87465fae84840520e9ce49a78bf542abf073b49ac3fricow@chromium.org return true; 87565fae84840520e9ce49a78bf542abf073b49ac3fricow@chromium.org} 87665fae84840520e9ce49a78bf542abf073b49ac3fricow@chromium.org 87765fae84840520e9ce49a78bf542abf073b49ac3fricow@chromium.org 878b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.orgbool Object::IsCompilationCacheTable() { 879b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org return IsHashTable(); 8809258b6bc66e09368ada54001f619d53b4fc976d5ager@chromium.org} 8819258b6bc66e09368ada54001f619d53b4fc976d5ager@chromium.org 8829258b6bc66e09368ada54001f619d53b4fc976d5ager@chromium.org 883ce5e87bd905d592a8bd612b3dedf7a994177c13aager@chromium.orgbool Object::IsCodeCacheHashTable() { 884ce5e87bd905d592a8bd612b3dedf7a994177c13aager@chromium.org return IsHashTable(); 885ce5e87bd905d592a8bd612b3dedf7a994177c13aager@chromium.org} 886ce5e87bd905d592a8bd612b3dedf7a994177c13aager@chromium.org 887ce5e87bd905d592a8bd612b3dedf7a994177c13aager@chromium.org 888e297f5973a8a9ff0d9945da3f1e2d8a6230c294djkummerow@chromium.orgbool Object::IsPolymorphicCodeCacheHashTable() { 889e297f5973a8a9ff0d9945da3f1e2d8a6230c294djkummerow@chromium.org return IsHashTable(); 890e297f5973a8a9ff0d9945da3f1e2d8a6230c294djkummerow@chromium.org} 891e297f5973a8a9ff0d9945da3f1e2d8a6230c294djkummerow@chromium.org 892e297f5973a8a9ff0d9945da3f1e2d8a6230c294djkummerow@chromium.org 893236ad9617a7359a463144a6ebeb5431a70f769cfager@chromium.orgbool Object::IsMapCache() { 894236ad9617a7359a463144a6ebeb5431a70f769cfager@chromium.org return IsHashTable(); 895236ad9617a7359a463144a6ebeb5431a70f769cfager@chromium.org} 896236ad9617a7359a463144a6ebeb5431a70f769cfager@chromium.org 897236ad9617a7359a463144a6ebeb5431a70f769cfager@chromium.org 898e4ac3ef2f6fa9300bc78c5a4cb7d4cb66ac6e83dmvstanton@chromium.orgbool Object::IsObjectHashTable() { 899e4ac3ef2f6fa9300bc78c5a4cb7d4cb66ac6e83dmvstanton@chromium.org return IsHashTable(); 900e4ac3ef2f6fa9300bc78c5a4cb7d4cb66ac6e83dmvstanton@chromium.org} 901e4ac3ef2f6fa9300bc78c5a4cb7d4cb66ac6e83dmvstanton@chromium.org 902e4ac3ef2f6fa9300bc78c5a4cb7d4cb66ac6e83dmvstanton@chromium.org 9039e41f9ecf5042292a9efcb36e264b37621199553machenbach@chromium.orgbool Object::IsOrderedHashTable() { 9049e41f9ecf5042292a9efcb36e264b37621199553machenbach@chromium.org return IsHeapObject() && 9059e41f9ecf5042292a9efcb36e264b37621199553machenbach@chromium.org HeapObject::cast(this)->map() == 9069e41f9ecf5042292a9efcb36e264b37621199553machenbach@chromium.org HeapObject::cast(this)->GetHeap()->ordered_hash_table_map(); 9079e41f9ecf5042292a9efcb36e264b37621199553machenbach@chromium.org} 9089e41f9ecf5042292a9efcb36e264b37621199553machenbach@chromium.org 9099e41f9ecf5042292a9efcb36e264b37621199553machenbach@chromium.org 91043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenbool Object::IsPrimitive() { 91143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return IsOddball() || IsNumber() || IsString(); 91243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 91343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 91443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 9155a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.orgbool Object::IsJSGlobalProxy() { 9165a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org bool result = IsHeapObject() && 9175a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org (HeapObject::cast(this)->map()->instance_type() == 9185a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org JS_GLOBAL_PROXY_TYPE); 919bcc36723a2ace28fa3b0d7dd0d1de926d313fff9machenbach@chromium.org ASSERT(!result || 920bcc36723a2ace28fa3b0d7dd0d1de926d313fff9machenbach@chromium.org HeapObject::cast(this)->map()->is_access_check_needed()); 9215a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org return result; 9225a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org} 9235a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org 9245a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org 92543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenbool Object::IsGlobalObject() { 9265a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org if (!IsHeapObject()) return false; 9275a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org 9289bbf968a649030335309265ba2c98fcc36aeb762kasperl@chromium.org InstanceType type = HeapObject::cast(this)->map()->instance_type(); 9295a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org return type == JS_GLOBAL_OBJECT_TYPE || 9305a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org type == JS_BUILTINS_OBJECT_TYPE; 93143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 93243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 93343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 934394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.comTYPE_CHECKER(JSGlobalObject, JS_GLOBAL_OBJECT_TYPE) 935394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.comTYPE_CHECKER(JSBuiltinsObject, JS_BUILTINS_OBJECT_TYPE) 93643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 93743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 93843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenbool Object::IsUndetectableObject() { 93943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return IsHeapObject() 94043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen && HeapObject::cast(this)->map()->is_undetectable(); 94143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 94243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 94343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 94443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenbool Object::IsAccessCheckNeeded() { 945bcc36723a2ace28fa3b0d7dd0d1de926d313fff9machenbach@chromium.org if (!IsHeapObject()) return false; 946bcc36723a2ace28fa3b0d7dd0d1de926d313fff9machenbach@chromium.org if (IsJSGlobalProxy()) { 947bcc36723a2ace28fa3b0d7dd0d1de926d313fff9machenbach@chromium.org JSGlobalProxy* proxy = JSGlobalProxy::cast(this); 948bcc36723a2ace28fa3b0d7dd0d1de926d313fff9machenbach@chromium.org GlobalObject* global = 949bcc36723a2ace28fa3b0d7dd0d1de926d313fff9machenbach@chromium.org proxy->GetIsolate()->context()->global_object(); 950bcc36723a2ace28fa3b0d7dd0d1de926d313fff9machenbach@chromium.org return proxy->IsDetachedFrom(global); 951bcc36723a2ace28fa3b0d7dd0d1de926d313fff9machenbach@chromium.org } 952bcc36723a2ace28fa3b0d7dd0d1de926d313fff9machenbach@chromium.org return HeapObject::cast(this)->map()->is_access_check_needed(); 95343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 95443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 95543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 95643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenbool Object::IsStruct() { 95743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (!IsHeapObject()) return false; 95843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen switch (HeapObject::cast(this)->map()->instance_type()) { 95943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen#define MAKE_STRUCT_CASE(NAME, Name, name) case NAME##_TYPE: return true; 96043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen STRUCT_LIST(MAKE_STRUCT_CASE) 96143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen#undef MAKE_STRUCT_CASE 96243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen default: return false; 96343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 96443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 96543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 96643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 96743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen#define MAKE_STRUCT_PREDICATE(NAME, Name, name) \ 96843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen bool Object::Is##Name() { \ 96943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return Object::IsHeapObject() \ 97043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen && HeapObject::cast(this)->map()->instance_type() == NAME##_TYPE; \ 97143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 97243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen STRUCT_LIST(MAKE_STRUCT_PREDICATE) 97343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen#undef MAKE_STRUCT_PREDICATE 97443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 97543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 97643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenbool Object::IsUndefined() { 977ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org return IsOddball() && Oddball::cast(this)->kind() == Oddball::kUndefined; 97843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 97943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 98043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 98143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenbool Object::IsNull() { 982ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org return IsOddball() && Oddball::cast(this)->kind() == Oddball::kNull; 983ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org} 984ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org 985ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org 986ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.orgbool Object::IsTheHole() { 987ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org return IsOddball() && Oddball::cast(this)->kind() == Oddball::kTheHole; 98843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 98943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 99043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 991a77ec9c2cf67e5b9c707fe42f33574526fed189amachenbach@chromium.orgbool Object::IsException() { 992a77ec9c2cf67e5b9c707fe42f33574526fed189amachenbach@chromium.org return IsOddball() && Oddball::cast(this)->kind() == Oddball::kException; 993a77ec9c2cf67e5b9c707fe42f33574526fed189amachenbach@chromium.org} 994a77ec9c2cf67e5b9c707fe42f33574526fed189amachenbach@chromium.org 995a77ec9c2cf67e5b9c707fe42f33574526fed189amachenbach@chromium.org 9961fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.orgbool Object::IsUninitialized() { 9971fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org return IsOddball() && Oddball::cast(this)->kind() == Oddball::kUninitialized; 9981fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org} 9991fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org 10001fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org 100143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenbool Object::IsTrue() { 1002ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org return IsOddball() && Oddball::cast(this)->kind() == Oddball::kTrue; 100343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 100443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 100543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 100643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenbool Object::IsFalse() { 1007ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org return IsOddball() && Oddball::cast(this)->kind() == Oddball::kFalse; 100843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 100943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 101043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 1011d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.orgbool Object::IsArgumentsMarker() { 1012ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org return IsOddball() && Oddball::cast(this)->kind() == Oddball::kArgumentMarker; 1013d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org} 1014d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org 1015d2c22f0121ebc55ee26a9e742f0fd7c0b8397730kmillikin@chromium.org 101643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansendouble Object::Number() { 101743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen ASSERT(IsNumber()); 101843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return IsSmi() 101943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen ? static_cast<double>(reinterpret_cast<Smi*>(this)->value()) 102043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen : reinterpret_cast<HeapNumber*>(this)->value(); 102143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 102243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 102343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 10244efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.orgbool Object::IsNaN() { 102577ca49ac05d25684c89442029c22f5b2bce94395ulan@chromium.org return this->IsHeapNumber() && std::isnan(HeapNumber::cast(this)->value()); 10264efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org} 10274efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org 10284efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org 10293484964a86451e86dcf04be9bd8c0d76ee04f081rossberg@chromium.orgMaybeHandle<Smi> Object::ToSmi(Isolate* isolate, Handle<Object> object) { 10303484964a86451e86dcf04be9bd8c0d76ee04f081rossberg@chromium.org if (object->IsSmi()) return Handle<Smi>::cast(object); 103169f64b1a8bfa6f5418b7c1f71d4e0833f76e93edmachenbach@chromium.org if (object->IsHeapNumber()) { 103269f64b1a8bfa6f5418b7c1f71d4e0833f76e93edmachenbach@chromium.org double value = Handle<HeapNumber>::cast(object)->value(); 103369f64b1a8bfa6f5418b7c1f71d4e0833f76e93edmachenbach@chromium.org int int_value = FastD2I(value); 103469f64b1a8bfa6f5418b7c1f71d4e0833f76e93edmachenbach@chromium.org if (value == FastI2D(int_value) && Smi::IsValid(int_value)) { 103569f64b1a8bfa6f5418b7c1f71d4e0833f76e93edmachenbach@chromium.org return handle(Smi::FromInt(int_value), isolate); 103669f64b1a8bfa6f5418b7c1f71d4e0833f76e93edmachenbach@chromium.org } 103769f64b1a8bfa6f5418b7c1f71d4e0833f76e93edmachenbach@chromium.org } 10383484964a86451e86dcf04be9bd8c0d76ee04f081rossberg@chromium.org return Handle<Smi>(); 103943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 104043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 104143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 104274dd215b1e842a92a4731fb20f999fc0d5004a94machenbach@chromium.orgMaybeHandle<JSReceiver> Object::ToObject(Isolate* isolate, 104374dd215b1e842a92a4731fb20f999fc0d5004a94machenbach@chromium.org Handle<Object> object) { 104474dd215b1e842a92a4731fb20f999fc0d5004a94machenbach@chromium.org return ToObject( 104574dd215b1e842a92a4731fb20f999fc0d5004a94machenbach@chromium.org isolate, object, handle(isolate->context()->native_context(), isolate)); 104674dd215b1e842a92a4731fb20f999fc0d5004a94machenbach@chromium.org} 104774dd215b1e842a92a4731fb20f999fc0d5004a94machenbach@chromium.org 104874dd215b1e842a92a4731fb20f999fc0d5004a94machenbach@chromium.org 10495a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.orgbool Object::HasSpecificClassOf(String* name) { 10505a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org return this->IsJSObject() && (JSObject::cast(this)->class_name() == name); 10515a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org} 10525a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org 10535a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org 10542ebef182c49d59eba907b120c3c2a50808bd1f12machenbach@chromium.orgMaybeHandle<Object> Object::GetProperty(Handle<Object> object, 10552ebef182c49d59eba907b120c3c2a50808bd1f12machenbach@chromium.org Handle<Name> name) { 10568ddb15e9094939a28890ee8bbc7f7fa246ecea49machenbach@chromium.org LookupIterator it(object, name); 10578ddb15e9094939a28890ee8bbc7f7fa246ecea49machenbach@chromium.org return GetProperty(&it); 10582ebef182c49d59eba907b120c3c2a50808bd1f12machenbach@chromium.org} 10592ebef182c49d59eba907b120c3c2a50808bd1f12machenbach@chromium.org 10602ebef182c49d59eba907b120c3c2a50808bd1f12machenbach@chromium.org 1061202b1d8cd93e567672cc92f48fedc35989c47312machenbach@chromium.orgMaybeHandle<Object> Object::GetElement(Isolate* isolate, 1062202b1d8cd93e567672cc92f48fedc35989c47312machenbach@chromium.org Handle<Object> object, 1063202b1d8cd93e567672cc92f48fedc35989c47312machenbach@chromium.org uint32_t index) { 10645d6c1f5b20195b800bc6db146920fd6f878d1fd4vegorov@chromium.org // GetElement can trigger a getter which can cause allocation. 10655d6c1f5b20195b800bc6db146920fd6f878d1fd4vegorov@chromium.org // This was not always the case. This ASSERT is here to catch 10665d6c1f5b20195b800bc6db146920fd6f878d1fd4vegorov@chromium.org // leftover incorrect uses. 106779e7902fa5f94747b5383dd40f3002dd8b62303arossberg@chromium.org ASSERT(AllowHeapAllocation::IsAllowed()); 1068b5ed9300c59e8590c9dc588727b6564c244b0f5cmachenbach@chromium.org return Object::GetElementWithReceiver(isolate, object, object, index); 106943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 107043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 107143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 10722ebef182c49d59eba907b120c3c2a50808bd1f12machenbach@chromium.orgMaybeHandle<Object> Object::GetPropertyOrElement(Handle<Object> object, 10732ebef182c49d59eba907b120c3c2a50808bd1f12machenbach@chromium.org Handle<Name> name) { 10742ebef182c49d59eba907b120c3c2a50808bd1f12machenbach@chromium.org uint32_t index; 10752ebef182c49d59eba907b120c3c2a50808bd1f12machenbach@chromium.org Isolate* isolate = name->GetIsolate(); 10762ebef182c49d59eba907b120c3c2a50808bd1f12machenbach@chromium.org if (name->AsArrayIndex(&index)) return GetElement(isolate, object, index); 10772ebef182c49d59eba907b120c3c2a50808bd1f12machenbach@chromium.org return GetProperty(object, name); 10782ebef182c49d59eba907b120c3c2a50808bd1f12machenbach@chromium.org} 10792ebef182c49d59eba907b120c3c2a50808bd1f12machenbach@chromium.org 10802ebef182c49d59eba907b120c3c2a50808bd1f12machenbach@chromium.org 10819fa619507474a4c1c21c6935b3209070bc13a218machenbach@chromium.orgMaybeHandle<Object> Object::GetProperty(Isolate* isolate, 10829fa619507474a4c1c21c6935b3209070bc13a218machenbach@chromium.org Handle<Object> object, 10839fa619507474a4c1c21c6935b3209070bc13a218machenbach@chromium.org const char* name) { 10849fa619507474a4c1c21c6935b3209070bc13a218machenbach@chromium.org Handle<String> str = isolate->factory()->InternalizeUtf8String(name); 10859fa619507474a4c1c21c6935b3209070bc13a218machenbach@chromium.org ASSERT(!str.is_null()); 10869fa619507474a4c1c21c6935b3209070bc13a218machenbach@chromium.org#ifdef DEBUG 10879fa619507474a4c1c21c6935b3209070bc13a218machenbach@chromium.org uint32_t index; // Assert that the name is not an array index. 10889fa619507474a4c1c21c6935b3209070bc13a218machenbach@chromium.org ASSERT(!str->AsArrayIndex(&index)); 10899fa619507474a4c1c21c6935b3209070bc13a218machenbach@chromium.org#endif // DEBUG 10909fa619507474a4c1c21c6935b3209070bc13a218machenbach@chromium.org return GetProperty(object, str); 10919fa619507474a4c1c21c6935b3209070bc13a218machenbach@chromium.org} 10929fa619507474a4c1c21c6935b3209070bc13a218machenbach@chromium.org 10939fa619507474a4c1c21c6935b3209070bc13a218machenbach@chromium.org 10942ebef182c49d59eba907b120c3c2a50808bd1f12machenbach@chromium.orgMaybeHandle<Object> JSProxy::GetElementWithHandler(Handle<JSProxy> proxy, 10952ebef182c49d59eba907b120c3c2a50808bd1f12machenbach@chromium.org Handle<Object> receiver, 10967010a2d84de67daace72568ffcde315a3e510ab5machenbach@chromium.org uint32_t index) { 10972ebef182c49d59eba907b120c3c2a50808bd1f12machenbach@chromium.org return GetPropertyWithHandler( 10982ebef182c49d59eba907b120c3c2a50808bd1f12machenbach@chromium.org proxy, receiver, proxy->GetIsolate()->factory()->Uint32ToString(index)); 1099303ada708275d2d425b846fb237f1ba7598ee239lrn@chromium.org} 1100303ada708275d2d425b846fb237f1ba7598ee239lrn@chromium.org 1101303ada708275d2d425b846fb237f1ba7598ee239lrn@chromium.org 11022ebef182c49d59eba907b120c3c2a50808bd1f12machenbach@chromium.orgMaybeHandle<Object> JSProxy::SetElementWithHandler(Handle<JSProxy> proxy, 11032ebef182c49d59eba907b120c3c2a50808bd1f12machenbach@chromium.org Handle<JSReceiver> receiver, 11042ebef182c49d59eba907b120c3c2a50808bd1f12machenbach@chromium.org uint32_t index, 11052ebef182c49d59eba907b120c3c2a50808bd1f12machenbach@chromium.org Handle<Object> value, 11062ebef182c49d59eba907b120c3c2a50808bd1f12machenbach@chromium.org StrictMode strict_mode) { 11072ebef182c49d59eba907b120c3c2a50808bd1f12machenbach@chromium.org Isolate* isolate = proxy->GetIsolate(); 11082ebef182c49d59eba907b120c3c2a50808bd1f12machenbach@chromium.org Handle<String> name = isolate->factory()->Uint32ToString(index); 11092ebef182c49d59eba907b120c3c2a50808bd1f12machenbach@chromium.org return SetPropertyWithHandler( 11102ebef182c49d59eba907b120c3c2a50808bd1f12machenbach@chromium.org proxy, receiver, name, value, NONE, strict_mode); 11112ebef182c49d59eba907b120c3c2a50808bd1f12machenbach@chromium.org} 11122ebef182c49d59eba907b120c3c2a50808bd1f12machenbach@chromium.org 11132ebef182c49d59eba907b120c3c2a50808bd1f12machenbach@chromium.org 11142ebef182c49d59eba907b120c3c2a50808bd1f12machenbach@chromium.orgbool JSProxy::HasElementWithHandler(Handle<JSProxy> proxy, uint32_t index) { 11152ebef182c49d59eba907b120c3c2a50808bd1f12machenbach@chromium.org Isolate* isolate = proxy->GetIsolate(); 11162ebef182c49d59eba907b120c3c2a50808bd1f12machenbach@chromium.org Handle<String> name = isolate->factory()->Uint32ToString(index); 11172ebef182c49d59eba907b120c3c2a50808bd1f12machenbach@chromium.org return HasPropertyWithHandler(proxy, name); 111843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 111943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 112043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 112143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen#define FIELD_ADDR(p, offset) \ 112243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen (reinterpret_cast<byte*>(p) + offset - kHeapObjectTag) 112343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 112443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen#define READ_FIELD(p, offset) \ 112543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen (*reinterpret_cast<Object**>(FIELD_ADDR(p, offset))) 112643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 11271e2d50cf3d94ff48285da107b7a9da1ad0fc873dmachenbach@chromium.org#define ACQUIRE_READ_FIELD(p, offset) \ 11281e2d50cf3d94ff48285da107b7a9da1ad0fc873dmachenbach@chromium.org reinterpret_cast<Object*>(base::Acquire_Load( \ 11291e2d50cf3d94ff48285da107b7a9da1ad0fc873dmachenbach@chromium.org reinterpret_cast<base::AtomicWord*>(FIELD_ADDR(p, offset)))) 113063a7c9f848e755c52a37721debae242cf5d1682dmachenbach@chromium.org 11311e2d50cf3d94ff48285da107b7a9da1ad0fc873dmachenbach@chromium.org#define NOBARRIER_READ_FIELD(p, offset) \ 11321e2d50cf3d94ff48285da107b7a9da1ad0fc873dmachenbach@chromium.org reinterpret_cast<Object*>(base::NoBarrier_Load( \ 11331e2d50cf3d94ff48285da107b7a9da1ad0fc873dmachenbach@chromium.org reinterpret_cast<base::AtomicWord*>(FIELD_ADDR(p, offset)))) 113463a7c9f848e755c52a37721debae242cf5d1682dmachenbach@chromium.org 113543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen#define WRITE_FIELD(p, offset, value) \ 113643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen (*reinterpret_cast<Object**>(FIELD_ADDR(p, offset)) = value) 113743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 11381e2d50cf3d94ff48285da107b7a9da1ad0fc873dmachenbach@chromium.org#define RELEASE_WRITE_FIELD(p, offset, value) \ 11391e2d50cf3d94ff48285da107b7a9da1ad0fc873dmachenbach@chromium.org base::Release_Store( \ 11401e2d50cf3d94ff48285da107b7a9da1ad0fc873dmachenbach@chromium.org reinterpret_cast<base::AtomicWord*>(FIELD_ADDR(p, offset)), \ 11411e2d50cf3d94ff48285da107b7a9da1ad0fc873dmachenbach@chromium.org reinterpret_cast<base::AtomicWord>(value)); 114263a7c9f848e755c52a37721debae242cf5d1682dmachenbach@chromium.org 11431e2d50cf3d94ff48285da107b7a9da1ad0fc873dmachenbach@chromium.org#define NOBARRIER_WRITE_FIELD(p, offset, value) \ 11441e2d50cf3d94ff48285da107b7a9da1ad0fc873dmachenbach@chromium.org base::NoBarrier_Store( \ 11451e2d50cf3d94ff48285da107b7a9da1ad0fc873dmachenbach@chromium.org reinterpret_cast<base::AtomicWord*>(FIELD_ADDR(p, offset)), \ 11461e2d50cf3d94ff48285da107b7a9da1ad0fc873dmachenbach@chromium.org reinterpret_cast<base::AtomicWord>(value)); 114763a7c9f848e755c52a37721debae242cf5d1682dmachenbach@chromium.org 1148c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com#define WRITE_BARRIER(heap, object, offset, value) \ 1149c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com heap->incremental_marking()->RecordWrite( \ 1150c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com object, HeapObject::RawField(object, offset), value); \ 1151c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com if (heap->InNewSpace(value)) { \ 1152c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com heap->RecordWrite(object->address(), offset); \ 1153c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com } 1154c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com 1155c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com#define CONDITIONAL_WRITE_BARRIER(heap, object, offset, value, mode) \ 1156c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com if (mode == UPDATE_WRITE_BARRIER) { \ 1157c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com heap->incremental_marking()->RecordWrite( \ 1158c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com object, HeapObject::RawField(object, offset), value); \ 1159c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com if (heap->InNewSpace(value)) { \ 1160c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com heap->RecordWrite(object->address(), offset); \ 1161c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com } \ 11625a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org } 11635a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org 11647516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org#ifndef V8_TARGET_ARCH_MIPS 11657516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org #define READ_DOUBLE_FIELD(p, offset) \ 11667516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org (*reinterpret_cast<double*>(FIELD_ADDR(p, offset))) 11677516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org#else // V8_TARGET_ARCH_MIPS 11687516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org // Prevent gcc from using load-double (mips ldc1) on (possibly) 11697516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org // non-64-bit aligned HeapNumber::value. 11706d786c9805481bd13ecb29c3155540f2f32950e1svenpanne@chromium.org static inline double read_double_field(void* p, int offset) { 11717516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org union conversion { 11727516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org double d; 11737516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org uint32_t u[2]; 11747516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org } c; 11757516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org c.u[0] = (*reinterpret_cast<uint32_t*>(FIELD_ADDR(p, offset))); 11767516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org c.u[1] = (*reinterpret_cast<uint32_t*>(FIELD_ADDR(p, offset + 4))); 11777516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org return c.d; 11787516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org } 11797516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org #define READ_DOUBLE_FIELD(p, offset) read_double_field(p, offset) 11807516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org#endif // V8_TARGET_ARCH_MIPS 11817516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org 11827516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org#ifndef V8_TARGET_ARCH_MIPS 11837516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org #define WRITE_DOUBLE_FIELD(p, offset, value) \ 11847516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org (*reinterpret_cast<double*>(FIELD_ADDR(p, offset)) = value) 11857516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org#else // V8_TARGET_ARCH_MIPS 11867516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org // Prevent gcc from using store-double (mips sdc1) on (possibly) 11877516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org // non-64-bit aligned HeapNumber::value. 11886d786c9805481bd13ecb29c3155540f2f32950e1svenpanne@chromium.org static inline void write_double_field(void* p, int offset, 11897516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org double value) { 11907516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org union conversion { 11917516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org double d; 11927516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org uint32_t u[2]; 11937516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org } c; 11947516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org c.d = value; 11957516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org (*reinterpret_cast<uint32_t*>(FIELD_ADDR(p, offset))) = c.u[0]; 11967516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org (*reinterpret_cast<uint32_t*>(FIELD_ADDR(p, offset + 4))) = c.u[1]; 11977516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org } 11987516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org #define WRITE_DOUBLE_FIELD(p, offset, value) \ 11997516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org write_double_field(p, offset, value) 12007516f05132429850aa326421ed3e25f23b4c071blrn@chromium.org#endif // V8_TARGET_ARCH_MIPS 120143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 120243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 120343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen#define READ_INT_FIELD(p, offset) \ 120443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen (*reinterpret_cast<int*>(FIELD_ADDR(p, offset))) 120543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 120643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen#define WRITE_INT_FIELD(p, offset, value) \ 120743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen (*reinterpret_cast<int*>(FIELD_ADDR(p, offset)) = value) 120843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 12093e87580939cb78c5802369f723680d4a16cc2902ager@chromium.org#define READ_INTPTR_FIELD(p, offset) \ 12103e87580939cb78c5802369f723680d4a16cc2902ager@chromium.org (*reinterpret_cast<intptr_t*>(FIELD_ADDR(p, offset))) 12113e87580939cb78c5802369f723680d4a16cc2902ager@chromium.org 12123e87580939cb78c5802369f723680d4a16cc2902ager@chromium.org#define WRITE_INTPTR_FIELD(p, offset, value) \ 12133e87580939cb78c5802369f723680d4a16cc2902ager@chromium.org (*reinterpret_cast<intptr_t*>(FIELD_ADDR(p, offset)) = value) 12143e87580939cb78c5802369f723680d4a16cc2902ager@chromium.org 12157c537e2abe09729ed6cb827b4dd206470d8c4a42ager@chromium.org#define READ_UINT32_FIELD(p, offset) \ 12167c537e2abe09729ed6cb827b4dd206470d8c4a42ager@chromium.org (*reinterpret_cast<uint32_t*>(FIELD_ADDR(p, offset))) 12177c537e2abe09729ed6cb827b4dd206470d8c4a42ager@chromium.org 12187c537e2abe09729ed6cb827b4dd206470d8c4a42ager@chromium.org#define WRITE_UINT32_FIELD(p, offset, value) \ 12197c537e2abe09729ed6cb827b4dd206470d8c4a42ager@chromium.org (*reinterpret_cast<uint32_t*>(FIELD_ADDR(p, offset)) = value) 12207c537e2abe09729ed6cb827b4dd206470d8c4a42ager@chromium.org 1221a2e1a40f85577979749d4c0d6de30e992d996659mstarzinger@chromium.org#define READ_INT32_FIELD(p, offset) \ 1222a2e1a40f85577979749d4c0d6de30e992d996659mstarzinger@chromium.org (*reinterpret_cast<int32_t*>(FIELD_ADDR(p, offset))) 1223a2e1a40f85577979749d4c0d6de30e992d996659mstarzinger@chromium.org 1224a2e1a40f85577979749d4c0d6de30e992d996659mstarzinger@chromium.org#define WRITE_INT32_FIELD(p, offset, value) \ 1225a2e1a40f85577979749d4c0d6de30e992d996659mstarzinger@chromium.org (*reinterpret_cast<int32_t*>(FIELD_ADDR(p, offset)) = value) 1226a2e1a40f85577979749d4c0d6de30e992d996659mstarzinger@chromium.org 122788aa058bdadfa79ae2836d12d6dd2d1c28aa490cdanno@chromium.org#define READ_INT64_FIELD(p, offset) \ 122888aa058bdadfa79ae2836d12d6dd2d1c28aa490cdanno@chromium.org (*reinterpret_cast<int64_t*>(FIELD_ADDR(p, offset))) 122988aa058bdadfa79ae2836d12d6dd2d1c28aa490cdanno@chromium.org 123088aa058bdadfa79ae2836d12d6dd2d1c28aa490cdanno@chromium.org#define WRITE_INT64_FIELD(p, offset, value) \ 123188aa058bdadfa79ae2836d12d6dd2d1c28aa490cdanno@chromium.org (*reinterpret_cast<int64_t*>(FIELD_ADDR(p, offset)) = value) 123288aa058bdadfa79ae2836d12d6dd2d1c28aa490cdanno@chromium.org 123343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen#define READ_SHORT_FIELD(p, offset) \ 123443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen (*reinterpret_cast<uint16_t*>(FIELD_ADDR(p, offset))) 123543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 123643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen#define WRITE_SHORT_FIELD(p, offset, value) \ 123743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen (*reinterpret_cast<uint16_t*>(FIELD_ADDR(p, offset)) = value) 123843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 123943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen#define READ_BYTE_FIELD(p, offset) \ 124043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen (*reinterpret_cast<byte*>(FIELD_ADDR(p, offset))) 124143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 12421e2d50cf3d94ff48285da107b7a9da1ad0fc873dmachenbach@chromium.org#define NOBARRIER_READ_BYTE_FIELD(p, offset) \ 12431e2d50cf3d94ff48285da107b7a9da1ad0fc873dmachenbach@chromium.org static_cast<byte>(base::NoBarrier_Load( \ 12441e2d50cf3d94ff48285da107b7a9da1ad0fc873dmachenbach@chromium.org reinterpret_cast<base::Atomic8*>(FIELD_ADDR(p, offset)))) 12455b080567cf135f6dbaf23973ba6b6fa1d6af83b3machenbach@chromium.org 124643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen#define WRITE_BYTE_FIELD(p, offset, value) \ 124743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen (*reinterpret_cast<byte*>(FIELD_ADDR(p, offset)) = value) 124843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 12491e2d50cf3d94ff48285da107b7a9da1ad0fc873dmachenbach@chromium.org#define NOBARRIER_WRITE_BYTE_FIELD(p, offset, value) \ 12501e2d50cf3d94ff48285da107b7a9da1ad0fc873dmachenbach@chromium.org base::NoBarrier_Store( \ 12511e2d50cf3d94ff48285da107b7a9da1ad0fc873dmachenbach@chromium.org reinterpret_cast<base::Atomic8*>(FIELD_ADDR(p, offset)), \ 12521e2d50cf3d94ff48285da107b7a9da1ad0fc873dmachenbach@chromium.org static_cast<base::Atomic8>(value)); 125343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 12549bbf968a649030335309265ba2c98fcc36aeb762kasperl@chromium.orgObject** HeapObject::RawField(HeapObject* obj, int byte_offset) { 12559bbf968a649030335309265ba2c98fcc36aeb762kasperl@chromium.org return &READ_FIELD(obj, byte_offset); 125643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 125743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 125843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 125943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenint Smi::value() { 126018ad94b919217ffbcd2d3159eeb5f8c588761c47ager@chromium.org return Internals::SmiValue(this); 126143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 126243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 126343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 126443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenSmi* Smi::FromInt(int value) { 126543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen ASSERT(Smi::IsValid(value)); 1266bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org return reinterpret_cast<Smi*>(Internals::IntToSmi(value)); 12679085a016223a6b72bf580d5781c93ec7b9e54422ager@chromium.org} 12689085a016223a6b72bf580d5781c93ec7b9e54422ager@chromium.org 12699085a016223a6b72bf580d5781c93ec7b9e54422ager@chromium.org 12709085a016223a6b72bf580d5781c93ec7b9e54422ager@chromium.orgSmi* Smi::FromIntptr(intptr_t value) { 12719085a016223a6b72bf580d5781c93ec7b9e54422ager@chromium.org ASSERT(Smi::IsValid(value)); 12729d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com int smi_shift_bits = kSmiTagSize + kSmiShiftSize; 12739d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com return reinterpret_cast<Smi*>((value << smi_shift_bits) | kSmiTag); 127443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 127543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 127643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 1277ab99eea3d9d0cc20698ebb39bf0fb80e3e66bffcager@chromium.orgbool Smi::IsValid(intptr_t value) { 1278bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org bool result = Internals::IsValidSmi(value); 1279bf9432e3965b385e2e8df3701b710c105f5b3eb7ulan@chromium.org ASSERT_EQ(result, value >= kMinValue && value <= kMaxValue); 12809085a016223a6b72bf580d5781c93ec7b9e54422ager@chromium.org return result; 12819085a016223a6b72bf580d5781c93ec7b9e54422ager@chromium.org} 12829085a016223a6b72bf580d5781c93ec7b9e54422ager@chromium.org 12839085a016223a6b72bf580d5781c93ec7b9e54422ager@chromium.org 12847276f14ca716596e0a0d17539516370c1f453847kasper.lundMapWord MapWord::FromMap(Map* map) { 12857276f14ca716596e0a0d17539516370c1f453847kasper.lund return MapWord(reinterpret_cast<uintptr_t>(map)); 12867276f14ca716596e0a0d17539516370c1f453847kasper.lund} 12877276f14ca716596e0a0d17539516370c1f453847kasper.lund 12887276f14ca716596e0a0d17539516370c1f453847kasper.lund 12897276f14ca716596e0a0d17539516370c1f453847kasper.lundMap* MapWord::ToMap() { 12907276f14ca716596e0a0d17539516370c1f453847kasper.lund return reinterpret_cast<Map*>(value_); 12917276f14ca716596e0a0d17539516370c1f453847kasper.lund} 12927276f14ca716596e0a0d17539516370c1f453847kasper.lund 12937276f14ca716596e0a0d17539516370c1f453847kasper.lund 12947276f14ca716596e0a0d17539516370c1f453847kasper.lundbool MapWord::IsForwardingAddress() { 12957c537e2abe09729ed6cb827b4dd206470d8c4a42ager@chromium.org return HAS_SMI_TAG(reinterpret_cast<Object*>(value_)); 12967276f14ca716596e0a0d17539516370c1f453847kasper.lund} 12977276f14ca716596e0a0d17539516370c1f453847kasper.lund 12987276f14ca716596e0a0d17539516370c1f453847kasper.lund 12997276f14ca716596e0a0d17539516370c1f453847kasper.lundMapWord MapWord::FromForwardingAddress(HeapObject* object) { 13007c537e2abe09729ed6cb827b4dd206470d8c4a42ager@chromium.org Address raw = reinterpret_cast<Address>(object) - kHeapObjectTag; 13017c537e2abe09729ed6cb827b4dd206470d8c4a42ager@chromium.org return MapWord(reinterpret_cast<uintptr_t>(raw)); 13027276f14ca716596e0a0d17539516370c1f453847kasper.lund} 13037276f14ca716596e0a0d17539516370c1f453847kasper.lund 13047276f14ca716596e0a0d17539516370c1f453847kasper.lund 13057276f14ca716596e0a0d17539516370c1f453847kasper.lundHeapObject* MapWord::ToForwardingAddress() { 13067276f14ca716596e0a0d17539516370c1f453847kasper.lund ASSERT(IsForwardingAddress()); 13077c537e2abe09729ed6cb827b4dd206470d8c4a42ager@chromium.org return HeapObject::FromAddress(reinterpret_cast<Address>(value_)); 13087276f14ca716596e0a0d17539516370c1f453847kasper.lund} 13097276f14ca716596e0a0d17539516370c1f453847kasper.lund 13107276f14ca716596e0a0d17539516370c1f453847kasper.lund 1311c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org#ifdef VERIFY_HEAP 131243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid HeapObject::VerifyObjectField(int offset) { 131343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen VerifyPointer(READ_FIELD(this, offset)); 131443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 131530ce411529579186181838984710b0b0980857aaricow@chromium.org 131630ce411529579186181838984710b0b0980857aaricow@chromium.orgvoid HeapObject::VerifySmiField(int offset) { 1317c859c4f83f6ec3e010213dbbe447cc1f927d01c5svenpanne@chromium.org CHECK(READ_FIELD(this, offset)->IsSmi()); 131830ce411529579186181838984710b0b0980857aaricow@chromium.org} 131943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen#endif 132043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 132143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 1322ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.orgHeap* HeapObject::GetHeap() { 1323c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com Heap* heap = 1324c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com MemoryChunk::FromAddress(reinterpret_cast<Address>(this))->heap(); 1325ef33a5482a35a9a25f702f8e3f02bb6b49f3854cjkummerow@chromium.org SLOW_ASSERT(heap != NULL); 1326c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com return heap; 1327ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org} 1328ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org 1329ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org 1330ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.orgIsolate* HeapObject::GetIsolate() { 1331ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org return GetHeap()->isolate(); 1332ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org} 1333ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org 1334ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org 133543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenMap* HeapObject::map() { 1336196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org#ifdef DEBUG 1337196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org // Clear mark potentially added by PathTracer. 1338196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org uintptr_t raw_value = 1339196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org map_word().ToRawValue() & ~static_cast<uintptr_t>(PathTracer::kMarkTag); 1340196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org return MapWord::FromRawValue(raw_value).ToMap(); 1341196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org#else 13427276f14ca716596e0a0d17539516370c1f453847kasper.lund return map_word().ToMap(); 1343196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org#endif 134443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 134543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 134643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 134743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid HeapObject::set_map(Map* value) { 13487276f14ca716596e0a0d17539516370c1f453847kasper.lund set_map_word(MapWord::FromMap(value)); 1349c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com if (value != NULL) { 1350c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com // TODO(1600) We are passing NULL as a slot because maps can never be on 1351c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com // evacuation candidate. 1352c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com value->GetHeap()->incremental_marking()->RecordWrite(this, NULL, value); 1353c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com } 1354c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com} 1355c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com 1356c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com 135763a7c9f848e755c52a37721debae242cf5d1682dmachenbach@chromium.orgMap* HeapObject::synchronized_map() { 135863a7c9f848e755c52a37721debae242cf5d1682dmachenbach@chromium.org return synchronized_map_word().ToMap(); 135963a7c9f848e755c52a37721debae242cf5d1682dmachenbach@chromium.org} 136063a7c9f848e755c52a37721debae242cf5d1682dmachenbach@chromium.org 136163a7c9f848e755c52a37721debae242cf5d1682dmachenbach@chromium.org 136263a7c9f848e755c52a37721debae242cf5d1682dmachenbach@chromium.orgvoid HeapObject::synchronized_set_map(Map* value) { 136363a7c9f848e755c52a37721debae242cf5d1682dmachenbach@chromium.org synchronized_set_map_word(MapWord::FromMap(value)); 136463a7c9f848e755c52a37721debae242cf5d1682dmachenbach@chromium.org if (value != NULL) { 136563a7c9f848e755c52a37721debae242cf5d1682dmachenbach@chromium.org // TODO(1600) We are passing NULL as a slot because maps can never be on 136663a7c9f848e755c52a37721debae242cf5d1682dmachenbach@chromium.org // evacuation candidate. 136763a7c9f848e755c52a37721debae242cf5d1682dmachenbach@chromium.org value->GetHeap()->incremental_marking()->RecordWrite(this, NULL, value); 136863a7c9f848e755c52a37721debae242cf5d1682dmachenbach@chromium.org } 136963a7c9f848e755c52a37721debae242cf5d1682dmachenbach@chromium.org} 137063a7c9f848e755c52a37721debae242cf5d1682dmachenbach@chromium.org 137163a7c9f848e755c52a37721debae242cf5d1682dmachenbach@chromium.org 13729e41f9ecf5042292a9efcb36e264b37621199553machenbach@chromium.orgvoid HeapObject::synchronized_set_map_no_write_barrier(Map* value) { 13739e41f9ecf5042292a9efcb36e264b37621199553machenbach@chromium.org synchronized_set_map_word(MapWord::FromMap(value)); 13749e41f9ecf5042292a9efcb36e264b37621199553machenbach@chromium.org} 13759e41f9ecf5042292a9efcb36e264b37621199553machenbach@chromium.org 13769e41f9ecf5042292a9efcb36e264b37621199553machenbach@chromium.org 1377c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com// Unsafe accessor omitting write barrier. 137864e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.orgvoid HeapObject::set_map_no_write_barrier(Map* value) { 1379c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com set_map_word(MapWord::FromMap(value)); 13807276f14ca716596e0a0d17539516370c1f453847kasper.lund} 13817276f14ca716596e0a0d17539516370c1f453847kasper.lund 13827276f14ca716596e0a0d17539516370c1f453847kasper.lund 13837276f14ca716596e0a0d17539516370c1f453847kasper.lundMapWord HeapObject::map_word() { 138463a7c9f848e755c52a37721debae242cf5d1682dmachenbach@chromium.org return MapWord( 13859e41f9ecf5042292a9efcb36e264b37621199553machenbach@chromium.org reinterpret_cast<uintptr_t>(NOBARRIER_READ_FIELD(this, kMapOffset))); 138643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 138743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 138843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 13897276f14ca716596e0a0d17539516370c1f453847kasper.lundvoid HeapObject::set_map_word(MapWord map_word) { 13909e41f9ecf5042292a9efcb36e264b37621199553machenbach@chromium.org NOBARRIER_WRITE_FIELD( 139163a7c9f848e755c52a37721debae242cf5d1682dmachenbach@chromium.org this, kMapOffset, reinterpret_cast<Object*>(map_word.value_)); 139263a7c9f848e755c52a37721debae242cf5d1682dmachenbach@chromium.org} 139363a7c9f848e755c52a37721debae242cf5d1682dmachenbach@chromium.org 139463a7c9f848e755c52a37721debae242cf5d1682dmachenbach@chromium.org 139563a7c9f848e755c52a37721debae242cf5d1682dmachenbach@chromium.orgMapWord HeapObject::synchronized_map_word() { 139663a7c9f848e755c52a37721debae242cf5d1682dmachenbach@chromium.org return MapWord( 139763a7c9f848e755c52a37721debae242cf5d1682dmachenbach@chromium.org reinterpret_cast<uintptr_t>(ACQUIRE_READ_FIELD(this, kMapOffset))); 139863a7c9f848e755c52a37721debae242cf5d1682dmachenbach@chromium.org} 139963a7c9f848e755c52a37721debae242cf5d1682dmachenbach@chromium.org 140063a7c9f848e755c52a37721debae242cf5d1682dmachenbach@chromium.org 140163a7c9f848e755c52a37721debae242cf5d1682dmachenbach@chromium.orgvoid HeapObject::synchronized_set_map_word(MapWord map_word) { 140263a7c9f848e755c52a37721debae242cf5d1682dmachenbach@chromium.org RELEASE_WRITE_FIELD( 140363a7c9f848e755c52a37721debae242cf5d1682dmachenbach@chromium.org this, kMapOffset, reinterpret_cast<Object*>(map_word.value_)); 14047276f14ca716596e0a0d17539516370c1f453847kasper.lund} 140543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 140643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 140743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenHeapObject* HeapObject::FromAddress(Address address) { 140843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen ASSERT_TAG_ALIGNED(address); 140943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return reinterpret_cast<HeapObject*>(address + kHeapObjectTag); 141043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 141143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 141243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 141343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenAddress HeapObject::address() { 141443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return reinterpret_cast<Address>(this) - kHeapObjectTag; 141543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 141643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 141743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 141843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenint HeapObject::Size() { 141943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return SizeFromMap(map()); 142043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 142143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 142243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 142343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid HeapObject::IteratePointers(ObjectVisitor* v, int start, int end) { 142443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen v->VisitPointers(reinterpret_cast<Object**>(FIELD_ADDR(this, start)), 142543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen reinterpret_cast<Object**>(FIELD_ADDR(this, end))); 142643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 142743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 142843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 142943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid HeapObject::IteratePointer(ObjectVisitor* v, int offset) { 143043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen v->VisitPointer(reinterpret_cast<Object**>(FIELD_ADDR(this, offset))); 143143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 143243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 143343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 1434895f00d1d8c5a7a7209c36d690688e3552de3df4machenbach@chromium.orgvoid HeapObject::IterateNextCodeLink(ObjectVisitor* v, int offset) { 1435895f00d1d8c5a7a7209c36d690688e3552de3df4machenbach@chromium.org v->VisitNextCodeLink(reinterpret_cast<Object**>(FIELD_ADDR(this, offset))); 1436895f00d1d8c5a7a7209c36d690688e3552de3df4machenbach@chromium.org} 1437895f00d1d8c5a7a7209c36d690688e3552de3df4machenbach@chromium.org 1438895f00d1d8c5a7a7209c36d690688e3552de3df4machenbach@chromium.org 143943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansendouble HeapNumber::value() { 144043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return READ_DOUBLE_FIELD(this, kValueOffset); 144143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 144243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 144343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 144443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid HeapNumber::set_value(double value) { 144543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen WRITE_DOUBLE_FIELD(this, kValueOffset, value); 144643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 144743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 144843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 1449cec079d8ed1f0920a0ea3dc9a3e81966013287c1whesse@chromium.orgint HeapNumber::get_exponent() { 1450cec079d8ed1f0920a0ea3dc9a3e81966013287c1whesse@chromium.org return ((READ_INT_FIELD(this, kExponentOffset) & kExponentMask) >> 1451cec079d8ed1f0920a0ea3dc9a3e81966013287c1whesse@chromium.org kExponentShift) - kExponentBias; 1452cec079d8ed1f0920a0ea3dc9a3e81966013287c1whesse@chromium.org} 1453cec079d8ed1f0920a0ea3dc9a3e81966013287c1whesse@chromium.org 1454cec079d8ed1f0920a0ea3dc9a3e81966013287c1whesse@chromium.org 1455cec079d8ed1f0920a0ea3dc9a3e81966013287c1whesse@chromium.orgint HeapNumber::get_sign() { 1456cec079d8ed1f0920a0ea3dc9a3e81966013287c1whesse@chromium.org return READ_INT_FIELD(this, kExponentOffset) & kSignMask; 1457cec079d8ed1f0920a0ea3dc9a3e81966013287c1whesse@chromium.org} 1458cec079d8ed1f0920a0ea3dc9a3e81966013287c1whesse@chromium.org 1459cec079d8ed1f0920a0ea3dc9a3e81966013287c1whesse@chromium.org 146043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenACCESSORS(JSObject, properties, FixedArray, kPropertiesOffset) 14610b6db5975a9d1ebcf3de7b18603380d99f789e66sgjesse@chromium.org 14620b6db5975a9d1ebcf3de7b18603380d99f789e66sgjesse@chromium.org 146364e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.orgObject** FixedArray::GetFirstElementAddress() { 146464e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org return reinterpret_cast<Object**>(FIELD_ADDR(this, OffsetOfElementAt(0))); 146564e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org} 146664e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org 146764e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org 146864e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.orgbool FixedArray::ContainsOnlySmisOrHoles() { 146964e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org Object* the_hole = GetHeap()->the_hole_value(); 147064e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org Object** current = GetFirstElementAddress(); 147164e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org for (int i = 0; i < length(); ++i) { 147264e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org Object* candidate = *current++; 147364e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org if (!candidate->IsSmi() && candidate != the_hole) return false; 147464e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org } 147564e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org return true; 147664e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org} 147764e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org 147864e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org 14794acdc2c8d4caecf7606db8af710366c1d6e28fe5whesse@chromium.orgFixedArrayBase* JSObject::elements() { 14800b6db5975a9d1ebcf3de7b18603380d99f789e66sgjesse@chromium.org Object* array = READ_FIELD(this, kElementsOffset); 14814acdc2c8d4caecf7606db8af710366c1d6e28fe5whesse@chromium.org return static_cast<FixedArrayBase*>(array); 14820b6db5975a9d1ebcf3de7b18603380d99f789e66sgjesse@chromium.org} 14830b6db5975a9d1ebcf3de7b18603380d99f789e66sgjesse@chromium.org 1484830d30c478be03b0ac560f4002833ab141e41effsvenpanne@chromium.org 148549ff8125753a4cb137f5e549671d42c7ca47ade5machenbach@chromium.orgvoid JSObject::ValidateElements(Handle<JSObject> object) { 1486ef33a5482a35a9a25f702f8e3f02bb6b49f3854cjkummerow@chromium.org#ifdef ENABLE_SLOW_ASSERTS 1487830d30c478be03b0ac560f4002833ab141e41effsvenpanne@chromium.org if (FLAG_enable_slow_asserts) { 148849ff8125753a4cb137f5e549671d42c7ca47ade5machenbach@chromium.org ElementsAccessor* accessor = object->GetElementsAccessor(); 148949ff8125753a4cb137f5e549671d42c7ca47ade5machenbach@chromium.org accessor->Validate(object); 1490c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com } 1491c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com#endif 1492c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com} 1493c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com 1494c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com 1495528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.orgvoid AllocationSite::Initialize() { 1496b5be0a91a2e75da55653dd3583b7f3c1c54f7309machenbach@chromium.org set_transition_info(Smi::FromInt(0)); 1497528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org SetElementsKind(GetInitialFastElementsKind()); 14983d079fe881245e49c7ba803b54b4fe6d4b46113cmachenbach@chromium.org set_nested_site(Smi::FromInt(0)); 14994ddd2f1981d343a2efe6609a3e0ce6b9c80b6ed9machenbach@chromium.org set_pretenure_data(Smi::FromInt(0)); 15004ddd2f1981d343a2efe6609a3e0ce6b9c80b6ed9machenbach@chromium.org set_pretenure_create_count(Smi::FromInt(0)); 1501528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org set_dependent_code(DependentCode::cast(GetHeap()->empty_fixed_array()), 1502528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org SKIP_WRITE_BARRIER); 1503528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org} 1504528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org 1505528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org 1506c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.orgvoid AllocationSite::MarkZombie() { 1507c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org ASSERT(!IsZombie()); 15089cbaabda8b4daeb06759ace10c926ab55bb69d7bulan@chromium.org Initialize(); 15094ddd2f1981d343a2efe6609a3e0ce6b9c80b6ed9machenbach@chromium.org set_pretenure_decision(kZombie); 1510c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org} 1511c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org 1512c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org 1513ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org// Heuristic: We only need to create allocation site info if the boilerplate 1514ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org// elements kind is the initial elements kind. 1515bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.orgAllocationSiteMode AllocationSite::GetMode( 1516ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org ElementsKind boilerplate_elements_kind) { 151769f64b1a8bfa6f5418b7c1f71d4e0833f76e93edmachenbach@chromium.org if (FLAG_pretenuring_call_new || 151869f64b1a8bfa6f5418b7c1f71d4e0833f76e93edmachenbach@chromium.org IsFastSmiElementsKind(boilerplate_elements_kind)) { 1519ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org return TRACK_ALLOCATION_SITE; 1520ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org } 1521ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org 1522ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org return DONT_TRACK_ALLOCATION_SITE; 1523ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org} 1524ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org 1525ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org 1526bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.orgAllocationSiteMode AllocationSite::GetMode(ElementsKind from, 1527bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org ElementsKind to) { 152869f64b1a8bfa6f5418b7c1f71d4e0833f76e93edmachenbach@chromium.org if (FLAG_pretenuring_call_new || 152969f64b1a8bfa6f5418b7c1f71d4e0833f76e93edmachenbach@chromium.org (IsFastSmiElementsKind(from) && 153069f64b1a8bfa6f5418b7c1f71d4e0833f76e93edmachenbach@chromium.org IsMoreGeneralElementsKindTransition(from, to))) { 1531ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org return TRACK_ALLOCATION_SITE; 1532ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org } 1533ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org 1534ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org return DONT_TRACK_ALLOCATION_SITE; 1535ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org} 1536ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org 1537ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org 1538662436e7b124b3535773535c671c53db322070b5verwaest@chromium.orginline bool AllocationSite::CanTrack(InstanceType type) { 1539c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org if (FLAG_allocation_site_pretenuring) { 15400f13e74b7310d8b14f19c6b93b36ff95059f97f6ulan@chromium.org return type == JS_ARRAY_TYPE || 15410f13e74b7310d8b14f19c6b93b36ff95059f97f6ulan@chromium.org type == JS_OBJECT_TYPE || 15420f13e74b7310d8b14f19c6b93b36ff95059f97f6ulan@chromium.org type < FIRST_NONSTRING_TYPE; 1543c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org } 1544662436e7b124b3535773535c671c53db322070b5verwaest@chromium.org return type == JS_ARRAY_TYPE; 1545662436e7b124b3535773535c671c53db322070b5verwaest@chromium.org} 1546662436e7b124b3535773535c671c53db322070b5verwaest@chromium.org 1547662436e7b124b3535773535c671c53db322070b5verwaest@chromium.org 1548b5be0a91a2e75da55653dd3583b7f3c1c54f7309machenbach@chromium.orginline DependentCode::DependencyGroup AllocationSite::ToDependencyGroup( 1549b5be0a91a2e75da55653dd3583b7f3c1c54f7309machenbach@chromium.org Reason reason) { 1550b5be0a91a2e75da55653dd3583b7f3c1c54f7309machenbach@chromium.org switch (reason) { 1551b5be0a91a2e75da55653dd3583b7f3c1c54f7309machenbach@chromium.org case TENURING: 1552b5be0a91a2e75da55653dd3583b7f3c1c54f7309machenbach@chromium.org return DependentCode::kAllocationSiteTenuringChangedGroup; 1553b5be0a91a2e75da55653dd3583b7f3c1c54f7309machenbach@chromium.org break; 1554b5be0a91a2e75da55653dd3583b7f3c1c54f7309machenbach@chromium.org case TRANSITIONS: 1555b5be0a91a2e75da55653dd3583b7f3c1c54f7309machenbach@chromium.org return DependentCode::kAllocationSiteTransitionChangedGroup; 1556b5be0a91a2e75da55653dd3583b7f3c1c54f7309machenbach@chromium.org break; 1557b5be0a91a2e75da55653dd3583b7f3c1c54f7309machenbach@chromium.org } 1558b5be0a91a2e75da55653dd3583b7f3c1c54f7309machenbach@chromium.org UNREACHABLE(); 1559b5be0a91a2e75da55653dd3583b7f3c1c54f7309machenbach@chromium.org return DependentCode::kAllocationSiteTransitionChangedGroup; 1560b5be0a91a2e75da55653dd3583b7f3c1c54f7309machenbach@chromium.org} 1561b5be0a91a2e75da55653dd3583b7f3c1c54f7309machenbach@chromium.org 1562b5be0a91a2e75da55653dd3583b7f3c1c54f7309machenbach@chromium.org 15634ddd2f1981d343a2efe6609a3e0ce6b9c80b6ed9machenbach@chromium.orginline void AllocationSite::set_memento_found_count(int count) { 15644ddd2f1981d343a2efe6609a3e0ce6b9c80b6ed9machenbach@chromium.org int value = pretenure_data()->value(); 15654ddd2f1981d343a2efe6609a3e0ce6b9c80b6ed9machenbach@chromium.org // Verify that we can count more mementos than we can possibly find in one 15664ddd2f1981d343a2efe6609a3e0ce6b9c80b6ed9machenbach@chromium.org // new space collection. 15674ddd2f1981d343a2efe6609a3e0ce6b9c80b6ed9machenbach@chromium.org ASSERT((GetHeap()->MaxSemiSpaceSize() / 15684ddd2f1981d343a2efe6609a3e0ce6b9c80b6ed9machenbach@chromium.org (StaticVisitorBase::kMinObjectSizeInWords * kPointerSize + 15694ddd2f1981d343a2efe6609a3e0ce6b9c80b6ed9machenbach@chromium.org AllocationMemento::kSize)) < MementoFoundCountBits::kMax); 15704ddd2f1981d343a2efe6609a3e0ce6b9c80b6ed9machenbach@chromium.org ASSERT(count < MementoFoundCountBits::kMax); 15714ddd2f1981d343a2efe6609a3e0ce6b9c80b6ed9machenbach@chromium.org set_pretenure_data( 15724ddd2f1981d343a2efe6609a3e0ce6b9c80b6ed9machenbach@chromium.org Smi::FromInt(MementoFoundCountBits::update(value, count)), 15734ddd2f1981d343a2efe6609a3e0ce6b9c80b6ed9machenbach@chromium.org SKIP_WRITE_BARRIER); 15744ddd2f1981d343a2efe6609a3e0ce6b9c80b6ed9machenbach@chromium.org} 15754ddd2f1981d343a2efe6609a3e0ce6b9c80b6ed9machenbach@chromium.org 157671ea97f146aa116d61baeba1912b87a60feda71fhpayer@chromium.orginline bool AllocationSite::IncrementMementoFoundCount() { 157771ea97f146aa116d61baeba1912b87a60feda71fhpayer@chromium.org if (IsZombie()) return false; 157871ea97f146aa116d61baeba1912b87a60feda71fhpayer@chromium.org 15794ddd2f1981d343a2efe6609a3e0ce6b9c80b6ed9machenbach@chromium.org int value = memento_found_count(); 15804ddd2f1981d343a2efe6609a3e0ce6b9c80b6ed9machenbach@chromium.org set_memento_found_count(value + 1); 1581d06b9264b1c886fc80a100e9915cf8ae07fdb4e5machenbach@chromium.org return memento_found_count() == kPretenureMinimumCreated; 1582c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org} 1583c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org 1584c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org 1585c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.orginline void AllocationSite::IncrementMementoCreateCount() { 1586c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org ASSERT(FLAG_allocation_site_pretenuring); 15874ddd2f1981d343a2efe6609a3e0ce6b9c80b6ed9machenbach@chromium.org int value = memento_create_count(); 15884ddd2f1981d343a2efe6609a3e0ce6b9c80b6ed9machenbach@chromium.org set_memento_create_count(value + 1); 1589c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org} 1590c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org 1591c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org 1592196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.orginline bool AllocationSite::MakePretenureDecision( 1593196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org PretenureDecision current_decision, 1594196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org double ratio, 1595196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org bool maximum_size_scavenge) { 1596196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org // Here we just allow state transitions from undecided or maybe tenure 1597196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org // to don't tenure, maybe tenure, or tenure. 1598196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org if ((current_decision == kUndecided || current_decision == kMaybeTenure)) { 1599196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org if (ratio >= kPretenureRatio) { 1600196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org // We just transition into tenure state when the semi-space was at 1601196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org // maximum capacity. 1602196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org if (maximum_size_scavenge) { 1603196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org set_deopt_dependent_code(true); 1604196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org set_pretenure_decision(kTenure); 1605196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org // Currently we just need to deopt when we make a state transition to 1606196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org // tenure. 1607196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org return true; 1608196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org } 1609196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org set_pretenure_decision(kMaybeTenure); 1610196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org } else { 1611196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org set_pretenure_decision(kDontTenure); 1612196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org } 1613196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org } 1614196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org return false; 1615196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org} 1616196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org 1617196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org 1618196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.orginline bool AllocationSite::DigestPretenuringFeedback( 1619196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org bool maximum_size_scavenge) { 1620196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org bool deopt = false; 16214ddd2f1981d343a2efe6609a3e0ce6b9c80b6ed9machenbach@chromium.org int create_count = memento_create_count(); 162225530ce9cb50f9e8386663ca40fd3f6e023ec9f6bmeurer@chromium.org int found_count = memento_found_count(); 162325530ce9cb50f9e8386663ca40fd3f6e023ec9f6bmeurer@chromium.org bool minimum_mementos_created = create_count >= kPretenureMinimumCreated; 162425530ce9cb50f9e8386663ca40fd3f6e023ec9f6bmeurer@chromium.org double ratio = 162525530ce9cb50f9e8386663ca40fd3f6e023ec9f6bmeurer@chromium.org minimum_mementos_created || FLAG_trace_pretenuring_statistics ? 162625530ce9cb50f9e8386663ca40fd3f6e023ec9f6bmeurer@chromium.org static_cast<double>(found_count) / create_count : 0.0; 1627196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org PretenureDecision current_decision = pretenure_decision(); 1628196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org 1629196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org if (minimum_mementos_created) { 1630196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org deopt = MakePretenureDecision( 1631196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org current_decision, ratio, maximum_size_scavenge); 1632c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org } 1633c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org 163425530ce9cb50f9e8386663ca40fd3f6e023ec9f6bmeurer@chromium.org if (FLAG_trace_pretenuring_statistics) { 163525530ce9cb50f9e8386663ca40fd3f6e023ec9f6bmeurer@chromium.org PrintF( 163625530ce9cb50f9e8386663ca40fd3f6e023ec9f6bmeurer@chromium.org "AllocationSite(%p): (created, found, ratio) (%d, %d, %f) %s => %s\n", 163725530ce9cb50f9e8386663ca40fd3f6e023ec9f6bmeurer@chromium.org static_cast<void*>(this), create_count, found_count, ratio, 1638196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org PretenureDecisionName(current_decision), 1639196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org PretenureDecisionName(pretenure_decision())); 164025530ce9cb50f9e8386663ca40fd3f6e023ec9f6bmeurer@chromium.org } 164125530ce9cb50f9e8386663ca40fd3f6e023ec9f6bmeurer@chromium.org 1642c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org // Clear feedback calculation fields until the next gc. 16434ddd2f1981d343a2efe6609a3e0ce6b9c80b6ed9machenbach@chromium.org set_memento_found_count(0); 16444ddd2f1981d343a2efe6609a3e0ce6b9c80b6ed9machenbach@chromium.org set_memento_create_count(0); 1645196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org return deopt; 1646c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org} 1647c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org 1648c86e8c29eea534916f0d6a2a285b65a86d1b3b67machenbach@chromium.org 1649c5d4971574b7a205fa0e788d8121dc79485e5e67hpayer@chromium.orgvoid JSObject::EnsureCanContainHeapObjectElements(Handle<JSObject> object) { 165049ff8125753a4cb137f5e549671d42c7ca47ade5machenbach@chromium.org JSObject::ValidateElements(object); 1651c5d4971574b7a205fa0e788d8121dc79485e5e67hpayer@chromium.org ElementsKind elements_kind = object->map()->elements_kind(); 1652830d30c478be03b0ac560f4002833ab141e41effsvenpanne@chromium.org if (!IsFastObjectElementsKind(elements_kind)) { 1653830d30c478be03b0ac560f4002833ab141e41effsvenpanne@chromium.org if (IsFastHoleyElementsKind(elements_kind)) { 1654c5d4971574b7a205fa0e788d8121dc79485e5e67hpayer@chromium.org TransitionElementsKind(object, FAST_HOLEY_ELEMENTS); 1655830d30c478be03b0ac560f4002833ab141e41effsvenpanne@chromium.org } else { 1656c5d4971574b7a205fa0e788d8121dc79485e5e67hpayer@chromium.org TransitionElementsKind(object, FAST_ELEMENTS); 1657830d30c478be03b0ac560f4002833ab141e41effsvenpanne@chromium.org } 1658c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com } 1659c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com} 1660c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com 1661c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com 1662a221880197f38ff22d942851060daffa5d036bdfmachenbach@chromium.orgvoid JSObject::EnsureCanContainElements(Handle<JSObject> object, 1663a221880197f38ff22d942851060daffa5d036bdfmachenbach@chromium.org Object** objects, 1664a221880197f38ff22d942851060daffa5d036bdfmachenbach@chromium.org uint32_t count, 1665a221880197f38ff22d942851060daffa5d036bdfmachenbach@chromium.org EnsureElementsMode mode) { 1666a221880197f38ff22d942851060daffa5d036bdfmachenbach@chromium.org ElementsKind current_kind = object->map()->elements_kind(); 166764e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org ElementsKind target_kind = current_kind; 1668a221880197f38ff22d942851060daffa5d036bdfmachenbach@chromium.org { 1669a221880197f38ff22d942851060daffa5d036bdfmachenbach@chromium.org DisallowHeapAllocation no_allocation; 1670a221880197f38ff22d942851060daffa5d036bdfmachenbach@chromium.org ASSERT(mode != ALLOW_COPIED_DOUBLE_ELEMENTS); 1671a221880197f38ff22d942851060daffa5d036bdfmachenbach@chromium.org bool is_holey = IsFastHoleyElementsKind(current_kind); 1672a221880197f38ff22d942851060daffa5d036bdfmachenbach@chromium.org if (current_kind == FAST_HOLEY_ELEMENTS) return; 1673a221880197f38ff22d942851060daffa5d036bdfmachenbach@chromium.org Heap* heap = object->GetHeap(); 1674a221880197f38ff22d942851060daffa5d036bdfmachenbach@chromium.org Object* the_hole = heap->the_hole_value(); 1675a221880197f38ff22d942851060daffa5d036bdfmachenbach@chromium.org for (uint32_t i = 0; i < count; ++i) { 1676a221880197f38ff22d942851060daffa5d036bdfmachenbach@chromium.org Object* current = *objects++; 1677a221880197f38ff22d942851060daffa5d036bdfmachenbach@chromium.org if (current == the_hole) { 1678a221880197f38ff22d942851060daffa5d036bdfmachenbach@chromium.org is_holey = true; 1679a221880197f38ff22d942851060daffa5d036bdfmachenbach@chromium.org target_kind = GetHoleyElementsKind(target_kind); 1680a221880197f38ff22d942851060daffa5d036bdfmachenbach@chromium.org } else if (!current->IsSmi()) { 1681a221880197f38ff22d942851060daffa5d036bdfmachenbach@chromium.org if (mode == ALLOW_CONVERTED_DOUBLE_ELEMENTS && current->IsNumber()) { 1682a221880197f38ff22d942851060daffa5d036bdfmachenbach@chromium.org if (IsFastSmiElementsKind(target_kind)) { 1683a221880197f38ff22d942851060daffa5d036bdfmachenbach@chromium.org if (is_holey) { 1684a221880197f38ff22d942851060daffa5d036bdfmachenbach@chromium.org target_kind = FAST_HOLEY_DOUBLE_ELEMENTS; 1685a221880197f38ff22d942851060daffa5d036bdfmachenbach@chromium.org } else { 1686a221880197f38ff22d942851060daffa5d036bdfmachenbach@chromium.org target_kind = FAST_DOUBLE_ELEMENTS; 1687a221880197f38ff22d942851060daffa5d036bdfmachenbach@chromium.org } 1688830d30c478be03b0ac560f4002833ab141e41effsvenpanne@chromium.org } 1689a221880197f38ff22d942851060daffa5d036bdfmachenbach@chromium.org } else if (is_holey) { 1690a221880197f38ff22d942851060daffa5d036bdfmachenbach@chromium.org target_kind = FAST_HOLEY_ELEMENTS; 1691a221880197f38ff22d942851060daffa5d036bdfmachenbach@chromium.org break; 1692a221880197f38ff22d942851060daffa5d036bdfmachenbach@chromium.org } else { 1693a221880197f38ff22d942851060daffa5d036bdfmachenbach@chromium.org target_kind = FAST_ELEMENTS; 1694830d30c478be03b0ac560f4002833ab141e41effsvenpanne@chromium.org } 1695c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com } 1696c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com } 1697c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com } 169864e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org if (target_kind != current_kind) { 1699a221880197f38ff22d942851060daffa5d036bdfmachenbach@chromium.org TransitionElementsKind(object, target_kind); 170064e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org } 1701c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com} 1702c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com 1703c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com 1704fa0c3c69b9d632e5730bdd9c745c375beef5e54dmachenbach@chromium.orgvoid JSObject::EnsureCanContainElements(Handle<JSObject> object, 1705fa0c3c69b9d632e5730bdd9c745c375beef5e54dmachenbach@chromium.org Handle<FixedArrayBase> elements, 1706fa0c3c69b9d632e5730bdd9c745c375beef5e54dmachenbach@chromium.org uint32_t length, 1707fa0c3c69b9d632e5730bdd9c745c375beef5e54dmachenbach@chromium.org EnsureElementsMode mode) { 1708a221880197f38ff22d942851060daffa5d036bdfmachenbach@chromium.org Heap* heap = object->GetHeap(); 1709a221880197f38ff22d942851060daffa5d036bdfmachenbach@chromium.org if (elements->map() != heap->fixed_double_array_map()) { 1710a221880197f38ff22d942851060daffa5d036bdfmachenbach@chromium.org ASSERT(elements->map() == heap->fixed_array_map() || 1711a221880197f38ff22d942851060daffa5d036bdfmachenbach@chromium.org elements->map() == heap->fixed_cow_array_map()); 171264e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org if (mode == ALLOW_COPIED_DOUBLE_ELEMENTS) { 171364e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org mode = DONT_ALLOW_DOUBLE_ELEMENTS; 171464e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org } 1715a221880197f38ff22d942851060daffa5d036bdfmachenbach@chromium.org Object** objects = 1716a221880197f38ff22d942851060daffa5d036bdfmachenbach@chromium.org Handle<FixedArray>::cast(elements)->GetFirstElementAddress(); 1717a221880197f38ff22d942851060daffa5d036bdfmachenbach@chromium.org EnsureCanContainElements(object, objects, length, mode); 1718a221880197f38ff22d942851060daffa5d036bdfmachenbach@chromium.org return; 171964e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org } 172064e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org 172164e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org ASSERT(mode == ALLOW_COPIED_DOUBLE_ELEMENTS); 1722a221880197f38ff22d942851060daffa5d036bdfmachenbach@chromium.org if (object->GetElementsKind() == FAST_HOLEY_SMI_ELEMENTS) { 1723a221880197f38ff22d942851060daffa5d036bdfmachenbach@chromium.org TransitionElementsKind(object, FAST_HOLEY_DOUBLE_ELEMENTS); 1724a221880197f38ff22d942851060daffa5d036bdfmachenbach@chromium.org } else if (object->GetElementsKind() == FAST_SMI_ELEMENTS) { 1725a221880197f38ff22d942851060daffa5d036bdfmachenbach@chromium.org Handle<FixedDoubleArray> double_array = 1726a221880197f38ff22d942851060daffa5d036bdfmachenbach@chromium.org Handle<FixedDoubleArray>::cast(elements); 1727830d30c478be03b0ac560f4002833ab141e41effsvenpanne@chromium.org for (uint32_t i = 0; i < length; ++i) { 1728830d30c478be03b0ac560f4002833ab141e41effsvenpanne@chromium.org if (double_array->is_the_hole(i)) { 1729a221880197f38ff22d942851060daffa5d036bdfmachenbach@chromium.org TransitionElementsKind(object, FAST_HOLEY_DOUBLE_ELEMENTS); 1730a221880197f38ff22d942851060daffa5d036bdfmachenbach@chromium.org return; 1731830d30c478be03b0ac560f4002833ab141e41effsvenpanne@chromium.org } 1732830d30c478be03b0ac560f4002833ab141e41effsvenpanne@chromium.org } 1733a221880197f38ff22d942851060daffa5d036bdfmachenbach@chromium.org TransitionElementsKind(object, FAST_DOUBLE_ELEMENTS); 173464e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org } 1735c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com} 1736c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com 17370b6db5975a9d1ebcf3de7b18603380d99f789e66sgjesse@chromium.org 173863a7c9f848e755c52a37721debae242cf5d1682dmachenbach@chromium.orgvoid JSObject::SetMapAndElements(Handle<JSObject> object, 173963a7c9f848e755c52a37721debae242cf5d1682dmachenbach@chromium.org Handle<Map> new_map, 174063a7c9f848e755c52a37721debae242cf5d1682dmachenbach@chromium.org Handle<FixedArrayBase> value) { 174163a7c9f848e755c52a37721debae242cf5d1682dmachenbach@chromium.org JSObject::MigrateToMap(object, new_map); 174263a7c9f848e755c52a37721debae242cf5d1682dmachenbach@chromium.org ASSERT((object->map()->has_fast_smi_or_object_elements() || 174363a7c9f848e755c52a37721debae242cf5d1682dmachenbach@chromium.org (*value == object->GetHeap()->empty_fixed_array())) == 174463a7c9f848e755c52a37721debae242cf5d1682dmachenbach@chromium.org (value->map() == object->GetHeap()->fixed_array_map() || 174563a7c9f848e755c52a37721debae242cf5d1682dmachenbach@chromium.org value->map() == object->GetHeap()->fixed_cow_array_map())); 174663a7c9f848e755c52a37721debae242cf5d1682dmachenbach@chromium.org ASSERT((*value == object->GetHeap()->empty_fixed_array()) || 174763a7c9f848e755c52a37721debae242cf5d1682dmachenbach@chromium.org (object->map()->has_fast_double_elements() == 174863a7c9f848e755c52a37721debae242cf5d1682dmachenbach@chromium.org value->IsFixedDoubleArray())); 174963a7c9f848e755c52a37721debae242cf5d1682dmachenbach@chromium.org object->set_elements(*value); 17500b6db5975a9d1ebcf3de7b18603380d99f789e66sgjesse@chromium.org} 175143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 175243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 17533c93e774a3c6dc64c4d10d9cc7d5e071f0e8a28esvenpanne@chromium.orgvoid JSObject::set_elements(FixedArrayBase* value, WriteBarrierMode mode) { 175463a7c9f848e755c52a37721debae242cf5d1682dmachenbach@chromium.org WRITE_FIELD(this, kElementsOffset, value); 175563a7c9f848e755c52a37721debae242cf5d1682dmachenbach@chromium.org CONDITIONAL_WRITE_BARRIER(GetHeap(), this, kElementsOffset, value, mode); 17563c93e774a3c6dc64c4d10d9cc7d5e071f0e8a28esvenpanne@chromium.org} 17573c93e774a3c6dc64c4d10d9cc7d5e071f0e8a28esvenpanne@chromium.org 17583c93e774a3c6dc64c4d10d9cc7d5e071f0e8a28esvenpanne@chromium.org 175943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid JSObject::initialize_properties() { 1760ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org ASSERT(!GetHeap()->InNewSpace(GetHeap()->empty_fixed_array())); 1761ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org WRITE_FIELD(this, kPropertiesOffset, GetHeap()->empty_fixed_array()); 176243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 176343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 176443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 176543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid JSObject::initialize_elements() { 17665b080567cf135f6dbaf23973ba6b6fa1d6af83b3machenbach@chromium.org FixedArrayBase* elements = map()->GetInitialElements(); 17675b080567cf135f6dbaf23973ba6b6fa1d6af83b3machenbach@chromium.org WRITE_FIELD(this, kElementsOffset, elements); 176840b9da37a45dabf86bd82a39e885f2921f47fc08fschneider@chromium.org} 176940b9da37a45dabf86bd82a39e885f2921f47fc08fschneider@chromium.org 177040b9da37a45dabf86bd82a39e885f2921f47fc08fschneider@chromium.org 1771e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.orgHandle<String> JSObject::ExpectedTransitionKey(Handle<Map> map) { 177279e7902fa5f94747b5383dd40f3002dd8b62303arossberg@chromium.org DisallowHeapAllocation no_gc; 1773e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org if (!map->HasTransitionArray()) return Handle<String>::null(); 1774e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org TransitionArray* transitions = map->transitions(); 1775e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org if (!transitions->IsSimpleTransition()) return Handle<String>::null(); 1776e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org int transition = TransitionArray::kSimpleTransitionIndex; 1777e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org PropertyDetails details = transitions->GetTargetDetails(transition); 1778e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org Name* name = transitions->GetKey(transition); 1779e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org if (details.type() != FIELD) return Handle<String>::null(); 1780e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org if (details.attributes() != NONE) return Handle<String>::null(); 1781e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org if (!name->IsString()) return Handle<String>::null(); 1782e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org return Handle<String>(String::cast(name)); 1783e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org} 1784e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org 1785e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org 1786e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.orgHandle<Map> JSObject::ExpectedTransitionTarget(Handle<Map> map) { 1787e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org ASSERT(!ExpectedTransitionKey(map).is_null()); 1788e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org return Handle<Map>(map->transitions()->GetTarget( 1789e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org TransitionArray::kSimpleTransitionIndex)); 1790e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org} 1791e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org 1792e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org 1793e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.orgHandle<Map> JSObject::FindTransitionToField(Handle<Map> map, Handle<Name> key) { 179479e7902fa5f94747b5383dd40f3002dd8b62303arossberg@chromium.org DisallowHeapAllocation no_allocation; 1795e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org if (!map->HasTransitionArray()) return Handle<Map>::null(); 1796e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org TransitionArray* transitions = map->transitions(); 1797e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org int transition = transitions->Search(*key); 1798e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org if (transition == TransitionArray::kNotFound) return Handle<Map>::null(); 1799e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org PropertyDetails target_details = transitions->GetTargetDetails(transition); 1800e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org if (target_details.type() != FIELD) return Handle<Map>::null(); 1801e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org if (target_details.attributes() != NONE) return Handle<Map>::null(); 1802e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org return Handle<Map>(transitions->GetTarget(transition)); 180389e18f5599cb4cd462cb1ed324addd7388fb4d60rossberg@chromium.org} 180489e18f5599cb4cd462cb1ed324addd7388fb4d60rossberg@chromium.org 180589e18f5599cb4cd462cb1ed324addd7388fb4d60rossberg@chromium.org 180643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenACCESSORS(Oddball, to_string, String, kToStringOffset) 180743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenACCESSORS(Oddball, to_number, Object, kToNumberOffset) 180843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 180943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 1810ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.orgbyte Oddball::kind() { 1811c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com return Smi::cast(READ_FIELD(this, kKindOffset))->value(); 1812ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org} 1813ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org 1814ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org 1815ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.orgvoid Oddball::set_kind(byte value) { 1816c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com WRITE_FIELD(this, kKindOffset, Smi::FromInt(value)); 1817ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org} 1818ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org 1819ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org 182041728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.orgObject* Cell::value() { 1821defbd109bb9bd556bb8ece103c3b340d3552155ekasperl@chromium.org return READ_FIELD(this, kValueOffset); 1822defbd109bb9bd556bb8ece103c3b340d3552155ekasperl@chromium.org} 1823defbd109bb9bd556bb8ece103c3b340d3552155ekasperl@chromium.org 1824defbd109bb9bd556bb8ece103c3b340d3552155ekasperl@chromium.org 182541728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.orgvoid Cell::set_value(Object* val, WriteBarrierMode ignored) { 1826defbd109bb9bd556bb8ece103c3b340d3552155ekasperl@chromium.org // The write barrier is not used for global property cells. 1827b752d4061aaeb7d6a6ec368607871789d54b0207dslomov@chromium.org ASSERT(!val->IsPropertyCell() && !val->IsCell()); 1828defbd109bb9bd556bb8ece103c3b340d3552155ekasperl@chromium.org WRITE_FIELD(this, kValueOffset, val); 1829defbd109bb9bd556bb8ece103c3b340d3552155ekasperl@chromium.org} 1830defbd109bb9bd556bb8ece103c3b340d3552155ekasperl@chromium.org 18311510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgACCESSORS(PropertyCell, dependent_code, DependentCode, kDependentCodeOffset) 18322abc450936e88b5c98a5e9d43ee6230ccc748272kasperl@chromium.org 1833b752d4061aaeb7d6a6ec368607871789d54b0207dslomov@chromium.orgObject* PropertyCell::type_raw() { 183441728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org return READ_FIELD(this, kTypeOffset); 183541728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org} 183641728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org 183741728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org 1838b752d4061aaeb7d6a6ec368607871789d54b0207dslomov@chromium.orgvoid PropertyCell::set_type_raw(Object* val, WriteBarrierMode ignored) { 183941728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org WRITE_FIELD(this, kTypeOffset, val); 184041728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org} 184141728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org 184241728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org 184343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenint JSObject::GetHeaderSize() { 1844e959c18cf7193e2f021245584a3c8f1f32f82c92kasperl@chromium.org InstanceType type = map()->instance_type(); 1845e959c18cf7193e2f021245584a3c8f1f32f82c92kasperl@chromium.org // Check for the most common kind of JavaScript object before 1846e959c18cf7193e2f021245584a3c8f1f32f82c92kasperl@chromium.org // falling into the generic switch. This speeds up the internal 1847e959c18cf7193e2f021245584a3c8f1f32f82c92kasperl@chromium.org // field operations considerably on average. 1848e959c18cf7193e2f021245584a3c8f1f32f82c92kasperl@chromium.org if (type == JS_OBJECT_TYPE) return JSObject::kHeaderSize; 1849e959c18cf7193e2f021245584a3c8f1f32f82c92kasperl@chromium.org switch (type) { 1850e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org case JS_GENERATOR_OBJECT_TYPE: 1851e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org return JSGeneratorObject::kSize; 1852ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.com case JS_MODULE_TYPE: 1853ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.com return JSModule::kSize; 18545a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org case JS_GLOBAL_PROXY_TYPE: 18555a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org return JSGlobalProxy::kSize; 185643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen case JS_GLOBAL_OBJECT_TYPE: 185743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return JSGlobalObject::kSize; 185843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen case JS_BUILTINS_OBJECT_TYPE: 185943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return JSBuiltinsObject::kSize; 186043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen case JS_FUNCTION_TYPE: 186143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return JSFunction::kSize; 186243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen case JS_VALUE_TYPE: 186343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return JSValue::kSize; 18644efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org case JS_DATE_TYPE: 18654efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org return JSDate::kSize; 186643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen case JS_ARRAY_TYPE: 18672efb900e7350b14be905abdeab077f3a64c583cfulan@chromium.org return JSArray::kSize; 1868f705b5034dc5bc422ac1019b591469a7d0534772mstarzinger@chromium.org case JS_ARRAY_BUFFER_TYPE: 1869f705b5034dc5bc422ac1019b591469a7d0534772mstarzinger@chromium.org return JSArrayBuffer::kSize; 1870e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org case JS_TYPED_ARRAY_TYPE: 1871e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org return JSTypedArray::kSize; 18721510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org case JS_DATA_VIEW_TYPE: 18731510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org return JSDataView::kSize; 18746e196bfaf0e555d0c835390bb6ebc0a74484491dulan@chromium.org case JS_SET_TYPE: 18756e196bfaf0e555d0c835390bb6ebc0a74484491dulan@chromium.org return JSSet::kSize; 18766e196bfaf0e555d0c835390bb6ebc0a74484491dulan@chromium.org case JS_MAP_TYPE: 18776e196bfaf0e555d0c835390bb6ebc0a74484491dulan@chromium.org return JSMap::kSize; 18784ef23eea527ce7f45bdc5edd52bd4d1a989e2359machenbach@chromium.org case JS_SET_ITERATOR_TYPE: 18794ef23eea527ce7f45bdc5edd52bd4d1a989e2359machenbach@chromium.org return JSSetIterator::kSize; 18804ef23eea527ce7f45bdc5edd52bd4d1a989e2359machenbach@chromium.org case JS_MAP_ITERATOR_TYPE: 18814ef23eea527ce7f45bdc5edd52bd4d1a989e2359machenbach@chromium.org return JSMapIterator::kSize; 18827c2628c3f0353f0558760c3ca442f934263ea766kmillikin@chromium.org case JS_WEAK_MAP_TYPE: 18837c2628c3f0353f0558760c3ca442f934263ea766kmillikin@chromium.org return JSWeakMap::kSize; 1884ba72ec861b69b67139c93fc6dd56f4a73c9b3135jkummerow@chromium.org case JS_WEAK_SET_TYPE: 1885ba72ec861b69b67139c93fc6dd56f4a73c9b3135jkummerow@chromium.org return JSWeakSet::kSize; 1886236ad9617a7359a463144a6ebeb5431a70f769cfager@chromium.org case JS_REGEXP_TYPE: 18872efb900e7350b14be905abdeab077f3a64c583cfulan@chromium.org return JSRegExp::kSize; 18883291210ab99f306b74430ebbc4b7d939629e699fager@chromium.org case JS_CONTEXT_EXTENSION_OBJECT_TYPE: 188943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return JSObject::kHeaderSize; 189031b1277ec3b8cd17acb01c66d85a456159072157kmillikin@chromium.org case JS_MESSAGE_OBJECT_TYPE: 189131b1277ec3b8cd17acb01c66d85a456159072157kmillikin@chromium.org return JSMessageObject::kSize; 189243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen default: 1893ef33a5482a35a9a25f702f8e3f02bb6b49f3854cjkummerow@chromium.org // TODO(jkummerow): Re-enable this. Blink currently hits this 1894ef33a5482a35a9a25f702f8e3f02bb6b49f3854cjkummerow@chromium.org // from its CustomElementConstructorBuilder. 1895ef33a5482a35a9a25f702f8e3f02bb6b49f3854cjkummerow@chromium.org // UNREACHABLE(); 189643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return 0; 189743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 189843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 189943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 190043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 190143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenint JSObject::GetInternalFieldCount() { 190243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen ASSERT(1 << kPointerSizeLog2 == kPointerSize); 19037c537e2abe09729ed6cb827b4dd206470d8c4a42ager@chromium.org // Make sure to adjust for the number of in-object properties. These 19047c537e2abe09729ed6cb827b4dd206470d8c4a42ager@chromium.org // properties do contribute to the size, but are not internal fields. 19057c537e2abe09729ed6cb827b4dd206470d8c4a42ager@chromium.org return ((Size() - GetHeaderSize()) >> kPointerSizeLog2) - 19067c537e2abe09729ed6cb827b4dd206470d8c4a42ager@chromium.org map()->inobject_properties(); 190743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 190843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 190943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 1910ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.orgint JSObject::GetInternalFieldOffset(int index) { 1911ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org ASSERT(index < GetInternalFieldCount() && index >= 0); 1912ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org return GetHeaderSize() + (kPointerSize * index); 1913ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org} 1914ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org 1915ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org 191643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenObject* JSObject::GetInternalField(int index) { 191743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen ASSERT(index < GetInternalFieldCount() && index >= 0); 19187c537e2abe09729ed6cb827b4dd206470d8c4a42ager@chromium.org // Internal objects do follow immediately after the header, whereas in-object 19197c537e2abe09729ed6cb827b4dd206470d8c4a42ager@chromium.org // properties are at the end of the object. Therefore there is no need 19207c537e2abe09729ed6cb827b4dd206470d8c4a42ager@chromium.org // to adjust the index here. 192143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return READ_FIELD(this, GetHeaderSize() + (kPointerSize * index)); 192243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 192343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 192443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 192543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid JSObject::SetInternalField(int index, Object* value) { 192643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen ASSERT(index < GetInternalFieldCount() && index >= 0); 19277c537e2abe09729ed6cb827b4dd206470d8c4a42ager@chromium.org // Internal objects do follow immediately after the header, whereas in-object 19287c537e2abe09729ed6cb827b4dd206470d8c4a42ager@chromium.org // properties are at the end of the object. Therefore there is no need 19297c537e2abe09729ed6cb827b4dd206470d8c4a42ager@chromium.org // to adjust the index here. 193043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen int offset = GetHeaderSize() + (kPointerSize * index); 193143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen WRITE_FIELD(this, offset, value); 1932c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com WRITE_BARRIER(GetHeap(), this, offset, value); 193343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 193443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 193543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 193627bf28851c1fa362a3f7c709871c21dcc9c23ce7ricow@chromium.orgvoid JSObject::SetInternalField(int index, Smi* value) { 193727bf28851c1fa362a3f7c709871c21dcc9c23ce7ricow@chromium.org ASSERT(index < GetInternalFieldCount() && index >= 0); 193827bf28851c1fa362a3f7c709871c21dcc9c23ce7ricow@chromium.org // Internal objects do follow immediately after the header, whereas in-object 193927bf28851c1fa362a3f7c709871c21dcc9c23ce7ricow@chromium.org // properties are at the end of the object. Therefore there is no need 194027bf28851c1fa362a3f7c709871c21dcc9c23ce7ricow@chromium.org // to adjust the index here. 194127bf28851c1fa362a3f7c709871c21dcc9c23ce7ricow@chromium.org int offset = GetHeaderSize() + (kPointerSize * index); 194227bf28851c1fa362a3f7c709871c21dcc9c23ce7ricow@chromium.org WRITE_FIELD(this, offset, value); 194327bf28851c1fa362a3f7c709871c21dcc9c23ce7ricow@chromium.org} 194427bf28851c1fa362a3f7c709871c21dcc9c23ce7ricow@chromium.org 194527bf28851c1fa362a3f7c709871c21dcc9c23ce7ricow@chromium.org 19467c537e2abe09729ed6cb827b4dd206470d8c4a42ager@chromium.org// Access fast-case object properties at index. The use of these routines 19477c537e2abe09729ed6cb827b4dd206470d8c4a42ager@chromium.org// is needed to correctly distinguish between properties stored in-object and 19487c537e2abe09729ed6cb827b4dd206470d8c4a42ager@chromium.org// properties stored in the properties array. 1949e7a6d372100022f492c88886898add6a51e66977machenbach@chromium.orgObject* JSObject::RawFastPropertyAt(FieldIndex index) { 1950e7a6d372100022f492c88886898add6a51e66977machenbach@chromium.org if (index.is_inobject()) { 1951e7a6d372100022f492c88886898add6a51e66977machenbach@chromium.org return READ_FIELD(this, index.offset()); 19527c537e2abe09729ed6cb827b4dd206470d8c4a42ager@chromium.org } else { 1953e7a6d372100022f492c88886898add6a51e66977machenbach@chromium.org return properties()->get(index.outobject_array_index()); 19547c537e2abe09729ed6cb827b4dd206470d8c4a42ager@chromium.org } 19557c537e2abe09729ed6cb827b4dd206470d8c4a42ager@chromium.org} 19567c537e2abe09729ed6cb827b4dd206470d8c4a42ager@chromium.org 19577c537e2abe09729ed6cb827b4dd206470d8c4a42ager@chromium.org 1958e7a6d372100022f492c88886898add6a51e66977machenbach@chromium.orgvoid JSObject::FastPropertyAtPut(FieldIndex index, Object* value) { 1959e7a6d372100022f492c88886898add6a51e66977machenbach@chromium.org if (index.is_inobject()) { 1960e7a6d372100022f492c88886898add6a51e66977machenbach@chromium.org int offset = index.offset(); 19617c537e2abe09729ed6cb827b4dd206470d8c4a42ager@chromium.org WRITE_FIELD(this, offset, value); 1962c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com WRITE_BARRIER(GetHeap(), this, offset, value); 19637c537e2abe09729ed6cb827b4dd206470d8c4a42ager@chromium.org } else { 1964e7a6d372100022f492c88886898add6a51e66977machenbach@chromium.org properties()->set(index.outobject_array_index(), value); 19657c537e2abe09729ed6cb827b4dd206470d8c4a42ager@chromium.org } 19667c537e2abe09729ed6cb827b4dd206470d8c4a42ager@chromium.org} 19677c537e2abe09729ed6cb827b4dd206470d8c4a42ager@chromium.org 19687c537e2abe09729ed6cb827b4dd206470d8c4a42ager@chromium.org 1969ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.orgint JSObject::GetInObjectPropertyOffset(int index) { 19700a7303680fa9f3dc3945763aaa7c5a3859a7f855machenbach@chromium.org return map()->GetInObjectPropertyOffset(index); 1971ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org} 1972ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org 1973ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org 1974bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.orgObject* JSObject::InObjectPropertyAt(int index) { 19750a7303680fa9f3dc3945763aaa7c5a3859a7f855machenbach@chromium.org int offset = GetInObjectPropertyOffset(index); 1976bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org return READ_FIELD(this, offset); 1977bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org} 1978bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org 1979bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org 19805a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.orgObject* JSObject::InObjectPropertyAtPut(int index, 19815a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org Object* value, 19825a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org WriteBarrierMode mode) { 19835a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org // Adjust for the number of properties stored in the object. 19840a7303680fa9f3dc3945763aaa7c5a3859a7f855machenbach@chromium.org int offset = GetInObjectPropertyOffset(index); 19855a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org WRITE_FIELD(this, offset, value); 1986c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com CONDITIONAL_WRITE_BARRIER(GetHeap(), this, offset, value, mode); 19875a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org return value; 19885a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org} 19895a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org 19905a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org 19915a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org 1992c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.comvoid JSObject::InitializeBody(Map* map, 1993c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com Object* pre_allocated_value, 1994c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com Object* filler_value) { 1995c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com ASSERT(!filler_value->IsHeapObject() || 1996c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com !GetHeap()->InNewSpace(filler_value)); 1997c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com ASSERT(!pre_allocated_value->IsHeapObject() || 1998c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com !GetHeap()->InNewSpace(pre_allocated_value)); 1999c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com int size = map->instance_size(); 2000c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com int offset = kHeaderSize; 2001c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com if (filler_value != pre_allocated_value) { 2002c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com int pre_allocated = map->pre_allocated_property_fields(); 2003c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com ASSERT(pre_allocated * kPointerSize + kHeaderSize <= size); 2004c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com for (int i = 0; i < pre_allocated; i++) { 2005c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com WRITE_FIELD(this, offset, pre_allocated_value); 2006c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com offset += kPointerSize; 2007c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com } 2008c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com } 2009c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com while (offset < size) { 2010c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com WRITE_FIELD(this, offset, filler_value); 2011c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com offset += kPointerSize; 201243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 201343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 201443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 201543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 201669ea3965ef6e0d3f020a402cf7e6b96b9cb651aekmillikin@chromium.orgbool JSObject::HasFastProperties() { 201788767247437a4504f433cc5abea22a473e5ed982erik.corry@gmail.com ASSERT(properties()->IsDictionary() == map()->is_dictionary_map()); 201869ea3965ef6e0d3f020a402cf7e6b96b9cb651aekmillikin@chromium.org return !properties()->IsDictionary(); 201969ea3965ef6e0d3f020a402cf7e6b96b9cb651aekmillikin@chromium.org} 202069ea3965ef6e0d3f020a402cf7e6b96b9cb651aekmillikin@chromium.org 202169ea3965ef6e0d3f020a402cf7e6b96b9cb651aekmillikin@chromium.org 20221e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.orgbool JSObject::TooManyFastProperties(StoreFromKeyed store_mode) { 202369ea3965ef6e0d3f020a402cf7e6b96b9cb651aekmillikin@chromium.org // Allow extra fast properties if the object has more than 20241e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org // kFastPropertiesSoftLimit in-object properties. When this is the case, it is 20251e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org // very unlikely that the object is being used as a dictionary and there is a 20261e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org // good chance that allowing more map transitions will be worth it. 20271e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org Map* map = this->map(); 20281e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org if (map->unused_property_fields() != 0) return false; 20291e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org 20301e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org int inobject = map->inobject_properties(); 20317028c05c1c71b9d5c5fe1bca01f2461d17a2dda7mmassi@chromium.org 20327028c05c1c71b9d5c5fe1bca01f2461d17a2dda7mmassi@chromium.org int limit; 2033f6a0c41471dd401bc4a67b309cfff6f8711b4edfulan@chromium.org if (store_mode == CERTAINLY_NOT_STORE_FROM_KEYED) { 20347028c05c1c71b9d5c5fe1bca01f2461d17a2dda7mmassi@chromium.org limit = Max(inobject, kMaxFastProperties); 20357028c05c1c71b9d5c5fe1bca01f2461d17a2dda7mmassi@chromium.org } else { 20367028c05c1c71b9d5c5fe1bca01f2461d17a2dda7mmassi@chromium.org limit = Max(inobject, kFastPropertiesSoftLimit); 20377028c05c1c71b9d5c5fe1bca01f2461d17a2dda7mmassi@chromium.org } 20381e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org return properties()->length() > limit; 203969ea3965ef6e0d3f020a402cf7e6b96b9cb651aekmillikin@chromium.org} 204069ea3965ef6e0d3f020a402cf7e6b96b9cb651aekmillikin@chromium.org 204169ea3965ef6e0d3f020a402cf7e6b96b9cb651aekmillikin@chromium.org 204243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid Struct::InitializeBody(int object_size) { 2043ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org Object* value = GetHeap()->undefined_value(); 2044236ad9617a7359a463144a6ebeb5431a70f769cfager@chromium.org for (int offset = kHeaderSize; offset < object_size; offset += kPointerSize) { 20455a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org WRITE_FIELD(this, offset, value); 204643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 204743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 204843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 204943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 205030ce411529579186181838984710b0b0980857aaricow@chromium.orgbool Object::ToArrayIndex(uint32_t* index) { 205130ce411529579186181838984710b0b0980857aaricow@chromium.org if (IsSmi()) { 205230ce411529579186181838984710b0b0980857aaricow@chromium.org int value = Smi::cast(this)->value(); 205343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (value < 0) return false; 205443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen *index = value; 205543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return true; 205643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 205730ce411529579186181838984710b0b0980857aaricow@chromium.org if (IsHeapNumber()) { 205830ce411529579186181838984710b0b0980857aaricow@chromium.org double value = HeapNumber::cast(this)->value(); 205943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen uint32_t uint_value = static_cast<uint32_t>(value); 206043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (value == static_cast<double>(uint_value)) { 206143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen *index = uint_value; 206243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return true; 206343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 206443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 206543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return false; 206643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 206743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 206843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 206943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenbool Object::IsStringObjectWithCharacterAt(uint32_t index) { 207043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (!this->IsJSValue()) return false; 207143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 207243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen JSValue* js_value = JSValue::cast(this); 207343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (!js_value->value()->IsString()) return false; 207443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 207543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen String* str = String::cast(js_value->value()); 207659297c735ad2a41156ae9c723a39ff259ad061e0jkummerow@chromium.org if (index >= static_cast<uint32_t>(str->length())) return false; 207743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 207843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return true; 207943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 208043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 208143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 2082de88679a78f9dae12fdf7955610969ac4c79b0bemstarzinger@chromium.orgvoid Object::VerifyApiCallResultType() { 2083de88679a78f9dae12fdf7955610969ac4c79b0bemstarzinger@chromium.org#if ENABLE_EXTRA_CHECKS 2084de88679a78f9dae12fdf7955610969ac4c79b0bemstarzinger@chromium.org if (!(IsSmi() || 2085de88679a78f9dae12fdf7955610969ac4c79b0bemstarzinger@chromium.org IsString() || 2086fa0c3c69b9d632e5730bdd9c745c375beef5e54dmachenbach@chromium.org IsSymbol() || 2087de88679a78f9dae12fdf7955610969ac4c79b0bemstarzinger@chromium.org IsSpecObject() || 2088de88679a78f9dae12fdf7955610969ac4c79b0bemstarzinger@chromium.org IsHeapNumber() || 2089de88679a78f9dae12fdf7955610969ac4c79b0bemstarzinger@chromium.org IsUndefined() || 2090de88679a78f9dae12fdf7955610969ac4c79b0bemstarzinger@chromium.org IsTrue() || 2091de88679a78f9dae12fdf7955610969ac4c79b0bemstarzinger@chromium.org IsFalse() || 2092de88679a78f9dae12fdf7955610969ac4c79b0bemstarzinger@chromium.org IsNull())) { 2093de88679a78f9dae12fdf7955610969ac4c79b0bemstarzinger@chromium.org FATAL("API call returned invalid object"); 2094de88679a78f9dae12fdf7955610969ac4c79b0bemstarzinger@chromium.org } 2095de88679a78f9dae12fdf7955610969ac4c79b0bemstarzinger@chromium.org#endif // ENABLE_EXTRA_CHECKS 2096de88679a78f9dae12fdf7955610969ac4c79b0bemstarzinger@chromium.org} 2097de88679a78f9dae12fdf7955610969ac4c79b0bemstarzinger@chromium.org 2098de88679a78f9dae12fdf7955610969ac4c79b0bemstarzinger@chromium.org 20996d786c9805481bd13ecb29c3155540f2f32950e1svenpanne@chromium.orgFixedArrayBase* FixedArrayBase::cast(Object* object) { 21005c88bc39690cc94affe78cf5777eb8180c4af8a4machenbach@chromium.org ASSERT(object->IsFixedArrayBase()); 21016d786c9805481bd13ecb29c3155540f2f32950e1svenpanne@chromium.org return reinterpret_cast<FixedArrayBase*>(object); 21026d786c9805481bd13ecb29c3155540f2f32950e1svenpanne@chromium.org} 21036d786c9805481bd13ecb29c3155540f2f32950e1svenpanne@chromium.org 21046d786c9805481bd13ecb29c3155540f2f32950e1svenpanne@chromium.org 210543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenObject* FixedArray::get(int index) { 2106ef33a5482a35a9a25f702f8e3f02bb6b49f3854cjkummerow@chromium.org SLOW_ASSERT(index >= 0 && index < this->length()); 210743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return READ_FIELD(this, kHeaderSize + index * kPointerSize); 210843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 210943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 211043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 21119e41f9ecf5042292a9efcb36e264b37621199553machenbach@chromium.orgHandle<Object> FixedArray::get(Handle<FixedArray> array, int index) { 21129e41f9ecf5042292a9efcb36e264b37621199553machenbach@chromium.org return handle(array->get(index), array->GetIsolate()); 21139e41f9ecf5042292a9efcb36e264b37621199553machenbach@chromium.org} 21149e41f9ecf5042292a9efcb36e264b37621199553machenbach@chromium.org 21159e41f9ecf5042292a9efcb36e264b37621199553machenbach@chromium.org 2116830d30c478be03b0ac560f4002833ab141e41effsvenpanne@chromium.orgbool FixedArray::is_the_hole(int index) { 2117830d30c478be03b0ac560f4002833ab141e41effsvenpanne@chromium.org return get(index) == GetHeap()->the_hole_value(); 2118830d30c478be03b0ac560f4002833ab141e41effsvenpanne@chromium.org} 2119830d30c478be03b0ac560f4002833ab141e41effsvenpanne@chromium.org 2120830d30c478be03b0ac560f4002833ab141e41effsvenpanne@chromium.org 2121a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.orgvoid FixedArray::set(int index, Smi* value) { 2122c5d4971574b7a205fa0e788d8121dc79485e5e67hpayer@chromium.org ASSERT(map() != GetHeap()->fixed_cow_array_map()); 21237c2628c3f0353f0558760c3ca442f934263ea766kmillikin@chromium.org ASSERT(index >= 0 && index < this->length()); 2124a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org ASSERT(reinterpret_cast<Object*>(value)->IsSmi()); 2125a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org int offset = kHeaderSize + index * kPointerSize; 2126a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org WRITE_FIELD(this, offset, value); 2127a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org} 2128a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org 2129a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org 213043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid FixedArray::set(int index, Object* value) { 2131c5d4971574b7a205fa0e788d8121dc79485e5e67hpayer@chromium.org ASSERT(map() != GetHeap()->fixed_cow_array_map()); 213243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen ASSERT(index >= 0 && index < this->length()); 213343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen int offset = kHeaderSize + index * kPointerSize; 213443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen WRITE_FIELD(this, offset, value); 2135c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com WRITE_BARRIER(GetHeap(), this, offset, value); 213643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 213743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 213843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 213984bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.orginline bool FixedDoubleArray::is_the_hole_nan(double value) { 214084bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org return BitCast<uint64_t, double>(value) == kHoleNanInt64; 214184bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org} 214284bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org 214384bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org 214484bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.orginline double FixedDoubleArray::hole_nan_as_double() { 214584bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org return BitCast<double, uint64_t>(kHoleNanInt64); 214684bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org} 214784bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org 214884bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org 214984bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.orginline double FixedDoubleArray::canonical_not_the_hole_nan_as_double() { 215084bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org ASSERT(BitCast<uint64_t>(OS::nan_value()) != kHoleNanInt64); 215184bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org ASSERT((BitCast<uint64_t>(OS::nan_value()) >> 32) != kHoleNanUpper32); 215284bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org return OS::nan_value(); 215384bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org} 215484bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org 215584bcc559ac20fb04f806e97d28a314b20b58fd60svenpanne@chromium.org 21567c2628c3f0353f0558760c3ca442f934263ea766kmillikin@chromium.orgdouble FixedDoubleArray::get_scalar(int index) { 2157c5d4971574b7a205fa0e788d8121dc79485e5e67hpayer@chromium.org ASSERT(map() != GetHeap()->fixed_cow_array_map() && 2158c5d4971574b7a205fa0e788d8121dc79485e5e67hpayer@chromium.org map() != GetHeap()->fixed_array_map()); 21596d786c9805481bd13ecb29c3155540f2f32950e1svenpanne@chromium.org ASSERT(index >= 0 && index < this->length()); 21606d786c9805481bd13ecb29c3155540f2f32950e1svenpanne@chromium.org double result = READ_DOUBLE_FIELD(this, kHeaderSize + index * kDoubleSize); 21616d786c9805481bd13ecb29c3155540f2f32950e1svenpanne@chromium.org ASSERT(!is_the_hole_nan(result)); 21626d786c9805481bd13ecb29c3155540f2f32950e1svenpanne@chromium.org return result; 21636d786c9805481bd13ecb29c3155540f2f32950e1svenpanne@chromium.org} 21646d786c9805481bd13ecb29c3155540f2f32950e1svenpanne@chromium.org 216588aa058bdadfa79ae2836d12d6dd2d1c28aa490cdanno@chromium.orgint64_t FixedDoubleArray::get_representation(int index) { 2166c5d4971574b7a205fa0e788d8121dc79485e5e67hpayer@chromium.org ASSERT(map() != GetHeap()->fixed_cow_array_map() && 2167c5d4971574b7a205fa0e788d8121dc79485e5e67hpayer@chromium.org map() != GetHeap()->fixed_array_map()); 216888aa058bdadfa79ae2836d12d6dd2d1c28aa490cdanno@chromium.org ASSERT(index >= 0 && index < this->length()); 216988aa058bdadfa79ae2836d12d6dd2d1c28aa490cdanno@chromium.org return READ_INT64_FIELD(this, kHeaderSize + index * kDoubleSize); 217088aa058bdadfa79ae2836d12d6dd2d1c28aa490cdanno@chromium.org} 21716d786c9805481bd13ecb29c3155540f2f32950e1svenpanne@chromium.org 21727c2628c3f0353f0558760c3ca442f934263ea766kmillikin@chromium.org 21739e41f9ecf5042292a9efcb36e264b37621199553machenbach@chromium.orgHandle<Object> FixedDoubleArray::get(Handle<FixedDoubleArray> array, 21749e41f9ecf5042292a9efcb36e264b37621199553machenbach@chromium.org int index) { 21759e41f9ecf5042292a9efcb36e264b37621199553machenbach@chromium.org if (array->is_the_hole(index)) { 21769e41f9ecf5042292a9efcb36e264b37621199553machenbach@chromium.org return array->GetIsolate()->factory()->the_hole_value(); 2177c85dc10954aa3556a00b09b6d28cf2ebfcf528d8machenbach@chromium.org } else { 21789e41f9ecf5042292a9efcb36e264b37621199553machenbach@chromium.org return array->GetIsolate()->factory()->NewNumber(array->get_scalar(index)); 2179c85dc10954aa3556a00b09b6d28cf2ebfcf528d8machenbach@chromium.org } 2180c85dc10954aa3556a00b09b6d28cf2ebfcf528d8machenbach@chromium.org} 2181c85dc10954aa3556a00b09b6d28cf2ebfcf528d8machenbach@chromium.org 2182c85dc10954aa3556a00b09b6d28cf2ebfcf528d8machenbach@chromium.org 21836d786c9805481bd13ecb29c3155540f2f32950e1svenpanne@chromium.orgvoid FixedDoubleArray::set(int index, double value) { 2184c5d4971574b7a205fa0e788d8121dc79485e5e67hpayer@chromium.org ASSERT(map() != GetHeap()->fixed_cow_array_map() && 2185c5d4971574b7a205fa0e788d8121dc79485e5e67hpayer@chromium.org map() != GetHeap()->fixed_array_map()); 21866d786c9805481bd13ecb29c3155540f2f32950e1svenpanne@chromium.org int offset = kHeaderSize + index * kDoubleSize; 218777ca49ac05d25684c89442029c22f5b2bce94395ulan@chromium.org if (std::isnan(value)) value = canonical_not_the_hole_nan_as_double(); 21886d786c9805481bd13ecb29c3155540f2f32950e1svenpanne@chromium.org WRITE_DOUBLE_FIELD(this, offset, value); 21896d786c9805481bd13ecb29c3155540f2f32950e1svenpanne@chromium.org} 21906d786c9805481bd13ecb29c3155540f2f32950e1svenpanne@chromium.org 21916d786c9805481bd13ecb29c3155540f2f32950e1svenpanne@chromium.org 21926d786c9805481bd13ecb29c3155540f2f32950e1svenpanne@chromium.orgvoid FixedDoubleArray::set_the_hole(int index) { 2193c5d4971574b7a205fa0e788d8121dc79485e5e67hpayer@chromium.org ASSERT(map() != GetHeap()->fixed_cow_array_map() && 2194c5d4971574b7a205fa0e788d8121dc79485e5e67hpayer@chromium.org map() != GetHeap()->fixed_array_map()); 21956d786c9805481bd13ecb29c3155540f2f32950e1svenpanne@chromium.org int offset = kHeaderSize + index * kDoubleSize; 21966d786c9805481bd13ecb29c3155540f2f32950e1svenpanne@chromium.org WRITE_DOUBLE_FIELD(this, offset, hole_nan_as_double()); 21976d786c9805481bd13ecb29c3155540f2f32950e1svenpanne@chromium.org} 21986d786c9805481bd13ecb29c3155540f2f32950e1svenpanne@chromium.org 21996d786c9805481bd13ecb29c3155540f2f32950e1svenpanne@chromium.org 22006d786c9805481bd13ecb29c3155540f2f32950e1svenpanne@chromium.orgbool FixedDoubleArray::is_the_hole(int index) { 22016d786c9805481bd13ecb29c3155540f2f32950e1svenpanne@chromium.org int offset = kHeaderSize + index * kDoubleSize; 22026d786c9805481bd13ecb29c3155540f2f32950e1svenpanne@chromium.org return is_the_hole_nan(READ_DOUBLE_FIELD(this, offset)); 22036d786c9805481bd13ecb29c3155540f2f32950e1svenpanne@chromium.org} 22046d786c9805481bd13ecb29c3155540f2f32950e1svenpanne@chromium.org 22056d786c9805481bd13ecb29c3155540f2f32950e1svenpanne@chromium.org 22062f599e5925b02d78bd78703b44741d6b27e53a44machenbach@chromium.orgdouble* FixedDoubleArray::data_start() { 22072f599e5925b02d78bd78703b44741d6b27e53a44machenbach@chromium.org return reinterpret_cast<double*>(FIELD_ADDR(this, kHeaderSize)); 22082f599e5925b02d78bd78703b44741d6b27e53a44machenbach@chromium.org} 22092f599e5925b02d78bd78703b44741d6b27e53a44machenbach@chromium.org 22102f599e5925b02d78bd78703b44741d6b27e53a44machenbach@chromium.org 22112f599e5925b02d78bd78703b44741d6b27e53a44machenbach@chromium.orgvoid FixedDoubleArray::FillWithHoles(int from, int to) { 22122f599e5925b02d78bd78703b44741d6b27e53a44machenbach@chromium.org for (int i = from; i < to; i++) { 22132f599e5925b02d78bd78703b44741d6b27e53a44machenbach@chromium.org set_the_hole(i); 22142f599e5925b02d78bd78703b44741d6b27e53a44machenbach@chromium.org } 22152f599e5925b02d78bd78703b44741d6b27e53a44machenbach@chromium.org} 22162f599e5925b02d78bd78703b44741d6b27e53a44machenbach@chromium.org 22172f599e5925b02d78bd78703b44741d6b27e53a44machenbach@chromium.org 2218196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.orgbool ConstantPoolArray::is_extended_layout() { 2219196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org uint32_t small_layout_1 = READ_UINT32_FIELD(this, kSmallLayout1Offset); 2220196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org return IsExtendedField::decode(small_layout_1); 22219e41f9ecf5042292a9efcb36e264b37621199553machenbach@chromium.org} 22229e41f9ecf5042292a9efcb36e264b37621199553machenbach@chromium.org 22239e41f9ecf5042292a9efcb36e264b37621199553machenbach@chromium.org 2224196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.orgConstantPoolArray::LayoutSection ConstantPoolArray::final_section() { 2225196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org return is_extended_layout() ? EXTENDED_SECTION : SMALL_SECTION; 22269e41f9ecf5042292a9efcb36e264b37621199553machenbach@chromium.org} 2227a2e1a40f85577979749d4c0d6de30e992d996659mstarzinger@chromium.org 2228a2e1a40f85577979749d4c0d6de30e992d996659mstarzinger@chromium.org 2229196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.orgint ConstantPoolArray::first_extended_section_index() { 2230196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org ASSERT(is_extended_layout()); 2231196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org uint32_t small_layout_2 = READ_UINT32_FIELD(this, kSmallLayout2Offset); 2232196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org return TotalCountField::decode(small_layout_2); 2233a2e1a40f85577979749d4c0d6de30e992d996659mstarzinger@chromium.org} 2234a2e1a40f85577979749d4c0d6de30e992d996659mstarzinger@chromium.org 2235a2e1a40f85577979749d4c0d6de30e992d996659mstarzinger@chromium.org 2236196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.orgint ConstantPoolArray::get_extended_section_header_offset() { 2237196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org return RoundUp(SizeFor(NumberOfEntries(this, SMALL_SECTION)), kInt64Size); 22389e41f9ecf5042292a9efcb36e264b37621199553machenbach@chromium.org} 22399e41f9ecf5042292a9efcb36e264b37621199553machenbach@chromium.org 22409e41f9ecf5042292a9efcb36e264b37621199553machenbach@chromium.org 2241196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.orgConstantPoolArray::WeakObjectState ConstantPoolArray::get_weak_object_state() { 2242196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org uint32_t small_layout_2 = READ_UINT32_FIELD(this, kSmallLayout2Offset); 2243196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org return WeakObjectStateField::decode(small_layout_2); 22449e41f9ecf5042292a9efcb36e264b37621199553machenbach@chromium.org} 22459e41f9ecf5042292a9efcb36e264b37621199553machenbach@chromium.org 22469e41f9ecf5042292a9efcb36e264b37621199553machenbach@chromium.org 2247196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.orgvoid ConstantPoolArray::set_weak_object_state( 2248196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org ConstantPoolArray::WeakObjectState state) { 2249196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org uint32_t small_layout_2 = READ_UINT32_FIELD(this, kSmallLayout2Offset); 2250196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org small_layout_2 = WeakObjectStateField::update(small_layout_2, state); 2251196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org WRITE_INT32_FIELD(this, kSmallLayout2Offset, small_layout_2); 22529e41f9ecf5042292a9efcb36e264b37621199553machenbach@chromium.org} 22539e41f9ecf5042292a9efcb36e264b37621199553machenbach@chromium.org 22549e41f9ecf5042292a9efcb36e264b37621199553machenbach@chromium.org 2255196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.orgint ConstantPoolArray::first_index(Type type, LayoutSection section) { 2256196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org int index = 0; 2257196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org if (section == EXTENDED_SECTION) { 2258196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org ASSERT(is_extended_layout()); 2259196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org index += first_extended_section_index(); 2260196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org } 2261a2e1a40f85577979749d4c0d6de30e992d996659mstarzinger@chromium.org 2262196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org for (Type type_iter = FIRST_TYPE; type_iter < type; 2263196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org type_iter = next_type(type_iter)) { 2264196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org index += number_of_entries(type_iter, section); 2265196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org } 2266a2e1a40f85577979749d4c0d6de30e992d996659mstarzinger@chromium.org 2267196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org return index; 2268bcc36723a2ace28fa3b0d7dd0d1de926d313fff9machenbach@chromium.org} 2269bcc36723a2ace28fa3b0d7dd0d1de926d313fff9machenbach@chromium.org 2270bcc36723a2ace28fa3b0d7dd0d1de926d313fff9machenbach@chromium.org 2271196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.orgint ConstantPoolArray::last_index(Type type, LayoutSection section) { 2272196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org return first_index(type, section) + number_of_entries(type, section) - 1; 2273a2e1a40f85577979749d4c0d6de30e992d996659mstarzinger@chromium.org} 2274a2e1a40f85577979749d4c0d6de30e992d996659mstarzinger@chromium.org 2275a2e1a40f85577979749d4c0d6de30e992d996659mstarzinger@chromium.org 2276196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.orgint ConstantPoolArray::number_of_entries(Type type, LayoutSection section) { 2277196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org if (section == SMALL_SECTION) { 2278196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org uint32_t small_layout_1 = READ_UINT32_FIELD(this, kSmallLayout1Offset); 2279196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org uint32_t small_layout_2 = READ_UINT32_FIELD(this, kSmallLayout2Offset); 2280196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org switch (type) { 2281196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org case INT64: 2282196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org return Int64CountField::decode(small_layout_1); 2283196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org case CODE_PTR: 2284196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org return CodePtrCountField::decode(small_layout_1); 2285196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org case HEAP_PTR: 2286196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org return HeapPtrCountField::decode(small_layout_1); 2287196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org case INT32: 2288196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org return Int32CountField::decode(small_layout_2); 2289196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org default: 2290196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org UNREACHABLE(); 2291196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org return 0; 2292196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org } 2293196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org } else { 2294196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org ASSERT(section == EXTENDED_SECTION && is_extended_layout()); 2295196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org int offset = get_extended_section_header_offset(); 2296196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org switch (type) { 2297196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org case INT64: 2298196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org offset += kExtendedInt64CountOffset; 2299196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org break; 2300196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org case CODE_PTR: 2301196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org offset += kExtendedCodePtrCountOffset; 2302196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org break; 2303196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org case HEAP_PTR: 2304196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org offset += kExtendedHeapPtrCountOffset; 2305196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org break; 2306196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org case INT32: 2307196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org offset += kExtendedInt32CountOffset; 2308196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org break; 2309196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org default: 2310196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org UNREACHABLE(); 2311196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org } 2312196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org return READ_INT_FIELD(this, offset); 2313196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org } 2314a2e1a40f85577979749d4c0d6de30e992d996659mstarzinger@chromium.org} 2315a2e1a40f85577979749d4c0d6de30e992d996659mstarzinger@chromium.org 2316a2e1a40f85577979749d4c0d6de30e992d996659mstarzinger@chromium.org 2317196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.orgConstantPoolArray::Type ConstantPoolArray::get_type(int index) { 2318196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org LayoutSection section; 2319196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org if (is_extended_layout() && index >= first_extended_section_index()) { 2320196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org section = EXTENDED_SECTION; 2321196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org } else { 2322196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org section = SMALL_SECTION; 2323196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org } 2324196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org 2325196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org Type type = FIRST_TYPE; 2326196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org while (index > last_index(type, section)) { 2327196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org type = next_type(type); 2328196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org } 2329196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org ASSERT(type <= LAST_TYPE); 2330196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org return type; 2331a2e1a40f85577979749d4c0d6de30e992d996659mstarzinger@chromium.org} 2332a2e1a40f85577979749d4c0d6de30e992d996659mstarzinger@chromium.org 2333a2e1a40f85577979749d4c0d6de30e992d996659mstarzinger@chromium.org 2334a2e1a40f85577979749d4c0d6de30e992d996659mstarzinger@chromium.orgint64_t ConstantPoolArray::get_int64_entry(int index) { 2335a2e1a40f85577979749d4c0d6de30e992d996659mstarzinger@chromium.org ASSERT(map() == GetHeap()->constant_pool_array_map()); 2336196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org ASSERT(get_type(index) == INT64); 2337a2e1a40f85577979749d4c0d6de30e992d996659mstarzinger@chromium.org return READ_INT64_FIELD(this, OffsetOfElementAt(index)); 2338a2e1a40f85577979749d4c0d6de30e992d996659mstarzinger@chromium.org} 2339a2e1a40f85577979749d4c0d6de30e992d996659mstarzinger@chromium.org 2340196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org 2341a2e1a40f85577979749d4c0d6de30e992d996659mstarzinger@chromium.orgdouble ConstantPoolArray::get_int64_entry_as_double(int index) { 2342a2e1a40f85577979749d4c0d6de30e992d996659mstarzinger@chromium.org STATIC_ASSERT(kDoubleSize == kInt64Size); 2343a2e1a40f85577979749d4c0d6de30e992d996659mstarzinger@chromium.org ASSERT(map() == GetHeap()->constant_pool_array_map()); 2344196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org ASSERT(get_type(index) == INT64); 2345a2e1a40f85577979749d4c0d6de30e992d996659mstarzinger@chromium.org return READ_DOUBLE_FIELD(this, OffsetOfElementAt(index)); 2346a2e1a40f85577979749d4c0d6de30e992d996659mstarzinger@chromium.org} 2347a2e1a40f85577979749d4c0d6de30e992d996659mstarzinger@chromium.org 2348a2e1a40f85577979749d4c0d6de30e992d996659mstarzinger@chromium.org 2349bcc36723a2ace28fa3b0d7dd0d1de926d313fff9machenbach@chromium.orgAddress ConstantPoolArray::get_code_ptr_entry(int index) { 2350a2e1a40f85577979749d4c0d6de30e992d996659mstarzinger@chromium.org ASSERT(map() == GetHeap()->constant_pool_array_map()); 2351196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org ASSERT(get_type(index) == CODE_PTR); 2352bcc36723a2ace28fa3b0d7dd0d1de926d313fff9machenbach@chromium.org return reinterpret_cast<Address>(READ_FIELD(this, OffsetOfElementAt(index))); 2353bcc36723a2ace28fa3b0d7dd0d1de926d313fff9machenbach@chromium.org} 2354bcc36723a2ace28fa3b0d7dd0d1de926d313fff9machenbach@chromium.org 2355bcc36723a2ace28fa3b0d7dd0d1de926d313fff9machenbach@chromium.org 2356bcc36723a2ace28fa3b0d7dd0d1de926d313fff9machenbach@chromium.orgObject* ConstantPoolArray::get_heap_ptr_entry(int index) { 2357bcc36723a2ace28fa3b0d7dd0d1de926d313fff9machenbach@chromium.org ASSERT(map() == GetHeap()->constant_pool_array_map()); 2358196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org ASSERT(get_type(index) == HEAP_PTR); 2359a2e1a40f85577979749d4c0d6de30e992d996659mstarzinger@chromium.org return READ_FIELD(this, OffsetOfElementAt(index)); 2360a2e1a40f85577979749d4c0d6de30e992d996659mstarzinger@chromium.org} 2361a2e1a40f85577979749d4c0d6de30e992d996659mstarzinger@chromium.org 2362a2e1a40f85577979749d4c0d6de30e992d996659mstarzinger@chromium.org 2363a2e1a40f85577979749d4c0d6de30e992d996659mstarzinger@chromium.orgint32_t ConstantPoolArray::get_int32_entry(int index) { 2364a2e1a40f85577979749d4c0d6de30e992d996659mstarzinger@chromium.org ASSERT(map() == GetHeap()->constant_pool_array_map()); 2365196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org ASSERT(get_type(index) == INT32); 2366a2e1a40f85577979749d4c0d6de30e992d996659mstarzinger@chromium.org return READ_INT32_FIELD(this, OffsetOfElementAt(index)); 2367a2e1a40f85577979749d4c0d6de30e992d996659mstarzinger@chromium.org} 2368a2e1a40f85577979749d4c0d6de30e992d996659mstarzinger@chromium.org 2369a2e1a40f85577979749d4c0d6de30e992d996659mstarzinger@chromium.org 2370196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.orgvoid ConstantPoolArray::set(int index, int64_t value) { 2371196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org ASSERT(map() == GetHeap()->constant_pool_array_map()); 2372196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org ASSERT(get_type(index) == INT64); 2373196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org WRITE_INT64_FIELD(this, OffsetOfElementAt(index), value); 2374196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org} 2375196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org 2376196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org 2377196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.orgvoid ConstantPoolArray::set(int index, double value) { 2378196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org STATIC_ASSERT(kDoubleSize == kInt64Size); 2379196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org ASSERT(map() == GetHeap()->constant_pool_array_map()); 2380196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org ASSERT(get_type(index) == INT64); 2381196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org WRITE_DOUBLE_FIELD(this, OffsetOfElementAt(index), value); 2382196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org} 2383196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org 2384196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org 2385bcc36723a2ace28fa3b0d7dd0d1de926d313fff9machenbach@chromium.orgvoid ConstantPoolArray::set(int index, Address value) { 2386bcc36723a2ace28fa3b0d7dd0d1de926d313fff9machenbach@chromium.org ASSERT(map() == GetHeap()->constant_pool_array_map()); 2387196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org ASSERT(get_type(index) == CODE_PTR); 2388bcc36723a2ace28fa3b0d7dd0d1de926d313fff9machenbach@chromium.org WRITE_FIELD(this, OffsetOfElementAt(index), reinterpret_cast<Object*>(value)); 2389bcc36723a2ace28fa3b0d7dd0d1de926d313fff9machenbach@chromium.org} 2390bcc36723a2ace28fa3b0d7dd0d1de926d313fff9machenbach@chromium.org 2391bcc36723a2ace28fa3b0d7dd0d1de926d313fff9machenbach@chromium.org 2392a2e1a40f85577979749d4c0d6de30e992d996659mstarzinger@chromium.orgvoid ConstantPoolArray::set(int index, Object* value) { 2393a2e1a40f85577979749d4c0d6de30e992d996659mstarzinger@chromium.org ASSERT(map() == GetHeap()->constant_pool_array_map()); 2394196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org ASSERT(get_type(index) == HEAP_PTR); 2395a2e1a40f85577979749d4c0d6de30e992d996659mstarzinger@chromium.org WRITE_FIELD(this, OffsetOfElementAt(index), value); 2396a2e1a40f85577979749d4c0d6de30e992d996659mstarzinger@chromium.org WRITE_BARRIER(GetHeap(), this, OffsetOfElementAt(index), value); 2397a2e1a40f85577979749d4c0d6de30e992d996659mstarzinger@chromium.org} 2398a2e1a40f85577979749d4c0d6de30e992d996659mstarzinger@chromium.org 2399a2e1a40f85577979749d4c0d6de30e992d996659mstarzinger@chromium.org 2400196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.orgvoid ConstantPoolArray::set(int index, int32_t value) { 2401a2e1a40f85577979749d4c0d6de30e992d996659mstarzinger@chromium.org ASSERT(map() == GetHeap()->constant_pool_array_map()); 2402196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org ASSERT(get_type(index) == INT32); 2403196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org WRITE_INT32_FIELD(this, OffsetOfElementAt(index), value); 2404a2e1a40f85577979749d4c0d6de30e992d996659mstarzinger@chromium.org} 2405a2e1a40f85577979749d4c0d6de30e992d996659mstarzinger@chromium.org 2406a2e1a40f85577979749d4c0d6de30e992d996659mstarzinger@chromium.org 2407196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.orgvoid ConstantPoolArray::Init(const NumberOfEntries& small) { 2408196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org uint32_t small_layout_1 = 2409196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org Int64CountField::encode(small.count_of(INT64)) | 2410196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org CodePtrCountField::encode(small.count_of(CODE_PTR)) | 2411196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org HeapPtrCountField::encode(small.count_of(HEAP_PTR)) | 2412196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org IsExtendedField::encode(false); 2413196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org uint32_t small_layout_2 = 2414196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org Int32CountField::encode(small.count_of(INT32)) | 2415196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org TotalCountField::encode(small.total_count()) | 2416196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org WeakObjectStateField::encode(NO_WEAK_OBJECTS); 2417196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org WRITE_UINT32_FIELD(this, kSmallLayout1Offset, small_layout_1); 2418196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org WRITE_UINT32_FIELD(this, kSmallLayout2Offset, small_layout_2); 2419196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org if (kHeaderSize != kFirstEntryOffset) { 2420196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org ASSERT(kFirstEntryOffset - kHeaderSize == kInt32Size); 2421196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org WRITE_UINT32_FIELD(this, kHeaderSize, 0); // Zero out header padding. 2422196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org } 2423a2e1a40f85577979749d4c0d6de30e992d996659mstarzinger@chromium.org} 2424a2e1a40f85577979749d4c0d6de30e992d996659mstarzinger@chromium.org 2425a2e1a40f85577979749d4c0d6de30e992d996659mstarzinger@chromium.org 2426196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.orgvoid ConstantPoolArray::InitExtended(const NumberOfEntries& small, 2427196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org const NumberOfEntries& extended) { 2428196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org // Initialize small layout fields first. 2429196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org Init(small); 2430196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org 2431196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org // Set is_extended_layout field. 2432196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org uint32_t small_layout_1 = READ_UINT32_FIELD(this, kSmallLayout1Offset); 2433196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org small_layout_1 = IsExtendedField::update(small_layout_1, true); 2434196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org WRITE_INT32_FIELD(this, kSmallLayout1Offset, small_layout_1); 2435196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org 2436196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org // Initialize the extended layout fields. 2437196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org int extended_header_offset = get_extended_section_header_offset(); 2438196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org WRITE_INT_FIELD(this, extended_header_offset + kExtendedInt64CountOffset, 2439196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org extended.count_of(INT64)); 2440196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org WRITE_INT_FIELD(this, extended_header_offset + kExtendedCodePtrCountOffset, 2441196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org extended.count_of(CODE_PTR)); 2442196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org WRITE_INT_FIELD(this, extended_header_offset + kExtendedHeapPtrCountOffset, 2443196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org extended.count_of(HEAP_PTR)); 2444196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org WRITE_INT_FIELD(this, extended_header_offset + kExtendedInt32CountOffset, 2445196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org extended.count_of(INT32)); 2446196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org} 2447196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org 2448196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org 2449196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.orgint ConstantPoolArray::size() { 2450196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org NumberOfEntries small(this, SMALL_SECTION); 2451196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org if (!is_extended_layout()) { 2452196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org return SizeFor(small); 2453196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org } else { 2454196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org NumberOfEntries extended(this, EXTENDED_SECTION); 2455196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org return SizeForExtended(small, extended); 2456196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org } 2457196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org} 2458196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org 2459196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org 2460196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.orgint ConstantPoolArray::length() { 2461196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org uint32_t small_layout_2 = READ_UINT32_FIELD(this, kSmallLayout2Offset); 2462196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org int length = TotalCountField::decode(small_layout_2); 2463196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org if (is_extended_layout()) { 2464196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org length += number_of_entries(INT64, EXTENDED_SECTION) + 2465196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org number_of_entries(CODE_PTR, EXTENDED_SECTION) + 2466196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org number_of_entries(HEAP_PTR, EXTENDED_SECTION) + 2467196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org number_of_entries(INT32, EXTENDED_SECTION); 2468196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org } 2469196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org return length; 2470196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org} 2471196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org 2472196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org 2473196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.orgint ConstantPoolArray::Iterator::next_index() { 2474196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org ASSERT(!is_finished()); 2475196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org int ret = next_index_++; 2476196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org update_section(); 2477196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org return ret; 2478196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org} 2479196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org 2480196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org 2481196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.orgbool ConstantPoolArray::Iterator::is_finished() { 2482196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org return next_index_ > array_->last_index(type_, final_section_); 2483196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org} 2484196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org 2485196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org 2486196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.orgvoid ConstantPoolArray::Iterator::update_section() { 2487196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org if (next_index_ > array_->last_index(type_, current_section_) && 2488196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org current_section_ != final_section_) { 2489196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org ASSERT(final_section_ == EXTENDED_SECTION); 2490196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org current_section_ = EXTENDED_SECTION; 2491196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org next_index_ = array_->first_index(type_, EXTENDED_SECTION); 2492196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org } 2493a2e1a40f85577979749d4c0d6de30e992d996659mstarzinger@chromium.org} 2494a2e1a40f85577979749d4c0d6de30e992d996659mstarzinger@chromium.org 2495a2e1a40f85577979749d4c0d6de30e992d996659mstarzinger@chromium.org 249679e7902fa5f94747b5383dd40f3002dd8b62303arossberg@chromium.orgWriteBarrierMode HeapObject::GetWriteBarrierMode( 249779e7902fa5f94747b5383dd40f3002dd8b62303arossberg@chromium.org const DisallowHeapAllocation& promise) { 2498c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com Heap* heap = GetHeap(); 2499c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com if (heap->incremental_marking()->IsMarking()) return UPDATE_WRITE_BARRIER; 2500c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com if (heap->InNewSpace(this)) return SKIP_WRITE_BARRIER; 250143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return UPDATE_WRITE_BARRIER; 250243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 250343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 250443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 250543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid FixedArray::set(int index, 250643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Object* value, 25075a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org WriteBarrierMode mode) { 2508c5d4971574b7a205fa0e788d8121dc79485e5e67hpayer@chromium.org ASSERT(map() != GetHeap()->fixed_cow_array_map()); 250943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen ASSERT(index >= 0 && index < this->length()); 251043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen int offset = kHeaderSize + index * kPointerSize; 251143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen WRITE_FIELD(this, offset, value); 2512c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com CONDITIONAL_WRITE_BARRIER(GetHeap(), this, offset, value, mode); 251343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 251443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 251543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 251664e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.orgvoid FixedArray::NoIncrementalWriteBarrierSet(FixedArray* array, 251764e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org int index, 251864e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org Object* value) { 2519c5d4971574b7a205fa0e788d8121dc79485e5e67hpayer@chromium.org ASSERT(array->map() != array->GetHeap()->fixed_cow_array_map()); 252064e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org ASSERT(index >= 0 && index < array->length()); 252164e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org int offset = kHeaderSize + index * kPointerSize; 252264e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org WRITE_FIELD(array, offset, value); 252364e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org Heap* heap = array->GetHeap(); 252464e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org if (heap->InNewSpace(value)) { 252564e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org heap->RecordWrite(array->address(), offset); 252664e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org } 252764e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org} 252864e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org 252964e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org 2530394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.comvoid FixedArray::NoWriteBarrierSet(FixedArray* array, 2531394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com int index, 2532394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com Object* value) { 2533c5d4971574b7a205fa0e788d8121dc79485e5e67hpayer@chromium.org ASSERT(array->map() != array->GetHeap()->fixed_cow_array_map()); 253443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen ASSERT(index >= 0 && index < array->length()); 2535c5d4971574b7a205fa0e788d8121dc79485e5e67hpayer@chromium.org ASSERT(!array->GetHeap()->InNewSpace(value)); 253643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen WRITE_FIELD(array, kHeaderSize + index * kPointerSize, value); 253743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 253843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 253943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 254043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid FixedArray::set_undefined(int index) { 25411f410f9a9c4fbd4270749af64b477df87b753158mstarzinger@chromium.org ASSERT(map() != GetHeap()->fixed_cow_array_map()); 254243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen ASSERT(index >= 0 && index < this->length()); 25431f410f9a9c4fbd4270749af64b477df87b753158mstarzinger@chromium.org ASSERT(!GetHeap()->InNewSpace(GetHeap()->undefined_value())); 25441f410f9a9c4fbd4270749af64b477df87b753158mstarzinger@chromium.org WRITE_FIELD(this, 25451f410f9a9c4fbd4270749af64b477df87b753158mstarzinger@chromium.org kHeaderSize + index * kPointerSize, 25461f410f9a9c4fbd4270749af64b477df87b753158mstarzinger@chromium.org GetHeap()->undefined_value()); 254743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 254843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 254943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 2550236ad9617a7359a463144a6ebeb5431a70f769cfager@chromium.orgvoid FixedArray::set_null(int index) { 2551236ad9617a7359a463144a6ebeb5431a70f769cfager@chromium.org ASSERT(index >= 0 && index < this->length()); 25521f410f9a9c4fbd4270749af64b477df87b753158mstarzinger@chromium.org ASSERT(!GetHeap()->InNewSpace(GetHeap()->null_value())); 25531f410f9a9c4fbd4270749af64b477df87b753158mstarzinger@chromium.org WRITE_FIELD(this, 25541f410f9a9c4fbd4270749af64b477df87b753158mstarzinger@chromium.org kHeaderSize + index * kPointerSize, 25551f410f9a9c4fbd4270749af64b477df87b753158mstarzinger@chromium.org GetHeap()->null_value()); 2556236ad9617a7359a463144a6ebeb5431a70f769cfager@chromium.org} 2557236ad9617a7359a463144a6ebeb5431a70f769cfager@chromium.org 2558236ad9617a7359a463144a6ebeb5431a70f769cfager@chromium.org 255943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid FixedArray::set_the_hole(int index) { 2560c5d4971574b7a205fa0e788d8121dc79485e5e67hpayer@chromium.org ASSERT(map() != GetHeap()->fixed_cow_array_map()); 256143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen ASSERT(index >= 0 && index < this->length()); 2562c5d4971574b7a205fa0e788d8121dc79485e5e67hpayer@chromium.org ASSERT(!GetHeap()->InNewSpace(GetHeap()->the_hole_value())); 2563ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org WRITE_FIELD(this, 2564ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org kHeaderSize + index * kPointerSize, 2565ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org GetHeap()->the_hole_value()); 256643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 256743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 256843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 25692f599e5925b02d78bd78703b44741d6b27e53a44machenbach@chromium.orgvoid FixedArray::FillWithHoles(int from, int to) { 25702f599e5925b02d78bd78703b44741d6b27e53a44machenbach@chromium.org for (int i = from; i < to; i++) { 25712f599e5925b02d78bd78703b44741d6b27e53a44machenbach@chromium.org set_the_hole(i); 25722f599e5925b02d78bd78703b44741d6b27e53a44machenbach@chromium.org } 2573fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org} 2574fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org 2575fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org 2576ce5e87bd905d592a8bd612b3dedf7a994177c13aager@chromium.orgObject** FixedArray::data_start() { 2577ce5e87bd905d592a8bd612b3dedf7a994177c13aager@chromium.org return HeapObject::RawField(this, kHeaderSize); 2578ce5e87bd905d592a8bd612b3dedf7a994177c13aager@chromium.org} 2579ce5e87bd905d592a8bd612b3dedf7a994177c13aager@chromium.org 2580ce5e87bd905d592a8bd612b3dedf7a994177c13aager@chromium.org 25819a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.combool DescriptorArray::IsEmpty() { 25825a11aaf63fdb7843c9b116fdb84ee35b0a980ea6yangguo@chromium.org ASSERT(length() >= kFirstIndex || 2583c5d4971574b7a205fa0e788d8121dc79485e5e67hpayer@chromium.org this == GetHeap()->empty_descriptor_array()); 25845a11aaf63fdb7843c9b116fdb84ee35b0a980ea6yangguo@chromium.org return length() < kFirstIndex; 25857028c05c1c71b9d5c5fe1bca01f2461d17a2dda7mmassi@chromium.org} 25867028c05c1c71b9d5c5fe1bca01f2461d17a2dda7mmassi@chromium.org 25877028c05c1c71b9d5c5fe1bca01f2461d17a2dda7mmassi@chromium.org 258833e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.orgvoid DescriptorArray::SetNumberOfDescriptors(int number_of_descriptors) { 258933e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org WRITE_FIELD( 259033e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org this, kDescriptorLengthOffset, Smi::FromInt(number_of_descriptors)); 259133e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org} 259233e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org 259333e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org 259499aa490225c81012235659d9a183226b286178c8yangguo@chromium.org// Perform a binary search in a fixed array. Low and high are entry indices. If 259599aa490225c81012235659d9a183226b286178c8yangguo@chromium.org// there are three entries in this array it should be called with low=0 and 259699aa490225c81012235659d9a183226b286178c8yangguo@chromium.org// high=2. 259733e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.orgtemplate<SearchMode search_mode, typename T> 2598750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.orgint BinarySearch(T* array, Name* name, int low, int high, int valid_entries) { 259999aa490225c81012235659d9a183226b286178c8yangguo@chromium.org uint32_t hash = name->Hash(); 260099aa490225c81012235659d9a183226b286178c8yangguo@chromium.org int limit = high; 260199aa490225c81012235659d9a183226b286178c8yangguo@chromium.org 260299aa490225c81012235659d9a183226b286178c8yangguo@chromium.org ASSERT(low <= high); 260399aa490225c81012235659d9a183226b286178c8yangguo@chromium.org 260499aa490225c81012235659d9a183226b286178c8yangguo@chromium.org while (low != high) { 260599aa490225c81012235659d9a183226b286178c8yangguo@chromium.org int mid = (low + high) / 2; 2606750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org Name* mid_name = array->GetSortedKey(mid); 260799aa490225c81012235659d9a183226b286178c8yangguo@chromium.org uint32_t mid_hash = mid_name->Hash(); 260899aa490225c81012235659d9a183226b286178c8yangguo@chromium.org 260999aa490225c81012235659d9a183226b286178c8yangguo@chromium.org if (mid_hash >= hash) { 261099aa490225c81012235659d9a183226b286178c8yangguo@chromium.org high = mid; 261199aa490225c81012235659d9a183226b286178c8yangguo@chromium.org } else { 261299aa490225c81012235659d9a183226b286178c8yangguo@chromium.org low = mid + 1; 261399aa490225c81012235659d9a183226b286178c8yangguo@chromium.org } 261499aa490225c81012235659d9a183226b286178c8yangguo@chromium.org } 261599aa490225c81012235659d9a183226b286178c8yangguo@chromium.org 261646839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org for (; low <= limit; ++low) { 261746839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org int sort_index = array->GetSortedKeyIndex(low); 2618750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org Name* entry = array->GetKey(sort_index); 261946839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org if (entry->Hash() != hash) break; 262033e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org if (entry->Equals(name)) { 262133e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org if (search_mode == ALL_ENTRIES || sort_index < valid_entries) { 262233e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org return sort_index; 262333e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org } 262433e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org return T::kNotFound; 262533e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org } 262699aa490225c81012235659d9a183226b286178c8yangguo@chromium.org } 262799aa490225c81012235659d9a183226b286178c8yangguo@chromium.org 262899aa490225c81012235659d9a183226b286178c8yangguo@chromium.org return T::kNotFound; 262999aa490225c81012235659d9a183226b286178c8yangguo@chromium.org} 263099aa490225c81012235659d9a183226b286178c8yangguo@chromium.org 263133e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org 263299aa490225c81012235659d9a183226b286178c8yangguo@chromium.org// Perform a linear search in this fixed array. len is the number of entry 263399aa490225c81012235659d9a183226b286178c8yangguo@chromium.org// indices that are valid. 263406ab2ec756e44eeaf7500b9794f9d2abc79dc8cfverwaest@chromium.orgtemplate<SearchMode search_mode, typename T> 2635750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.orgint LinearSearch(T* array, Name* name, int len, int valid_entries) { 263699aa490225c81012235659d9a183226b286178c8yangguo@chromium.org uint32_t hash = name->Hash(); 263706ab2ec756e44eeaf7500b9794f9d2abc79dc8cfverwaest@chromium.org if (search_mode == ALL_ENTRIES) { 263806ab2ec756e44eeaf7500b9794f9d2abc79dc8cfverwaest@chromium.org for (int number = 0; number < len; number++) { 263906ab2ec756e44eeaf7500b9794f9d2abc79dc8cfverwaest@chromium.org int sorted_index = array->GetSortedKeyIndex(number); 2640750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org Name* entry = array->GetKey(sorted_index); 264106ab2ec756e44eeaf7500b9794f9d2abc79dc8cfverwaest@chromium.org uint32_t current_hash = entry->Hash(); 264206ab2ec756e44eeaf7500b9794f9d2abc79dc8cfverwaest@chromium.org if (current_hash > hash) break; 264306ab2ec756e44eeaf7500b9794f9d2abc79dc8cfverwaest@chromium.org if (current_hash == hash && entry->Equals(name)) return sorted_index; 264406ab2ec756e44eeaf7500b9794f9d2abc79dc8cfverwaest@chromium.org } 264506ab2ec756e44eeaf7500b9794f9d2abc79dc8cfverwaest@chromium.org } else { 264606ab2ec756e44eeaf7500b9794f9d2abc79dc8cfverwaest@chromium.org ASSERT(len >= valid_entries); 264706ab2ec756e44eeaf7500b9794f9d2abc79dc8cfverwaest@chromium.org for (int number = 0; number < valid_entries; number++) { 2648750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org Name* entry = array->GetKey(number); 264906ab2ec756e44eeaf7500b9794f9d2abc79dc8cfverwaest@chromium.org uint32_t current_hash = entry->Hash(); 265006ab2ec756e44eeaf7500b9794f9d2abc79dc8cfverwaest@chromium.org if (current_hash == hash && entry->Equals(name)) return number; 265106ab2ec756e44eeaf7500b9794f9d2abc79dc8cfverwaest@chromium.org } 265299aa490225c81012235659d9a183226b286178c8yangguo@chromium.org } 265399aa490225c81012235659d9a183226b286178c8yangguo@chromium.org return T::kNotFound; 265499aa490225c81012235659d9a183226b286178c8yangguo@chromium.org} 265599aa490225c81012235659d9a183226b286178c8yangguo@chromium.org 265699aa490225c81012235659d9a183226b286178c8yangguo@chromium.org 265706ab2ec756e44eeaf7500b9794f9d2abc79dc8cfverwaest@chromium.orgtemplate<SearchMode search_mode, typename T> 2658750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.orgint Search(T* array, Name* name, int valid_entries) { 265906ab2ec756e44eeaf7500b9794f9d2abc79dc8cfverwaest@chromium.org if (search_mode == VALID_ENTRIES) { 266006ab2ec756e44eeaf7500b9794f9d2abc79dc8cfverwaest@chromium.org SLOW_ASSERT(array->IsSortedNoDuplicates(valid_entries)); 266106ab2ec756e44eeaf7500b9794f9d2abc79dc8cfverwaest@chromium.org } else { 266206ab2ec756e44eeaf7500b9794f9d2abc79dc8cfverwaest@chromium.org SLOW_ASSERT(array->IsSortedNoDuplicates()); 266306ab2ec756e44eeaf7500b9794f9d2abc79dc8cfverwaest@chromium.org } 266443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 266599aa490225c81012235659d9a183226b286178c8yangguo@chromium.org int nof = array->number_of_entries(); 266699aa490225c81012235659d9a183226b286178c8yangguo@chromium.org if (nof == 0) return T::kNotFound; 266743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 266843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // Fast case: do linear search for small arrays. 266943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen const int kMaxElementsForLinearSearch = 8; 267033e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org if ((search_mode == ALL_ENTRIES && 267133e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org nof <= kMaxElementsForLinearSearch) || 267233e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org (search_mode == VALID_ENTRIES && 267333e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org valid_entries <= (kMaxElementsForLinearSearch * 3))) { 267406ab2ec756e44eeaf7500b9794f9d2abc79dc8cfverwaest@chromium.org return LinearSearch<search_mode>(array, name, nof, valid_entries); 267543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 267643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 267743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // Slow case: perform binary search. 267833e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org return BinarySearch<search_mode>(array, name, 0, nof - 1, valid_entries); 267999aa490225c81012235659d9a183226b286178c8yangguo@chromium.org} 268099aa490225c81012235659d9a183226b286178c8yangguo@chromium.org 268199aa490225c81012235659d9a183226b286178c8yangguo@chromium.org 2682750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.orgint DescriptorArray::Search(Name* name, int valid_descriptors) { 268306ab2ec756e44eeaf7500b9794f9d2abc79dc8cfverwaest@chromium.org return internal::Search<VALID_ENTRIES>(this, name, valid_descriptors); 268443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 268543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 268643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 2687750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.orgint DescriptorArray::SearchWithCache(Name* name, Map* map) { 268806ab2ec756e44eeaf7500b9794f9d2abc79dc8cfverwaest@chromium.org int number_of_own_descriptors = map->NumberOfOwnDescriptors(); 268906ab2ec756e44eeaf7500b9794f9d2abc79dc8cfverwaest@chromium.org if (number_of_own_descriptors == 0) return kNotFound; 269046839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org 269199aa490225c81012235659d9a183226b286178c8yangguo@chromium.org DescriptorLookupCache* cache = GetIsolate()->descriptor_lookup_cache(); 269206ab2ec756e44eeaf7500b9794f9d2abc79dc8cfverwaest@chromium.org int number = cache->Lookup(map, name); 269346839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org 2694ea4f62e1df22417fc8dc2c2425485dca98b13d07ager@chromium.org if (number == DescriptorLookupCache::kAbsent) { 269506ab2ec756e44eeaf7500b9794f9d2abc79dc8cfverwaest@chromium.org number = Search(name, number_of_own_descriptors); 269606ab2ec756e44eeaf7500b9794f9d2abc79dc8cfverwaest@chromium.org cache->Update(map, name, number); 2697ea4f62e1df22417fc8dc2c2425485dca98b13d07ager@chromium.org } 269846839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org 2699ea4f62e1df22417fc8dc2c2425485dca98b13d07ager@chromium.org return number; 2700ea4f62e1df22417fc8dc2c2425485dca98b13d07ager@chromium.org} 2701ea4f62e1df22417fc8dc2c2425485dca98b13d07ager@chromium.org 2702ea4f62e1df22417fc8dc2c2425485dca98b13d07ager@chromium.org 2703bfd1d202fb7cd6d54d956414bad9f75a995d0f65machenbach@chromium.orgPropertyDetails Map::GetLastDescriptorDetails() { 2704bfd1d202fb7cd6d54d956414bad9f75a995d0f65machenbach@chromium.org return instance_descriptors()->GetDetails(LastAdded()); 2705bfd1d202fb7cd6d54d956414bad9f75a995d0f65machenbach@chromium.org} 2706bfd1d202fb7cd6d54d956414bad9f75a995d0f65machenbach@chromium.org 2707bfd1d202fb7cd6d54d956414bad9f75a995d0f65machenbach@chromium.org 270846839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.orgvoid Map::LookupDescriptor(JSObject* holder, 2709750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org Name* name, 271046839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org LookupResult* result) { 271146839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org DescriptorArray* descriptors = this->instance_descriptors(); 271206ab2ec756e44eeaf7500b9794f9d2abc79dc8cfverwaest@chromium.org int number = descriptors->SearchWithCache(name, this); 271346839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org if (number == DescriptorArray::kNotFound) return result->NotFound(); 271446839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org result->DescriptorResult(holder, descriptors->GetDetails(number), number); 271546839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org} 271646839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org 271746839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org 271846839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.orgvoid Map::LookupTransition(JSObject* holder, 2719750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org Name* name, 272046839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org LookupResult* result) { 27218f8fe81d7a9cced7a0d30e56124c0428d1a6d229machenbach@chromium.org int transition_index = this->SearchTransition(name); 27228f8fe81d7a9cced7a0d30e56124c0428d1a6d229machenbach@chromium.org if (transition_index == TransitionArray::kNotFound) return result->NotFound(); 27238f8fe81d7a9cced7a0d30e56124c0428d1a6d229machenbach@chromium.org result->TransitionResult(holder, this->GetTransition(transition_index)); 272446839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org} 272546839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org 272646839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org 27275b080567cf135f6dbaf23973ba6b6fa1d6af83b3machenbach@chromium.orgFixedArrayBase* Map::GetInitialElements() { 27285b080567cf135f6dbaf23973ba6b6fa1d6af83b3machenbach@chromium.org if (has_fast_smi_or_object_elements() || 27295b080567cf135f6dbaf23973ba6b6fa1d6af83b3machenbach@chromium.org has_fast_double_elements()) { 27305b080567cf135f6dbaf23973ba6b6fa1d6af83b3machenbach@chromium.org ASSERT(!GetHeap()->InNewSpace(GetHeap()->empty_fixed_array())); 27315b080567cf135f6dbaf23973ba6b6fa1d6af83b3machenbach@chromium.org return GetHeap()->empty_fixed_array(); 27325b080567cf135f6dbaf23973ba6b6fa1d6af83b3machenbach@chromium.org } else if (has_external_array_elements()) { 27335b080567cf135f6dbaf23973ba6b6fa1d6af83b3machenbach@chromium.org ExternalArray* empty_array = GetHeap()->EmptyExternalArrayForMap(this); 27345b080567cf135f6dbaf23973ba6b6fa1d6af83b3machenbach@chromium.org ASSERT(!GetHeap()->InNewSpace(empty_array)); 27355b080567cf135f6dbaf23973ba6b6fa1d6af83b3machenbach@chromium.org return empty_array; 27365b080567cf135f6dbaf23973ba6b6fa1d6af83b3machenbach@chromium.org } else if (has_fixed_typed_array_elements()) { 27375b080567cf135f6dbaf23973ba6b6fa1d6af83b3machenbach@chromium.org FixedTypedArrayBase* empty_array = 27385b080567cf135f6dbaf23973ba6b6fa1d6af83b3machenbach@chromium.org GetHeap()->EmptyFixedTypedArrayForMap(this); 27395b080567cf135f6dbaf23973ba6b6fa1d6af83b3machenbach@chromium.org ASSERT(!GetHeap()->InNewSpace(empty_array)); 27405b080567cf135f6dbaf23973ba6b6fa1d6af83b3machenbach@chromium.org return empty_array; 274170ec1a2160dd946b9578d04d97d631a6d4ab4f8cbmeurer@chromium.org } else if (has_dictionary_elements()) { 274270ec1a2160dd946b9578d04d97d631a6d4ab4f8cbmeurer@chromium.org ASSERT(!GetHeap()->InNewSpace(GetHeap()->empty_slow_element_dictionary())); 274370ec1a2160dd946b9578d04d97d631a6d4ab4f8cbmeurer@chromium.org return GetHeap()->empty_slow_element_dictionary(); 27445b080567cf135f6dbaf23973ba6b6fa1d6af83b3machenbach@chromium.org } else { 27455b080567cf135f6dbaf23973ba6b6fa1d6af83b3machenbach@chromium.org UNREACHABLE(); 27465b080567cf135f6dbaf23973ba6b6fa1d6af83b3machenbach@chromium.org } 27475b080567cf135f6dbaf23973ba6b6fa1d6af83b3machenbach@chromium.org return NULL; 27485b080567cf135f6dbaf23973ba6b6fa1d6af83b3machenbach@chromium.org} 27495b080567cf135f6dbaf23973ba6b6fa1d6af83b3machenbach@chromium.org 27505b080567cf135f6dbaf23973ba6b6fa1d6af83b3machenbach@chromium.org 2751400388edd471bd4d4a97b21c52c1024cd1cc5708rossberg@chromium.orgObject** DescriptorArray::GetKeySlot(int descriptor_number) { 2752400388edd471bd4d4a97b21c52c1024cd1cc5708rossberg@chromium.org ASSERT(descriptor_number < number_of_descriptors()); 27534954674151afa960af66efb4831df06bde727333yangguo@chromium.org return RawFieldOfElementAt(ToKeyIndex(descriptor_number)); 2754400388edd471bd4d4a97b21c52c1024cd1cc5708rossberg@chromium.org} 2755400388edd471bd4d4a97b21c52c1024cd1cc5708rossberg@chromium.org 2756400388edd471bd4d4a97b21c52c1024cd1cc5708rossberg@chromium.org 2757e3b8d0fe80e858c990832db1233c069f8b8cd5c9mstarzinger@chromium.orgObject** DescriptorArray::GetDescriptorStartSlot(int descriptor_number) { 2758e3b8d0fe80e858c990832db1233c069f8b8cd5c9mstarzinger@chromium.org return GetKeySlot(descriptor_number); 2759e3b8d0fe80e858c990832db1233c069f8b8cd5c9mstarzinger@chromium.org} 2760e3b8d0fe80e858c990832db1233c069f8b8cd5c9mstarzinger@chromium.org 2761e3b8d0fe80e858c990832db1233c069f8b8cd5c9mstarzinger@chromium.org 2762e3b8d0fe80e858c990832db1233c069f8b8cd5c9mstarzinger@chromium.orgObject** DescriptorArray::GetDescriptorEndSlot(int descriptor_number) { 2763e3b8d0fe80e858c990832db1233c069f8b8cd5c9mstarzinger@chromium.org return GetValueSlot(descriptor_number - 1) + 1; 2764e3b8d0fe80e858c990832db1233c069f8b8cd5c9mstarzinger@chromium.org} 2765e3b8d0fe80e858c990832db1233c069f8b8cd5c9mstarzinger@chromium.org 2766e3b8d0fe80e858c990832db1233c069f8b8cd5c9mstarzinger@chromium.org 2767750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.orgName* DescriptorArray::GetKey(int descriptor_number) { 276843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen ASSERT(descriptor_number < number_of_descriptors()); 2769750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org return Name::cast(get(ToKeyIndex(descriptor_number))); 277043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 277143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 277243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 277346839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.orgint DescriptorArray::GetSortedKeyIndex(int descriptor_number) { 277446839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org return GetDetails(descriptor_number).pointer(); 277546839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org} 277646839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org 277746839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org 2778750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.orgName* DescriptorArray::GetSortedKey(int descriptor_number) { 277946839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org return GetKey(GetSortedKeyIndex(descriptor_number)); 278046839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org} 278146839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org 278246839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org 278306ab2ec756e44eeaf7500b9794f9d2abc79dc8cfverwaest@chromium.orgvoid DescriptorArray::SetSortedKey(int descriptor_index, int pointer) { 278406ab2ec756e44eeaf7500b9794f9d2abc79dc8cfverwaest@chromium.org PropertyDetails details = GetDetails(descriptor_index); 278506ab2ec756e44eeaf7500b9794f9d2abc79dc8cfverwaest@chromium.org set(ToDetailsIndex(descriptor_index), details.set_pointer(pointer).AsSmi()); 278646839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org} 278746839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org 278846839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org 2789f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.orgvoid DescriptorArray::SetRepresentation(int descriptor_index, 2790f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org Representation representation) { 2791f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org ASSERT(!representation.IsNone()); 2792f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org PropertyDetails details = GetDetails(descriptor_index); 2793f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org set(ToDetailsIndex(descriptor_index), 2794f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org details.CopyWithRepresentation(representation).AsSmi()); 2795f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org} 2796f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org 2797f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org 279837141398d9125c021d47ceb91e2b19efd35c89ddverwaest@chromium.orgObject** DescriptorArray::GetValueSlot(int descriptor_number) { 279937141398d9125c021d47ceb91e2b19efd35c89ddverwaest@chromium.org ASSERT(descriptor_number < number_of_descriptors()); 28004954674151afa960af66efb4831df06bde727333yangguo@chromium.org return RawFieldOfElementAt(ToValueIndex(descriptor_number)); 280137141398d9125c021d47ceb91e2b19efd35c89ddverwaest@chromium.org} 280237141398d9125c021d47ceb91e2b19efd35c89ddverwaest@chromium.org 280337141398d9125c021d47ceb91e2b19efd35c89ddverwaest@chromium.org 280443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenObject* DescriptorArray::GetValue(int descriptor_number) { 280543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen ASSERT(descriptor_number < number_of_descriptors()); 2806400388edd471bd4d4a97b21c52c1024cd1cc5708rossberg@chromium.org return get(ToValueIndex(descriptor_number)); 2807400388edd471bd4d4a97b21c52c1024cd1cc5708rossberg@chromium.org} 2808400388edd471bd4d4a97b21c52c1024cd1cc5708rossberg@chromium.org 2809400388edd471bd4d4a97b21c52c1024cd1cc5708rossberg@chromium.org 2810e9fd6580f52407c94d77bfcb4be04207f2ebb2f1machenbach@chromium.orgvoid DescriptorArray::SetValue(int descriptor_index, Object* value) { 2811e9fd6580f52407c94d77bfcb4be04207f2ebb2f1machenbach@chromium.org set(ToValueIndex(descriptor_index), value); 2812e9fd6580f52407c94d77bfcb4be04207f2ebb2f1machenbach@chromium.org} 2813e9fd6580f52407c94d77bfcb4be04207f2ebb2f1machenbach@chromium.org 2814e9fd6580f52407c94d77bfcb4be04207f2ebb2f1machenbach@chromium.org 2815ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.comPropertyDetails DescriptorArray::GetDetails(int descriptor_number) { 281643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen ASSERT(descriptor_number < number_of_descriptors()); 2817400388edd471bd4d4a97b21c52c1024cd1cc5708rossberg@chromium.org Object* details = get(ToDetailsIndex(descriptor_number)); 2818ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.com return PropertyDetails(Smi::cast(details)); 281943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 282043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 282143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 2822defbd109bb9bd556bb8ece103c3b340d3552155ekasperl@chromium.orgPropertyType DescriptorArray::GetType(int descriptor_number) { 2823ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.com return GetDetails(descriptor_number).type(); 2824defbd109bb9bd556bb8ece103c3b340d3552155ekasperl@chromium.org} 2825defbd109bb9bd556bb8ece103c3b340d3552155ekasperl@chromium.org 2826defbd109bb9bd556bb8ece103c3b340d3552155ekasperl@chromium.org 2827defbd109bb9bd556bb8ece103c3b340d3552155ekasperl@chromium.orgint DescriptorArray::GetFieldIndex(int descriptor_number) { 28289259716434187c932704601f700375e53d865de8rossberg@chromium.org ASSERT(GetDetails(descriptor_number).type() == FIELD); 282979e7902fa5f94747b5383dd40f3002dd8b62303arossberg@chromium.org return GetDetails(descriptor_number).field_index(); 2830defbd109bb9bd556bb8ece103c3b340d3552155ekasperl@chromium.org} 2831defbd109bb9bd556bb8ece103c3b340d3552155ekasperl@chromium.org 2832defbd109bb9bd556bb8ece103c3b340d3552155ekasperl@chromium.org 2833e9fd6580f52407c94d77bfcb4be04207f2ebb2f1machenbach@chromium.orgHeapType* DescriptorArray::GetFieldType(int descriptor_number) { 2834e9fd6580f52407c94d77bfcb4be04207f2ebb2f1machenbach@chromium.org ASSERT(GetDetails(descriptor_number).type() == FIELD); 2835e9fd6580f52407c94d77bfcb4be04207f2ebb2f1machenbach@chromium.org return HeapType::cast(GetValue(descriptor_number)); 2836e9fd6580f52407c94d77bfcb4be04207f2ebb2f1machenbach@chromium.org} 2837e9fd6580f52407c94d77bfcb4be04207f2ebb2f1machenbach@chromium.org 2838e9fd6580f52407c94d77bfcb4be04207f2ebb2f1machenbach@chromium.org 2839fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgObject* DescriptorArray::GetConstant(int descriptor_number) { 2840fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org return GetValue(descriptor_number); 2841defbd109bb9bd556bb8ece103c3b340d3552155ekasperl@chromium.org} 2842defbd109bb9bd556bb8ece103c3b340d3552155ekasperl@chromium.org 2843defbd109bb9bd556bb8ece103c3b340d3552155ekasperl@chromium.org 2844defbd109bb9bd556bb8ece103c3b340d3552155ekasperl@chromium.orgObject* DescriptorArray::GetCallbacksObject(int descriptor_number) { 2845defbd109bb9bd556bb8ece103c3b340d3552155ekasperl@chromium.org ASSERT(GetType(descriptor_number) == CALLBACKS); 2846defbd109bb9bd556bb8ece103c3b340d3552155ekasperl@chromium.org return GetValue(descriptor_number); 2847defbd109bb9bd556bb8ece103c3b340d3552155ekasperl@chromium.org} 2848defbd109bb9bd556bb8ece103c3b340d3552155ekasperl@chromium.org 2849defbd109bb9bd556bb8ece103c3b340d3552155ekasperl@chromium.org 2850defbd109bb9bd556bb8ece103c3b340d3552155ekasperl@chromium.orgAccessorDescriptor* DescriptorArray::GetCallbacks(int descriptor_number) { 2851defbd109bb9bd556bb8ece103c3b340d3552155ekasperl@chromium.org ASSERT(GetType(descriptor_number) == CALLBACKS); 2852ea91cc579ade536e3a08498a8157921dd4f533d1ager@chromium.org Foreign* p = Foreign::cast(GetCallbacksObject(descriptor_number)); 2853c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org return reinterpret_cast<AccessorDescriptor*>(p->foreign_address()); 2854defbd109bb9bd556bb8ece103c3b340d3552155ekasperl@chromium.org} 2855defbd109bb9bd556bb8ece103c3b340d3552155ekasperl@chromium.org 2856defbd109bb9bd556bb8ece103c3b340d3552155ekasperl@chromium.org 285743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid DescriptorArray::Get(int descriptor_number, Descriptor* desc) { 28585b080567cf135f6dbaf23973ba6b6fa1d6af83b3machenbach@chromium.org desc->Init(handle(GetKey(descriptor_number), GetIsolate()), 28595b080567cf135f6dbaf23973ba6b6fa1d6af83b3machenbach@chromium.org handle(GetValue(descriptor_number), GetIsolate()), 2860ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.com GetDetails(descriptor_number)); 286143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 286243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 286343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 2864394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.comvoid DescriptorArray::Set(int descriptor_number, 2865394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com Descriptor* desc, 2866394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com const WhitenessWitness&) { 286743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // Range check. 286843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen ASSERT(descriptor_number < number_of_descriptors()); 286943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 287064e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org NoIncrementalWriteBarrierSet(this, 287164e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org ToKeyIndex(descriptor_number), 28725b080567cf135f6dbaf23973ba6b6fa1d6af83b3machenbach@chromium.org *desc->GetKey()); 2873400388edd471bd4d4a97b21c52c1024cd1cc5708rossberg@chromium.org NoIncrementalWriteBarrierSet(this, 287464e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org ToValueIndex(descriptor_number), 28755b080567cf135f6dbaf23973ba6b6fa1d6af83b3machenbach@chromium.org *desc->GetValue()); 2876400388edd471bd4d4a97b21c52c1024cd1cc5708rossberg@chromium.org NoIncrementalWriteBarrierSet(this, 287764e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org ToDetailsIndex(descriptor_number), 287864e3a4be4a99f31920128de34573c8ac9038de42ricow@chromium.org desc->GetDetails().AsSmi()); 287943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 288043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 288143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 288233e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.orgvoid DescriptorArray::Set(int descriptor_number, Descriptor* desc) { 288333e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org // Range check. 288433e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org ASSERT(descriptor_number < number_of_descriptors()); 288533e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org 28865b080567cf135f6dbaf23973ba6b6fa1d6af83b3machenbach@chromium.org set(ToKeyIndex(descriptor_number), *desc->GetKey()); 28875b080567cf135f6dbaf23973ba6b6fa1d6af83b3machenbach@chromium.org set(ToValueIndex(descriptor_number), *desc->GetValue()); 288833e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org set(ToDetailsIndex(descriptor_number), desc->GetDetails().AsSmi()); 288933e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org} 289033e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org 289133e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org 289246839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.orgvoid DescriptorArray::Append(Descriptor* desc, 289333e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org const WhitenessWitness& witness) { 28945b080567cf135f6dbaf23973ba6b6fa1d6af83b3machenbach@chromium.org DisallowHeapAllocation no_gc; 289533e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org int descriptor_number = number_of_descriptors(); 289633e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org SetNumberOfDescriptors(descriptor_number + 1); 289706ab2ec756e44eeaf7500b9794f9d2abc79dc8cfverwaest@chromium.org Set(descriptor_number, desc, witness); 2898304cc33f8259ef467e8e3c79f448d0bae0e8cd85yangguo@chromium.org 2899304cc33f8259ef467e8e3c79f448d0bae0e8cd85yangguo@chromium.org uint32_t hash = desc->GetKey()->Hash(); 2900304cc33f8259ef467e8e3c79f448d0bae0e8cd85yangguo@chromium.org 290146839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org int insertion; 290246839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org 290306ab2ec756e44eeaf7500b9794f9d2abc79dc8cfverwaest@chromium.org for (insertion = descriptor_number; insertion > 0; --insertion) { 2904750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org Name* key = GetSortedKey(insertion - 1); 2905304cc33f8259ef467e8e3c79f448d0bae0e8cd85yangguo@chromium.org if (key->Hash() <= hash) break; 290646839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org SetSortedKey(insertion, GetSortedKeyIndex(insertion - 1)); 2907304cc33f8259ef467e8e3c79f448d0bae0e8cd85yangguo@chromium.org } 2908304cc33f8259ef467e8e3c79f448d0bae0e8cd85yangguo@chromium.org 290906ab2ec756e44eeaf7500b9794f9d2abc79dc8cfverwaest@chromium.org SetSortedKey(insertion, descriptor_number); 291056c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org} 291156c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org 291256c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.org 291333e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.orgvoid DescriptorArray::Append(Descriptor* desc) { 29145b080567cf135f6dbaf23973ba6b6fa1d6af83b3machenbach@chromium.org DisallowHeapAllocation no_gc; 291533e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org int descriptor_number = number_of_descriptors(); 291633e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org SetNumberOfDescriptors(descriptor_number + 1); 291733e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org Set(descriptor_number, desc); 291833e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org 291933e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org uint32_t hash = desc->GetKey()->Hash(); 292033e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org 292133e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org int insertion; 292233e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org 292333e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org for (insertion = descriptor_number; insertion > 0; --insertion) { 2924750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org Name* key = GetSortedKey(insertion - 1); 292533e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org if (key->Hash() <= hash) break; 292633e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org SetSortedKey(insertion, GetSortedKeyIndex(insertion - 1)); 292733e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org } 292833e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org 292933e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org SetSortedKey(insertion, descriptor_number); 293033e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org} 293133e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org 293233e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org 293346839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.orgvoid DescriptorArray::SwapSortedKeys(int first, int second) { 293446839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org int first_key = GetSortedKeyIndex(first); 293546839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org SetSortedKey(first, GetSortedKeyIndex(second)); 293646839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org SetSortedKey(second, first_key); 2937394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com} 2938394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com 2939394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com 29402ebef182c49d59eba907b120c3c2a50808bd1f12machenbach@chromium.orgDescriptorArray::WhitenessWitness::WhitenessWitness(DescriptorArray* array) 2941394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com : marking_(array->GetHeap()->incremental_marking()) { 2942394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com marking_->EnterNoMarkingScope(); 29435697144afb43181fed170b81c194fe1cc0fce3b6machenbach@chromium.org ASSERT(!marking_->IsMarking() || 29445697144afb43181fed170b81c194fe1cc0fce3b6machenbach@chromium.org Marking::Color(array) == Marking::WHITE_OBJECT); 2945394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com} 2946394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com 2947394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com 294856c14afabc547f0a8ab2e24d789c00030f8df892ulan@chromium.orgDescriptorArray::WhitenessWitness::~WhitenessWitness() { 2949394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com marking_->LeaveNoMarkingScope(); 295043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 295143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 295243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 2953c2e08d7d6b03e672e13fc3bf274a292009decce6machenbach@chromium.orgtemplate<typename Derived, typename Shape, typename Key> 2954c2e08d7d6b03e672e13fc3bf274a292009decce6machenbach@chromium.orgint HashTable<Derived, Shape, Key>::ComputeCapacity(int at_least_space_for) { 29552c99e28a7b1fcb3767dc7c0088514fe53be784c5ricow@chromium.org const int kMinCapacity = 32; 29562c99e28a7b1fcb3767dc7c0088514fe53be784c5ricow@chromium.org int capacity = RoundUpToPowerOf2(at_least_space_for * 2); 29572c99e28a7b1fcb3767dc7c0088514fe53be784c5ricow@chromium.org if (capacity < kMinCapacity) { 29582c99e28a7b1fcb3767dc7c0088514fe53be784c5ricow@chromium.org capacity = kMinCapacity; // Guarantee min capacity. 29592c99e28a7b1fcb3767dc7c0088514fe53be784c5ricow@chromium.org } 29602c99e28a7b1fcb3767dc7c0088514fe53be784c5ricow@chromium.org return capacity; 29612c99e28a7b1fcb3767dc7c0088514fe53be784c5ricow@chromium.org} 29622c99e28a7b1fcb3767dc7c0088514fe53be784c5ricow@chromium.org 29632c99e28a7b1fcb3767dc7c0088514fe53be784c5ricow@chromium.org 2964c2e08d7d6b03e672e13fc3bf274a292009decce6machenbach@chromium.orgtemplate<typename Derived, typename Shape, typename Key> 2965c2e08d7d6b03e672e13fc3bf274a292009decce6machenbach@chromium.orgint HashTable<Derived, Shape, Key>::FindEntry(Key key) { 2966ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org return FindEntry(GetIsolate(), key); 2967ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org} 2968ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org 2969ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org 2970ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org// Find entry for key otherwise return kNotFound. 2971c2e08d7d6b03e672e13fc3bf274a292009decce6machenbach@chromium.orgtemplate<typename Derived, typename Shape, typename Key> 2972c2e08d7d6b03e672e13fc3bf274a292009decce6machenbach@chromium.orgint HashTable<Derived, Shape, Key>::FindEntry(Isolate* isolate, Key key) { 2973ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org uint32_t capacity = Capacity(); 2974c2e08d7d6b03e672e13fc3bf274a292009decce6machenbach@chromium.org uint32_t entry = FirstProbe(HashTable::Hash(key), capacity); 2975ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org uint32_t count = 1; 2976ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org // EnsureCapacity will guarantee the hash table is never full. 2977ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org while (true) { 2978ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org Object* element = KeyAt(entry); 297972204d59e7fb1b8a0e9012e1fac5ef160351e8e4danno@chromium.org // Empty entry. Uses raw unchecked accessors because it is called by the 29804a9f6553038df6b893b3d3ccae351723f4cbbae7yangguo@chromium.org // string table during bootstrapping. 2981fab1498f2f42726c7de46c3ed560d56dd072a8b3rossberg@chromium.org if (element == isolate->heap()->raw_unchecked_undefined_value()) break; 2982fab1498f2f42726c7de46c3ed560d56dd072a8b3rossberg@chromium.org if (element != isolate->heap()->raw_unchecked_the_hole_value() && 2983ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org Shape::IsMatch(key, element)) return entry; 2984ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org entry = NextProbe(entry, count++, capacity); 2985ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org } 2986ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org return kNotFound; 2987ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org} 2988ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org 2989ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org 2990f2038fb01417bcf7698b87a5dfaa4a861539618aerik.corry@gmail.combool SeededNumberDictionary::requires_slow_elements() { 29915a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org Object* max_index_object = get(kMaxNumberKeyIndex); 299243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (!max_index_object->IsSmi()) return false; 299343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return 0 != 299443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen (Smi::cast(max_index_object)->value() & kRequiresSlowElementsMask); 299543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 299643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 2997f2038fb01417bcf7698b87a5dfaa4a861539618aerik.corry@gmail.comuint32_t SeededNumberDictionary::max_number_key() { 299843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen ASSERT(!requires_slow_elements()); 29995a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org Object* max_index_object = get(kMaxNumberKeyIndex); 300043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (!max_index_object->IsSmi()) return 0; 300143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen uint32_t value = static_cast<uint32_t>(Smi::cast(max_index_object)->value()); 300243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return value >> kRequiresSlowElementsTagSize; 300343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 300443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 3005f2038fb01417bcf7698b87a5dfaa4a861539618aerik.corry@gmail.comvoid SeededNumberDictionary::set_requires_slow_elements() { 3006b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org set(kMaxNumberKeyIndex, Smi::FromInt(kRequiresSlowElementsMask)); 3007bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org} 3008bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org 3009bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org 301043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// ------------------------------------ 301143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen// Cast operations 301243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 301343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 301443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenCAST_ACCESSOR(FixedArray) 30156d786c9805481bd13ecb29c3155540f2f32950e1svenpanne@chromium.orgCAST_ACCESSOR(FixedDoubleArray) 30165c88bc39690cc94affe78cf5777eb8180c4af8a4machenbach@chromium.orgCAST_ACCESSOR(FixedTypedArrayBase) 3017a2e1a40f85577979749d4c0d6de30e992d996659mstarzinger@chromium.orgCAST_ACCESSOR(ConstantPoolArray) 301843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenCAST_ACCESSOR(DescriptorArray) 3019a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.orgCAST_ACCESSOR(DeoptimizationInputData) 3020a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.orgCAST_ACCESSOR(DeoptimizationOutputData) 30212e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.orgCAST_ACCESSOR(DependentCode) 30224a9f6553038df6b893b3d3ccae351723f4cbbae7yangguo@chromium.orgCAST_ACCESSOR(StringTable) 3023ac091b7d178f1853ede4a5cba58e767e6adf7d96ager@chromium.orgCAST_ACCESSOR(JSFunctionResultCache) 302465fae84840520e9ce49a78bf542abf073b49ac3fricow@chromium.orgCAST_ACCESSOR(NormalizedMapCache) 3025c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.orgCAST_ACCESSOR(ScopeInfo) 3026b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.orgCAST_ACCESSOR(CompilationCacheTable) 3027ce5e87bd905d592a8bd612b3dedf7a994177c13aager@chromium.orgCAST_ACCESSOR(CodeCacheHashTable) 3028e297f5973a8a9ff0d9945da3f1e2d8a6230c294djkummerow@chromium.orgCAST_ACCESSOR(PolymorphicCodeCacheHashTable) 3029236ad9617a7359a463144a6ebeb5431a70f769cfager@chromium.orgCAST_ACCESSOR(MapCache) 303043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenCAST_ACCESSOR(String) 303143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenCAST_ACCESSOR(SeqString) 3032fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.orgCAST_ACCESSOR(SeqOneByteString) 30337c537e2abe09729ed6cb827b4dd206470d8c4a42ager@chromium.orgCAST_ACCESSOR(SeqTwoByteString) 30344668a2c7a746d01b382f23aa32e163701e3075f8ricow@chromium.orgCAST_ACCESSOR(SlicedString) 303543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenCAST_ACCESSOR(ConsString) 303643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenCAST_ACCESSOR(ExternalString) 303743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenCAST_ACCESSOR(ExternalAsciiString) 303843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenCAST_ACCESSOR(ExternalTwoByteString) 30394a9f6553038df6b893b3d3ccae351723f4cbbae7yangguo@chromium.orgCAST_ACCESSOR(Symbol) 3040750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.orgCAST_ACCESSOR(Name) 3041d2be901879306d8ff27e78e37783028d581d46fcricow@chromium.orgCAST_ACCESSOR(JSReceiver) 304243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenCAST_ACCESSOR(JSObject) 304343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenCAST_ACCESSOR(Smi) 304443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenCAST_ACCESSOR(HeapObject) 304543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenCAST_ACCESSOR(HeapNumber) 304643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenCAST_ACCESSOR(Oddball) 304741728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.orgCAST_ACCESSOR(Cell) 3048b752d4061aaeb7d6a6ec368607871789d54b0207dslomov@chromium.orgCAST_ACCESSOR(PropertyCell) 304943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenCAST_ACCESSOR(SharedFunctionInfo) 305043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenCAST_ACCESSOR(Map) 305143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenCAST_ACCESSOR(JSFunction) 30525a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.orgCAST_ACCESSOR(GlobalObject) 30535a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.orgCAST_ACCESSOR(JSGlobalProxy) 305443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenCAST_ACCESSOR(JSGlobalObject) 305543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenCAST_ACCESSOR(JSBuiltinsObject) 305643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenCAST_ACCESSOR(Code) 305743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenCAST_ACCESSOR(JSArray) 3058f705b5034dc5bc422ac1019b591469a7d0534772mstarzinger@chromium.orgCAST_ACCESSOR(JSArrayBuffer) 30591510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgCAST_ACCESSOR(JSArrayBufferView) 3060e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.orgCAST_ACCESSOR(JSTypedArray) 30611510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgCAST_ACCESSOR(JSDataView) 3062236ad9617a7359a463144a6ebeb5431a70f769cfager@chromium.orgCAST_ACCESSOR(JSRegExp) 30637304bcac06a6a63b9f3dcebac2eeceada87ca146vegorov@chromium.orgCAST_ACCESSOR(JSProxy) 3064d2be901879306d8ff27e78e37783028d581d46fcricow@chromium.orgCAST_ACCESSOR(JSFunctionProxy) 3065394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.comCAST_ACCESSOR(JSSet) 3066394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.comCAST_ACCESSOR(JSMap) 30674ef23eea527ce7f45bdc5edd52bd4d1a989e2359machenbach@chromium.orgCAST_ACCESSOR(JSSetIterator) 30684ef23eea527ce7f45bdc5edd52bd4d1a989e2359machenbach@chromium.orgCAST_ACCESSOR(JSMapIterator) 30697c2628c3f0353f0558760c3ca442f934263ea766kmillikin@chromium.orgCAST_ACCESSOR(JSWeakMap) 3070ba72ec861b69b67139c93fc6dd56f4a73c9b3135jkummerow@chromium.orgCAST_ACCESSOR(JSWeakSet) 3071ea91cc579ade536e3a08498a8157921dd4f533d1ager@chromium.orgCAST_ACCESSOR(Foreign) 307243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenCAST_ACCESSOR(ByteArray) 3073c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.comCAST_ACCESSOR(FreeSpace) 30743811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.orgCAST_ACCESSOR(ExternalArray) 3075af4fba3c6d2a18866505de3e6798757dd1448c6dmachenbach@chromium.orgCAST_ACCESSOR(ExternalInt8Array) 3076af4fba3c6d2a18866505de3e6798757dd1448c6dmachenbach@chromium.orgCAST_ACCESSOR(ExternalUint8Array) 3077af4fba3c6d2a18866505de3e6798757dd1448c6dmachenbach@chromium.orgCAST_ACCESSOR(ExternalInt16Array) 3078af4fba3c6d2a18866505de3e6798757dd1448c6dmachenbach@chromium.orgCAST_ACCESSOR(ExternalUint16Array) 3079af4fba3c6d2a18866505de3e6798757dd1448c6dmachenbach@chromium.orgCAST_ACCESSOR(ExternalInt32Array) 3080af4fba3c6d2a18866505de3e6798757dd1448c6dmachenbach@chromium.orgCAST_ACCESSOR(ExternalUint32Array) 3081af4fba3c6d2a18866505de3e6798757dd1448c6dmachenbach@chromium.orgCAST_ACCESSOR(ExternalFloat32Array) 3082af4fba3c6d2a18866505de3e6798757dd1448c6dmachenbach@chromium.orgCAST_ACCESSOR(ExternalFloat64Array) 3083af4fba3c6d2a18866505de3e6798757dd1448c6dmachenbach@chromium.orgCAST_ACCESSOR(ExternalUint8ClampedArray) 308443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenCAST_ACCESSOR(Struct) 30857c3372bc426136cb79479c1b59d1770f5528882ahpayer@chromium.orgCAST_ACCESSOR(AccessorInfo) 308643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 30875c88bc39690cc94affe78cf5777eb8180c4af8a4machenbach@chromium.orgtemplate <class Traits> 30885c88bc39690cc94affe78cf5777eb8180c4af8a4machenbach@chromium.orgFixedTypedArray<Traits>* FixedTypedArray<Traits>::cast(Object* object) { 30895c88bc39690cc94affe78cf5777eb8180c4af8a4machenbach@chromium.org SLOW_ASSERT(object->IsHeapObject() && 30905c88bc39690cc94affe78cf5777eb8180c4af8a4machenbach@chromium.org HeapObject::cast(object)->map()->instance_type() == 30915c88bc39690cc94affe78cf5777eb8180c4af8a4machenbach@chromium.org Traits::kInstanceType); 30925c88bc39690cc94affe78cf5777eb8180c4af8a4machenbach@chromium.org return reinterpret_cast<FixedTypedArray<Traits>*>(object); 30935c88bc39690cc94affe78cf5777eb8180c4af8a4machenbach@chromium.org} 30945c88bc39690cc94affe78cf5777eb8180c4af8a4machenbach@chromium.org 309543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 309643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen#define MAKE_STRUCT_CAST(NAME, Name, name) CAST_ACCESSOR(Name) 309743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen STRUCT_LIST(MAKE_STRUCT_CAST) 309843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen#undef MAKE_STRUCT_CAST 309943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 310086f77b7fe492ed2bdfbf4e1147dab2f09c7d7003kasperl@chromium.org 3101c2e08d7d6b03e672e13fc3bf274a292009decce6machenbach@chromium.orgtemplate <typename Derived, typename Shape, typename Key> 3102c2e08d7d6b03e672e13fc3bf274a292009decce6machenbach@chromium.orgHashTable<Derived, Shape, Key>* 3103c2e08d7d6b03e672e13fc3bf274a292009decce6machenbach@chromium.orgHashTable<Derived, Shape, Key>::cast(Object* obj) { 310443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen ASSERT(obj->IsHashTable()); 310543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return reinterpret_cast<HashTable*>(obj); 310643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 310743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 310843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 31096d786c9805481bd13ecb29c3155540f2f32950e1svenpanne@chromium.orgSMI_ACCESSORS(FixedArrayBase, length, kLengthOffset) 311063a7c9f848e755c52a37721debae242cf5d1682dmachenbach@chromium.orgSYNCHRONIZED_SMI_ACCESSORS(FixedArrayBase, length, kLengthOffset) 311163a7c9f848e755c52a37721debae242cf5d1682dmachenbach@chromium.org 3112c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.comSMI_ACCESSORS(FreeSpace, size, kSizeOffset) 31139e41f9ecf5042292a9efcb36e264b37621199553machenbach@chromium.orgNOBARRIER_SMI_ACCESSORS(FreeSpace, size, kSizeOffset) 311443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 3115ac091b7d178f1853ede4a5cba58e767e6adf7d96ager@chromium.orgSMI_ACCESSORS(String, length, kLengthOffset) 311663a7c9f848e755c52a37721debae242cf5d1682dmachenbach@chromium.orgSYNCHRONIZED_SMI_ACCESSORS(String, length, kLengthOffset) 311743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 31189fe21c6d4c657d15af27c8751257d3e2bf113e45kasperl@chromium.org 31194a9f6553038df6b893b3d3ccae351723f4cbbae7yangguo@chromium.orguint32_t Name::hash_field() { 3120ac6aa175ab59d65cfb7a88dbb621e1d7f1a80b8fsgjesse@chromium.org return READ_UINT32_FIELD(this, kHashFieldOffset); 312143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 312243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 312343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 31244a9f6553038df6b893b3d3ccae351723f4cbbae7yangguo@chromium.orgvoid Name::set_hash_field(uint32_t value) { 3125ac6aa175ab59d65cfb7a88dbb621e1d7f1a80b8fsgjesse@chromium.org WRITE_UINT32_FIELD(this, kHashFieldOffset, value); 312630ce411529579186181838984710b0b0980857aaricow@chromium.org#if V8_HOST_ARCH_64_BIT 312730ce411529579186181838984710b0b0980857aaricow@chromium.org WRITE_UINT32_FIELD(this, kHashFieldOffset + kIntSize, 0); 312830ce411529579186181838984710b0b0980857aaricow@chromium.org#endif 312943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 313043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 313143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 3132750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.orgbool Name::Equals(Name* other) { 3133750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org if (other == this) return true; 3134e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org if ((this->IsInternalizedString() && other->IsInternalizedString()) || 3135e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org this->IsSymbol() || other->IsSymbol()) { 3136f705b5034dc5bc422ac1019b591469a7d0534772mstarzinger@chromium.org return false; 3137f705b5034dc5bc422ac1019b591469a7d0534772mstarzinger@chromium.org } 3138750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org return String::cast(this)->SlowEquals(String::cast(other)); 3139750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org} 3140750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org 3141750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org 31422ebef182c49d59eba907b120c3c2a50808bd1f12machenbach@chromium.orgbool Name::Equals(Handle<Name> one, Handle<Name> two) { 31432ebef182c49d59eba907b120c3c2a50808bd1f12machenbach@chromium.org if (one.is_identical_to(two)) return true; 31442ebef182c49d59eba907b120c3c2a50808bd1f12machenbach@chromium.org if ((one->IsInternalizedString() && two->IsInternalizedString()) || 31452ebef182c49d59eba907b120c3c2a50808bd1f12machenbach@chromium.org one->IsSymbol() || two->IsSymbol()) { 31462ebef182c49d59eba907b120c3c2a50808bd1f12machenbach@chromium.org return false; 31472ebef182c49d59eba907b120c3c2a50808bd1f12machenbach@chromium.org } 31482ebef182c49d59eba907b120c3c2a50808bd1f12machenbach@chromium.org return String::SlowEquals(Handle<String>::cast(one), 31492ebef182c49d59eba907b120c3c2a50808bd1f12machenbach@chromium.org Handle<String>::cast(two)); 31502ebef182c49d59eba907b120c3c2a50808bd1f12machenbach@chromium.org} 31512ebef182c49d59eba907b120c3c2a50808bd1f12machenbach@chromium.org 31522ebef182c49d59eba907b120c3c2a50808bd1f12machenbach@chromium.org 3153f705b5034dc5bc422ac1019b591469a7d0534772mstarzinger@chromium.orgACCESSORS(Symbol, name, Object, kNameOffset) 31540cc095007a3ccded63f6577751c6a04300eb7ae9machenbach@chromium.orgACCESSORS(Symbol, flags, Smi, kFlagsOffset) 31550cc095007a3ccded63f6577751c6a04300eb7ae9machenbach@chromium.orgBOOL_ACCESSORS(Symbol, flags, is_private, kPrivateBit) 3156f705b5034dc5bc422ac1019b591469a7d0534772mstarzinger@chromium.org 3157f705b5034dc5bc422ac1019b591469a7d0534772mstarzinger@chromium.org 3158ac6aa175ab59d65cfb7a88dbb621e1d7f1a80b8fsgjesse@chromium.orgbool String::Equals(String* other) { 3159ac6aa175ab59d65cfb7a88dbb621e1d7f1a80b8fsgjesse@chromium.org if (other == this) return true; 3160750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org if (this->IsInternalizedString() && other->IsInternalizedString()) { 3161ac6aa175ab59d65cfb7a88dbb621e1d7f1a80b8fsgjesse@chromium.org return false; 3162ac6aa175ab59d65cfb7a88dbb621e1d7f1a80b8fsgjesse@chromium.org } 3163ac6aa175ab59d65cfb7a88dbb621e1d7f1a80b8fsgjesse@chromium.org return SlowEquals(other); 316443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 316543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 316643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 31672ebef182c49d59eba907b120c3c2a50808bd1f12machenbach@chromium.orgbool String::Equals(Handle<String> one, Handle<String> two) { 31682ebef182c49d59eba907b120c3c2a50808bd1f12machenbach@chromium.org if (one.is_identical_to(two)) return true; 31692ebef182c49d59eba907b120c3c2a50808bd1f12machenbach@chromium.org if (one->IsInternalizedString() && two->IsInternalizedString()) { 31702ebef182c49d59eba907b120c3c2a50808bd1f12machenbach@chromium.org return false; 31712ebef182c49d59eba907b120c3c2a50808bd1f12machenbach@chromium.org } 31722ebef182c49d59eba907b120c3c2a50808bd1f12machenbach@chromium.org return SlowEquals(one, two); 31732ebef182c49d59eba907b120c3c2a50808bd1f12machenbach@chromium.org} 31742ebef182c49d59eba907b120c3c2a50808bd1f12machenbach@chromium.org 31752ebef182c49d59eba907b120c3c2a50808bd1f12machenbach@chromium.org 31769e41f9ecf5042292a9efcb36e264b37621199553machenbach@chromium.orgHandle<String> String::Flatten(Handle<String> string, PretenureFlag pretenure) { 31779e41f9ecf5042292a9efcb36e264b37621199553machenbach@chromium.org if (!string->IsConsString()) return string; 31789e41f9ecf5042292a9efcb36e264b37621199553machenbach@chromium.org Handle<ConsString> cons = Handle<ConsString>::cast(string); 31799e41f9ecf5042292a9efcb36e264b37621199553machenbach@chromium.org if (cons->IsFlat()) return handle(cons->first()); 31809e41f9ecf5042292a9efcb36e264b37621199553machenbach@chromium.org return SlowFlatten(cons, pretenure); 31819e41f9ecf5042292a9efcb36e264b37621199553machenbach@chromium.org} 31829e41f9ecf5042292a9efcb36e264b37621199553machenbach@chromium.org 31839e41f9ecf5042292a9efcb36e264b37621199553machenbach@chromium.org 3184bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.orguint16_t String::Get(int index) { 3185bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org ASSERT(index >= 0 && index < length()); 3186bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org switch (StringShape(this).full_representation_tag()) { 3187e4ac3ef2f6fa9300bc78c5a4cb7d4cb66ac6e83dmvstanton@chromium.org case kSeqStringTag | kOneByteStringTag: 3188fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org return SeqOneByteString::cast(this)->SeqOneByteStringGet(index); 3189870a0b67c822d289024711912e2512af01b66c3bager@chromium.org case kSeqStringTag | kTwoByteStringTag: 3190870a0b67c822d289024711912e2512af01b66c3bager@chromium.org return SeqTwoByteString::cast(this)->SeqTwoByteStringGet(index); 3191e4ac3ef2f6fa9300bc78c5a4cb7d4cb66ac6e83dmvstanton@chromium.org case kConsStringTag | kOneByteStringTag: 3192870a0b67c822d289024711912e2512af01b66c3bager@chromium.org case kConsStringTag | kTwoByteStringTag: 319343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return ConsString::cast(this)->ConsStringGet(index); 3194e4ac3ef2f6fa9300bc78c5a4cb7d4cb66ac6e83dmvstanton@chromium.org case kExternalStringTag | kOneByteStringTag: 3195870a0b67c822d289024711912e2512af01b66c3bager@chromium.org return ExternalAsciiString::cast(this)->ExternalAsciiStringGet(index); 3196870a0b67c822d289024711912e2512af01b66c3bager@chromium.org case kExternalStringTag | kTwoByteStringTag: 3197870a0b67c822d289024711912e2512af01b66c3bager@chromium.org return ExternalTwoByteString::cast(this)->ExternalTwoByteStringGet(index); 3198e4ac3ef2f6fa9300bc78c5a4cb7d4cb66ac6e83dmvstanton@chromium.org case kSlicedStringTag | kOneByteStringTag: 31994668a2c7a746d01b382f23aa32e163701e3075f8ricow@chromium.org case kSlicedStringTag | kTwoByteStringTag: 32004668a2c7a746d01b382f23aa32e163701e3075f8ricow@chromium.org return SlicedString::cast(this)->SlicedStringGet(index); 320143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen default: 320243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen break; 320343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 320443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 320543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen UNREACHABLE(); 320643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return 0; 320743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 320843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 320943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 3210bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.orgvoid String::Set(int index, uint16_t value) { 3211bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org ASSERT(index >= 0 && index < length()); 3212bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org ASSERT(StringShape(this).IsSequential()); 321343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 32148e8d8825f97138de12985f8e0d3163074dff5258ulan@chromium.org return this->IsOneByteRepresentation() 3215fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org ? SeqOneByteString::cast(this)->SeqOneByteStringSet(index, value) 32167c537e2abe09729ed6cb827b4dd206470d8c4a42ager@chromium.org : SeqTwoByteString::cast(this)->SeqTwoByteStringSet(index, value); 321743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 321843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 321943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 3220bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.orgbool String::IsFlat() { 32214668a2c7a746d01b382f23aa32e163701e3075f8ricow@chromium.org if (!StringShape(this).IsCons()) return true; 32224668a2c7a746d01b382f23aa32e163701e3075f8ricow@chromium.org return ConsString::cast(this)->second()->length() == 0; 32234668a2c7a746d01b382f23aa32e163701e3075f8ricow@chromium.org} 32244668a2c7a746d01b382f23aa32e163701e3075f8ricow@chromium.org 32254668a2c7a746d01b382f23aa32e163701e3075f8ricow@chromium.org 32264668a2c7a746d01b382f23aa32e163701e3075f8ricow@chromium.orgString* String::GetUnderlying() { 32274668a2c7a746d01b382f23aa32e163701e3075f8ricow@chromium.org // Giving direct access to underlying string only makes sense if the 32284668a2c7a746d01b382f23aa32e163701e3075f8ricow@chromium.org // wrapping string is already flattened. 32294668a2c7a746d01b382f23aa32e163701e3075f8ricow@chromium.org ASSERT(this->IsFlat()); 32304668a2c7a746d01b382f23aa32e163701e3075f8ricow@chromium.org ASSERT(StringShape(this).IsIndirect()); 32314668a2c7a746d01b382f23aa32e163701e3075f8ricow@chromium.org STATIC_ASSERT(ConsString::kFirstOffset == SlicedString::kParentOffset); 32324668a2c7a746d01b382f23aa32e163701e3075f8ricow@chromium.org const int kUnderlyingOffset = SlicedString::kParentOffset; 32334668a2c7a746d01b382f23aa32e163701e3075f8ricow@chromium.org return String::cast(READ_FIELD(this, kUnderlyingOffset)); 323443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 323543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 323643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 32373484964a86451e86dcf04be9bd8c0d76ee04f081rossberg@chromium.orgtemplate<class Visitor> 32383484964a86451e86dcf04be9bd8c0d76ee04f081rossberg@chromium.orgConsString* String::VisitFlat(Visitor* visitor, 32393484964a86451e86dcf04be9bd8c0d76ee04f081rossberg@chromium.org String* string, 32403484964a86451e86dcf04be9bd8c0d76ee04f081rossberg@chromium.org const int offset) { 32413484964a86451e86dcf04be9bd8c0d76ee04f081rossberg@chromium.org int slice_offset = offset; 32423484964a86451e86dcf04be9bd8c0d76ee04f081rossberg@chromium.org const int length = string->length(); 324332280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org ASSERT(offset <= length); 324432280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org while (true) { 32453484964a86451e86dcf04be9bd8c0d76ee04f081rossberg@chromium.org int32_t type = string->map()->instance_type(); 324632280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org switch (type & (kStringRepresentationMask | kStringEncodingMask)) { 324732280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org case kSeqStringTag | kOneByteStringTag: 32483484964a86451e86dcf04be9bd8c0d76ee04f081rossberg@chromium.org visitor->VisitOneByteString( 324959297c735ad2a41156ae9c723a39ff259ad061e0jkummerow@chromium.org SeqOneByteString::cast(string)->GetChars() + slice_offset, 325059297c735ad2a41156ae9c723a39ff259ad061e0jkummerow@chromium.org length - offset); 32513484964a86451e86dcf04be9bd8c0d76ee04f081rossberg@chromium.org return NULL; 325232280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org 325332280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org case kSeqStringTag | kTwoByteStringTag: 32543484964a86451e86dcf04be9bd8c0d76ee04f081rossberg@chromium.org visitor->VisitTwoByteString( 325559297c735ad2a41156ae9c723a39ff259ad061e0jkummerow@chromium.org SeqTwoByteString::cast(string)->GetChars() + slice_offset, 325659297c735ad2a41156ae9c723a39ff259ad061e0jkummerow@chromium.org length - offset); 32573484964a86451e86dcf04be9bd8c0d76ee04f081rossberg@chromium.org return NULL; 325832280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org 325932280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org case kExternalStringTag | kOneByteStringTag: 32603484964a86451e86dcf04be9bd8c0d76ee04f081rossberg@chromium.org visitor->VisitOneByteString( 326159297c735ad2a41156ae9c723a39ff259ad061e0jkummerow@chromium.org ExternalAsciiString::cast(string)->GetChars() + slice_offset, 326259297c735ad2a41156ae9c723a39ff259ad061e0jkummerow@chromium.org length - offset); 32633484964a86451e86dcf04be9bd8c0d76ee04f081rossberg@chromium.org return NULL; 326432280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org 326532280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org case kExternalStringTag | kTwoByteStringTag: 32663484964a86451e86dcf04be9bd8c0d76ee04f081rossberg@chromium.org visitor->VisitTwoByteString( 326759297c735ad2a41156ae9c723a39ff259ad061e0jkummerow@chromium.org ExternalTwoByteString::cast(string)->GetChars() + slice_offset, 326859297c735ad2a41156ae9c723a39ff259ad061e0jkummerow@chromium.org length - offset); 32693484964a86451e86dcf04be9bd8c0d76ee04f081rossberg@chromium.org return NULL; 327032280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org 327132280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org case kSlicedStringTag | kOneByteStringTag: 327232280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org case kSlicedStringTag | kTwoByteStringTag: { 327332280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org SlicedString* slicedString = SlicedString::cast(string); 3274a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.org slice_offset += slicedString->offset(); 327532280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org string = slicedString->parent(); 327632280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org continue; 327732280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org } 327832280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org 327932280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org case kConsStringTag | kOneByteStringTag: 328032280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org case kConsStringTag | kTwoByteStringTag: 32813484964a86451e86dcf04be9bd8c0d76ee04f081rossberg@chromium.org return ConsString::cast(string); 328232280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org 328332280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org default: 328432280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org UNREACHABLE(); 32853484964a86451e86dcf04be9bd8c0d76ee04f081rossberg@chromium.org return NULL; 328632280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org } 328732280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org } 328832280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org} 328932280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org 329032280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org 3291fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.orguint16_t SeqOneByteString::SeqOneByteStringGet(int index) { 329243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen ASSERT(index >= 0 && index < length()); 329343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return READ_BYTE_FIELD(this, kHeaderSize + index * kCharSize); 329443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 329543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 329643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 3297fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.orgvoid SeqOneByteString::SeqOneByteStringSet(int index, uint16_t value) { 329859297c735ad2a41156ae9c723a39ff259ad061e0jkummerow@chromium.org ASSERT(index >= 0 && index < length() && value <= kMaxOneByteCharCode); 329943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen WRITE_BYTE_FIELD(this, kHeaderSize + index * kCharSize, 330043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen static_cast<byte>(value)); 330143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 330243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 330343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 3304fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.orgAddress SeqOneByteString::GetCharsAddress() { 330543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return FIELD_ADDR(this, kHeaderSize); 330643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 330743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 330843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 330959297c735ad2a41156ae9c723a39ff259ad061e0jkummerow@chromium.orguint8_t* SeqOneByteString::GetChars() { 331059297c735ad2a41156ae9c723a39ff259ad061e0jkummerow@chromium.org return reinterpret_cast<uint8_t*>(GetCharsAddress()); 33115a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org} 33125a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org 33135a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org 33147c537e2abe09729ed6cb827b4dd206470d8c4a42ager@chromium.orgAddress SeqTwoByteString::GetCharsAddress() { 33157c537e2abe09729ed6cb827b4dd206470d8c4a42ager@chromium.org return FIELD_ADDR(this, kHeaderSize); 33167c537e2abe09729ed6cb827b4dd206470d8c4a42ager@chromium.org} 33177c537e2abe09729ed6cb827b4dd206470d8c4a42ager@chromium.org 33187c537e2abe09729ed6cb827b4dd206470d8c4a42ager@chromium.org 33195a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.orguc16* SeqTwoByteString::GetChars() { 33205a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org return reinterpret_cast<uc16*>(FIELD_ADDR(this, kHeaderSize)); 33215a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org} 33225a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org 33235a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org 33247c537e2abe09729ed6cb827b4dd206470d8c4a42ager@chromium.orguint16_t SeqTwoByteString::SeqTwoByteStringGet(int index) { 332543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen ASSERT(index >= 0 && index < length()); 332643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return READ_SHORT_FIELD(this, kHeaderSize + index * kShortSize); 332743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 332843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 332943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 33307c537e2abe09729ed6cb827b4dd206470d8c4a42ager@chromium.orgvoid SeqTwoByteString::SeqTwoByteStringSet(int index, uint16_t value) { 333143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen ASSERT(index >= 0 && index < length()); 333243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen WRITE_SHORT_FIELD(this, kHeaderSize + index * kShortSize, value); 333343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 333443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 333543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 3336bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.orgint SeqTwoByteString::SeqTwoByteStringSize(InstanceType instance_type) { 3337ac091b7d178f1853ede4a5cba58e767e6adf7d96ager@chromium.org return SizeFor(length()); 333843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 333943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 334043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 3341fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.orgint SeqOneByteString::SeqOneByteStringSize(InstanceType instance_type) { 3342ac091b7d178f1853ede4a5cba58e767e6adf7d96ager@chromium.org return SizeFor(length()); 334343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 334443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 334543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 33464668a2c7a746d01b382f23aa32e163701e3075f8ricow@chromium.orgString* SlicedString::parent() { 33474668a2c7a746d01b382f23aa32e163701e3075f8ricow@chromium.org return String::cast(READ_FIELD(this, kParentOffset)); 33484668a2c7a746d01b382f23aa32e163701e3075f8ricow@chromium.org} 33494668a2c7a746d01b382f23aa32e163701e3075f8ricow@chromium.org 33504668a2c7a746d01b382f23aa32e163701e3075f8ricow@chromium.org 3351304cc33f8259ef467e8e3c79f448d0bae0e8cd85yangguo@chromium.orgvoid SlicedString::set_parent(String* parent, WriteBarrierMode mode) { 3352c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com ASSERT(parent->IsSeqString() || parent->IsExternalString()); 33534668a2c7a746d01b382f23aa32e163701e3075f8ricow@chromium.org WRITE_FIELD(this, kParentOffset, parent); 3354304cc33f8259ef467e8e3c79f448d0bae0e8cd85yangguo@chromium.org CONDITIONAL_WRITE_BARRIER(GetHeap(), this, kParentOffset, parent, mode); 33554668a2c7a746d01b382f23aa32e163701e3075f8ricow@chromium.org} 33564668a2c7a746d01b382f23aa32e163701e3075f8ricow@chromium.org 33574668a2c7a746d01b382f23aa32e163701e3075f8ricow@chromium.org 33584668a2c7a746d01b382f23aa32e163701e3075f8ricow@chromium.orgSMI_ACCESSORS(SlicedString, offset, kOffsetOffset) 33594668a2c7a746d01b382f23aa32e163701e3075f8ricow@chromium.org 33604668a2c7a746d01b382f23aa32e163701e3075f8ricow@chromium.org 3361870a0b67c822d289024711912e2512af01b66c3bager@chromium.orgString* ConsString::first() { 3362870a0b67c822d289024711912e2512af01b66c3bager@chromium.org return String::cast(READ_FIELD(this, kFirstOffset)); 3363870a0b67c822d289024711912e2512af01b66c3bager@chromium.org} 3364870a0b67c822d289024711912e2512af01b66c3bager@chromium.org 3365870a0b67c822d289024711912e2512af01b66c3bager@chromium.org 3366870a0b67c822d289024711912e2512af01b66c3bager@chromium.orgObject* ConsString::unchecked_first() { 336743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return READ_FIELD(this, kFirstOffset); 336843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 336943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 337043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 3371870a0b67c822d289024711912e2512af01b66c3bager@chromium.orgvoid ConsString::set_first(String* value, WriteBarrierMode mode) { 337243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen WRITE_FIELD(this, kFirstOffset, value); 3373c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com CONDITIONAL_WRITE_BARRIER(GetHeap(), this, kFirstOffset, value, mode); 337443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 337543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 337643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 3377870a0b67c822d289024711912e2512af01b66c3bager@chromium.orgString* ConsString::second() { 3378870a0b67c822d289024711912e2512af01b66c3bager@chromium.org return String::cast(READ_FIELD(this, kSecondOffset)); 3379870a0b67c822d289024711912e2512af01b66c3bager@chromium.org} 3380870a0b67c822d289024711912e2512af01b66c3bager@chromium.org 3381870a0b67c822d289024711912e2512af01b66c3bager@chromium.org 3382870a0b67c822d289024711912e2512af01b66c3bager@chromium.orgObject* ConsString::unchecked_second() { 338343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return READ_FIELD(this, kSecondOffset); 338443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 338543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 338643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 3387870a0b67c822d289024711912e2512af01b66c3bager@chromium.orgvoid ConsString::set_second(String* value, WriteBarrierMode mode) { 338843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen WRITE_FIELD(this, kSecondOffset, value); 3389c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com CONDITIONAL_WRITE_BARRIER(GetHeap(), this, kSecondOffset, value, mode); 339043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 339143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 339243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 33931b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.orgbool ExternalString::is_short() { 33941b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org InstanceType type = map()->instance_type(); 33951b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org return (type & kShortExternalStringMask) == kShortExternalStringTag; 33960ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry} 33970ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry 33980ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry 3399c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.comconst ExternalAsciiString::Resource* ExternalAsciiString::resource() { 340043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return *reinterpret_cast<Resource**>(FIELD_ADDR(this, kResourceOffset)); 340143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 340243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 340343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 34041b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.orgvoid ExternalAsciiString::update_data_cache() { 34051b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org if (is_short()) return; 34061b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org const char** data_field = 34071b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org reinterpret_cast<const char**>(FIELD_ADDR(this, kResourceDataOffset)); 34081b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org *data_field = resource()->data(); 34091b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org} 34101b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org 34111b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org 341243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid ExternalAsciiString::set_resource( 3413c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com const ExternalAsciiString::Resource* resource) { 34148297530cd2b71ba1a2fe6f27ba1c030a20468306machenbach@chromium.org ASSERT(IsAligned(reinterpret_cast<intptr_t>(resource), kPointerSize)); 3415c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com *reinterpret_cast<const Resource**>( 3416c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com FIELD_ADDR(this, kResourceOffset)) = resource; 34171b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org if (resource != NULL) update_data_cache(); 34180ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry} 34190ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry 34200ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry 342159297c735ad2a41156ae9c723a39ff259ad061e0jkummerow@chromium.orgconst uint8_t* ExternalAsciiString::GetChars() { 342259297c735ad2a41156ae9c723a39ff259ad061e0jkummerow@chromium.org return reinterpret_cast<const uint8_t*>(resource()->data()); 34230ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry} 34240ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry 34250ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry 34260ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorryuint16_t ExternalAsciiString::ExternalAsciiStringGet(int index) { 34270ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry ASSERT(index >= 0 && index < length()); 34280ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry return GetChars()[index]; 342943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 343043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 343143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 3432c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.comconst ExternalTwoByteString::Resource* ExternalTwoByteString::resource() { 343343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return *reinterpret_cast<Resource**>(FIELD_ADDR(this, kResourceOffset)); 343443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 343543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 343643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 34371b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.orgvoid ExternalTwoByteString::update_data_cache() { 34381b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org if (is_short()) return; 34391b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org const uint16_t** data_field = 34401b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org reinterpret_cast<const uint16_t**>(FIELD_ADDR(this, kResourceDataOffset)); 34411b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org *data_field = resource()->data(); 34421b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org} 34431b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org 34441b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org 344543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid ExternalTwoByteString::set_resource( 3446c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com const ExternalTwoByteString::Resource* resource) { 3447c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com *reinterpret_cast<const Resource**>( 3448c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com FIELD_ADDR(this, kResourceOffset)) = resource; 34491b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org if (resource != NULL) update_data_cache(); 34500ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry} 34510ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry 34520ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry 34530ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorryconst uint16_t* ExternalTwoByteString::GetChars() { 34541b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org return resource()->data(); 34550ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry} 34560ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry 34570ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry 34580ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorryuint16_t ExternalTwoByteString::ExternalTwoByteStringGet(int index) { 34590ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry ASSERT(index >= 0 && index < length()); 34600ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry return GetChars()[index]; 34610ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry} 34620ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry 34630ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry 34640ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorryconst uint16_t* ExternalTwoByteString::ExternalTwoByteStringGetData( 34650ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry unsigned start) { 34660ad885c06ff6a0d68bc9ad75629f7ddfaa6860b9erikcorry return GetChars() + start; 346743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 346843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 346943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 34703484964a86451e86dcf04be9bd8c0d76ee04f081rossberg@chromium.orgint ConsStringIteratorOp::OffsetForDepth(int depth) { 3471a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.org return depth & kDepthMask; 347232280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org} 347332280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org 347432280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org 347532280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.orgvoid ConsStringIteratorOp::PushLeft(ConsString* string) { 347632280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org frames_[depth_++ & kDepthMask] = string; 347732280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org} 347832280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org 347932280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org 3480a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.orgvoid ConsStringIteratorOp::PushRight(ConsString* string) { 3481a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.org // Inplace update. 348232280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org frames_[(depth_-1) & kDepthMask] = string; 348332280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org} 348432280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org 348532280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org 348632280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.orgvoid ConsStringIteratorOp::AdjustMaximumDepth() { 348732280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org if (depth_ > maximum_depth_) maximum_depth_ = depth_; 348832280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org} 348932280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org 349032280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org 349132280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.orgvoid ConsStringIteratorOp::Pop() { 349232280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org ASSERT(depth_ > 0); 349332280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org ASSERT(depth_ <= maximum_depth_); 349432280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org depth_--; 349532280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org} 349632280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org 349732280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org 349832280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.orguint16_t StringCharacterStream::GetNext() { 34994cd70b470729dd5850dd4120a350f01363d16837yangguo@chromium.org ASSERT(buffer8_ != NULL && end_ != NULL); 35004cd70b470729dd5850dd4120a350f01363d16837yangguo@chromium.org // Advance cursor if needed. 35014cd70b470729dd5850dd4120a350f01363d16837yangguo@chromium.org if (buffer8_ == end_) HasMore(); 35024cd70b470729dd5850dd4120a350f01363d16837yangguo@chromium.org ASSERT(buffer8_ < end_); 350332280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org return is_one_byte_ ? *buffer8_++ : *buffer16_++; 350432280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org} 350532280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org 350632280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org 35074cd70b470729dd5850dd4120a350f01363d16837yangguo@chromium.orgStringCharacterStream::StringCharacterStream(String* string, 35084cd70b470729dd5850dd4120a350f01363d16837yangguo@chromium.org ConsStringIteratorOp* op, 35093484964a86451e86dcf04be9bd8c0d76ee04f081rossberg@chromium.org int offset) 3510a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.org : is_one_byte_(false), 351132280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org op_(op) { 35124cd70b470729dd5850dd4120a350f01363d16837yangguo@chromium.org Reset(string, offset); 35134cd70b470729dd5850dd4120a350f01363d16837yangguo@chromium.org} 35144cd70b470729dd5850dd4120a350f01363d16837yangguo@chromium.org 35154cd70b470729dd5850dd4120a350f01363d16837yangguo@chromium.org 35163484964a86451e86dcf04be9bd8c0d76ee04f081rossberg@chromium.orgvoid StringCharacterStream::Reset(String* string, int offset) { 35174cd70b470729dd5850dd4120a350f01363d16837yangguo@chromium.org buffer8_ = NULL; 35184cd70b470729dd5850dd4120a350f01363d16837yangguo@chromium.org end_ = NULL; 35193484964a86451e86dcf04be9bd8c0d76ee04f081rossberg@chromium.org ConsString* cons_string = String::VisitFlat(this, string, offset); 35203484964a86451e86dcf04be9bd8c0d76ee04f081rossberg@chromium.org op_->Reset(cons_string, offset); 35213484964a86451e86dcf04be9bd8c0d76ee04f081rossberg@chromium.org if (cons_string != NULL) { 35223484964a86451e86dcf04be9bd8c0d76ee04f081rossberg@chromium.org string = op_->Next(&offset); 35233484964a86451e86dcf04be9bd8c0d76ee04f081rossberg@chromium.org if (string != NULL) String::VisitFlat(this, string, offset); 35243484964a86451e86dcf04be9bd8c0d76ee04f081rossberg@chromium.org } 352532280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org} 352632280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org 352732280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org 352832280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.orgbool StringCharacterStream::HasMore() { 352932280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org if (buffer8_ != end_) return true; 35303484964a86451e86dcf04be9bd8c0d76ee04f081rossberg@chromium.org int offset; 35313484964a86451e86dcf04be9bd8c0d76ee04f081rossberg@chromium.org String* string = op_->Next(&offset); 35323484964a86451e86dcf04be9bd8c0d76ee04f081rossberg@chromium.org ASSERT_EQ(offset, 0); 3533a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.org if (string == NULL) return false; 35343484964a86451e86dcf04be9bd8c0d76ee04f081rossberg@chromium.org String::VisitFlat(this, string); 3535a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.org ASSERT(buffer8_ != end_); 353632280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org return true; 353732280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org} 353832280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org 353932280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org 354032280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.orgvoid StringCharacterStream::VisitOneByteString( 35413484964a86451e86dcf04be9bd8c0d76ee04f081rossberg@chromium.org const uint8_t* chars, int length) { 354232280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org is_one_byte_ = true; 354332280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org buffer8_ = chars; 354432280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org end_ = chars + length; 354532280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org} 354632280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org 354732280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org 354832280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.orgvoid StringCharacterStream::VisitTwoByteString( 35493484964a86451e86dcf04be9bd8c0d76ee04f081rossberg@chromium.org const uint16_t* chars, int length) { 355032280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org is_one_byte_ = false; 355132280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org buffer16_ = chars; 355232280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org end_ = reinterpret_cast<const uint8_t*>(chars + length); 355332280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org} 355432280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org 355532280cf2786219b2d9a668f7f00778fb59ac40b3mstarzinger@chromium.org 3556ac091b7d178f1853ede4a5cba58e767e6adf7d96ager@chromium.orgvoid JSFunctionResultCache::MakeZeroSize() { 35570511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com set_finger_index(kEntriesIndex); 35580511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com set_size(kEntriesIndex); 3559ac091b7d178f1853ede4a5cba58e767e6adf7d96ager@chromium.org} 3560ac091b7d178f1853ede4a5cba58e767e6adf7d96ager@chromium.org 3561ac091b7d178f1853ede4a5cba58e767e6adf7d96ager@chromium.org 3562ac091b7d178f1853ede4a5cba58e767e6adf7d96ager@chromium.orgvoid JSFunctionResultCache::Clear() { 35630511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com int cache_size = size(); 35644954674151afa960af66efb4831df06bde727333yangguo@chromium.org Object** entries_start = RawFieldOfElementAt(kEntriesIndex); 3565e03fb64ef23331755b7986d2560bc4c00ba3e67bfschneider@chromium.org MemsetPointer(entries_start, 3566ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org GetHeap()->the_hole_value(), 3567e03fb64ef23331755b7986d2560bc4c00ba3e67bfschneider@chromium.org cache_size - kEntriesIndex); 3568ac091b7d178f1853ede4a5cba58e767e6adf7d96ager@chromium.org MakeZeroSize(); 3569ac091b7d178f1853ede4a5cba58e767e6adf7d96ager@chromium.org} 3570ac091b7d178f1853ede4a5cba58e767e6adf7d96ager@chromium.org 3571ac091b7d178f1853ede4a5cba58e767e6adf7d96ager@chromium.org 35720511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.comint JSFunctionResultCache::size() { 35730511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com return Smi::cast(get(kCacheSizeIndex))->value(); 35740511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com} 35750511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com 35760511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com 35770511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.comvoid JSFunctionResultCache::set_size(int size) { 35780511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com set(kCacheSizeIndex, Smi::FromInt(size)); 35790511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com} 35800511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com 35810511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com 35820511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.comint JSFunctionResultCache::finger_index() { 35830511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com return Smi::cast(get(kFingerIndex))->value(); 35840511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com} 35850511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com 35860511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com 35870511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.comvoid JSFunctionResultCache::set_finger_index(int finger_index) { 35880511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com set(kFingerIndex, Smi::FromInt(finger_index)); 35890511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com} 35900511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com 35910511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com 359243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenbyte ByteArray::get(int index) { 359343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen ASSERT(index >= 0 && index < this->length()); 359443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return READ_BYTE_FIELD(this, kHeaderSize + index * kCharSize); 359543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 359643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 359743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 359843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid ByteArray::set(int index, byte value) { 359943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen ASSERT(index >= 0 && index < this->length()); 360043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen WRITE_BYTE_FIELD(this, kHeaderSize + index * kCharSize, value); 360143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 360243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 360343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 360443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenint ByteArray::get_int(int index) { 360543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen ASSERT(index >= 0 && (index * kIntSize) < this->length()); 360643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return READ_INT_FIELD(this, kHeaderSize + index * kIntSize); 360743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 360843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 360943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 361043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenByteArray* ByteArray::FromDataStartAddress(Address address) { 361143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen ASSERT_TAG_ALIGNED(address); 361243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return reinterpret_cast<ByteArray*>(address - kHeaderSize + kHeapObjectTag); 361343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 361443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 361543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 361643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenAddress ByteArray::GetDataStartAddress() { 361743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return reinterpret_cast<Address>(this) - kHeapObjectTag + kHeaderSize; 361843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 361943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 362043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 3621af4fba3c6d2a18866505de3e6798757dd1448c6dmachenbach@chromium.orguint8_t* ExternalUint8ClampedArray::external_uint8_clamped_pointer() { 36224d3fe4e246b0312eba361689f288ddf8dd516960danno@chromium.org return reinterpret_cast<uint8_t*>(external_pointer()); 36230b6db5975a9d1ebcf3de7b18603380d99f789e66sgjesse@chromium.org} 36240b6db5975a9d1ebcf3de7b18603380d99f789e66sgjesse@chromium.org 36250b6db5975a9d1ebcf3de7b18603380d99f789e66sgjesse@chromium.org 3626af4fba3c6d2a18866505de3e6798757dd1448c6dmachenbach@chromium.orguint8_t ExternalUint8ClampedArray::get_scalar(int index) { 36270b6db5975a9d1ebcf3de7b18603380d99f789e66sgjesse@chromium.org ASSERT((index >= 0) && (index < this->length())); 3628af4fba3c6d2a18866505de3e6798757dd1448c6dmachenbach@chromium.org uint8_t* ptr = external_uint8_clamped_pointer(); 36290b6db5975a9d1ebcf3de7b18603380d99f789e66sgjesse@chromium.org return ptr[index]; 36300b6db5975a9d1ebcf3de7b18603380d99f789e66sgjesse@chromium.org} 36310b6db5975a9d1ebcf3de7b18603380d99f789e66sgjesse@chromium.org 36320b6db5975a9d1ebcf3de7b18603380d99f789e66sgjesse@chromium.org 36339e41f9ecf5042292a9efcb36e264b37621199553machenbach@chromium.orgHandle<Object> ExternalUint8ClampedArray::get( 36349e41f9ecf5042292a9efcb36e264b37621199553machenbach@chromium.org Handle<ExternalUint8ClampedArray> array, 36359e41f9ecf5042292a9efcb36e264b37621199553machenbach@chromium.org int index) { 3636731474e847a8ccd6e27f74842506c9c807dae658jarin@chromium.org return Handle<Smi>(Smi::FromInt(array->get_scalar(index)), 3637731474e847a8ccd6e27f74842506c9c807dae658jarin@chromium.org array->GetIsolate()); 36389e41f9ecf5042292a9efcb36e264b37621199553machenbach@chromium.org} 36399e41f9ecf5042292a9efcb36e264b37621199553machenbach@chromium.org 36409e41f9ecf5042292a9efcb36e264b37621199553machenbach@chromium.org 3641af4fba3c6d2a18866505de3e6798757dd1448c6dmachenbach@chromium.orgvoid ExternalUint8ClampedArray::set(int index, uint8_t value) { 36420b6db5975a9d1ebcf3de7b18603380d99f789e66sgjesse@chromium.org ASSERT((index >= 0) && (index < this->length())); 3643af4fba3c6d2a18866505de3e6798757dd1448c6dmachenbach@chromium.org uint8_t* ptr = external_uint8_clamped_pointer(); 36440b6db5975a9d1ebcf3de7b18603380d99f789e66sgjesse@chromium.org ptr[index] = value; 36450b6db5975a9d1ebcf3de7b18603380d99f789e66sgjesse@chromium.org} 36460b6db5975a9d1ebcf3de7b18603380d99f789e66sgjesse@chromium.org 36470b6db5975a9d1ebcf3de7b18603380d99f789e66sgjesse@chromium.org 36483811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.orgvoid* ExternalArray::external_pointer() { 36493811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org intptr_t ptr = READ_INTPTR_FIELD(this, kExternalPointerOffset); 36503811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org return reinterpret_cast<void*>(ptr); 36513811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org} 36523811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org 36533811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org 36543811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.orgvoid ExternalArray::set_external_pointer(void* value, WriteBarrierMode mode) { 36553811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org intptr_t ptr = reinterpret_cast<intptr_t>(value); 36563811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org WRITE_INTPTR_FIELD(this, kExternalPointerOffset, ptr); 36573811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org} 36583811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org 36593811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org 3660af4fba3c6d2a18866505de3e6798757dd1448c6dmachenbach@chromium.orgint8_t ExternalInt8Array::get_scalar(int index) { 36613811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org ASSERT((index >= 0) && (index < this->length())); 36623811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org int8_t* ptr = static_cast<int8_t*>(external_pointer()); 36633811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org return ptr[index]; 36643811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org} 36653811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org 36663811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org 36679e41f9ecf5042292a9efcb36e264b37621199553machenbach@chromium.orgHandle<Object> ExternalInt8Array::get(Handle<ExternalInt8Array> array, 36689e41f9ecf5042292a9efcb36e264b37621199553machenbach@chromium.org int index) { 3669731474e847a8ccd6e27f74842506c9c807dae658jarin@chromium.org return Handle<Smi>(Smi::FromInt(array->get_scalar(index)), 3670731474e847a8ccd6e27f74842506c9c807dae658jarin@chromium.org array->GetIsolate()); 36719e41f9ecf5042292a9efcb36e264b37621199553machenbach@chromium.org} 36729e41f9ecf5042292a9efcb36e264b37621199553machenbach@chromium.org 36739e41f9ecf5042292a9efcb36e264b37621199553machenbach@chromium.org 3674af4fba3c6d2a18866505de3e6798757dd1448c6dmachenbach@chromium.orgvoid ExternalInt8Array::set(int index, int8_t value) { 36753811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org ASSERT((index >= 0) && (index < this->length())); 36763811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org int8_t* ptr = static_cast<int8_t*>(external_pointer()); 36773811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org ptr[index] = value; 36783811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org} 36793811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org 36803811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org 3681af4fba3c6d2a18866505de3e6798757dd1448c6dmachenbach@chromium.orguint8_t ExternalUint8Array::get_scalar(int index) { 36823811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org ASSERT((index >= 0) && (index < this->length())); 36833811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org uint8_t* ptr = static_cast<uint8_t*>(external_pointer()); 36843811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org return ptr[index]; 36853811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org} 36863811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org 36873811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org 36889e41f9ecf5042292a9efcb36e264b37621199553machenbach@chromium.orgHandle<Object> ExternalUint8Array::get(Handle<ExternalUint8Array> array, 36899e41f9ecf5042292a9efcb36e264b37621199553machenbach@chromium.org int index) { 3690731474e847a8ccd6e27f74842506c9c807dae658jarin@chromium.org return Handle<Smi>(Smi::FromInt(array->get_scalar(index)), 3691731474e847a8ccd6e27f74842506c9c807dae658jarin@chromium.org array->GetIsolate()); 36929e41f9ecf5042292a9efcb36e264b37621199553machenbach@chromium.org} 36939e41f9ecf5042292a9efcb36e264b37621199553machenbach@chromium.org 36949e41f9ecf5042292a9efcb36e264b37621199553machenbach@chromium.org 3695af4fba3c6d2a18866505de3e6798757dd1448c6dmachenbach@chromium.orgvoid ExternalUint8Array::set(int index, uint8_t value) { 36963811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org ASSERT((index >= 0) && (index < this->length())); 36973811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org uint8_t* ptr = static_cast<uint8_t*>(external_pointer()); 36983811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org ptr[index] = value; 36993811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org} 37003811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org 37013811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org 3702af4fba3c6d2a18866505de3e6798757dd1448c6dmachenbach@chromium.orgint16_t ExternalInt16Array::get_scalar(int index) { 37033811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org ASSERT((index >= 0) && (index < this->length())); 37043811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org int16_t* ptr = static_cast<int16_t*>(external_pointer()); 37053811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org return ptr[index]; 37063811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org} 37073811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org 37083811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org 37099e41f9ecf5042292a9efcb36e264b37621199553machenbach@chromium.orgHandle<Object> ExternalInt16Array::get(Handle<ExternalInt16Array> array, 37109e41f9ecf5042292a9efcb36e264b37621199553machenbach@chromium.org int index) { 3711731474e847a8ccd6e27f74842506c9c807dae658jarin@chromium.org return Handle<Smi>(Smi::FromInt(array->get_scalar(index)), 3712731474e847a8ccd6e27f74842506c9c807dae658jarin@chromium.org array->GetIsolate()); 37139e41f9ecf5042292a9efcb36e264b37621199553machenbach@chromium.org} 37149e41f9ecf5042292a9efcb36e264b37621199553machenbach@chromium.org 37159e41f9ecf5042292a9efcb36e264b37621199553machenbach@chromium.org 3716af4fba3c6d2a18866505de3e6798757dd1448c6dmachenbach@chromium.orgvoid ExternalInt16Array::set(int index, int16_t value) { 37173811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org ASSERT((index >= 0) && (index < this->length())); 37183811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org int16_t* ptr = static_cast<int16_t*>(external_pointer()); 37193811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org ptr[index] = value; 37203811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org} 37213811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org 37223811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org 3723af4fba3c6d2a18866505de3e6798757dd1448c6dmachenbach@chromium.orguint16_t ExternalUint16Array::get_scalar(int index) { 37243811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org ASSERT((index >= 0) && (index < this->length())); 37253811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org uint16_t* ptr = static_cast<uint16_t*>(external_pointer()); 37263811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org return ptr[index]; 37273811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org} 37283811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org 37293811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org 37309e41f9ecf5042292a9efcb36e264b37621199553machenbach@chromium.orgHandle<Object> ExternalUint16Array::get(Handle<ExternalUint16Array> array, 37319e41f9ecf5042292a9efcb36e264b37621199553machenbach@chromium.org int index) { 3732731474e847a8ccd6e27f74842506c9c807dae658jarin@chromium.org return Handle<Smi>(Smi::FromInt(array->get_scalar(index)), 3733731474e847a8ccd6e27f74842506c9c807dae658jarin@chromium.org array->GetIsolate()); 37349e41f9ecf5042292a9efcb36e264b37621199553machenbach@chromium.org} 37359e41f9ecf5042292a9efcb36e264b37621199553machenbach@chromium.org 37369e41f9ecf5042292a9efcb36e264b37621199553machenbach@chromium.org 3737af4fba3c6d2a18866505de3e6798757dd1448c6dmachenbach@chromium.orgvoid ExternalUint16Array::set(int index, uint16_t value) { 37383811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org ASSERT((index >= 0) && (index < this->length())); 37393811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org uint16_t* ptr = static_cast<uint16_t*>(external_pointer()); 37403811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org ptr[index] = value; 37413811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org} 37423811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org 37433811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org 3744af4fba3c6d2a18866505de3e6798757dd1448c6dmachenbach@chromium.orgint32_t ExternalInt32Array::get_scalar(int index) { 37453811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org ASSERT((index >= 0) && (index < this->length())); 37463811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org int32_t* ptr = static_cast<int32_t*>(external_pointer()); 37473811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org return ptr[index]; 37483811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org} 37493811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org 37503811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org 37519e41f9ecf5042292a9efcb36e264b37621199553machenbach@chromium.orgHandle<Object> ExternalInt32Array::get(Handle<ExternalInt32Array> array, 37529e41f9ecf5042292a9efcb36e264b37621199553machenbach@chromium.org int index) { 37539e41f9ecf5042292a9efcb36e264b37621199553machenbach@chromium.org return array->GetIsolate()->factory()-> 37549e41f9ecf5042292a9efcb36e264b37621199553machenbach@chromium.org NewNumberFromInt(array->get_scalar(index)); 37557c2628c3f0353f0558760c3ca442f934263ea766kmillikin@chromium.org} 37567c2628c3f0353f0558760c3ca442f934263ea766kmillikin@chromium.org 37577c2628c3f0353f0558760c3ca442f934263ea766kmillikin@chromium.org 3758af4fba3c6d2a18866505de3e6798757dd1448c6dmachenbach@chromium.orgvoid ExternalInt32Array::set(int index, int32_t value) { 37593811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org ASSERT((index >= 0) && (index < this->length())); 37603811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org int32_t* ptr = static_cast<int32_t*>(external_pointer()); 37613811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org ptr[index] = value; 37623811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org} 37633811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org 37643811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org 3765af4fba3c6d2a18866505de3e6798757dd1448c6dmachenbach@chromium.orguint32_t ExternalUint32Array::get_scalar(int index) { 37663811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org ASSERT((index >= 0) && (index < this->length())); 37673811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org uint32_t* ptr = static_cast<uint32_t*>(external_pointer()); 37683811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org return ptr[index]; 37693811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org} 37703811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org 37713811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org 37729e41f9ecf5042292a9efcb36e264b37621199553machenbach@chromium.orgHandle<Object> ExternalUint32Array::get(Handle<ExternalUint32Array> array, 37739e41f9ecf5042292a9efcb36e264b37621199553machenbach@chromium.org int index) { 37749e41f9ecf5042292a9efcb36e264b37621199553machenbach@chromium.org return array->GetIsolate()->factory()-> 37759e41f9ecf5042292a9efcb36e264b37621199553machenbach@chromium.org NewNumberFromUint(array->get_scalar(index)); 37767c2628c3f0353f0558760c3ca442f934263ea766kmillikin@chromium.org} 37777c2628c3f0353f0558760c3ca442f934263ea766kmillikin@chromium.org 37787c2628c3f0353f0558760c3ca442f934263ea766kmillikin@chromium.org 3779af4fba3c6d2a18866505de3e6798757dd1448c6dmachenbach@chromium.orgvoid ExternalUint32Array::set(int index, uint32_t value) { 37803811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org ASSERT((index >= 0) && (index < this->length())); 37813811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org uint32_t* ptr = static_cast<uint32_t*>(external_pointer()); 37823811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org ptr[index] = value; 37833811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org} 37843811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org 37853811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org 3786af4fba3c6d2a18866505de3e6798757dd1448c6dmachenbach@chromium.orgfloat ExternalFloat32Array::get_scalar(int index) { 37873811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org ASSERT((index >= 0) && (index < this->length())); 37883811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org float* ptr = static_cast<float*>(external_pointer()); 37893811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org return ptr[index]; 37903811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org} 37913811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org 37923811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org 37939e41f9ecf5042292a9efcb36e264b37621199553machenbach@chromium.orgHandle<Object> ExternalFloat32Array::get(Handle<ExternalFloat32Array> array, 37949e41f9ecf5042292a9efcb36e264b37621199553machenbach@chromium.org int index) { 37959e41f9ecf5042292a9efcb36e264b37621199553machenbach@chromium.org return array->GetIsolate()->factory()->NewNumber(array->get_scalar(index)); 37967c2628c3f0353f0558760c3ca442f934263ea766kmillikin@chromium.org} 37977c2628c3f0353f0558760c3ca442f934263ea766kmillikin@chromium.org 37987c2628c3f0353f0558760c3ca442f934263ea766kmillikin@chromium.org 3799af4fba3c6d2a18866505de3e6798757dd1448c6dmachenbach@chromium.orgvoid ExternalFloat32Array::set(int index, float value) { 38003811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org ASSERT((index >= 0) && (index < this->length())); 38013811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org float* ptr = static_cast<float*>(external_pointer()); 38023811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org ptr[index] = value; 38033811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org} 38043811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org 38056a2b0aa331a1ae1829a9b9637ad18cfc7ec9d840ager@chromium.org 3806af4fba3c6d2a18866505de3e6798757dd1448c6dmachenbach@chromium.orgdouble ExternalFloat64Array::get_scalar(int index) { 38073847bd5ff857259e945a01d75fdb383e2351d166erik.corry@gmail.com ASSERT((index >= 0) && (index < this->length())); 38083847bd5ff857259e945a01d75fdb383e2351d166erik.corry@gmail.com double* ptr = static_cast<double*>(external_pointer()); 38093847bd5ff857259e945a01d75fdb383e2351d166erik.corry@gmail.com return ptr[index]; 38103847bd5ff857259e945a01d75fdb383e2351d166erik.corry@gmail.com} 38113847bd5ff857259e945a01d75fdb383e2351d166erik.corry@gmail.com 38123847bd5ff857259e945a01d75fdb383e2351d166erik.corry@gmail.com 38139e41f9ecf5042292a9efcb36e264b37621199553machenbach@chromium.orgHandle<Object> ExternalFloat64Array::get(Handle<ExternalFloat64Array> array, 38149e41f9ecf5042292a9efcb36e264b37621199553machenbach@chromium.org int index) { 38159e41f9ecf5042292a9efcb36e264b37621199553machenbach@chromium.org return array->GetIsolate()->factory()->NewNumber(array->get_scalar(index)); 38169e41f9ecf5042292a9efcb36e264b37621199553machenbach@chromium.org} 38179e41f9ecf5042292a9efcb36e264b37621199553machenbach@chromium.org 38189e41f9ecf5042292a9efcb36e264b37621199553machenbach@chromium.org 3819af4fba3c6d2a18866505de3e6798757dd1448c6dmachenbach@chromium.orgvoid ExternalFloat64Array::set(int index, double value) { 38203847bd5ff857259e945a01d75fdb383e2351d166erik.corry@gmail.com ASSERT((index >= 0) && (index < this->length())); 38213847bd5ff857259e945a01d75fdb383e2351d166erik.corry@gmail.com double* ptr = static_cast<double*>(external_pointer()); 38223847bd5ff857259e945a01d75fdb383e2351d166erik.corry@gmail.com ptr[index] = value; 38233847bd5ff857259e945a01d75fdb383e2351d166erik.corry@gmail.com} 38243847bd5ff857259e945a01d75fdb383e2351d166erik.corry@gmail.com 38253847bd5ff857259e945a01d75fdb383e2351d166erik.corry@gmail.com 3826895f00d1d8c5a7a7209c36d690688e3552de3df4machenbach@chromium.orgvoid* FixedTypedArrayBase::DataPtr() { 3827895f00d1d8c5a7a7209c36d690688e3552de3df4machenbach@chromium.org return FIELD_ADDR(this, kDataOffset); 3828895f00d1d8c5a7a7209c36d690688e3552de3df4machenbach@chromium.org} 3829895f00d1d8c5a7a7209c36d690688e3552de3df4machenbach@chromium.org 3830895f00d1d8c5a7a7209c36d690688e3552de3df4machenbach@chromium.org 3831d06b9264b1c886fc80a100e9915cf8ae07fdb4e5machenbach@chromium.orgint FixedTypedArrayBase::DataSize(InstanceType type) { 38325c88bc39690cc94affe78cf5777eb8180c4af8a4machenbach@chromium.org int element_size; 3833d06b9264b1c886fc80a100e9915cf8ae07fdb4e5machenbach@chromium.org switch (type) { 3834895f00d1d8c5a7a7209c36d690688e3552de3df4machenbach@chromium.org#define TYPED_ARRAY_CASE(Type, type, TYPE, ctype, size) \ 3835895f00d1d8c5a7a7209c36d690688e3552de3df4machenbach@chromium.org case FIXED_##TYPE##_ARRAY_TYPE: \ 3836895f00d1d8c5a7a7209c36d690688e3552de3df4machenbach@chromium.org element_size = size; \ 38375c88bc39690cc94affe78cf5777eb8180c4af8a4machenbach@chromium.org break; 3838895f00d1d8c5a7a7209c36d690688e3552de3df4machenbach@chromium.org 3839895f00d1d8c5a7a7209c36d690688e3552de3df4machenbach@chromium.org TYPED_ARRAYS(TYPED_ARRAY_CASE) 3840895f00d1d8c5a7a7209c36d690688e3552de3df4machenbach@chromium.org#undef TYPED_ARRAY_CASE 38415c88bc39690cc94affe78cf5777eb8180c4af8a4machenbach@chromium.org default: 38425c88bc39690cc94affe78cf5777eb8180c4af8a4machenbach@chromium.org UNREACHABLE(); 38435c88bc39690cc94affe78cf5777eb8180c4af8a4machenbach@chromium.org return 0; 38445c88bc39690cc94affe78cf5777eb8180c4af8a4machenbach@chromium.org } 3845895f00d1d8c5a7a7209c36d690688e3552de3df4machenbach@chromium.org return length() * element_size; 38465c88bc39690cc94affe78cf5777eb8180c4af8a4machenbach@chromium.org} 38475c88bc39690cc94affe78cf5777eb8180c4af8a4machenbach@chromium.org 38485c88bc39690cc94affe78cf5777eb8180c4af8a4machenbach@chromium.org 3849d06b9264b1c886fc80a100e9915cf8ae07fdb4e5machenbach@chromium.orgint FixedTypedArrayBase::DataSize() { 3850d06b9264b1c886fc80a100e9915cf8ae07fdb4e5machenbach@chromium.org return DataSize(map()->instance_type()); 3851d06b9264b1c886fc80a100e9915cf8ae07fdb4e5machenbach@chromium.org} 3852d06b9264b1c886fc80a100e9915cf8ae07fdb4e5machenbach@chromium.org 3853d06b9264b1c886fc80a100e9915cf8ae07fdb4e5machenbach@chromium.org 3854895f00d1d8c5a7a7209c36d690688e3552de3df4machenbach@chromium.orgint FixedTypedArrayBase::size() { 3855895f00d1d8c5a7a7209c36d690688e3552de3df4machenbach@chromium.org return OBJECT_POINTER_ALIGN(kDataOffset + DataSize()); 3856895f00d1d8c5a7a7209c36d690688e3552de3df4machenbach@chromium.org} 3857895f00d1d8c5a7a7209c36d690688e3552de3df4machenbach@chromium.org 3858895f00d1d8c5a7a7209c36d690688e3552de3df4machenbach@chromium.org 3859d06b9264b1c886fc80a100e9915cf8ae07fdb4e5machenbach@chromium.orgint FixedTypedArrayBase::TypedArraySize(InstanceType type) { 3860d06b9264b1c886fc80a100e9915cf8ae07fdb4e5machenbach@chromium.org return OBJECT_POINTER_ALIGN(kDataOffset + DataSize(type)); 3861d06b9264b1c886fc80a100e9915cf8ae07fdb4e5machenbach@chromium.org} 3862d06b9264b1c886fc80a100e9915cf8ae07fdb4e5machenbach@chromium.org 3863d06b9264b1c886fc80a100e9915cf8ae07fdb4e5machenbach@chromium.org 3864895f00d1d8c5a7a7209c36d690688e3552de3df4machenbach@chromium.orguint8_t Uint8ArrayTraits::defaultValue() { return 0; } 3865895f00d1d8c5a7a7209c36d690688e3552de3df4machenbach@chromium.org 3866895f00d1d8c5a7a7209c36d690688e3552de3df4machenbach@chromium.org 3867895f00d1d8c5a7a7209c36d690688e3552de3df4machenbach@chromium.orguint8_t Uint8ClampedArrayTraits::defaultValue() { return 0; } 3868895f00d1d8c5a7a7209c36d690688e3552de3df4machenbach@chromium.org 3869895f00d1d8c5a7a7209c36d690688e3552de3df4machenbach@chromium.org 3870895f00d1d8c5a7a7209c36d690688e3552de3df4machenbach@chromium.orgint8_t Int8ArrayTraits::defaultValue() { return 0; } 3871895f00d1d8c5a7a7209c36d690688e3552de3df4machenbach@chromium.org 3872895f00d1d8c5a7a7209c36d690688e3552de3df4machenbach@chromium.org 3873895f00d1d8c5a7a7209c36d690688e3552de3df4machenbach@chromium.orguint16_t Uint16ArrayTraits::defaultValue() { return 0; } 3874895f00d1d8c5a7a7209c36d690688e3552de3df4machenbach@chromium.org 3875895f00d1d8c5a7a7209c36d690688e3552de3df4machenbach@chromium.org 3876895f00d1d8c5a7a7209c36d690688e3552de3df4machenbach@chromium.orgint16_t Int16ArrayTraits::defaultValue() { return 0; } 3877895f00d1d8c5a7a7209c36d690688e3552de3df4machenbach@chromium.org 3878895f00d1d8c5a7a7209c36d690688e3552de3df4machenbach@chromium.org 3879895f00d1d8c5a7a7209c36d690688e3552de3df4machenbach@chromium.orguint32_t Uint32ArrayTraits::defaultValue() { return 0; } 3880895f00d1d8c5a7a7209c36d690688e3552de3df4machenbach@chromium.org 3881895f00d1d8c5a7a7209c36d690688e3552de3df4machenbach@chromium.org 3882895f00d1d8c5a7a7209c36d690688e3552de3df4machenbach@chromium.orgint32_t Int32ArrayTraits::defaultValue() { return 0; } 3883895f00d1d8c5a7a7209c36d690688e3552de3df4machenbach@chromium.org 3884895f00d1d8c5a7a7209c36d690688e3552de3df4machenbach@chromium.org 3885895f00d1d8c5a7a7209c36d690688e3552de3df4machenbach@chromium.orgfloat Float32ArrayTraits::defaultValue() { 3886895f00d1d8c5a7a7209c36d690688e3552de3df4machenbach@chromium.org return static_cast<float>(OS::nan_value()); 3887895f00d1d8c5a7a7209c36d690688e3552de3df4machenbach@chromium.org} 3888895f00d1d8c5a7a7209c36d690688e3552de3df4machenbach@chromium.org 3889895f00d1d8c5a7a7209c36d690688e3552de3df4machenbach@chromium.org 3890895f00d1d8c5a7a7209c36d690688e3552de3df4machenbach@chromium.orgdouble Float64ArrayTraits::defaultValue() { return OS::nan_value(); } 3891895f00d1d8c5a7a7209c36d690688e3552de3df4machenbach@chromium.org 3892895f00d1d8c5a7a7209c36d690688e3552de3df4machenbach@chromium.org 38935c88bc39690cc94affe78cf5777eb8180c4af8a4machenbach@chromium.orgtemplate <class Traits> 38945c88bc39690cc94affe78cf5777eb8180c4af8a4machenbach@chromium.orgtypename Traits::ElementType FixedTypedArray<Traits>::get_scalar(int index) { 38955c88bc39690cc94affe78cf5777eb8180c4af8a4machenbach@chromium.org ASSERT((index >= 0) && (index < this->length())); 38965c88bc39690cc94affe78cf5777eb8180c4af8a4machenbach@chromium.org ElementType* ptr = reinterpret_cast<ElementType*>( 38975c88bc39690cc94affe78cf5777eb8180c4af8a4machenbach@chromium.org FIELD_ADDR(this, kDataOffset)); 38985c88bc39690cc94affe78cf5777eb8180c4af8a4machenbach@chromium.org return ptr[index]; 38995c88bc39690cc94affe78cf5777eb8180c4af8a4machenbach@chromium.org} 39005c88bc39690cc94affe78cf5777eb8180c4af8a4machenbach@chromium.org 390157a54ace4b6b45d5d6a7ff38d88ee9990d47f5e2machenbach@chromium.org 390257a54ace4b6b45d5d6a7ff38d88ee9990d47f5e2machenbach@chromium.orgtemplate<> inline 390357a54ace4b6b45d5d6a7ff38d88ee9990d47f5e2machenbach@chromium.orgFixedTypedArray<Float64ArrayTraits>::ElementType 390457a54ace4b6b45d5d6a7ff38d88ee9990d47f5e2machenbach@chromium.org FixedTypedArray<Float64ArrayTraits>::get_scalar(int index) { 390557a54ace4b6b45d5d6a7ff38d88ee9990d47f5e2machenbach@chromium.org ASSERT((index >= 0) && (index < this->length())); 390657a54ace4b6b45d5d6a7ff38d88ee9990d47f5e2machenbach@chromium.org return READ_DOUBLE_FIELD(this, ElementOffset(index)); 390757a54ace4b6b45d5d6a7ff38d88ee9990d47f5e2machenbach@chromium.org} 390857a54ace4b6b45d5d6a7ff38d88ee9990d47f5e2machenbach@chromium.org 390957a54ace4b6b45d5d6a7ff38d88ee9990d47f5e2machenbach@chromium.org 39105c88bc39690cc94affe78cf5777eb8180c4af8a4machenbach@chromium.orgtemplate <class Traits> 39115c88bc39690cc94affe78cf5777eb8180c4af8a4machenbach@chromium.orgvoid FixedTypedArray<Traits>::set(int index, ElementType value) { 39125c88bc39690cc94affe78cf5777eb8180c4af8a4machenbach@chromium.org ASSERT((index >= 0) && (index < this->length())); 39135c88bc39690cc94affe78cf5777eb8180c4af8a4machenbach@chromium.org ElementType* ptr = reinterpret_cast<ElementType*>( 39145c88bc39690cc94affe78cf5777eb8180c4af8a4machenbach@chromium.org FIELD_ADDR(this, kDataOffset)); 39155c88bc39690cc94affe78cf5777eb8180c4af8a4machenbach@chromium.org ptr[index] = value; 39165c88bc39690cc94affe78cf5777eb8180c4af8a4machenbach@chromium.org} 39175c88bc39690cc94affe78cf5777eb8180c4af8a4machenbach@chromium.org 39185c88bc39690cc94affe78cf5777eb8180c4af8a4machenbach@chromium.org 391957a54ace4b6b45d5d6a7ff38d88ee9990d47f5e2machenbach@chromium.orgtemplate<> inline 392057a54ace4b6b45d5d6a7ff38d88ee9990d47f5e2machenbach@chromium.orgvoid FixedTypedArray<Float64ArrayTraits>::set( 392157a54ace4b6b45d5d6a7ff38d88ee9990d47f5e2machenbach@chromium.org int index, Float64ArrayTraits::ElementType value) { 392257a54ace4b6b45d5d6a7ff38d88ee9990d47f5e2machenbach@chromium.org ASSERT((index >= 0) && (index < this->length())); 392357a54ace4b6b45d5d6a7ff38d88ee9990d47f5e2machenbach@chromium.org WRITE_DOUBLE_FIELD(this, ElementOffset(index), value); 392457a54ace4b6b45d5d6a7ff38d88ee9990d47f5e2machenbach@chromium.org} 392557a54ace4b6b45d5d6a7ff38d88ee9990d47f5e2machenbach@chromium.org 392657a54ace4b6b45d5d6a7ff38d88ee9990d47f5e2machenbach@chromium.org 39275c88bc39690cc94affe78cf5777eb8180c4af8a4machenbach@chromium.orgtemplate <class Traits> 3928895f00d1d8c5a7a7209c36d690688e3552de3df4machenbach@chromium.orgtypename Traits::ElementType FixedTypedArray<Traits>::from_int(int value) { 3929895f00d1d8c5a7a7209c36d690688e3552de3df4machenbach@chromium.org return static_cast<ElementType>(value); 3930895f00d1d8c5a7a7209c36d690688e3552de3df4machenbach@chromium.org} 3931895f00d1d8c5a7a7209c36d690688e3552de3df4machenbach@chromium.org 3932895f00d1d8c5a7a7209c36d690688e3552de3df4machenbach@chromium.org 3933895f00d1d8c5a7a7209c36d690688e3552de3df4machenbach@chromium.orgtemplate <> inline 3934895f00d1d8c5a7a7209c36d690688e3552de3df4machenbach@chromium.orguint8_t FixedTypedArray<Uint8ClampedArrayTraits>::from_int(int value) { 3935895f00d1d8c5a7a7209c36d690688e3552de3df4machenbach@chromium.org if (value < 0) return 0; 3936895f00d1d8c5a7a7209c36d690688e3552de3df4machenbach@chromium.org if (value > 0xFF) return 0xFF; 3937895f00d1d8c5a7a7209c36d690688e3552de3df4machenbach@chromium.org return static_cast<uint8_t>(value); 3938895f00d1d8c5a7a7209c36d690688e3552de3df4machenbach@chromium.org} 3939895f00d1d8c5a7a7209c36d690688e3552de3df4machenbach@chromium.org 3940895f00d1d8c5a7a7209c36d690688e3552de3df4machenbach@chromium.org 3941895f00d1d8c5a7a7209c36d690688e3552de3df4machenbach@chromium.orgtemplate <class Traits> 3942895f00d1d8c5a7a7209c36d690688e3552de3df4machenbach@chromium.orgtypename Traits::ElementType FixedTypedArray<Traits>::from_double( 3943895f00d1d8c5a7a7209c36d690688e3552de3df4machenbach@chromium.org double value) { 3944895f00d1d8c5a7a7209c36d690688e3552de3df4machenbach@chromium.org return static_cast<ElementType>(DoubleToInt32(value)); 3945895f00d1d8c5a7a7209c36d690688e3552de3df4machenbach@chromium.org} 3946895f00d1d8c5a7a7209c36d690688e3552de3df4machenbach@chromium.org 3947895f00d1d8c5a7a7209c36d690688e3552de3df4machenbach@chromium.org 3948895f00d1d8c5a7a7209c36d690688e3552de3df4machenbach@chromium.orgtemplate<> inline 3949895f00d1d8c5a7a7209c36d690688e3552de3df4machenbach@chromium.orguint8_t FixedTypedArray<Uint8ClampedArrayTraits>::from_double(double value) { 3950895f00d1d8c5a7a7209c36d690688e3552de3df4machenbach@chromium.org if (value < 0) return 0; 3951895f00d1d8c5a7a7209c36d690688e3552de3df4machenbach@chromium.org if (value > 0xFF) return 0xFF; 3952895f00d1d8c5a7a7209c36d690688e3552de3df4machenbach@chromium.org return static_cast<uint8_t>(lrint(value)); 3953895f00d1d8c5a7a7209c36d690688e3552de3df4machenbach@chromium.org} 3954895f00d1d8c5a7a7209c36d690688e3552de3df4machenbach@chromium.org 3955895f00d1d8c5a7a7209c36d690688e3552de3df4machenbach@chromium.org 3956895f00d1d8c5a7a7209c36d690688e3552de3df4machenbach@chromium.orgtemplate<> inline 3957895f00d1d8c5a7a7209c36d690688e3552de3df4machenbach@chromium.orgfloat FixedTypedArray<Float32ArrayTraits>::from_double(double value) { 3958895f00d1d8c5a7a7209c36d690688e3552de3df4machenbach@chromium.org return static_cast<float>(value); 3959895f00d1d8c5a7a7209c36d690688e3552de3df4machenbach@chromium.org} 3960895f00d1d8c5a7a7209c36d690688e3552de3df4machenbach@chromium.org 3961895f00d1d8c5a7a7209c36d690688e3552de3df4machenbach@chromium.org 3962895f00d1d8c5a7a7209c36d690688e3552de3df4machenbach@chromium.orgtemplate<> inline 3963895f00d1d8c5a7a7209c36d690688e3552de3df4machenbach@chromium.orgdouble FixedTypedArray<Float64ArrayTraits>::from_double(double value) { 3964895f00d1d8c5a7a7209c36d690688e3552de3df4machenbach@chromium.org return value; 3965895f00d1d8c5a7a7209c36d690688e3552de3df4machenbach@chromium.org} 3966895f00d1d8c5a7a7209c36d690688e3552de3df4machenbach@chromium.org 3967895f00d1d8c5a7a7209c36d690688e3552de3df4machenbach@chromium.org 3968895f00d1d8c5a7a7209c36d690688e3552de3df4machenbach@chromium.orgtemplate <class Traits> 39699e41f9ecf5042292a9efcb36e264b37621199553machenbach@chromium.orgHandle<Object> FixedTypedArray<Traits>::get( 39709e41f9ecf5042292a9efcb36e264b37621199553machenbach@chromium.org Handle<FixedTypedArray<Traits> > array, 39719e41f9ecf5042292a9efcb36e264b37621199553machenbach@chromium.org int index) { 39729e41f9ecf5042292a9efcb36e264b37621199553machenbach@chromium.org return Traits::ToHandle(array->GetIsolate(), array->get_scalar(index)); 39739e41f9ecf5042292a9efcb36e264b37621199553machenbach@chromium.org} 39749e41f9ecf5042292a9efcb36e264b37621199553machenbach@chromium.org 3975731474e847a8ccd6e27f74842506c9c807dae658jarin@chromium.org 39769e41f9ecf5042292a9efcb36e264b37621199553machenbach@chromium.orgtemplate <class Traits> 3977731474e847a8ccd6e27f74842506c9c807dae658jarin@chromium.orgHandle<Object> FixedTypedArray<Traits>::SetValue( 3978731474e847a8ccd6e27f74842506c9c807dae658jarin@chromium.org Handle<FixedTypedArray<Traits> > array, 3979731474e847a8ccd6e27f74842506c9c807dae658jarin@chromium.org uint32_t index, 3980731474e847a8ccd6e27f74842506c9c807dae658jarin@chromium.org Handle<Object> value) { 39815c88bc39690cc94affe78cf5777eb8180c4af8a4machenbach@chromium.org ElementType cast_value = Traits::defaultValue(); 3982731474e847a8ccd6e27f74842506c9c807dae658jarin@chromium.org if (index < static_cast<uint32_t>(array->length())) { 39835c88bc39690cc94affe78cf5777eb8180c4af8a4machenbach@chromium.org if (value->IsSmi()) { 3984731474e847a8ccd6e27f74842506c9c807dae658jarin@chromium.org int int_value = Handle<Smi>::cast(value)->value(); 3985895f00d1d8c5a7a7209c36d690688e3552de3df4machenbach@chromium.org cast_value = from_int(int_value); 39865c88bc39690cc94affe78cf5777eb8180c4af8a4machenbach@chromium.org } else if (value->IsHeapNumber()) { 3987731474e847a8ccd6e27f74842506c9c807dae658jarin@chromium.org double double_value = Handle<HeapNumber>::cast(value)->value(); 3988895f00d1d8c5a7a7209c36d690688e3552de3df4machenbach@chromium.org cast_value = from_double(double_value); 39895c88bc39690cc94affe78cf5777eb8180c4af8a4machenbach@chromium.org } else { 39905c88bc39690cc94affe78cf5777eb8180c4af8a4machenbach@chromium.org // Clamp undefined to the default value. All other types have been 39915c88bc39690cc94affe78cf5777eb8180c4af8a4machenbach@chromium.org // converted to a number type further up in the call chain. 39925c88bc39690cc94affe78cf5777eb8180c4af8a4machenbach@chromium.org ASSERT(value->IsUndefined()); 39935c88bc39690cc94affe78cf5777eb8180c4af8a4machenbach@chromium.org } 3994731474e847a8ccd6e27f74842506c9c807dae658jarin@chromium.org array->set(index, cast_value); 39955c88bc39690cc94affe78cf5777eb8180c4af8a4machenbach@chromium.org } 3996731474e847a8ccd6e27f74842506c9c807dae658jarin@chromium.org return Traits::ToHandle(array->GetIsolate(), cast_value); 39975c88bc39690cc94affe78cf5777eb8180c4af8a4machenbach@chromium.org} 39985c88bc39690cc94affe78cf5777eb8180c4af8a4machenbach@chromium.org 39995c88bc39690cc94affe78cf5777eb8180c4af8a4machenbach@chromium.org 40009e41f9ecf5042292a9efcb36e264b37621199553machenbach@chromium.orgHandle<Object> Uint8ArrayTraits::ToHandle(Isolate* isolate, uint8_t scalar) { 40019e41f9ecf5042292a9efcb36e264b37621199553machenbach@chromium.org return handle(Smi::FromInt(scalar), isolate); 40029e41f9ecf5042292a9efcb36e264b37621199553machenbach@chromium.org} 40039e41f9ecf5042292a9efcb36e264b37621199553machenbach@chromium.org 40049e41f9ecf5042292a9efcb36e264b37621199553machenbach@chromium.org 40059e41f9ecf5042292a9efcb36e264b37621199553machenbach@chromium.orgHandle<Object> Uint8ClampedArrayTraits::ToHandle(Isolate* isolate, 40069e41f9ecf5042292a9efcb36e264b37621199553machenbach@chromium.org uint8_t scalar) { 40079e41f9ecf5042292a9efcb36e264b37621199553machenbach@chromium.org return handle(Smi::FromInt(scalar), isolate); 40089e41f9ecf5042292a9efcb36e264b37621199553machenbach@chromium.org} 40099e41f9ecf5042292a9efcb36e264b37621199553machenbach@chromium.org 40109e41f9ecf5042292a9efcb36e264b37621199553machenbach@chromium.org 40119e41f9ecf5042292a9efcb36e264b37621199553machenbach@chromium.orgHandle<Object> Int8ArrayTraits::ToHandle(Isolate* isolate, int8_t scalar) { 40129e41f9ecf5042292a9efcb36e264b37621199553machenbach@chromium.org return handle(Smi::FromInt(scalar), isolate); 40139e41f9ecf5042292a9efcb36e264b37621199553machenbach@chromium.org} 40149e41f9ecf5042292a9efcb36e264b37621199553machenbach@chromium.org 40159e41f9ecf5042292a9efcb36e264b37621199553machenbach@chromium.org 40169e41f9ecf5042292a9efcb36e264b37621199553machenbach@chromium.orgHandle<Object> Uint16ArrayTraits::ToHandle(Isolate* isolate, uint16_t scalar) { 40179e41f9ecf5042292a9efcb36e264b37621199553machenbach@chromium.org return handle(Smi::FromInt(scalar), isolate); 40189e41f9ecf5042292a9efcb36e264b37621199553machenbach@chromium.org} 40199e41f9ecf5042292a9efcb36e264b37621199553machenbach@chromium.org 40209e41f9ecf5042292a9efcb36e264b37621199553machenbach@chromium.org 40219e41f9ecf5042292a9efcb36e264b37621199553machenbach@chromium.orgHandle<Object> Int16ArrayTraits::ToHandle(Isolate* isolate, int16_t scalar) { 40229e41f9ecf5042292a9efcb36e264b37621199553machenbach@chromium.org return handle(Smi::FromInt(scalar), isolate); 40239e41f9ecf5042292a9efcb36e264b37621199553machenbach@chromium.org} 40249e41f9ecf5042292a9efcb36e264b37621199553machenbach@chromium.org 40259e41f9ecf5042292a9efcb36e264b37621199553machenbach@chromium.org 40269e41f9ecf5042292a9efcb36e264b37621199553machenbach@chromium.orgHandle<Object> Uint32ArrayTraits::ToHandle(Isolate* isolate, uint32_t scalar) { 40279e41f9ecf5042292a9efcb36e264b37621199553machenbach@chromium.org return isolate->factory()->NewNumberFromUint(scalar); 40289e41f9ecf5042292a9efcb36e264b37621199553machenbach@chromium.org} 40299e41f9ecf5042292a9efcb36e264b37621199553machenbach@chromium.org 40309e41f9ecf5042292a9efcb36e264b37621199553machenbach@chromium.org 40319e41f9ecf5042292a9efcb36e264b37621199553machenbach@chromium.orgHandle<Object> Int32ArrayTraits::ToHandle(Isolate* isolate, int32_t scalar) { 40329e41f9ecf5042292a9efcb36e264b37621199553machenbach@chromium.org return isolate->factory()->NewNumberFromInt(scalar); 40339e41f9ecf5042292a9efcb36e264b37621199553machenbach@chromium.org} 40349e41f9ecf5042292a9efcb36e264b37621199553machenbach@chromium.org 40359e41f9ecf5042292a9efcb36e264b37621199553machenbach@chromium.org 40369e41f9ecf5042292a9efcb36e264b37621199553machenbach@chromium.orgHandle<Object> Float32ArrayTraits::ToHandle(Isolate* isolate, float scalar) { 40379e41f9ecf5042292a9efcb36e264b37621199553machenbach@chromium.org return isolate->factory()->NewNumber(scalar); 40389e41f9ecf5042292a9efcb36e264b37621199553machenbach@chromium.org} 40399e41f9ecf5042292a9efcb36e264b37621199553machenbach@chromium.org 40409e41f9ecf5042292a9efcb36e264b37621199553machenbach@chromium.org 40419e41f9ecf5042292a9efcb36e264b37621199553machenbach@chromium.orgHandle<Object> Float64ArrayTraits::ToHandle(Isolate* isolate, double scalar) { 40429e41f9ecf5042292a9efcb36e264b37621199553machenbach@chromium.org return isolate->factory()->NewNumber(scalar); 40439e41f9ecf5042292a9efcb36e264b37621199553machenbach@chromium.org} 40449e41f9ecf5042292a9efcb36e264b37621199553machenbach@chromium.org 40459e41f9ecf5042292a9efcb36e264b37621199553machenbach@chromium.org 40465b2fbee8f0b54371d42843c8fd90249a24093678ager@chromium.orgint Map::visitor_id() { 40475b2fbee8f0b54371d42843c8fd90249a24093678ager@chromium.org return READ_BYTE_FIELD(this, kVisitorIdOffset); 40485b2fbee8f0b54371d42843c8fd90249a24093678ager@chromium.org} 40495b2fbee8f0b54371d42843c8fd90249a24093678ager@chromium.org 40505b2fbee8f0b54371d42843c8fd90249a24093678ager@chromium.org 40515b2fbee8f0b54371d42843c8fd90249a24093678ager@chromium.orgvoid Map::set_visitor_id(int id) { 40525b2fbee8f0b54371d42843c8fd90249a24093678ager@chromium.org ASSERT(0 <= id && id < 256); 40535b2fbee8f0b54371d42843c8fd90249a24093678ager@chromium.org WRITE_BYTE_FIELD(this, kVisitorIdOffset, static_cast<byte>(id)); 40545b2fbee8f0b54371d42843c8fd90249a24093678ager@chromium.org} 40555b2fbee8f0b54371d42843c8fd90249a24093678ager@chromium.org 40563811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org 405743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenint Map::instance_size() { 40585b080567cf135f6dbaf23973ba6b6fa1d6af83b3machenbach@chromium.org return NOBARRIER_READ_BYTE_FIELD( 40595b080567cf135f6dbaf23973ba6b6fa1d6af83b3machenbach@chromium.org this, kInstanceSizeOffset) << kPointerSizeLog2; 40607c537e2abe09729ed6cb827b4dd206470d8c4a42ager@chromium.org} 40617c537e2abe09729ed6cb827b4dd206470d8c4a42ager@chromium.org 40627c537e2abe09729ed6cb827b4dd206470d8c4a42ager@chromium.org 40637c537e2abe09729ed6cb827b4dd206470d8c4a42ager@chromium.orgint Map::inobject_properties() { 40647c537e2abe09729ed6cb827b4dd206470d8c4a42ager@chromium.org return READ_BYTE_FIELD(this, kInObjectPropertiesOffset); 406543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 406643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 406743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 4068911335cff40a2630bbe1dfb77b1897be991241bfsgjesse@chromium.orgint Map::pre_allocated_property_fields() { 4069911335cff40a2630bbe1dfb77b1897be991241bfsgjesse@chromium.org return READ_BYTE_FIELD(this, kPreAllocatedPropertyFieldsOffset); 4070911335cff40a2630bbe1dfb77b1897be991241bfsgjesse@chromium.org} 4071911335cff40a2630bbe1dfb77b1897be991241bfsgjesse@chromium.org 4072911335cff40a2630bbe1dfb77b1897be991241bfsgjesse@chromium.org 40730a7303680fa9f3dc3945763aaa7c5a3859a7f855machenbach@chromium.orgint Map::GetInObjectPropertyOffset(int index) { 40740a7303680fa9f3dc3945763aaa7c5a3859a7f855machenbach@chromium.org // Adjust for the number of properties stored in the object. 40750a7303680fa9f3dc3945763aaa7c5a3859a7f855machenbach@chromium.org index -= inobject_properties(); 4076e7a6d372100022f492c88886898add6a51e66977machenbach@chromium.org ASSERT(index <= 0); 40770a7303680fa9f3dc3945763aaa7c5a3859a7f855machenbach@chromium.org return instance_size() + (index * kPointerSize); 40780a7303680fa9f3dc3945763aaa7c5a3859a7f855machenbach@chromium.org} 40790a7303680fa9f3dc3945763aaa7c5a3859a7f855machenbach@chromium.org 40800a7303680fa9f3dc3945763aaa7c5a3859a7f855machenbach@chromium.org 408143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenint HeapObject::SizeFromMap(Map* map) { 4082145eff58d4f6ac0dcc53abb556dbf3cac6c3280aerik.corry@gmail.com int instance_size = map->instance_size(); 4083145eff58d4f6ac0dcc53abb556dbf3cac6c3280aerik.corry@gmail.com if (instance_size != kVariableSizeSentinel) return instance_size; 40845aa501ca9fb4dfb30f4191aac135202fe8d80e4aager@chromium.org // Only inline the most frequent cases. 4085d06b9264b1c886fc80a100e9915cf8ae07fdb4e5machenbach@chromium.org InstanceType instance_type = map->instance_type(); 408643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (instance_type == FIXED_ARRAY_TYPE) { 4087ea4f62e1df22417fc8dc2c2425485dca98b13d07ager@chromium.org return FixedArray::BodyDescriptor::SizeOf(map, this); 408843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 40891510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org if (instance_type == ASCII_STRING_TYPE || 40901510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org instance_type == ASCII_INTERNALIZED_STRING_TYPE) { 4091fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org return SeqOneByteString::SizeFor( 4092fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org reinterpret_cast<SeqOneByteString*>(this)->length()); 4093145eff58d4f6ac0dcc53abb556dbf3cac6c3280aerik.corry@gmail.com } 40945aa501ca9fb4dfb30f4191aac135202fe8d80e4aager@chromium.org if (instance_type == BYTE_ARRAY_TYPE) { 40955aa501ca9fb4dfb30f4191aac135202fe8d80e4aager@chromium.org return reinterpret_cast<ByteArray*>(this)->ByteArraySize(); 40965aa501ca9fb4dfb30f4191aac135202fe8d80e4aager@chromium.org } 4097c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com if (instance_type == FREE_SPACE_TYPE) { 40989e41f9ecf5042292a9efcb36e264b37621199553machenbach@chromium.org return reinterpret_cast<FreeSpace*>(this)->nobarrier_size(); 4099c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com } 41001510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org if (instance_type == STRING_TYPE || 41011510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org instance_type == INTERNALIZED_STRING_TYPE) { 4102145eff58d4f6ac0dcc53abb556dbf3cac6c3280aerik.corry@gmail.com return SeqTwoByteString::SizeFor( 4103145eff58d4f6ac0dcc53abb556dbf3cac6c3280aerik.corry@gmail.com reinterpret_cast<SeqTwoByteString*>(this)->length()); 4104145eff58d4f6ac0dcc53abb556dbf3cac6c3280aerik.corry@gmail.com } 41056d786c9805481bd13ecb29c3155540f2f32950e1svenpanne@chromium.org if (instance_type == FIXED_DOUBLE_ARRAY_TYPE) { 41066d786c9805481bd13ecb29c3155540f2f32950e1svenpanne@chromium.org return FixedDoubleArray::SizeFor( 41076d786c9805481bd13ecb29c3155540f2f32950e1svenpanne@chromium.org reinterpret_cast<FixedDoubleArray*>(this)->length()); 41086d786c9805481bd13ecb29c3155540f2f32950e1svenpanne@chromium.org } 4109a2e1a40f85577979749d4c0d6de30e992d996659mstarzinger@chromium.org if (instance_type == CONSTANT_POOL_ARRAY_TYPE) { 4110196eb601290dc49c3754da728dc58700dff2de1bmachenbach@chromium.org return reinterpret_cast<ConstantPoolArray*>(this)->size(); 4111a2e1a40f85577979749d4c0d6de30e992d996659mstarzinger@chromium.org } 41125c88bc39690cc94affe78cf5777eb8180c4af8a4machenbach@chromium.org if (instance_type >= FIRST_FIXED_TYPED_ARRAY_TYPE && 41135c88bc39690cc94affe78cf5777eb8180c4af8a4machenbach@chromium.org instance_type <= LAST_FIXED_TYPED_ARRAY_TYPE) { 4114d06b9264b1c886fc80a100e9915cf8ae07fdb4e5machenbach@chromium.org return reinterpret_cast<FixedTypedArrayBase*>( 4115d06b9264b1c886fc80a100e9915cf8ae07fdb4e5machenbach@chromium.org this)->TypedArraySize(instance_type); 41165c88bc39690cc94affe78cf5777eb8180c4af8a4machenbach@chromium.org } 4117145eff58d4f6ac0dcc53abb556dbf3cac6c3280aerik.corry@gmail.com ASSERT(instance_type == CODE_TYPE); 4118145eff58d4f6ac0dcc53abb556dbf3cac6c3280aerik.corry@gmail.com return reinterpret_cast<Code*>(this)->CodeSize(); 411943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 412043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 412143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 412243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid Map::set_instance_size(int value) { 412371affb54842da76b24f0bb3184e9f0960523f89dkasperl@chromium.org ASSERT_EQ(0, value & (kPointerSize - 1)); 41247c537e2abe09729ed6cb827b4dd206470d8c4a42ager@chromium.org value >>= kPointerSizeLog2; 412543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen ASSERT(0 <= value && value < 256); 41265b080567cf135f6dbaf23973ba6b6fa1d6af83b3machenbach@chromium.org NOBARRIER_WRITE_BYTE_FIELD( 41275b080567cf135f6dbaf23973ba6b6fa1d6af83b3machenbach@chromium.org this, kInstanceSizeOffset, static_cast<byte>(value)); 412843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 412943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 413043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 41317c537e2abe09729ed6cb827b4dd206470d8c4a42ager@chromium.orgvoid Map::set_inobject_properties(int value) { 41327c537e2abe09729ed6cb827b4dd206470d8c4a42ager@chromium.org ASSERT(0 <= value && value < 256); 41337c537e2abe09729ed6cb827b4dd206470d8c4a42ager@chromium.org WRITE_BYTE_FIELD(this, kInObjectPropertiesOffset, static_cast<byte>(value)); 41347c537e2abe09729ed6cb827b4dd206470d8c4a42ager@chromium.org} 41357c537e2abe09729ed6cb827b4dd206470d8c4a42ager@chromium.org 41367c537e2abe09729ed6cb827b4dd206470d8c4a42ager@chromium.org 4137911335cff40a2630bbe1dfb77b1897be991241bfsgjesse@chromium.orgvoid Map::set_pre_allocated_property_fields(int value) { 4138911335cff40a2630bbe1dfb77b1897be991241bfsgjesse@chromium.org ASSERT(0 <= value && value < 256); 4139911335cff40a2630bbe1dfb77b1897be991241bfsgjesse@chromium.org WRITE_BYTE_FIELD(this, 4140911335cff40a2630bbe1dfb77b1897be991241bfsgjesse@chromium.org kPreAllocatedPropertyFieldsOffset, 4141911335cff40a2630bbe1dfb77b1897be991241bfsgjesse@chromium.org static_cast<byte>(value)); 4142911335cff40a2630bbe1dfb77b1897be991241bfsgjesse@chromium.org} 4143911335cff40a2630bbe1dfb77b1897be991241bfsgjesse@chromium.org 4144911335cff40a2630bbe1dfb77b1897be991241bfsgjesse@chromium.org 414543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenInstanceType Map::instance_type() { 414643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return static_cast<InstanceType>(READ_BYTE_FIELD(this, kInstanceTypeOffset)); 414743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 414843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 414943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 415043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid Map::set_instance_type(InstanceType value) { 415143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen WRITE_BYTE_FIELD(this, kInstanceTypeOffset, value); 415243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 415343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 415443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 415543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenint Map::unused_property_fields() { 415643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return READ_BYTE_FIELD(this, kUnusedPropertyFieldsOffset); 415743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 415843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 415943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 416043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid Map::set_unused_property_fields(int value) { 416143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen WRITE_BYTE_FIELD(this, kUnusedPropertyFieldsOffset, Min(value, 255)); 416243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 416343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 416443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 416543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenbyte Map::bit_field() { 416643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return READ_BYTE_FIELD(this, kBitFieldOffset); 416743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 416843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 416943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 417043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid Map::set_bit_field(byte value) { 417143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen WRITE_BYTE_FIELD(this, kBitFieldOffset, value); 417243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 417343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 417443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 41753a37e9b96c768f6b5b6b09542e1cb1a1ece7a022ager@chromium.orgbyte Map::bit_field2() { 41763a37e9b96c768f6b5b6b09542e1cb1a1ece7a022ager@chromium.org return READ_BYTE_FIELD(this, kBitField2Offset); 41773a37e9b96c768f6b5b6b09542e1cb1a1ece7a022ager@chromium.org} 41783a37e9b96c768f6b5b6b09542e1cb1a1ece7a022ager@chromium.org 41793a37e9b96c768f6b5b6b09542e1cb1a1ece7a022ager@chromium.org 41803a37e9b96c768f6b5b6b09542e1cb1a1ece7a022ager@chromium.orgvoid Map::set_bit_field2(byte value) { 41813a37e9b96c768f6b5b6b09542e1cb1a1ece7a022ager@chromium.org WRITE_BYTE_FIELD(this, kBitField2Offset, value); 41823a37e9b96c768f6b5b6b09542e1cb1a1ece7a022ager@chromium.org} 41833a37e9b96c768f6b5b6b09542e1cb1a1ece7a022ager@chromium.org 41843a37e9b96c768f6b5b6b09542e1cb1a1ece7a022ager@chromium.org 418543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid Map::set_non_instance_prototype(bool value) { 418643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (value) { 418743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen set_bit_field(bit_field() | (1 << kHasNonInstancePrototype)); 418843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } else { 418943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen set_bit_field(bit_field() & ~(1 << kHasNonInstancePrototype)); 419043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen } 419143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 419243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 419343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 419443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenbool Map::has_non_instance_prototype() { 419543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return ((1 << kHasNonInstancePrototype) & bit_field()) != 0; 419643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 419743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 419843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 41994111b80e5083e1ec54273d3275875ccc24cdbbafkmillikin@chromium.orgvoid Map::set_function_with_prototype(bool value) { 42003c3c8d733702cb2b41471efa5eead1faf5b5711bmachenbach@chromium.org set_bit_field(FunctionWithPrototype::update(bit_field(), value)); 42014111b80e5083e1ec54273d3275875ccc24cdbbafkmillikin@chromium.org} 42024111b80e5083e1ec54273d3275875ccc24cdbbafkmillikin@chromium.org 42034111b80e5083e1ec54273d3275875ccc24cdbbafkmillikin@chromium.org 42044111b80e5083e1ec54273d3275875ccc24cdbbafkmillikin@chromium.orgbool Map::function_with_prototype() { 42053c3c8d733702cb2b41471efa5eead1faf5b5711bmachenbach@chromium.org return FunctionWithPrototype::decode(bit_field()); 42064111b80e5083e1ec54273d3275875ccc24cdbbafkmillikin@chromium.org} 42074111b80e5083e1ec54273d3275875ccc24cdbbafkmillikin@chromium.org 42084111b80e5083e1ec54273d3275875ccc24cdbbafkmillikin@chromium.org 4209870a0b67c822d289024711912e2512af01b66c3bager@chromium.orgvoid Map::set_is_access_check_needed(bool access_check_needed) { 4210870a0b67c822d289024711912e2512af01b66c3bager@chromium.org if (access_check_needed) { 4211870a0b67c822d289024711912e2512af01b66c3bager@chromium.org set_bit_field(bit_field() | (1 << kIsAccessCheckNeeded)); 4212870a0b67c822d289024711912e2512af01b66c3bager@chromium.org } else { 4213870a0b67c822d289024711912e2512af01b66c3bager@chromium.org set_bit_field(bit_field() & ~(1 << kIsAccessCheckNeeded)); 4214870a0b67c822d289024711912e2512af01b66c3bager@chromium.org } 4215870a0b67c822d289024711912e2512af01b66c3bager@chromium.org} 4216870a0b67c822d289024711912e2512af01b66c3bager@chromium.org 4217870a0b67c822d289024711912e2512af01b66c3bager@chromium.org 4218870a0b67c822d289024711912e2512af01b66c3bager@chromium.orgbool Map::is_access_check_needed() { 4219870a0b67c822d289024711912e2512af01b66c3bager@chromium.org return ((1 << kIsAccessCheckNeeded) & bit_field()) != 0; 4220870a0b67c822d289024711912e2512af01b66c3bager@chromium.org} 4221870a0b67c822d289024711912e2512af01b66c3bager@chromium.org 4222870a0b67c822d289024711912e2512af01b66c3bager@chromium.org 422369ea3965ef6e0d3f020a402cf7e6b96b9cb651aekmillikin@chromium.orgvoid Map::set_is_extensible(bool value) { 422469ea3965ef6e0d3f020a402cf7e6b96b9cb651aekmillikin@chromium.org if (value) { 422569ea3965ef6e0d3f020a402cf7e6b96b9cb651aekmillikin@chromium.org set_bit_field2(bit_field2() | (1 << kIsExtensible)); 422669ea3965ef6e0d3f020a402cf7e6b96b9cb651aekmillikin@chromium.org } else { 422769ea3965ef6e0d3f020a402cf7e6b96b9cb651aekmillikin@chromium.org set_bit_field2(bit_field2() & ~(1 << kIsExtensible)); 422869ea3965ef6e0d3f020a402cf7e6b96b9cb651aekmillikin@chromium.org } 422969ea3965ef6e0d3f020a402cf7e6b96b9cb651aekmillikin@chromium.org} 423069ea3965ef6e0d3f020a402cf7e6b96b9cb651aekmillikin@chromium.org 423169ea3965ef6e0d3f020a402cf7e6b96b9cb651aekmillikin@chromium.orgbool Map::is_extensible() { 423269ea3965ef6e0d3f020a402cf7e6b96b9cb651aekmillikin@chromium.org return ((1 << kIsExtensible) & bit_field2()) != 0; 423369ea3965ef6e0d3f020a402cf7e6b96b9cb651aekmillikin@chromium.org} 423469ea3965ef6e0d3f020a402cf7e6b96b9cb651aekmillikin@chromium.org 423569ea3965ef6e0d3f020a402cf7e6b96b9cb651aekmillikin@chromium.org 42364a1fe7d5e92fdb673d5f05d5ddf7b1ed703ba18dwhesse@chromium.orgvoid Map::set_is_shared(bool value) { 4237304cc33f8259ef467e8e3c79f448d0bae0e8cd85yangguo@chromium.org set_bit_field3(IsShared::update(bit_field3(), value)); 42384a1fe7d5e92fdb673d5f05d5ddf7b1ed703ba18dwhesse@chromium.org} 42394a1fe7d5e92fdb673d5f05d5ddf7b1ed703ba18dwhesse@chromium.org 424088767247437a4504f433cc5abea22a473e5ed982erik.corry@gmail.com 42414a1fe7d5e92fdb673d5f05d5ddf7b1ed703ba18dwhesse@chromium.orgbool Map::is_shared() { 4242bc176057ae476990672de915df235c9aeadc8521titzer@chromium.org return IsShared::decode(bit_field3()); } 42434a1fe7d5e92fdb673d5f05d5ddf7b1ed703ba18dwhesse@chromium.org 42444a1fe7d5e92fdb673d5f05d5ddf7b1ed703ba18dwhesse@chromium.org 424588767247437a4504f433cc5abea22a473e5ed982erik.corry@gmail.comvoid Map::set_dictionary_map(bool value) { 424657a54ace4b6b45d5d6a7ff38d88ee9990d47f5e2machenbach@chromium.org uint32_t new_bit_field3 = DictionaryMap::update(bit_field3(), value); 424757a54ace4b6b45d5d6a7ff38d88ee9990d47f5e2machenbach@chromium.org new_bit_field3 = IsUnstable::update(new_bit_field3, value); 424857a54ace4b6b45d5d6a7ff38d88ee9990d47f5e2machenbach@chromium.org set_bit_field3(new_bit_field3); 424988767247437a4504f433cc5abea22a473e5ed982erik.corry@gmail.com} 425088767247437a4504f433cc5abea22a473e5ed982erik.corry@gmail.com 425188767247437a4504f433cc5abea22a473e5ed982erik.corry@gmail.com 425288767247437a4504f433cc5abea22a473e5ed982erik.corry@gmail.combool Map::is_dictionary_map() { 425388767247437a4504f433cc5abea22a473e5ed982erik.corry@gmail.com return DictionaryMap::decode(bit_field3()); 425488767247437a4504f433cc5abea22a473e5ed982erik.corry@gmail.com} 425588767247437a4504f433cc5abea22a473e5ed982erik.corry@gmail.com 425688767247437a4504f433cc5abea22a473e5ed982erik.corry@gmail.com 425743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenCode::Flags Code::flags() { 425843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return static_cast<Flags>(READ_INT_FIELD(this, kFlagsOffset)); 425943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 426043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 426143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 426206ab2ec756e44eeaf7500b9794f9d2abc79dc8cfverwaest@chromium.orgvoid Map::set_owns_descriptors(bool is_shared) { 426306ab2ec756e44eeaf7500b9794f9d2abc79dc8cfverwaest@chromium.org set_bit_field3(OwnsDescriptors::update(bit_field3(), is_shared)); 426406ab2ec756e44eeaf7500b9794f9d2abc79dc8cfverwaest@chromium.org} 426506ab2ec756e44eeaf7500b9794f9d2abc79dc8cfverwaest@chromium.org 426606ab2ec756e44eeaf7500b9794f9d2abc79dc8cfverwaest@chromium.org 426706ab2ec756e44eeaf7500b9794f9d2abc79dc8cfverwaest@chromium.orgbool Map::owns_descriptors() { 426806ab2ec756e44eeaf7500b9794f9d2abc79dc8cfverwaest@chromium.org return OwnsDescriptors::decode(bit_field3()); 426906ab2ec756e44eeaf7500b9794f9d2abc79dc8cfverwaest@chromium.org} 427006ab2ec756e44eeaf7500b9794f9d2abc79dc8cfverwaest@chromium.org 427106ab2ec756e44eeaf7500b9794f9d2abc79dc8cfverwaest@chromium.org 4272b5be0a91a2e75da55653dd3583b7f3c1c54f7309machenbach@chromium.orgvoid Map::set_has_instance_call_handler() { 4273b5be0a91a2e75da55653dd3583b7f3c1c54f7309machenbach@chromium.org set_bit_field3(HasInstanceCallHandler::update(bit_field3(), true)); 4274e4ac3ef2f6fa9300bc78c5a4cb7d4cb66ac6e83dmvstanton@chromium.org} 4275e4ac3ef2f6fa9300bc78c5a4cb7d4cb66ac6e83dmvstanton@chromium.org 4276e4ac3ef2f6fa9300bc78c5a4cb7d4cb66ac6e83dmvstanton@chromium.org 4277b5be0a91a2e75da55653dd3583b7f3c1c54f7309machenbach@chromium.orgbool Map::has_instance_call_handler() { 4278b5be0a91a2e75da55653dd3583b7f3c1c54f7309machenbach@chromium.org return HasInstanceCallHandler::decode(bit_field3()); 4279e4ac3ef2f6fa9300bc78c5a4cb7d4cb66ac6e83dmvstanton@chromium.org} 4280e4ac3ef2f6fa9300bc78c5a4cb7d4cb66ac6e83dmvstanton@chromium.org 4281e4ac3ef2f6fa9300bc78c5a4cb7d4cb66ac6e83dmvstanton@chromium.org 4282f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.orgvoid Map::deprecate() { 4283f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org set_bit_field3(Deprecated::update(bit_field3(), true)); 4284f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org} 4285f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org 4286f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org 4287f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.orgbool Map::is_deprecated() { 4288f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org return Deprecated::decode(bit_field3()); 4289f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org} 4290f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org 4291f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org 4292594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.orgvoid Map::set_migration_target(bool value) { 4293594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.org set_bit_field3(IsMigrationTarget::update(bit_field3(), value)); 4294594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.org} 4295594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.org 4296594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.org 4297594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.orgbool Map::is_migration_target() { 4298594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.org return IsMigrationTarget::decode(bit_field3()); 4299594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.org} 4300594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.org 4301594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.org 4302011a81ffd5df0e081e7c00ef430b2fec5079bf2amachenbach@chromium.orgvoid Map::set_done_inobject_slack_tracking(bool value) { 4303011a81ffd5df0e081e7c00ef430b2fec5079bf2amachenbach@chromium.org set_bit_field3(DoneInobjectSlackTracking::update(bit_field3(), value)); 4304011a81ffd5df0e081e7c00ef430b2fec5079bf2amachenbach@chromium.org} 4305011a81ffd5df0e081e7c00ef430b2fec5079bf2amachenbach@chromium.org 4306011a81ffd5df0e081e7c00ef430b2fec5079bf2amachenbach@chromium.org 4307011a81ffd5df0e081e7c00ef430b2fec5079bf2amachenbach@chromium.orgbool Map::done_inobject_slack_tracking() { 4308011a81ffd5df0e081e7c00ef430b2fec5079bf2amachenbach@chromium.org return DoneInobjectSlackTracking::decode(bit_field3()); 4309011a81ffd5df0e081e7c00ef430b2fec5079bf2amachenbach@chromium.org} 4310011a81ffd5df0e081e7c00ef430b2fec5079bf2amachenbach@chromium.org 4311011a81ffd5df0e081e7c00ef430b2fec5079bf2amachenbach@chromium.org 4312011a81ffd5df0e081e7c00ef430b2fec5079bf2amachenbach@chromium.orgvoid Map::set_construction_count(int value) { 4313011a81ffd5df0e081e7c00ef430b2fec5079bf2amachenbach@chromium.org set_bit_field3(ConstructionCount::update(bit_field3(), value)); 4314011a81ffd5df0e081e7c00ef430b2fec5079bf2amachenbach@chromium.org} 4315011a81ffd5df0e081e7c00ef430b2fec5079bf2amachenbach@chromium.org 4316011a81ffd5df0e081e7c00ef430b2fec5079bf2amachenbach@chromium.org 4317011a81ffd5df0e081e7c00ef430b2fec5079bf2amachenbach@chromium.orgint Map::construction_count() { 4318011a81ffd5df0e081e7c00ef430b2fec5079bf2amachenbach@chromium.org return ConstructionCount::decode(bit_field3()); 4319011a81ffd5df0e081e7c00ef430b2fec5079bf2amachenbach@chromium.org} 4320011a81ffd5df0e081e7c00ef430b2fec5079bf2amachenbach@chromium.org 4321011a81ffd5df0e081e7c00ef430b2fec5079bf2amachenbach@chromium.org 4322a53e8e03bcb23716d1025de362626f90f00da892svenpanne@chromium.orgvoid Map::freeze() { 4323a53e8e03bcb23716d1025de362626f90f00da892svenpanne@chromium.org set_bit_field3(IsFrozen::update(bit_field3(), true)); 4324a53e8e03bcb23716d1025de362626f90f00da892svenpanne@chromium.org} 4325a53e8e03bcb23716d1025de362626f90f00da892svenpanne@chromium.org 4326a53e8e03bcb23716d1025de362626f90f00da892svenpanne@chromium.org 4327a53e8e03bcb23716d1025de362626f90f00da892svenpanne@chromium.orgbool Map::is_frozen() { 4328a53e8e03bcb23716d1025de362626f90f00da892svenpanne@chromium.org return IsFrozen::decode(bit_field3()); 4329a53e8e03bcb23716d1025de362626f90f00da892svenpanne@chromium.org} 4330a53e8e03bcb23716d1025de362626f90f00da892svenpanne@chromium.org 4331a53e8e03bcb23716d1025de362626f90f00da892svenpanne@chromium.org 4332d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.orgvoid Map::mark_unstable() { 4333d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org set_bit_field3(IsUnstable::update(bit_field3(), true)); 4334d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org} 4335d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org 4336d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org 4337d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.orgbool Map::is_stable() { 4338d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org return !IsUnstable::decode(bit_field3()); 4339d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org} 4340d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org 4341d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org 4342ba72ec861b69b67139c93fc6dd56f4a73c9b3135jkummerow@chromium.orgbool Map::has_code_cache() { 4343ba72ec861b69b67139c93fc6dd56f4a73c9b3135jkummerow@chromium.org return code_cache() != GetIsolate()->heap()->empty_fixed_array(); 4344ba72ec861b69b67139c93fc6dd56f4a73c9b3135jkummerow@chromium.org} 4345ba72ec861b69b67139c93fc6dd56f4a73c9b3135jkummerow@chromium.org 4346ba72ec861b69b67139c93fc6dd56f4a73c9b3135jkummerow@chromium.org 4347f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.orgbool Map::CanBeDeprecated() { 4348f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org int descriptor = LastAdded(); 4349f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org for (int i = 0; i <= descriptor; i++) { 4350f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org PropertyDetails details = instance_descriptors()->GetDetails(i); 4351bc176057ae476990672de915df235c9aeadc8521titzer@chromium.org if (details.representation().IsNone()) return true; 4352bc176057ae476990672de915df235c9aeadc8521titzer@chromium.org if (details.representation().IsSmi()) return true; 4353bc176057ae476990672de915df235c9aeadc8521titzer@chromium.org if (details.representation().IsDouble()) return true; 4354bc176057ae476990672de915df235c9aeadc8521titzer@chromium.org if (details.representation().IsHeapObject()) return true; 4355bc176057ae476990672de915df235c9aeadc8521titzer@chromium.org if (details.type() == CONSTANT) return true; 4356f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org } 4357f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org return false; 4358f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org} 4359f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org 4360f005df6c3232e65028420519fbab7284bc9b33aedanno@chromium.org 43612e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.orgvoid Map::NotifyLeafMapLayoutChange() { 4362d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org if (is_stable()) { 4363d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org mark_unstable(); 4364d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org dependent_code()->DeoptimizeDependentCodeGroup( 4365d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org GetIsolate(), 4366d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org DependentCode::kPrototypeCheckGroup); 4367d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org } 43682e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org} 43692e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org 43702e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org 4371c73d55b355913690124f3ee70c344035431cdd3ayangguo@chromium.orgbool Map::CanOmitMapChecks() { 4372d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org return is_stable() && FLAG_omit_map_checks_for_leaf_maps; 4373c73d55b355913690124f3ee70c344035431cdd3ayangguo@chromium.org} 4374c73d55b355913690124f3ee70c344035431cdd3ayangguo@chromium.org 4375c73d55b355913690124f3ee70c344035431cdd3ayangguo@chromium.org 43762e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.orgint DependentCode::number_of_entries(DependencyGroup group) { 4377003650ee766f5e92756d470a37973fd371757485yangguo@chromium.org if (length() == 0) return 0; 43782e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org return Smi::cast(get(group))->value(); 4379003650ee766f5e92756d470a37973fd371757485yangguo@chromium.org} 4380003650ee766f5e92756d470a37973fd371757485yangguo@chromium.org 4381003650ee766f5e92756d470a37973fd371757485yangguo@chromium.org 43822e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.orgvoid DependentCode::set_number_of_entries(DependencyGroup group, int value) { 43832e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org set(group, Smi::FromInt(value)); 4384003650ee766f5e92756d470a37973fd371757485yangguo@chromium.org} 4385003650ee766f5e92756d470a37973fd371757485yangguo@chromium.org 4386003650ee766f5e92756d470a37973fd371757485yangguo@chromium.org 438741728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.orgbool DependentCode::is_code_at(int i) { 438841728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org return get(kCodesStartIndex + i)->IsCode(); 438941728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org} 439041728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org 43912e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.orgCode* DependentCode::code_at(int i) { 43922e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org return Code::cast(get(kCodesStartIndex + i)); 4393003650ee766f5e92756d470a37973fd371757485yangguo@chromium.org} 4394003650ee766f5e92756d470a37973fd371757485yangguo@chromium.org 4395003650ee766f5e92756d470a37973fd371757485yangguo@chromium.org 439641728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.orgCompilationInfo* DependentCode::compilation_info_at(int i) { 439741728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org return reinterpret_cast<CompilationInfo*>( 439841728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org Foreign::cast(get(kCodesStartIndex + i))->foreign_address()); 43991fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org} 44001fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org 44011fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org 440241728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.orgvoid DependentCode::set_object_at(int i, Object* object) { 440341728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org set(kCodesStartIndex + i, object); 440441728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org} 440541728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org 440641728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org 440741728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.orgObject* DependentCode::object_at(int i) { 440841728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org return get(kCodesStartIndex + i); 440941728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org} 441041728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org 441141728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org 441241728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.orgObject** DependentCode::slot_at(int i) { 44134954674151afa960af66efb4831df06bde727333yangguo@chromium.org return RawFieldOfElementAt(kCodesStartIndex + i); 4414003650ee766f5e92756d470a37973fd371757485yangguo@chromium.org} 4415003650ee766f5e92756d470a37973fd371757485yangguo@chromium.org 4416003650ee766f5e92756d470a37973fd371757485yangguo@chromium.org 441741728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.orgvoid DependentCode::clear_at(int i) { 44182e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org set_undefined(kCodesStartIndex + i); 44192e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org} 44202e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org 44212e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org 442241728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.orgvoid DependentCode::copy(int from, int to) { 442341728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org set(kCodesStartIndex + to, get(kCodesStartIndex + from)); 442441728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org} 442541728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org 442641728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org 44272e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.orgvoid DependentCode::ExtendGroup(DependencyGroup group) { 44282e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org GroupStartIndexes starts(this); 44292e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org for (int g = kGroupCount - 1; g > group; g--) { 44302e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org if (starts.at(g) < starts.at(g + 1)) { 443141728483f231e098a8dd85f109b5a30e6ccc3c39danno@chromium.org copy(starts.at(g), starts.at(g + 1)); 44322e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org } 44332e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.org } 4434003650ee766f5e92756d470a37973fd371757485yangguo@chromium.org} 4435003650ee766f5e92756d470a37973fd371757485yangguo@chromium.org 4436003650ee766f5e92756d470a37973fd371757485yangguo@chromium.org 443743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid Code::set_flags(Code::Flags flags) { 443883e168294456ca2f02db421a635f7d5f5d023966kmillikin@chromium.org STATIC_ASSERT(Code::NUMBER_OF_KINDS <= KindField::kMax + 1); 443943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen WRITE_INT_FIELD(this, kFlagsOffset, flags); 444043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 444143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 444243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 444343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenCode::Kind Code::kind() { 444443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return ExtractKindFromFlags(flags()); 444543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 444643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 444743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 44487276f14ca716596e0a0d17539516370c1f453847kasper.lundInlineCacheState Code::ic_state() { 44497276f14ca716596e0a0d17539516370c1f453847kasper.lund InlineCacheState result = ExtractICStateFromFlags(flags()); 445043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // Only allow uninitialized or debugger states for non-IC code 445143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // objects. This is used in the debugger to determine whether or not 445243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // a call to code object has been replaced with a debug break call. 445343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen ASSERT(is_inline_cache_stub() || 445443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen result == UNINITIALIZED || 44559768bf12a67dd4585cf1a62928708883161f64c3yangguo@chromium.org result == DEBUG_STUB); 445643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return result; 445743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 445843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 445943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 4460cc536058448cdb26fedf76ce62f2ce91480f2ae3yangguo@chromium.orgExtraICState Code::extra_ic_state() { 4461052c9560e8a41c723726ebe914a93747d8f13285hpayer@chromium.org ASSERT(is_inline_cache_stub() || ic_state() == DEBUG_STUB); 4462f5a24546072ecdbbd6372c85c42157e01e913561titzer@chromium.org return ExtractExtraICStateFromFlags(flags()); 4463052c9560e8a41c723726ebe914a93747d8f13285hpayer@chromium.org} 4464052c9560e8a41c723726ebe914a93747d8f13285hpayer@chromium.org 4465052c9560e8a41c723726ebe914a93747d8f13285hpayer@chromium.org 44667a6fc815d62905d0c52705b96225b1bd23e00a43jkummerow@chromium.orgCode::StubType Code::type() { 446743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return ExtractTypeFromFlags(flags()); 446843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 446943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 447043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 4471113035e2f19feb7032fbe57b2e3e376f1dfc4110jkummerow@chromium.org// For initialization. 4472113035e2f19feb7032fbe57b2e3e376f1dfc4110jkummerow@chromium.orgvoid Code::set_raw_kind_specific_flags1(int value) { 4473113035e2f19feb7032fbe57b2e3e376f1dfc4110jkummerow@chromium.org WRITE_INT_FIELD(this, kKindSpecificFlags1Offset, value); 4474113035e2f19feb7032fbe57b2e3e376f1dfc4110jkummerow@chromium.org} 4475113035e2f19feb7032fbe57b2e3e376f1dfc4110jkummerow@chromium.org 4476113035e2f19feb7032fbe57b2e3e376f1dfc4110jkummerow@chromium.org 4477113035e2f19feb7032fbe57b2e3e376f1dfc4110jkummerow@chromium.orgvoid Code::set_raw_kind_specific_flags2(int value) { 4478113035e2f19feb7032fbe57b2e3e376f1dfc4110jkummerow@chromium.org WRITE_INT_FIELD(this, kKindSpecificFlags2Offset, value); 4479113035e2f19feb7032fbe57b2e3e376f1dfc4110jkummerow@chromium.org} 4480113035e2f19feb7032fbe57b2e3e376f1dfc4110jkummerow@chromium.org 4481113035e2f19feb7032fbe57b2e3e376f1dfc4110jkummerow@chromium.org 4482b228be01a466e0ba4d8389148671d196b2081f76mstarzinger@chromium.orginline bool Code::is_crankshafted() { 4483b228be01a466e0ba4d8389148671d196b2081f76mstarzinger@chromium.org return IsCrankshaftedField::decode( 4484b228be01a466e0ba4d8389148671d196b2081f76mstarzinger@chromium.org READ_UINT32_FIELD(this, kKindSpecificFlags2Offset)); 4485b228be01a466e0ba4d8389148671d196b2081f76mstarzinger@chromium.org} 4486b228be01a466e0ba4d8389148671d196b2081f76mstarzinger@chromium.org 4487b228be01a466e0ba4d8389148671d196b2081f76mstarzinger@chromium.org 4488b228be01a466e0ba4d8389148671d196b2081f76mstarzinger@chromium.orginline void Code::set_is_crankshafted(bool value) { 4489b228be01a466e0ba4d8389148671d196b2081f76mstarzinger@chromium.org int previous = READ_UINT32_FIELD(this, kKindSpecificFlags2Offset); 4490b228be01a466e0ba4d8389148671d196b2081f76mstarzinger@chromium.org int updated = IsCrankshaftedField::update(previous, value); 4491b228be01a466e0ba4d8389148671d196b2081f76mstarzinger@chromium.org WRITE_UINT32_FIELD(this, kKindSpecificFlags2Offset, updated); 4492b228be01a466e0ba4d8389148671d196b2081f76mstarzinger@chromium.org} 4493b228be01a466e0ba4d8389148671d196b2081f76mstarzinger@chromium.org 4494b228be01a466e0ba4d8389148671d196b2081f76mstarzinger@chromium.org 4495d236f4d96b5dd21acc5ec57f4e50fa97cdd97bb6ricow@chromium.orgint Code::major_key() { 449690dca01eac542464c29011d239bf18f26e0b8f00machenbach@chromium.org ASSERT(has_major_key()); 449781cac2ba397bd57f2967c8b4b677bef08a869991danno@chromium.org return StubMajorKeyField::decode( 449881cac2ba397bd57f2967c8b4b677bef08a869991danno@chromium.org READ_UINT32_FIELD(this, kKindSpecificFlags2Offset)); 44997276f14ca716596e0a0d17539516370c1f453847kasper.lund} 45007276f14ca716596e0a0d17539516370c1f453847kasper.lund 45017276f14ca716596e0a0d17539516370c1f453847kasper.lund 4502d236f4d96b5dd21acc5ec57f4e50fa97cdd97bb6ricow@chromium.orgvoid Code::set_major_key(int major) { 450390dca01eac542464c29011d239bf18f26e0b8f00machenbach@chromium.org ASSERT(has_major_key()); 45047276f14ca716596e0a0d17539516370c1f453847kasper.lund ASSERT(0 <= major && major < 256); 450581cac2ba397bd57f2967c8b4b677bef08a869991danno@chromium.org int previous = READ_UINT32_FIELD(this, kKindSpecificFlags2Offset); 450681cac2ba397bd57f2967c8b4b677bef08a869991danno@chromium.org int updated = StubMajorKeyField::update(previous, major); 450781cac2ba397bd57f2967c8b4b677bef08a869991danno@chromium.org WRITE_UINT32_FIELD(this, kKindSpecificFlags2Offset, updated); 450843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 450943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 451043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 451190dca01eac542464c29011d239bf18f26e0b8f00machenbach@chromium.orgbool Code::has_major_key() { 451290dca01eac542464c29011d239bf18f26e0b8f00machenbach@chromium.org return kind() == STUB || 451390dca01eac542464c29011d239bf18f26e0b8f00machenbach@chromium.org kind() == HANDLER || 451490dca01eac542464c29011d239bf18f26e0b8f00machenbach@chromium.org kind() == BINARY_OP_IC || 451590dca01eac542464c29011d239bf18f26e0b8f00machenbach@chromium.org kind() == COMPARE_IC || 451690dca01eac542464c29011d239bf18f26e0b8f00machenbach@chromium.org kind() == COMPARE_NIL_IC || 451790dca01eac542464c29011d239bf18f26e0b8f00machenbach@chromium.org kind() == LOAD_IC || 451890dca01eac542464c29011d239bf18f26e0b8f00machenbach@chromium.org kind() == KEYED_LOAD_IC || 451990dca01eac542464c29011d239bf18f26e0b8f00machenbach@chromium.org kind() == STORE_IC || 4520a86d416fb652b1936026eee315eccd4f17ca1002machenbach@chromium.org kind() == CALL_IC || 452190dca01eac542464c29011d239bf18f26e0b8f00machenbach@chromium.org kind() == KEYED_STORE_IC || 452290dca01eac542464c29011d239bf18f26e0b8f00machenbach@chromium.org kind() == TO_BOOLEAN_IC; 452390dca01eac542464c29011d239bf18f26e0b8f00machenbach@chromium.org} 452490dca01eac542464c29011d239bf18f26e0b8f00machenbach@chromium.org 452590dca01eac542464c29011d239bf18f26e0b8f00machenbach@chromium.org 4526a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.orgbool Code::optimizable() { 45277d10be581a91ab5eefa1139ff0b86c64ac8f6e59fschneider@chromium.org ASSERT_EQ(FUNCTION, kind()); 4528a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org return READ_BYTE_FIELD(this, kOptimizableOffset) == 1; 4529a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org} 4530a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org 4531a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org 4532a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.orgvoid Code::set_optimizable(bool value) { 45337d10be581a91ab5eefa1139ff0b86c64ac8f6e59fschneider@chromium.org ASSERT_EQ(FUNCTION, kind()); 4534a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org WRITE_BYTE_FIELD(this, kOptimizableOffset, value ? 1 : 0); 4535a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org} 4536a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org 4537a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org 4538a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.orgbool Code::has_deoptimization_support() { 45397d10be581a91ab5eefa1139ff0b86c64ac8f6e59fschneider@chromium.org ASSERT_EQ(FUNCTION, kind()); 454034e60787ea1e76f3ee49e859f71f036170c21f0elrn@chromium.org byte flags = READ_BYTE_FIELD(this, kFullCodeFlags); 454134e60787ea1e76f3ee49e859f71f036170c21f0elrn@chromium.org return FullCodeFlagsHasDeoptimizationSupportField::decode(flags); 4542a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org} 4543a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org 4544a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org 4545a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.orgvoid Code::set_has_deoptimization_support(bool value) { 45467d10be581a91ab5eefa1139ff0b86c64ac8f6e59fschneider@chromium.org ASSERT_EQ(FUNCTION, kind()); 454734e60787ea1e76f3ee49e859f71f036170c21f0elrn@chromium.org byte flags = READ_BYTE_FIELD(this, kFullCodeFlags); 454834e60787ea1e76f3ee49e859f71f036170c21f0elrn@chromium.org flags = FullCodeFlagsHasDeoptimizationSupportField::update(flags, value); 454934e60787ea1e76f3ee49e859f71f036170c21f0elrn@chromium.org WRITE_BYTE_FIELD(this, kFullCodeFlags, flags); 455034e60787ea1e76f3ee49e859f71f036170c21f0elrn@chromium.org} 455134e60787ea1e76f3ee49e859f71f036170c21f0elrn@chromium.org 455234e60787ea1e76f3ee49e859f71f036170c21f0elrn@chromium.org 455334e60787ea1e76f3ee49e859f71f036170c21f0elrn@chromium.orgbool Code::has_debug_break_slots() { 45547d10be581a91ab5eefa1139ff0b86c64ac8f6e59fschneider@chromium.org ASSERT_EQ(FUNCTION, kind()); 455534e60787ea1e76f3ee49e859f71f036170c21f0elrn@chromium.org byte flags = READ_BYTE_FIELD(this, kFullCodeFlags); 455634e60787ea1e76f3ee49e859f71f036170c21f0elrn@chromium.org return FullCodeFlagsHasDebugBreakSlotsField::decode(flags); 455734e60787ea1e76f3ee49e859f71f036170c21f0elrn@chromium.org} 455834e60787ea1e76f3ee49e859f71f036170c21f0elrn@chromium.org 455934e60787ea1e76f3ee49e859f71f036170c21f0elrn@chromium.org 456034e60787ea1e76f3ee49e859f71f036170c21f0elrn@chromium.orgvoid Code::set_has_debug_break_slots(bool value) { 45617d10be581a91ab5eefa1139ff0b86c64ac8f6e59fschneider@chromium.org ASSERT_EQ(FUNCTION, kind()); 456234e60787ea1e76f3ee49e859f71f036170c21f0elrn@chromium.org byte flags = READ_BYTE_FIELD(this, kFullCodeFlags); 456334e60787ea1e76f3ee49e859f71f036170c21f0elrn@chromium.org flags = FullCodeFlagsHasDebugBreakSlotsField::update(flags, value); 456434e60787ea1e76f3ee49e859f71f036170c21f0elrn@chromium.org WRITE_BYTE_FIELD(this, kFullCodeFlags, flags); 4565a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org} 4566a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org 4567a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org 4568394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.combool Code::is_compiled_optimizable() { 45697d10be581a91ab5eefa1139ff0b86c64ac8f6e59fschneider@chromium.org ASSERT_EQ(FUNCTION, kind()); 4570394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com byte flags = READ_BYTE_FIELD(this, kFullCodeFlags); 4571394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com return FullCodeFlagsIsCompiledOptimizable::decode(flags); 4572394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com} 4573394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com 4574394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com 4575394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.comvoid Code::set_compiled_optimizable(bool value) { 45767d10be581a91ab5eefa1139ff0b86c64ac8f6e59fschneider@chromium.org ASSERT_EQ(FUNCTION, kind()); 4577394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com byte flags = READ_BYTE_FIELD(this, kFullCodeFlags); 4578394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com flags = FullCodeFlagsIsCompiledOptimizable::update(flags, value); 4579394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com WRITE_BYTE_FIELD(this, kFullCodeFlags, flags); 4580394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com} 4581394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com 4582394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com 45831456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.orgint Code::allow_osr_at_loop_nesting_level() { 45847d10be581a91ab5eefa1139ff0b86c64ac8f6e59fschneider@chromium.org ASSERT_EQ(FUNCTION, kind()); 45851456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org return READ_BYTE_FIELD(this, kAllowOSRAtLoopNestingLevelOffset); 4586a7d3df915ae6a29cd392dba32a26049d7b9b008fyangguo@chromium.org} 4587a7d3df915ae6a29cd392dba32a26049d7b9b008fyangguo@chromium.org 4588a7d3df915ae6a29cd392dba32a26049d7b9b008fyangguo@chromium.org 45891456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.orgvoid Code::set_allow_osr_at_loop_nesting_level(int level) { 45907d10be581a91ab5eefa1139ff0b86c64ac8f6e59fschneider@chromium.org ASSERT_EQ(FUNCTION, kind()); 45911456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org ASSERT(level >= 0 && level <= kMaxLoopNestingMarker); 45921456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org WRITE_BYTE_FIELD(this, kAllowOSRAtLoopNestingLevelOffset, level); 4593a7d3df915ae6a29cd392dba32a26049d7b9b008fyangguo@chromium.org} 4594a7d3df915ae6a29cd392dba32a26049d7b9b008fyangguo@chromium.org 4595a7d3df915ae6a29cd392dba32a26049d7b9b008fyangguo@chromium.org 45961456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.orgint Code::profiler_ticks() { 45977d10be581a91ab5eefa1139ff0b86c64ac8f6e59fschneider@chromium.org ASSERT_EQ(FUNCTION, kind()); 45981456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org return READ_BYTE_FIELD(this, kProfilerTicksOffset); 4599a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org} 4600a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org 4601a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org 46021456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.orgvoid Code::set_profiler_ticks(int ticks) { 46037d10be581a91ab5eefa1139ff0b86c64ac8f6e59fschneider@chromium.org ASSERT_EQ(FUNCTION, kind()); 46041456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org ASSERT(ticks < 256); 46051456e708d277e725ca42a03463af16fe471c9210jkummerow@chromium.org WRITE_BYTE_FIELD(this, kProfilerTicksOffset, ticks); 4606a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org} 4607a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org 4608a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org 4609a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.orgunsigned Code::stack_slots() { 4610b228be01a466e0ba4d8389148671d196b2081f76mstarzinger@chromium.org ASSERT(is_crankshafted()); 461181cac2ba397bd57f2967c8b4b677bef08a869991danno@chromium.org return StackSlotsField::decode( 461281cac2ba397bd57f2967c8b4b677bef08a869991danno@chromium.org READ_UINT32_FIELD(this, kKindSpecificFlags1Offset)); 4613a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org} 4614a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org 4615a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org 4616a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.orgvoid Code::set_stack_slots(unsigned slots) { 461781cac2ba397bd57f2967c8b4b677bef08a869991danno@chromium.org CHECK(slots <= (1 << kStackSlotsBitCount)); 4618b228be01a466e0ba4d8389148671d196b2081f76mstarzinger@chromium.org ASSERT(is_crankshafted()); 461981cac2ba397bd57f2967c8b4b677bef08a869991danno@chromium.org int previous = READ_UINT32_FIELD(this, kKindSpecificFlags1Offset); 462081cac2ba397bd57f2967c8b4b677bef08a869991danno@chromium.org int updated = StackSlotsField::update(previous, slots); 462181cac2ba397bd57f2967c8b4b677bef08a869991danno@chromium.org WRITE_UINT32_FIELD(this, kKindSpecificFlags1Offset, updated); 4622a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org} 4623a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org 4624a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org 462583aa54905e559090bea7771b83f188762cfcf082ricow@chromium.orgunsigned Code::safepoint_table_offset() { 4626b228be01a466e0ba4d8389148671d196b2081f76mstarzinger@chromium.org ASSERT(is_crankshafted()); 462781cac2ba397bd57f2967c8b4b677bef08a869991danno@chromium.org return SafepointTableOffsetField::decode( 462881cac2ba397bd57f2967c8b4b677bef08a869991danno@chromium.org READ_UINT32_FIELD(this, kKindSpecificFlags2Offset)); 4629a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org} 4630a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org 4631a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org 463283aa54905e559090bea7771b83f188762cfcf082ricow@chromium.orgvoid Code::set_safepoint_table_offset(unsigned offset) { 463381cac2ba397bd57f2967c8b4b677bef08a869991danno@chromium.org CHECK(offset <= (1 << kSafepointTableOffsetBitCount)); 4634b228be01a466e0ba4d8389148671d196b2081f76mstarzinger@chromium.org ASSERT(is_crankshafted()); 4635a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org ASSERT(IsAligned(offset, static_cast<unsigned>(kIntSize))); 463681cac2ba397bd57f2967c8b4b677bef08a869991danno@chromium.org int previous = READ_UINT32_FIELD(this, kKindSpecificFlags2Offset); 463781cac2ba397bd57f2967c8b4b677bef08a869991danno@chromium.org int updated = SafepointTableOffsetField::update(previous, offset); 463881cac2ba397bd57f2967c8b4b677bef08a869991danno@chromium.org WRITE_UINT32_FIELD(this, kKindSpecificFlags2Offset, updated); 4639a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org} 4640a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org 4641a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org 4642e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.orgunsigned Code::back_edge_table_offset() { 46437d10be581a91ab5eefa1139ff0b86c64ac8f6e59fschneider@chromium.org ASSERT_EQ(FUNCTION, kind()); 4644e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org return BackEdgeTableOffsetField::decode( 464581cac2ba397bd57f2967c8b4b677bef08a869991danno@chromium.org READ_UINT32_FIELD(this, kKindSpecificFlags2Offset)); 4646a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org} 4647a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org 4648a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org 4649e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.orgvoid Code::set_back_edge_table_offset(unsigned offset) { 46507d10be581a91ab5eefa1139ff0b86c64ac8f6e59fschneider@chromium.org ASSERT_EQ(FUNCTION, kind()); 4651a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org ASSERT(IsAligned(offset, static_cast<unsigned>(kIntSize))); 465281cac2ba397bd57f2967c8b4b677bef08a869991danno@chromium.org int previous = READ_UINT32_FIELD(this, kKindSpecificFlags2Offset); 4653e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org int updated = BackEdgeTableOffsetField::update(previous, offset); 465481cac2ba397bd57f2967c8b4b677bef08a869991danno@chromium.org WRITE_UINT32_FIELD(this, kKindSpecificFlags2Offset, updated); 4655a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org} 4656a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org 4657a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org 4658e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.orgbool Code::back_edges_patched_for_osr() { 46596e196bfaf0e555d0c835390bb6ebc0a74484491dulan@chromium.org ASSERT_EQ(FUNCTION, kind()); 4660e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org return BackEdgesPatchedForOSRField::decode( 46616e196bfaf0e555d0c835390bb6ebc0a74484491dulan@chromium.org READ_UINT32_FIELD(this, kKindSpecificFlags2Offset)); 46626e196bfaf0e555d0c835390bb6ebc0a74484491dulan@chromium.org} 46636e196bfaf0e555d0c835390bb6ebc0a74484491dulan@chromium.org 46646e196bfaf0e555d0c835390bb6ebc0a74484491dulan@chromium.org 4665e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.orgvoid Code::set_back_edges_patched_for_osr(bool value) { 46666e196bfaf0e555d0c835390bb6ebc0a74484491dulan@chromium.org ASSERT_EQ(FUNCTION, kind()); 46676e196bfaf0e555d0c835390bb6ebc0a74484491dulan@chromium.org int previous = READ_UINT32_FIELD(this, kKindSpecificFlags2Offset); 4668e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org int updated = BackEdgesPatchedForOSRField::update(previous, value); 46696e196bfaf0e555d0c835390bb6ebc0a74484491dulan@chromium.org WRITE_UINT32_FIELD(this, kKindSpecificFlags2Offset, updated); 46706e196bfaf0e555d0c835390bb6ebc0a74484491dulan@chromium.org} 46716e196bfaf0e555d0c835390bb6ebc0a74484491dulan@chromium.org 46726e196bfaf0e555d0c835390bb6ebc0a74484491dulan@chromium.org 46736e196bfaf0e555d0c835390bb6ebc0a74484491dulan@chromium.org 46749fa09679c31dd1fc79a07ed24431b6951227240aricow@chromium.orgbyte Code::to_boolean_state() { 4675f5a24546072ecdbbd6372c85c42157e01e913561titzer@chromium.org return extra_ic_state(); 46769fa09679c31dd1fc79a07ed24431b6951227240aricow@chromium.org} 46779fa09679c31dd1fc79a07ed24431b6951227240aricow@chromium.org 4678c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com 4679c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.combool Code::has_function_cache() { 4680c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com ASSERT(kind() == STUB); 468181cac2ba397bd57f2967c8b4b677bef08a869991danno@chromium.org return HasFunctionCacheField::decode( 468281cac2ba397bd57f2967c8b4b677bef08a869991danno@chromium.org READ_UINT32_FIELD(this, kKindSpecificFlags1Offset)); 4683c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com} 4684c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com 4685c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com 4686c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.comvoid Code::set_has_function_cache(bool flag) { 4687c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com ASSERT(kind() == STUB); 468881cac2ba397bd57f2967c8b4b677bef08a869991danno@chromium.org int previous = READ_UINT32_FIELD(this, kKindSpecificFlags1Offset); 468981cac2ba397bd57f2967c8b4b677bef08a869991danno@chromium.org int updated = HasFunctionCacheField::update(previous, flag); 469081cac2ba397bd57f2967c8b4b677bef08a869991danno@chromium.org WRITE_UINT32_FIELD(this, kKindSpecificFlags1Offset, updated); 4691c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com} 4692c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com 4693c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com 4694003650ee766f5e92756d470a37973fd371757485yangguo@chromium.orgbool Code::marked_for_deoptimization() { 4695003650ee766f5e92756d470a37973fd371757485yangguo@chromium.org ASSERT(kind() == OPTIMIZED_FUNCTION); 4696003650ee766f5e92756d470a37973fd371757485yangguo@chromium.org return MarkedForDeoptimizationField::decode( 4697003650ee766f5e92756d470a37973fd371757485yangguo@chromium.org READ_UINT32_FIELD(this, kKindSpecificFlags1Offset)); 4698003650ee766f5e92756d470a37973fd371757485yangguo@chromium.org} 4699003650ee766f5e92756d470a37973fd371757485yangguo@chromium.org 4700003650ee766f5e92756d470a37973fd371757485yangguo@chromium.org 4701003650ee766f5e92756d470a37973fd371757485yangguo@chromium.orgvoid Code::set_marked_for_deoptimization(bool flag) { 4702003650ee766f5e92756d470a37973fd371757485yangguo@chromium.org ASSERT(kind() == OPTIMIZED_FUNCTION); 4703a70700b91bc28abeed6373b856017f7f9cc8273bmachenbach@chromium.org ASSERT(!flag || AllowDeoptimization::IsAllowed(GetIsolate())); 4704003650ee766f5e92756d470a37973fd371757485yangguo@chromium.org int previous = READ_UINT32_FIELD(this, kKindSpecificFlags1Offset); 4705003650ee766f5e92756d470a37973fd371757485yangguo@chromium.org int updated = MarkedForDeoptimizationField::update(previous, flag); 4706003650ee766f5e92756d470a37973fd371757485yangguo@chromium.org WRITE_UINT32_FIELD(this, kKindSpecificFlags1Offset, updated); 4707003650ee766f5e92756d470a37973fd371757485yangguo@chromium.org} 4708003650ee766f5e92756d470a37973fd371757485yangguo@chromium.org 4709003650ee766f5e92756d470a37973fd371757485yangguo@chromium.org 47102ebef182c49d59eba907b120c3c2a50808bd1f12machenbach@chromium.orgbool Code::is_weak_stub() { 47112ebef182c49d59eba907b120c3c2a50808bd1f12machenbach@chromium.org return CanBeWeakStub() && WeakStubField::decode( 47122ebef182c49d59eba907b120c3c2a50808bd1f12machenbach@chromium.org READ_UINT32_FIELD(this, kKindSpecificFlags1Offset)); 47132ebef182c49d59eba907b120c3c2a50808bd1f12machenbach@chromium.org} 47142ebef182c49d59eba907b120c3c2a50808bd1f12machenbach@chromium.org 47152ebef182c49d59eba907b120c3c2a50808bd1f12machenbach@chromium.org 47162ebef182c49d59eba907b120c3c2a50808bd1f12machenbach@chromium.orgvoid Code::mark_as_weak_stub() { 47172ebef182c49d59eba907b120c3c2a50808bd1f12machenbach@chromium.org ASSERT(CanBeWeakStub()); 47182ebef182c49d59eba907b120c3c2a50808bd1f12machenbach@chromium.org int previous = READ_UINT32_FIELD(this, kKindSpecificFlags1Offset); 47192ebef182c49d59eba907b120c3c2a50808bd1f12machenbach@chromium.org int updated = WeakStubField::update(previous, true); 47202ebef182c49d59eba907b120c3c2a50808bd1f12machenbach@chromium.org WRITE_UINT32_FIELD(this, kKindSpecificFlags1Offset, updated); 47212ebef182c49d59eba907b120c3c2a50808bd1f12machenbach@chromium.org} 47222ebef182c49d59eba907b120c3c2a50808bd1f12machenbach@chromium.org 47232ebef182c49d59eba907b120c3c2a50808bd1f12machenbach@chromium.org 47242ebef182c49d59eba907b120c3c2a50808bd1f12machenbach@chromium.orgbool Code::is_invalidated_weak_stub() { 47252ebef182c49d59eba907b120c3c2a50808bd1f12machenbach@chromium.org return is_weak_stub() && InvalidatedWeakStubField::decode( 47262ebef182c49d59eba907b120c3c2a50808bd1f12machenbach@chromium.org READ_UINT32_FIELD(this, kKindSpecificFlags1Offset)); 47272ebef182c49d59eba907b120c3c2a50808bd1f12machenbach@chromium.org} 47282ebef182c49d59eba907b120c3c2a50808bd1f12machenbach@chromium.org 47292ebef182c49d59eba907b120c3c2a50808bd1f12machenbach@chromium.org 47302ebef182c49d59eba907b120c3c2a50808bd1f12machenbach@chromium.orgvoid Code::mark_as_invalidated_weak_stub() { 47312ebef182c49d59eba907b120c3c2a50808bd1f12machenbach@chromium.org ASSERT(is_inline_cache_stub()); 47322ebef182c49d59eba907b120c3c2a50808bd1f12machenbach@chromium.org int previous = READ_UINT32_FIELD(this, kKindSpecificFlags1Offset); 47332ebef182c49d59eba907b120c3c2a50808bd1f12machenbach@chromium.org int updated = InvalidatedWeakStubField::update(previous, true); 47342ebef182c49d59eba907b120c3c2a50808bd1f12machenbach@chromium.org WRITE_UINT32_FIELD(this, kKindSpecificFlags1Offset, updated); 47352ebef182c49d59eba907b120c3c2a50808bd1f12machenbach@chromium.org} 47362ebef182c49d59eba907b120c3c2a50808bd1f12machenbach@chromium.org 47372ebef182c49d59eba907b120c3c2a50808bd1f12machenbach@chromium.org 473843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenbool Code::is_inline_cache_stub() { 473943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Kind kind = this->kind(); 47401510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org switch (kind) { 47411510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org#define CASE(name) case name: return true; 47421510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org IC_KIND_LIST(CASE) 47431510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org#undef CASE 47441510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org default: return false; 47451510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org } 474643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 474743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 474843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 4749fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.orgbool Code::is_keyed_stub() { 4750a03ba1e53fa6a04b8e56747536f226380bb6269bmachenbach@chromium.org return is_keyed_load_stub() || is_keyed_store_stub(); 4751fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org} 4752fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org 4753fb7a7c4ffde9a4d060f5f989371e2ce964ee5831jkummerow@chromium.org 4754ec6855e761a7474a580d750a45d748323dd3b7c7verwaest@chromium.orgbool Code::is_debug_stub() { 4755ec6855e761a7474a580d750a45d748323dd3b7c7verwaest@chromium.org return ic_state() == DEBUG_STUB; 47569768bf12a67dd4585cf1a62928708883161f64c3yangguo@chromium.org} 47579768bf12a67dd4585cf1a62928708883161f64c3yangguo@chromium.org 47589768bf12a67dd4585cf1a62928708883161f64c3yangguo@chromium.org 47599ca3017c616a778baff6d57c68d6d4746a130036ulan@chromium.orgConstantPoolArray* Code::constant_pool() { 47609ca3017c616a778baff6d57c68d6d4746a130036ulan@chromium.org return ConstantPoolArray::cast(READ_FIELD(this, kConstantPoolOffset)); 47619ca3017c616a778baff6d57c68d6d4746a130036ulan@chromium.org} 47629ca3017c616a778baff6d57c68d6d4746a130036ulan@chromium.org 47639ca3017c616a778baff6d57c68d6d4746a130036ulan@chromium.org 47649ca3017c616a778baff6d57c68d6d4746a130036ulan@chromium.orgvoid Code::set_constant_pool(Object* value) { 47659ca3017c616a778baff6d57c68d6d4746a130036ulan@chromium.org ASSERT(value->IsConstantPoolArray()); 47669ca3017c616a778baff6d57c68d6d4746a130036ulan@chromium.org WRITE_FIELD(this, kConstantPoolOffset, value); 47679ca3017c616a778baff6d57c68d6d4746a130036ulan@chromium.org WRITE_BARRIER(GetHeap(), this, kConstantPoolOffset, value); 47689ca3017c616a778baff6d57c68d6d4746a130036ulan@chromium.org} 47699ca3017c616a778baff6d57c68d6d4746a130036ulan@chromium.org 47709ca3017c616a778baff6d57c68d6d4746a130036ulan@chromium.org 477143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenCode::Flags Code::ComputeFlags(Kind kind, 47727276f14ca716596e0a0d17539516370c1f453847kasper.lund InlineCacheState ic_state, 47730511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com ExtraICState extra_ic_state, 47747a6fc815d62905d0c52705b96225b1bd23e00a43jkummerow@chromium.org StubType type, 477569ea3965ef6e0d3f020a402cf7e6b96b9cb651aekmillikin@chromium.org InlineCacheHolderFlag holder) { 477643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // Compute the bit mask. 4777876cca833d7212e476250d102cad185cdcfa9dfesvenpanne@chromium.org unsigned int bits = KindField::encode(kind) 477883e168294456ca2f02db421a635f7d5f5d023966kmillikin@chromium.org | ICStateField::encode(ic_state) 477983e168294456ca2f02db421a635f7d5f5d023966kmillikin@chromium.org | TypeField::encode(type) 4780f5a24546072ecdbbd6372c85c42157e01e913561titzer@chromium.org | ExtraICStateField::encode(extra_ic_state) 478183e168294456ca2f02db421a635f7d5f5d023966kmillikin@chromium.org | CacheHolderField::encode(holder); 478283e168294456ca2f02db421a635f7d5f5d023966kmillikin@chromium.org return static_cast<Flags>(bits); 478343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 478443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 478543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 478643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenCode::Flags Code::ComputeMonomorphicFlags(Kind kind, 47870511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com ExtraICState extra_ic_state, 4788b5be0a91a2e75da55653dd3583b7f3c1c54f7309machenbach@chromium.org InlineCacheHolderFlag holder, 4789f5a24546072ecdbbd6372c85c42157e01e913561titzer@chromium.org StubType type) { 4790f5a24546072ecdbbd6372c85c42157e01e913561titzer@chromium.org return ComputeFlags(kind, MONOMORPHIC, extra_ic_state, type, holder); 4791f5a24546072ecdbbd6372c85c42157e01e913561titzer@chromium.org} 4792f5a24546072ecdbbd6372c85c42157e01e913561titzer@chromium.org 4793f5a24546072ecdbbd6372c85c42157e01e913561titzer@chromium.org 4794f5a24546072ecdbbd6372c85c42157e01e913561titzer@chromium.orgCode::Flags Code::ComputeHandlerFlags(Kind handler_kind, 4795f5a24546072ecdbbd6372c85c42157e01e913561titzer@chromium.org StubType type, 4796f5a24546072ecdbbd6372c85c42157e01e913561titzer@chromium.org InlineCacheHolderFlag holder) { 4797f5a24546072ecdbbd6372c85c42157e01e913561titzer@chromium.org return ComputeFlags(Code::HANDLER, MONOMORPHIC, handler_kind, type, holder); 479843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 479943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 480043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 480143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenCode::Kind Code::ExtractKindFromFlags(Flags flags) { 480283e168294456ca2f02db421a635f7d5f5d023966kmillikin@chromium.org return KindField::decode(flags); 480343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 480443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 480543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 48067276f14ca716596e0a0d17539516370c1f453847kasper.lundInlineCacheState Code::ExtractICStateFromFlags(Flags flags) { 480783e168294456ca2f02db421a635f7d5f5d023966kmillikin@chromium.org return ICStateField::decode(flags); 480843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 480943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 481043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 4811cc536058448cdb26fedf76ce62f2ce91480f2ae3yangguo@chromium.orgExtraICState Code::ExtractExtraICStateFromFlags(Flags flags) { 481283e168294456ca2f02db421a635f7d5f5d023966kmillikin@chromium.org return ExtraICStateField::decode(flags); 48130511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com} 48140511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com 48150511e24c6ebf94594a7e03bdcd58157ac2971d69erik.corry@gmail.com 48167a6fc815d62905d0c52705b96225b1bd23e00a43jkummerow@chromium.orgCode::StubType Code::ExtractTypeFromFlags(Flags flags) { 481783e168294456ca2f02db421a635f7d5f5d023966kmillikin@chromium.org return TypeField::decode(flags); 481843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 481943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 482043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 482169ea3965ef6e0d3f020a402cf7e6b96b9cb651aekmillikin@chromium.orgInlineCacheHolderFlag Code::ExtractCacheHolderFromFlags(Flags flags) { 482283e168294456ca2f02db421a635f7d5f5d023966kmillikin@chromium.org return CacheHolderField::decode(flags); 482369ea3965ef6e0d3f020a402cf7e6b96b9cb651aekmillikin@chromium.org} 482469ea3965ef6e0d3f020a402cf7e6b96b9cb651aekmillikin@chromium.org 482569ea3965ef6e0d3f020a402cf7e6b96b9cb651aekmillikin@chromium.org 482643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenCode::Flags Code::RemoveTypeFromFlags(Flags flags) { 482783e168294456ca2f02db421a635f7d5f5d023966kmillikin@chromium.org int bits = flags & ~TypeField::kMask; 482843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return static_cast<Flags>(bits); 482943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 483043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 483143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 48328bb60585bafbf81564e6b30fcf18c82615a76f95ager@chromium.orgCode* Code::GetCodeFromTargetAddress(Address address) { 48338bb60585bafbf81564e6b30fcf18c82615a76f95ager@chromium.org HeapObject* code = HeapObject::FromAddress(address - Code::kHeaderSize); 48348bb60585bafbf81564e6b30fcf18c82615a76f95ager@chromium.org // GetCodeFromTargetAddress might be called when marking objects during mark 48358bb60585bafbf81564e6b30fcf18c82615a76f95ager@chromium.org // sweep. reinterpret_cast is therefore used instead of the more appropriate 48368bb60585bafbf81564e6b30fcf18c82615a76f95ager@chromium.org // Code::cast. Code::cast does not work when the object's map is 48378bb60585bafbf81564e6b30fcf18c82615a76f95ager@chromium.org // marked. 48388bb60585bafbf81564e6b30fcf18c82615a76f95ager@chromium.org Code* result = reinterpret_cast<Code*>(code); 48398bb60585bafbf81564e6b30fcf18c82615a76f95ager@chromium.org return result; 48408bb60585bafbf81564e6b30fcf18c82615a76f95ager@chromium.org} 48418bb60585bafbf81564e6b30fcf18c82615a76f95ager@chromium.org 48428bb60585bafbf81564e6b30fcf18c82615a76f95ager@chromium.org 4843145eff58d4f6ac0dcc53abb556dbf3cac6c3280aerik.corry@gmail.comObject* Code::GetObjectFromEntryAddress(Address location_of_address) { 4844145eff58d4f6ac0dcc53abb556dbf3cac6c3280aerik.corry@gmail.com return HeapObject:: 4845145eff58d4f6ac0dcc53abb556dbf3cac6c3280aerik.corry@gmail.com FromAddress(Memory::Address_at(location_of_address) - Code::kHeaderSize); 4846145eff58d4f6ac0dcc53abb556dbf3cac6c3280aerik.corry@gmail.com} 4847145eff58d4f6ac0dcc53abb556dbf3cac6c3280aerik.corry@gmail.com 4848145eff58d4f6ac0dcc53abb556dbf3cac6c3280aerik.corry@gmail.com 4849f5a24546072ecdbbd6372c85c42157e01e913561titzer@chromium.orgbool Code::IsWeakObjectInOptimizedCode(Object* object) { 48503484964a86451e86dcf04be9bd8c0d76ee04f081rossberg@chromium.org if (!FLAG_collect_maps) return false; 4851f5a24546072ecdbbd6372c85c42157e01e913561titzer@chromium.org if (object->IsMap()) { 4852f5a24546072ecdbbd6372c85c42157e01e913561titzer@chromium.org return Map::cast(object)->CanTransition() && 4853f5a24546072ecdbbd6372c85c42157e01e913561titzer@chromium.org FLAG_weak_embedded_maps_in_optimized_code; 4854f5a24546072ecdbbd6372c85c42157e01e913561titzer@chromium.org } 4855f5a24546072ecdbbd6372c85c42157e01e913561titzer@chromium.org if (object->IsJSObject() || 4856f5a24546072ecdbbd6372c85c42157e01e913561titzer@chromium.org (object->IsCell() && Cell::cast(object)->value()->IsJSObject())) { 4857f5a24546072ecdbbd6372c85c42157e01e913561titzer@chromium.org return FLAG_weak_embedded_objects_in_optimized_code; 4858f5a24546072ecdbbd6372c85c42157e01e913561titzer@chromium.org } 4859f5a24546072ecdbbd6372c85c42157e01e913561titzer@chromium.org return false; 4860f5a24546072ecdbbd6372c85c42157e01e913561titzer@chromium.org} 4861f5a24546072ecdbbd6372c85c42157e01e913561titzer@chromium.org 4862f5a24546072ecdbbd6372c85c42157e01e913561titzer@chromium.org 48639801e3c558f3df82f01ac626b6171032afa33819machenbach@chromium.orgclass Code::FindAndReplacePattern { 48649801e3c558f3df82f01ac626b6171032afa33819machenbach@chromium.org public: 48659801e3c558f3df82f01ac626b6171032afa33819machenbach@chromium.org FindAndReplacePattern() : count_(0) { } 48669801e3c558f3df82f01ac626b6171032afa33819machenbach@chromium.org void Add(Handle<Map> map_to_find, Handle<Object> obj_to_replace) { 48679801e3c558f3df82f01ac626b6171032afa33819machenbach@chromium.org ASSERT(count_ < kMaxCount); 48689801e3c558f3df82f01ac626b6171032afa33819machenbach@chromium.org find_[count_] = map_to_find; 48699801e3c558f3df82f01ac626b6171032afa33819machenbach@chromium.org replace_[count_] = obj_to_replace; 48709801e3c558f3df82f01ac626b6171032afa33819machenbach@chromium.org ++count_; 48719801e3c558f3df82f01ac626b6171032afa33819machenbach@chromium.org } 48729801e3c558f3df82f01ac626b6171032afa33819machenbach@chromium.org private: 48739801e3c558f3df82f01ac626b6171032afa33819machenbach@chromium.org static const int kMaxCount = 4; 48749801e3c558f3df82f01ac626b6171032afa33819machenbach@chromium.org int count_; 48759801e3c558f3df82f01ac626b6171032afa33819machenbach@chromium.org Handle<Map> find_[kMaxCount]; 48769801e3c558f3df82f01ac626b6171032afa33819machenbach@chromium.org Handle<Object> replace_[kMaxCount]; 48779801e3c558f3df82f01ac626b6171032afa33819machenbach@chromium.org friend class Code; 48789801e3c558f3df82f01ac626b6171032afa33819machenbach@chromium.org}; 48799801e3c558f3df82f01ac626b6171032afa33819machenbach@chromium.org 48809801e3c558f3df82f01ac626b6171032afa33819machenbach@chromium.org 48812ebef182c49d59eba907b120c3c2a50808bd1f12machenbach@chromium.orgbool Code::IsWeakObjectInIC(Object* object) { 48822ebef182c49d59eba907b120c3c2a50808bd1f12machenbach@chromium.org return object->IsMap() && Map::cast(object)->CanTransition() && 48832ebef182c49d59eba907b120c3c2a50808bd1f12machenbach@chromium.org FLAG_collect_maps && 48842ebef182c49d59eba907b120c3c2a50808bd1f12machenbach@chromium.org FLAG_weak_embedded_maps_in_ic; 48852ebef182c49d59eba907b120c3c2a50808bd1f12machenbach@chromium.org} 48862ebef182c49d59eba907b120c3c2a50808bd1f12machenbach@chromium.org 48872ebef182c49d59eba907b120c3c2a50808bd1f12machenbach@chromium.org 488843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenObject* Map::prototype() { 488943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return READ_FIELD(this, kPrototypeOffset); 489043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 489143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 489243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 48935a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.orgvoid Map::set_prototype(Object* value, WriteBarrierMode mode) { 4894d6076d96a1411932548838e5960b594564264010erik.corry@gmail.com ASSERT(value->IsNull() || value->IsJSReceiver()); 489543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen WRITE_FIELD(this, kPrototypeOffset, value); 4896c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com CONDITIONAL_WRITE_BARRIER(GetHeap(), this, kPrototypeOffset, value, mode); 489740b9da37a45dabf86bd82a39e885f2921f47fc08fschneider@chromium.org} 489840b9da37a45dabf86bd82a39e885f2921f47fc08fschneider@chromium.org 489940b9da37a45dabf86bd82a39e885f2921f47fc08fschneider@chromium.org 4900de64f721c489207a7b9018406d39c7fb04bb9424verwaest@chromium.org// If the descriptor is using the empty transition array, install a new empty 4901de64f721c489207a7b9018406d39c7fb04bb9424verwaest@chromium.org// transition array that will have place for an element transition. 49022ebef182c49d59eba907b120c3c2a50808bd1f12machenbach@chromium.orgstatic void EnsureHasTransitionArray(Handle<Map> map) { 49032ebef182c49d59eba907b120c3c2a50808bd1f12machenbach@chromium.org Handle<TransitionArray> transitions; 4904c1956679bbba3170352a8cc735e8218f9dbe6867jkummerow@chromium.org if (!map->HasTransitionArray()) { 49052ebef182c49d59eba907b120c3c2a50808bd1f12machenbach@chromium.org transitions = TransitionArray::Allocate(map->GetIsolate(), 0); 490633e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org transitions->set_back_pointer_storage(map->GetBackPointer()); 490789e18f5599cb4cd462cb1ed324addd7388fb4d60rossberg@chromium.org } else if (!map->transitions()->IsFullTransitionArray()) { 49082ebef182c49d59eba907b120c3c2a50808bd1f12machenbach@chromium.org transitions = TransitionArray::ExtendToFullTransitionArray(map); 4909c1956679bbba3170352a8cc735e8218f9dbe6867jkummerow@chromium.org } else { 49102ebef182c49d59eba907b120c3c2a50808bd1f12machenbach@chromium.org return; 491133e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org } 49122ebef182c49d59eba907b120c3c2a50808bd1f12machenbach@chromium.org map->set_transitions(*transitions); 4913de64f721c489207a7b9018406d39c7fb04bb9424verwaest@chromium.org} 4914657d53b99cb4d261f8245bcb4248c39eb0a2b10frossberg@chromium.org 4915657d53b99cb4d261f8245bcb4248c39eb0a2b10frossberg@chromium.org 491689e18f5599cb4cd462cb1ed324addd7388fb4d60rossberg@chromium.orgvoid Map::InitializeDescriptors(DescriptorArray* descriptors) { 4917652f4fa54ed3db06c7223a3faa698e7b0a1d049fverwaest@chromium.org int len = descriptors->number_of_descriptors(); 491889e18f5599cb4cd462cb1ed324addd7388fb4d60rossberg@chromium.org set_instance_descriptors(descriptors); 491906ab2ec756e44eeaf7500b9794f9d2abc79dc8cfverwaest@chromium.org SetNumberOfOwnDescriptors(len); 4920304cc33f8259ef467e8e3c79f448d0bae0e8cd85yangguo@chromium.org} 4921304cc33f8259ef467e8e3c79f448d0bae0e8cd85yangguo@chromium.org 4922304cc33f8259ef467e8e3c79f448d0bae0e8cd85yangguo@chromium.org 492389e18f5599cb4cd462cb1ed324addd7388fb4d60rossberg@chromium.orgACCESSORS(Map, instance_descriptors, DescriptorArray, kDescriptorsOffset) 4924594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.org 4925594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.org 4926594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.orgvoid Map::set_bit_field3(uint32_t bits) { 49273c3c8d733702cb2b41471efa5eead1faf5b5711bmachenbach@chromium.org if (kInt32Size != kPointerSize) { 49283c3c8d733702cb2b41471efa5eead1faf5b5711bmachenbach@chromium.org WRITE_UINT32_FIELD(this, kBitField3Offset + kInt32Size, 0); 49293c3c8d733702cb2b41471efa5eead1faf5b5711bmachenbach@chromium.org } 49303c3c8d733702cb2b41471efa5eead1faf5b5711bmachenbach@chromium.org WRITE_UINT32_FIELD(this, kBitField3Offset, bits); 4931594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.org} 4932594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.org 4933594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.org 4934594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.orguint32_t Map::bit_field3() { 49353c3c8d733702cb2b41471efa5eead1faf5b5711bmachenbach@chromium.org return READ_UINT32_FIELD(this, kBitField3Offset); 4936594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.org} 493740cb878ef373bea9bdf7998829891e4096751dd0danno@chromium.org 493840cb878ef373bea9bdf7998829891e4096751dd0danno@chromium.org 49392ebef182c49d59eba907b120c3c2a50808bd1f12machenbach@chromium.orgvoid Map::AppendDescriptor(Descriptor* desc) { 4940304cc33f8259ef467e8e3c79f448d0bae0e8cd85yangguo@chromium.org DescriptorArray* descriptors = instance_descriptors(); 494146839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org int number_of_own_descriptors = NumberOfOwnDescriptors(); 494233e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org ASSERT(descriptors->number_of_descriptors() == number_of_own_descriptors); 49432ebef182c49d59eba907b120c3c2a50808bd1f12machenbach@chromium.org descriptors->Append(desc); 494446839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org SetNumberOfOwnDescriptors(number_of_own_descriptors + 1); 4945304cc33f8259ef467e8e3c79f448d0bae0e8cd85yangguo@chromium.org} 4946304cc33f8259ef467e8e3c79f448d0bae0e8cd85yangguo@chromium.org 494740cb878ef373bea9bdf7998829891e4096751dd0danno@chromium.org 4948212d964d8f853ddb1fdf3a64037f3af294d55cf3jkummerow@chromium.orgObject* Map::GetBackPointer() { 4949de64f721c489207a7b9018406d39c7fb04bb9424verwaest@chromium.org Object* object = READ_FIELD(this, kTransitionsOrBackPointerOffset); 4950657d53b99cb4d261f8245bcb4248c39eb0a2b10frossberg@chromium.org if (object->IsDescriptorArray()) { 4951de64f721c489207a7b9018406d39c7fb04bb9424verwaest@chromium.org return TransitionArray::cast(object)->back_pointer_storage(); 4952657d53b99cb4d261f8245bcb4248c39eb0a2b10frossberg@chromium.org } else { 4953657d53b99cb4d261f8245bcb4248c39eb0a2b10frossberg@chromium.org ASSERT(object->IsMap() || object->IsUndefined()); 4954657d53b99cb4d261f8245bcb4248c39eb0a2b10frossberg@chromium.org return object; 4955657d53b99cb4d261f8245bcb4248c39eb0a2b10frossberg@chromium.org } 4956212d964d8f853ddb1fdf3a64037f3af294d55cf3jkummerow@chromium.org} 4957212d964d8f853ddb1fdf3a64037f3af294d55cf3jkummerow@chromium.org 4958212d964d8f853ddb1fdf3a64037f3af294d55cf3jkummerow@chromium.org 495999aa490225c81012235659d9a183226b286178c8yangguo@chromium.orgbool Map::HasElementsTransition() { 496099aa490225c81012235659d9a183226b286178c8yangguo@chromium.org return HasTransitionArray() && transitions()->HasElementsTransition(); 496199aa490225c81012235659d9a183226b286178c8yangguo@chromium.org} 496299aa490225c81012235659d9a183226b286178c8yangguo@chromium.org 496399aa490225c81012235659d9a183226b286178c8yangguo@chromium.org 496499aa490225c81012235659d9a183226b286178c8yangguo@chromium.orgbool Map::HasTransitionArray() { 4965de64f721c489207a7b9018406d39c7fb04bb9424verwaest@chromium.org Object* object = READ_FIELD(this, kTransitionsOrBackPointerOffset); 4966de64f721c489207a7b9018406d39c7fb04bb9424verwaest@chromium.org return object->IsTransitionArray(); 496799aa490225c81012235659d9a183226b286178c8yangguo@chromium.org} 496899aa490225c81012235659d9a183226b286178c8yangguo@chromium.org 496999aa490225c81012235659d9a183226b286178c8yangguo@chromium.org 49707028c05c1c71b9d5c5fe1bca01f2461d17a2dda7mmassi@chromium.orgMap* Map::elements_transition_map() { 4971d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org int index = transitions()->Search(GetHeap()->elements_transition_symbol()); 4972d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org return transitions()->GetTarget(index); 49737028c05c1c71b9d5c5fe1bca01f2461d17a2dda7mmassi@chromium.org} 49747028c05c1c71b9d5c5fe1bca01f2461d17a2dda7mmassi@chromium.org 49757028c05c1c71b9d5c5fe1bca01f2461d17a2dda7mmassi@chromium.org 4976b6d052d4d08b0de341804f273713741dee560c5everwaest@chromium.orgbool Map::CanHaveMoreTransitions() { 4977b6d052d4d08b0de341804f273713741dee560c5everwaest@chromium.org if (!HasTransitionArray()) return true; 4978b6d052d4d08b0de341804f273713741dee560c5everwaest@chromium.org return FixedArray::SizeFor(transitions()->length() + 4979b6d052d4d08b0de341804f273713741dee560c5everwaest@chromium.org TransitionArray::kTransitionSize) 4980ef9a2b9208396fda21c01fdff922975fe35d9c4amachenbach@chromium.org <= Page::kMaxRegularHeapObjectSize; 4981b6d052d4d08b0de341804f273713741dee560c5everwaest@chromium.org} 4982b6d052d4d08b0de341804f273713741dee560c5everwaest@chromium.org 4983b6d052d4d08b0de341804f273713741dee560c5everwaest@chromium.org 498406ab2ec756e44eeaf7500b9794f9d2abc79dc8cfverwaest@chromium.orgMap* Map::GetTransition(int transition_index) { 498506ab2ec756e44eeaf7500b9794f9d2abc79dc8cfverwaest@chromium.org return transitions()->GetTarget(transition_index); 498606ab2ec756e44eeaf7500b9794f9d2abc79dc8cfverwaest@chromium.org} 498706ab2ec756e44eeaf7500b9794f9d2abc79dc8cfverwaest@chromium.org 498806ab2ec756e44eeaf7500b9794f9d2abc79dc8cfverwaest@chromium.org 49898f8fe81d7a9cced7a0d30e56124c0428d1a6d229machenbach@chromium.orgint Map::SearchTransition(Name* name) { 49908f8fe81d7a9cced7a0d30e56124c0428d1a6d229machenbach@chromium.org if (HasTransitionArray()) return transitions()->Search(name); 49918f8fe81d7a9cced7a0d30e56124c0428d1a6d229machenbach@chromium.org return TransitionArray::kNotFound; 49928f8fe81d7a9cced7a0d30e56124c0428d1a6d229machenbach@chromium.org} 49938f8fe81d7a9cced7a0d30e56124c0428d1a6d229machenbach@chromium.org 49948f8fe81d7a9cced7a0d30e56124c0428d1a6d229machenbach@chromium.org 499581cac2ba397bd57f2967c8b4b677bef08a869991danno@chromium.orgFixedArray* Map::GetPrototypeTransitions() { 499681cac2ba397bd57f2967c8b4b677bef08a869991danno@chromium.org if (!HasTransitionArray()) return GetHeap()->empty_fixed_array(); 499781cac2ba397bd57f2967c8b4b677bef08a869991danno@chromium.org if (!transitions()->HasPrototypeTransitions()) { 499881cac2ba397bd57f2967c8b4b677bef08a869991danno@chromium.org return GetHeap()->empty_fixed_array(); 499981cac2ba397bd57f2967c8b4b677bef08a869991danno@chromium.org } 500081cac2ba397bd57f2967c8b4b677bef08a869991danno@chromium.org return transitions()->GetPrototypeTransitions(); 500181cac2ba397bd57f2967c8b4b677bef08a869991danno@chromium.org} 500281cac2ba397bd57f2967c8b4b677bef08a869991danno@chromium.org 500381cac2ba397bd57f2967c8b4b677bef08a869991danno@chromium.org 50042ebef182c49d59eba907b120c3c2a50808bd1f12machenbach@chromium.orgvoid Map::SetPrototypeTransitions( 50052ebef182c49d59eba907b120c3c2a50808bd1f12machenbach@chromium.org Handle<Map> map, Handle<FixedArray> proto_transitions) { 50062ebef182c49d59eba907b120c3c2a50808bd1f12machenbach@chromium.org EnsureHasTransitionArray(map); 50072ebef182c49d59eba907b120c3c2a50808bd1f12machenbach@chromium.org int old_number_of_transitions = map->NumberOfProtoTransitions(); 500881cac2ba397bd57f2967c8b4b677bef08a869991danno@chromium.org#ifdef DEBUG 50092ebef182c49d59eba907b120c3c2a50808bd1f12machenbach@chromium.org if (map->HasPrototypeTransitions()) { 50102ebef182c49d59eba907b120c3c2a50808bd1f12machenbach@chromium.org ASSERT(map->GetPrototypeTransitions() != *proto_transitions); 50112ebef182c49d59eba907b120c3c2a50808bd1f12machenbach@chromium.org map->ZapPrototypeTransitions(); 501281cac2ba397bd57f2967c8b4b677bef08a869991danno@chromium.org } 501381cac2ba397bd57f2967c8b4b677bef08a869991danno@chromium.org#endif 50142ebef182c49d59eba907b120c3c2a50808bd1f12machenbach@chromium.org map->transitions()->SetPrototypeTransitions(*proto_transitions); 50152ebef182c49d59eba907b120c3c2a50808bd1f12machenbach@chromium.org map->SetNumberOfProtoTransitions(old_number_of_transitions); 501681cac2ba397bd57f2967c8b4b677bef08a869991danno@chromium.org} 501781cac2ba397bd57f2967c8b4b677bef08a869991danno@chromium.org 501881cac2ba397bd57f2967c8b4b677bef08a869991danno@chromium.org 501981cac2ba397bd57f2967c8b4b677bef08a869991danno@chromium.orgbool Map::HasPrototypeTransitions() { 502081cac2ba397bd57f2967c8b4b677bef08a869991danno@chromium.org return HasTransitionArray() && transitions()->HasPrototypeTransitions(); 502181cac2ba397bd57f2967c8b4b677bef08a869991danno@chromium.org} 502281cac2ba397bd57f2967c8b4b677bef08a869991danno@chromium.org 502381cac2ba397bd57f2967c8b4b677bef08a869991danno@chromium.org 502499aa490225c81012235659d9a183226b286178c8yangguo@chromium.orgTransitionArray* Map::transitions() { 5025de64f721c489207a7b9018406d39c7fb04bb9424verwaest@chromium.org ASSERT(HasTransitionArray()); 5026de64f721c489207a7b9018406d39c7fb04bb9424verwaest@chromium.org Object* object = READ_FIELD(this, kTransitionsOrBackPointerOffset); 5027de64f721c489207a7b9018406d39c7fb04bb9424verwaest@chromium.org return TransitionArray::cast(object); 502899aa490225c81012235659d9a183226b286178c8yangguo@chromium.org} 502999aa490225c81012235659d9a183226b286178c8yangguo@chromium.org 503099aa490225c81012235659d9a183226b286178c8yangguo@chromium.org 5031de64f721c489207a7b9018406d39c7fb04bb9424verwaest@chromium.orgvoid Map::set_transitions(TransitionArray* transition_array, 5032de64f721c489207a7b9018406d39c7fb04bb9424verwaest@chromium.org WriteBarrierMode mode) { 503391efda9680c1eac04b6babfbf812d79b7df3747ajkummerow@chromium.org // Transition arrays are not shared. When one is replaced, it should not 503491efda9680c1eac04b6babfbf812d79b7df3747ajkummerow@chromium.org // keep referenced objects alive, so we zap it. 503591efda9680c1eac04b6babfbf812d79b7df3747ajkummerow@chromium.org // When there is another reference to the array somewhere (e.g. a handle), 503691efda9680c1eac04b6babfbf812d79b7df3747ajkummerow@chromium.org // not zapping turns from a waste of memory into a source of crashes. 503791efda9680c1eac04b6babfbf812d79b7df3747ajkummerow@chromium.org if (HasTransitionArray()) { 5038bbbda924f939464825b508976aabe7ed128605cbmachenbach@chromium.org#ifdef DEBUG 5039bbbda924f939464825b508976aabe7ed128605cbmachenbach@chromium.org for (int i = 0; i < transitions()->number_of_transitions(); i++) { 5040bbbda924f939464825b508976aabe7ed128605cbmachenbach@chromium.org Map* target = transitions()->GetTarget(i); 5041bbbda924f939464825b508976aabe7ed128605cbmachenbach@chromium.org if (target->instance_descriptors() == instance_descriptors()) { 5042bbbda924f939464825b508976aabe7ed128605cbmachenbach@chromium.org Name* key = transitions()->GetKey(i); 5043bbbda924f939464825b508976aabe7ed128605cbmachenbach@chromium.org int new_target_index = transition_array->Search(key); 5044bbbda924f939464825b508976aabe7ed128605cbmachenbach@chromium.org ASSERT(new_target_index != TransitionArray::kNotFound); 5045bbbda924f939464825b508976aabe7ed128605cbmachenbach@chromium.org ASSERT(transition_array->GetTarget(new_target_index) == target); 5046bbbda924f939464825b508976aabe7ed128605cbmachenbach@chromium.org } 5047bbbda924f939464825b508976aabe7ed128605cbmachenbach@chromium.org } 5048bbbda924f939464825b508976aabe7ed128605cbmachenbach@chromium.org#endif 504991efda9680c1eac04b6babfbf812d79b7df3747ajkummerow@chromium.org ASSERT(transitions() != transition_array); 505099aa490225c81012235659d9a183226b286178c8yangguo@chromium.org ZapTransitions(); 505199aa490225c81012235659d9a183226b286178c8yangguo@chromium.org } 5052de64f721c489207a7b9018406d39c7fb04bb9424verwaest@chromium.org 5053de64f721c489207a7b9018406d39c7fb04bb9424verwaest@chromium.org WRITE_FIELD(this, kTransitionsOrBackPointerOffset, transition_array); 5054de64f721c489207a7b9018406d39c7fb04bb9424verwaest@chromium.org CONDITIONAL_WRITE_BARRIER( 5055de64f721c489207a7b9018406d39c7fb04bb9424verwaest@chromium.org GetHeap(), this, kTransitionsOrBackPointerOffset, transition_array, mode); 50567028c05c1c71b9d5c5fe1bca01f2461d17a2dda7mmassi@chromium.org} 50577028c05c1c71b9d5c5fe1bca01f2461d17a2dda7mmassi@chromium.org 50587028c05c1c71b9d5c5fe1bca01f2461d17a2dda7mmassi@chromium.org 505981cac2ba397bd57f2967c8b4b677bef08a869991danno@chromium.orgvoid Map::init_back_pointer(Object* undefined) { 506081cac2ba397bd57f2967c8b4b677bef08a869991danno@chromium.org ASSERT(undefined->IsUndefined()); 5061de64f721c489207a7b9018406d39c7fb04bb9424verwaest@chromium.org WRITE_FIELD(this, kTransitionsOrBackPointerOffset, undefined); 506281cac2ba397bd57f2967c8b4b677bef08a869991danno@chromium.org} 506381cac2ba397bd57f2967c8b4b677bef08a869991danno@chromium.org 506481cac2ba397bd57f2967c8b4b677bef08a869991danno@chromium.org 5065212d964d8f853ddb1fdf3a64037f3af294d55cf3jkummerow@chromium.orgvoid Map::SetBackPointer(Object* value, WriteBarrierMode mode) { 5066212d964d8f853ddb1fdf3a64037f3af294d55cf3jkummerow@chromium.org ASSERT(instance_type() >= FIRST_JS_RECEIVER_TYPE); 5067212d964d8f853ddb1fdf3a64037f3af294d55cf3jkummerow@chromium.org ASSERT((value->IsUndefined() && GetBackPointer()->IsMap()) || 5068212d964d8f853ddb1fdf3a64037f3af294d55cf3jkummerow@chromium.org (value->IsMap() && GetBackPointer()->IsUndefined())); 5069de64f721c489207a7b9018406d39c7fb04bb9424verwaest@chromium.org Object* object = READ_FIELD(this, kTransitionsOrBackPointerOffset); 5070de64f721c489207a7b9018406d39c7fb04bb9424verwaest@chromium.org if (object->IsTransitionArray()) { 5071de64f721c489207a7b9018406d39c7fb04bb9424verwaest@chromium.org TransitionArray::cast(object)->set_back_pointer_storage(value); 5072753aee4dcf0868130789b5af7c1eeb6ab2ab24f9verwaest@chromium.org } else { 5073de64f721c489207a7b9018406d39c7fb04bb9424verwaest@chromium.org WRITE_FIELD(this, kTransitionsOrBackPointerOffset, value); 5074657d53b99cb4d261f8245bcb4248c39eb0a2b10frossberg@chromium.org CONDITIONAL_WRITE_BARRIER( 5075de64f721c489207a7b9018406d39c7fb04bb9424verwaest@chromium.org GetHeap(), this, kTransitionsOrBackPointerOffset, value, mode); 5076657d53b99cb4d261f8245bcb4248c39eb0a2b10frossberg@chromium.org } 5077212d964d8f853ddb1fdf3a64037f3af294d55cf3jkummerow@chromium.org} 5078212d964d8f853ddb1fdf3a64037f3af294d55cf3jkummerow@chromium.org 5079212d964d8f853ddb1fdf3a64037f3af294d55cf3jkummerow@chromium.org 5080ce5e87bd905d592a8bd612b3dedf7a994177c13aager@chromium.orgACCESSORS(Map, code_cache, Object, kCodeCacheOffset) 50812e04b58f1dc7cee8fdf047b5dbc9dc93e767821dulan@chromium.orgACCESSORS(Map, dependent_code, DependentCode, kDependentCodeOffset) 508243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenACCESSORS(Map, constructor, Object, kConstructorOffset) 508343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 508443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenACCESSORS(JSFunction, shared, SharedFunctionInfo, kSharedFunctionInfoOffset) 5085394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.comACCESSORS(JSFunction, literals_or_bindings, FixedArray, kLiteralsOffset) 50867028c05c1c71b9d5c5fe1bca01f2461d17a2dda7mmassi@chromium.orgACCESSORS(JSFunction, next_function_link, Object, kNextFunctionLinkOffset) 508743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 508843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenACCESSORS(GlobalObject, builtins, JSBuiltinsObject, kBuiltinsOffset) 508946839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.orgACCESSORS(GlobalObject, native_context, Context, kNativeContextOffset) 5090355cfd19c23ac613f2738a40e356ea48297f7d5eyangguo@chromium.orgACCESSORS(GlobalObject, global_context, Context, kGlobalContextOffset) 50915a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.orgACCESSORS(GlobalObject, global_receiver, JSObject, kGlobalReceiverOffset) 509243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 509346839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.orgACCESSORS(JSGlobalProxy, native_context, Object, kNativeContextOffset) 509429699e37f62a9aa96c100f29bc8ea3668acff099machenbach@chromium.orgACCESSORS(JSGlobalProxy, hash, Object, kHashOffset) 509543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 509643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenACCESSORS(AccessorInfo, name, Object, kNameOffset) 50972c067b150f65db3e076b6b5a813e7f6f2492f770rossberg@chromium.orgACCESSORS_TO_SMI(AccessorInfo, flag, kFlagOffset) 50987028c05c1c71b9d5c5fe1bca01f2461d17a2dda7mmassi@chromium.orgACCESSORS(AccessorInfo, expected_receiver_type, Object, 50997028c05c1c71b9d5c5fe1bca01f2461d17a2dda7mmassi@chromium.org kExpectedReceiverTypeOffset) 510043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 5101750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.orgACCESSORS(DeclaredAccessorDescriptor, serialized_data, ByteArray, 5102750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org kSerializedDataOffset) 51037c3372bc426136cb79479c1b59d1770f5528882ahpayer@chromium.org 51047c3372bc426136cb79479c1b59d1770f5528882ahpayer@chromium.orgACCESSORS(DeclaredAccessorInfo, descriptor, DeclaredAccessorDescriptor, 51057c3372bc426136cb79479c1b59d1770f5528882ahpayer@chromium.org kDescriptorOffset) 51067c3372bc426136cb79479c1b59d1770f5528882ahpayer@chromium.org 51077c3372bc426136cb79479c1b59d1770f5528882ahpayer@chromium.orgACCESSORS(ExecutableAccessorInfo, getter, Object, kGetterOffset) 51087c3372bc426136cb79479c1b59d1770f5528882ahpayer@chromium.orgACCESSORS(ExecutableAccessorInfo, setter, Object, kSetterOffset) 51097c3372bc426136cb79479c1b59d1770f5528882ahpayer@chromium.orgACCESSORS(ExecutableAccessorInfo, data, Object, kDataOffset) 51107c3372bc426136cb79479c1b59d1770f5528882ahpayer@chromium.org 51111fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.orgACCESSORS(Box, value, Object, kValueOffset) 51121fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org 5113f2038fb01417bcf7698b87a5dfaa4a861539618aerik.corry@gmail.comACCESSORS(AccessorPair, getter, Object, kGetterOffset) 5114f2038fb01417bcf7698b87a5dfaa4a861539618aerik.corry@gmail.comACCESSORS(AccessorPair, setter, Object, kSetterOffset) 51151e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.orgACCESSORS_TO_SMI(AccessorPair, access_flags, kAccessFlagsOffset) 5116f2038fb01417bcf7698b87a5dfaa4a861539618aerik.corry@gmail.com 511743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenACCESSORS(AccessCheckInfo, named_callback, Object, kNamedCallbackOffset) 511843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenACCESSORS(AccessCheckInfo, indexed_callback, Object, kIndexedCallbackOffset) 511943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenACCESSORS(AccessCheckInfo, data, Object, kDataOffset) 512043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 512143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenACCESSORS(InterceptorInfo, getter, Object, kGetterOffset) 512243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenACCESSORS(InterceptorInfo, setter, Object, kSetterOffset) 512343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenACCESSORS(InterceptorInfo, query, Object, kQueryOffset) 512443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenACCESSORS(InterceptorInfo, deleter, Object, kDeleterOffset) 512543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenACCESSORS(InterceptorInfo, enumerator, Object, kEnumeratorOffset) 512643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenACCESSORS(InterceptorInfo, data, Object, kDataOffset) 512743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 512843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenACCESSORS(CallHandlerInfo, callback, Object, kCallbackOffset) 512943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenACCESSORS(CallHandlerInfo, data, Object, kDataOffset) 513043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 513143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenACCESSORS(TemplateInfo, tag, Object, kTagOffset) 513243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenACCESSORS(TemplateInfo, property_list, Object, kPropertyListOffset) 51333d00d0a753cf5e5091f883517e6612ece769f999jkummerow@chromium.orgACCESSORS(TemplateInfo, property_accessors, Object, kPropertyAccessorsOffset) 513443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 513543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenACCESSORS(FunctionTemplateInfo, serial_number, Object, kSerialNumberOffset) 513643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenACCESSORS(FunctionTemplateInfo, call_code, Object, kCallCodeOffset) 513743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenACCESSORS(FunctionTemplateInfo, prototype_template, Object, 513843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen kPrototypeTemplateOffset) 513943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenACCESSORS(FunctionTemplateInfo, parent_template, Object, kParentTemplateOffset) 514043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenACCESSORS(FunctionTemplateInfo, named_property_handler, Object, 514143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen kNamedPropertyHandlerOffset) 514243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenACCESSORS(FunctionTemplateInfo, indexed_property_handler, Object, 514343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen kIndexedPropertyHandlerOffset) 514443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenACCESSORS(FunctionTemplateInfo, instance_template, Object, 514543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen kInstanceTemplateOffset) 514643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenACCESSORS(FunctionTemplateInfo, class_name, Object, kClassNameOffset) 514743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenACCESSORS(FunctionTemplateInfo, signature, Object, kSignatureOffset) 514843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenACCESSORS(FunctionTemplateInfo, instance_call_handler, Object, 514943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen kInstanceCallHandlerOffset) 515043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenACCESSORS(FunctionTemplateInfo, access_check_info, Object, 515143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen kAccessCheckInfoOffset) 51522c067b150f65db3e076b6b5a813e7f6f2492f770rossberg@chromium.orgACCESSORS_TO_SMI(FunctionTemplateInfo, flag, kFlagOffset) 515343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 515443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenACCESSORS(ObjectTemplateInfo, constructor, Object, kConstructorOffset) 5155212ac23f8231d169b4aa6737d762099993020826kasper.lundACCESSORS(ObjectTemplateInfo, internal_field_count, Object, 5156212ac23f8231d169b4aa6737d762099993020826kasper.lund kInternalFieldCountOffset) 515743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 515843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenACCESSORS(SignatureInfo, receiver, Object, kReceiverOffset) 515943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenACCESSORS(SignatureInfo, args, Object, kArgsOffset) 516043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 516143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenACCESSORS(TypeSwitchInfo, types, Object, kTypesOffset) 516243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 5163bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.orgACCESSORS(AllocationSite, transition_info, Object, kTransitionInfoOffset) 51643d079fe881245e49c7ba803b54b4fe6d4b46113cmachenbach@chromium.orgACCESSORS(AllocationSite, nested_site, Object, kNestedSiteOffset) 51654ddd2f1981d343a2efe6609a3e0ce6b9c80b6ed9machenbach@chromium.orgACCESSORS_TO_SMI(AllocationSite, pretenure_data, kPretenureDataOffset) 51664ddd2f1981d343a2efe6609a3e0ce6b9c80b6ed9machenbach@chromium.orgACCESSORS_TO_SMI(AllocationSite, pretenure_create_count, 51674ddd2f1981d343a2efe6609a3e0ce6b9c80b6ed9machenbach@chromium.org kPretenureCreateCountOffset) 5168528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.orgACCESSORS(AllocationSite, dependent_code, DependentCode, 5169528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org kDependentCodeOffset) 5170ba72ec861b69b67139c93fc6dd56f4a73c9b3135jkummerow@chromium.orgACCESSORS(AllocationSite, weak_next, Object, kWeakNextOffset) 5171ba72ec861b69b67139c93fc6dd56f4a73c9b3135jkummerow@chromium.orgACCESSORS(AllocationMemento, allocation_site, Object, kAllocationSiteOffset) 517259297c735ad2a41156ae9c723a39ff259ad061e0jkummerow@chromium.org 517343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenACCESSORS(Script, source, Object, kSourceOffset) 517443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenACCESSORS(Script, name, Object, kNameOffset) 51751510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgACCESSORS(Script, id, Smi, kIdOffset) 51762c067b150f65db3e076b6b5a813e7f6f2492f770rossberg@chromium.orgACCESSORS_TO_SMI(Script, line_offset, kLineOffsetOffset) 51772c067b150f65db3e076b6b5a813e7f6f2492f770rossberg@chromium.orgACCESSORS_TO_SMI(Script, column_offset, kColumnOffsetOffset) 51789085a016223a6b72bf580d5781c93ec7b9e54422ager@chromium.orgACCESSORS(Script, context_data, Object, kContextOffset) 5179ea91cc579ade536e3a08498a8157921dd4f533d1ager@chromium.orgACCESSORS(Script, wrapper, Foreign, kWrapperOffset) 51802c067b150f65db3e076b6b5a813e7f6f2492f770rossberg@chromium.orgACCESSORS_TO_SMI(Script, type, kTypeOffset) 5181499aaa52a876ef8e8b81ac115cafb969eb585c96sgjesse@chromium.orgACCESSORS(Script, line_ends, Object, kLineEndsOffset) 51829818059c4eaba109c3ab9b45f9608d938872d75csgjesse@chromium.orgACCESSORS(Script, eval_from_shared, Object, kEvalFromSharedOffset) 51832c067b150f65db3e076b6b5a813e7f6f2492f770rossberg@chromium.orgACCESSORS_TO_SMI(Script, eval_from_instructions_offset, 51842c067b150f65db3e076b6b5a813e7f6f2492f770rossberg@chromium.org kEvalFrominstructionsOffsetOffset) 5185d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.orgACCESSORS_TO_SMI(Script, flags, kFlagsOffset) 5186d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.orgBOOL_ACCESSORS(Script, flags, is_shared_cross_origin, kIsSharedCrossOriginBit) 5187d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org 5188d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.orgScript::CompilationType Script::compilation_type() { 5189d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org return BooleanBit::get(flags(), kCompilationTypeBit) ? 5190d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org COMPILATION_TYPE_EVAL : COMPILATION_TYPE_HOST; 5191d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org} 5192d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.orgvoid Script::set_compilation_type(CompilationType type) { 5193d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org set_flags(BooleanBit::set(flags(), kCompilationTypeBit, 5194d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org type == COMPILATION_TYPE_EVAL)); 5195d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org} 5196d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.orgScript::CompilationState Script::compilation_state() { 5197d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org return BooleanBit::get(flags(), kCompilationStateBit) ? 5198d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org COMPILATION_STATE_COMPILED : COMPILATION_STATE_INITIAL; 5199d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org} 5200d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.orgvoid Script::set_compilation_state(CompilationState state) { 5201d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org set_flags(BooleanBit::set(flags(), kCompilationStateBit, 5202d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org state == COMPILATION_STATE_COMPILED)); 5203d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org} 5204d3c42109e5b85232d19beab8deeb24bdcbbf07f9danno@chromium.org 520543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 520643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenACCESSORS(DebugInfo, shared, SharedFunctionInfo, kSharedFunctionInfoIndex) 520743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenACCESSORS(DebugInfo, original_code, Code, kOriginalCodeIndex) 520843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenACCESSORS(DebugInfo, code, Code, kPatchedCodeIndex) 520943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenACCESSORS(DebugInfo, break_points, FixedArray, kBreakPointsStateIndex) 521043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 52112c067b150f65db3e076b6b5a813e7f6f2492f770rossberg@chromium.orgACCESSORS_TO_SMI(BreakPointInfo, code_position, kCodePositionIndex) 52122c067b150f65db3e076b6b5a813e7f6f2492f770rossberg@chromium.orgACCESSORS_TO_SMI(BreakPointInfo, source_position, kSourcePositionIndex) 52132c067b150f65db3e076b6b5a813e7f6f2492f770rossberg@chromium.orgACCESSORS_TO_SMI(BreakPointInfo, statement_position, kStatementPositionIndex) 521443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenACCESSORS(BreakPointInfo, break_point_objects, Object, kBreakPointObjectsIndex) 521543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 521643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenACCESSORS(SharedFunctionInfo, name, Object, kNameOffset) 52175a11aaf63fdb7843c9b116fdb84ee35b0a980ea6yangguo@chromium.orgACCESSORS(SharedFunctionInfo, optimized_code_map, Object, 52185a11aaf63fdb7843c9b116fdb84ee35b0a980ea6yangguo@chromium.org kOptimizedCodeMapOffset) 5219c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.comACCESSORS(SharedFunctionInfo, construct_stub, Code, kConstructStubOffset) 5220a86d416fb652b1936026eee315eccd4f17ca1002machenbach@chromium.orgACCESSORS(SharedFunctionInfo, feedback_vector, FixedArray, 5221a86d416fb652b1936026eee315eccd4f17ca1002machenbach@chromium.org kFeedbackVectorOffset) 522243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenACCESSORS(SharedFunctionInfo, instance_class_name, Object, 522343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen kInstanceClassNameOffset) 5224f837290e142d49c9e1332841ec2c49ee2f09584avegorov@chromium.orgACCESSORS(SharedFunctionInfo, function_data, Object, kFunctionDataOffset) 522543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenACCESSORS(SharedFunctionInfo, script, Object, kScriptOffset) 522643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenACCESSORS(SharedFunctionInfo, debug_info, Object, kDebugInfoOffset) 5227d1e3e722d649dfcccf8699a801743c9a5426b0bckasperl@chromium.orgACCESSORS(SharedFunctionInfo, inferred_name, String, kInferredNameOffset) 522843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 522978d1ad443658709d6c27809001a0e71efd8b898fyangguo@chromium.org 5230a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.orgSMI_ACCESSORS(FunctionTemplateInfo, length, kLengthOffset) 523143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenBOOL_ACCESSORS(FunctionTemplateInfo, flag, hidden_prototype, 523243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen kHiddenPrototypeBit) 523343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenBOOL_ACCESSORS(FunctionTemplateInfo, flag, undetectable, kUndetectableBit) 523443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenBOOL_ACCESSORS(FunctionTemplateInfo, flag, needs_access_check, 523543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen kNeedsAccessCheckBit) 52362c99e28a7b1fcb3767dc7c0088514fe53be784c5ricow@chromium.orgBOOL_ACCESSORS(FunctionTemplateInfo, flag, read_only_prototype, 52372c99e28a7b1fcb3767dc7c0088514fe53be784c5ricow@chromium.org kReadOnlyPrototypeBit) 5238662436e7b124b3535773535c671c53db322070b5verwaest@chromium.orgBOOL_ACCESSORS(FunctionTemplateInfo, flag, remove_prototype, 5239662436e7b124b3535773535c671c53db322070b5verwaest@chromium.org kRemovePrototypeBit) 5240639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.orgBOOL_ACCESSORS(FunctionTemplateInfo, flag, do_not_cache, 5241639bac0c5319f96e1bbe3399fb7f7f37344928bddslomov@chromium.org kDoNotCacheBit) 524243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenBOOL_ACCESSORS(SharedFunctionInfo, start_position_and_type, is_expression, 524343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen kIsExpressionBit) 524443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenBOOL_ACCESSORS(SharedFunctionInfo, start_position_and_type, is_toplevel, 524543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen kIsTopLevelBit) 52466e196bfaf0e555d0c835390bb6ebc0a74484491dulan@chromium.org 5247c4c927273ae2b690c4a015b4640a2a469c9a1a69ager@chromium.orgBOOL_ACCESSORS(SharedFunctionInfo, 5248c4c927273ae2b690c4a015b4640a2a469c9a1a69ager@chromium.org compiler_hints, 52492356e6fbe66ac3aa027b61cb43a3c3619b3c3a5evegorov@chromium.org allows_lazy_compilation, 52502356e6fbe66ac3aa027b61cb43a3c3619b3c3a5evegorov@chromium.org kAllowLazyCompilation) 52517b26015ac58e54e88f4214e248f772ad4f055477whesse@chromium.orgBOOL_ACCESSORS(SharedFunctionInfo, 52527b26015ac58e54e88f4214e248f772ad4f055477whesse@chromium.org compiler_hints, 52535a11aaf63fdb7843c9b116fdb84ee35b0a980ea6yangguo@chromium.org allows_lazy_compilation_without_context, 52545a11aaf63fdb7843c9b116fdb84ee35b0a980ea6yangguo@chromium.org kAllowLazyCompilationWithoutContext) 52555a11aaf63fdb7843c9b116fdb84ee35b0a980ea6yangguo@chromium.orgBOOL_ACCESSORS(SharedFunctionInfo, 52565a11aaf63fdb7843c9b116fdb84ee35b0a980ea6yangguo@chromium.org compiler_hints, 52577b26015ac58e54e88f4214e248f772ad4f055477whesse@chromium.org uses_arguments, 52587b26015ac58e54e88f4214e248f772ad4f055477whesse@chromium.org kUsesArguments) 52597b26015ac58e54e88f4214e248f772ad4f055477whesse@chromium.orgBOOL_ACCESSORS(SharedFunctionInfo, 52607b26015ac58e54e88f4214e248f772ad4f055477whesse@chromium.org compiler_hints, 52617b26015ac58e54e88f4214e248f772ad4f055477whesse@chromium.org has_duplicate_parameters, 52627b26015ac58e54e88f4214e248f772ad4f055477whesse@chromium.org kHasDuplicateParameters) 526343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 52640b9f850f0e9dc624b9e0c5254393112ecc7f8bc9ricow@chromium.org 526530ce411529579186181838984710b0b0980857aaricow@chromium.org#if V8_HOST_ARCH_32_BIT 526630ce411529579186181838984710b0b0980857aaricow@chromium.orgSMI_ACCESSORS(SharedFunctionInfo, length, kLengthOffset) 526730ce411529579186181838984710b0b0980857aaricow@chromium.orgSMI_ACCESSORS(SharedFunctionInfo, formal_parameter_count, 526843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen kFormalParameterCountOffset) 526930ce411529579186181838984710b0b0980857aaricow@chromium.orgSMI_ACCESSORS(SharedFunctionInfo, expected_nof_properties, 527043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen kExpectedNofPropertiesOffset) 527130ce411529579186181838984710b0b0980857aaricow@chromium.orgSMI_ACCESSORS(SharedFunctionInfo, num_literals, kNumLiteralsOffset) 527230ce411529579186181838984710b0b0980857aaricow@chromium.orgSMI_ACCESSORS(SharedFunctionInfo, start_position_and_type, 527343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen kStartPositionAndTypeOffset) 527430ce411529579186181838984710b0b0980857aaricow@chromium.orgSMI_ACCESSORS(SharedFunctionInfo, end_position, kEndPositionOffset) 527530ce411529579186181838984710b0b0980857aaricow@chromium.orgSMI_ACCESSORS(SharedFunctionInfo, function_token_position, 527643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen kFunctionTokenPositionOffset) 527730ce411529579186181838984710b0b0980857aaricow@chromium.orgSMI_ACCESSORS(SharedFunctionInfo, compiler_hints, 5278911335cff40a2630bbe1dfb77b1897be991241bfsgjesse@chromium.org kCompilerHintsOffset) 52792c9426bdda5e95459527292063d885c98180cb0fjkummerow@chromium.orgSMI_ACCESSORS(SharedFunctionInfo, opt_count_and_bailout_reason, 52802c9426bdda5e95459527292063d885c98180cb0fjkummerow@chromium.org kOptCountAndBailoutReasonOffset) 52817028c05c1c71b9d5c5fe1bca01f2461d17a2dda7mmassi@chromium.orgSMI_ACCESSORS(SharedFunctionInfo, counters, kCountersOffset) 52825aed4fc58b91cbb1ed563e2e07b74490ba953037ulan@chromium.orgSMI_ACCESSORS(SharedFunctionInfo, ast_node_count, kAstNodeCountOffset) 52835aed4fc58b91cbb1ed563e2e07b74490ba953037ulan@chromium.orgSMI_ACCESSORS(SharedFunctionInfo, profiler_ticks, kProfilerTicksOffset) 5284ba72ec861b69b67139c93fc6dd56f4a73c9b3135jkummerow@chromium.org 528530ce411529579186181838984710b0b0980857aaricow@chromium.org#else 528630ce411529579186181838984710b0b0980857aaricow@chromium.org 528730ce411529579186181838984710b0b0980857aaricow@chromium.org#define PSEUDO_SMI_ACCESSORS_LO(holder, name, offset) \ 5288f0ac72dfa39ec827de605aafc57d4834237aa7f3whesse@chromium.org STATIC_ASSERT(holder::offset % kPointerSize == 0); \ 528930ce411529579186181838984710b0b0980857aaricow@chromium.org int holder::name() { \ 529030ce411529579186181838984710b0b0980857aaricow@chromium.org int value = READ_INT_FIELD(this, offset); \ 529130ce411529579186181838984710b0b0980857aaricow@chromium.org ASSERT(kHeapObjectTag == 1); \ 529230ce411529579186181838984710b0b0980857aaricow@chromium.org ASSERT((value & kHeapObjectTag) == 0); \ 529330ce411529579186181838984710b0b0980857aaricow@chromium.org return value >> 1; \ 529430ce411529579186181838984710b0b0980857aaricow@chromium.org } \ 529530ce411529579186181838984710b0b0980857aaricow@chromium.org void holder::set_##name(int value) { \ 529630ce411529579186181838984710b0b0980857aaricow@chromium.org ASSERT(kHeapObjectTag == 1); \ 529730ce411529579186181838984710b0b0980857aaricow@chromium.org ASSERT((value & 0xC0000000) == 0xC0000000 || \ 5298a3b66334e4dd35d9d4874d275ef9c4a756f0225cmachenbach@chromium.org (value & 0xC0000000) == 0x0); \ 529930ce411529579186181838984710b0b0980857aaricow@chromium.org WRITE_INT_FIELD(this, \ 530030ce411529579186181838984710b0b0980857aaricow@chromium.org offset, \ 530130ce411529579186181838984710b0b0980857aaricow@chromium.org (value << 1) & ~kHeapObjectTag); \ 530230ce411529579186181838984710b0b0980857aaricow@chromium.org } 530330ce411529579186181838984710b0b0980857aaricow@chromium.org 5304f0ac72dfa39ec827de605aafc57d4834237aa7f3whesse@chromium.org#define PSEUDO_SMI_ACCESSORS_HI(holder, name, offset) \ 5305f0ac72dfa39ec827de605aafc57d4834237aa7f3whesse@chromium.org STATIC_ASSERT(holder::offset % kPointerSize == kIntSize); \ 530630ce411529579186181838984710b0b0980857aaricow@chromium.org INT_ACCESSORS(holder, name, offset) 530730ce411529579186181838984710b0b0980857aaricow@chromium.org 530830ce411529579186181838984710b0b0980857aaricow@chromium.org 530930ce411529579186181838984710b0b0980857aaricow@chromium.orgPSEUDO_SMI_ACCESSORS_LO(SharedFunctionInfo, length, kLengthOffset) 5310f0ac72dfa39ec827de605aafc57d4834237aa7f3whesse@chromium.orgPSEUDO_SMI_ACCESSORS_HI(SharedFunctionInfo, 5311f0ac72dfa39ec827de605aafc57d4834237aa7f3whesse@chromium.org formal_parameter_count, 5312f0ac72dfa39ec827de605aafc57d4834237aa7f3whesse@chromium.org kFormalParameterCountOffset) 531330ce411529579186181838984710b0b0980857aaricow@chromium.org 5314f0ac72dfa39ec827de605aafc57d4834237aa7f3whesse@chromium.orgPSEUDO_SMI_ACCESSORS_LO(SharedFunctionInfo, 5315f0ac72dfa39ec827de605aafc57d4834237aa7f3whesse@chromium.org expected_nof_properties, 5316f0ac72dfa39ec827de605aafc57d4834237aa7f3whesse@chromium.org kExpectedNofPropertiesOffset) 531730ce411529579186181838984710b0b0980857aaricow@chromium.orgPSEUDO_SMI_ACCESSORS_HI(SharedFunctionInfo, num_literals, kNumLiteralsOffset) 531843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 5319f0ac72dfa39ec827de605aafc57d4834237aa7f3whesse@chromium.orgPSEUDO_SMI_ACCESSORS_LO(SharedFunctionInfo, end_position, kEndPositionOffset) 5320f0ac72dfa39ec827de605aafc57d4834237aa7f3whesse@chromium.orgPSEUDO_SMI_ACCESSORS_HI(SharedFunctionInfo, 5321f0ac72dfa39ec827de605aafc57d4834237aa7f3whesse@chromium.org start_position_and_type, 5322f0ac72dfa39ec827de605aafc57d4834237aa7f3whesse@chromium.org kStartPositionAndTypeOffset) 5323f0ac72dfa39ec827de605aafc57d4834237aa7f3whesse@chromium.org 5324f0ac72dfa39ec827de605aafc57d4834237aa7f3whesse@chromium.orgPSEUDO_SMI_ACCESSORS_LO(SharedFunctionInfo, 5325f0ac72dfa39ec827de605aafc57d4834237aa7f3whesse@chromium.org function_token_position, 5326f0ac72dfa39ec827de605aafc57d4834237aa7f3whesse@chromium.org kFunctionTokenPositionOffset) 5327f0ac72dfa39ec827de605aafc57d4834237aa7f3whesse@chromium.orgPSEUDO_SMI_ACCESSORS_HI(SharedFunctionInfo, 5328f0ac72dfa39ec827de605aafc57d4834237aa7f3whesse@chromium.org compiler_hints, 5329f0ac72dfa39ec827de605aafc57d4834237aa7f3whesse@chromium.org kCompilerHintsOffset) 5330f0ac72dfa39ec827de605aafc57d4834237aa7f3whesse@chromium.org 53312c9426bdda5e95459527292063d885c98180cb0fjkummerow@chromium.orgPSEUDO_SMI_ACCESSORS_LO(SharedFunctionInfo, 53322c9426bdda5e95459527292063d885c98180cb0fjkummerow@chromium.org opt_count_and_bailout_reason, 53332c9426bdda5e95459527292063d885c98180cb0fjkummerow@chromium.org kOptCountAndBailoutReasonOffset) 5334d4be0f0c0edfc0a0b46e745055c3dc497c0ffcb5verwaest@chromium.orgPSEUDO_SMI_ACCESSORS_HI(SharedFunctionInfo, counters, kCountersOffset) 5335ba72ec861b69b67139c93fc6dd56f4a73c9b3135jkummerow@chromium.org 53365aed4fc58b91cbb1ed563e2e07b74490ba953037ulan@chromium.orgPSEUDO_SMI_ACCESSORS_LO(SharedFunctionInfo, 53375aed4fc58b91cbb1ed563e2e07b74490ba953037ulan@chromium.org ast_node_count, 53385aed4fc58b91cbb1ed563e2e07b74490ba953037ulan@chromium.org kAstNodeCountOffset) 53395aed4fc58b91cbb1ed563e2e07b74490ba953037ulan@chromium.orgPSEUDO_SMI_ACCESSORS_HI(SharedFunctionInfo, 53405aed4fc58b91cbb1ed563e2e07b74490ba953037ulan@chromium.org profiler_ticks, 53415aed4fc58b91cbb1ed563e2e07b74490ba953037ulan@chromium.org kProfilerTicksOffset) 53425aed4fc58b91cbb1ed563e2e07b74490ba953037ulan@chromium.org 534330ce411529579186181838984710b0b0980857aaricow@chromium.org#endif 534443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 53454a1fe7d5e92fdb673d5f05d5ddf7b1ed703ba18dwhesse@chromium.org 53467b26015ac58e54e88f4214e248f772ad4f055477whesse@chromium.orgBOOL_GETTER(SharedFunctionInfo, 53477b26015ac58e54e88f4214e248f772ad4f055477whesse@chromium.org compiler_hints, 53487b26015ac58e54e88f4214e248f772ad4f055477whesse@chromium.org optimization_disabled, 53497b26015ac58e54e88f4214e248f772ad4f055477whesse@chromium.org kOptimizationDisabled) 5350a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org 5351a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org 5352a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.orgvoid SharedFunctionInfo::set_optimization_disabled(bool disable) { 5353a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org set_compiler_hints(BooleanBit::set(compiler_hints(), 5354a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org kOptimizationDisabled, 5355a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org disable)); 5356a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org // If disabling optimizations we reflect that in the code object so 5357a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org // it will not be counted as optimizable code. 5358a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org if ((code()->kind() == Code::FUNCTION) && disable) { 5359a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org code()->set_optimizable(false); 5360a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org } 5361a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org} 5362a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org 5363a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org 5364486536df718553960f9700559e80e5b10b0d5994dslomov@chromium.orgStrictMode SharedFunctionInfo::strict_mode() { 5365486536df718553960f9700559e80e5b10b0d5994dslomov@chromium.org return BooleanBit::get(compiler_hints(), kStrictModeFunction) 5366486536df718553960f9700559e80e5b10b0d5994dslomov@chromium.org ? STRICT : SLOPPY; 5367394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com} 5368394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com 5369394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com 5370486536df718553960f9700559e80e5b10b0d5994dslomov@chromium.orgvoid SharedFunctionInfo::set_strict_mode(StrictMode strict_mode) { 5371486536df718553960f9700559e80e5b10b0d5994dslomov@chromium.org // We only allow mode transitions from sloppy to strict. 5372486536df718553960f9700559e80e5b10b0d5994dslomov@chromium.org ASSERT(this->strict_mode() == SLOPPY || this->strict_mode() == strict_mode); 53731b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org int hints = compiler_hints(); 5374486536df718553960f9700559e80e5b10b0d5994dslomov@chromium.org hints = BooleanBit::set(hints, kStrictModeFunction, strict_mode == STRICT); 53751b3afd1cab9087ca3c4e585d3da77d374d65c082mstarzinger@chromium.org set_compiler_hints(hints); 5376394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com} 5377394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com 5378394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com 53797c2628c3f0353f0558760c3ca442f934263ea766kmillikin@chromium.orgBOOL_ACCESSORS(SharedFunctionInfo, compiler_hints, native, kNative) 53800cc095007a3ccded63f6577751c6a04300eb7ae9machenbach@chromium.orgBOOL_ACCESSORS(SharedFunctionInfo, compiler_hints, inline_builtin, 53810cc095007a3ccded63f6577751c6a04300eb7ae9machenbach@chromium.org kInlineBuiltin) 53827c2628c3f0353f0558760c3ca442f934263ea766kmillikin@chromium.orgBOOL_ACCESSORS(SharedFunctionInfo, compiler_hints, 53837c2628c3f0353f0558760c3ca442f934263ea766kmillikin@chromium.org name_should_print_as_anonymous, 53847c2628c3f0353f0558760c3ca442f934263ea766kmillikin@chromium.org kNameShouldPrintAsAnonymous) 53857c2628c3f0353f0558760c3ca442f934263ea766kmillikin@chromium.orgBOOL_ACCESSORS(SharedFunctionInfo, compiler_hints, bound, kBoundFunction) 53867c2628c3f0353f0558760c3ca442f934263ea766kmillikin@chromium.orgBOOL_ACCESSORS(SharedFunctionInfo, compiler_hints, is_anonymous, kIsAnonymous) 538756454717593e7552d6846198b8e0f661fa36a3cayangguo@chromium.orgBOOL_ACCESSORS(SharedFunctionInfo, compiler_hints, is_function, kIsFunction) 538856454717593e7552d6846198b8e0f661fa36a3cayangguo@chromium.orgBOOL_ACCESSORS(SharedFunctionInfo, compiler_hints, dont_optimize, 538956454717593e7552d6846198b8e0f661fa36a3cayangguo@chromium.org kDontOptimize) 5390b1df11df5b7bdcc201852bfcdce0a8eace33b011svenpanne@chromium.orgBOOL_ACCESSORS(SharedFunctionInfo, compiler_hints, dont_inline, kDontInline) 539181cac2ba397bd57f2967c8b4b677bef08a869991danno@chromium.orgBOOL_ACCESSORS(SharedFunctionInfo, compiler_hints, dont_cache, kDontCache) 5392906e2fb760f52fe6e75b744b1ea42576ea5b2c29ulan@chromium.orgBOOL_ACCESSORS(SharedFunctionInfo, compiler_hints, dont_flush, kDontFlush) 5393f705b5034dc5bc422ac1019b591469a7d0534772mstarzinger@chromium.orgBOOL_ACCESSORS(SharedFunctionInfo, compiler_hints, is_generator, kIsGenerator) 53946fe7a8e00388b38f66fc0127f3fe797d54b25492ricow@chromium.org 5395ce5e87bd905d592a8bd612b3dedf7a994177c13aager@chromium.orgACCESSORS(CodeCache, default_cache, FixedArray, kDefaultCacheOffset) 5396ce5e87bd905d592a8bd612b3dedf7a994177c13aager@chromium.orgACCESSORS(CodeCache, normal_type_cache, Object, kNormalTypeCacheOffset) 5397ce5e87bd905d592a8bd612b3dedf7a994177c13aager@chromium.org 5398e297f5973a8a9ff0d9945da3f1e2d8a6230c294djkummerow@chromium.orgACCESSORS(PolymorphicCodeCache, cache, Object, kCacheOffset) 5399e297f5973a8a9ff0d9945da3f1e2d8a6230c294djkummerow@chromium.org 5400152a0b013d7d17f4fe9d04cdce58ec3d6fab2aa5sgjesse@chromium.orgbool Script::HasValidSource() { 5401152a0b013d7d17f4fe9d04cdce58ec3d6fab2aa5sgjesse@chromium.org Object* src = this->source(); 5402152a0b013d7d17f4fe9d04cdce58ec3d6fab2aa5sgjesse@chromium.org if (!src->IsString()) return true; 5403152a0b013d7d17f4fe9d04cdce58ec3d6fab2aa5sgjesse@chromium.org String* src_str = String::cast(src); 5404152a0b013d7d17f4fe9d04cdce58ec3d6fab2aa5sgjesse@chromium.org if (!StringShape(src_str).IsExternal()) return true; 54058e8d8825f97138de12985f8e0d3163074dff5258ulan@chromium.org if (src_str->IsOneByteRepresentation()) { 5406152a0b013d7d17f4fe9d04cdce58ec3d6fab2aa5sgjesse@chromium.org return ExternalAsciiString::cast(src)->resource() != NULL; 5407152a0b013d7d17f4fe9d04cdce58ec3d6fab2aa5sgjesse@chromium.org } else if (src_str->IsTwoByteRepresentation()) { 5408152a0b013d7d17f4fe9d04cdce58ec3d6fab2aa5sgjesse@chromium.org return ExternalTwoByteString::cast(src)->resource() != NULL; 5409152a0b013d7d17f4fe9d04cdce58ec3d6fab2aa5sgjesse@chromium.org } 5410152a0b013d7d17f4fe9d04cdce58ec3d6fab2aa5sgjesse@chromium.org return true; 5411152a0b013d7d17f4fe9d04cdce58ec3d6fab2aa5sgjesse@chromium.org} 5412152a0b013d7d17f4fe9d04cdce58ec3d6fab2aa5sgjesse@chromium.org 5413152a0b013d7d17f4fe9d04cdce58ec3d6fab2aa5sgjesse@chromium.org 5414b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.orgvoid SharedFunctionInfo::DontAdaptArguments() { 5415b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org ASSERT(code()->kind() == Code::BUILTIN); 5416b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org set_formal_parameter_count(kDontAdaptArgumentsSentinel); 5417b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org} 5418b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org 5419b912362e2b2e704d09faac4290e027fd744bf587kasperl@chromium.org 542043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenint SharedFunctionInfo::start_position() { 542143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return start_position_and_type() >> kStartPositionShift; 542243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 542343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 542443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 542543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid SharedFunctionInfo::set_start_position(int start_position) { 542643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen set_start_position_and_type((start_position << kStartPositionShift) 542743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen | (start_position_and_type() & ~kStartPositionMask)); 542843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 542943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 543043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 543143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenCode* SharedFunctionInfo::code() { 543243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return Code::cast(READ_FIELD(this, kCodeOffset)); 543343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 543443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 543543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 54365a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.orgvoid SharedFunctionInfo::set_code(Code* value, WriteBarrierMode mode) { 54370cc095007a3ccded63f6577751c6a04300eb7ae9machenbach@chromium.org ASSERT(value->kind() != Code::OPTIMIZED_FUNCTION); 543843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen WRITE_FIELD(this, kCodeOffset, value); 5439c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com CONDITIONAL_WRITE_BARRIER(value->GetHeap(), this, kCodeOffset, value, mode); 544043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 544143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 544243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 54439768bf12a67dd4585cf1a62928708883161f64c3yangguo@chromium.orgvoid SharedFunctionInfo::ReplaceCode(Code* value) { 54449768bf12a67dd4585cf1a62928708883161f64c3yangguo@chromium.org // If the GC metadata field is already used then the function was 54459768bf12a67dd4585cf1a62928708883161f64c3yangguo@chromium.org // enqueued as a code flushing candidate and we remove it now. 54469768bf12a67dd4585cf1a62928708883161f64c3yangguo@chromium.org if (code()->gc_metadata() != NULL) { 54479768bf12a67dd4585cf1a62928708883161f64c3yangguo@chromium.org CodeFlusher* flusher = GetHeap()->mark_compact_collector()->code_flusher(); 54489768bf12a67dd4585cf1a62928708883161f64c3yangguo@chromium.org flusher->EvictCandidate(this); 54499768bf12a67dd4585cf1a62928708883161f64c3yangguo@chromium.org } 54509768bf12a67dd4585cf1a62928708883161f64c3yangguo@chromium.org 54519768bf12a67dd4585cf1a62928708883161f64c3yangguo@chromium.org ASSERT(code()->gc_metadata() == NULL && value->gc_metadata() == NULL); 5452a86d416fb652b1936026eee315eccd4f17ca1002machenbach@chromium.org 54539768bf12a67dd4585cf1a62928708883161f64c3yangguo@chromium.org set_code(value); 54549768bf12a67dd4585cf1a62928708883161f64c3yangguo@chromium.org} 54559768bf12a67dd4585cf1a62928708883161f64c3yangguo@chromium.org 54569768bf12a67dd4585cf1a62928708883161f64c3yangguo@chromium.org 5457c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.orgScopeInfo* SharedFunctionInfo::scope_info() { 5458c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org return reinterpret_cast<ScopeInfo*>(READ_FIELD(this, kScopeInfoOffset)); 5459b5737496145078e47f3d28f19ed8d918e2254738ager@chromium.org} 5460b5737496145078e47f3d28f19ed8d918e2254738ager@chromium.org 5461b5737496145078e47f3d28f19ed8d918e2254738ager@chromium.org 5462c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.orgvoid SharedFunctionInfo::set_scope_info(ScopeInfo* value, 5463b5737496145078e47f3d28f19ed8d918e2254738ager@chromium.org WriteBarrierMode mode) { 5464b5737496145078e47f3d28f19ed8d918e2254738ager@chromium.org WRITE_FIELD(this, kScopeInfoOffset, reinterpret_cast<Object*>(value)); 5465c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com CONDITIONAL_WRITE_BARRIER(GetHeap(), 5466c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com this, 5467c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com kScopeInfoOffset, 5468c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com reinterpret_cast<Object*>(value), 5469c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com mode); 5470b5737496145078e47f3d28f19ed8d918e2254738ager@chromium.org} 5471b5737496145078e47f3d28f19ed8d918e2254738ager@chromium.org 5472b5737496145078e47f3d28f19ed8d918e2254738ager@chromium.org 547343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenbool SharedFunctionInfo::is_compiled() { 5474ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org return code() != 54754954674151afa960af66efb4831df06bde727333yangguo@chromium.org GetIsolate()->builtins()->builtin(Builtins::kCompileUnoptimized); 547643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 547743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 547843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 5479f837290e142d49c9e1332841ec2c49ee2f09584avegorov@chromium.orgbool SharedFunctionInfo::IsApiFunction() { 5480f837290e142d49c9e1332841ec2c49ee2f09584avegorov@chromium.org return function_data()->IsFunctionTemplateInfo(); 5481f837290e142d49c9e1332841ec2c49ee2f09584avegorov@chromium.org} 5482f837290e142d49c9e1332841ec2c49ee2f09584avegorov@chromium.org 5483f837290e142d49c9e1332841ec2c49ee2f09584avegorov@chromium.org 5484f837290e142d49c9e1332841ec2c49ee2f09584avegorov@chromium.orgFunctionTemplateInfo* SharedFunctionInfo::get_api_func_data() { 5485f837290e142d49c9e1332841ec2c49ee2f09584avegorov@chromium.org ASSERT(IsApiFunction()); 5486f837290e142d49c9e1332841ec2c49ee2f09584avegorov@chromium.org return FunctionTemplateInfo::cast(function_data()); 5487f837290e142d49c9e1332841ec2c49ee2f09584avegorov@chromium.org} 5488f837290e142d49c9e1332841ec2c49ee2f09584avegorov@chromium.org 5489f837290e142d49c9e1332841ec2c49ee2f09584avegorov@chromium.org 54905f0c45f2cacb31d36a8f80c31f17bda7751a3644ager@chromium.orgbool SharedFunctionInfo::HasBuiltinFunctionId() { 5491720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org return function_data()->IsSmi(); 5492720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org} 5493720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org 5494720dc0bc17114e33b9b2177fcb6726bda9cabd62sgjesse@chromium.org 54955f0c45f2cacb31d36a8f80c31f17bda7751a3644ager@chromium.orgBuiltinFunctionId SharedFunctionInfo::builtin_function_id() { 54965f0c45f2cacb31d36a8f80c31f17bda7751a3644ager@chromium.org ASSERT(HasBuiltinFunctionId()); 54975f0c45f2cacb31d36a8f80c31f17bda7751a3644ager@chromium.org return static_cast<BuiltinFunctionId>(Smi::cast(function_data())->value()); 5498f837290e142d49c9e1332841ec2c49ee2f09584avegorov@chromium.org} 5499f837290e142d49c9e1332841ec2c49ee2f09584avegorov@chromium.org 5500f837290e142d49c9e1332841ec2c49ee2f09584avegorov@chromium.org 55017028c05c1c71b9d5c5fe1bca01f2461d17a2dda7mmassi@chromium.orgint SharedFunctionInfo::ic_age() { 55027028c05c1c71b9d5c5fe1bca01f2461d17a2dda7mmassi@chromium.org return ICAgeBits::decode(counters()); 55037028c05c1c71b9d5c5fe1bca01f2461d17a2dda7mmassi@chromium.org} 55047028c05c1c71b9d5c5fe1bca01f2461d17a2dda7mmassi@chromium.org 55057028c05c1c71b9d5c5fe1bca01f2461d17a2dda7mmassi@chromium.org 55067028c05c1c71b9d5c5fe1bca01f2461d17a2dda7mmassi@chromium.orgvoid SharedFunctionInfo::set_ic_age(int ic_age) { 55077028c05c1c71b9d5c5fe1bca01f2461d17a2dda7mmassi@chromium.org set_counters(ICAgeBits::update(counters(), ic_age)); 55087028c05c1c71b9d5c5fe1bca01f2461d17a2dda7mmassi@chromium.org} 55097028c05c1c71b9d5c5fe1bca01f2461d17a2dda7mmassi@chromium.org 55107028c05c1c71b9d5c5fe1bca01f2461d17a2dda7mmassi@chromium.org 55117028c05c1c71b9d5c5fe1bca01f2461d17a2dda7mmassi@chromium.orgint SharedFunctionInfo::deopt_count() { 55127028c05c1c71b9d5c5fe1bca01f2461d17a2dda7mmassi@chromium.org return DeoptCountBits::decode(counters()); 55137028c05c1c71b9d5c5fe1bca01f2461d17a2dda7mmassi@chromium.org} 55147028c05c1c71b9d5c5fe1bca01f2461d17a2dda7mmassi@chromium.org 55157028c05c1c71b9d5c5fe1bca01f2461d17a2dda7mmassi@chromium.org 55167028c05c1c71b9d5c5fe1bca01f2461d17a2dda7mmassi@chromium.orgvoid SharedFunctionInfo::set_deopt_count(int deopt_count) { 55177028c05c1c71b9d5c5fe1bca01f2461d17a2dda7mmassi@chromium.org set_counters(DeoptCountBits::update(counters(), deopt_count)); 55187028c05c1c71b9d5c5fe1bca01f2461d17a2dda7mmassi@chromium.org} 55197028c05c1c71b9d5c5fe1bca01f2461d17a2dda7mmassi@chromium.org 55207028c05c1c71b9d5c5fe1bca01f2461d17a2dda7mmassi@chromium.org 55217028c05c1c71b9d5c5fe1bca01f2461d17a2dda7mmassi@chromium.orgvoid SharedFunctionInfo::increment_deopt_count() { 55227028c05c1c71b9d5c5fe1bca01f2461d17a2dda7mmassi@chromium.org int value = counters(); 55237028c05c1c71b9d5c5fe1bca01f2461d17a2dda7mmassi@chromium.org int deopt_count = DeoptCountBits::decode(value); 55247028c05c1c71b9d5c5fe1bca01f2461d17a2dda7mmassi@chromium.org deopt_count = (deopt_count + 1) & DeoptCountBits::kMax; 55257028c05c1c71b9d5c5fe1bca01f2461d17a2dda7mmassi@chromium.org set_counters(DeoptCountBits::update(value, deopt_count)); 55267028c05c1c71b9d5c5fe1bca01f2461d17a2dda7mmassi@chromium.org} 55277028c05c1c71b9d5c5fe1bca01f2461d17a2dda7mmassi@chromium.org 55287028c05c1c71b9d5c5fe1bca01f2461d17a2dda7mmassi@chromium.org 55297028c05c1c71b9d5c5fe1bca01f2461d17a2dda7mmassi@chromium.orgint SharedFunctionInfo::opt_reenable_tries() { 55307028c05c1c71b9d5c5fe1bca01f2461d17a2dda7mmassi@chromium.org return OptReenableTriesBits::decode(counters()); 55317028c05c1c71b9d5c5fe1bca01f2461d17a2dda7mmassi@chromium.org} 55327028c05c1c71b9d5c5fe1bca01f2461d17a2dda7mmassi@chromium.org 55337028c05c1c71b9d5c5fe1bca01f2461d17a2dda7mmassi@chromium.org 55347028c05c1c71b9d5c5fe1bca01f2461d17a2dda7mmassi@chromium.orgvoid SharedFunctionInfo::set_opt_reenable_tries(int tries) { 55357028c05c1c71b9d5c5fe1bca01f2461d17a2dda7mmassi@chromium.org set_counters(OptReenableTriesBits::update(counters(), tries)); 55367028c05c1c71b9d5c5fe1bca01f2461d17a2dda7mmassi@chromium.org} 55377028c05c1c71b9d5c5fe1bca01f2461d17a2dda7mmassi@chromium.org 55387028c05c1c71b9d5c5fe1bca01f2461d17a2dda7mmassi@chromium.org 55392c9426bdda5e95459527292063d885c98180cb0fjkummerow@chromium.orgint SharedFunctionInfo::opt_count() { 55402c9426bdda5e95459527292063d885c98180cb0fjkummerow@chromium.org return OptCountBits::decode(opt_count_and_bailout_reason()); 55412c9426bdda5e95459527292063d885c98180cb0fjkummerow@chromium.org} 55422c9426bdda5e95459527292063d885c98180cb0fjkummerow@chromium.org 55432c9426bdda5e95459527292063d885c98180cb0fjkummerow@chromium.org 55442c9426bdda5e95459527292063d885c98180cb0fjkummerow@chromium.orgvoid SharedFunctionInfo::set_opt_count(int opt_count) { 55452c9426bdda5e95459527292063d885c98180cb0fjkummerow@chromium.org set_opt_count_and_bailout_reason( 55462c9426bdda5e95459527292063d885c98180cb0fjkummerow@chromium.org OptCountBits::update(opt_count_and_bailout_reason(), opt_count)); 55472c9426bdda5e95459527292063d885c98180cb0fjkummerow@chromium.org} 55482c9426bdda5e95459527292063d885c98180cb0fjkummerow@chromium.org 55492c9426bdda5e95459527292063d885c98180cb0fjkummerow@chromium.org 55502c9426bdda5e95459527292063d885c98180cb0fjkummerow@chromium.orgBailoutReason SharedFunctionInfo::DisableOptimizationReason() { 55512c9426bdda5e95459527292063d885c98180cb0fjkummerow@chromium.org BailoutReason reason = static_cast<BailoutReason>( 55522c9426bdda5e95459527292063d885c98180cb0fjkummerow@chromium.org DisabledOptimizationReasonBits::decode(opt_count_and_bailout_reason())); 55532c9426bdda5e95459527292063d885c98180cb0fjkummerow@chromium.org return reason; 55542c9426bdda5e95459527292063d885c98180cb0fjkummerow@chromium.org} 55552c9426bdda5e95459527292063d885c98180cb0fjkummerow@chromium.org 55562c9426bdda5e95459527292063d885c98180cb0fjkummerow@chromium.org 5557a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.orgbool SharedFunctionInfo::has_deoptimization_support() { 5558a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org Code* code = this->code(); 5559a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org return code->kind() == Code::FUNCTION && code->has_deoptimization_support(); 5560a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org} 5561a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org 5562a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org 55637028c05c1c71b9d5c5fe1bca01f2461d17a2dda7mmassi@chromium.orgvoid SharedFunctionInfo::TryReenableOptimization() { 55647028c05c1c71b9d5c5fe1bca01f2461d17a2dda7mmassi@chromium.org int tries = opt_reenable_tries(); 55657028c05c1c71b9d5c5fe1bca01f2461d17a2dda7mmassi@chromium.org set_opt_reenable_tries((tries + 1) & OptReenableTriesBits::kMax); 55667028c05c1c71b9d5c5fe1bca01f2461d17a2dda7mmassi@chromium.org // We reenable optimization whenever the number of tries is a large 55677028c05c1c71b9d5c5fe1bca01f2461d17a2dda7mmassi@chromium.org // enough power of 2. 55687028c05c1c71b9d5c5fe1bca01f2461d17a2dda7mmassi@chromium.org if (tries >= 16 && (((tries - 1) & tries) == 0)) { 55697028c05c1c71b9d5c5fe1bca01f2461d17a2dda7mmassi@chromium.org set_optimization_disabled(false); 55707028c05c1c71b9d5c5fe1bca01f2461d17a2dda7mmassi@chromium.org set_opt_count(0); 55717028c05c1c71b9d5c5fe1bca01f2461d17a2dda7mmassi@chromium.org set_deopt_count(0); 55727028c05c1c71b9d5c5fe1bca01f2461d17a2dda7mmassi@chromium.org code()->set_optimizable(true); 55737028c05c1c71b9d5c5fe1bca01f2461d17a2dda7mmassi@chromium.org } 55747028c05c1c71b9d5c5fe1bca01f2461d17a2dda7mmassi@chromium.org} 55757028c05c1c71b9d5c5fe1bca01f2461d17a2dda7mmassi@chromium.org 55767028c05c1c71b9d5c5fe1bca01f2461d17a2dda7mmassi@chromium.org 55770b6db5975a9d1ebcf3de7b18603380d99f789e66sgjesse@chromium.orgbool JSFunction::IsBuiltin() { 557846839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org return context()->global_object()->IsJSBuiltinsObject(); 55790b6db5975a9d1ebcf3de7b18603380d99f789e66sgjesse@chromium.org} 55800b6db5975a9d1ebcf3de7b18603380d99f789e66sgjesse@chromium.org 55810b6db5975a9d1ebcf3de7b18603380d99f789e66sgjesse@chromium.org 5582d06b9264b1c886fc80a100e9915cf8ae07fdb4e5machenbach@chromium.orgbool JSFunction::IsNative() { 5583d06b9264b1c886fc80a100e9915cf8ae07fdb4e5machenbach@chromium.org Object* script = shared()->script(); 5584d06b9264b1c886fc80a100e9915cf8ae07fdb4e5machenbach@chromium.org bool native = script->IsScript() && 5585d06b9264b1c886fc80a100e9915cf8ae07fdb4e5machenbach@chromium.org Script::cast(script)->type()->value() == Script::TYPE_NATIVE; 5586d06b9264b1c886fc80a100e9915cf8ae07fdb4e5machenbach@chromium.org ASSERT(!IsBuiltin() || native); // All builtins are also native. 5587d06b9264b1c886fc80a100e9915cf8ae07fdb4e5machenbach@chromium.org return native; 5588d06b9264b1c886fc80a100e9915cf8ae07fdb4e5machenbach@chromium.org} 5589d06b9264b1c886fc80a100e9915cf8ae07fdb4e5machenbach@chromium.org 5590d06b9264b1c886fc80a100e9915cf8ae07fdb4e5machenbach@chromium.org 5591a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.orgbool JSFunction::NeedsArgumentsAdaption() { 5592a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org return shared()->formal_parameter_count() != 5593a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org SharedFunctionInfo::kDontAdaptArgumentsSentinel; 5594a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org} 5595a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org 5596a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org 5597a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.orgbool JSFunction::IsOptimized() { 5598a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org return code()->kind() == Code::OPTIMIZED_FUNCTION; 5599a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org} 5600a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org 5601a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org 5602a9aa5fa8ae2a2b43a94e6462ded2cd51445e9ee3ager@chromium.orgbool JSFunction::IsOptimizable() { 5603a9aa5fa8ae2a2b43a94e6462ded2cd51445e9ee3ager@chromium.org return code()->kind() == Code::FUNCTION && code()->optimizable(); 5604a9aa5fa8ae2a2b43a94e6462ded2cd51445e9ee3ager@chromium.org} 5605a9aa5fa8ae2a2b43a94e6462ded2cd51445e9ee3ager@chromium.org 5606a9aa5fa8ae2a2b43a94e6462ded2cd51445e9ee3ager@chromium.org 56074954674151afa960af66efb4831df06bde727333yangguo@chromium.orgbool JSFunction::IsMarkedForOptimization() { 56084954674151afa960af66efb4831df06bde727333yangguo@chromium.org return code() == GetIsolate()->builtins()->builtin( 56094954674151afa960af66efb4831df06bde727333yangguo@chromium.org Builtins::kCompileOptimized); 5610a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org} 5611a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org 5612a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org 56134954674151afa960af66efb4831df06bde727333yangguo@chromium.orgbool JSFunction::IsMarkedForConcurrentOptimization() { 56146e196bfaf0e555d0c835390bb6ebc0a74484491dulan@chromium.org return code() == GetIsolate()->builtins()->builtin( 56154954674151afa960af66efb4831df06bde727333yangguo@chromium.org Builtins::kCompileOptimizedConcurrent); 5616304cc33f8259ef467e8e3c79f448d0bae0e8cd85yangguo@chromium.org} 5617304cc33f8259ef467e8e3c79f448d0bae0e8cd85yangguo@chromium.org 5618304cc33f8259ef467e8e3c79f448d0bae0e8cd85yangguo@chromium.org 56194954674151afa960af66efb4831df06bde727333yangguo@chromium.orgbool JSFunction::IsInOptimizationQueue() { 5620304cc33f8259ef467e8e3c79f448d0bae0e8cd85yangguo@chromium.org return code() == GetIsolate()->builtins()->builtin( 56214954674151afa960af66efb4831df06bde727333yangguo@chromium.org Builtins::kInOptimizationQueue); 5622304cc33f8259ef467e8e3c79f448d0bae0e8cd85yangguo@chromium.org} 5623304cc33f8259ef467e8e3c79f448d0bae0e8cd85yangguo@chromium.org 5624304cc33f8259ef467e8e3c79f448d0bae0e8cd85yangguo@chromium.org 5625011a81ffd5df0e081e7c00ef430b2fec5079bf2amachenbach@chromium.orgbool JSFunction::IsInobjectSlackTrackingInProgress() { 5626011a81ffd5df0e081e7c00ef430b2fec5079bf2amachenbach@chromium.org return has_initial_map() && 5627011a81ffd5df0e081e7c00ef430b2fec5079bf2amachenbach@chromium.org initial_map()->construction_count() != JSFunction::kNoSlackTracking; 5628011a81ffd5df0e081e7c00ef430b2fec5079bf2amachenbach@chromium.org} 5629011a81ffd5df0e081e7c00ef430b2fec5079bf2amachenbach@chromium.org 5630011a81ffd5df0e081e7c00ef430b2fec5079bf2amachenbach@chromium.org 563143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenCode* JSFunction::code() { 56321510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.org return Code::cast( 5633145eff58d4f6ac0dcc53abb556dbf3cac6c3280aerik.corry@gmail.com Code::GetObjectFromEntryAddress(FIELD_ADDR(this, kCodeEntryOffset))); 56340b9f850f0e9dc624b9e0c5254393112ecc7f8bc9ricow@chromium.org} 56350b9f850f0e9dc624b9e0c5254393112ecc7f8bc9ricow@chromium.org 56360b9f850f0e9dc624b9e0c5254393112ecc7f8bc9ricow@chromium.org 563743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid JSFunction::set_code(Code* value) { 5638c5d4971574b7a205fa0e788d8121dc79485e5e67hpayer@chromium.org ASSERT(!GetHeap()->InNewSpace(value)); 5639145eff58d4f6ac0dcc53abb556dbf3cac6c3280aerik.corry@gmail.com Address entry = value->entry(); 5640145eff58d4f6ac0dcc53abb556dbf3cac6c3280aerik.corry@gmail.com WRITE_INTPTR_FIELD(this, kCodeEntryOffset, reinterpret_cast<intptr_t>(entry)); 5641c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com GetHeap()->incremental_marking()->RecordWriteOfCodeEntry( 5642c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com this, 5643c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com HeapObject::RawField(this, kCodeEntryOffset), 5644c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com value); 564543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 564643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 564743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 56486e196bfaf0e555d0c835390bb6ebc0a74484491dulan@chromium.orgvoid JSFunction::set_code_no_write_barrier(Code* value) { 5649c5d4971574b7a205fa0e788d8121dc79485e5e67hpayer@chromium.org ASSERT(!GetHeap()->InNewSpace(value)); 56506e196bfaf0e555d0c835390bb6ebc0a74484491dulan@chromium.org Address entry = value->entry(); 56516e196bfaf0e555d0c835390bb6ebc0a74484491dulan@chromium.org WRITE_INTPTR_FIELD(this, kCodeEntryOffset, reinterpret_cast<intptr_t>(entry)); 56526e196bfaf0e555d0c835390bb6ebc0a74484491dulan@chromium.org} 56536e196bfaf0e555d0c835390bb6ebc0a74484491dulan@chromium.org 56546e196bfaf0e555d0c835390bb6ebc0a74484491dulan@chromium.org 5655a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.orgvoid JSFunction::ReplaceCode(Code* code) { 5656a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org bool was_optimized = IsOptimized(); 5657a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org bool is_optimized = code->kind() == Code::OPTIMIZED_FUNCTION; 5658a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org 5659486536df718553960f9700559e80e5b10b0d5994dslomov@chromium.org if (was_optimized && is_optimized) { 5660486536df718553960f9700559e80e5b10b0d5994dslomov@chromium.org shared()->EvictFromOptimizedCodeMap(this->code(), 5661486536df718553960f9700559e80e5b10b0d5994dslomov@chromium.org "Replacing with another optimized code"); 5662486536df718553960f9700559e80e5b10b0d5994dslomov@chromium.org } 5663486536df718553960f9700559e80e5b10b0d5994dslomov@chromium.org 5664a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org set_code(code); 5665a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org 5666a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org // Add/remove the function from the list of optimized functions for this 5667a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org // context based on the state change. 5668a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org if (!was_optimized && is_optimized) { 566946839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org context()->native_context()->AddOptimizedFunction(this); 5670a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org } 5671a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org if (was_optimized && !is_optimized) { 56723d00d0a753cf5e5091f883517e6612ece769f999jkummerow@chromium.org // TODO(titzer): linear in the number of optimized functions; fix! 567346839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org context()->native_context()->RemoveOptimizedFunction(this); 5674a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org } 5675a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org} 5676a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org 5677a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.org 567843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenContext* JSFunction::context() { 567943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return Context::cast(READ_FIELD(this, kContextOffset)); 568043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 568143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 568243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 568343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid JSFunction::set_context(Object* value) { 5684ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org ASSERT(value->IsUndefined() || value->IsContext()); 568543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen WRITE_FIELD(this, kContextOffset, value); 5686c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com WRITE_BARRIER(GetHeap(), this, kContextOffset, value); 568743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 568843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 568943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenACCESSORS(JSFunction, prototype_or_initial_map, Object, 569043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen kPrototypeOrInitialMapOffset) 569143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 569243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 569343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenMap* JSFunction::initial_map() { 569443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return Map::cast(prototype_or_initial_map()); 569543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 569643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 569743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 569843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid JSFunction::set_initial_map(Map* value) { 569943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen set_prototype_or_initial_map(value); 570043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 570143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 570243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 570343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenbool JSFunction::has_initial_map() { 570443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return prototype_or_initial_map()->IsMap(); 570543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 570643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 570743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 570843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenbool JSFunction::has_instance_prototype() { 570943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return has_initial_map() || !prototype_or_initial_map()->IsTheHole(); 571043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 571143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 571243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 571343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenbool JSFunction::has_prototype() { 571443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return map()->has_non_instance_prototype() || has_instance_prototype(); 571543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 571643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 571743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 571843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenObject* JSFunction::instance_prototype() { 571943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen ASSERT(has_instance_prototype()); 572043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (has_initial_map()) return initial_map()->prototype(); 572143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // When there is no initial map and the prototype is a JSObject, the 572243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // initial map field is used for the prototype field. 572343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return prototype_or_initial_map(); 572443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 572543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 572643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 572743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenObject* JSFunction::prototype() { 572843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen ASSERT(has_prototype()); 572943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // If the function's prototype property has been set to a non-JSObject 573043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // value, that value is stored in the constructor field of the map. 573143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen if (map()->has_non_instance_prototype()) return map()->constructor(); 573243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return instance_prototype(); 573343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 573443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 57357028c05c1c71b9d5c5fe1bca01f2461d17a2dda7mmassi@chromium.org 57364111b80e5083e1ec54273d3275875ccc24cdbbafkmillikin@chromium.orgbool JSFunction::should_have_prototype() { 57374111b80e5083e1ec54273d3275875ccc24cdbbafkmillikin@chromium.org return map()->function_with_prototype(); 57384111b80e5083e1ec54273d3275875ccc24cdbbafkmillikin@chromium.org} 57394111b80e5083e1ec54273d3275875ccc24cdbbafkmillikin@chromium.org 574043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 574143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenbool JSFunction::is_compiled() { 57424954674151afa960af66efb4831df06bde727333yangguo@chromium.org return code() != 57434954674151afa960af66efb4831df06bde727333yangguo@chromium.org GetIsolate()->builtins()->builtin(Builtins::kCompileUnoptimized); 574443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 574543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 574643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 5747394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.comFixedArray* JSFunction::literals() { 5748394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com ASSERT(!shared()->bound()); 5749394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com return literals_or_bindings(); 5750394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com} 5751394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com 5752394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com 5753394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.comvoid JSFunction::set_literals(FixedArray* literals) { 5754394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com ASSERT(!shared()->bound()); 5755394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com set_literals_or_bindings(literals); 5756394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com} 5757394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com 5758394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com 5759394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.comFixedArray* JSFunction::function_bindings() { 5760394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com ASSERT(shared()->bound()); 5761394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com return literals_or_bindings(); 5762394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com} 5763394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com 5764394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com 5765394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.comvoid JSFunction::set_function_bindings(FixedArray* bindings) { 5766394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com ASSERT(shared()->bound()); 5767394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com // Bound function literal may be initialized to the empty fixed array 5768394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com // before the bindings are set. 5769394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com ASSERT(bindings == GetHeap()->empty_fixed_array() || 5770394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com bindings->map() == GetHeap()->fixed_cow_array_map()); 5771394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com set_literals_or_bindings(bindings); 5772394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com} 5773394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com 5774394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com 57759fe21c6d4c657d15af27c8751257d3e2bf113e45kasperl@chromium.orgint JSFunction::NumberOfLiterals() { 5776394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com ASSERT(!shared()->bound()); 57779fe21c6d4c657d15af27c8751257d3e2bf113e45kasperl@chromium.org return literals()->length(); 57789fe21c6d4c657d15af27c8751257d3e2bf113e45kasperl@chromium.org} 57799fe21c6d4c657d15af27c8751257d3e2bf113e45kasperl@chromium.org 57809fe21c6d4c657d15af27c8751257d3e2bf113e45kasperl@chromium.org 578143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenObject* JSBuiltinsObject::javascript_builtin(Builtins::JavaScript id) { 5782c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org ASSERT(id < kJSBuiltinsCount); // id is unsigned. 5783c9c80823e038328f2e1060d7feef0762a50adf06ricow@chromium.org return READ_FIELD(this, OffsetOfFunctionWithId(id)); 578443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 578543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 578643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 578743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid JSBuiltinsObject::set_javascript_builtin(Builtins::JavaScript id, 578843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen Object* value) { 5789c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org ASSERT(id < kJSBuiltinsCount); // id is unsigned. 5790c9c80823e038328f2e1060d7feef0762a50adf06ricow@chromium.org WRITE_FIELD(this, OffsetOfFunctionWithId(id), value); 5791c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com WRITE_BARRIER(GetHeap(), this, OffsetOfFunctionWithId(id), value); 5792c9c80823e038328f2e1060d7feef0762a50adf06ricow@chromium.org} 5793c9c80823e038328f2e1060d7feef0762a50adf06ricow@chromium.org 5794c9c80823e038328f2e1060d7feef0762a50adf06ricow@chromium.org 5795c9c80823e038328f2e1060d7feef0762a50adf06ricow@chromium.orgCode* JSBuiltinsObject::javascript_builtin_code(Builtins::JavaScript id) { 5796c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org ASSERT(id < kJSBuiltinsCount); // id is unsigned. 5797c9c80823e038328f2e1060d7feef0762a50adf06ricow@chromium.org return Code::cast(READ_FIELD(this, OffsetOfCodeWithId(id))); 5798c9c80823e038328f2e1060d7feef0762a50adf06ricow@chromium.org} 5799c9c80823e038328f2e1060d7feef0762a50adf06ricow@chromium.org 5800c9c80823e038328f2e1060d7feef0762a50adf06ricow@chromium.org 5801c9c80823e038328f2e1060d7feef0762a50adf06ricow@chromium.orgvoid JSBuiltinsObject::set_javascript_builtin_code(Builtins::JavaScript id, 5802c9c80823e038328f2e1060d7feef0762a50adf06ricow@chromium.org Code* value) { 5803c6c5718277d4047fad1e034396228ce15571b5a4sgjesse@chromium.org ASSERT(id < kJSBuiltinsCount); // id is unsigned. 5804c9c80823e038328f2e1060d7feef0762a50adf06ricow@chromium.org WRITE_FIELD(this, OffsetOfCodeWithId(id), value); 5805c5d4971574b7a205fa0e788d8121dc79485e5e67hpayer@chromium.org ASSERT(!GetHeap()->InNewSpace(value)); 580643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 580743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 580843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 58097304bcac06a6a63b9f3dcebac2eeceada87ca146vegorov@chromium.orgACCESSORS(JSProxy, handler, Object, kHandlerOffset) 5810c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.comACCESSORS(JSProxy, hash, Object, kHashOffset) 581134e60787ea1e76f3ee49e859f71f036170c21f0elrn@chromium.orgACCESSORS(JSFunctionProxy, call_trap, Object, kCallTrapOffset) 581234e60787ea1e76f3ee49e859f71f036170c21f0elrn@chromium.orgACCESSORS(JSFunctionProxy, construct_trap, Object, kConstructTrapOffset) 581334e60787ea1e76f3ee49e859f71f036170c21f0elrn@chromium.org 581434e60787ea1e76f3ee49e859f71f036170c21f0elrn@chromium.org 581534e60787ea1e76f3ee49e859f71f036170c21f0elrn@chromium.orgvoid JSProxy::InitializeBody(int object_size, Object* value) { 581634e60787ea1e76f3ee49e859f71f036170c21f0elrn@chromium.org ASSERT(!value->IsHeapObject() || !GetHeap()->InNewSpace(value)); 581734e60787ea1e76f3ee49e859f71f036170c21f0elrn@chromium.org for (int offset = kHeaderSize; offset < object_size; offset += kPointerSize) { 581834e60787ea1e76f3ee49e859f71f036170c21f0elrn@chromium.org WRITE_FIELD(this, offset, value); 581934e60787ea1e76f3ee49e859f71f036170c21f0elrn@chromium.org } 582034e60787ea1e76f3ee49e859f71f036170c21f0elrn@chromium.org} 58217304bcac06a6a63b9f3dcebac2eeceada87ca146vegorov@chromium.org 58227304bcac06a6a63b9f3dcebac2eeceada87ca146vegorov@chromium.org 5823394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.comACCESSORS(JSSet, table, Object, kTableOffset) 5824394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.comACCESSORS(JSMap, table, Object, kTableOffset) 58254ef23eea527ce7f45bdc5edd52bd4d1a989e2359machenbach@chromium.org 58264ef23eea527ce7f45bdc5edd52bd4d1a989e2359machenbach@chromium.org 58274ef23eea527ce7f45bdc5edd52bd4d1a989e2359machenbach@chromium.org#define ORDERED_HASH_TABLE_ITERATOR_ACCESSORS(name, type, offset) \ 58284ef23eea527ce7f45bdc5edd52bd4d1a989e2359machenbach@chromium.org template<class Derived, class TableType> \ 58294ef23eea527ce7f45bdc5edd52bd4d1a989e2359machenbach@chromium.org type* OrderedHashTableIterator<Derived, TableType>::name() { \ 58304ef23eea527ce7f45bdc5edd52bd4d1a989e2359machenbach@chromium.org return type::cast(READ_FIELD(this, offset)); \ 58314ef23eea527ce7f45bdc5edd52bd4d1a989e2359machenbach@chromium.org } \ 58324ef23eea527ce7f45bdc5edd52bd4d1a989e2359machenbach@chromium.org template<class Derived, class TableType> \ 58334ef23eea527ce7f45bdc5edd52bd4d1a989e2359machenbach@chromium.org void OrderedHashTableIterator<Derived, TableType>::set_##name( \ 58344ef23eea527ce7f45bdc5edd52bd4d1a989e2359machenbach@chromium.org type* value, WriteBarrierMode mode) { \ 58354ef23eea527ce7f45bdc5edd52bd4d1a989e2359machenbach@chromium.org WRITE_FIELD(this, offset, value); \ 58364ef23eea527ce7f45bdc5edd52bd4d1a989e2359machenbach@chromium.org CONDITIONAL_WRITE_BARRIER(GetHeap(), this, offset, value, mode); \ 58374ef23eea527ce7f45bdc5edd52bd4d1a989e2359machenbach@chromium.org } 58384ef23eea527ce7f45bdc5edd52bd4d1a989e2359machenbach@chromium.org 58394ef23eea527ce7f45bdc5edd52bd4d1a989e2359machenbach@chromium.orgORDERED_HASH_TABLE_ITERATOR_ACCESSORS(table, Object, kTableOffset) 58404ef23eea527ce7f45bdc5edd52bd4d1a989e2359machenbach@chromium.orgORDERED_HASH_TABLE_ITERATOR_ACCESSORS(index, Smi, kIndexOffset) 58414ef23eea527ce7f45bdc5edd52bd4d1a989e2359machenbach@chromium.orgORDERED_HASH_TABLE_ITERATOR_ACCESSORS(kind, Smi, kKindOffset) 58424ef23eea527ce7f45bdc5edd52bd4d1a989e2359machenbach@chromium.org 58434ef23eea527ce7f45bdc5edd52bd4d1a989e2359machenbach@chromium.org#undef ORDERED_HASH_TABLE_ITERATOR_ACCESSORS 58444ef23eea527ce7f45bdc5edd52bd4d1a989e2359machenbach@chromium.org 58454ef23eea527ce7f45bdc5edd52bd4d1a989e2359machenbach@chromium.org 5846ba72ec861b69b67139c93fc6dd56f4a73c9b3135jkummerow@chromium.orgACCESSORS(JSWeakCollection, table, Object, kTableOffset) 5847ba72ec861b69b67139c93fc6dd56f4a73c9b3135jkummerow@chromium.orgACCESSORS(JSWeakCollection, next, Object, kNextOffset) 58487c2628c3f0353f0558760c3ca442f934263ea766kmillikin@chromium.org 58497c2628c3f0353f0558760c3ca442f934263ea766kmillikin@chromium.org 5850c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.orgAddress Foreign::foreign_address() { 5851c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org return AddressFrom<Address>(READ_INTPTR_FIELD(this, kForeignAddressOffset)); 585243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 585343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 585443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 5855c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.orgvoid Foreign::set_foreign_address(Address value) { 5856c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org WRITE_INTPTR_FIELD(this, kForeignAddressOffset, OffsetFrom(value)); 585743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 585843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 585943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 5860e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.orgACCESSORS(JSGeneratorObject, function, JSFunction, kFunctionOffset) 586177ca49ac05d25684c89442029c22f5b2bce94395ulan@chromium.orgACCESSORS(JSGeneratorObject, context, Context, kContextOffset) 5862ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.orgACCESSORS(JSGeneratorObject, receiver, Object, kReceiverOffset) 5863e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.orgSMI_ACCESSORS(JSGeneratorObject, continuation, kContinuationOffset) 5864e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.orgACCESSORS(JSGeneratorObject, operand_stack, FixedArray, kOperandStackOffset) 586557ff881caeb2e15b46ac9e4dfc00e378f7c5f929ulan@chromium.orgSMI_ACCESSORS(JSGeneratorObject, stack_handler_index, kStackHandlerIndexOffset) 5866e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org 5867af6f699b0be532b73bc2f6c9e1cf40a57fa7e234machenbach@chromium.orgbool JSGeneratorObject::is_suspended() { 5868af6f699b0be532b73bc2f6c9e1cf40a57fa7e234machenbach@chromium.org ASSERT_LT(kGeneratorExecuting, kGeneratorClosed); 5869af6f699b0be532b73bc2f6c9e1cf40a57fa7e234machenbach@chromium.org ASSERT_EQ(kGeneratorClosed, 0); 5870af6f699b0be532b73bc2f6c9e1cf40a57fa7e234machenbach@chromium.org return continuation() > 0; 5871af6f699b0be532b73bc2f6c9e1cf40a57fa7e234machenbach@chromium.org} 5872e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org 5873fb547e07aef43e02715c5d6c1530e84bb3cbba02machenbach@chromium.orgbool JSGeneratorObject::is_closed() { 5874fb547e07aef43e02715c5d6c1530e84bb3cbba02machenbach@chromium.org return continuation() == kGeneratorClosed; 5875fb547e07aef43e02715c5d6c1530e84bb3cbba02machenbach@chromium.org} 5876fb547e07aef43e02715c5d6c1530e84bb3cbba02machenbach@chromium.org 5877fb547e07aef43e02715c5d6c1530e84bb3cbba02machenbach@chromium.orgbool JSGeneratorObject::is_executing() { 5878fb547e07aef43e02715c5d6c1530e84bb3cbba02machenbach@chromium.org return continuation() == kGeneratorExecuting; 5879fb547e07aef43e02715c5d6c1530e84bb3cbba02machenbach@chromium.org} 5880fb547e07aef43e02715c5d6c1530e84bb3cbba02machenbach@chromium.org 5881e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.orgJSGeneratorObject* JSGeneratorObject::cast(Object* obj) { 5882e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org ASSERT(obj->IsJSGeneratorObject()); 5883e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org ASSERT(HeapObject::cast(obj)->Size() == JSGeneratorObject::kSize); 5884e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org return reinterpret_cast<JSGeneratorObject*>(obj); 5885e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org} 5886e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org 5887e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org 5888ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.comACCESSORS(JSModule, context, Object, kContextOffset) 588981cac2ba397bd57f2967c8b4b677bef08a869991danno@chromium.orgACCESSORS(JSModule, scope_info, ScopeInfo, kScopeInfoOffset) 5890ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.com 5891ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.com 5892ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.comJSModule* JSModule::cast(Object* obj) { 5893ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.com ASSERT(obj->IsJSModule()); 5894ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.com ASSERT(HeapObject::cast(obj)->Size() == JSModule::kSize); 5895ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.com return reinterpret_cast<JSModule*>(obj); 5896ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.com} 5897ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.com 5898ed49e965b5cafa35395084dbfb79f4e07930f10ferik.corry@gmail.com 589943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenACCESSORS(JSValue, value, Object, kValueOffset) 590043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 590143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 590243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenJSValue* JSValue::cast(Object* obj) { 590343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen ASSERT(obj->IsJSValue()); 590443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen ASSERT(HeapObject::cast(obj)->Size() == JSValue::kSize); 590543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return reinterpret_cast<JSValue*>(obj); 590643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 590743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 590843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 59094efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.orgACCESSORS(JSDate, value, Object, kValueOffset) 59104efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.orgACCESSORS(JSDate, cache_stamp, Object, kCacheStampOffset) 59114efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.orgACCESSORS(JSDate, year, Object, kYearOffset) 59124efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.orgACCESSORS(JSDate, month, Object, kMonthOffset) 59134efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.orgACCESSORS(JSDate, day, Object, kDayOffset) 59144efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.orgACCESSORS(JSDate, weekday, Object, kWeekdayOffset) 59154efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.orgACCESSORS(JSDate, hour, Object, kHourOffset) 59164efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.orgACCESSORS(JSDate, min, Object, kMinOffset) 59174efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.orgACCESSORS(JSDate, sec, Object, kSecOffset) 59184efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org 59194efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org 59204efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.orgJSDate* JSDate::cast(Object* obj) { 59214efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org ASSERT(obj->IsJSDate()); 59224efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org ASSERT(HeapObject::cast(obj)->Size() == JSDate::kSize); 59234efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org return reinterpret_cast<JSDate*>(obj); 59244efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org} 59254efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org 59264efbdb18fa3063085682c44cc77cf5254cb3d75dsvenpanne@chromium.org 592731b1277ec3b8cd17acb01c66d85a456159072157kmillikin@chromium.orgACCESSORS(JSMessageObject, type, String, kTypeOffset) 592831b1277ec3b8cd17acb01c66d85a456159072157kmillikin@chromium.orgACCESSORS(JSMessageObject, arguments, JSArray, kArgumentsOffset) 592931b1277ec3b8cd17acb01c66d85a456159072157kmillikin@chromium.orgACCESSORS(JSMessageObject, script, Object, kScriptOffset) 593031b1277ec3b8cd17acb01c66d85a456159072157kmillikin@chromium.orgACCESSORS(JSMessageObject, stack_frames, Object, kStackFramesOffset) 593131b1277ec3b8cd17acb01c66d85a456159072157kmillikin@chromium.orgSMI_ACCESSORS(JSMessageObject, start_position, kStartPositionOffset) 593231b1277ec3b8cd17acb01c66d85a456159072157kmillikin@chromium.orgSMI_ACCESSORS(JSMessageObject, end_position, kEndPositionOffset) 593331b1277ec3b8cd17acb01c66d85a456159072157kmillikin@chromium.org 593431b1277ec3b8cd17acb01c66d85a456159072157kmillikin@chromium.org 593531b1277ec3b8cd17acb01c66d85a456159072157kmillikin@chromium.orgJSMessageObject* JSMessageObject::cast(Object* obj) { 593631b1277ec3b8cd17acb01c66d85a456159072157kmillikin@chromium.org ASSERT(obj->IsJSMessageObject()); 593731b1277ec3b8cd17acb01c66d85a456159072157kmillikin@chromium.org ASSERT(HeapObject::cast(obj)->Size() == JSMessageObject::kSize); 593831b1277ec3b8cd17acb01c66d85a456159072157kmillikin@chromium.org return reinterpret_cast<JSMessageObject*>(obj); 593931b1277ec3b8cd17acb01c66d85a456159072157kmillikin@chromium.org} 594031b1277ec3b8cd17acb01c66d85a456159072157kmillikin@chromium.org 594131b1277ec3b8cd17acb01c66d85a456159072157kmillikin@chromium.org 594243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenINT_ACCESSORS(Code, instruction_size, kInstructionSizeOffset) 594383130cfc204d3ffed6832a7ef149b19328a58b33svenpanne@chromium.orgINT_ACCESSORS(Code, prologue_offset, kPrologueOffset) 59444a2e25edf994c4e3ff22fea6d432839192666139erik.corry@gmail.comACCESSORS(Code, relocation_info, ByteArray, kRelocationInfoOffset) 594504e4f1e9e1291ac270e1cb7d8384b2af2fd2d685jkummerow@chromium.orgACCESSORS(Code, handler_table, FixedArray, kHandlerTableOffset) 5946a55512615f5adc085d23bc8589d155c4b579fb7bkasperl@chromium.orgACCESSORS(Code, deoptimization_data, FixedArray, kDeoptimizationDataOffset) 5947057bd50c2c2d15923523777a296cddee5c8ba63bverwaest@chromium.orgACCESSORS(Code, raw_type_feedback_info, Object, kTypeFeedbackInfoOffset) 5948895f00d1d8c5a7a7209c36d690688e3552de3df4machenbach@chromium.orgACCESSORS(Code, next_code_link, Object, kNextCodeLinkOffset) 5949fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org 5950fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org 5951057bd50c2c2d15923523777a296cddee5c8ba63bverwaest@chromium.orgvoid Code::WipeOutHeader() { 5952057bd50c2c2d15923523777a296cddee5c8ba63bverwaest@chromium.org WRITE_FIELD(this, kRelocationInfoOffset, NULL); 5953057bd50c2c2d15923523777a296cddee5c8ba63bverwaest@chromium.org WRITE_FIELD(this, kHandlerTableOffset, NULL); 5954057bd50c2c2d15923523777a296cddee5c8ba63bverwaest@chromium.org WRITE_FIELD(this, kDeoptimizationDataOffset, NULL); 5955486536df718553960f9700559e80e5b10b0d5994dslomov@chromium.org WRITE_FIELD(this, kConstantPoolOffset, NULL); 5956057bd50c2c2d15923523777a296cddee5c8ba63bverwaest@chromium.org // Do not wipe out e.g. a minor key. 5957057bd50c2c2d15923523777a296cddee5c8ba63bverwaest@chromium.org if (!READ_FIELD(this, kTypeFeedbackInfoOffset)->IsSmi()) { 5958057bd50c2c2d15923523777a296cddee5c8ba63bverwaest@chromium.org WRITE_FIELD(this, kTypeFeedbackInfoOffset, NULL); 5959057bd50c2c2d15923523777a296cddee5c8ba63bverwaest@chromium.org } 5960fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org} 5961fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org 5962fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org 5963fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.orgObject* Code::type_feedback_info() { 5964fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org ASSERT(kind() == FUNCTION); 5965057bd50c2c2d15923523777a296cddee5c8ba63bverwaest@chromium.org return raw_type_feedback_info(); 5966fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org} 5967fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org 5968fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org 5969fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.orgvoid Code::set_type_feedback_info(Object* value, WriteBarrierMode mode) { 5970fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org ASSERT(kind() == FUNCTION); 5971057bd50c2c2d15923523777a296cddee5c8ba63bverwaest@chromium.org set_raw_type_feedback_info(value, mode); 5972fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org CONDITIONAL_WRITE_BARRIER(GetHeap(), this, kTypeFeedbackInfoOffset, 5973fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org value, mode); 5974fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org} 5975fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org 5976fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org 5977fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.orgint Code::stub_info() { 5978ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org ASSERT(kind() == COMPARE_IC || kind() == COMPARE_NIL_IC || 5979a86d416fb652b1936026eee315eccd4f17ca1002machenbach@chromium.org kind() == BINARY_OP_IC || kind() == LOAD_IC || kind() == CALL_IC); 5980057bd50c2c2d15923523777a296cddee5c8ba63bverwaest@chromium.org return Smi::cast(raw_type_feedback_info())->value(); 5981fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org} 5982fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org 5983fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org 5984fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.orgvoid Code::set_stub_info(int value) { 59856bec0093ef661b53a1e338a233d7aafb9536a307mvstanton@chromium.org ASSERT(kind() == COMPARE_IC || 5986ca29dd85fa02449d17188f5a6ff9a7cdf2ad9680danno@chromium.org kind() == COMPARE_NIL_IC || 59876bec0093ef661b53a1e338a233d7aafb9536a307mvstanton@chromium.org kind() == BINARY_OP_IC || 5988750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org kind() == STUB || 59896bec0093ef661b53a1e338a233d7aafb9536a307mvstanton@chromium.org kind() == LOAD_IC || 5990a86d416fb652b1936026eee315eccd4f17ca1002machenbach@chromium.org kind() == CALL_IC || 5991d16d8531698e91e9c60a7db9e0ba3c3bb15aff20mvstanton@chromium.org kind() == KEYED_LOAD_IC || 5992d16d8531698e91e9c60a7db9e0ba3c3bb15aff20mvstanton@chromium.org kind() == STORE_IC || 5993d16d8531698e91e9c60a7db9e0ba3c3bb15aff20mvstanton@chromium.org kind() == KEYED_STORE_IC); 5994057bd50c2c2d15923523777a296cddee5c8ba63bverwaest@chromium.org set_raw_type_feedback_info(Smi::FromInt(value)); 5995fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org} 5996fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org 5997fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org 5998659ceec4628056d3c6e7076c850fba1c412cbb8ayangguo@chromium.orgACCESSORS(Code, gc_metadata, Object, kGCMetadataOffset) 599988aa058bdadfa79ae2836d12d6dd2d1c28aa490cdanno@chromium.orgINT_ACCESSORS(Code, ic_age, kICAgeOffset) 600043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 6001fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org 600243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenbyte* Code::instruction_start() { 600343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return FIELD_ADDR(this, kHeaderSize); 600443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 600543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 600643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 60074a2e25edf994c4e3ff22fea6d432839192666139erik.corry@gmail.combyte* Code::instruction_end() { 60084a2e25edf994c4e3ff22fea6d432839192666139erik.corry@gmail.com return instruction_start() + instruction_size(); 60094a2e25edf994c4e3ff22fea6d432839192666139erik.corry@gmail.com} 60104a2e25edf994c4e3ff22fea6d432839192666139erik.corry@gmail.com 60114a2e25edf994c4e3ff22fea6d432839192666139erik.corry@gmail.com 601243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenint Code::body_size() { 60134a2e25edf994c4e3ff22fea6d432839192666139erik.corry@gmail.com return RoundUp(instruction_size(), kObjectAlignment); 60144a2e25edf994c4e3ff22fea6d432839192666139erik.corry@gmail.com} 60154a2e25edf994c4e3ff22fea6d432839192666139erik.corry@gmail.com 60164a2e25edf994c4e3ff22fea6d432839192666139erik.corry@gmail.com 60174a2e25edf994c4e3ff22fea6d432839192666139erik.corry@gmail.comByteArray* Code::unchecked_relocation_info() { 60184a2e25edf994c4e3ff22fea6d432839192666139erik.corry@gmail.com return reinterpret_cast<ByteArray*>(READ_FIELD(this, kRelocationInfoOffset)); 601943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 602043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 602143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 602243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenbyte* Code::relocation_start() { 60234a2e25edf994c4e3ff22fea6d432839192666139erik.corry@gmail.com return unchecked_relocation_info()->GetDataStartAddress(); 60244a2e25edf994c4e3ff22fea6d432839192666139erik.corry@gmail.com} 60254a2e25edf994c4e3ff22fea6d432839192666139erik.corry@gmail.com 60264a2e25edf994c4e3ff22fea6d432839192666139erik.corry@gmail.com 60274a2e25edf994c4e3ff22fea6d432839192666139erik.corry@gmail.comint Code::relocation_size() { 60284a2e25edf994c4e3ff22fea6d432839192666139erik.corry@gmail.com return unchecked_relocation_info()->length(); 602943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 603043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 603143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 603243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenbyte* Code::entry() { 603343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return instruction_start(); 603443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 603543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 603643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 6037c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.combool Code::contains(byte* inner_pointer) { 6038c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com return (address() <= inner_pointer) && (inner_pointer <= address() + Size()); 603943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 604043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 604143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 604243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenACCESSORS(JSArray, length, Object, kLengthOffset) 604343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 604443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 6045f705b5034dc5bc422ac1019b591469a7d0534772mstarzinger@chromium.orgvoid* JSArrayBuffer::backing_store() { 6046f705b5034dc5bc422ac1019b591469a7d0534772mstarzinger@chromium.org intptr_t ptr = READ_INTPTR_FIELD(this, kBackingStoreOffset); 6047f705b5034dc5bc422ac1019b591469a7d0534772mstarzinger@chromium.org return reinterpret_cast<void*>(ptr); 6048f705b5034dc5bc422ac1019b591469a7d0534772mstarzinger@chromium.org} 6049f705b5034dc5bc422ac1019b591469a7d0534772mstarzinger@chromium.org 6050f705b5034dc5bc422ac1019b591469a7d0534772mstarzinger@chromium.org 6051f705b5034dc5bc422ac1019b591469a7d0534772mstarzinger@chromium.orgvoid JSArrayBuffer::set_backing_store(void* value, WriteBarrierMode mode) { 6052f705b5034dc5bc422ac1019b591469a7d0534772mstarzinger@chromium.org intptr_t ptr = reinterpret_cast<intptr_t>(value); 6053f705b5034dc5bc422ac1019b591469a7d0534772mstarzinger@chromium.org WRITE_INTPTR_FIELD(this, kBackingStoreOffset, ptr); 6054f705b5034dc5bc422ac1019b591469a7d0534772mstarzinger@chromium.org} 6055f705b5034dc5bc422ac1019b591469a7d0534772mstarzinger@chromium.org 6056f705b5034dc5bc422ac1019b591469a7d0534772mstarzinger@chromium.org 6057f705b5034dc5bc422ac1019b591469a7d0534772mstarzinger@chromium.orgACCESSORS(JSArrayBuffer, byte_length, Object, kByteLengthOffset) 6058a53e8e03bcb23716d1025de362626f90f00da892svenpanne@chromium.orgACCESSORS_TO_SMI(JSArrayBuffer, flag, kFlagOffset) 6059a53e8e03bcb23716d1025de362626f90f00da892svenpanne@chromium.org 6060a53e8e03bcb23716d1025de362626f90f00da892svenpanne@chromium.org 6061a53e8e03bcb23716d1025de362626f90f00da892svenpanne@chromium.orgbool JSArrayBuffer::is_external() { 6062a53e8e03bcb23716d1025de362626f90f00da892svenpanne@chromium.org return BooleanBit::get(flag(), kIsExternalBit); 6063a53e8e03bcb23716d1025de362626f90f00da892svenpanne@chromium.org} 6064a53e8e03bcb23716d1025de362626f90f00da892svenpanne@chromium.org 6065a53e8e03bcb23716d1025de362626f90f00da892svenpanne@chromium.org 6066a53e8e03bcb23716d1025de362626f90f00da892svenpanne@chromium.orgvoid JSArrayBuffer::set_is_external(bool value) { 6067a53e8e03bcb23716d1025de362626f90f00da892svenpanne@chromium.org set_flag(BooleanBit::set(flag(), kIsExternalBit, value)); 6068a53e8e03bcb23716d1025de362626f90f00da892svenpanne@chromium.org} 6069f705b5034dc5bc422ac1019b591469a7d0534772mstarzinger@chromium.org 6070f705b5034dc5bc422ac1019b591469a7d0534772mstarzinger@chromium.org 6071f9841897146bc10dbb3c45f0632bb79254602c75machenbach@chromium.orgbool JSArrayBuffer::should_be_freed() { 6072f9841897146bc10dbb3c45f0632bb79254602c75machenbach@chromium.org return BooleanBit::get(flag(), kShouldBeFreed); 6073f9841897146bc10dbb3c45f0632bb79254602c75machenbach@chromium.org} 6074f9841897146bc10dbb3c45f0632bb79254602c75machenbach@chromium.org 6075f9841897146bc10dbb3c45f0632bb79254602c75machenbach@chromium.org 6076f9841897146bc10dbb3c45f0632bb79254602c75machenbach@chromium.orgvoid JSArrayBuffer::set_should_be_freed(bool value) { 6077f9841897146bc10dbb3c45f0632bb79254602c75machenbach@chromium.org set_flag(BooleanBit::set(flag(), kShouldBeFreed, value)); 6078f9841897146bc10dbb3c45f0632bb79254602c75machenbach@chromium.org} 6079f9841897146bc10dbb3c45f0632bb79254602c75machenbach@chromium.org 6080f9841897146bc10dbb3c45f0632bb79254602c75machenbach@chromium.org 60811fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.orgACCESSORS(JSArrayBuffer, weak_next, Object, kWeakNextOffset) 60821510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgACCESSORS(JSArrayBuffer, weak_first_view, Object, kWeakFirstViewOffset) 60831fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org 60841fd77d58ca66b2711f09cdea32c0c2d1a01b3ae5danno@chromium.org 60851510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgACCESSORS(JSArrayBufferView, buffer, Object, kBufferOffset) 60861510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgACCESSORS(JSArrayBufferView, byte_offset, Object, kByteOffsetOffset) 60871510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgACCESSORS(JSArrayBufferView, byte_length, Object, kByteLengthOffset) 60881510d58cbcf57c82a10e7d390bfe21a7ae68ba43mstarzinger@chromium.orgACCESSORS(JSArrayBufferView, weak_next, Object, kWeakNextOffset) 6089e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.orgACCESSORS(JSTypedArray, length, Object, kLengthOffset) 6090e27d617298263725e8a48c2aa14029759b952623mstarzinger@chromium.org 6091236ad9617a7359a463144a6ebeb5431a70f769cfager@chromium.orgACCESSORS(JSRegExp, data, Object, kDataOffset) 6092236ad9617a7359a463144a6ebeb5431a70f769cfager@chromium.org 6093236ad9617a7359a463144a6ebeb5431a70f769cfager@chromium.org 60949fe21c6d4c657d15af27c8751257d3e2bf113e45kasperl@chromium.orgJSRegExp::Type JSRegExp::TypeTag() { 60959fe21c6d4c657d15af27c8751257d3e2bf113e45kasperl@chromium.org Object* data = this->data(); 60969fe21c6d4c657d15af27c8751257d3e2bf113e45kasperl@chromium.org if (data->IsUndefined()) return JSRegExp::NOT_COMPILED; 60979fe21c6d4c657d15af27c8751257d3e2bf113e45kasperl@chromium.org Smi* smi = Smi::cast(FixedArray::cast(data)->get(kTagIndex)); 60989fe21c6d4c657d15af27c8751257d3e2bf113e45kasperl@chromium.org return static_cast<JSRegExp::Type>(smi->value()); 6099236ad9617a7359a463144a6ebeb5431a70f769cfager@chromium.org} 6100236ad9617a7359a463144a6ebeb5431a70f769cfager@chromium.org 6101236ad9617a7359a463144a6ebeb5431a70f769cfager@chromium.org 6102bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.orgint JSRegExp::CaptureCount() { 6103bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org switch (TypeTag()) { 6104bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org case ATOM: 6105bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org return 0; 6106bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org case IRREGEXP: 6107bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org return Smi::cast(DataAt(kIrregexpCaptureCountIndex))->value(); 6108bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org default: 6109bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org UNREACHABLE(); 6110bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org return -1; 6111bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org } 6112bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org} 6113bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org 6114bb29dc9819bb6f495ab6eddd2543965eb97a8e43ager@chromium.org 6115a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.orgJSRegExp::Flags JSRegExp::GetFlags() { 6116a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org ASSERT(this->data()->IsFixedArray()); 6117a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org Object* data = this->data(); 6118a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org Smi* smi = Smi::cast(FixedArray::cast(data)->get(kFlagsIndex)); 6119a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org return Flags(smi->value()); 6120a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org} 6121a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org 6122a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org 6123a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.orgString* JSRegExp::Pattern() { 6124a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org ASSERT(this->data()->IsFixedArray()); 6125a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org Object* data = this->data(); 6126a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org String* pattern= String::cast(FixedArray::cast(data)->get(kSourceIndex)); 6127a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org return pattern; 6128a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org} 6129a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org 6130a74f0daeb278665869b4b6a3bc2739e88fed93b1ager@chromium.org 61319fe21c6d4c657d15af27c8751257d3e2bf113e45kasperl@chromium.orgObject* JSRegExp::DataAt(int index) { 61329fe21c6d4c657d15af27c8751257d3e2bf113e45kasperl@chromium.org ASSERT(TypeTag() != NOT_COMPILED); 61339fe21c6d4c657d15af27c8751257d3e2bf113e45kasperl@chromium.org return FixedArray::cast(data())->get(index); 6134236ad9617a7359a463144a6ebeb5431a70f769cfager@chromium.org} 6135236ad9617a7359a463144a6ebeb5431a70f769cfager@chromium.org 6136236ad9617a7359a463144a6ebeb5431a70f769cfager@chromium.org 61377be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.orgvoid JSRegExp::SetDataAt(int index, Object* value) { 61387be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org ASSERT(TypeTag() != NOT_COMPILED); 61397be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org ASSERT(index >= kDataIndex); // Only implementation data can be set this way. 61407be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org FixedArray::cast(data())->set(index, value); 61417be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org} 61427be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org 61437be3c996bea370e151c9fe4ecf7f779cdc5f87adkasperl@chromium.org 614483e168294456ca2f02db421a635f7d5f5d023966kmillikin@chromium.orgElementsKind JSObject::GetElementsKind() { 6145d6076d96a1411932548838e5960b594564264010erik.corry@gmail.com ElementsKind kind = map()->elements_kind(); 6146c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com#if DEBUG 6147c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com FixedArrayBase* fixed_array = 6148c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com reinterpret_cast<FixedArrayBase*>(READ_FIELD(this, kElementsOffset)); 6149ef33a5482a35a9a25f702f8e3f02bb6b49f3854cjkummerow@chromium.org 6150ef33a5482a35a9a25f702f8e3f02bb6b49f3854cjkummerow@chromium.org // If a GC was caused while constructing this object, the elements 6151ef33a5482a35a9a25f702f8e3f02bb6b49f3854cjkummerow@chromium.org // pointer may point to a one pointer filler map. 6152ef33a5482a35a9a25f702f8e3f02bb6b49f3854cjkummerow@chromium.org if (ElementsAreSafeToExamine()) { 6153ef33a5482a35a9a25f702f8e3f02bb6b49f3854cjkummerow@chromium.org Map* map = fixed_array->map(); 6154ef33a5482a35a9a25f702f8e3f02bb6b49f3854cjkummerow@chromium.org ASSERT((IsFastSmiOrObjectElementsKind(kind) && 6155ef33a5482a35a9a25f702f8e3f02bb6b49f3854cjkummerow@chromium.org (map == GetHeap()->fixed_array_map() || 6156ef33a5482a35a9a25f702f8e3f02bb6b49f3854cjkummerow@chromium.org map == GetHeap()->fixed_cow_array_map())) || 6157ef33a5482a35a9a25f702f8e3f02bb6b49f3854cjkummerow@chromium.org (IsFastDoubleElementsKind(kind) && 6158ef33a5482a35a9a25f702f8e3f02bb6b49f3854cjkummerow@chromium.org (fixed_array->IsFixedDoubleArray() || 6159ef33a5482a35a9a25f702f8e3f02bb6b49f3854cjkummerow@chromium.org fixed_array == GetHeap()->empty_fixed_array())) || 6160ef33a5482a35a9a25f702f8e3f02bb6b49f3854cjkummerow@chromium.org (kind == DICTIONARY_ELEMENTS && 6161394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com fixed_array->IsFixedArray() && 6162ef33a5482a35a9a25f702f8e3f02bb6b49f3854cjkummerow@chromium.org fixed_array->IsDictionary()) || 6163ef33a5482a35a9a25f702f8e3f02bb6b49f3854cjkummerow@chromium.org (kind > DICTIONARY_ELEMENTS)); 6164486536df718553960f9700559e80e5b10b0d5994dslomov@chromium.org ASSERT((kind != SLOPPY_ARGUMENTS_ELEMENTS) || 6165ef33a5482a35a9a25f702f8e3f02bb6b49f3854cjkummerow@chromium.org (elements()->IsFixedArray() && elements()->length() >= 2)); 6166ef33a5482a35a9a25f702f8e3f02bb6b49f3854cjkummerow@chromium.org } 6167c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com#endif 6168d6076d96a1411932548838e5960b594564264010erik.corry@gmail.com return kind; 61690b6db5975a9d1ebcf3de7b18603380d99f789e66sgjesse@chromium.org} 61700b6db5975a9d1ebcf3de7b18603380d99f789e66sgjesse@chromium.org 61710b6db5975a9d1ebcf3de7b18603380d99f789e66sgjesse@chromium.org 61727c2628c3f0353f0558760c3ca442f934263ea766kmillikin@chromium.orgElementsAccessor* JSObject::GetElementsAccessor() { 61737c2628c3f0353f0558760c3ca442f934263ea766kmillikin@chromium.org return ElementsAccessor::ForKind(GetElementsKind()); 61747c2628c3f0353f0558760c3ca442f934263ea766kmillikin@chromium.org} 61757c2628c3f0353f0558760c3ca442f934263ea766kmillikin@chromium.org 61767c2628c3f0353f0558760c3ca442f934263ea766kmillikin@chromium.org 6177830d30c478be03b0ac560f4002833ab141e41effsvenpanne@chromium.orgbool JSObject::HasFastObjectElements() { 6178830d30c478be03b0ac560f4002833ab141e41effsvenpanne@chromium.org return IsFastObjectElementsKind(GetElementsKind()); 61790b6db5975a9d1ebcf3de7b18603380d99f789e66sgjesse@chromium.org} 61800b6db5975a9d1ebcf3de7b18603380d99f789e66sgjesse@chromium.org 61810b6db5975a9d1ebcf3de7b18603380d99f789e66sgjesse@chromium.org 6182830d30c478be03b0ac560f4002833ab141e41effsvenpanne@chromium.orgbool JSObject::HasFastSmiElements() { 6183830d30c478be03b0ac560f4002833ab141e41effsvenpanne@chromium.org return IsFastSmiElementsKind(GetElementsKind()); 6184c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com} 6185c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com 6186c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com 6187830d30c478be03b0ac560f4002833ab141e41effsvenpanne@chromium.orgbool JSObject::HasFastSmiOrObjectElements() { 6188830d30c478be03b0ac560f4002833ab141e41effsvenpanne@chromium.org return IsFastSmiOrObjectElementsKind(GetElementsKind()); 6189c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com} 6190c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com 6191c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com 61926d786c9805481bd13ecb29c3155540f2f32950e1svenpanne@chromium.orgbool JSObject::HasFastDoubleElements() { 6193830d30c478be03b0ac560f4002833ab141e41effsvenpanne@chromium.org return IsFastDoubleElementsKind(GetElementsKind()); 6194830d30c478be03b0ac560f4002833ab141e41effsvenpanne@chromium.org} 6195830d30c478be03b0ac560f4002833ab141e41effsvenpanne@chromium.org 6196830d30c478be03b0ac560f4002833ab141e41effsvenpanne@chromium.org 6197830d30c478be03b0ac560f4002833ab141e41effsvenpanne@chromium.orgbool JSObject::HasFastHoleyElements() { 6198830d30c478be03b0ac560f4002833ab141e41effsvenpanne@chromium.org return IsFastHoleyElementsKind(GetElementsKind()); 61996d786c9805481bd13ecb29c3155540f2f32950e1svenpanne@chromium.org} 62006d786c9805481bd13ecb29c3155540f2f32950e1svenpanne@chromium.org 62016d786c9805481bd13ecb29c3155540f2f32950e1svenpanne@chromium.org 6202fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.orgbool JSObject::HasFastElements() { 6203fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org return IsFastElementsKind(GetElementsKind()); 6204fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org} 6205fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org 6206fb37721ea34922d8758d5cb26ae465aaf241e6b6yangguo@chromium.org 62070b6db5975a9d1ebcf3de7b18603380d99f789e66sgjesse@chromium.orgbool JSObject::HasDictionaryElements() { 62080b6db5975a9d1ebcf3de7b18603380d99f789e66sgjesse@chromium.org return GetElementsKind() == DICTIONARY_ELEMENTS; 62090b6db5975a9d1ebcf3de7b18603380d99f789e66sgjesse@chromium.org} 62100b6db5975a9d1ebcf3de7b18603380d99f789e66sgjesse@chromium.org 62110b6db5975a9d1ebcf3de7b18603380d99f789e66sgjesse@chromium.org 6212486536df718553960f9700559e80e5b10b0d5994dslomov@chromium.orgbool JSObject::HasSloppyArgumentsElements() { 6213486536df718553960f9700559e80e5b10b0d5994dslomov@chromium.org return GetElementsKind() == SLOPPY_ARGUMENTS_ELEMENTS; 6214c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com} 6215c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com 6216c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com 62173811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.orgbool JSObject::HasExternalArrayElements() { 62184d3fe4e246b0312eba361689f288ddf8dd516960danno@chromium.org HeapObject* array = elements(); 62194d3fe4e246b0312eba361689f288ddf8dd516960danno@chromium.org ASSERT(array != NULL); 62204d3fe4e246b0312eba361689f288ddf8dd516960danno@chromium.org return array->IsExternalArray(); 62213811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org} 62223811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org 62233811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org 6224af4fba3c6d2a18866505de3e6798757dd1448c6dmachenbach@chromium.org#define EXTERNAL_ELEMENTS_CHECK(Type, type, TYPE, ctype, size) \ 6225af4fba3c6d2a18866505de3e6798757dd1448c6dmachenbach@chromium.orgbool JSObject::HasExternal##Type##Elements() { \ 6226af4fba3c6d2a18866505de3e6798757dd1448c6dmachenbach@chromium.org HeapObject* array = elements(); \ 6227af4fba3c6d2a18866505de3e6798757dd1448c6dmachenbach@chromium.org ASSERT(array != NULL); \ 6228af4fba3c6d2a18866505de3e6798757dd1448c6dmachenbach@chromium.org if (!array->IsHeapObject()) \ 6229af4fba3c6d2a18866505de3e6798757dd1448c6dmachenbach@chromium.org return false; \ 6230af4fba3c6d2a18866505de3e6798757dd1448c6dmachenbach@chromium.org return array->map()->instance_type() == EXTERNAL_##TYPE##_ARRAY_TYPE; \ 62313811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org} 62323811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org 6233af4fba3c6d2a18866505de3e6798757dd1448c6dmachenbach@chromium.orgTYPED_ARRAYS(EXTERNAL_ELEMENTS_CHECK) 62343811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org 6235af4fba3c6d2a18866505de3e6798757dd1448c6dmachenbach@chromium.org#undef EXTERNAL_ELEMENTS_CHECK 62363811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org 62373811b436bf328d2ace6fe79ce99aeda71f9f06d3ager@chromium.org 62385c88bc39690cc94affe78cf5777eb8180c4af8a4machenbach@chromium.orgbool JSObject::HasFixedTypedArrayElements() { 62395c88bc39690cc94affe78cf5777eb8180c4af8a4machenbach@chromium.org HeapObject* array = elements(); 62405c88bc39690cc94affe78cf5777eb8180c4af8a4machenbach@chromium.org ASSERT(array != NULL); 62415c88bc39690cc94affe78cf5777eb8180c4af8a4machenbach@chromium.org return array->IsFixedTypedArrayBase(); 62425c88bc39690cc94affe78cf5777eb8180c4af8a4machenbach@chromium.org} 62435c88bc39690cc94affe78cf5777eb8180c4af8a4machenbach@chromium.org 62445c88bc39690cc94affe78cf5777eb8180c4af8a4machenbach@chromium.org 6245895f00d1d8c5a7a7209c36d690688e3552de3df4machenbach@chromium.org#define FIXED_TYPED_ELEMENTS_CHECK(Type, type, TYPE, ctype, size) \ 6246895f00d1d8c5a7a7209c36d690688e3552de3df4machenbach@chromium.orgbool JSObject::HasFixed##Type##Elements() { \ 6247895f00d1d8c5a7a7209c36d690688e3552de3df4machenbach@chromium.org HeapObject* array = elements(); \ 6248895f00d1d8c5a7a7209c36d690688e3552de3df4machenbach@chromium.org ASSERT(array != NULL); \ 6249895f00d1d8c5a7a7209c36d690688e3552de3df4machenbach@chromium.org if (!array->IsHeapObject()) \ 6250895f00d1d8c5a7a7209c36d690688e3552de3df4machenbach@chromium.org return false; \ 6251895f00d1d8c5a7a7209c36d690688e3552de3df4machenbach@chromium.org return array->map()->instance_type() == FIXED_##TYPE##_ARRAY_TYPE; \ 6252895f00d1d8c5a7a7209c36d690688e3552de3df4machenbach@chromium.org} 6253895f00d1d8c5a7a7209c36d690688e3552de3df4machenbach@chromium.org 6254895f00d1d8c5a7a7209c36d690688e3552de3df4machenbach@chromium.orgTYPED_ARRAYS(FIXED_TYPED_ELEMENTS_CHECK) 6255895f00d1d8c5a7a7209c36d690688e3552de3df4machenbach@chromium.org 6256895f00d1d8c5a7a7209c36d690688e3552de3df4machenbach@chromium.org#undef FIXED_TYPED_ELEMENTS_CHECK 6257895f00d1d8c5a7a7209c36d690688e3552de3df4machenbach@chromium.org 6258895f00d1d8c5a7a7209c36d690688e3552de3df4machenbach@chromium.org 625943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenbool JSObject::HasNamedInterceptor() { 626043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return map()->has_named_interceptor(); 626143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 626243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 626343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 626443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenbool JSObject::HasIndexedInterceptor() { 626543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return map()->has_indexed_interceptor(); 626643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 626743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 626843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 6269750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.orgNameDictionary* JSObject::property_dictionary() { 627043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen ASSERT(!HasFastProperties()); 6271750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org return NameDictionary::cast(properties()); 627243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 627343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 627443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 6275f2038fb01417bcf7698b87a5dfaa4a861539618aerik.corry@gmail.comSeededNumberDictionary* JSObject::element_dictionary() { 62760b6db5975a9d1ebcf3de7b18603380d99f789e66sgjesse@chromium.org ASSERT(HasDictionaryElements()); 6277f2038fb01417bcf7698b87a5dfaa4a861539618aerik.corry@gmail.com return SeededNumberDictionary::cast(elements()); 627843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 627943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 628043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 62814a9f6553038df6b893b3d3ccae351723f4cbbae7yangguo@chromium.orgbool Name::IsHashFieldComputed(uint32_t field) { 628230ce411529579186181838984710b0b0980857aaricow@chromium.org return (field & kHashNotComputedMask) == 0; 628330ce411529579186181838984710b0b0980857aaricow@chromium.org} 628430ce411529579186181838984710b0b0980857aaricow@chromium.org 628530ce411529579186181838984710b0b0980857aaricow@chromium.org 62864a9f6553038df6b893b3d3ccae351723f4cbbae7yangguo@chromium.orgbool Name::HasHashCode() { 628730ce411529579186181838984710b0b0980857aaricow@chromium.org return IsHashFieldComputed(hash_field()); 628843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 628943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 629043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 62914a9f6553038df6b893b3d3ccae351723f4cbbae7yangguo@chromium.orguint32_t Name::Hash() { 629243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // Fast case: has hash code already been computed? 6293ac6aa175ab59d65cfb7a88dbb621e1d7f1a80b8fsgjesse@chromium.org uint32_t field = hash_field(); 629430ce411529579186181838984710b0b0980857aaricow@chromium.org if (IsHashFieldComputed(field)) return field >> kHashShift; 62954a9f6553038df6b893b3d3ccae351723f4cbbae7yangguo@chromium.org // Slow case: compute hash code and set it. Has to be a string. 62964a9f6553038df6b893b3d3ccae351723f4cbbae7yangguo@chromium.org return String::cast(this)->ComputeAndSetHash(); 629743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 629843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 629943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 6300fab1498f2f42726c7de46c3ed560d56dd072a8b3rossberg@chromium.orgStringHasher::StringHasher(int length, uint32_t seed) 63017c537e2abe09729ed6cb827b4dd206470d8c4a42ager@chromium.org : length_(length), 6302fab1498f2f42726c7de46c3ed560d56dd072a8b3rossberg@chromium.org raw_running_hash_(seed), 63037c537e2abe09729ed6cb827b4dd206470d8c4a42ager@chromium.org array_index_(0), 63047c537e2abe09729ed6cb827b4dd206470d8c4a42ager@chromium.org is_array_index_(0 < length_ && length_ <= String::kMaxArrayIndexSize), 630533e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org is_first_char_(true) { 6306f2038fb01417bcf7698b87a5dfaa4a861539618aerik.corry@gmail.com ASSERT(FLAG_randomize_hashes || raw_running_hash_ == 0); 6307fab1498f2f42726c7de46c3ed560d56dd072a8b3rossberg@chromium.org} 63087c537e2abe09729ed6cb827b4dd206470d8c4a42ager@chromium.org 63097c537e2abe09729ed6cb827b4dd206470d8c4a42ager@chromium.org 63107c537e2abe09729ed6cb827b4dd206470d8c4a42ager@chromium.orgbool StringHasher::has_trivial_hash() { 6311ac6aa175ab59d65cfb7a88dbb621e1d7f1a80b8fsgjesse@chromium.org return length_ > String::kMaxHashCalcLength; 63127c537e2abe09729ed6cb827b4dd206470d8c4a42ager@chromium.org} 63137c537e2abe09729ed6cb827b4dd206470d8c4a42ager@chromium.org 63147c537e2abe09729ed6cb827b4dd206470d8c4a42ager@chromium.org 6315a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.orguint32_t StringHasher::AddCharacterCore(uint32_t running_hash, uint16_t c) { 631633e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org running_hash += c; 631733e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org running_hash += (running_hash << 10); 631833e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org running_hash ^= (running_hash >> 6); 631933e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org return running_hash; 632033e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org} 632133e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org 632233e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org 632333e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.orguint32_t StringHasher::GetHashCore(uint32_t running_hash) { 632433e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org running_hash += (running_hash << 3); 632533e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org running_hash ^= (running_hash >> 11); 632633e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org running_hash += (running_hash << 15); 632733e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org if ((running_hash & String::kHashBitMask) == 0) { 632889e18f5599cb4cd462cb1ed324addd7388fb4d60rossberg@chromium.org return kZeroHash; 632933e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org } 633033e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org return running_hash; 633133e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org} 633233e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org 633333e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org 6334a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.orgvoid StringHasher::AddCharacter(uint16_t c) { 63355a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org // Use the Jenkins one-at-a-time hash function to update the hash 63365a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org // for the given character. 633733e09c8efd078308de3c77a88301566f65c07befverwaest@chromium.org raw_running_hash_ = AddCharacterCore(raw_running_hash_, c); 63387c537e2abe09729ed6cb827b4dd206470d8c4a42ager@chromium.org} 63397c537e2abe09729ed6cb827b4dd206470d8c4a42ager@chromium.org 63407c537e2abe09729ed6cb827b4dd206470d8c4a42ager@chromium.org 6341a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.orgbool StringHasher::UpdateIndex(uint16_t c) { 6342a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.org ASSERT(is_array_index_); 6343a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.org if (c < '0' || c > '9') { 6344a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.org is_array_index_ = false; 6345a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.org return false; 6346154ff99473e866f5eb00a44045e27866a7fdce29yangguo@chromium.org } 6347a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.org int d = c - '0'; 6348a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.org if (is_first_char_) { 6349a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.org is_first_char_ = false; 6350a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.org if (c == '0' && length_ > 1) { 6351a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.org is_array_index_ = false; 6352a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.org return false; 6353a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.org } 6354a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.org } 6355a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.org if (array_index_ > 429496729U - ((d + 2) >> 3)) { 6356a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.org is_array_index_ = false; 6357a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.org return false; 6358a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.org } 6359a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.org array_index_ = array_index_ * 10 + d; 6360a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.org return true; 63617c537e2abe09729ed6cb827b4dd206470d8c4a42ager@chromium.org} 63627c537e2abe09729ed6cb827b4dd206470d8c4a42ager@chromium.org 63637c537e2abe09729ed6cb827b4dd206470d8c4a42ager@chromium.org 6364a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.orgtemplate<typename Char> 6365a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.orginline void StringHasher::AddCharacters(const Char* chars, int length) { 6366a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.org ASSERT(sizeof(Char) == 1 || sizeof(Char) == 2); 6367a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.org int i = 0; 6368a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.org if (is_array_index_) { 6369a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.org for (; i < length; i++) { 6370a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.org AddCharacter(chars[i]); 6371a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.org if (!UpdateIndex(chars[i])) { 6372a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.org i++; 6373a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.org break; 6374a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.org } 6375a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.org } 6376a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.org } 6377a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.org for (; i < length; i++) { 6378a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.org ASSERT(!is_array_index_); 6379a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.org AddCharacter(chars[i]); 6380a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.org } 63817c537e2abe09729ed6cb827b4dd206470d8c4a42ager@chromium.org} 63827c537e2abe09729ed6cb827b4dd206470d8c4a42ager@chromium.org 63837c537e2abe09729ed6cb827b4dd206470d8c4a42ager@chromium.org 6384b08986cb66c3f6687247cb6da186c1e73057e399whesse@chromium.orgtemplate <typename schar> 6385a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.orguint32_t StringHasher::HashSequentialString(const schar* chars, 6386a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.org int length, 6387a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.org uint32_t seed) { 6388fab1498f2f42726c7de46c3ed560d56dd072a8b3rossberg@chromium.org StringHasher hasher(length, seed); 6389a6bbcc801f63c451f814d6da77a1a48fba3d36c6yangguo@chromium.org if (!hasher.has_trivial_hash()) hasher.AddCharacters(chars, length); 6390b08986cb66c3f6687247cb6da186c1e73057e399whesse@chromium.org return hasher.GetHashField(); 6391b08986cb66c3f6687247cb6da186c1e73057e399whesse@chromium.org} 6392b08986cb66c3f6687247cb6da186c1e73057e399whesse@chromium.org 6393b08986cb66c3f6687247cb6da186c1e73057e399whesse@chromium.org 6394750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.orgbool Name::AsArrayIndex(uint32_t* index) { 6395750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org return IsString() && String::cast(this)->AsArrayIndex(index); 6396750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org} 6397750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org 6398750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org 639943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenbool String::AsArrayIndex(uint32_t* index) { 6400ac6aa175ab59d65cfb7a88dbb621e1d7f1a80b8fsgjesse@chromium.org uint32_t field = hash_field(); 64011af7e1b5f676e5556c041fe09a5c4f5a906f27a0lrn@chromium.org if (IsHashFieldComputed(field) && (field & kIsNotArrayIndexMask)) { 64021af7e1b5f676e5556c041fe09a5c4f5a906f27a0lrn@chromium.org return false; 64031af7e1b5f676e5556c041fe09a5c4f5a906f27a0lrn@chromium.org } 640443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return SlowAsArrayIndex(index); 640543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 640643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 640743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 6408d2be901879306d8ff27e78e37783028d581d46fcricow@chromium.orgObject* JSReceiver::GetPrototype() { 640999aa490225c81012235659d9a183226b286178c8yangguo@chromium.org return map()->prototype(); 641043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 641143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 641243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 6413c74d674717b2e229addbb9349986cd157947f7edyangguo@chromium.orgObject* JSReceiver::GetConstructor() { 6414c74d674717b2e229addbb9349986cd157947f7edyangguo@chromium.org return map()->constructor(); 6415c74d674717b2e229addbb9349986cd157947f7edyangguo@chromium.org} 6416c74d674717b2e229addbb9349986cd157947f7edyangguo@chromium.org 6417c74d674717b2e229addbb9349986cd157947f7edyangguo@chromium.org 6418528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.orgbool JSReceiver::HasProperty(Handle<JSReceiver> object, 6419528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org Handle<Name> name) { 6420528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org if (object->IsJSProxy()) { 6421528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org Handle<JSProxy> proxy = Handle<JSProxy>::cast(object); 6422528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org return JSProxy::HasPropertyWithHandler(proxy, name); 6423717967fd64e99e759ff094df6f069440cc866266rossberg@chromium.org } 64241845eb0120c7a870d7388de091246a7d1b48a4f8machenbach@chromium.org return GetPropertyAttributes(object, name) != ABSENT; 6425717967fd64e99e759ff094df6f069440cc866266rossberg@chromium.org} 6426717967fd64e99e759ff094df6f069440cc866266rossberg@chromium.org 6427717967fd64e99e759ff094df6f069440cc866266rossberg@chromium.org 6428fb547e07aef43e02715c5d6c1530e84bb3cbba02machenbach@chromium.orgbool JSReceiver::HasOwnProperty(Handle<JSReceiver> object, Handle<Name> name) { 6429528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org if (object->IsJSProxy()) { 6430528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org Handle<JSProxy> proxy = Handle<JSProxy>::cast(object); 6431528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org return JSProxy::HasPropertyWithHandler(proxy, name); 6432717967fd64e99e759ff094df6f069440cc866266rossberg@chromium.org } 64331845eb0120c7a870d7388de091246a7d1b48a4f8machenbach@chromium.org return GetOwnPropertyAttributes(object, name) != ABSENT; 6434717967fd64e99e759ff094df6f069440cc866266rossberg@chromium.org} 6435717967fd64e99e759ff094df6f069440cc866266rossberg@chromium.org 6436717967fd64e99e759ff094df6f069440cc866266rossberg@chromium.org 64371845eb0120c7a870d7388de091246a7d1b48a4f8machenbach@chromium.orgPropertyAttributes JSReceiver::GetPropertyAttributes(Handle<JSReceiver> object, 64381845eb0120c7a870d7388de091246a7d1b48a4f8machenbach@chromium.org Handle<Name> key) { 64398e8d8825f97138de12985f8e0d3163074dff5258ulan@chromium.org uint32_t index; 6440381adef828187e237e8758ab730dee1c2834a0b3machenbach@chromium.org if (object->IsJSObject() && key->AsArrayIndex(&index)) { 6441381adef828187e237e8758ab730dee1c2834a0b3machenbach@chromium.org return GetElementAttribute(object, index); 64428e8d8825f97138de12985f8e0d3163074dff5258ulan@chromium.org } 64431845eb0120c7a870d7388de091246a7d1b48a4f8machenbach@chromium.org LookupIterator it(object, key); 64441845eb0120c7a870d7388de091246a7d1b48a4f8machenbach@chromium.org return GetPropertyAttributes(&it); 644543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 644643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 6447e4ac3ef2f6fa9300bc78c5a4cb7d4cb66ac6e83dmvstanton@chromium.org 6448381adef828187e237e8758ab730dee1c2834a0b3machenbach@chromium.orgPropertyAttributes JSReceiver::GetElementAttribute(Handle<JSReceiver> object, 6449381adef828187e237e8758ab730dee1c2834a0b3machenbach@chromium.org uint32_t index) { 6450381adef828187e237e8758ab730dee1c2834a0b3machenbach@chromium.org if (object->IsJSProxy()) { 6451381adef828187e237e8758ab730dee1c2834a0b3machenbach@chromium.org return JSProxy::GetElementAttributeWithHandler( 6452381adef828187e237e8758ab730dee1c2834a0b3machenbach@chromium.org Handle<JSProxy>::cast(object), object, index); 6453e4ac3ef2f6fa9300bc78c5a4cb7d4cb66ac6e83dmvstanton@chromium.org } 6454381adef828187e237e8758ab730dee1c2834a0b3machenbach@chromium.org return JSObject::GetElementAttributeWithReceiver( 6455381adef828187e237e8758ab730dee1c2834a0b3machenbach@chromium.org Handle<JSObject>::cast(object), object, index, true); 6456e4ac3ef2f6fa9300bc78c5a4cb7d4cb66ac6e83dmvstanton@chromium.org} 6457e4ac3ef2f6fa9300bc78c5a4cb7d4cb66ac6e83dmvstanton@chromium.org 6458e4ac3ef2f6fa9300bc78c5a4cb7d4cb66ac6e83dmvstanton@chromium.org 6459113035e2f19feb7032fbe57b2e3e376f1dfc4110jkummerow@chromium.orgbool JSGlobalObject::IsDetached() { 6460113035e2f19feb7032fbe57b2e3e376f1dfc4110jkummerow@chromium.org return JSGlobalProxy::cast(global_receiver())->IsDetachedFrom(this); 6461113035e2f19feb7032fbe57b2e3e376f1dfc4110jkummerow@chromium.org} 6462113035e2f19feb7032fbe57b2e3e376f1dfc4110jkummerow@chromium.org 6463113035e2f19feb7032fbe57b2e3e376f1dfc4110jkummerow@chromium.org 6464113035e2f19feb7032fbe57b2e3e376f1dfc4110jkummerow@chromium.orgbool JSGlobalProxy::IsDetachedFrom(GlobalObject* global) { 6465113035e2f19feb7032fbe57b2e3e376f1dfc4110jkummerow@chromium.org return GetPrototype() != global; 6466c4c927273ae2b690c4a015b4640a2a469c9a1a69ager@chromium.org} 6467c4c927273ae2b690c4a015b4640a2a469c9a1a69ager@chromium.org 6468c4c927273ae2b690c4a015b4640a2a469c9a1a69ager@chromium.org 64693c3c8d733702cb2b41471efa5eead1faf5b5711bmachenbach@chromium.orgHandle<Smi> JSReceiver::GetOrCreateIdentityHash(Handle<JSReceiver> object) { 6470057bd50c2c2d15923523777a296cddee5c8ba63bverwaest@chromium.org return object->IsJSProxy() 6471057bd50c2c2d15923523777a296cddee5c8ba63bverwaest@chromium.org ? JSProxy::GetOrCreateIdentityHash(Handle<JSProxy>::cast(object)) 6472057bd50c2c2d15923523777a296cddee5c8ba63bverwaest@chromium.org : JSObject::GetOrCreateIdentityHash(Handle<JSObject>::cast(object)); 6473057bd50c2c2d15923523777a296cddee5c8ba63bverwaest@chromium.org} 6474057bd50c2c2d15923523777a296cddee5c8ba63bverwaest@chromium.org 6475057bd50c2c2d15923523777a296cddee5c8ba63bverwaest@chromium.org 6476057bd50c2c2d15923523777a296cddee5c8ba63bverwaest@chromium.orgObject* JSReceiver::GetIdentityHash() { 6477c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com return IsJSProxy() 6478057bd50c2c2d15923523777a296cddee5c8ba63bverwaest@chromium.org ? JSProxy::cast(this)->GetIdentityHash() 6479057bd50c2c2d15923523777a296cddee5c8ba63bverwaest@chromium.org : JSObject::cast(this)->GetIdentityHash(); 6480c4c927273ae2b690c4a015b4640a2a469c9a1a69ager@chromium.org} 6481c4c927273ae2b690c4a015b4640a2a469c9a1a69ager@chromium.org 6482c4c927273ae2b690c4a015b4640a2a469c9a1a69ager@chromium.org 6483528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.orgbool JSReceiver::HasElement(Handle<JSReceiver> object, uint32_t index) { 6484528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org if (object->IsJSProxy()) { 6485528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org Handle<JSProxy> proxy = Handle<JSProxy>::cast(object); 6486528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org return JSProxy::HasElementWithHandler(proxy, index); 6487c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com } 6488381adef828187e237e8758ab730dee1c2834a0b3machenbach@chromium.org return JSObject::GetElementAttributeWithReceiver( 6489381adef828187e237e8758ab730dee1c2834a0b3machenbach@chromium.org Handle<JSObject>::cast(object), object, index, true) != ABSENT; 6490e4ac3ef2f6fa9300bc78c5a4cb7d4cb66ac6e83dmvstanton@chromium.org} 6491e4ac3ef2f6fa9300bc78c5a4cb7d4cb66ac6e83dmvstanton@chromium.org 6492e4ac3ef2f6fa9300bc78c5a4cb7d4cb66ac6e83dmvstanton@chromium.org 6493fb547e07aef43e02715c5d6c1530e84bb3cbba02machenbach@chromium.orgbool JSReceiver::HasOwnElement(Handle<JSReceiver> object, uint32_t index) { 6494528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org if (object->IsJSProxy()) { 6495528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org Handle<JSProxy> proxy = Handle<JSProxy>::cast(object); 6496528ce02b8680a3ab6d75c7079f180a4016c69b7amachenbach@chromium.org return JSProxy::HasElementWithHandler(proxy, index); 6497e4ac3ef2f6fa9300bc78c5a4cb7d4cb66ac6e83dmvstanton@chromium.org } 6498381adef828187e237e8758ab730dee1c2834a0b3machenbach@chromium.org return JSObject::GetElementAttributeWithReceiver( 6499381adef828187e237e8758ab730dee1c2834a0b3machenbach@chromium.org Handle<JSObject>::cast(object), object, index, false) != ABSENT; 6500e4ac3ef2f6fa9300bc78c5a4cb7d4cb66ac6e83dmvstanton@chromium.org} 6501e4ac3ef2f6fa9300bc78c5a4cb7d4cb66ac6e83dmvstanton@chromium.org 6502e4ac3ef2f6fa9300bc78c5a4cb7d4cb66ac6e83dmvstanton@chromium.org 6503fb547e07aef43e02715c5d6c1530e84bb3cbba02machenbach@chromium.orgPropertyAttributes JSReceiver::GetOwnElementAttribute( 6504381adef828187e237e8758ab730dee1c2834a0b3machenbach@chromium.org Handle<JSReceiver> object, uint32_t index) { 6505381adef828187e237e8758ab730dee1c2834a0b3machenbach@chromium.org if (object->IsJSProxy()) { 6506381adef828187e237e8758ab730dee1c2834a0b3machenbach@chromium.org return JSProxy::GetElementAttributeWithHandler( 6507381adef828187e237e8758ab730dee1c2834a0b3machenbach@chromium.org Handle<JSProxy>::cast(object), object, index); 6508e4ac3ef2f6fa9300bc78c5a4cb7d4cb66ac6e83dmvstanton@chromium.org } 6509381adef828187e237e8758ab730dee1c2834a0b3machenbach@chromium.org return JSObject::GetElementAttributeWithReceiver( 6510381adef828187e237e8758ab730dee1c2834a0b3machenbach@chromium.org Handle<JSObject>::cast(object), object, index, false); 651143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 651243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 651343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 651443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenbool AccessorInfo::all_can_read() { 651543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return BooleanBit::get(flag(), kAllCanReadBit); 651643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 651743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 651843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 651943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid AccessorInfo::set_all_can_read(bool value) { 652043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen set_flag(BooleanBit::set(flag(), kAllCanReadBit, value)); 652143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 652243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 652343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 652443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenbool AccessorInfo::all_can_write() { 652543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return BooleanBit::get(flag(), kAllCanWriteBit); 652643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 652743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 652843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 652943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid AccessorInfo::set_all_can_write(bool value) { 653043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen set_flag(BooleanBit::set(flag(), kAllCanWriteBit, value)); 653143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 653243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 653343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 653443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenPropertyAttributes AccessorInfo::property_attributes() { 653543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen return AttributesField::decode(static_cast<uint32_t>(flag()->value())); 653643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 653743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 653843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 653943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansenvoid AccessorInfo::set_property_attributes(PropertyAttributes attributes) { 654083e168294456ca2f02db421a635f7d5f5d023966kmillikin@chromium.org set_flag(Smi::FromInt(AttributesField::update(flag()->value(), attributes))); 654143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 654243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 654344bc7080a85cc25bff3b9b77cd53f7beffab711bkarlklose@chromium.org 65447028c05c1c71b9d5c5fe1bca01f2461d17a2dda7mmassi@chromium.orgbool AccessorInfo::IsCompatibleReceiver(Object* receiver) { 65457028c05c1c71b9d5c5fe1bca01f2461d17a2dda7mmassi@chromium.org Object* function_template = expected_receiver_type(); 65467028c05c1c71b9d5c5fe1bca01f2461d17a2dda7mmassi@chromium.org if (!function_template->IsFunctionTemplateInfo()) return true; 65479af454f6b1c6a921ac79ba0b9a979c73adb2ca1emachenbach@chromium.org return FunctionTemplateInfo::cast(function_template)->IsTemplateFor(receiver); 65487028c05c1c71b9d5c5fe1bca01f2461d17a2dda7mmassi@chromium.org} 65497028c05c1c71b9d5c5fe1bca01f2461d17a2dda7mmassi@chromium.org 65507028c05c1c71b9d5c5fe1bca01f2461d17a2dda7mmassi@chromium.org 6551e31b63e9608909e17e35a3330b0075140af2fe91machenbach@chromium.orgvoid ExecutableAccessorInfo::clear_setter() { 6552e31b63e9608909e17e35a3330b0075140af2fe91machenbach@chromium.org set_setter(GetIsolate()->heap()->undefined_value(), SKIP_WRITE_BARRIER); 6553e31b63e9608909e17e35a3330b0075140af2fe91machenbach@chromium.org} 6554e31b63e9608909e17e35a3330b0075140af2fe91machenbach@chromium.org 6555e31b63e9608909e17e35a3330b0075140af2fe91machenbach@chromium.org 65561e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.orgvoid AccessorPair::set_access_flags(v8::AccessControl access_control) { 65571e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org int current = access_flags()->value(); 65581e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org current = BooleanBit::set(current, 65591e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org kAllCanReadBit, 65601e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org access_control & ALL_CAN_READ); 65611e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org current = BooleanBit::set(current, 65621e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org kAllCanWriteBit, 65631e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org access_control & ALL_CAN_WRITE); 65641e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org set_access_flags(Smi::FromInt(current)); 65651e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org} 65661e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org 65671e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org 65681e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.orgbool AccessorPair::all_can_read() { 65691e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org return BooleanBit::get(access_flags(), kAllCanReadBit); 65701e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org} 65711e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org 65721e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org 65731e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.orgbool AccessorPair::all_can_write() { 65741e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org return BooleanBit::get(access_flags(), kAllCanWriteBit); 65751e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org} 65761e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org 65771e8da746019f818a22dfdc6f691dbc0447048cadjkummerow@chromium.org 6578c2e08d7d6b03e672e13fc3bf274a292009decce6machenbach@chromium.orgtemplate<typename Derived, typename Shape, typename Key> 6579c2e08d7d6b03e672e13fc3bf274a292009decce6machenbach@chromium.orgvoid Dictionary<Derived, Shape, Key>::SetEntry(int entry, 6580865f51ff8c94f86f4c97636d70addc0f29e79674machenbach@chromium.org Handle<Object> key, 6581865f51ff8c94f86f4c97636d70addc0f29e79674machenbach@chromium.org Handle<Object> value) { 658244bc7080a85cc25bff3b9b77cd53f7beffab711bkarlklose@chromium.org SetEntry(entry, key, value, PropertyDetails(Smi::FromInt(0))); 658344bc7080a85cc25bff3b9b77cd53f7beffab711bkarlklose@chromium.org} 658444bc7080a85cc25bff3b9b77cd53f7beffab711bkarlklose@chromium.org 658544bc7080a85cc25bff3b9b77cd53f7beffab711bkarlklose@chromium.org 6586c2e08d7d6b03e672e13fc3bf274a292009decce6machenbach@chromium.orgtemplate<typename Derived, typename Shape, typename Key> 6587c2e08d7d6b03e672e13fc3bf274a292009decce6machenbach@chromium.orgvoid Dictionary<Derived, Shape, Key>::SetEntry(int entry, 6588865f51ff8c94f86f4c97636d70addc0f29e79674machenbach@chromium.org Handle<Object> key, 6589865f51ff8c94f86f4c97636d70addc0f29e79674machenbach@chromium.org Handle<Object> value, 6590c2e08d7d6b03e672e13fc3bf274a292009decce6machenbach@chromium.org PropertyDetails details) { 6591750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org ASSERT(!key->IsName() || 659246839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org details.IsDeleted() || 659346839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org details.dictionary_index() > 0); 6594c2e08d7d6b03e672e13fc3bf274a292009decce6machenbach@chromium.org int index = DerivedHashTable::EntryToIndex(entry); 659579e7902fa5f94747b5383dd40f3002dd8b62303arossberg@chromium.org DisallowHeapAllocation no_gc; 6596b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org WriteBarrierMode mode = FixedArray::GetWriteBarrierMode(no_gc); 6597865f51ff8c94f86f4c97636d70addc0f29e79674machenbach@chromium.org FixedArray::set(index, *key, mode); 6598865f51ff8c94f86f4c97636d70addc0f29e79674machenbach@chromium.org FixedArray::set(index+1, *value, mode); 6599394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com FixedArray::set(index+2, details.AsSmi()); 660043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 660143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 660243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 6603ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.orgbool NumberDictionaryShape::IsMatch(uint32_t key, Object* other) { 6604ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org ASSERT(other->IsNumber()); 6605ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org return key == static_cast<uint32_t>(other->Number()); 6606ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org} 6607ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org 6608ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org 6609f2038fb01417bcf7698b87a5dfaa4a861539618aerik.corry@gmail.comuint32_t UnseededNumberDictionaryShape::Hash(uint32_t key) { 6610f2038fb01417bcf7698b87a5dfaa4a861539618aerik.corry@gmail.com return ComputeIntegerHash(key, 0); 6611ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org} 6612ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org 6613ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org 6614f2038fb01417bcf7698b87a5dfaa4a861539618aerik.corry@gmail.comuint32_t UnseededNumberDictionaryShape::HashForObject(uint32_t key, 6615f2038fb01417bcf7698b87a5dfaa4a861539618aerik.corry@gmail.com Object* other) { 6616ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org ASSERT(other->IsNumber()); 6617f2038fb01417bcf7698b87a5dfaa4a861539618aerik.corry@gmail.com return ComputeIntegerHash(static_cast<uint32_t>(other->Number()), 0); 6618f2038fb01417bcf7698b87a5dfaa4a861539618aerik.corry@gmail.com} 6619f2038fb01417bcf7698b87a5dfaa4a861539618aerik.corry@gmail.com 6620865f51ff8c94f86f4c97636d70addc0f29e79674machenbach@chromium.org 6621f2038fb01417bcf7698b87a5dfaa4a861539618aerik.corry@gmail.comuint32_t SeededNumberDictionaryShape::SeededHash(uint32_t key, uint32_t seed) { 6622f2038fb01417bcf7698b87a5dfaa4a861539618aerik.corry@gmail.com return ComputeIntegerHash(key, seed); 6623ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org} 6624ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org 6625865f51ff8c94f86f4c97636d70addc0f29e79674machenbach@chromium.org 6626f2038fb01417bcf7698b87a5dfaa4a861539618aerik.corry@gmail.comuint32_t SeededNumberDictionaryShape::SeededHashForObject(uint32_t key, 6627f2038fb01417bcf7698b87a5dfaa4a861539618aerik.corry@gmail.com uint32_t seed, 6628f2038fb01417bcf7698b87a5dfaa4a861539618aerik.corry@gmail.com Object* other) { 6629f2038fb01417bcf7698b87a5dfaa4a861539618aerik.corry@gmail.com ASSERT(other->IsNumber()); 6630f2038fb01417bcf7698b87a5dfaa4a861539618aerik.corry@gmail.com return ComputeIntegerHash(static_cast<uint32_t>(other->Number()), seed); 6631f2038fb01417bcf7698b87a5dfaa4a861539618aerik.corry@gmail.com} 6632ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org 6633ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org 6634f2f0489407bbb5e50d16ae791442df29513b53b5machenbach@chromium.orgHandle<Object> NumberDictionaryShape::AsHandle(Isolate* isolate, uint32_t key) { 6635f2f0489407bbb5e50d16ae791442df29513b53b5machenbach@chromium.org return isolate->factory()->NewNumberFromUint(key); 6636f2f0489407bbb5e50d16ae791442df29513b53b5machenbach@chromium.org} 6637f2f0489407bbb5e50d16ae791442df29513b53b5machenbach@chromium.org 6638ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org 6639f2f0489407bbb5e50d16ae791442df29513b53b5machenbach@chromium.orgbool NameDictionaryShape::IsMatch(Handle<Name> key, Object* other) { 6640ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org // We know that all entries in a hash table had their hash keys created. 6641ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org // Use that knowledge to have fast failure. 6642750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org if (key->Hash() != Name::cast(other)->Hash()) return false; 6643750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org return key->Equals(Name::cast(other)); 6644ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org} 6645ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org 6646ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org 6647f2f0489407bbb5e50d16ae791442df29513b53b5machenbach@chromium.orguint32_t NameDictionaryShape::Hash(Handle<Name> key) { 6648ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org return key->Hash(); 6649ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org} 6650ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org 6651ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org 6652f2f0489407bbb5e50d16ae791442df29513b53b5machenbach@chromium.orguint32_t NameDictionaryShape::HashForObject(Handle<Name> key, Object* other) { 6653750145ab1b720c97adf2b548cc8fbd28c8b8e06dulan@chromium.org return Name::cast(other)->Hash(); 6654ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org} 6655ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org 6656ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org 6657f2f0489407bbb5e50d16ae791442df29513b53b5machenbach@chromium.orgHandle<Object> NameDictionaryShape::AsHandle(Isolate* isolate, 6658f2f0489407bbb5e50d16ae791442df29513b53b5machenbach@chromium.org Handle<Name> key) { 66598e36b5ba34174c8ceb04a47d7e10dcc8f43d94a4machenbach@chromium.org ASSERT(key->IsUniqueName()); 6660ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org return key; 6661ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org} 6662ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org 6663ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org 6664f2f0489407bbb5e50d16ae791442df29513b53b5machenbach@chromium.orgvoid NameDictionary::DoGenerateNewEnumerationIndices( 6665f2f0489407bbb5e50d16ae791442df29513b53b5machenbach@chromium.org Handle<NameDictionary> dictionary) { 6666f2f0489407bbb5e50d16ae791442df29513b53b5machenbach@chromium.org DerivedDictionary::GenerateNewEnumerationIndices(dictionary); 6667f2f0489407bbb5e50d16ae791442df29513b53b5machenbach@chromium.org} 6668f2f0489407bbb5e50d16ae791442df29513b53b5machenbach@chromium.org 6669f2f0489407bbb5e50d16ae791442df29513b53b5machenbach@chromium.org 6670865f51ff8c94f86f4c97636d70addc0f29e79674machenbach@chromium.orgbool ObjectHashTableShape::IsMatch(Handle<Object> key, Object* other) { 6671394dbcf9009cf5203b6d85e8b515fcff072040f3erik.corry@gmail.com return key->SameValue(other); 66727943d46751aa94f2738bef3002bd6675b520f3b5vegorov@chromium.org} 66737943d46751aa94f2738bef3002bd6675b520f3b5vegorov@chromium.org 66747943d46751aa94f2738bef3002bd6675b520f3b5vegorov@chromium.org 6675865f51ff8c94f86f4c97636d70addc0f29e79674machenbach@chromium.orguint32_t ObjectHashTableShape::Hash(Handle<Object> key) { 6676057bd50c2c2d15923523777a296cddee5c8ba63bverwaest@chromium.org return Smi::cast(key->GetHash())->value(); 66777943d46751aa94f2738bef3002bd6675b520f3b5vegorov@chromium.org} 66787943d46751aa94f2738bef3002bd6675b520f3b5vegorov@chromium.org 66797943d46751aa94f2738bef3002bd6675b520f3b5vegorov@chromium.org 6680865f51ff8c94f86f4c97636d70addc0f29e79674machenbach@chromium.orguint32_t ObjectHashTableShape::HashForObject(Handle<Object> key, 6681865f51ff8c94f86f4c97636d70addc0f29e79674machenbach@chromium.org Object* other) { 6682057bd50c2c2d15923523777a296cddee5c8ba63bverwaest@chromium.org return Smi::cast(other->GetHash())->value(); 66837943d46751aa94f2738bef3002bd6675b520f3b5vegorov@chromium.org} 66847943d46751aa94f2738bef3002bd6675b520f3b5vegorov@chromium.org 66857943d46751aa94f2738bef3002bd6675b520f3b5vegorov@chromium.org 6686865f51ff8c94f86f4c97636d70addc0f29e79674machenbach@chromium.orgHandle<Object> ObjectHashTableShape::AsHandle(Isolate* isolate, 6687865f51ff8c94f86f4c97636d70addc0f29e79674machenbach@chromium.org Handle<Object> key) { 66887943d46751aa94f2738bef3002bd6675b520f3b5vegorov@chromium.org return key; 66897943d46751aa94f2738bef3002bd6675b520f3b5vegorov@chromium.org} 66907943d46751aa94f2738bef3002bd6675b520f3b5vegorov@chromium.org 66917943d46751aa94f2738bef3002bd6675b520f3b5vegorov@chromium.org 6692c2e08d7d6b03e672e13fc3bf274a292009decce6machenbach@chromium.orgHandle<ObjectHashTable> ObjectHashTable::Shrink( 6693c2e08d7d6b03e672e13fc3bf274a292009decce6machenbach@chromium.org Handle<ObjectHashTable> table, Handle<Object> key) { 6694865f51ff8c94f86f4c97636d70addc0f29e79674machenbach@chromium.org return DerivedHashTable::Shrink(table, key); 6695c2e08d7d6b03e672e13fc3bf274a292009decce6machenbach@chromium.org} 6696c2e08d7d6b03e672e13fc3bf274a292009decce6machenbach@chromium.org 6697c2e08d7d6b03e672e13fc3bf274a292009decce6machenbach@chromium.org 669825b0e21ac53cd2e892094493a65f75258fa977f0jkummerow@chromium.orgtemplate <int entrysize> 6699865f51ff8c94f86f4c97636d70addc0f29e79674machenbach@chromium.orgbool WeakHashTableShape<entrysize>::IsMatch(Handle<Object> key, Object* other) { 670025b0e21ac53cd2e892094493a65f75258fa977f0jkummerow@chromium.org return key->SameValue(other); 670125b0e21ac53cd2e892094493a65f75258fa977f0jkummerow@chromium.org} 670225b0e21ac53cd2e892094493a65f75258fa977f0jkummerow@chromium.org 670325b0e21ac53cd2e892094493a65f75258fa977f0jkummerow@chromium.org 670425b0e21ac53cd2e892094493a65f75258fa977f0jkummerow@chromium.orgtemplate <int entrysize> 6705865f51ff8c94f86f4c97636d70addc0f29e79674machenbach@chromium.orguint32_t WeakHashTableShape<entrysize>::Hash(Handle<Object> key) { 6706865f51ff8c94f86f4c97636d70addc0f29e79674machenbach@chromium.org intptr_t hash = reinterpret_cast<intptr_t>(*key); 670725b0e21ac53cd2e892094493a65f75258fa977f0jkummerow@chromium.org return (uint32_t)(hash & 0xFFFFFFFF); 670825b0e21ac53cd2e892094493a65f75258fa977f0jkummerow@chromium.org} 670925b0e21ac53cd2e892094493a65f75258fa977f0jkummerow@chromium.org 671025b0e21ac53cd2e892094493a65f75258fa977f0jkummerow@chromium.org 671125b0e21ac53cd2e892094493a65f75258fa977f0jkummerow@chromium.orgtemplate <int entrysize> 6712865f51ff8c94f86f4c97636d70addc0f29e79674machenbach@chromium.orguint32_t WeakHashTableShape<entrysize>::HashForObject(Handle<Object> key, 671325b0e21ac53cd2e892094493a65f75258fa977f0jkummerow@chromium.org Object* other) { 671425b0e21ac53cd2e892094493a65f75258fa977f0jkummerow@chromium.org intptr_t hash = reinterpret_cast<intptr_t>(other); 671525b0e21ac53cd2e892094493a65f75258fa977f0jkummerow@chromium.org return (uint32_t)(hash & 0xFFFFFFFF); 671625b0e21ac53cd2e892094493a65f75258fa977f0jkummerow@chromium.org} 671725b0e21ac53cd2e892094493a65f75258fa977f0jkummerow@chromium.org 671825b0e21ac53cd2e892094493a65f75258fa977f0jkummerow@chromium.org 671925b0e21ac53cd2e892094493a65f75258fa977f0jkummerow@chromium.orgtemplate <int entrysize> 6720865f51ff8c94f86f4c97636d70addc0f29e79674machenbach@chromium.orgHandle<Object> WeakHashTableShape<entrysize>::AsHandle(Isolate* isolate, 6721865f51ff8c94f86f4c97636d70addc0f29e79674machenbach@chromium.org Handle<Object> key) { 672225b0e21ac53cd2e892094493a65f75258fa977f0jkummerow@chromium.org return key; 672325b0e21ac53cd2e892094493a65f75258fa977f0jkummerow@chromium.org} 672425b0e21ac53cd2e892094493a65f75258fa977f0jkummerow@chromium.org 672525b0e21ac53cd2e892094493a65f75258fa977f0jkummerow@chromium.org 6726ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.orgvoid Map::ClearCodeCache(Heap* heap) { 672743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // No write barrier is needed since empty_fixed_array is not in new space. 672843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // Please note this function is used during marking: 672943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen // - MarkCompactCollector::MarkUnmarkedObject 673088aa058bdadfa79ae2836d12d6dd2d1c28aa490cdanno@chromium.org // - IncrementalMarking::Step 673172204d59e7fb1b8a0e9012e1fac5ef160351e8e4danno@chromium.org ASSERT(!heap->InNewSpace(heap->empty_fixed_array())); 673272204d59e7fb1b8a0e9012e1fac5ef160351e8e4danno@chromium.org WRITE_FIELD(this, kCodeCacheOffset, heap->empty_fixed_array()); 673343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} 673443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 673543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 6736b5ed9300c59e8590c9dc588727b6564c244b0f5cmachenbach@chromium.orgvoid JSArray::EnsureSize(Handle<JSArray> array, int required_size) { 6737b5ed9300c59e8590c9dc588727b6564c244b0f5cmachenbach@chromium.org ASSERT(array->HasFastSmiOrObjectElements()); 6738b5ed9300c59e8590c9dc588727b6564c244b0f5cmachenbach@chromium.org Handle<FixedArray> elts = handle(FixedArray::cast(array->elements())); 67396141cbe3fd2be496590a3d5fe89b263c87eee58aager@chromium.org const int kArraySizeThatFitsComfortablyInNewSpace = 128; 67406141cbe3fd2be496590a3d5fe89b263c87eee58aager@chromium.org if (elts->length() < required_size) { 67416141cbe3fd2be496590a3d5fe89b263c87eee58aager@chromium.org // Doubling in size would be overkill, but leave some slack to avoid 67426141cbe3fd2be496590a3d5fe89b263c87eee58aager@chromium.org // constantly growing. 6743b5ed9300c59e8590c9dc588727b6564c244b0f5cmachenbach@chromium.org Expand(array, required_size + (required_size >> 3)); 67446141cbe3fd2be496590a3d5fe89b263c87eee58aager@chromium.org // It's a performance benefit to keep a frequently used array in new-space. 6745b5ed9300c59e8590c9dc588727b6564c244b0f5cmachenbach@chromium.org } else if (!array->GetHeap()->new_space()->Contains(*elts) && 67466141cbe3fd2be496590a3d5fe89b263c87eee58aager@chromium.org required_size < kArraySizeThatFitsComfortablyInNewSpace) { 67476141cbe3fd2be496590a3d5fe89b263c87eee58aager@chromium.org // Expand will allocate a new backing store in new space even if the size 67486141cbe3fd2be496590a3d5fe89b263c87eee58aager@chromium.org // we asked for isn't larger than what we had before. 6749b5ed9300c59e8590c9dc588727b6564c244b0f5cmachenbach@chromium.org Expand(array, required_size); 67506141cbe3fd2be496590a3d5fe89b263c87eee58aager@chromium.org } 67515aa501ca9fb4dfb30f4191aac135202fe8d80e4aager@chromium.org} 67525aa501ca9fb4dfb30f4191aac135202fe8d80e4aager@chromium.org 67535aa501ca9fb4dfb30f4191aac135202fe8d80e4aager@chromium.org 6754b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.orgvoid JSArray::set_length(Smi* length) { 6755c3b670ff19220959730d7886892bc4beb95d2ebaerik.corry@gmail.com // Don't need a write barrier for a Smi. 6756b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org set_length(static_cast<Object*>(length), SKIP_WRITE_BARRIER); 6757b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org} 6758b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org 6759b302e56e5b70c4504faa2adf4ec3efb64a9d3e38sgjesse@chromium.org 67607ad65226b3ba6f9250a5ee869ee77e2b9258fc91ricow@chromium.orgbool JSArray::AllowsSetElementsLength() { 67617ad65226b3ba6f9250a5ee869ee77e2b9258fc91ricow@chromium.org bool result = elements()->IsFixedArray() || elements()->IsFixedDoubleArray(); 67627ad65226b3ba6f9250a5ee869ee77e2b9258fc91ricow@chromium.org ASSERT(result == !HasExternalArrayElements()); 67637ad65226b3ba6f9250a5ee869ee77e2b9258fc91ricow@chromium.org return result; 67647ad65226b3ba6f9250a5ee869ee77e2b9258fc91ricow@chromium.org} 67657ad65226b3ba6f9250a5ee869ee77e2b9258fc91ricow@chromium.org 67667ad65226b3ba6f9250a5ee869ee77e2b9258fc91ricow@chromium.org 6767fa0c3c69b9d632e5730bdd9c745c375beef5e54dmachenbach@chromium.orgvoid JSArray::SetContent(Handle<JSArray> array, 6768fa0c3c69b9d632e5730bdd9c745c375beef5e54dmachenbach@chromium.org Handle<FixedArrayBase> storage) { 6769fa0c3c69b9d632e5730bdd9c745c375beef5e54dmachenbach@chromium.org EnsureCanContainElements(array, storage, storage->length(), 6770fa0c3c69b9d632e5730bdd9c745c375beef5e54dmachenbach@chromium.org ALLOW_COPIED_DOUBLE_ELEMENTS); 6771fa0c3c69b9d632e5730bdd9c745c375beef5e54dmachenbach@chromium.org 6772fa0c3c69b9d632e5730bdd9c745c375beef5e54dmachenbach@chromium.org ASSERT((storage->map() == array->GetHeap()->fixed_double_array_map() && 6773fa0c3c69b9d632e5730bdd9c745c375beef5e54dmachenbach@chromium.org IsFastDoubleElementsKind(array->GetElementsKind())) || 6774fa0c3c69b9d632e5730bdd9c745c375beef5e54dmachenbach@chromium.org ((storage->map() != array->GetHeap()->fixed_double_array_map()) && 6775fa0c3c69b9d632e5730bdd9c745c375beef5e54dmachenbach@chromium.org (IsFastObjectElementsKind(array->GetElementsKind()) || 6776fa0c3c69b9d632e5730bdd9c745c375beef5e54dmachenbach@chromium.org (IsFastSmiElementsKind(array->GetElementsKind()) && 6777fa0c3c69b9d632e5730bdd9c745c375beef5e54dmachenbach@chromium.org Handle<FixedArray>::cast(storage)->ContainsOnlySmisOrHoles())))); 6778fa0c3c69b9d632e5730bdd9c745c375beef5e54dmachenbach@chromium.org array->set_elements(*storage); 6779fa0c3c69b9d632e5730bdd9c745c375beef5e54dmachenbach@chromium.org array->set_length(Smi::FromInt(storage->length())); 67807c537e2abe09729ed6cb827b4dd206470d8c4a42ager@chromium.org} 67817c537e2abe09729ed6cb827b4dd206470d8c4a42ager@chromium.org 67827c537e2abe09729ed6cb827b4dd206470d8c4a42ager@chromium.org 6783f5a24546072ecdbbd6372c85c42157e01e913561titzer@chromium.orgHandle<Object> TypeFeedbackInfo::UninitializedSentinel(Isolate* isolate) { 6784ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org return isolate->factory()->uninitialized_symbol(); 6785fa458e413c3e5b8d479e49258d060b7bb4567c57danno@chromium.org} 6786fa458e413c3e5b8d479e49258d060b7bb4567c57danno@chromium.org 6787fa458e413c3e5b8d479e49258d060b7bb4567c57danno@chromium.org 6788f5a24546072ecdbbd6372c85c42157e01e913561titzer@chromium.orgHandle<Object> TypeFeedbackInfo::MegamorphicSentinel(Isolate* isolate) { 6789ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org return isolate->factory()->megamorphic_symbol(); 6790fa458e413c3e5b8d479e49258d060b7bb4567c57danno@chromium.org} 6791fa458e413c3e5b8d479e49258d060b7bb4567c57danno@chromium.org 6792fa458e413c3e5b8d479e49258d060b7bb4567c57danno@chromium.org 6793f5a24546072ecdbbd6372c85c42157e01e913561titzer@chromium.orgHandle<Object> TypeFeedbackInfo::MonomorphicArraySentinel(Isolate* isolate, 67944a9f6553038df6b893b3d3ccae351723f4cbbae7yangguo@chromium.org ElementsKind elements_kind) { 67954a9f6553038df6b893b3d3ccae351723f4cbbae7yangguo@chromium.org return Handle<Object>(Smi::FromInt(static_cast<int>(elements_kind)), isolate); 67964a9f6553038df6b893b3d3ccae351723f4cbbae7yangguo@chromium.org} 67974a9f6553038df6b893b3d3ccae351723f4cbbae7yangguo@chromium.org 67984a9f6553038df6b893b3d3ccae351723f4cbbae7yangguo@chromium.org 6799f5a24546072ecdbbd6372c85c42157e01e913561titzer@chromium.orgObject* TypeFeedbackInfo::RawUninitializedSentinel(Heap* heap) { 6800ca2f2040e0e1a10df95bec18e69499f85f4c1316machenbach@chromium.org return heap->uninitialized_symbol(); 6801fa458e413c3e5b8d479e49258d060b7bb4567c57danno@chromium.org} 6802fa458e413c3e5b8d479e49258d060b7bb4567c57danno@chromium.org 6803fa458e413c3e5b8d479e49258d060b7bb4567c57danno@chromium.org 680446839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.orgint TypeFeedbackInfo::ic_total_count() { 680546839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org int current = Smi::cast(READ_FIELD(this, kStorage1Offset))->value(); 680646839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org return ICTotalCountField::decode(current); 680746839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org} 680846839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org 680946839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org 681046839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.orgvoid TypeFeedbackInfo::set_ic_total_count(int count) { 681146839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org int value = Smi::cast(READ_FIELD(this, kStorage1Offset))->value(); 681246839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org value = ICTotalCountField::update(value, 681346839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org ICTotalCountField::decode(count)); 681446839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org WRITE_FIELD(this, kStorage1Offset, Smi::FromInt(value)); 681546839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org} 681646839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org 681746839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org 681846839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.orgint TypeFeedbackInfo::ic_with_type_info_count() { 681946839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org int current = Smi::cast(READ_FIELD(this, kStorage2Offset))->value(); 682046839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org return ICsWithTypeInfoCountField::decode(current); 682146839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org} 682246839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org 682346839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org 682446839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.orgvoid TypeFeedbackInfo::change_ic_with_type_info_count(int delta) { 682546839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org int value = Smi::cast(READ_FIELD(this, kStorage2Offset))->value(); 682646839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org int new_count = ICsWithTypeInfoCountField::decode(value) + delta; 682746839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org // We can get negative count here when the type-feedback info is 682846839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org // shared between two code objects. The can only happen when 682946839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org // the debugger made a shallow copy of code object (see Heap::CopyCode). 683046839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org // Since we do not optimize when the debugger is active, we can skip 683146839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org // this counter update. 683246839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org if (new_count >= 0) { 683346839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org new_count &= ICsWithTypeInfoCountField::kMask; 683446839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org value = ICsWithTypeInfoCountField::update(value, new_count); 683546839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org WRITE_FIELD(this, kStorage2Offset, Smi::FromInt(value)); 683646839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org } 683746839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org} 683846839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org 683946839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org 684046839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.orgvoid TypeFeedbackInfo::initialize_storage() { 684146839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org WRITE_FIELD(this, kStorage1Offset, Smi::FromInt(0)); 684246839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org WRITE_FIELD(this, kStorage2Offset, Smi::FromInt(0)); 684346839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org} 684446839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org 684546839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org 684646839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.orgvoid TypeFeedbackInfo::change_own_type_change_checksum() { 684746839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org int value = Smi::cast(READ_FIELD(this, kStorage1Offset))->value(); 684846839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org int checksum = OwnTypeChangeChecksum::decode(value); 684946839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org checksum = (checksum + 1) % (1 << kTypeChangeChecksumBits); 685046839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org value = OwnTypeChangeChecksum::update(value, checksum); 685146839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org // Ensure packed bit field is in Smi range. 685246839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org if (value > Smi::kMaxValue) value |= Smi::kMinValue; 685346839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org if (value < Smi::kMinValue) value &= ~Smi::kMinValue; 685446839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org WRITE_FIELD(this, kStorage1Offset, Smi::FromInt(value)); 685546839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org} 685646839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org 685746839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org 685846839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.orgvoid TypeFeedbackInfo::set_inlined_type_change_checksum(int checksum) { 685946839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org int value = Smi::cast(READ_FIELD(this, kStorage2Offset))->value(); 686046839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org int mask = (1 << kTypeChangeChecksumBits) - 1; 686146839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org value = InlinedTypeChangeChecksum::update(value, checksum & mask); 686246839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org // Ensure packed bit field is in Smi range. 686346839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org if (value > Smi::kMaxValue) value |= Smi::kMinValue; 686446839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org if (value < Smi::kMinValue) value &= ~Smi::kMinValue; 686546839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org WRITE_FIELD(this, kStorage2Offset, Smi::FromInt(value)); 686646839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org} 686746839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org 686846839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org 686946839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.orgint TypeFeedbackInfo::own_type_change_checksum() { 687046839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org int value = Smi::cast(READ_FIELD(this, kStorage1Offset))->value(); 687146839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org return OwnTypeChangeChecksum::decode(value); 687246839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org} 687346839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org 687446839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org 687546839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.orgbool TypeFeedbackInfo::matches_inlined_type_change_checksum(int checksum) { 687646839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org int value = Smi::cast(READ_FIELD(this, kStorage2Offset))->value(); 687746839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org int mask = (1 << kTypeChangeChecksumBits) - 1; 687846839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org return InlinedTypeChangeChecksum::decode(value) == (checksum & mask); 687946839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org} 688046839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org 688146839fbbdee40a3d2d924e8b5b13c4139b0b24f2yangguo@chromium.org 6882ab30bb83bf3dae0053739c57b1db9ad13c1f9e3ayangguo@chromium.orgSMI_ACCESSORS(AliasedArgumentsEntry, aliased_context_slot, kAliasedContextSlot) 6883ab30bb83bf3dae0053739c57b1db9ad13c1f9e3ayangguo@chromium.org 6884ab30bb83bf3dae0053739c57b1db9ad13c1f9e3ayangguo@chromium.org 6885ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.orgRelocatable::Relocatable(Isolate* isolate) { 6886ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org isolate_ = isolate; 6887ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org prev_ = isolate->relocatable_top(); 6888ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org isolate->set_relocatable_top(this); 6889ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org} 6890ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org 6891ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org 6892ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.orgRelocatable::~Relocatable() { 6893ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org ASSERT_EQ(isolate_->relocatable_top(), this); 6894ea88ce93dcb41a9200ec8747ae7642a5db1f4ce7sgjesse@chromium.org isolate_->set_relocatable_top(prev_); 68955a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org} 68965a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org 68975a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org 6898ea4f62e1df22417fc8dc2c2425485dca98b13d07ager@chromium.orgint JSObject::BodyDescriptor::SizeOf(Map* map, HeapObject* object) { 6899ea4f62e1df22417fc8dc2c2425485dca98b13d07ager@chromium.org return map->instance_size(); 6900ea4f62e1df22417fc8dc2c2425485dca98b13d07ager@chromium.org} 6901ea4f62e1df22417fc8dc2c2425485dca98b13d07ager@chromium.org 6902ea4f62e1df22417fc8dc2c2425485dca98b13d07ager@chromium.org 6903ea91cc579ade536e3a08498a8157921dd4f533d1ager@chromium.orgvoid Foreign::ForeignIterateBody(ObjectVisitor* v) { 6904ea4f62e1df22417fc8dc2c2425485dca98b13d07ager@chromium.org v->VisitExternalReference( 6905c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org reinterpret_cast<Address*>(FIELD_ADDR(this, kForeignAddressOffset))); 6906ea4f62e1df22417fc8dc2c2425485dca98b13d07ager@chromium.org} 6907ea4f62e1df22417fc8dc2c2425485dca98b13d07ager@chromium.org 6908ea4f62e1df22417fc8dc2c2425485dca98b13d07ager@chromium.org 6909ea4f62e1df22417fc8dc2c2425485dca98b13d07ager@chromium.orgtemplate<typename StaticVisitor> 6910ea91cc579ade536e3a08498a8157921dd4f533d1ager@chromium.orgvoid Foreign::ForeignIterateBody() { 6911ea4f62e1df22417fc8dc2c2425485dca98b13d07ager@chromium.org StaticVisitor::VisitExternalReference( 6912c3b37129d6387b2db313f9100256d2d5f60dd9a8jkummerow@chromium.org reinterpret_cast<Address*>(FIELD_ADDR(this, kForeignAddressOffset))); 6913ea4f62e1df22417fc8dc2c2425485dca98b13d07ager@chromium.org} 6914ea4f62e1df22417fc8dc2c2425485dca98b13d07ager@chromium.org 6915ea4f62e1df22417fc8dc2c2425485dca98b13d07ager@chromium.org 6916ea4f62e1df22417fc8dc2c2425485dca98b13d07ager@chromium.orgvoid ExternalAsciiString::ExternalAsciiStringIterateBody(ObjectVisitor* v) { 6917ea4f62e1df22417fc8dc2c2425485dca98b13d07ager@chromium.org typedef v8::String::ExternalAsciiStringResource Resource; 6918ea4f62e1df22417fc8dc2c2425485dca98b13d07ager@chromium.org v->VisitExternalAsciiString( 6919ea4f62e1df22417fc8dc2c2425485dca98b13d07ager@chromium.org reinterpret_cast<Resource**>(FIELD_ADDR(this, kResourceOffset))); 6920ea4f62e1df22417fc8dc2c2425485dca98b13d07ager@chromium.org} 6921ea4f62e1df22417fc8dc2c2425485dca98b13d07ager@chromium.org 6922ea4f62e1df22417fc8dc2c2425485dca98b13d07ager@chromium.org 6923ea4f62e1df22417fc8dc2c2425485dca98b13d07ager@chromium.orgtemplate<typename StaticVisitor> 6924ea4f62e1df22417fc8dc2c2425485dca98b13d07ager@chromium.orgvoid ExternalAsciiString::ExternalAsciiStringIterateBody() { 6925ea4f62e1df22417fc8dc2c2425485dca98b13d07ager@chromium.org typedef v8::String::ExternalAsciiStringResource Resource; 6926ea4f62e1df22417fc8dc2c2425485dca98b13d07ager@chromium.org StaticVisitor::VisitExternalAsciiString( 6927ea4f62e1df22417fc8dc2c2425485dca98b13d07ager@chromium.org reinterpret_cast<Resource**>(FIELD_ADDR(this, kResourceOffset))); 6928ea4f62e1df22417fc8dc2c2425485dca98b13d07ager@chromium.org} 6929ea4f62e1df22417fc8dc2c2425485dca98b13d07ager@chromium.org 6930ea4f62e1df22417fc8dc2c2425485dca98b13d07ager@chromium.org 6931ea4f62e1df22417fc8dc2c2425485dca98b13d07ager@chromium.orgvoid ExternalTwoByteString::ExternalTwoByteStringIterateBody(ObjectVisitor* v) { 6932ea4f62e1df22417fc8dc2c2425485dca98b13d07ager@chromium.org typedef v8::String::ExternalStringResource Resource; 6933ea4f62e1df22417fc8dc2c2425485dca98b13d07ager@chromium.org v->VisitExternalTwoByteString( 6934ea4f62e1df22417fc8dc2c2425485dca98b13d07ager@chromium.org reinterpret_cast<Resource**>(FIELD_ADDR(this, kResourceOffset))); 6935ea4f62e1df22417fc8dc2c2425485dca98b13d07ager@chromium.org} 6936ea4f62e1df22417fc8dc2c2425485dca98b13d07ager@chromium.org 6937ea4f62e1df22417fc8dc2c2425485dca98b13d07ager@chromium.org 6938ea4f62e1df22417fc8dc2c2425485dca98b13d07ager@chromium.orgtemplate<typename StaticVisitor> 6939ea4f62e1df22417fc8dc2c2425485dca98b13d07ager@chromium.orgvoid ExternalTwoByteString::ExternalTwoByteStringIterateBody() { 6940ea4f62e1df22417fc8dc2c2425485dca98b13d07ager@chromium.org typedef v8::String::ExternalStringResource Resource; 6941ea4f62e1df22417fc8dc2c2425485dca98b13d07ager@chromium.org StaticVisitor::VisitExternalTwoByteString( 6942ea4f62e1df22417fc8dc2c2425485dca98b13d07ager@chromium.org reinterpret_cast<Resource**>(FIELD_ADDR(this, kResourceOffset))); 6943ea4f62e1df22417fc8dc2c2425485dca98b13d07ager@chromium.org} 6944ea4f62e1df22417fc8dc2c2425485dca98b13d07ager@chromium.org 6945ea4f62e1df22417fc8dc2c2425485dca98b13d07ager@chromium.org 6946ea4f62e1df22417fc8dc2c2425485dca98b13d07ager@chromium.orgtemplate<int start_offset, int end_offset, int size> 6947ea4f62e1df22417fc8dc2c2425485dca98b13d07ager@chromium.orgvoid FixedBodyDescriptor<start_offset, end_offset, size>::IterateBody( 6948ea4f62e1df22417fc8dc2c2425485dca98b13d07ager@chromium.org HeapObject* obj, 6949ea4f62e1df22417fc8dc2c2425485dca98b13d07ager@chromium.org ObjectVisitor* v) { 6950471f2f1d24adb4bad1edc3bf0ee35092486de187mstarzinger@chromium.org v->VisitPointers(HeapObject::RawField(obj, start_offset), 6951471f2f1d24adb4bad1edc3bf0ee35092486de187mstarzinger@chromium.org HeapObject::RawField(obj, end_offset)); 6952ea4f62e1df22417fc8dc2c2425485dca98b13d07ager@chromium.org} 6953ea4f62e1df22417fc8dc2c2425485dca98b13d07ager@chromium.org 6954ea4f62e1df22417fc8dc2c2425485dca98b13d07ager@chromium.org 6955ea4f62e1df22417fc8dc2c2425485dca98b13d07ager@chromium.orgtemplate<int start_offset> 6956ea4f62e1df22417fc8dc2c2425485dca98b13d07ager@chromium.orgvoid FlexibleBodyDescriptor<start_offset>::IterateBody(HeapObject* obj, 6957ea4f62e1df22417fc8dc2c2425485dca98b13d07ager@chromium.org int object_size, 6958ea4f62e1df22417fc8dc2c2425485dca98b13d07ager@chromium.org ObjectVisitor* v) { 6959471f2f1d24adb4bad1edc3bf0ee35092486de187mstarzinger@chromium.org v->VisitPointers(HeapObject::RawField(obj, start_offset), 6960471f2f1d24adb4bad1edc3bf0ee35092486de187mstarzinger@chromium.org HeapObject::RawField(obj, object_size)); 6961ea4f62e1df22417fc8dc2c2425485dca98b13d07ager@chromium.org} 6962ea4f62e1df22417fc8dc2c2425485dca98b13d07ager@chromium.org 6963ea4f62e1df22417fc8dc2c2425485dca98b13d07ager@chromium.org 69642c067b150f65db3e076b6b5a813e7f6f2492f770rossberg@chromium.org#undef TYPE_CHECKER 696543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen#undef CAST_ACCESSOR 696643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen#undef INT_ACCESSORS 696743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen#undef ACCESSORS 69682c067b150f65db3e076b6b5a813e7f6f2492f770rossberg@chromium.org#undef ACCESSORS_TO_SMI 69692c067b150f65db3e076b6b5a813e7f6f2492f770rossberg@chromium.org#undef SMI_ACCESSORS 69705b080567cf135f6dbaf23973ba6b6fa1d6af83b3machenbach@chromium.org#undef SYNCHRONIZED_SMI_ACCESSORS 69715b080567cf135f6dbaf23973ba6b6fa1d6af83b3machenbach@chromium.org#undef NOBARRIER_SMI_ACCESSORS 69722c067b150f65db3e076b6b5a813e7f6f2492f770rossberg@chromium.org#undef BOOL_GETTER 69732c067b150f65db3e076b6b5a813e7f6f2492f770rossberg@chromium.org#undef BOOL_ACCESSORS 697443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen#undef FIELD_ADDR 697543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen#undef READ_FIELD 69765b080567cf135f6dbaf23973ba6b6fa1d6af83b3machenbach@chromium.org#undef NOBARRIER_READ_FIELD 697743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen#undef WRITE_FIELD 69785b080567cf135f6dbaf23973ba6b6fa1d6af83b3machenbach@chromium.org#undef NOBARRIER_WRITE_FIELD 697943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen#undef WRITE_BARRIER 69805a8ca6c70c6fc9716f18f6223c98d1fef5752cf6kasperl@chromium.org#undef CONDITIONAL_WRITE_BARRIER 698143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen#undef READ_DOUBLE_FIELD 698243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen#undef WRITE_DOUBLE_FIELD 698343d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen#undef READ_INT_FIELD 698443d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen#undef WRITE_INT_FIELD 69852c067b150f65db3e076b6b5a813e7f6f2492f770rossberg@chromium.org#undef READ_INTPTR_FIELD 69862c067b150f65db3e076b6b5a813e7f6f2492f770rossberg@chromium.org#undef WRITE_INTPTR_FIELD 69872c067b150f65db3e076b6b5a813e7f6f2492f770rossberg@chromium.org#undef READ_UINT32_FIELD 69882c067b150f65db3e076b6b5a813e7f6f2492f770rossberg@chromium.org#undef WRITE_UINT32_FIELD 698943d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen#undef READ_SHORT_FIELD 699043d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen#undef WRITE_SHORT_FIELD 699143d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen#undef READ_BYTE_FIELD 699243d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen#undef WRITE_BYTE_FIELD 69935b080567cf135f6dbaf23973ba6b6fa1d6af83b3machenbach@chromium.org#undef NOBARRIER_READ_BYTE_FIELD 69945b080567cf135f6dbaf23973ba6b6fa1d6af83b3machenbach@chromium.org#undef NOBARRIER_WRITE_BYTE_FIELD 699543d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 699643d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen} } // namespace v8::internal 699743d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen 699843d26ecc3563a46f62a0224030667c8f8f3f6cebchristian.plesner.hansen#endif // V8_OBJECTS_INL_H_ 6999