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

Side by Side Diff: src/interface.h

Issue 667703002: Fix data race with interface caching (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Comments Created 6 years, 2 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
« no previous file with comments | « no previous file | src/interface.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef V8_INTERFACE_H_ 5 #ifndef V8_INTERFACE_H_
6 #define V8_INTERFACE_H_ 6 #define V8_INTERFACE_H_
7 7
8 #include "src/ast-value-factory.h" 8 #include "src/ast-value-factory.h"
9 #include "src/zone-inl.h" // For operator new. 9 #include "src/zone-inl.h" // For operator new.
10 10
(...skipping 23 matching lines...) Expand all
34 34
35 class Interface : public ZoneObject { 35 class Interface : public ZoneObject {
36 public: 36 public:
37 // --------------------------------------------------------------------------- 37 // ---------------------------------------------------------------------------
38 // Factory methods. 38 // Factory methods.
39 39
40 static Interface* NewUnknown(Zone* zone) { 40 static Interface* NewUnknown(Zone* zone) {
41 return new(zone) Interface(NONE); 41 return new(zone) Interface(NONE);
42 } 42 }
43 43
44 static Interface* NewValue() { 44 static Interface* NewValue();
45 static Interface value_interface(VALUE + FROZEN); // Cached.
46 return &value_interface;
47 }
48 45
49 static Interface* NewConst() { 46 static Interface* NewConst();
50 static Interface value_interface(VALUE + CONST + FROZEN); // Cached.
51 return &value_interface;
52 }
53 47
54 static Interface* NewModule(Zone* zone) { 48 static Interface* NewModule(Zone* zone) {
55 return new(zone) Interface(MODULE); 49 return new(zone) Interface(MODULE);
56 } 50 }
57 51
58 // --------------------------------------------------------------------------- 52 // ---------------------------------------------------------------------------
59 // Mutators. 53 // Mutators.
60 54
61 // Add a name to the list of exports. If it already exists, unify with 55 // Add a name to the list of exports. If it already exists, unify with
62 // interface, otherwise insert unless this is closed. 56 // interface, otherwise insert unless this is closed.
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after
171 165
172 // --------------------------------------------------------------------------- 166 // ---------------------------------------------------------------------------
173 // Debugging. 167 // Debugging.
174 #ifdef DEBUG 168 #ifdef DEBUG
175 void Print(int n = 0); // n = indentation; n < 0 => don't print recursively 169 void Print(int n = 0); // n = indentation; n < 0 => don't print recursively
176 #endif 170 #endif
177 171
178 // --------------------------------------------------------------------------- 172 // ---------------------------------------------------------------------------
179 // Implementation. 173 // Implementation.
180 private: 174 private:
175 struct ValueCreate;
176 struct ConstCreate;
177
181 enum Flags { // All flags are monotonic 178 enum Flags { // All flags are monotonic
182 NONE = 0, 179 NONE = 0,
183 VALUE = 1, // This type describes a value 180 VALUE = 1, // This type describes a value
184 CONST = 2, // This type describes a constant 181 CONST = 2, // This type describes a constant
185 MODULE = 4, // This type describes a module 182 MODULE = 4, // This type describes a module
186 FROZEN = 8 // This type is fully determined 183 FROZEN = 8 // This type is fully determined
187 }; 184 };
188 185
189 int flags_; 186 int flags_;
190 Interface* forward_; // Unification link 187 Interface* forward_; // Unification link
(...skipping 19 matching lines...) Expand all
210 } 207 }
211 208
212 void DoAdd(const void* name, uint32_t hash, Interface* interface, Zone* zone, 209 void DoAdd(const void* name, uint32_t hash, Interface* interface, Zone* zone,
213 bool* ok); 210 bool* ok);
214 void DoUnify(Interface* that, bool* ok, Zone* zone); 211 void DoUnify(Interface* that, bool* ok, Zone* zone);
215 }; 212 };
216 213
217 } } // namespace v8::internal 214 } } // namespace v8::internal
218 215
219 #endif // V8_INTERFACE_H_ 216 #endif // V8_INTERFACE_H_
OLDNEW
« no previous file with comments | « no previous file | src/interface.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698