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

Side by Side Diff: src/hashmap.cc

Issue 9455088: Remove static initializers in v8. (Closed) Base URL: http://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Lint. Created 8 years, 10 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 2008 the V8 project authors. All rights reserved. 1 // Copyright 2008 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
11 // with the distribution. 11 // with the distribution.
12 // * Neither the name of Google Inc. nor the names of its 12 // * Neither the name of Google Inc. nor the names of its
13 // contributors may be used to endorse or promote products derived 13 // contributors may be used to endorse or promote products derived
14 // from this software without specific prior written permission. 14 // from this software without specific prior written permission.
15 // 15 //
16 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 16 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
17 // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 17 // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
18 // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 18 // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
19 // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 19 // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
20 // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 20 // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
21 // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 21 // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22 // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 22 // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23 // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 23 // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 24 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 25 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
26 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 26 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27 27
28 #include <new> // for placement new.
29
28 #include "../include/v8stdint.h" 30 #include "../include/v8stdint.h"
31 #include "allocation.h"
32 #include "checks.h"
29 #include "globals.h" 33 #include "globals.h"
30 #include "checks.h" 34 #include "lazy-instance.h"
31 #include "utils.h" 35 #include "utils.h"
32 #include "allocation.h"
33 36
34 #include "hashmap.h" 37 #include "hashmap.h"
35 38
36 namespace v8 { 39 namespace v8 {
37 namespace internal { 40 namespace internal {
38 41
39 Allocator* HashMap::DefaultAllocator = ::new Allocator(); 42 struct CreateDefaultAllocator {
43 static void Construct(Allocator* ptr) {
44 ::new(ptr) Allocator();
45 }
46 };
40 47
48 static LazyStaticInstance<Allocator, CreateDefaultAllocator>::type
49 default_allocator = LAZY_STATIC_INSTANCE_INITIALIZER;
41 50
42 HashMap::HashMap(MatchFun match, 51 HashMap::HashMap(MatchFun match,
43 Allocator* allocator, 52 Allocator* allocator,
44 uint32_t initial_capacity) { 53 uint32_t initial_capacity) {
45 allocator_ = allocator; 54 allocator_ = allocator ? allocator : default_allocator.Pointer();
46 match_ = match; 55 match_ = match;
47 Initialize(initial_capacity); 56 Initialize(initial_capacity);
48 } 57 }
49 58
50 59
51 HashMap::~HashMap() { 60 HashMap::~HashMap() {
52 if (allocator_) { 61 if (allocator_) {
53 allocator_->Delete(map_); 62 allocator_->Delete(map_);
54 } 63 }
55 } 64 }
(...skipping 159 matching lines...) Expand 10 before | Expand all | Expand 10 after
215 n--; 224 n--;
216 } 225 }
217 } 226 }
218 227
219 // Delete old map. 228 // Delete old map.
220 allocator_->Delete(map); 229 allocator_->Delete(map);
221 } 230 }
222 231
223 232
224 } } // namespace v8::internal 233 } } // namespace v8::internal
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698