Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(849)

Side by Side Diff: src/bootstrapper.cc

Issue 6614010: [Isolates] Merge 6700:7030 from bleeding_edge to isolates. (Closed) Base URL: http://v8.googlecode.com/svn/branches/experimental/isolates/
Patch Set: '' Created 9 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « src/bignum.cc ('k') | src/builtins.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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
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
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
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
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
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
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
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
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
OLDNEW
« no previous file with comments | « src/bignum.cc ('k') | src/builtins.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698