| OLD | NEW | 
|---|
| 1 // Copyright 2006-2009 the V8 project authors. All rights reserved. | 1 // Copyright 2006-2009 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 89 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 100   StackLimitCheck check; | 100   StackLimitCheck check; | 
| 101   if (check.HasOverflowed()) return Top::StackOverflow(); | 101   if (check.HasOverflowed()) return Top::StackOverflow(); | 
| 102 | 102 | 
| 103   Object* result = Heap::CopyJSObject(boilerplate); | 103   Object* result = Heap::CopyJSObject(boilerplate); | 
| 104   if (result->IsFailure()) return result; | 104   if (result->IsFailure()) return result; | 
| 105   JSObject* copy = JSObject::cast(result); | 105   JSObject* copy = JSObject::cast(result); | 
| 106 | 106 | 
| 107   // Deep copy local properties. | 107   // Deep copy local properties. | 
| 108   if (copy->HasFastProperties()) { | 108   if (copy->HasFastProperties()) { | 
| 109     FixedArray* properties = copy->properties(); | 109     FixedArray* properties = copy->properties(); | 
| 110     WriteBarrierMode mode = properties->GetWriteBarrierMode(); |  | 
| 111     for (int i = 0; i < properties->length(); i++) { | 110     for (int i = 0; i < properties->length(); i++) { | 
| 112       Object* value = properties->get(i); | 111       Object* value = properties->get(i); | 
| 113       if (value->IsJSObject()) { | 112       if (value->IsJSObject()) { | 
| 114         JSObject* jsObject = JSObject::cast(value); | 113         JSObject* js_object = JSObject::cast(value); | 
| 115         result = DeepCopyBoilerplate(jsObject); | 114         result = DeepCopyBoilerplate(js_object); | 
| 116         if (result->IsFailure()) return result; | 115         if (result->IsFailure()) return result; | 
| 117         properties->set(i, result, mode); | 116         properties->set(i, result); | 
| 118       } | 117       } | 
| 119     } | 118     } | 
| 120     mode = copy->GetWriteBarrierMode(); |  | 
| 121     int nof = copy->map()->inobject_properties(); | 119     int nof = copy->map()->inobject_properties(); | 
| 122     for (int i = 0; i < nof; i++) { | 120     for (int i = 0; i < nof; i++) { | 
| 123       Object* value = copy->InObjectPropertyAt(i); | 121       Object* value = copy->InObjectPropertyAt(i); | 
| 124       if (value->IsJSObject()) { | 122       if (value->IsJSObject()) { | 
| 125         JSObject* jsObject = JSObject::cast(value); | 123         JSObject* js_object = JSObject::cast(value); | 
| 126         result = DeepCopyBoilerplate(jsObject); | 124         result = DeepCopyBoilerplate(js_object); | 
| 127         if (result->IsFailure()) return result; | 125         if (result->IsFailure()) return result; | 
| 128         copy->InObjectPropertyAtPut(i, result, mode); | 126         copy->InObjectPropertyAtPut(i, result); | 
| 129       } | 127       } | 
| 130     } | 128     } | 
| 131   } else { | 129   } else { | 
| 132     result = Heap::AllocateFixedArray(copy->NumberOfLocalProperties(NONE)); | 130     result = Heap::AllocateFixedArray(copy->NumberOfLocalProperties(NONE)); | 
| 133     if (result->IsFailure()) return result; | 131     if (result->IsFailure()) return result; | 
| 134     FixedArray* names = FixedArray::cast(result); | 132     FixedArray* names = FixedArray::cast(result); | 
| 135     copy->GetLocalPropertyNames(names, 0); | 133     copy->GetLocalPropertyNames(names, 0); | 
| 136     for (int i = 0; i < names->length(); i++) { | 134     for (int i = 0; i < names->length(); i++) { | 
| 137       ASSERT(names->get(i)->IsString()); | 135       ASSERT(names->get(i)->IsString()); | 
| 138       String* keyString = String::cast(names->get(i)); | 136       String* key_string = String::cast(names->get(i)); | 
| 139       PropertyAttributes attributes = | 137       PropertyAttributes attributes = | 
| 140         copy->GetLocalPropertyAttribute(keyString); | 138           copy->GetLocalPropertyAttribute(key_string); | 
| 141       // Only deep copy fields from the object literal expression. | 139       // Only deep copy fields from the object literal expression. | 
| 142       // In particular, don't try to copy the length attribute of | 140       // In particular, don't try to copy the length attribute of | 
| 143       // an array. | 141       // an array. | 
| 144       if (attributes != NONE) continue; | 142       if (attributes != NONE) continue; | 
| 145       Object* value = copy->GetProperty(keyString, &attributes); | 143       Object* value = copy->GetProperty(key_string, &attributes); | 
| 146       ASSERT(!value->IsFailure()); | 144       ASSERT(!value->IsFailure()); | 
| 147       if (value->IsJSObject()) { | 145       if (value->IsJSObject()) { | 
| 148         JSObject* jsObject = JSObject::cast(value); | 146         JSObject* js_object = JSObject::cast(value); | 
| 149         result = DeepCopyBoilerplate(jsObject); | 147         result = DeepCopyBoilerplate(js_object); | 
| 150         if (result->IsFailure()) return result; | 148         if (result->IsFailure()) return result; | 
| 151         result = copy->SetProperty(keyString, result, NONE); | 149         result = copy->SetProperty(key_string, result, NONE); | 
| 152         if (result->IsFailure()) return result; | 150         if (result->IsFailure()) return result; | 
| 153       } | 151       } | 
| 154     } | 152     } | 
| 155   } | 153   } | 
| 156 | 154 | 
| 157   // Deep copy local elements. | 155   // Deep copy local elements. | 
| 158   // Pixel elements cannot be created using an object literal. | 156   // Pixel elements cannot be created using an object literal. | 
| 159   ASSERT(!copy->HasPixelElements() && !copy->HasExternalArrayElements()); | 157   ASSERT(!copy->HasPixelElements() && !copy->HasExternalArrayElements()); | 
| 160   switch (copy->GetElementsKind()) { | 158   switch (copy->GetElementsKind()) { | 
| 161     case JSObject::FAST_ELEMENTS: { | 159     case JSObject::FAST_ELEMENTS: { | 
| 162       FixedArray* elements = FixedArray::cast(copy->elements()); | 160       FixedArray* elements = FixedArray::cast(copy->elements()); | 
| 163       WriteBarrierMode mode = elements->GetWriteBarrierMode(); |  | 
| 164       for (int i = 0; i < elements->length(); i++) { | 161       for (int i = 0; i < elements->length(); i++) { | 
| 165         Object* value = elements->get(i); | 162         Object* value = elements->get(i); | 
| 166         if (value->IsJSObject()) { | 163         if (value->IsJSObject()) { | 
| 167           JSObject* jsObject = JSObject::cast(value); | 164           JSObject* js_object = JSObject::cast(value); | 
| 168           result = DeepCopyBoilerplate(jsObject); | 165           result = DeepCopyBoilerplate(js_object); | 
| 169           if (result->IsFailure()) return result; | 166           if (result->IsFailure()) return result; | 
| 170           elements->set(i, result, mode); | 167           elements->set(i, result); | 
| 171         } | 168         } | 
| 172       } | 169       } | 
| 173       break; | 170       break; | 
| 174     } | 171     } | 
| 175     case JSObject::DICTIONARY_ELEMENTS: { | 172     case JSObject::DICTIONARY_ELEMENTS: { | 
| 176       NumberDictionary* element_dictionary = copy->element_dictionary(); | 173       NumberDictionary* element_dictionary = copy->element_dictionary(); | 
| 177       int capacity = element_dictionary->Capacity(); | 174       int capacity = element_dictionary->Capacity(); | 
| 178       for (int i = 0; i < capacity; i++) { | 175       for (int i = 0; i < capacity; i++) { | 
| 179         Object* k = element_dictionary->KeyAt(i); | 176         Object* k = element_dictionary->KeyAt(i); | 
| 180         if (element_dictionary->IsKey(k)) { | 177         if (element_dictionary->IsKey(k)) { | 
| 181           Object* value = element_dictionary->ValueAt(i); | 178           Object* value = element_dictionary->ValueAt(i); | 
| 182           if (value->IsJSObject()) { | 179           if (value->IsJSObject()) { | 
| 183             JSObject* jsObject = JSObject::cast(value); | 180             JSObject* js_object = JSObject::cast(value); | 
| 184             result = DeepCopyBoilerplate(jsObject); | 181             result = DeepCopyBoilerplate(js_object); | 
| 185             if (result->IsFailure()) return result; | 182             if (result->IsFailure()) return result; | 
| 186             element_dictionary->ValueAtPut(i, result); | 183             element_dictionary->ValueAtPut(i, result); | 
| 187           } | 184           } | 
| 188         } | 185         } | 
| 189       } | 186       } | 
| 190       break; | 187       break; | 
| 191     } | 188     } | 
| 192     default: | 189     default: | 
| 193       UNREACHABLE(); | 190       UNREACHABLE(); | 
| 194       break; | 191       break; | 
| (...skipping 1235 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 1430     int number_of_literals = fun->NumberOfLiterals(); | 1427     int number_of_literals = fun->NumberOfLiterals(); | 
| 1431     Handle<FixedArray> literals = | 1428     Handle<FixedArray> literals = | 
| 1432         Factory::NewFixedArray(number_of_literals, TENURED); | 1429         Factory::NewFixedArray(number_of_literals, TENURED); | 
| 1433     if (number_of_literals > 0) { | 1430     if (number_of_literals > 0) { | 
| 1434       // Insert the object, regexp and array functions in the literals | 1431       // Insert the object, regexp and array functions in the literals | 
| 1435       // array prefix.  These are the functions that will be used when | 1432       // array prefix.  These are the functions that will be used when | 
| 1436       // creating object, regexp and array literals. | 1433       // creating object, regexp and array literals. | 
| 1437       literals->set(JSFunction::kLiteralGlobalContextIndex, | 1434       literals->set(JSFunction::kLiteralGlobalContextIndex, | 
| 1438                     context->global_context()); | 1435                     context->global_context()); | 
| 1439     } | 1436     } | 
|  | 1437     // It's okay to skip the write barrier here because the literals | 
|  | 1438     // are guaranteed to be in old space. | 
| 1440     target->set_literals(*literals, SKIP_WRITE_BARRIER); | 1439     target->set_literals(*literals, SKIP_WRITE_BARRIER); | 
| 1441   } | 1440   } | 
| 1442 | 1441 | 
| 1443   target->set_context(*context); | 1442   target->set_context(*context); | 
| 1444   return *target; | 1443   return *target; | 
| 1445 } | 1444 } | 
| 1446 | 1445 | 
| 1447 | 1446 | 
| 1448 static Object* CharCodeAt(String* subject, Object* index) { | 1447 static Object* CharCodeAt(String* subject, Object* index) { | 
| 1449   uint32_t i = 0; | 1448   uint32_t i = 0; | 
| (...skipping 3258 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 4708   JavaScriptFrame* frame = it.frame(); | 4707   JavaScriptFrame* frame = it.frame(); | 
| 4709 | 4708 | 
| 4710   const int length = frame->GetProvidedParametersCount(); | 4709   const int length = frame->GetProvidedParametersCount(); | 
| 4711   Object* result = Heap::AllocateArgumentsObject(callee, length); | 4710   Object* result = Heap::AllocateArgumentsObject(callee, length); | 
| 4712   if (result->IsFailure()) return result; | 4711   if (result->IsFailure()) return result; | 
| 4713   if (length > 0) { | 4712   if (length > 0) { | 
| 4714     Object* obj =  Heap::AllocateFixedArray(length); | 4713     Object* obj =  Heap::AllocateFixedArray(length); | 
| 4715     if (obj->IsFailure()) return obj; | 4714     if (obj->IsFailure()) return obj; | 
| 4716     FixedArray* array = FixedArray::cast(obj); | 4715     FixedArray* array = FixedArray::cast(obj); | 
| 4717     ASSERT(array->length() == length); | 4716     ASSERT(array->length() == length); | 
| 4718     WriteBarrierMode mode = array->GetWriteBarrierMode(); | 4717 | 
|  | 4718     AssertNoAllocation no_gc; | 
|  | 4719     WriteBarrierMode mode = array->GetWriteBarrierMode(no_gc); | 
| 4719     for (int i = 0; i < length; i++) { | 4720     for (int i = 0; i < length; i++) { | 
| 4720       array->set(i, frame->GetParameter(i), mode); | 4721       array->set(i, frame->GetParameter(i), mode); | 
| 4721     } | 4722     } | 
| 4722     JSObject::cast(result)->set_elements(array); | 4723     JSObject::cast(result)->set_elements(array); | 
| 4723   } | 4724   } | 
| 4724   return result; | 4725   return result; | 
| 4725 } | 4726 } | 
| 4726 | 4727 | 
| 4727 | 4728 | 
| 4728 static Object* Runtime_NewArgumentsFast(Arguments args) { | 4729 static Object* Runtime_NewArgumentsFast(Arguments args) { | 
| 4729   NoHandleAllocation ha; | 4730   NoHandleAllocation ha; | 
| 4730   ASSERT(args.length() == 3); | 4731   ASSERT(args.length() == 3); | 
| 4731 | 4732 | 
| 4732   JSFunction* callee = JSFunction::cast(args[0]); | 4733   JSFunction* callee = JSFunction::cast(args[0]); | 
| 4733   Object** parameters = reinterpret_cast<Object**>(args[1]); | 4734   Object** parameters = reinterpret_cast<Object**>(args[1]); | 
| 4734   const int length = Smi::cast(args[2])->value(); | 4735   const int length = Smi::cast(args[2])->value(); | 
| 4735 | 4736 | 
| 4736   Object* result = Heap::AllocateArgumentsObject(callee, length); | 4737   Object* result = Heap::AllocateArgumentsObject(callee, length); | 
| 4737   if (result->IsFailure()) return result; | 4738   if (result->IsFailure()) return result; | 
| 4738   // Allocate the elements if needed. | 4739   // Allocate the elements if needed. | 
| 4739   if (length > 0) { | 4740   if (length > 0) { | 
| 4740     // Allocate the fixed array. | 4741     // Allocate the fixed array. | 
| 4741     Object* obj = Heap::AllocateRawFixedArray(length); | 4742     Object* obj = Heap::AllocateRawFixedArray(length); | 
| 4742     if (obj->IsFailure()) return obj; | 4743     if (obj->IsFailure()) return obj; | 
|  | 4744 | 
|  | 4745     AssertNoAllocation no_gc; | 
| 4743     reinterpret_cast<Array*>(obj)->set_map(Heap::fixed_array_map()); | 4746     reinterpret_cast<Array*>(obj)->set_map(Heap::fixed_array_map()); | 
| 4744     FixedArray* array = FixedArray::cast(obj); | 4747     FixedArray* array = FixedArray::cast(obj); | 
| 4745     array->set_length(length); | 4748     array->set_length(length); | 
| 4746     WriteBarrierMode mode = array->GetWriteBarrierMode(); | 4749 | 
|  | 4750     WriteBarrierMode mode = array->GetWriteBarrierMode(no_gc); | 
| 4747     for (int i = 0; i < length; i++) { | 4751     for (int i = 0; i < length; i++) { | 
| 4748       array->set(i, *--parameters, mode); | 4752       array->set(i, *--parameters, mode); | 
| 4749     } | 4753     } | 
| 4750     JSObject::cast(result)->set_elements(FixedArray::cast(obj)); | 4754     JSObject::cast(result)->set_elements(FixedArray::cast(obj)); | 
| 4751   } | 4755   } | 
| 4752   return result; | 4756   return result; | 
| 4753 } | 4757 } | 
| 4754 | 4758 | 
| 4755 | 4759 | 
| 4756 static Object* Runtime_NewClosure(Arguments args) { | 4760 static Object* Runtime_NewClosure(Arguments args) { | 
| (...skipping 1268 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 6025 | 6029 | 
| 6026 | 6030 | 
| 6027 // Move contents of argument 0 (an array) to argument 1 (an array) | 6031 // Move contents of argument 0 (an array) to argument 1 (an array) | 
| 6028 static Object* Runtime_MoveArrayContents(Arguments args) { | 6032 static Object* Runtime_MoveArrayContents(Arguments args) { | 
| 6029   ASSERT(args.length() == 2); | 6033   ASSERT(args.length() == 2); | 
| 6030   CONVERT_CHECKED(JSArray, from, args[0]); | 6034   CONVERT_CHECKED(JSArray, from, args[0]); | 
| 6031   CONVERT_CHECKED(JSArray, to, args[1]); | 6035   CONVERT_CHECKED(JSArray, to, args[1]); | 
| 6032   to->SetContent(FixedArray::cast(from->elements())); | 6036   to->SetContent(FixedArray::cast(from->elements())); | 
| 6033   to->set_length(from->length()); | 6037   to->set_length(from->length()); | 
| 6034   from->SetContent(Heap::empty_fixed_array()); | 6038   from->SetContent(Heap::empty_fixed_array()); | 
| 6035   from->set_length(0); | 6039   from->set_length(Smi::FromInt(0)); | 
| 6036   return to; | 6040   return to; | 
| 6037 } | 6041 } | 
| 6038 | 6042 | 
| 6039 | 6043 | 
| 6040 // How many elements does this array have? | 6044 // How many elements does this array have? | 
| 6041 static Object* Runtime_EstimateNumberOfElements(Arguments args) { | 6045 static Object* Runtime_EstimateNumberOfElements(Arguments args) { | 
| 6042   ASSERT(args.length() == 1); | 6046   ASSERT(args.length() == 1); | 
| 6043   CONVERT_CHECKED(JSArray, array, args[0]); | 6047   CONVERT_CHECKED(JSArray, array, args[0]); | 
| 6044   HeapObject* elements = array->elements(); | 6048   HeapObject* elements = array->elements(); | 
| 6045   if (elements->IsDictionary()) { | 6049   if (elements->IsDictionary()) { | 
| (...skipping 22 matching lines...) Expand all  Loading... | 
| 6068       uint32_t index; | 6072       uint32_t index; | 
| 6069       if (!Array::IndexFromObject(key, &index) || index >= length) { | 6073       if (!Array::IndexFromObject(key, &index) || index >= length) { | 
| 6070         // Zap invalid keys. | 6074         // Zap invalid keys. | 
| 6071         keys->set_undefined(i); | 6075         keys->set_undefined(i); | 
| 6072       } | 6076       } | 
| 6073     } | 6077     } | 
| 6074     return *Factory::NewJSArrayWithElements(keys); | 6078     return *Factory::NewJSArrayWithElements(keys); | 
| 6075   } else { | 6079   } else { | 
| 6076     Handle<FixedArray> single_interval = Factory::NewFixedArray(2); | 6080     Handle<FixedArray> single_interval = Factory::NewFixedArray(2); | 
| 6077     // -1 means start of array. | 6081     // -1 means start of array. | 
| 6078     single_interval->set(0, | 6082     single_interval->set(0, Smi::FromInt(-1)); | 
| 6079                          Smi::FromInt(-1), |  | 
| 6080                          SKIP_WRITE_BARRIER); |  | 
| 6081     uint32_t actual_length = static_cast<uint32_t>(array->elements()->length()); | 6083     uint32_t actual_length = static_cast<uint32_t>(array->elements()->length()); | 
| 6082     uint32_t min_length = actual_length < length ? actual_length : length; | 6084     uint32_t min_length = actual_length < length ? actual_length : length; | 
| 6083     Handle<Object> length_object = | 6085     Handle<Object> length_object = | 
| 6084         Factory::NewNumber(static_cast<double>(min_length)); | 6086         Factory::NewNumber(static_cast<double>(min_length)); | 
| 6085     single_interval->set(1, *length_object); | 6087     single_interval->set(1, *length_object); | 
| 6086     return *Factory::NewJSArrayWithElements(single_interval); | 6088     return *Factory::NewJSArrayWithElements(single_interval); | 
| 6087   } | 6089   } | 
| 6088 } | 6090 } | 
| 6089 | 6091 | 
| 6090 | 6092 | 
| (...skipping 1352 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 7443     index = ScopeInfo<>::ContextSlotIndex(*code, Heap::arguments_symbol(), | 7445     index = ScopeInfo<>::ContextSlotIndex(*code, Heap::arguments_symbol(), | 
| 7444                                           NULL); | 7446                                           NULL); | 
| 7445     if (index != -1) { | 7447     if (index != -1) { | 
| 7446       return Handle<Object>(function_context->get(index)); | 7448       return Handle<Object>(function_context->get(index)); | 
| 7447     } | 7449     } | 
| 7448   } | 7450   } | 
| 7449 | 7451 | 
| 7450   const int length = frame->GetProvidedParametersCount(); | 7452   const int length = frame->GetProvidedParametersCount(); | 
| 7451   Handle<JSObject> arguments = Factory::NewArgumentsObject(function, length); | 7453   Handle<JSObject> arguments = Factory::NewArgumentsObject(function, length); | 
| 7452   Handle<FixedArray> array = Factory::NewFixedArray(length); | 7454   Handle<FixedArray> array = Factory::NewFixedArray(length); | 
| 7453   WriteBarrierMode mode = array->GetWriteBarrierMode(); | 7455 | 
|  | 7456   AssertNoAllocation no_gc; | 
|  | 7457   WriteBarrierMode mode = array->GetWriteBarrierMode(no_gc); | 
| 7454   for (int i = 0; i < length; i++) { | 7458   for (int i = 0; i < length; i++) { | 
| 7455     array->set(i, frame->GetParameter(i), mode); | 7459     array->set(i, frame->GetParameter(i), mode); | 
| 7456   } | 7460   } | 
| 7457   arguments->set_elements(*array); | 7461   arguments->set_elements(*array); | 
| 7458   return arguments; | 7462   return arguments; | 
| 7459 } | 7463 } | 
| 7460 | 7464 | 
| 7461 | 7465 | 
| 7462 // Evaluate a piece of JavaScript in the context of a stack frame for | 7466 // Evaluate a piece of JavaScript in the context of a stack frame for | 
| 7463 // debugging. This is accomplished by creating a new context which in its | 7467 // debugging. This is accomplished by creating a new context which in its | 
| (...skipping 561 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 8025       JavaScriptFrame* frame = JavaScriptFrame::cast(raw_frame); | 8029       JavaScriptFrame* frame = JavaScriptFrame::cast(raw_frame); | 
| 8026       Object* recv = frame->receiver(); | 8030       Object* recv = frame->receiver(); | 
| 8027       Object* fun = frame->function(); | 8031       Object* fun = frame->function(); | 
| 8028       Address pc = frame->pc(); | 8032       Address pc = frame->pc(); | 
| 8029       Address start = frame->code()->address(); | 8033       Address start = frame->code()->address(); | 
| 8030       Smi* offset = Smi::FromInt(static_cast<int>(pc - start)); | 8034       Smi* offset = Smi::FromInt(static_cast<int>(pc - start)); | 
| 8031       FixedArray* elements = FixedArray::cast(result->elements()); | 8035       FixedArray* elements = FixedArray::cast(result->elements()); | 
| 8032       if (cursor + 2 < elements->length()) { | 8036       if (cursor + 2 < elements->length()) { | 
| 8033         elements->set(cursor++, recv); | 8037         elements->set(cursor++, recv); | 
| 8034         elements->set(cursor++, fun); | 8038         elements->set(cursor++, fun); | 
| 8035         elements->set(cursor++, offset, SKIP_WRITE_BARRIER); | 8039         elements->set(cursor++, offset); | 
| 8036       } else { | 8040       } else { | 
| 8037         HandleScope scope; | 8041         HandleScope scope; | 
| 8038         Handle<Object> recv_handle(recv); | 8042         Handle<Object> recv_handle(recv); | 
| 8039         Handle<Object> fun_handle(fun); | 8043         Handle<Object> fun_handle(fun); | 
| 8040         SetElement(result, cursor++, recv_handle); | 8044         SetElement(result, cursor++, recv_handle); | 
| 8041         SetElement(result, cursor++, fun_handle); | 8045         SetElement(result, cursor++, fun_handle); | 
| 8042         SetElement(result, cursor++, Handle<Smi>(offset)); | 8046         SetElement(result, cursor++, Handle<Smi>(offset)); | 
| 8043       } | 8047       } | 
| 8044     } | 8048     } | 
| 8045     iter.Advance(); | 8049     iter.Advance(); | 
| 8046   } | 8050   } | 
| 8047 | 8051 | 
| 8048   result->set_length(Smi::FromInt(cursor), SKIP_WRITE_BARRIER); | 8052   result->set_length(Smi::FromInt(cursor)); | 
| 8049 |  | 
| 8050   return *result; | 8053   return *result; | 
| 8051 } | 8054 } | 
| 8052 | 8055 | 
| 8053 | 8056 | 
| 8054 // Returns V8 version as a string. | 8057 // Returns V8 version as a string. | 
| 8055 static Object* Runtime_GetV8Version(Arguments args) { | 8058 static Object* Runtime_GetV8Version(Arguments args) { | 
| 8056   ASSERT_EQ(args.length(), 0); | 8059   ASSERT_EQ(args.length(), 0); | 
| 8057 | 8060 | 
| 8058   NoHandleAllocation ha; | 8061   NoHandleAllocation ha; | 
| 8059 | 8062 | 
| (...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 8163   } else { | 8166   } else { | 
| 8164     // Handle last resort GC and make sure to allow future allocations | 8167     // Handle last resort GC and make sure to allow future allocations | 
| 8165     // to grow the heap without causing GCs (if possible). | 8168     // to grow the heap without causing GCs (if possible). | 
| 8166     Counters::gc_last_resort_from_js.Increment(); | 8169     Counters::gc_last_resort_from_js.Increment(); | 
| 8167     Heap::CollectAllGarbage(false); | 8170     Heap::CollectAllGarbage(false); | 
| 8168   } | 8171   } | 
| 8169 } | 8172 } | 
| 8170 | 8173 | 
| 8171 | 8174 | 
| 8172 } }  // namespace v8::internal | 8175 } }  // namespace v8::internal | 
| OLD | NEW | 
|---|