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