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

Side by Side Diff: src/bootstrapper.cc

Issue 426233002: Land the Fan (disabled) (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 6 years, 4 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
OLDNEW
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/code-stubs.h" 8 #include "src/code-stubs.h"
9 #include "src/extensions/externalize-string-extension.h" 9 #include "src/extensions/externalize-string-extension.h"
10 #include "src/extensions/free-buffer-extension.h" 10 #include "src/extensions/free-buffer-extension.h"
(...skipping 1516 matching lines...) Expand 10 before | Expand all | Expand 10 after
1527 Handle<Object> receiver = 1527 Handle<Object> receiver =
1528 Handle<Object>(use_runtime_context 1528 Handle<Object>(use_runtime_context
1529 ? top_context->builtins() 1529 ? top_context->builtins()
1530 : top_context->global_object(), 1530 : top_context->global_object(),
1531 isolate); 1531 isolate);
1532 return !Execution::Call( 1532 return !Execution::Call(
1533 isolate, fun, receiver, 0, NULL).is_null(); 1533 isolate, fun, receiver, 0, NULL).is_null();
1534 } 1534 }
1535 1535
1536 1536
1537 static Handle<JSObject> ResolveBuiltinIdHolder(
1538 Handle<Context> native_context,
1539 const char* holder_expr) {
1540 Isolate* isolate = native_context->GetIsolate();
1541 Factory* factory = isolate->factory();
1542 Handle<GlobalObject> global(native_context->global_object());
1543 const char* period_pos = strchr(holder_expr, '.');
1544 if (period_pos == NULL) {
1545 return Handle<JSObject>::cast(Object::GetPropertyOrElement(
1546 global, factory->InternalizeUtf8String(holder_expr)).ToHandleChecked());
1547 }
1548 const char* inner = period_pos + 1;
1549 ASSERT_EQ(NULL, strchr(inner, '.'));
1550 Vector<const char> property(holder_expr,
1551 static_cast<int>(period_pos - holder_expr));
1552 Handle<String> property_string = factory->InternalizeUtf8String(property);
1553 ASSERT(!property_string.is_null());
1554 Handle<JSObject> object = Handle<JSObject>::cast(
1555 Object::GetProperty(global, property_string).ToHandleChecked());
1556 if (strcmp("prototype", inner) == 0) {
1557 Handle<JSFunction> function = Handle<JSFunction>::cast(object);
1558 return Handle<JSObject>(JSObject::cast(function->prototype()));
1559 }
1560 Handle<String> inner_string = factory->InternalizeUtf8String(inner);
1561 ASSERT(!inner_string.is_null());
1562 Handle<Object> value =
1563 Object::GetProperty(object, inner_string).ToHandleChecked();
1564 return Handle<JSObject>::cast(value);
1565 }
1566
1567
1537 #define INSTALL_NATIVE(Type, name, var) \ 1568 #define INSTALL_NATIVE(Type, name, var) \
1538 Handle<String> var##_name = \ 1569 Handle<String> var##_name = \
1539 factory()->InternalizeOneByteString(STATIC_ASCII_VECTOR(name)); \ 1570 factory()->InternalizeOneByteString(STATIC_ASCII_VECTOR(name)); \
1540 Handle<Object> var##_native = Object::GetProperty( \ 1571 Handle<Object> var##_native = Object::GetProperty( \
1541 handle(native_context()->builtins()), var##_name).ToHandleChecked(); \ 1572 handle(native_context()->builtins()), var##_name).ToHandleChecked(); \
1542 native_context()->set_##var(Type::cast(*var##_native)); 1573 native_context()->set_##var(Type::cast(*var##_native));
1543 1574
1575 #define INSTALL_NATIVE_MATH(name) \
1576 { \
1577 Handle<Object> fun = \
1578 ResolveBuiltinIdHolder(native_context(), "Math." #name); \
1579 native_context()->set_math_##name##_fun(JSFunction::cast(*fun)); \
1580 }
1544 1581
1545 void Genesis::InstallNativeFunctions() { 1582 void Genesis::InstallNativeFunctions() {
1546 HandleScope scope(isolate()); 1583 HandleScope scope(isolate());
1547 INSTALL_NATIVE(JSFunction, "CreateDate", create_date_fun); 1584 INSTALL_NATIVE(JSFunction, "CreateDate", create_date_fun);
1548 1585
1549 INSTALL_NATIVE(JSFunction, "ToNumber", to_number_fun); 1586 INSTALL_NATIVE(JSFunction, "ToNumber", to_number_fun);
1550 INSTALL_NATIVE(JSFunction, "ToString", to_string_fun); 1587 INSTALL_NATIVE(JSFunction, "ToString", to_string_fun);
1551 INSTALL_NATIVE(JSFunction, "ToDetailString", to_detail_string_fun); 1588 INSTALL_NATIVE(JSFunction, "ToDetailString", to_detail_string_fun);
1552 INSTALL_NATIVE(JSFunction, "ToObject", to_object_fun); 1589 INSTALL_NATIVE(JSFunction, "ToObject", to_object_fun);
1553 INSTALL_NATIVE(JSFunction, "ToInteger", to_integer_fun); 1590 INSTALL_NATIVE(JSFunction, "ToInteger", to_integer_fun);
(...skipping 22 matching lines...) Expand all
1576 INSTALL_NATIVE(JSFunction, "BeginPerformSplice", 1613 INSTALL_NATIVE(JSFunction, "BeginPerformSplice",
1577 observers_begin_perform_splice); 1614 observers_begin_perform_splice);
1578 INSTALL_NATIVE(JSFunction, "EndPerformSplice", 1615 INSTALL_NATIVE(JSFunction, "EndPerformSplice",
1579 observers_end_perform_splice); 1616 observers_end_perform_splice);
1580 INSTALL_NATIVE(JSFunction, "NativeObjectObserve", 1617 INSTALL_NATIVE(JSFunction, "NativeObjectObserve",
1581 native_object_observe); 1618 native_object_observe);
1582 INSTALL_NATIVE(JSFunction, "NativeObjectGetNotifier", 1619 INSTALL_NATIVE(JSFunction, "NativeObjectGetNotifier",
1583 native_object_get_notifier); 1620 native_object_get_notifier);
1584 INSTALL_NATIVE(JSFunction, "NativeObjectNotifierPerformChange", 1621 INSTALL_NATIVE(JSFunction, "NativeObjectNotifierPerformChange",
1585 native_object_notifier_perform_change); 1622 native_object_notifier_perform_change);
1623
1624 INSTALL_NATIVE_MATH(abs)
1625 INSTALL_NATIVE_MATH(acos)
1626 INSTALL_NATIVE_MATH(asin)
1627 INSTALL_NATIVE_MATH(atan)
1628 INSTALL_NATIVE_MATH(atan2)
1629 INSTALL_NATIVE_MATH(ceil)
1630 INSTALL_NATIVE_MATH(cos)
1631 INSTALL_NATIVE_MATH(exp)
1632 INSTALL_NATIVE_MATH(floor)
1633 INSTALL_NATIVE_MATH(imul)
1634 INSTALL_NATIVE_MATH(log)
1635 INSTALL_NATIVE_MATH(max)
1636 INSTALL_NATIVE_MATH(min)
1637 INSTALL_NATIVE_MATH(pow)
1638 INSTALL_NATIVE_MATH(random)
1639 INSTALL_NATIVE_MATH(round)
1640 INSTALL_NATIVE_MATH(sin)
1641 INSTALL_NATIVE_MATH(sqrt)
1642 INSTALL_NATIVE_MATH(tan)
1586 } 1643 }
1587 1644
1588 1645
1589 void Genesis::InstallExperimentalNativeFunctions() { 1646 void Genesis::InstallExperimentalNativeFunctions() {
1590 if (FLAG_harmony_proxies) { 1647 if (FLAG_harmony_proxies) {
1591 INSTALL_NATIVE(JSFunction, "DerivedHasTrap", derived_has_trap); 1648 INSTALL_NATIVE(JSFunction, "DerivedHasTrap", derived_has_trap);
1592 INSTALL_NATIVE(JSFunction, "DerivedGetTrap", derived_get_trap); 1649 INSTALL_NATIVE(JSFunction, "DerivedGetTrap", derived_get_trap);
1593 INSTALL_NATIVE(JSFunction, "DerivedSetTrap", derived_set_trap); 1650 INSTALL_NATIVE(JSFunction, "DerivedSetTrap", derived_set_trap);
1594 INSTALL_NATIVE(JSFunction, "ProxyEnumerate", proxy_enumerate); 1651 INSTALL_NATIVE(JSFunction, "ProxyEnumerate", proxy_enumerate);
1595 } 1652 }
(...skipping 426 matching lines...) Expand 10 before | Expand all | Expand 10 after
2022 INSTALL_EXPERIMENTAL_NATIVE(i, iteration, "string-iterator.js") 2079 INSTALL_EXPERIMENTAL_NATIVE(i, iteration, "string-iterator.js")
2023 INSTALL_EXPERIMENTAL_NATIVE(i, strings, "harmony-string.js") 2080 INSTALL_EXPERIMENTAL_NATIVE(i, strings, "harmony-string.js")
2024 INSTALL_EXPERIMENTAL_NATIVE(i, arrays, "harmony-array.js") 2081 INSTALL_EXPERIMENTAL_NATIVE(i, arrays, "harmony-array.js")
2025 } 2082 }
2026 2083
2027 InstallExperimentalNativeFunctions(); 2084 InstallExperimentalNativeFunctions();
2028 return true; 2085 return true;
2029 } 2086 }
2030 2087
2031 2088
2032 static Handle<JSObject> ResolveBuiltinIdHolder(
2033 Handle<Context> native_context,
2034 const char* holder_expr) {
2035 Isolate* isolate = native_context->GetIsolate();
2036 Factory* factory = isolate->factory();
2037 Handle<GlobalObject> global(native_context->global_object());
2038 const char* period_pos = strchr(holder_expr, '.');
2039 if (period_pos == NULL) {
2040 return Handle<JSObject>::cast(Object::GetPropertyOrElement(
2041 global, factory->InternalizeUtf8String(holder_expr)).ToHandleChecked());
2042 }
2043 ASSERT_EQ(".prototype", period_pos);
2044 Vector<const char> property(holder_expr,
2045 static_cast<int>(period_pos - holder_expr));
2046 Handle<String> property_string = factory->InternalizeUtf8String(property);
2047 ASSERT(!property_string.is_null());
2048 Handle<JSFunction> function = Handle<JSFunction>::cast(
2049 Object::GetProperty(global, property_string).ToHandleChecked());
2050 return Handle<JSObject>(JSObject::cast(function->prototype()));
2051 }
2052
2053
2054 static void InstallBuiltinFunctionId(Handle<JSObject> holder, 2089 static void InstallBuiltinFunctionId(Handle<JSObject> holder,
2055 const char* function_name, 2090 const char* function_name,
2056 BuiltinFunctionId id) { 2091 BuiltinFunctionId id) {
2057 Isolate* isolate = holder->GetIsolate(); 2092 Isolate* isolate = holder->GetIsolate();
2058 Handle<Object> function_object = 2093 Handle<Object> function_object =
2059 Object::GetProperty(isolate, holder, function_name).ToHandleChecked(); 2094 Object::GetProperty(isolate, holder, function_name).ToHandleChecked();
2060 Handle<JSFunction> function = Handle<JSFunction>::cast(function_object); 2095 Handle<JSFunction> function = Handle<JSFunction>::cast(function_object);
2061 function->shared()->set_function_data(Smi::FromInt(id)); 2096 function->shared()->set_function_data(Smi::FromInt(id));
2062 } 2097 }
2063 2098
(...skipping 265 matching lines...) Expand 10 before | Expand all | Expand 10 after
2329 2364
2330 2365
2331 bool Genesis::InstallJSBuiltins(Handle<JSBuiltinsObject> builtins) { 2366 bool Genesis::InstallJSBuiltins(Handle<JSBuiltinsObject> builtins) {
2332 HandleScope scope(isolate()); 2367 HandleScope scope(isolate());
2333 for (int i = 0; i < Builtins::NumberOfJavaScriptBuiltins(); i++) { 2368 for (int i = 0; i < Builtins::NumberOfJavaScriptBuiltins(); i++) {
2334 Builtins::JavaScript id = static_cast<Builtins::JavaScript>(i); 2369 Builtins::JavaScript id = static_cast<Builtins::JavaScript>(i);
2335 Handle<Object> function_object = Object::GetProperty( 2370 Handle<Object> function_object = Object::GetProperty(
2336 isolate(), builtins, Builtins::GetName(id)).ToHandleChecked(); 2371 isolate(), builtins, Builtins::GetName(id)).ToHandleChecked();
2337 Handle<JSFunction> function = Handle<JSFunction>::cast(function_object); 2372 Handle<JSFunction> function = Handle<JSFunction>::cast(function_object);
2338 builtins->set_javascript_builtin(id, *function); 2373 builtins->set_javascript_builtin(id, *function);
2374 // TODO(mstarzinger): This is just a temporary hack to make TurboFan work,
2375 // the correct solution is to restore the context register after invoking
2376 // builtins from full-codegen.
2377 function->shared()->set_optimization_disabled(true);
2339 if (!Compiler::EnsureCompiled(function, CLEAR_EXCEPTION)) { 2378 if (!Compiler::EnsureCompiled(function, CLEAR_EXCEPTION)) {
2340 return false; 2379 return false;
2341 } 2380 }
2342 builtins->set_javascript_builtin_code(id, function->shared()->code()); 2381 builtins->set_javascript_builtin_code(id, function->shared()->code());
2343 } 2382 }
2344 return true; 2383 return true;
2345 } 2384 }
2346 2385
2347 2386
2348 bool Genesis::ConfigureGlobalObjects( 2387 bool Genesis::ConfigureGlobalObjects(
(...skipping 344 matching lines...) Expand 10 before | Expand all | Expand 10 after
2693 return from + sizeof(NestingCounterType); 2732 return from + sizeof(NestingCounterType);
2694 } 2733 }
2695 2734
2696 2735
2697 // Called when the top-level V8 mutex is destroyed. 2736 // Called when the top-level V8 mutex is destroyed.
2698 void Bootstrapper::FreeThreadResources() { 2737 void Bootstrapper::FreeThreadResources() {
2699 ASSERT(!IsActive()); 2738 ASSERT(!IsActive());
2700 } 2739 }
2701 2740
2702 } } // namespace v8::internal 2741 } } // namespace v8::internal
OLDNEW
« no previous file with comments | « src/base/logging.h ('k') | src/checks.h » ('j') | src/lithium-inl.h » ('J')

Powered by Google App Engine
This is Rietveld 408576698