1// Copyright (c) 2013 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef TOOLS_GN_IMPORT_MANAGER_H_
6#define TOOLS_GN_IMPORT_MANAGER_H_
7
8#include <map>
9
10#include "base/synchronization/lock.h"
11
12class Err;
13class ParseNode;
14class Scope;
15class SourceFile;
16
17// Provides a cache of the results of importing scopes so the results can
18// be re-used rather than running the imported files multiple times.
19class ImportManager {
20 public:
21  ImportManager();
22  ~ImportManager();
23
24  // Does an import of the given file into the given scope. On error, sets the
25  // error and returns false.
26  bool DoImport(const SourceFile& file,
27                const ParseNode* node_for_err,
28                Scope* scope,
29                Err* err);
30
31 private:
32  base::Lock lock_;
33
34  // Owning pointers to the scopes.
35  typedef std::map<SourceFile, const Scope*> ImportMap;
36  ImportMap imports_;
37
38  DISALLOW_COPY_AND_ASSIGN(ImportManager);
39};
40
41#endif  // TOOLS_GN_IMPORT_MANAGER_H_
42