OLD | NEW |
1 // Copyright 2014 the V8 project authors. All rights reserved. | 1 // Copyright 2014 the V8 project authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "src/bootstrapper.h" | 5 #include "src/bootstrapper.h" |
6 | 6 |
7 #include "src/accessors.h" | 7 #include "src/accessors.h" |
8 #include "src/api-natives.h" | 8 #include "src/api-natives.h" |
9 #include "src/base/utils/random-number-generator.h" | 9 #include "src/base/utils/random-number-generator.h" |
10 #include "src/code-stubs.h" | 10 #include "src/code-stubs.h" |
(...skipping 1529 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1540 Handle<JSFunction> fun = | 1540 Handle<JSFunction> fun = |
1541 factory->NewFunctionFromSharedFunctionInfo(function_info, context); | 1541 factory->NewFunctionFromSharedFunctionInfo(function_info, context); |
1542 | 1542 |
1543 // Call function using either the runtime object or the global | 1543 // Call function using either the runtime object or the global |
1544 // object as the receiver. Provide no parameters. | 1544 // object as the receiver. Provide no parameters. |
1545 Handle<Object> receiver = | 1545 Handle<Object> receiver = |
1546 Handle<Object>(use_runtime_context | 1546 Handle<Object>(use_runtime_context |
1547 ? top_context->builtins() | 1547 ? top_context->builtins() |
1548 : top_context->global_object(), | 1548 : top_context->global_object(), |
1549 isolate); | 1549 isolate); |
1550 return !Execution::Call( | 1550 MaybeHandle<Object> result; |
1551 isolate, fun, receiver, 0, NULL).is_null(); | 1551 if (extension == NULL) { |
| 1552 // For non-extension scripts, run script to get the function wrapper. |
| 1553 Handle<Object> wrapper; |
| 1554 if (!Execution::Call(isolate, fun, receiver, 0, NULL).ToHandle(&wrapper)) { |
| 1555 return false; |
| 1556 } |
| 1557 // Then run the function wrapper. |
| 1558 Handle<Object> global_obj(top_context->global_object(), isolate); |
| 1559 Handle<Object> args[] = {global_obj}; |
| 1560 result = Execution::Call(isolate, Handle<JSFunction>::cast(wrapper), |
| 1561 receiver, arraysize(args), args); |
| 1562 } else { |
| 1563 result = Execution::Call(isolate, fun, receiver, 0, NULL); |
| 1564 } |
| 1565 return !result.is_null(); |
1552 } | 1566 } |
1553 | 1567 |
1554 | 1568 |
1555 static Handle<JSObject> ResolveBuiltinIdHolder(Handle<Context> native_context, | 1569 static Handle<JSObject> ResolveBuiltinIdHolder(Handle<Context> native_context, |
1556 const char* holder_expr) { | 1570 const char* holder_expr) { |
1557 Isolate* isolate = native_context->GetIsolate(); | 1571 Isolate* isolate = native_context->GetIsolate(); |
1558 Factory* factory = isolate->factory(); | 1572 Factory* factory = isolate->factory(); |
1559 Handle<GlobalObject> global(native_context->global_object()); | 1573 Handle<GlobalObject> global(native_context->global_object()); |
1560 const char* period_pos = strchr(holder_expr, '.'); | 1574 const char* period_pos = strchr(holder_expr, '.'); |
1561 if (period_pos == NULL) { | 1575 if (period_pos == NULL) { |
(...skipping 320 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1882 builtins_fun->initial_map()->set_prototype(heap()->null_value()); | 1896 builtins_fun->initial_map()->set_prototype(heap()->null_value()); |
1883 | 1897 |
1884 // Allocate the builtins object. | 1898 // Allocate the builtins object. |
1885 Handle<JSBuiltinsObject> builtins = | 1899 Handle<JSBuiltinsObject> builtins = |
1886 Handle<JSBuiltinsObject>::cast(factory()->NewGlobalObject(builtins_fun)); | 1900 Handle<JSBuiltinsObject>::cast(factory()->NewGlobalObject(builtins_fun)); |
1887 builtins->set_builtins(*builtins); | 1901 builtins->set_builtins(*builtins); |
1888 builtins->set_native_context(*native_context()); | 1902 builtins->set_native_context(*native_context()); |
1889 builtins->set_global_proxy(native_context()->global_proxy()); | 1903 builtins->set_global_proxy(native_context()->global_proxy()); |
1890 | 1904 |
1891 | 1905 |
1892 // Set up the 'global' properties of the builtins object. The | 1906 // Set up the 'builtin' property, which refers to the js builtins object. |
1893 // 'global' property that refers to the global object is the only | |
1894 // way to get from code running in the builtins context to the | |
1895 // global object. | |
1896 static const PropertyAttributes attributes = | 1907 static const PropertyAttributes attributes = |
1897 static_cast<PropertyAttributes>(READ_ONLY | DONT_DELETE); | 1908 static_cast<PropertyAttributes>(READ_ONLY | DONT_DELETE); |
1898 Handle<String> global_string = | |
1899 factory()->InternalizeOneByteString(STATIC_CHAR_VECTOR("global")); | |
1900 Handle<Object> global_obj(native_context()->global_object(), isolate()); | |
1901 JSObject::AddProperty(builtins, global_string, global_obj, attributes); | |
1902 Handle<String> builtins_string = | 1909 Handle<String> builtins_string = |
1903 factory()->InternalizeOneByteString(STATIC_CHAR_VECTOR("builtins")); | 1910 factory()->InternalizeOneByteString(STATIC_CHAR_VECTOR("builtins")); |
1904 JSObject::AddProperty(builtins, builtins_string, builtins, attributes); | 1911 JSObject::AddProperty(builtins, builtins_string, builtins, attributes); |
1905 | 1912 |
1906 // Set up the reference from the global object to the builtins object. | 1913 // Set up the reference from the global object to the builtins object. |
1907 JSGlobalObject::cast(native_context()->global_object())-> | 1914 JSGlobalObject::cast(native_context()->global_object())-> |
1908 set_builtins(*builtins); | 1915 set_builtins(*builtins); |
1909 | 1916 |
1910 // Create a bridge function that has context in the native context. | 1917 // Create a bridge function that has context in the native context. |
1911 Handle<JSFunction> bridge = factory()->NewFunction(factory()->empty_string()); | 1918 Handle<JSFunction> bridge = factory()->NewFunction(factory()->empty_string()); |
(...skipping 1100 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3012 return from + sizeof(NestingCounterType); | 3019 return from + sizeof(NestingCounterType); |
3013 } | 3020 } |
3014 | 3021 |
3015 | 3022 |
3016 // Called when the top-level V8 mutex is destroyed. | 3023 // Called when the top-level V8 mutex is destroyed. |
3017 void Bootstrapper::FreeThreadResources() { | 3024 void Bootstrapper::FreeThreadResources() { |
3018 DCHECK(!IsActive()); | 3025 DCHECK(!IsActive()); |
3019 } | 3026 } |
3020 | 3027 |
3021 } } // namespace v8::internal | 3028 } } // namespace v8::internal |
OLD | NEW |