1 /* 2 This file is part of solidity. 3 4 solidity is free software: you can redistribute it and/or modify 5 it under the terms of the GNU General Public License as published by 6 the Free Software Foundation, either version 3 of the License, or 7 (at your option) any later version. 8 9 solidity is distributed in the hope that it will be useful, 10 but WITHOUT ANY WARRANTY; without even the implied warranty of 11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 GNU General Public License for more details. 13 14 You should have received a copy of the GNU General Public License 15 along with solidity. If not, see <http://www.gnu.org/licenses/>. 16 */ 17 // SPDX-License-Identifier: GPL-3.0 18 /** 19 * Interface to retrieve the character stream by a source name. 20 */ 21 22 #pragma once 23 24 #include <liblangutil/CharStream.h> 25 #include <liblangutil/Exceptions.h> 26 27 #include <string> 28 29 namespace solidity::langutil 30 { 31 32 /** 33 * Interface to retrieve a CharStream (source) from a source name. 34 * Used especially for printing error information. 35 */ 36 class CharStreamProvider 37 { 38 public: 39 virtual ~CharStreamProvider() = default; 40 virtual CharStream const& charStream(std::string const& _sourceName) const = 0; 41 }; 42 43 class SingletonCharStreamProvider: public CharStreamProvider 44 { 45 public: SingletonCharStreamProvider(CharStream const & _charStream)46 explicit SingletonCharStreamProvider(CharStream const& _charStream): 47 m_charStream(_charStream) {} charStream(std::string const & _sourceName)48 CharStream const& charStream(std::string const& _sourceName) const override 49 { 50 solAssert(m_charStream.name() == _sourceName, ""); 51 return m_charStream; 52 } 53 private: 54 CharStream const& m_charStream; 55 }; 56 57 } 58