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 |