| Index: src/factory.cc
|
| ===================================================================
|
| --- src/factory.cc (revision 7267)
|
| +++ src/factory.cc (working copy)
|
| @@ -41,35 +41,43 @@
|
|
|
| Handle<FixedArray> Factory::NewFixedArray(int size, PretenureFlag pretenure) {
|
| ASSERT(0 <= size);
|
| - CALL_HEAP_FUNCTION(Heap::AllocateFixedArray(size, pretenure), FixedArray);
|
| + CALL_HEAP_FUNCTION(
|
| + isolate(),
|
| + isolate()->heap()->AllocateFixedArray(size, pretenure),
|
| + FixedArray);
|
| }
|
|
|
|
|
| Handle<FixedArray> Factory::NewFixedArrayWithHoles(int size,
|
| PretenureFlag pretenure) {
|
| ASSERT(0 <= size);
|
| - CALL_HEAP_FUNCTION(Heap::AllocateFixedArrayWithHoles(size, pretenure),
|
| - FixedArray);
|
| + CALL_HEAP_FUNCTION(
|
| + isolate(),
|
| + isolate()->heap()->AllocateFixedArrayWithHoles(size, pretenure),
|
| + FixedArray);
|
| }
|
|
|
|
|
| Handle<StringDictionary> Factory::NewStringDictionary(int at_least_space_for) {
|
| ASSERT(0 <= at_least_space_for);
|
| - CALL_HEAP_FUNCTION(StringDictionary::Allocate(at_least_space_for),
|
| + CALL_HEAP_FUNCTION(isolate(),
|
| + StringDictionary::Allocate(at_least_space_for),
|
| StringDictionary);
|
| }
|
|
|
|
|
| Handle<NumberDictionary> Factory::NewNumberDictionary(int at_least_space_for) {
|
| ASSERT(0 <= at_least_space_for);
|
| - CALL_HEAP_FUNCTION(NumberDictionary::Allocate(at_least_space_for),
|
| + CALL_HEAP_FUNCTION(isolate(),
|
| + NumberDictionary::Allocate(at_least_space_for),
|
| NumberDictionary);
|
| }
|
|
|
|
|
| Handle<DescriptorArray> Factory::NewDescriptorArray(int number_of_descriptors) {
|
| ASSERT(0 <= number_of_descriptors);
|
| - CALL_HEAP_FUNCTION(DescriptorArray::Allocate(number_of_descriptors),
|
| + CALL_HEAP_FUNCTION(isolate(),
|
| + DescriptorArray::Allocate(number_of_descriptors),
|
| DescriptorArray);
|
| }
|
|
|
| @@ -78,7 +86,8 @@
|
| int deopt_entry_count,
|
| PretenureFlag pretenure) {
|
| ASSERT(deopt_entry_count > 0);
|
| - CALL_HEAP_FUNCTION(DeoptimizationInputData::Allocate(deopt_entry_count,
|
| + CALL_HEAP_FUNCTION(isolate(),
|
| + DeoptimizationInputData::Allocate(deopt_entry_count,
|
| pretenure),
|
| DeoptimizationInputData);
|
| }
|
| @@ -88,7 +97,8 @@
|
| int deopt_entry_count,
|
| PretenureFlag pretenure) {
|
| ASSERT(deopt_entry_count > 0);
|
| - CALL_HEAP_FUNCTION(DeoptimizationOutputData::Allocate(deopt_entry_count,
|
| + CALL_HEAP_FUNCTION(isolate(),
|
| + DeoptimizationOutputData::Allocate(deopt_entry_count,
|
| pretenure),
|
| DeoptimizationOutputData);
|
| }
|
| @@ -96,96 +106,137 @@
|
|
|
| // Symbols are created in the old generation (data space).
|
| Handle<String> Factory::LookupSymbol(Vector<const char> string) {
|
| - CALL_HEAP_FUNCTION(Heap::LookupSymbol(string), String);
|
| + CALL_HEAP_FUNCTION(isolate(),
|
| + isolate()->heap()->LookupSymbol(string),
|
| + String);
|
| }
|
|
|
| Handle<String> Factory::LookupAsciiSymbol(Vector<const char> string) {
|
| - CALL_HEAP_FUNCTION(Heap::LookupAsciiSymbol(string), String);
|
| + CALL_HEAP_FUNCTION(isolate(),
|
| + isolate()->heap()->LookupAsciiSymbol(string),
|
| + String);
|
| }
|
|
|
| Handle<String> Factory::LookupTwoByteSymbol(Vector<const uc16> string) {
|
| - CALL_HEAP_FUNCTION(Heap::LookupTwoByteSymbol(string), String);
|
| + CALL_HEAP_FUNCTION(isolate(),
|
| + isolate()->heap()->LookupTwoByteSymbol(string),
|
| + String);
|
| }
|
|
|
|
|
| Handle<String> Factory::NewStringFromAscii(Vector<const char> string,
|
| PretenureFlag pretenure) {
|
| - CALL_HEAP_FUNCTION(Heap::AllocateStringFromAscii(string, pretenure), String);
|
| + CALL_HEAP_FUNCTION(
|
| + isolate(),
|
| + isolate()->heap()->AllocateStringFromAscii(string, pretenure),
|
| + String);
|
| }
|
|
|
| Handle<String> Factory::NewStringFromUtf8(Vector<const char> string,
|
| PretenureFlag pretenure) {
|
| - CALL_HEAP_FUNCTION(Heap::AllocateStringFromUtf8(string, pretenure), String);
|
| + CALL_HEAP_FUNCTION(
|
| + isolate(),
|
| + isolate()->heap()->AllocateStringFromUtf8(string, pretenure),
|
| + String);
|
| }
|
|
|
|
|
| Handle<String> Factory::NewStringFromTwoByte(Vector<const uc16> string,
|
| PretenureFlag pretenure) {
|
| - CALL_HEAP_FUNCTION(Heap::AllocateStringFromTwoByte(string, pretenure),
|
| - String);
|
| + CALL_HEAP_FUNCTION(
|
| + isolate(),
|
| + isolate()->heap()->AllocateStringFromTwoByte(string, pretenure),
|
| + String);
|
| }
|
|
|
|
|
| Handle<String> Factory::NewRawAsciiString(int length,
|
| PretenureFlag pretenure) {
|
| - CALL_HEAP_FUNCTION(Heap::AllocateRawAsciiString(length, pretenure), String);
|
| + CALL_HEAP_FUNCTION(
|
| + isolate(),
|
| + isolate()->heap()->AllocateRawAsciiString(length, pretenure),
|
| + String);
|
| }
|
|
|
|
|
| Handle<String> Factory::NewRawTwoByteString(int length,
|
| PretenureFlag pretenure) {
|
| - CALL_HEAP_FUNCTION(Heap::AllocateRawTwoByteString(length, pretenure), String);
|
| + CALL_HEAP_FUNCTION(
|
| + isolate(),
|
| + isolate()->heap()->AllocateRawTwoByteString(length, pretenure),
|
| + String);
|
| }
|
|
|
|
|
| Handle<String> Factory::NewConsString(Handle<String> first,
|
| Handle<String> second) {
|
| - CALL_HEAP_FUNCTION(Heap::AllocateConsString(*first, *second), String);
|
| + CALL_HEAP_FUNCTION(isolate(),
|
| + isolate()->heap()->AllocateConsString(*first, *second),
|
| + String);
|
| }
|
|
|
|
|
| Handle<String> Factory::NewSubString(Handle<String> str,
|
| int begin,
|
| int end) {
|
| - CALL_HEAP_FUNCTION(str->SubString(begin, end), String);
|
| + CALL_HEAP_FUNCTION(isolate(),
|
| + str->SubString(begin, end),
|
| + String);
|
| }
|
|
|
|
|
| Handle<String> Factory::NewExternalStringFromAscii(
|
| ExternalAsciiString::Resource* resource) {
|
| - CALL_HEAP_FUNCTION(Heap::AllocateExternalStringFromAscii(resource), String);
|
| + CALL_HEAP_FUNCTION(
|
| + isolate(),
|
| + isolate()->heap()->AllocateExternalStringFromAscii(resource),
|
| + String);
|
| }
|
|
|
|
|
| Handle<String> Factory::NewExternalStringFromTwoByte(
|
| ExternalTwoByteString::Resource* resource) {
|
| - CALL_HEAP_FUNCTION(Heap::AllocateExternalStringFromTwoByte(resource), String);
|
| + CALL_HEAP_FUNCTION(
|
| + isolate(),
|
| + isolate()->heap()->AllocateExternalStringFromTwoByte(resource),
|
| + String);
|
| }
|
|
|
|
|
| Handle<Context> Factory::NewGlobalContext() {
|
| - CALL_HEAP_FUNCTION(Heap::AllocateGlobalContext(), Context);
|
| + CALL_HEAP_FUNCTION(
|
| + isolate(),
|
| + isolate()->heap()->AllocateGlobalContext(),
|
| + Context);
|
| }
|
|
|
|
|
| Handle<Context> Factory::NewFunctionContext(int length,
|
| Handle<JSFunction> closure) {
|
| - CALL_HEAP_FUNCTION(Heap::AllocateFunctionContext(length, *closure), Context);
|
| + CALL_HEAP_FUNCTION(
|
| + isolate(),
|
| + isolate()->heap()->AllocateFunctionContext(length, *closure),
|
| + Context);
|
| }
|
|
|
|
|
| Handle<Context> Factory::NewWithContext(Handle<Context> previous,
|
| Handle<JSObject> extension,
|
| bool is_catch_context) {
|
| - CALL_HEAP_FUNCTION(Heap::AllocateWithContext(*previous,
|
| - *extension,
|
| - is_catch_context),
|
| - Context);
|
| + CALL_HEAP_FUNCTION(
|
| + isolate(),
|
| + isolate()->heap()->AllocateWithContext(*previous,
|
| + *extension,
|
| + is_catch_context),
|
| + Context);
|
| }
|
|
|
|
|
| Handle<Struct> Factory::NewStruct(InstanceType type) {
|
| - CALL_HEAP_FUNCTION(Heap::AllocateStruct(type), Struct);
|
| + CALL_HEAP_FUNCTION(
|
| + isolate(),
|
| + isolate()->heap()->AllocateStruct(type),
|
| + Struct);
|
| }
|
|
|
|
|
| @@ -200,34 +251,35 @@
|
| Handle<Script> Factory::NewScript(Handle<String> source) {
|
| // Generate id for this script.
|
| int id;
|
| - if (Heap::last_script_id()->IsUndefined()) {
|
| + Heap* heap = isolate()->heap();
|
| + if (heap->last_script_id()->IsUndefined()) {
|
| // Script ids start from one.
|
| id = 1;
|
| } else {
|
| // Increment id, wrap when positive smi is exhausted.
|
| - id = Smi::cast(Heap::last_script_id())->value();
|
| + id = Smi::cast(heap->last_script_id())->value();
|
| id++;
|
| if (!Smi::IsValid(id)) {
|
| id = 0;
|
| }
|
| }
|
| - Heap::SetLastScriptId(Smi::FromInt(id));
|
| + heap->SetLastScriptId(Smi::FromInt(id));
|
|
|
| // Create and initialize script object.
|
| - Handle<Proxy> wrapper = Factory::NewProxy(0, TENURED);
|
| + Handle<Proxy> wrapper = NewProxy(0, TENURED);
|
| Handle<Script> script = Handle<Script>::cast(NewStruct(SCRIPT_TYPE));
|
| script->set_source(*source);
|
| - script->set_name(Heap::undefined_value());
|
| - script->set_id(Heap::last_script_id());
|
| + script->set_name(heap->undefined_value());
|
| + script->set_id(heap->last_script_id());
|
| script->set_line_offset(Smi::FromInt(0));
|
| script->set_column_offset(Smi::FromInt(0));
|
| - script->set_data(Heap::undefined_value());
|
| - script->set_context_data(Heap::undefined_value());
|
| + script->set_data(heap->undefined_value());
|
| + script->set_context_data(heap->undefined_value());
|
| script->set_type(Smi::FromInt(Script::TYPE_NORMAL));
|
| script->set_compilation_type(Smi::FromInt(Script::COMPILATION_TYPE_HOST));
|
| script->set_wrapper(*wrapper);
|
| - script->set_line_ends(Heap::undefined_value());
|
| - script->set_eval_from_shared(Heap::undefined_value());
|
| + script->set_line_ends(heap->undefined_value());
|
| + script->set_eval_from_shared(heap->undefined_value());
|
| script->set_eval_from_instructions_offset(Smi::FromInt(0));
|
|
|
| return script;
|
| @@ -235,7 +287,9 @@
|
|
|
|
|
| Handle<Proxy> Factory::NewProxy(Address addr, PretenureFlag pretenure) {
|
| - CALL_HEAP_FUNCTION(Heap::AllocateProxy(addr, pretenure), Proxy);
|
| + CALL_HEAP_FUNCTION(isolate(),
|
| + isolate()->heap()->AllocateProxy(addr, pretenure),
|
| + Proxy);
|
| }
|
|
|
|
|
| @@ -246,7 +300,10 @@
|
|
|
| Handle<ByteArray> Factory::NewByteArray(int length, PretenureFlag pretenure) {
|
| ASSERT(0 <= length);
|
| - CALL_HEAP_FUNCTION(Heap::AllocateByteArray(length, pretenure), ByteArray);
|
| + CALL_HEAP_FUNCTION(
|
| + isolate(),
|
| + isolate()->heap()->AllocateByteArray(length, pretenure),
|
| + ByteArray);
|
| }
|
|
|
|
|
| @@ -255,32 +312,43 @@
|
| void* external_pointer,
|
| PretenureFlag pretenure) {
|
| ASSERT(0 <= length);
|
| - CALL_HEAP_FUNCTION(Heap::AllocateExternalArray(length,
|
| - array_type,
|
| - external_pointer,
|
| - pretenure), ExternalArray);
|
| + CALL_HEAP_FUNCTION(
|
| + isolate(),
|
| + isolate()->heap()->AllocateExternalArray(length,
|
| + array_type,
|
| + external_pointer,
|
| + pretenure),
|
| + ExternalArray);
|
| }
|
|
|
|
|
| Handle<JSGlobalPropertyCell> Factory::NewJSGlobalPropertyCell(
|
| Handle<Object> value) {
|
| - CALL_HEAP_FUNCTION(Heap::AllocateJSGlobalPropertyCell(*value),
|
| - JSGlobalPropertyCell);
|
| + CALL_HEAP_FUNCTION(
|
| + isolate(),
|
| + isolate()->heap()->AllocateJSGlobalPropertyCell(*value),
|
| + JSGlobalPropertyCell);
|
| }
|
|
|
|
|
| Handle<Map> Factory::NewMap(InstanceType type, int instance_size) {
|
| - CALL_HEAP_FUNCTION(Heap::AllocateMap(type, instance_size), Map);
|
| + CALL_HEAP_FUNCTION(
|
| + isolate(),
|
| + isolate()->heap()->AllocateMap(type, instance_size),
|
| + Map);
|
| }
|
|
|
|
|
| Handle<JSObject> Factory::NewFunctionPrototype(Handle<JSFunction> function) {
|
| - CALL_HEAP_FUNCTION(Heap::AllocateFunctionPrototype(*function), JSObject);
|
| + CALL_HEAP_FUNCTION(
|
| + isolate(),
|
| + isolate()->heap()->AllocateFunctionPrototype(*function),
|
| + JSObject);
|
| }
|
|
|
|
|
| Handle<Map> Factory::CopyMapDropDescriptors(Handle<Map> src) {
|
| - CALL_HEAP_FUNCTION(src->CopyDropDescriptors(), Map);
|
| + CALL_HEAP_FUNCTION(isolate(), src->CopyDropDescriptors(), Map);
|
| }
|
|
|
|
|
| @@ -310,27 +378,27 @@
|
|
|
|
|
| Handle<Map> Factory::CopyMapDropTransitions(Handle<Map> src) {
|
| - CALL_HEAP_FUNCTION(src->CopyDropTransitions(), Map);
|
| + CALL_HEAP_FUNCTION(isolate(), src->CopyDropTransitions(), Map);
|
| }
|
|
|
|
|
| Handle<Map> Factory::GetFastElementsMap(Handle<Map> src) {
|
| - CALL_HEAP_FUNCTION(src->GetFastElementsMap(), Map);
|
| + CALL_HEAP_FUNCTION(isolate(), src->GetFastElementsMap(), Map);
|
| }
|
|
|
|
|
| Handle<Map> Factory::GetSlowElementsMap(Handle<Map> src) {
|
| - CALL_HEAP_FUNCTION(src->GetSlowElementsMap(), Map);
|
| + CALL_HEAP_FUNCTION(isolate(), src->GetSlowElementsMap(), Map);
|
| }
|
|
|
|
|
| Handle<Map> Factory::NewExternalArrayElementsMap(Handle<Map> src) {
|
| - CALL_HEAP_FUNCTION(src->NewExternalArrayElementsMap(), Map);
|
| + CALL_HEAP_FUNCTION(isolate(), src->NewExternalArrayElementsMap(), Map);
|
| }
|
|
|
|
|
| Handle<FixedArray> Factory::CopyFixedArray(Handle<FixedArray> array) {
|
| - CALL_HEAP_FUNCTION(array->Copy(), FixedArray);
|
| + CALL_HEAP_FUNCTION(isolate(), array->Copy(), FixedArray);
|
| }
|
|
|
|
|
| @@ -338,10 +406,12 @@
|
| Handle<SharedFunctionInfo> function_info,
|
| Handle<Map> function_map,
|
| PretenureFlag pretenure) {
|
| - CALL_HEAP_FUNCTION(Heap::AllocateFunction(*function_map,
|
| - *function_info,
|
| - Heap::the_hole_value(),
|
| - pretenure),
|
| + CALL_HEAP_FUNCTION(
|
| + isolate(),
|
| + isolate()->heap()->AllocateFunction(*function_map,
|
| + *function_info,
|
| + isolate()->heap()->the_hole_value(),
|
| + pretenure),
|
| JSFunction);
|
| }
|
|
|
| @@ -353,14 +423,13 @@
|
| Handle<JSFunction> result = BaseNewFunctionFromSharedFunctionInfo(
|
| function_info,
|
| function_info->strict_mode()
|
| - ? Top::strict_mode_function_map()
|
| - : Top::function_map(),
|
| + ? isolate()->strict_mode_function_map()
|
| + : isolate()->function_map(),
|
| pretenure);
|
|
|
| result->set_context(*context);
|
| int number_of_literals = function_info->num_literals();
|
| - Handle<FixedArray> literals =
|
| - Factory::NewFixedArray(number_of_literals, pretenure);
|
| + Handle<FixedArray> literals = NewFixedArray(number_of_literals, pretenure);
|
| if (number_of_literals > 0) {
|
| // Store the object, regexp and array functions in the literals
|
| // array prefix. These functions will be used when creating
|
| @@ -369,7 +438,7 @@
|
| context->global_context());
|
| }
|
| result->set_literals(*literals);
|
| - result->set_next_function_link(Heap::undefined_value());
|
| + result->set_next_function_link(isolate()->heap()->undefined_value());
|
|
|
| if (V8::UseCrankshaft() &&
|
| FLAG_always_opt &&
|
| @@ -384,23 +453,32 @@
|
|
|
| Handle<Object> Factory::NewNumber(double value,
|
| PretenureFlag pretenure) {
|
| - CALL_HEAP_FUNCTION(Heap::NumberFromDouble(value, pretenure), Object);
|
| + CALL_HEAP_FUNCTION(
|
| + isolate(),
|
| + isolate()->heap()->NumberFromDouble(value, pretenure), Object);
|
| }
|
|
|
|
|
| Handle<Object> Factory::NewNumberFromInt(int value) {
|
| - CALL_HEAP_FUNCTION(Heap::NumberFromInt32(value), Object);
|
| + CALL_HEAP_FUNCTION(
|
| + isolate(),
|
| + isolate()->heap()->NumberFromInt32(value), Object);
|
| }
|
|
|
|
|
| Handle<Object> Factory::NewNumberFromUint(uint32_t value) {
|
| - CALL_HEAP_FUNCTION(Heap::NumberFromUint32(value), Object);
|
| + CALL_HEAP_FUNCTION(
|
| + isolate(),
|
| + isolate()->heap()->NumberFromUint32(value), Object);
|
| }
|
|
|
|
|
| Handle<JSObject> Factory::NewNeanderObject() {
|
| - CALL_HEAP_FUNCTION(Heap::AllocateJSObjectFromMap(Heap::neander_map()),
|
| - JSObject);
|
| + CALL_HEAP_FUNCTION(
|
| + isolate(),
|
| + isolate()->heap()->AllocateJSObjectFromMap(
|
| + isolate()->heap()->neander_map()),
|
| + JSObject);
|
| }
|
|
|
|
|
| @@ -450,11 +528,11 @@
|
| Handle<Object> Factory::NewError(const char* maker, const char* type,
|
| Vector< Handle<Object> > args) {
|
| v8::HandleScope scope; // Instantiate a closeable HandleScope for EscapeFrom.
|
| - Handle<FixedArray> array = Factory::NewFixedArray(args.length());
|
| + Handle<FixedArray> array = NewFixedArray(args.length());
|
| for (int i = 0; i < args.length(); i++) {
|
| array->set(i, *args[i]);
|
| }
|
| - Handle<JSArray> object = Factory::NewJSArrayWithElements(array);
|
| + Handle<JSArray> object = NewJSArrayWithElements(array);
|
| Handle<Object> result = NewError(maker, type, object);
|
| return result.EscapeFrom(&scope);
|
| }
|
| @@ -475,15 +553,15 @@
|
| Handle<Object> Factory::NewError(const char* maker,
|
| const char* type,
|
| Handle<JSArray> args) {
|
| - Handle<String> make_str = Factory::LookupAsciiSymbol(maker);
|
| - Handle<Object> fun_obj(Top::builtins()->GetPropertyNoExceptionThrown(
|
| - *make_str));
|
| + Handle<String> make_str = LookupAsciiSymbol(maker);
|
| + Handle<Object> fun_obj(
|
| + isolate()->js_builtins_object()->GetPropertyNoExceptionThrown(*make_str));
|
| // If the builtins haven't been properly configured yet this error
|
| // constructor may not have been defined. Bail out.
|
| if (!fun_obj->IsJSFunction())
|
| - return Factory::undefined_value();
|
| + return undefined_value();
|
| Handle<JSFunction> fun = Handle<JSFunction>::cast(fun_obj);
|
| - Handle<Object> type_obj = Factory::LookupAsciiSymbol(type);
|
| + Handle<Object> type_obj = LookupAsciiSymbol(type);
|
| Object** argv[2] = { type_obj.location(),
|
| Handle<Object>::cast(args).location() };
|
|
|
| @@ -491,10 +569,7 @@
|
| // running the factory method, use the exception as the result.
|
| bool caught_exception;
|
| Handle<Object> result = Execution::TryCall(fun,
|
| - Top::builtins(),
|
| - 2,
|
| - argv,
|
| - &caught_exception);
|
| + isolate()->js_builtins_object(), 2, argv, &caught_exception);
|
| return result;
|
| }
|
|
|
| @@ -506,21 +581,17 @@
|
|
|
| Handle<Object> Factory::NewError(const char* constructor,
|
| Handle<String> message) {
|
| - Handle<String> constr = Factory::LookupAsciiSymbol(constructor);
|
| - Handle<JSFunction> fun =
|
| - Handle<JSFunction>(
|
| - JSFunction::cast(
|
| - Top::builtins()->GetPropertyNoExceptionThrown(*constr)));
|
| + Handle<String> constr = LookupAsciiSymbol(constructor);
|
| + Handle<JSFunction> fun = Handle<JSFunction>(
|
| + JSFunction::cast(isolate()->js_builtins_object()->
|
| + GetPropertyNoExceptionThrown(*constr)));
|
| Object** argv[1] = { Handle<Object>::cast(message).location() };
|
|
|
| // Invoke the JavaScript factory method. If an exception is thrown while
|
| // running the factory method, use the exception as the result.
|
| bool caught_exception;
|
| Handle<Object> result = Execution::TryCall(fun,
|
| - Top::builtins(),
|
| - 1,
|
| - argv,
|
| - &caught_exception);
|
| + isolate()->js_builtins_object(), 1, argv, &caught_exception);
|
| return result;
|
| }
|
|
|
| @@ -581,8 +652,7 @@
|
| // property that refers to the function.
|
| SetPrototypeProperty(function, prototype);
|
| // Currently safe because it is only invoked from Genesis.
|
| - SetLocalPropertyNoThrow(
|
| - prototype, Factory::constructor_symbol(), function, DONT_ENUM);
|
| + SetLocalPropertyNoThrow(prototype, constructor_symbol(), function, DONT_ENUM);
|
| return function;
|
| }
|
|
|
| @@ -603,17 +673,24 @@
|
| Code::Flags flags,
|
| Handle<Object> self_ref,
|
| bool immovable) {
|
| - CALL_HEAP_FUNCTION(Heap::CreateCode(desc, flags, self_ref, immovable), Code);
|
| + CALL_HEAP_FUNCTION(isolate(),
|
| + isolate()->heap()->CreateCode(
|
| + desc, flags, self_ref, immovable),
|
| + Code);
|
| }
|
|
|
|
|
| Handle<Code> Factory::CopyCode(Handle<Code> code) {
|
| - CALL_HEAP_FUNCTION(Heap::CopyCode(*code), Code);
|
| + CALL_HEAP_FUNCTION(isolate(),
|
| + isolate()->heap()->CopyCode(*code),
|
| + Code);
|
| }
|
|
|
|
|
| Handle<Code> Factory::CopyCode(Handle<Code> code, Vector<byte> reloc_info) {
|
| - CALL_HEAP_FUNCTION(Heap::CopyCode(*code, reloc_info), Code);
|
| + CALL_HEAP_FUNCTION(isolate(),
|
| + isolate()->heap()->CopyCode(*code, reloc_info),
|
| + Code);
|
| }
|
|
|
|
|
| @@ -634,13 +711,15 @@
|
| Handle<String> key,
|
| Handle<Object> value,
|
| PropertyAttributes attributes) {
|
| - CALL_HEAP_FUNCTION(DoCopyInsert(*array, *key, *value, attributes),
|
| + CALL_HEAP_FUNCTION(isolate(),
|
| + DoCopyInsert(*array, *key, *value, attributes),
|
| DescriptorArray);
|
| }
|
|
|
|
|
| Handle<String> Factory::SymbolFromString(Handle<String> value) {
|
| - CALL_HEAP_FUNCTION(Heap::LookupSymbol(*value), String);
|
| + CALL_HEAP_FUNCTION(isolate(),
|
| + isolate()->heap()->LookupSymbol(*value), String);
|
| }
|
|
|
|
|
| @@ -705,35 +784,43 @@
|
|
|
| Handle<JSObject> Factory::NewJSObject(Handle<JSFunction> constructor,
|
| PretenureFlag pretenure) {
|
| - CALL_HEAP_FUNCTION(Heap::AllocateJSObject(*constructor, pretenure), JSObject);
|
| + CALL_HEAP_FUNCTION(
|
| + isolate(),
|
| + isolate()->heap()->AllocateJSObject(*constructor, pretenure), JSObject);
|
| }
|
|
|
|
|
| Handle<GlobalObject> Factory::NewGlobalObject(
|
| Handle<JSFunction> constructor) {
|
| - CALL_HEAP_FUNCTION(Heap::AllocateGlobalObject(*constructor),
|
| + CALL_HEAP_FUNCTION(isolate(),
|
| + isolate()->heap()->AllocateGlobalObject(*constructor),
|
| GlobalObject);
|
| }
|
|
|
|
|
|
|
| Handle<JSObject> Factory::NewJSObjectFromMap(Handle<Map> map) {
|
| - CALL_HEAP_FUNCTION(Heap::AllocateJSObjectFromMap(*map, NOT_TENURED),
|
| - JSObject);
|
| + CALL_HEAP_FUNCTION(
|
| + isolate(),
|
| + isolate()->heap()->AllocateJSObjectFromMap(*map, NOT_TENURED),
|
| + JSObject);
|
| }
|
|
|
|
|
| Handle<JSArray> Factory::NewJSArray(int capacity,
|
| PretenureFlag pretenure) {
|
| - Handle<JSObject> obj = NewJSObject(Top::array_function(), pretenure);
|
| - CALL_HEAP_FUNCTION(Handle<JSArray>::cast(obj)->Initialize(capacity), JSArray);
|
| + Handle<JSObject> obj = NewJSObject(isolate()->array_function(), pretenure);
|
| + CALL_HEAP_FUNCTION(isolate(),
|
| + Handle<JSArray>::cast(obj)->Initialize(capacity),
|
| + JSArray);
|
| }
|
|
|
|
|
| Handle<JSArray> Factory::NewJSArrayWithElements(Handle<FixedArray> elements,
|
| PretenureFlag pretenure) {
|
| Handle<JSArray> result =
|
| - Handle<JSArray>::cast(NewJSObject(Top::array_function(), pretenure));
|
| + Handle<JSArray>::cast(NewJSObject(isolate()->array_function(),
|
| + pretenure));
|
| result->SetContent(*elements);
|
| return result;
|
| }
|
| @@ -767,24 +854,27 @@
|
| Handle<Object> script,
|
| Handle<Object> stack_trace,
|
| Handle<Object> stack_frames) {
|
| - CALL_HEAP_FUNCTION(Heap::AllocateJSMessageObject(*type,
|
| - *arguments,
|
| - start_position,
|
| - end_position,
|
| - *script,
|
| - *stack_trace,
|
| - *stack_frames),
|
| + CALL_HEAP_FUNCTION(isolate(),
|
| + isolate()->heap()->AllocateJSMessageObject(*type,
|
| + *arguments,
|
| + start_position,
|
| + end_position,
|
| + *script,
|
| + *stack_trace,
|
| + *stack_frames),
|
| JSMessageObject);
|
| }
|
|
|
| Handle<SharedFunctionInfo> Factory::NewSharedFunctionInfo(Handle<String> name) {
|
| - CALL_HEAP_FUNCTION(Heap::AllocateSharedFunctionInfo(*name),
|
| + CALL_HEAP_FUNCTION(isolate(),
|
| + isolate()->heap()->AllocateSharedFunctionInfo(*name),
|
| SharedFunctionInfo);
|
| }
|
|
|
|
|
| Handle<String> Factory::NumberToString(Handle<Object> number) {
|
| - CALL_HEAP_FUNCTION(Heap::NumberToString(*number), String);
|
| + CALL_HEAP_FUNCTION(isolate(),
|
| + isolate()->heap()->NumberToString(*number), String);
|
| }
|
|
|
|
|
| @@ -792,24 +882,28 @@
|
| Handle<NumberDictionary> dictionary,
|
| uint32_t key,
|
| Handle<Object> value) {
|
| - CALL_HEAP_FUNCTION(dictionary->AtNumberPut(key, *value), NumberDictionary);
|
| + CALL_HEAP_FUNCTION(isolate(),
|
| + dictionary->AtNumberPut(key, *value),
|
| + NumberDictionary);
|
| }
|
|
|
|
|
| Handle<JSFunction> Factory::NewFunctionHelper(Handle<String> name,
|
| Handle<Object> prototype) {
|
| Handle<SharedFunctionInfo> function_share = NewSharedFunctionInfo(name);
|
| - CALL_HEAP_FUNCTION(Heap::AllocateFunction(*Top::function_map(),
|
| - *function_share,
|
| - *prototype),
|
| - JSFunction);
|
| + CALL_HEAP_FUNCTION(
|
| + isolate(),
|
| + isolate()->heap()->AllocateFunction(*isolate()->function_map(),
|
| + *function_share,
|
| + *prototype),
|
| + JSFunction);
|
| }
|
|
|
|
|
| Handle<JSFunction> Factory::NewFunction(Handle<String> name,
|
| Handle<Object> prototype) {
|
| Handle<JSFunction> fun = NewFunctionHelper(name, prototype);
|
| - fun->set_context(Top::context()->global_context());
|
| + fun->set_context(isolate()->context()->global_context());
|
| return fun;
|
| }
|
|
|
| @@ -819,9 +913,10 @@
|
| StrictModeFlag strict_mode) {
|
| Handle<SharedFunctionInfo> function_share = NewSharedFunctionInfo(name);
|
| Handle<Map> map = strict_mode == kStrictMode
|
| - ? Top::strict_mode_function_without_prototype_map()
|
| - : Top::function_without_prototype_map();
|
| - CALL_HEAP_FUNCTION(Heap::AllocateFunction(
|
| + ? isolate()->strict_mode_function_without_prototype_map()
|
| + : isolate()->function_without_prototype_map();
|
| + CALL_HEAP_FUNCTION(isolate(),
|
| + isolate()->heap()->AllocateFunction(
|
| *map,
|
| *function_share,
|
| *the_hole_value()),
|
| @@ -833,19 +928,19 @@
|
| Handle<String> name,
|
| StrictModeFlag strict_mode) {
|
| Handle<JSFunction> fun = NewFunctionWithoutPrototypeHelper(name, strict_mode);
|
| - fun->set_context(Top::context()->global_context());
|
| + fun->set_context(isolate()->context()->global_context());
|
| return fun;
|
| }
|
|
|
|
|
| Handle<Object> Factory::ToObject(Handle<Object> object) {
|
| - CALL_HEAP_FUNCTION(object->ToObject(), Object);
|
| + CALL_HEAP_FUNCTION(isolate(), object->ToObject(), Object);
|
| }
|
|
|
|
|
| Handle<Object> Factory::ToObject(Handle<Object> object,
|
| Handle<Context> global_context) {
|
| - CALL_HEAP_FUNCTION(object->ToObject(*global_context), Object);
|
| + CALL_HEAP_FUNCTION(isolate(), object->ToObject(*global_context), Object);
|
| }
|
|
|
|
|
| @@ -862,13 +957,13 @@
|
| // debug info object to avoid allocation while setting up the debug info
|
| // object.
|
| Handle<FixedArray> break_points(
|
| - Factory::NewFixedArray(Debug::kEstimatedNofBreakPointsInFunction));
|
| + NewFixedArray(Debug::kEstimatedNofBreakPointsInFunction));
|
|
|
| // Create and set up the debug info object. Debug info contains function, a
|
| // copy of the original code, the executing code and initial fixed array for
|
| // active break points.
|
| Handle<DebugInfo> debug_info =
|
| - Handle<DebugInfo>::cast(Factory::NewStruct(DEBUG_INFO_TYPE));
|
| + Handle<DebugInfo>::cast(NewStruct(DEBUG_INFO_TYPE));
|
| debug_info->set_shared(*shared);
|
| debug_info->set_original_code(*original_code);
|
| debug_info->set_code(*code);
|
| @@ -884,15 +979,19 @@
|
|
|
| Handle<JSObject> Factory::NewArgumentsObject(Handle<Object> callee,
|
| int length) {
|
| - CALL_HEAP_FUNCTION(Heap::AllocateArgumentsObject(*callee, length), JSObject);
|
| + CALL_HEAP_FUNCTION(
|
| + isolate(),
|
| + isolate()->heap()->AllocateArgumentsObject(*callee, length), JSObject);
|
| }
|
|
|
|
|
| Handle<JSFunction> Factory::CreateApiFunction(
|
| Handle<FunctionTemplateInfo> obj, ApiInstanceType instance_type) {
|
| - Handle<Code> code = Handle<Code>(Builtins::builtin(Builtins::HandleApiCall));
|
| + Handle<Code> code = Handle<Code>(isolate()->builtins()->builtin(
|
| + Builtins::HandleApiCall));
|
| Handle<Code> construct_stub =
|
| - Handle<Code>(Builtins::builtin(Builtins::JSConstructStubApi));
|
| + Handle<Code>(isolate()->builtins()->builtin(
|
| + Builtins::JSConstructStubApi));
|
|
|
| int internal_field_count = 0;
|
| if (!obj->instance_template()->IsUndefined()) {
|
| @@ -924,11 +1023,11 @@
|
| ASSERT(type != INVALID_TYPE);
|
|
|
| Handle<JSFunction> result =
|
| - Factory::NewFunction(Factory::empty_symbol(),
|
| - type,
|
| - instance_size,
|
| - code,
|
| - true);
|
| + NewFunction(Factory::empty_symbol(),
|
| + type,
|
| + instance_size,
|
| + code,
|
| + true);
|
| // Set class name.
|
| Handle<Object> class_name = Handle<Object>(obj->class_name());
|
| if (class_name->IsString()) {
|
| @@ -976,7 +1075,7 @@
|
| while (true) {
|
| Handle<Object> props = Handle<Object>(obj->property_accessors());
|
| if (!props->IsUndefined()) {
|
| - array = Factory::CopyAppendCallbackDescriptors(array, props);
|
| + array = CopyAppendCallbackDescriptors(array, props);
|
| }
|
| Handle<Object> parent = Handle<Object>(obj->parent_template());
|
| if (parent->IsUndefined()) break;
|
| @@ -992,7 +1091,8 @@
|
|
|
|
|
| Handle<MapCache> Factory::NewMapCache(int at_least_space_for) {
|
| - CALL_HEAP_FUNCTION(MapCache::Allocate(at_least_space_for), MapCache);
|
| + CALL_HEAP_FUNCTION(isolate(),
|
| + MapCache::Allocate(at_least_space_for), MapCache);
|
| }
|
|
|
|
|
| @@ -1012,7 +1112,8 @@
|
| Handle<MapCache> Factory::AddToMapCache(Handle<Context> context,
|
| Handle<FixedArray> keys,
|
| Handle<Map> map) {
|
| - CALL_HEAP_FUNCTION(UpdateMapCacheWith(*context, *keys, *map), MapCache);
|
| + CALL_HEAP_FUNCTION(isolate(),
|
| + UpdateMapCacheWith(*context, *keys, *map), MapCache);
|
| }
|
|
|
|
|
| @@ -1061,8 +1162,8 @@
|
| store->set(JSRegExp::kTagIndex, Smi::FromInt(type));
|
| store->set(JSRegExp::kSourceIndex, *source);
|
| store->set(JSRegExp::kFlagsIndex, Smi::FromInt(flags.value()));
|
| - store->set(JSRegExp::kIrregexpASCIICodeIndex, Heap::the_hole_value());
|
| - store->set(JSRegExp::kIrregexpUC16CodeIndex, Heap::the_hole_value());
|
| + store->set(JSRegExp::kIrregexpASCIICodeIndex, HEAP->the_hole_value());
|
| + store->set(JSRegExp::kIrregexpUC16CodeIndex, HEAP->the_hole_value());
|
| store->set(JSRegExp::kIrregexpMaxRegisterCountIndex, Smi::FromInt(0));
|
| store->set(JSRegExp::kIrregexpCaptureCountIndex,
|
| Smi::FromInt(capture_count));
|
|
|