| Index: src/objects.cc
|
| diff --git a/src/objects.cc b/src/objects.cc
|
| index 1d95a5c15271ab3d955e2cbd3f2b6ad1b270cc25..1937f5b90353ab09a48927a0c1e922dc5a2e87e6 100644
|
| --- a/src/objects.cc
|
| +++ b/src/objects.cc
|
| @@ -9684,6 +9684,39 @@ void Map::ZapPrototypeTransitions() {
|
| }
|
|
|
|
|
| +Handle<FixedArray> DependentCodes::Append(Handle<FixedArray> codes,
|
| + Handle<Code> value) {
|
| + int append_index = number_of_codes(*codes);
|
| + if (append_index > 0 && code(*codes, append_index - 1) == *value) {
|
| + // Do not append the code if it is already in the array.
|
| + // It is sufficient to just check only the last element because
|
| + // we process embedded maps of an optimized code in one batch.
|
| + return codes;
|
| + }
|
| + if (codes->length() < kCodesOffset + append_index + 1) {
|
| + Factory* factory = codes->GetIsolate()->factory();
|
| + int capacity = kCodesOffset + append_index + 1;
|
| + if (capacity > 5) capacity = capacity * 5 / 4;
|
| + Handle<FixedArray> new_codes = factory->NewFixedArray(capacity);
|
| + // The number of codes can change after GC.
|
| + append_index = number_of_codes(*codes);
|
| + set_number_of_codes(*new_codes, append_index + 1);
|
| + for (int i = 0; i < append_index; i++) {
|
| + set_code(*new_codes, i, code(*codes, i));
|
| + clear_code(*codes, i);
|
| + }
|
| + set_code(*new_codes, append_index, *value);
|
| + for (int i = append_index + 1; kCodesOffset + i < capacity; i++) {
|
| + clear_code(*new_codes, i);
|
| + }
|
| + return new_codes;
|
| + }
|
| + set_code(*codes, append_index, *value);
|
| + set_number_of_codes(*codes, append_index + 1);
|
| + return codes;
|
| +}
|
| +
|
| +
|
| MaybeObject* JSReceiver::SetPrototype(Object* value,
|
| bool skip_hidden_prototypes) {
|
| #ifdef DEBUG
|
|
|