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