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