Chromium Code Reviews| Index: runtime/vm/object_store.h |
| diff --git a/runtime/vm/object_store.h b/runtime/vm/object_store.h |
| index 0ff6a8e6fe695bc36eeef440d2ef1e9190dd02b9..48d99512d31c34ac5ea029a98e1b990ef77dfdac 100644 |
| --- a/runtime/vm/object_store.h |
| +++ b/runtime/vm/object_store.h |
| @@ -13,6 +13,32 @@ namespace dart { |
| class Isolate; |
| class ObjectPointerVisitor; |
| +// A list of the bootstrap libraries including CamelName and hacker_name. |
| +// |
| +// These are listed in the order that they are compiled (see vm/bootstrap.cc). |
| +#define FOR_EACH_PRODUCT_LIBRARY(M) \ |
|
hausner
2016/11/09 00:42:49
Similar to Florian's comment, I would prefer to ha
Vyacheslav Egorov (Google)
2016/11/09 14:43:16
It's in separate CL now: https://codereview.chromi
|
| + M(Core, core) \ |
| + M(Async, async) \ |
| + M(Collection, collection) \ |
| + M(Convert, convert) \ |
| + M(Developer, developer) \ |
| + M(Internal, _internal) \ |
| + M(Isolate, isolate) \ |
| + M(Math, math) \ |
| + M(Profiler, profiler) \ |
| + M(TypedData, typed_data) \ |
| + M(VMService, _vmservice) |
| + |
| +#ifdef PRODUCT |
| +#define FOR_EACH_BOOTSTRAP_LIBRARY(M) FOR_EACH_PRODUCT_LIBRARY(M) |
| + |
| +#else |
| +#define FOR_EACH_BOOTSTRAP_LIBRARY(M) \ |
| + FOR_EACH_PRODUCT_LIBRARY(M) \ |
| + M(Mirrors, mirrors) |
| + |
| +#endif |
| + |
| // The object store is a per isolate instance which stores references to |
| // objects used by the VM. |
| // TODO(iposva): Move the actual store into the object heap for quick handling |
| @@ -20,19 +46,10 @@ class ObjectPointerVisitor; |
| class ObjectStore { |
| public: |
| enum BootstrapLibraryId { |
| - kNone = 0, |
| - kAsync, |
| - kCore, |
| - kCollection, |
| - kConvert, |
| - kDeveloper, |
| - kInternal, |
| - kIsolate, |
| - kMath, |
| - kMirrors, |
| - kProfiler, |
| - kTypedData, |
| - kVMService, |
| +#define MAKE_ID(Name, _) k##Name, |
| + |
| + FOR_EACH_BOOTSTRAP_LIBRARY(MAKE_ID) |
| +#undef MAKE_ID |
| }; |
| ~ObjectStore(); |
| @@ -276,58 +293,36 @@ class ObjectStore { |
| canonical_type_arguments_ = value.raw(); |
| } |
| - RawLibrary* async_library() const { return async_library_; } |
| - RawLibrary* builtin_library() const { return builtin_library_; } |
| - RawLibrary* core_library() const { return core_library_; } |
| - RawLibrary* collection_library() const { return collection_library_; } |
| - RawLibrary* convert_library() const { return convert_library_; } |
| - RawLibrary* developer_library() const { return developer_library_; } |
| - RawLibrary* internal_library() const { return internal_library_; } |
| - RawLibrary* isolate_library() const { return isolate_library_; } |
| - RawLibrary* math_library() const { return math_library_; } |
| - RawLibrary* mirrors_library() const { return mirrors_library_; } |
| - RawLibrary* profiler_library() const { return profiler_library_; } |
| - RawLibrary* typed_data_library() const { return typed_data_library_; } |
| - RawLibrary* vmservice_library() const { return vmservice_library_; } |
| +#define MAKE_GETTER(_, name) \ |
| + RawLibrary* name##_library() const { return name##_library_; } |
| + |
| + FOR_EACH_BOOTSTRAP_LIBRARY(MAKE_GETTER) |
| +#undef MAKE_GETTER |
| + |
| + RawLibrary* bootstrap_library(BootstrapLibraryId index) { |
| + switch (index) { |
| +#define MAKE_CASE(CamelName, hacker_name) \ |
| + case k##CamelName: \ |
| + return hacker_name##_library_; |
| + |
| + FOR_EACH_BOOTSTRAP_LIBRARY(MAKE_CASE) |
| +#undef MAKE_CASE |
| + |
| + default: |
| + UNREACHABLE(); |
| + return Library::null(); |
| + } |
| + } |
| void set_bootstrap_library(BootstrapLibraryId index, const Library& value) { |
| switch (index) { |
| - case kAsync: |
| - async_library_ = value.raw(); |
| - break; |
| - case kCore: |
| - core_library_ = value.raw(); |
| - break; |
| - case kCollection: |
| - collection_library_ = value.raw(); |
| - break; |
| - case kConvert: |
| - convert_library_ = value.raw(); |
| - break; |
| - case kDeveloper: |
| - developer_library_ = value.raw(); |
| - break; |
| - case kInternal: |
| - internal_library_ = value.raw(); |
| - break; |
| - case kIsolate: |
| - isolate_library_ = value.raw(); |
| - break; |
| - case kMath: |
| - math_library_ = value.raw(); |
| - break; |
| - case kMirrors: |
| - mirrors_library_ = value.raw(); |
| - break; |
| - case kProfiler: |
| - profiler_library_ = value.raw(); |
| - break; |
| - case kTypedData: |
| - typed_data_library_ = value.raw(); |
| - break; |
| - case kVMService: |
| - vmservice_library_ = value.raw(); |
| - break; |
| +#define MAKE_CASE(CamelName, hacker_name) \ |
| + case k##CamelName: \ |
| + hacker_name##_library_ = value.raw(); \ |
| + break; |
| + |
| + FOR_EACH_BOOTSTRAP_LIBRARY(MAKE_CASE) |
| +#undef MAKE_CASE |
| default: |
| UNREACHABLE(); |
| } |
| @@ -577,7 +572,7 @@ class ObjectStore { |
| V(RawLibrary*, collection_library_) \ |
| V(RawLibrary*, convert_library_) \ |
| V(RawLibrary*, developer_library_) \ |
| - V(RawLibrary*, internal_library_) \ |
| + V(RawLibrary*, _internal_library_) \ |
| V(RawLibrary*, isolate_library_) \ |
| V(RawLibrary*, math_library_) \ |
| V(RawLibrary*, mirrors_library_) \ |
| @@ -585,7 +580,7 @@ class ObjectStore { |
| V(RawLibrary*, profiler_library_) \ |
| V(RawLibrary*, root_library_) \ |
| V(RawLibrary*, typed_data_library_) \ |
| - V(RawLibrary*, vmservice_library_) \ |
| + V(RawLibrary*, _vmservice_library_) \ |
| V(RawGrowableObjectArray*, libraries_) \ |
| V(RawArray*, libraries_map_) \ |
| V(RawGrowableObjectArray*, closure_functions_) \ |