| OLD | NEW |
| 1 // Copyright 2006-2008 the V8 project authors. All rights reserved. | 1 // Copyright 2006-2008 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 286 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 297 Handle<Code> call_code = Handle<Code>( | 297 Handle<Code> call_code = Handle<Code>( |
| 298 Isolate::Current()->builtins()->builtin(call)); | 298 Isolate::Current()->builtins()->builtin(call)); |
| 299 Handle<JSFunction> function = prototype.is_null() ? | 299 Handle<JSFunction> function = prototype.is_null() ? |
| 300 FACTORY->NewFunctionWithoutPrototype(symbol, call_code) : | 300 FACTORY->NewFunctionWithoutPrototype(symbol, call_code) : |
| 301 FACTORY->NewFunctionWithPrototype(symbol, | 301 FACTORY->NewFunctionWithPrototype(symbol, |
| 302 type, | 302 type, |
| 303 instance_size, | 303 instance_size, |
| 304 prototype, | 304 prototype, |
| 305 call_code, | 305 call_code, |
| 306 is_ecma_native); | 306 is_ecma_native); |
| 307 SetProperty(target, symbol, function, DONT_ENUM); | 307 SetLocalPropertyNoThrow(target, symbol, function, DONT_ENUM); |
| 308 if (is_ecma_native) { | 308 if (is_ecma_native) { |
| 309 function->shared()->set_instance_class_name(*symbol); | 309 function->shared()->set_instance_class_name(*symbol); |
| 310 } | 310 } |
| 311 return function; | 311 return function; |
| 312 } | 312 } |
| 313 | 313 |
| 314 | 314 |
| 315 Handle<DescriptorArray> Genesis::ComputeFunctionInstanceDescriptor( | 315 Handle<DescriptorArray> Genesis::ComputeFunctionInstanceDescriptor( |
| 316 PrototypePropertyMode prototypeMode) { | 316 PrototypePropertyMode prototypeMode) { |
| 317 Handle<DescriptorArray> result = FACTORY->empty_descriptor_array(); | 317 Handle<DescriptorArray> result = FACTORY->empty_descriptor_array(); |
| (...skipping 214 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 532 Handle<Code> code = Handle<Code>(Isolate::Current()->builtins()->builtin( | 532 Handle<Code> code = Handle<Code>(Isolate::Current()->builtins()->builtin( |
| 533 Builtins::Illegal)); | 533 Builtins::Illegal)); |
| 534 js_global_function = | 534 js_global_function = |
| 535 FACTORY->NewFunction(name, JS_GLOBAL_OBJECT_TYPE, | 535 FACTORY->NewFunction(name, JS_GLOBAL_OBJECT_TYPE, |
| 536 JSGlobalObject::kSize, code, true); | 536 JSGlobalObject::kSize, code, true); |
| 537 // Change the constructor property of the prototype of the | 537 // Change the constructor property of the prototype of the |
| 538 // hidden global function to refer to the Object function. | 538 // hidden global function to refer to the Object function. |
| 539 Handle<JSObject> prototype = | 539 Handle<JSObject> prototype = |
| 540 Handle<JSObject>( | 540 Handle<JSObject>( |
| 541 JSObject::cast(js_global_function->instance_prototype())); | 541 JSObject::cast(js_global_function->instance_prototype())); |
| 542 SetProperty(prototype, FACTORY->constructor_symbol(), | 542 SetLocalPropertyNoThrow( |
| 543 Isolate::Current()->object_function(), NONE); | 543 prototype, |
| 544 FACTORY->constructor_symbol(), |
| 545 Isolate::Current()->object_function(), |
| 546 NONE); |
| 544 } else { | 547 } else { |
| 545 Handle<FunctionTemplateInfo> js_global_constructor( | 548 Handle<FunctionTemplateInfo> js_global_constructor( |
| 546 FunctionTemplateInfo::cast(js_global_template->constructor())); | 549 FunctionTemplateInfo::cast(js_global_template->constructor())); |
| 547 js_global_function = | 550 js_global_function = |
| 548 FACTORY->CreateApiFunction(js_global_constructor, | 551 FACTORY->CreateApiFunction(js_global_constructor, |
| 549 FACTORY->InnerGlobalObject); | 552 FACTORY->InnerGlobalObject); |
| 550 } | 553 } |
| 551 | 554 |
| 552 js_global_function->initial_map()->set_is_hidden_prototype(); | 555 js_global_function->initial_map()->set_is_hidden_prototype(); |
| 553 Handle<GlobalObject> inner_global = | 556 Handle<GlobalObject> inner_global = |
| (...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 636 // Set extension and global object. | 639 // Set extension and global object. |
| 637 global_context()->set_extension(*inner_global); | 640 global_context()->set_extension(*inner_global); |
| 638 global_context()->set_global(*inner_global); | 641 global_context()->set_global(*inner_global); |
| 639 // Security setup: Set the security token of the global object to | 642 // Security setup: Set the security token of the global object to |
| 640 // its the inner global. This makes the security check between two | 643 // its the inner global. This makes the security check between two |
| 641 // different contexts fail by default even in case of global | 644 // different contexts fail by default even in case of global |
| 642 // object reinitialization. | 645 // object reinitialization. |
| 643 global_context()->set_security_token(*inner_global); | 646 global_context()->set_security_token(*inner_global); |
| 644 | 647 |
| 645 Handle<String> object_name = Handle<String>(HEAP->Object_symbol()); | 648 Handle<String> object_name = Handle<String>(HEAP->Object_symbol()); |
| 646 SetProperty(inner_global, object_name, | 649 SetLocalPropertyNoThrow(inner_global, object_name, |
| 647 Isolate::Current()->object_function(), DONT_ENUM); | 650 Isolate::Current()->object_function(), DONT_ENUM); |
| 648 | 651 |
| 649 Handle<JSObject> global = Handle<JSObject>(global_context()->global()); | 652 Handle<JSObject> global = Handle<JSObject>(global_context()->global()); |
| 650 | 653 |
| 651 // Install global Function object | 654 // Install global Function object |
| 652 InstallFunction(global, "Function", JS_FUNCTION_TYPE, JSFunction::kSize, | 655 InstallFunction(global, "Function", JS_FUNCTION_TYPE, JSFunction::kSize, |
| 653 empty_function, Builtins::Illegal, true); // ECMA native. | 656 empty_function, Builtins::Illegal, true); // ECMA native. |
| 654 | 657 |
| 655 { // --- A r r a y --- | 658 { // --- A r r a y --- |
| 656 Handle<JSFunction> array_function = | 659 Handle<JSFunction> array_function = |
| 657 InstallFunction(global, "Array", JS_ARRAY_TYPE, JSArray::kSize, | 660 InstallFunction(global, "Array", JS_ARRAY_TYPE, JSArray::kSize, |
| (...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 805 | 808 |
| 806 { // -- J S O N | 809 { // -- J S O N |
| 807 Handle<String> name = FACTORY->NewStringFromAscii(CStrVector("JSON")); | 810 Handle<String> name = FACTORY->NewStringFromAscii(CStrVector("JSON")); |
| 808 Handle<JSFunction> cons = FACTORY->NewFunction( | 811 Handle<JSFunction> cons = FACTORY->NewFunction( |
| 809 name, | 812 name, |
| 810 FACTORY->the_hole_value()); | 813 FACTORY->the_hole_value()); |
| 811 cons->SetInstancePrototype(global_context()->initial_object_prototype()); | 814 cons->SetInstancePrototype(global_context()->initial_object_prototype()); |
| 812 cons->SetInstanceClassName(*name); | 815 cons->SetInstanceClassName(*name); |
| 813 Handle<JSObject> json_object = FACTORY->NewJSObject(cons, TENURED); | 816 Handle<JSObject> json_object = FACTORY->NewJSObject(cons, TENURED); |
| 814 ASSERT(json_object->IsJSObject()); | 817 ASSERT(json_object->IsJSObject()); |
| 815 SetProperty(global, name, json_object, DONT_ENUM); | 818 SetLocalPropertyNoThrow(global, name, json_object, DONT_ENUM); |
| 816 global_context()->set_json_object(*json_object); | 819 global_context()->set_json_object(*json_object); |
| 817 } | 820 } |
| 818 | 821 |
| 819 { // --- arguments_boilerplate_ | 822 { // --- arguments_boilerplate_ |
| 820 // Make sure we can recognize argument objects at runtime. | 823 // Make sure we can recognize argument objects at runtime. |
| 821 // This is done by introducing an anonymous function with | 824 // This is done by introducing an anonymous function with |
| 822 // class_name equals 'Arguments'. | 825 // class_name equals 'Arguments'. |
| 823 Handle<String> symbol = FACTORY->LookupAsciiSymbol("Arguments"); | 826 Handle<String> symbol = FACTORY->LookupAsciiSymbol("Arguments"); |
| 824 Handle<Code> code = Handle<Code>( | 827 Handle<Code> code = Handle<Code>( |
| 825 Isolate::Current()->builtins()->builtin(Builtins::Illegal)); | 828 Isolate::Current()->builtins()->builtin(Builtins::Illegal)); |
| 826 Handle<JSObject> prototype = | 829 Handle<JSObject> prototype = |
| 827 Handle<JSObject>( | 830 Handle<JSObject>( |
| 828 JSObject::cast(global_context()->object_function()->prototype())); | 831 JSObject::cast(global_context()->object_function()->prototype())); |
| 829 | 832 |
| 830 Handle<JSFunction> function = | 833 Handle<JSFunction> function = |
| 831 FACTORY->NewFunctionWithPrototype(symbol, | 834 FACTORY->NewFunctionWithPrototype(symbol, |
| 832 JS_OBJECT_TYPE, | 835 JS_OBJECT_TYPE, |
| 833 JSObject::kHeaderSize, | 836 JSObject::kHeaderSize, |
| 834 prototype, | 837 prototype, |
| 835 code, | 838 code, |
| 836 false); | 839 false); |
| 837 ASSERT(!function->has_initial_map()); | 840 ASSERT(!function->has_initial_map()); |
| 838 function->shared()->set_instance_class_name(*symbol); | 841 function->shared()->set_instance_class_name(*symbol); |
| 839 function->shared()->set_expected_nof_properties(2); | 842 function->shared()->set_expected_nof_properties(2); |
| 840 Handle<JSObject> result = FACTORY->NewJSObject(function); | 843 Handle<JSObject> result = FACTORY->NewJSObject(function); |
| 841 | 844 |
| 842 global_context()->set_arguments_boilerplate(*result); | 845 global_context()->set_arguments_boilerplate(*result); |
| 843 // Note: callee must be added as the first property and | 846 // Note: callee must be added as the first property and |
| 844 // length must be added as the second property. | 847 // length must be added as the second property. |
| 845 SetProperty(result, FACTORY->callee_symbol(), | 848 SetLocalPropertyNoThrow(result, FACTORY->callee_symbol(), |
| 846 FACTORY->undefined_value(), | 849 FACTORY->undefined_value(), |
| 847 DONT_ENUM); | 850 DONT_ENUM); |
| 848 SetProperty(result, FACTORY->length_symbol(), | 851 SetLocalPropertyNoThrow(result, FACTORY->length_symbol(), |
| 849 FACTORY->undefined_value(), | 852 FACTORY->undefined_value(), |
| 850 DONT_ENUM); | 853 DONT_ENUM); |
| 851 | 854 |
| 852 #ifdef DEBUG | 855 #ifdef DEBUG |
| 853 LookupResult lookup; | 856 LookupResult lookup; |
| 854 result->LocalLookup(HEAP->callee_symbol(), &lookup); | 857 result->LocalLookup(HEAP->callee_symbol(), &lookup); |
| 855 ASSERT(lookup.IsProperty() && (lookup.type() == FIELD)); | 858 ASSERT(lookup.IsProperty() && (lookup.type() == FIELD)); |
| 856 ASSERT(lookup.GetFieldIndex() == Heap::arguments_callee_index); | 859 ASSERT(lookup.GetFieldIndex() == Heap::arguments_callee_index); |
| 857 | 860 |
| 858 result->LocalLookup(HEAP->length_symbol(), &lookup); | 861 result->LocalLookup(HEAP->length_symbol(), &lookup); |
| 859 ASSERT(lookup.IsProperty() && (lookup.type() == FIELD)); | 862 ASSERT(lookup.IsProperty() && (lookup.type() == FIELD)); |
| 860 ASSERT(lookup.GetFieldIndex() == Heap::arguments_length_index); | 863 ASSERT(lookup.GetFieldIndex() == Heap::arguments_length_index); |
| (...skipping 186 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1047 builtins->set_global_context(*global_context()); | 1050 builtins->set_global_context(*global_context()); |
| 1048 builtins->set_global_receiver(*builtins); | 1051 builtins->set_global_receiver(*builtins); |
| 1049 | 1052 |
| 1050 // Setup the 'global' properties of the builtins object. The | 1053 // Setup the 'global' properties of the builtins object. The |
| 1051 // 'global' property that refers to the global object is the only | 1054 // 'global' property that refers to the global object is the only |
| 1052 // way to get from code running in the builtins context to the | 1055 // way to get from code running in the builtins context to the |
| 1053 // global object. | 1056 // global object. |
| 1054 static const PropertyAttributes attributes = | 1057 static const PropertyAttributes attributes = |
| 1055 static_cast<PropertyAttributes>(READ_ONLY | DONT_DELETE); | 1058 static_cast<PropertyAttributes>(READ_ONLY | DONT_DELETE); |
| 1056 Handle<String> global_symbol = FACTORY->LookupAsciiSymbol("global"); | 1059 Handle<String> global_symbol = FACTORY->LookupAsciiSymbol("global"); |
| 1057 SetProperty(builtins, | 1060 Handle<Object> global_obj(global_context()->global()); |
| 1058 global_symbol, | 1061 SetLocalPropertyNoThrow(builtins, global_symbol, global_obj, attributes); |
| 1059 Handle<Object>(global_context()->global()), | |
| 1060 attributes); | |
| 1061 | 1062 |
| 1062 // Setup the reference from the global object to the builtins object. | 1063 // Setup the reference from the global object to the builtins object. |
| 1063 JSGlobalObject::cast(global_context()->global())->set_builtins(*builtins); | 1064 JSGlobalObject::cast(global_context()->global())->set_builtins(*builtins); |
| 1064 | 1065 |
| 1065 // Create a bridge function that has context in the global context. | 1066 // Create a bridge function that has context in the global context. |
| 1066 Handle<JSFunction> bridge = | 1067 Handle<JSFunction> bridge = |
| 1067 FACTORY->NewFunction(FACTORY->empty_symbol(), FACTORY->undefined_value()); | 1068 FACTORY->NewFunction(FACTORY->empty_symbol(), FACTORY->undefined_value()); |
| 1068 ASSERT(bridge->context() == *Isolate::Current()->global_context()); | 1069 ASSERT(bridge->context() == *Isolate::Current()->global_context()); |
| 1069 | 1070 |
| 1070 // Allocate the builtins context. | 1071 // Allocate the builtins context. |
| (...skipping 371 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1442 | 1443 |
| 1443 | 1444 |
| 1444 void Genesis::InstallSpecialObjects(Handle<Context> global_context) { | 1445 void Genesis::InstallSpecialObjects(Handle<Context> global_context) { |
| 1445 HandleScope scope; | 1446 HandleScope scope; |
| 1446 Handle<JSGlobalObject> js_global( | 1447 Handle<JSGlobalObject> js_global( |
| 1447 JSGlobalObject::cast(global_context->global())); | 1448 JSGlobalObject::cast(global_context->global())); |
| 1448 // Expose the natives in global if a name for it is specified. | 1449 // Expose the natives in global if a name for it is specified. |
| 1449 if (FLAG_expose_natives_as != NULL && strlen(FLAG_expose_natives_as) != 0) { | 1450 if (FLAG_expose_natives_as != NULL && strlen(FLAG_expose_natives_as) != 0) { |
| 1450 Handle<String> natives_string = | 1451 Handle<String> natives_string = |
| 1451 FACTORY->LookupAsciiSymbol(FLAG_expose_natives_as); | 1452 FACTORY->LookupAsciiSymbol(FLAG_expose_natives_as); |
| 1452 SetProperty(js_global, natives_string, | 1453 SetLocalPropertyNoThrow(js_global, natives_string, |
| 1453 Handle<JSObject>(js_global->builtins()), DONT_ENUM); | 1454 Handle<JSObject>(js_global->builtins()), DONT_ENUM); |
| 1454 } | 1455 } |
| 1455 | 1456 |
| 1456 Handle<Object> Error = GetProperty(js_global, "Error"); | 1457 Handle<Object> Error = GetProperty(js_global, "Error"); |
| 1457 if (Error->IsJSObject()) { | 1458 if (Error->IsJSObject()) { |
| 1458 Handle<String> name = FACTORY->LookupAsciiSymbol("stackTraceLimit"); | 1459 Handle<String> name = FACTORY->LookupAsciiSymbol("stackTraceLimit"); |
| 1459 SetProperty(Handle<JSObject>::cast(Error), | 1460 SetLocalPropertyNoThrow(Handle<JSObject>::cast(Error), |
| 1460 name, | 1461 name, |
| 1461 Handle<Smi>(Smi::FromInt(FLAG_stack_trace_limit)), | 1462 Handle<Smi>(Smi::FromInt(FLAG_stack_trace_limit)), |
| 1462 NONE); | 1463 NONE); |
| 1463 } | 1464 } |
| 1464 | 1465 |
| 1465 #ifdef ENABLE_DEBUGGER_SUPPORT | 1466 #ifdef ENABLE_DEBUGGER_SUPPORT |
| 1466 // Expose the debug global object in global if a name for it is specified. | 1467 // Expose the debug global object in global if a name for it is specified. |
| 1467 if (FLAG_expose_debug_as != NULL && strlen(FLAG_expose_debug_as) != 0) { | 1468 if (FLAG_expose_debug_as != NULL && strlen(FLAG_expose_debug_as) != 0) { |
| 1468 Debug* debug = Isolate::Current()->debug(); | 1469 Debug* debug = Isolate::Current()->debug(); |
| 1469 // If loading fails we just bail out without installing the | 1470 // If loading fails we just bail out without installing the |
| 1470 // debugger but without tanking the whole context. | 1471 // debugger but without tanking the whole context. |
| 1471 if (!debug->Load()) return; | 1472 if (!debug->Load()) return; |
| 1472 // Set the security token for the debugger context to the same as | 1473 // Set the security token for the debugger context to the same as |
| 1473 // the shell global context to allow calling between these (otherwise | 1474 // the shell global context to allow calling between these (otherwise |
| 1474 // exposing debug global object doesn't make much sense). | 1475 // exposing debug global object doesn't make much sense). |
| 1475 debug->debug_context()->set_security_token( | 1476 debug->debug_context()->set_security_token( |
| 1476 global_context->security_token()); | 1477 global_context->security_token()); |
| 1477 | 1478 |
| 1478 Handle<String> debug_string = | 1479 Handle<String> debug_string = |
| 1479 FACTORY->LookupAsciiSymbol(FLAG_expose_debug_as); | 1480 FACTORY->LookupAsciiSymbol(FLAG_expose_debug_as); |
| 1480 SetProperty(js_global, debug_string, | 1481 Handle<Object> global_proxy(debug->debug_context()->global_proxy()); |
| 1481 Handle<Object>(debug->debug_context()->global_proxy()), DONT_ENUM); | 1482 SetLocalPropertyNoThrow(js_global, debug_string, global_proxy, DONT_ENUM); |
| 1482 } | 1483 } |
| 1483 #endif | 1484 #endif |
| 1484 } | 1485 } |
| 1485 | 1486 |
| 1486 | 1487 |
| 1487 bool Genesis::InstallExtensions(Handle<Context> global_context, | 1488 bool Genesis::InstallExtensions(Handle<Context> global_context, |
| 1488 v8::ExtensionConfiguration* extensions) { | 1489 v8::ExtensionConfiguration* extensions) { |
| 1489 // TODO(isolates): Extensions on multiple isolates may take a little more | 1490 // TODO(isolates): Extensions on multiple isolates may take a little more |
| 1490 // effort. (The external API reads 'ignore'-- does that mean | 1491 // effort. (The external API reads 'ignore'-- does that mean |
| 1491 // we can break the interface?) | 1492 // we can break the interface?) |
| (...skipping 156 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1648 Handle<DescriptorArray> descs = | 1649 Handle<DescriptorArray> descs = |
| 1649 Handle<DescriptorArray>(from->map()->instance_descriptors()); | 1650 Handle<DescriptorArray>(from->map()->instance_descriptors()); |
| 1650 for (int i = 0; i < descs->number_of_descriptors(); i++) { | 1651 for (int i = 0; i < descs->number_of_descriptors(); i++) { |
| 1651 PropertyDetails details = PropertyDetails(descs->GetDetails(i)); | 1652 PropertyDetails details = PropertyDetails(descs->GetDetails(i)); |
| 1652 switch (details.type()) { | 1653 switch (details.type()) { |
| 1653 case FIELD: { | 1654 case FIELD: { |
| 1654 HandleScope inner; | 1655 HandleScope inner; |
| 1655 Handle<String> key = Handle<String>(descs->GetKey(i)); | 1656 Handle<String> key = Handle<String>(descs->GetKey(i)); |
| 1656 int index = descs->GetFieldIndex(i); | 1657 int index = descs->GetFieldIndex(i); |
| 1657 Handle<Object> value = Handle<Object>(from->FastPropertyAt(index)); | 1658 Handle<Object> value = Handle<Object>(from->FastPropertyAt(index)); |
| 1658 SetProperty(to, key, value, details.attributes()); | 1659 SetLocalPropertyNoThrow(to, key, value, details.attributes()); |
| 1659 break; | 1660 break; |
| 1660 } | 1661 } |
| 1661 case CONSTANT_FUNCTION: { | 1662 case CONSTANT_FUNCTION: { |
| 1662 HandleScope inner; | 1663 HandleScope inner; |
| 1663 Handle<String> key = Handle<String>(descs->GetKey(i)); | 1664 Handle<String> key = Handle<String>(descs->GetKey(i)); |
| 1664 Handle<JSFunction> fun = | 1665 Handle<JSFunction> fun = |
| 1665 Handle<JSFunction>(descs->GetConstantFunction(i)); | 1666 Handle<JSFunction>(descs->GetConstantFunction(i)); |
| 1666 SetProperty(to, key, fun, details.attributes()); | 1667 SetLocalPropertyNoThrow(to, key, fun, details.attributes()); |
| 1667 break; | 1668 break; |
| 1668 } | 1669 } |
| 1669 case CALLBACKS: { | 1670 case CALLBACKS: { |
| 1670 LookupResult result; | 1671 LookupResult result; |
| 1671 to->LocalLookup(descs->GetKey(i), &result); | 1672 to->LocalLookup(descs->GetKey(i), &result); |
| 1672 // If the property is already there we skip it | 1673 // If the property is already there we skip it |
| 1673 if (result.IsProperty()) continue; | 1674 if (result.IsProperty()) continue; |
| 1674 HandleScope inner; | 1675 HandleScope inner; |
| 1675 ASSERT(!to->HasFastProperties()); | 1676 ASSERT(!to->HasFastProperties()); |
| 1676 // Add to dictionary. | 1677 // Add to dictionary. |
| (...skipping 29 matching lines...) Expand all Loading... |
| 1706 LookupResult result; | 1707 LookupResult result; |
| 1707 to->LocalLookup(String::cast(raw_key), &result); | 1708 to->LocalLookup(String::cast(raw_key), &result); |
| 1708 if (result.IsProperty()) continue; | 1709 if (result.IsProperty()) continue; |
| 1709 // Set the property. | 1710 // Set the property. |
| 1710 Handle<String> key = Handle<String>(String::cast(raw_key)); | 1711 Handle<String> key = Handle<String>(String::cast(raw_key)); |
| 1711 Handle<Object> value = Handle<Object>(properties->ValueAt(i)); | 1712 Handle<Object> value = Handle<Object>(properties->ValueAt(i)); |
| 1712 if (value->IsJSGlobalPropertyCell()) { | 1713 if (value->IsJSGlobalPropertyCell()) { |
| 1713 value = Handle<Object>(JSGlobalPropertyCell::cast(*value)->value()); | 1714 value = Handle<Object>(JSGlobalPropertyCell::cast(*value)->value()); |
| 1714 } | 1715 } |
| 1715 PropertyDetails details = properties->DetailsAt(i); | 1716 PropertyDetails details = properties->DetailsAt(i); |
| 1716 SetProperty(to, key, value, details.attributes()); | 1717 SetLocalPropertyNoThrow(to, key, value, details.attributes()); |
| 1717 } | 1718 } |
| 1718 } | 1719 } |
| 1719 } | 1720 } |
| 1720 } | 1721 } |
| 1721 | 1722 |
| 1722 | 1723 |
| 1723 void Genesis::TransferIndexedProperties(Handle<JSObject> from, | 1724 void Genesis::TransferIndexedProperties(Handle<JSObject> from, |
| 1724 Handle<JSObject> to) { | 1725 Handle<JSObject> to) { |
| 1725 // Cloning the elements array is sufficient. | 1726 // Cloning the elements array is sufficient. |
| 1726 Handle<FixedArray> from_elements = | 1727 Handle<FixedArray> from_elements = |
| (...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1840 return from + sizeof(NestingCounterType); | 1841 return from + sizeof(NestingCounterType); |
| 1841 } | 1842 } |
| 1842 | 1843 |
| 1843 | 1844 |
| 1844 // Called when the top-level V8 mutex is destroyed. | 1845 // Called when the top-level V8 mutex is destroyed. |
| 1845 void Bootstrapper::FreeThreadResources() { | 1846 void Bootstrapper::FreeThreadResources() { |
| 1846 ASSERT(!IsActive()); | 1847 ASSERT(!IsActive()); |
| 1847 } | 1848 } |
| 1848 | 1849 |
| 1849 } } // namespace v8::internal | 1850 } } // namespace v8::internal |
| OLD | NEW |