OLD | NEW |
1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
4 // met: | 4 // met: |
5 // | 5 // |
6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
(...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
158 if (value->IsJSObject()) { | 158 if (value->IsJSObject()) { |
159 JSObject* js_object = JSObject::cast(value); | 159 JSObject* js_object = JSObject::cast(value); |
160 { MaybeObject* maybe_result = DeepCopyBoilerplate(isolate, js_object); | 160 { MaybeObject* maybe_result = DeepCopyBoilerplate(isolate, js_object); |
161 if (!maybe_result->ToObject(&result)) return maybe_result; | 161 if (!maybe_result->ToObject(&result)) return maybe_result; |
162 } | 162 } |
163 copy->InObjectPropertyAtPut(i, result); | 163 copy->InObjectPropertyAtPut(i, result); |
164 } | 164 } |
165 } | 165 } |
166 } else { | 166 } else { |
167 { MaybeObject* maybe_result = | 167 { MaybeObject* maybe_result = |
168 heap->AllocateFixedArray(copy->NumberOfLocalProperties(NONE)); | 168 heap->AllocateFixedArray(copy->NumberOfLocalProperties()); |
169 if (!maybe_result->ToObject(&result)) return maybe_result; | 169 if (!maybe_result->ToObject(&result)) return maybe_result; |
170 } | 170 } |
171 FixedArray* names = FixedArray::cast(result); | 171 FixedArray* names = FixedArray::cast(result); |
172 copy->GetLocalPropertyNames(names, 0); | 172 copy->GetLocalPropertyNames(names, 0); |
173 for (int i = 0; i < names->length(); i++) { | 173 for (int i = 0; i < names->length(); i++) { |
174 ASSERT(names->get(i)->IsString()); | 174 ASSERT(names->get(i)->IsString()); |
175 String* key_string = String::cast(names->get(i)); | 175 String* key_string = String::cast(names->get(i)); |
176 PropertyAttributes attributes = | 176 PropertyAttributes attributes = |
177 copy->GetLocalPropertyAttribute(key_string); | 177 copy->GetLocalPropertyAttribute(key_string); |
178 // Only deep copy fields from the object literal expression. | 178 // Only deep copy fields from the object literal expression. |
(...skipping 4824 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5003 for (int i = 0; i < length; i++) { | 5003 for (int i = 0; i < length; i++) { |
5004 // Only collect names if access is permitted. | 5004 // Only collect names if access is permitted. |
5005 if (jsproto->IsAccessCheckNeeded() && | 5005 if (jsproto->IsAccessCheckNeeded() && |
5006 !isolate->MayNamedAccess(*jsproto, | 5006 !isolate->MayNamedAccess(*jsproto, |
5007 isolate->heap()->undefined_value(), | 5007 isolate->heap()->undefined_value(), |
5008 v8::ACCESS_KEYS)) { | 5008 v8::ACCESS_KEYS)) { |
5009 isolate->ReportFailedAccessCheck(*jsproto, v8::ACCESS_KEYS); | 5009 isolate->ReportFailedAccessCheck(*jsproto, v8::ACCESS_KEYS); |
5010 return *isolate->factory()->NewJSArray(0); | 5010 return *isolate->factory()->NewJSArray(0); |
5011 } | 5011 } |
5012 int n; | 5012 int n; |
5013 n = jsproto->NumberOfLocalProperties(static_cast<PropertyAttributes>(NONE)); | 5013 n = jsproto->NumberOfLocalProperties(); |
5014 local_property_count[i] = n; | 5014 local_property_count[i] = n; |
5015 total_property_count += n; | 5015 total_property_count += n; |
5016 if (i < length - 1) { | 5016 if (i < length - 1) { |
5017 jsproto = Handle<JSObject>(JSObject::cast(jsproto->GetPrototype())); | 5017 jsproto = Handle<JSObject>(JSObject::cast(jsproto->GetPrototype())); |
5018 } | 5018 } |
5019 } | 5019 } |
5020 | 5020 |
5021 // Allocate an array with storage for all the property names. | 5021 // Allocate an array with storage for all the property names. |
5022 Handle<FixedArray> names = | 5022 Handle<FixedArray> names = |
5023 isolate->factory()->NewFixedArray(total_property_count); | 5023 isolate->factory()->NewFixedArray(total_property_count); |
(...skipping 8629 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
13653 // Handle last resort GC and make sure to allow future allocations | 13653 // Handle last resort GC and make sure to allow future allocations |
13654 // to grow the heap without causing GCs (if possible). | 13654 // to grow the heap without causing GCs (if possible). |
13655 isolate->counters()->gc_last_resort_from_js()->Increment(); | 13655 isolate->counters()->gc_last_resort_from_js()->Increment(); |
13656 isolate->heap()->CollectAllGarbage(Heap::kNoGCFlags, | 13656 isolate->heap()->CollectAllGarbage(Heap::kNoGCFlags, |
13657 "Runtime::PerformGC"); | 13657 "Runtime::PerformGC"); |
13658 } | 13658 } |
13659 } | 13659 } |
13660 | 13660 |
13661 | 13661 |
13662 } } // namespace v8::internal | 13662 } } // namespace v8::internal |
OLD | NEW |