| Index: src/builtins.cc
|
| diff --git a/src/builtins.cc b/src/builtins.cc
|
| index 7290a2cf1cef2611efc35a6943fc588bb9f70dc3..203488432e8299a9f4539c33105fcffa1dbb899b 100644
|
| --- a/src/builtins.cc
|
| +++ b/src/builtins.cc
|
| @@ -1588,30 +1588,30 @@ struct BuiltinDesc {
|
| BuiltinExtraArguments extra_args;
|
| };
|
|
|
| +#define BUILTIN_FUNCTION_TABLE_INIT { V8_ONCE_INIT, {} }
|
| +
|
| class BuiltinFunctionTable {
|
| public:
|
| - BuiltinFunctionTable() {
|
| - Builtins::InitBuiltinFunctionTable();
|
| + BuiltinDesc* functions() {
|
| + CallOnce(&once_, &Builtins::InitBuiltinFunctionTable);
|
| + return functions_;
|
| }
|
|
|
| - static const BuiltinDesc* functions() { return functions_; }
|
| -
|
| - private:
|
| - static BuiltinDesc functions_[Builtins::builtin_count + 1];
|
| + OnceType once_;
|
| + BuiltinDesc functions_[Builtins::builtin_count + 1];
|
|
|
| friend class Builtins;
|
| };
|
|
|
| -BuiltinDesc BuiltinFunctionTable::functions_[Builtins::builtin_count + 1];
|
| -
|
| -static const BuiltinFunctionTable builtin_function_table_init;
|
| +static BuiltinFunctionTable builtin_function_table =
|
| + BUILTIN_FUNCTION_TABLE_INIT;
|
|
|
| // Define array of pointers to generators and C builtin functions.
|
| // We do this in a sort of roundabout way so that we can do the initialization
|
| // within the lexical scope of Builtins:: and within a context where
|
| // Code::Flags names a non-abstract type.
|
| void Builtins::InitBuiltinFunctionTable() {
|
| - BuiltinDesc* functions = BuiltinFunctionTable::functions_;
|
| + BuiltinDesc* functions = builtin_function_table.functions_;
|
| functions[builtin_count].generator = NULL;
|
| functions[builtin_count].c_code = NULL;
|
| functions[builtin_count].s_name = NULL;
|
| @@ -1655,7 +1655,7 @@ void Builtins::SetUp(bool create_heap_objects) {
|
| // Create a scope for the handles in the builtins.
|
| HandleScope scope(isolate);
|
|
|
| - const BuiltinDesc* functions = BuiltinFunctionTable::functions();
|
| + const BuiltinDesc* functions = builtin_function_table.functions();
|
|
|
| // For now we generate builtin adaptor code into a stack-allocated
|
| // buffer, before copying it into individual code objects. Be careful
|
|
|