//
// Copyright (c) 2012 The ANGLE Project Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
//

#ifndef COMPILER_PREPROCESSOR_DIRECTIVE_HANDLER_H_
#define COMPILER_PREPROCESSOR_DIRECTIVE_HANDLER_H_

#include <string>

namespace pp
{

struct SourceLocation;

// Base class for handling directives.
// Preprocessor uses this class to notify the clients about certain
// preprocessor directives. Derived classes are responsible for
// handling them in an appropriate manner.
class DirectiveHandler
{
  public:
    virtual ~DirectiveHandler();

    virtual void handleError(const SourceLocation& loc,
                             const std::string& msg) = 0;

    // Handle pragma of form: #pragma name[(value)]
    virtual void handlePragma(const SourceLocation& loc,
                              const std::string& name,
                              const std::string& value) = 0;

    virtual void handleExtension(const SourceLocation& loc,
                                 const std::string& name,
                                 const std::string& behavior) = 0;

    virtual void handleVersion(const SourceLocation& loc,
                               int version) = 0;
};

}  // namespace pp
#endif  // COMPILER_PREPROCESSOR_DIRECTIVE_HANDLER_H_
