Commit 6551e8d4 authored by yangguo@chromium.org's avatar yangguo@chromium.org

Removing exit time destructors by leaking static members.

Note that some cctests and d8 still contain statical members with exit time destructors.

BUG=v8:1828

Review URL: http://codereview.chromium.org/8586025

git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@10025 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
parent f808f4ae
...@@ -897,8 +897,6 @@ FOR_EACH_REG_EXP_TREE_TYPE(MAKE_TYPE_CASE) ...@@ -897,8 +897,6 @@ FOR_EACH_REG_EXP_TREE_TYPE(MAKE_TYPE_CASE)
FOR_EACH_REG_EXP_TREE_TYPE(MAKE_TYPE_CASE) FOR_EACH_REG_EXP_TREE_TYPE(MAKE_TYPE_CASE)
#undef MAKE_TYPE_CASE #undef MAKE_TYPE_CASE
RegExpEmpty RegExpEmpty::kInstance;
static Interval ListCaptureRegisters(ZoneList<RegExpTree*>* children) { static Interval ListCaptureRegisters(ZoneList<RegExpTree*>* children) {
Interval result = Interval::Empty(); Interval result = Interval::Empty();
......
...@@ -2131,9 +2131,10 @@ class RegExpEmpty: public RegExpTree { ...@@ -2131,9 +2131,10 @@ class RegExpEmpty: public RegExpTree {
virtual bool IsEmpty(); virtual bool IsEmpty();
virtual int min_match() { return 0; } virtual int min_match() { return 0; }
virtual int max_match() { return 0; } virtual int max_match() { return 0; }
static RegExpEmpty* GetInstance() { return &kInstance; } static RegExpEmpty* GetInstance() {
private: static RegExpEmpty* instance = ::new RegExpEmpty();
static RegExpEmpty kInstance; return instance;
}
}; };
......
...@@ -801,42 +801,45 @@ ElementsAccessor* ElementsAccessor::ForArray(FixedArrayBase* array) { ...@@ -801,42 +801,45 @@ ElementsAccessor* ElementsAccessor::ForArray(FixedArrayBase* array) {
void ElementsAccessor::InitializeOncePerProcess() { void ElementsAccessor::InitializeOncePerProcess() {
// First argument in list is the accessor class, the second argument is can
// be any arbitrary unique identifier, in this case chosen to be the
// corresponding enum. Use the fast element handler for smi-only arrays.
// The implementation is currently identical. Note that the order must match
// that of the ElementsKind enum for the |accessor_array[]| below to work.
#define ELEMENTS_LIST(V) \
V(FastObjectElementsAccessor, FAST_SMI_ONLY_ELEMENTS) \
V(FastObjectElementsAccessor, FAST_ELEMENTS) \
V(FastDoubleElementsAccessor, FAST_DOUBLE_ELEMENTS) \
V(DictionaryElementsAccessor, DICTIONARY_ELEMENTS) \
V(NonStrictArgumentsElementsAccessor, NON_STRICT_ARGUMENTS_ELEMENTS) \
V(ExternalByteElementsAccessor, EXTERNAL_BYTE_ELEMENTS) \
V(ExternalUnsignedByteElementsAccessor, EXTERNAL_UNSIGNED_BYTE_ELEMENTS) \
V(ExternalShortElementsAccessor, EXTERNAL_SHORT_ELEMENTS) \
V(ExternalUnsignedShortElementsAccessor, EXTERNAL_UNSIGNED_SHORT_ELEMENTS) \
V(ExternalIntElementsAccessor, EXTERNAL_INT_ELEMENTS) \
V(ExternalUnsignedIntElementsAccessor, EXTERNAL_UNSIGNED_INT_ELEMENTS) \
V(ExternalFloatElementsAccessor, EXTERNAL_FLOAT_ELEMENTS) \
V(ExternalDoubleElementsAccessor, EXTERNAL_DOUBLE_ELEMENTS) \
V(PixelElementsAccessor, EXTERNAL_PIXEL_ELEMENTS)
static struct ConcreteElementsAccessors { static struct ConcreteElementsAccessors {
// Use the fast element handler for smi-only arrays. The implementation is #define ACCESSOR_STRUCT(Class, Name) Class* Name##_handler;
// currently identical. ELEMENTS_LIST(ACCESSOR_STRUCT)
FastObjectElementsAccessor fast_smi_elements_handler; #undef ACCESSOR_STRUCT
FastObjectElementsAccessor fast_elements_handler; } element_accessors = {
FastDoubleElementsAccessor fast_double_elements_handler; #define ACCESSOR_INIT(Class, Name) ::new Class(),
DictionaryElementsAccessor dictionary_elements_handler; ELEMENTS_LIST(ACCESSOR_INIT)
NonStrictArgumentsElementsAccessor non_strict_arguments_elements_handler; #undef ACCESSOR_INIT
ExternalByteElementsAccessor byte_elements_handler; };
ExternalUnsignedByteElementsAccessor unsigned_byte_elements_handler;
ExternalShortElementsAccessor short_elements_handler;
ExternalUnsignedShortElementsAccessor unsigned_short_elements_handler;
ExternalIntElementsAccessor int_elements_handler;
ExternalUnsignedIntElementsAccessor unsigned_int_elements_handler;
ExternalFloatElementsAccessor float_elements_handler;
ExternalDoubleElementsAccessor double_elements_handler;
PixelElementsAccessor pixel_elements_handler;
} element_accessors;
static ElementsAccessor* accessor_array[] = { static ElementsAccessor* accessor_array[] = {
&element_accessors.fast_smi_elements_handler, #define ACCESSOR_ARRAY(Class, Name) element_accessors.Name##_handler,
&element_accessors.fast_elements_handler, ELEMENTS_LIST(ACCESSOR_ARRAY)
&element_accessors.fast_double_elements_handler, #undef ACCESSOR_ARRAY
&element_accessors.dictionary_elements_handler,
&element_accessors.non_strict_arguments_elements_handler,
&element_accessors.byte_elements_handler,
&element_accessors.unsigned_byte_elements_handler,
&element_accessors.short_elements_handler,
&element_accessors.unsigned_short_elements_handler,
&element_accessors.int_elements_handler,
&element_accessors.unsigned_int_elements_handler,
&element_accessors.float_elements_handler,
&element_accessors.double_elements_handler,
&element_accessors.pixel_elements_handler
}; };
#undef ELEMENTS_LIST
STATIC_ASSERT((sizeof(accessor_array) / sizeof(*accessor_array)) == STATIC_ASSERT((sizeof(accessor_array) / sizeof(*accessor_array)) ==
kElementsKindCount); kElementsKindCount);
......
...@@ -46,8 +46,8 @@ v8::Handle<v8::Value> GCExtension::GC(const v8::Arguments& args) { ...@@ -46,8 +46,8 @@ v8::Handle<v8::Value> GCExtension::GC(const v8::Arguments& args) {
void GCExtension::Register() { void GCExtension::Register() {
static GCExtension gc_extension; static GCExtension* gc_extension = ::new GCExtension();
static v8::DeclareExtension gc_extension_declaration(&gc_extension); static v8::DeclareExtension gc_extension_declaration(gc_extension);
} }
} } // namespace v8::internal } } // namespace v8::internal
...@@ -36,7 +36,7 @@ ...@@ -36,7 +36,7 @@
namespace v8 { namespace v8 {
namespace internal { namespace internal {
Allocator HashMap::DefaultAllocator; Allocator* HashMap::DefaultAllocator = ::new Allocator();
HashMap::HashMap(MatchFun match, HashMap::HashMap(MatchFun match,
......
...@@ -46,14 +46,14 @@ class Allocator BASE_EMBEDDED { ...@@ -46,14 +46,14 @@ class Allocator BASE_EMBEDDED {
class HashMap { class HashMap {
public: public:
static Allocator DefaultAllocator; static Allocator* DefaultAllocator;
typedef bool (*MatchFun) (void* key1, void* key2); typedef bool (*MatchFun) (void* key1, void* key2);
// initial_capacity is the size of the initial hash map; // initial_capacity is the size of the initial hash map;
// it must be a power of 2 (and thus must not be 0). // it must be a power of 2 (and thus must not be 0).
explicit HashMap(MatchFun match, explicit HashMap(MatchFun match,
Allocator* allocator = &DefaultAllocator, Allocator* allocator = DefaultAllocator,
uint32_t initial_capacity = 8); uint32_t initial_capacity = 8);
~HashMap(); ~HashMap();
......
...@@ -681,8 +681,9 @@ class Parser { ...@@ -681,8 +681,9 @@ class Parser {
// Factory methods. // Factory methods.
Statement* EmptyStatement() { Statement* EmptyStatement() {
static v8::internal::EmptyStatement empty; static v8::internal::EmptyStatement* empty =
return &empty; ::new v8::internal::EmptyStatement();
return empty;
} }
Scope* NewScope(Scope* parent, ScopeType type); Scope* NewScope(Scope* parent, ScopeType type);
......
...@@ -55,7 +55,7 @@ class ZoneAllocator: public Allocator { ...@@ -55,7 +55,7 @@ class ZoneAllocator: public Allocator {
}; };
static ZoneAllocator LocalsMapAllocator; static ZoneAllocator* LocalsMapAllocator = ::new ZoneAllocator();
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
...@@ -76,7 +76,7 @@ static bool Match(void* key1, void* key2) { ...@@ -76,7 +76,7 @@ static bool Match(void* key1, void* key2) {
} }
VariableMap::VariableMap() : HashMap(Match, &LocalsMapAllocator, 8) {} VariableMap::VariableMap() : HashMap(Match, LocalsMapAllocator, 8) {}
VariableMap::~VariableMap() {} VariableMap::~VariableMap() {}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment