Index: tools/gn/scope.h |
diff --git a/tools/gn/scope.h b/tools/gn/scope.h |
index 82e037fe39e101aeb9de70f5930a8351097d1f92..208ee552f07471eb5f14031e7d0823ff53b4a157 100644 |
--- a/tools/gn/scope.h |
+++ b/tools/gn/scope.h |
@@ -11,6 +11,7 @@ |
#include "base/basictypes.h" |
#include "base/containers/hash_tables.h" |
#include "base/memory/scoped_ptr.h" |
+#include "base/memory/scoped_vector.h" |
#include "tools/gn/err.h" |
#include "tools/gn/pattern.h" |
#include "tools/gn/source_dir.h" |
@@ -18,6 +19,7 @@ |
class FunctionCallNode; |
class ImportManager; |
+class Item; |
class ParseNode; |
class Settings; |
class TargetManager; |
@@ -37,6 +39,9 @@ class Template; |
class Scope { |
public: |
typedef base::hash_map<base::StringPiece, Value> KeyValueMap; |
+ // Holds an owning list of scoped_ptrs of Items (since we can't make a vector |
+ // of scoped_ptrs). |
+ typedef ScopedVector< scoped_ptr<Item> > ItemVector; |
// Allows code to provide values for built-in variables. This class will |
// automatically register itself on construction and deregister itself on |
@@ -224,6 +229,26 @@ class Scope { |
const SourceDir& GetSourceDir() const; |
void set_source_dir(const SourceDir& d) { source_dir_ = d; } |
+ // The item collector is where Items (Targets, Configs, etc.) go that have |
+ // been defined. If a scope can generate items, this non-owning pointer will |
+ // point to the storage for such items. The creator of this scope will be |
+ // responsible for setting up the collector and then dealing with the |
+ // collected items once execution of the context is complete. |
+ // |
+ // The items in a scope are collected as we go and then dispatched at the end |
+ // of execution of a scope so that we can query the previously-generated |
+ // targets (like getting the outputs). |
+ // |
+ // This can be null if the current scope can not generate items (like for |
+ // imports and such). |
+ // |
+ // When retrieving the collector, the non-const scopes are recursively |
+ // queried. The collector is not copied for closures, etc. |
+ void set_item_collector(ItemVector* collector) { |
+ item_collector_ = collector; |
+ } |
+ ItemVector* GetItemCollector(); |
+ |
// Properties are opaque pointers that code can use to set state on a Scope |
// that it can retrieve later. |
// |
@@ -283,6 +308,8 @@ class Scope { |
typedef std::map<std::string, const Template*> TemplateMap; |
TemplateMap templates_; |
+ ItemVector* item_collector_; |
+ |
// Opaque pointers. See SetProperty() above. |
typedef std::map<const void*, void*> PropertyMap; |
PropertyMap properties_; |