1e13238e0acd3f22252c90bee6a7684961eefe5daAlexis Hetu// Copyright 2017 The SwiftShader Authors. All Rights Reserved. 20bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens// 30bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens// Licensed under the Apache License, Version 2.0 (the "License"); 40bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens// you may not use this file except in compliance with the License. 50bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens// You may obtain a copy of the License at 60bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens// 70bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens// http://www.apache.org/licenses/LICENSE-2.0 80bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens// 90bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens// Unless required by applicable law or agreed to in writing, software 100bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens// distributed under the License is distributed on an "AS IS" BASIS, 110bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 120bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens// See the License for the specific language governing permissions and 130bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens// limitations under the License. 140bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens 15e13238e0acd3f22252c90bee6a7684961eefe5daAlexis Hetu#ifndef COMPILER_PREPROCESSOR_DIRECTIVEHANDLERBASE_H_ 16e13238e0acd3f22252c90bee6a7684961eefe5daAlexis Hetu#define COMPILER_PREPROCESSOR_DIRECTIVEHANDLERBASE_H_ 170bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens 180bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens#include <string> 190bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens 200bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capensnamespace pp 210bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens{ 220bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens 230bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capensstruct SourceLocation; 240bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens 250bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens// Base class for handling directives. 260bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens// Preprocessor uses this class to notify the clients about certain 270bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens// preprocessor directives. Derived classes are responsible for 280bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens// handling them in an appropriate manner. 290bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capensclass DirectiveHandler 300bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens{ 31e13238e0acd3f22252c90bee6a7684961eefe5daAlexis Hetu public: 320bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens virtual ~DirectiveHandler(); 330bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens 34e13238e0acd3f22252c90bee6a7684961eefe5daAlexis Hetu virtual void handleError(const SourceLocation &loc, const std::string &msg) = 0; 350bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens 360bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens // Handle pragma of form: #pragma name[(value)] 37e13238e0acd3f22252c90bee6a7684961eefe5daAlexis Hetu virtual void handlePragma(const SourceLocation &loc, 38e13238e0acd3f22252c90bee6a7684961eefe5daAlexis Hetu const std::string &name, 39e13238e0acd3f22252c90bee6a7684961eefe5daAlexis Hetu const std::string &value, 40e13238e0acd3f22252c90bee6a7684961eefe5daAlexis Hetu bool stdgl) = 0; 410bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens 42e13238e0acd3f22252c90bee6a7684961eefe5daAlexis Hetu virtual void handleExtension(const SourceLocation &loc, 43e13238e0acd3f22252c90bee6a7684961eefe5daAlexis Hetu const std::string &name, 44e13238e0acd3f22252c90bee6a7684961eefe5daAlexis Hetu const std::string &behavior) = 0; 450bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens 46e13238e0acd3f22252c90bee6a7684961eefe5daAlexis Hetu virtual void handleVersion(const SourceLocation &loc, int version) = 0; 470bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens}; 480bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens 490bac285a78df6a6d7a6b68784748b92805420ffbNicolas Capens} // namespace pp 50e13238e0acd3f22252c90bee6a7684961eefe5daAlexis Hetu 51e13238e0acd3f22252c90bee6a7684961eefe5daAlexis Hetu#endif // COMPILER_PREPROCESSOR_DIRECTIVEHANDLERBASE_H_ 52