OLD | NEW |
1 // Copyright 2011 the V8 project authors. All rights reserved. | 1 // Copyright 2011 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 182 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
193 // templates passed through the API. The inner global from the snapshot is | 193 // templates passed through the API. The inner global from the snapshot is |
194 // detached from the other objects in the snapshot. | 194 // detached from the other objects in the snapshot. |
195 void HookUpInnerGlobal(Handle<GlobalObject> inner_global); | 195 void HookUpInnerGlobal(Handle<GlobalObject> inner_global); |
196 // New context initialization. Used for creating a context from scratch. | 196 // New context initialization. Used for creating a context from scratch. |
197 void InitializeGlobal(Handle<GlobalObject> inner_global, | 197 void InitializeGlobal(Handle<GlobalObject> inner_global, |
198 Handle<JSFunction> empty_function); | 198 Handle<JSFunction> empty_function); |
199 // Installs the contents of the native .js files on the global objects. | 199 // Installs the contents of the native .js files on the global objects. |
200 // Used for creating a context from scratch. | 200 // Used for creating a context from scratch. |
201 void InstallNativeFunctions(); | 201 void InstallNativeFunctions(); |
202 bool InstallNatives(); | 202 bool InstallNatives(); |
| 203 bool InstallExperimentalNatives(); |
203 void InstallBuiltinFunctionIds(); | 204 void InstallBuiltinFunctionIds(); |
204 void InstallJSFunctionResultCaches(); | 205 void InstallJSFunctionResultCaches(); |
205 void InitializeNormalizedMapCaches(); | 206 void InitializeNormalizedMapCaches(); |
206 // Used both for deserialized and from-scratch contexts to add the extensions | 207 // Used both for deserialized and from-scratch contexts to add the extensions |
207 // provided. | 208 // provided. |
208 static bool InstallExtensions(Handle<Context> global_context, | 209 static bool InstallExtensions(Handle<Context> global_context, |
209 v8::ExtensionConfiguration* extensions); | 210 v8::ExtensionConfiguration* extensions); |
210 static bool InstallExtension(const char* name); | 211 static bool InstallExtension(const char* name); |
211 static bool InstallExtension(v8::RegisteredExtension* current); | 212 static bool InstallExtension(v8::RegisteredExtension* current); |
212 static void InstallSpecialObjects(Handle<Context> global_context); | 213 static void InstallSpecialObjects(Handle<Context> global_context); |
(...skipping 26 matching lines...) Expand all Loading... |
239 Handle<JSFunction> empty_function, | 240 Handle<JSFunction> empty_function, |
240 Handle<FixedArray> arguments_callbacks, | 241 Handle<FixedArray> arguments_callbacks, |
241 Handle<FixedArray> caller_callbacks); | 242 Handle<FixedArray> caller_callbacks); |
242 | 243 |
243 Handle<DescriptorArray> ComputeStrictFunctionInstanceDescriptor( | 244 Handle<DescriptorArray> ComputeStrictFunctionInstanceDescriptor( |
244 PrototypePropertyMode propertyMode, | 245 PrototypePropertyMode propertyMode, |
245 Handle<FixedArray> arguments, | 246 Handle<FixedArray> arguments, |
246 Handle<FixedArray> caller); | 247 Handle<FixedArray> caller); |
247 | 248 |
248 static bool CompileBuiltin(Isolate* isolate, int index); | 249 static bool CompileBuiltin(Isolate* isolate, int index); |
| 250 static bool CompileExperimentalBuiltin(Isolate* isolate, int index); |
249 static bool CompileNative(Vector<const char> name, Handle<String> source); | 251 static bool CompileNative(Vector<const char> name, Handle<String> source); |
250 static bool CompileScriptCached(Vector<const char> name, | 252 static bool CompileScriptCached(Vector<const char> name, |
251 Handle<String> source, | 253 Handle<String> source, |
252 SourceCodeCache* cache, | 254 SourceCodeCache* cache, |
253 v8::Extension* extension, | 255 v8::Extension* extension, |
254 Handle<Context> top_context, | 256 Handle<Context> top_context, |
255 bool use_runtime_context); | 257 bool use_runtime_context); |
256 | 258 |
257 Handle<Context> result_; | 259 Handle<Context> result_; |
258 | 260 |
(...skipping 909 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1168 | 1170 |
1169 | 1171 |
1170 bool Genesis::CompileBuiltin(Isolate* isolate, int index) { | 1172 bool Genesis::CompileBuiltin(Isolate* isolate, int index) { |
1171 Vector<const char> name = Natives::GetScriptName(index); | 1173 Vector<const char> name = Natives::GetScriptName(index); |
1172 Handle<String> source_code = | 1174 Handle<String> source_code = |
1173 isolate->bootstrapper()->NativesSourceLookup(index); | 1175 isolate->bootstrapper()->NativesSourceLookup(index); |
1174 return CompileNative(name, source_code); | 1176 return CompileNative(name, source_code); |
1175 } | 1177 } |
1176 | 1178 |
1177 | 1179 |
| 1180 bool Genesis::CompileExperimentalBuiltin(Isolate* isolate, int index) { |
| 1181 Vector<const char> name = ExperimentalNatives::GetScriptName(index); |
| 1182 Factory* factory = isolate->factory(); |
| 1183 Handle<String> source_code = |
| 1184 factory->NewStringFromAscii(ExperimentalNatives::GetScriptSource(index)); |
| 1185 return CompileNative(name, source_code); |
| 1186 } |
| 1187 |
| 1188 |
1178 bool Genesis::CompileNative(Vector<const char> name, Handle<String> source) { | 1189 bool Genesis::CompileNative(Vector<const char> name, Handle<String> source) { |
1179 HandleScope scope; | 1190 HandleScope scope; |
1180 Isolate* isolate = source->GetIsolate(); | 1191 Isolate* isolate = source->GetIsolate(); |
1181 #ifdef ENABLE_DEBUGGER_SUPPORT | 1192 #ifdef ENABLE_DEBUGGER_SUPPORT |
1182 isolate->debugger()->set_compiling_natives(true); | 1193 isolate->debugger()->set_compiling_natives(true); |
1183 #endif | 1194 #endif |
1184 bool result = CompileScriptCached(name, | 1195 bool result = CompileScriptCached(name, |
1185 source, | 1196 source, |
1186 NULL, | 1197 NULL, |
1187 NULL, | 1198 NULL, |
(...skipping 315 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1503 | 1514 |
1504 if (FLAG_disable_native_files) { | 1515 if (FLAG_disable_native_files) { |
1505 PrintF("Warning: Running without installed natives!\n"); | 1516 PrintF("Warning: Running without installed natives!\n"); |
1506 return true; | 1517 return true; |
1507 } | 1518 } |
1508 | 1519 |
1509 // Install natives. | 1520 // Install natives. |
1510 for (int i = Natives::GetDebuggerCount(); | 1521 for (int i = Natives::GetDebuggerCount(); |
1511 i < Natives::GetBuiltinsCount(); | 1522 i < Natives::GetBuiltinsCount(); |
1512 i++) { | 1523 i++) { |
1513 Vector<const char> name = Natives::GetScriptName(i); | |
1514 if (!CompileBuiltin(isolate(), i)) return false; | 1524 if (!CompileBuiltin(isolate(), i)) return false; |
1515 // TODO(ager): We really only need to install the JS builtin | 1525 // TODO(ager): We really only need to install the JS builtin |
1516 // functions on the builtins object after compiling and running | 1526 // functions on the builtins object after compiling and running |
1517 // runtime.js. | 1527 // runtime.js. |
1518 if (!InstallJSBuiltins(builtins)) return false; | 1528 if (!InstallJSBuiltins(builtins)) return false; |
1519 } | 1529 } |
1520 | 1530 |
1521 InstallNativeFunctions(); | 1531 InstallNativeFunctions(); |
1522 | 1532 |
1523 // Store the map for the string prototype after the natives has been compiled | 1533 // Store the map for the string prototype after the natives has been compiled |
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1621 | 1631 |
1622 | 1632 |
1623 #ifdef DEBUG | 1633 #ifdef DEBUG |
1624 builtins->Verify(); | 1634 builtins->Verify(); |
1625 #endif | 1635 #endif |
1626 | 1636 |
1627 return true; | 1637 return true; |
1628 } | 1638 } |
1629 | 1639 |
1630 | 1640 |
| 1641 bool Genesis::InstallExperimentalNatives() { |
| 1642 if (FLAG_harmony_proxies) { |
| 1643 for (int i = ExperimentalNatives::GetDebuggerCount(); |
| 1644 i < ExperimentalNatives::GetBuiltinsCount(); |
| 1645 i++) { |
| 1646 if (!CompileExperimentalBuiltin(isolate(), i)) return false; |
| 1647 } |
| 1648 } |
| 1649 return true; |
| 1650 } |
| 1651 |
| 1652 |
1631 static Handle<JSObject> ResolveBuiltinIdHolder( | 1653 static Handle<JSObject> ResolveBuiltinIdHolder( |
1632 Handle<Context> global_context, | 1654 Handle<Context> global_context, |
1633 const char* holder_expr) { | 1655 const char* holder_expr) { |
1634 Factory* factory = global_context->GetIsolate()->factory(); | 1656 Factory* factory = global_context->GetIsolate()->factory(); |
1635 Handle<GlobalObject> global(global_context->global()); | 1657 Handle<GlobalObject> global(global_context->global()); |
1636 const char* period_pos = strchr(holder_expr, '.'); | 1658 const char* period_pos = strchr(holder_expr, '.'); |
1637 if (period_pos == NULL) { | 1659 if (period_pos == NULL) { |
1638 return Handle<JSObject>::cast( | 1660 return Handle<JSObject>::cast( |
1639 GetProperty(global, factory->LookupAsciiSymbol(holder_expr))); | 1661 GetProperty(global, factory->LookupAsciiSymbol(holder_expr))); |
1640 } | 1662 } |
(...skipping 460 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2101 InstallJSFunctionResultCaches(); | 2123 InstallJSFunctionResultCaches(); |
2102 InitializeNormalizedMapCaches(); | 2124 InitializeNormalizedMapCaches(); |
2103 if (!InstallNatives()) return; | 2125 if (!InstallNatives()) return; |
2104 | 2126 |
2105 MakeFunctionInstancePrototypeWritable(); | 2127 MakeFunctionInstancePrototypeWritable(); |
2106 | 2128 |
2107 if (!ConfigureGlobalObjects(global_template)) return; | 2129 if (!ConfigureGlobalObjects(global_template)) return; |
2108 isolate->counters()->contexts_created_from_scratch()->Increment(); | 2130 isolate->counters()->contexts_created_from_scratch()->Increment(); |
2109 } | 2131 } |
2110 | 2132 |
| 2133 // Install experimental natives. |
| 2134 if (!InstallExperimentalNatives()) return; |
| 2135 |
2111 result_ = global_context_; | 2136 result_ = global_context_; |
2112 } | 2137 } |
2113 | 2138 |
2114 | 2139 |
2115 // Support for thread preemption. | 2140 // Support for thread preemption. |
2116 | 2141 |
2117 // Reserve space for statics needing saving and restoring. | 2142 // Reserve space for statics needing saving and restoring. |
2118 int Bootstrapper::ArchiveSpacePerThread() { | 2143 int Bootstrapper::ArchiveSpacePerThread() { |
2119 return sizeof(NestingCounterType); | 2144 return sizeof(NestingCounterType); |
2120 } | 2145 } |
(...skipping 13 matching lines...) Expand all Loading... |
2134 return from + sizeof(NestingCounterType); | 2159 return from + sizeof(NestingCounterType); |
2135 } | 2160 } |
2136 | 2161 |
2137 | 2162 |
2138 // Called when the top-level V8 mutex is destroyed. | 2163 // Called when the top-level V8 mutex is destroyed. |
2139 void Bootstrapper::FreeThreadResources() { | 2164 void Bootstrapper::FreeThreadResources() { |
2140 ASSERT(!IsActive()); | 2165 ASSERT(!IsActive()); |
2141 } | 2166 } |
2142 | 2167 |
2143 } } // namespace v8::internal | 2168 } } // namespace v8::internal |
OLD | NEW |