1//
2// Copyright (c) 2012 The ANGLE Project Authors. All rights reserved.
3// Use of this source code is governed by a BSD-style license that can be
4// found in the LICENSE file.
5//
6
7#ifndef COMPILER_DIRECTIVE_HANDLER_H_
8#define COMPILER_DIRECTIVE_HANDLER_H_
9
10#include "compiler/translator/ExtensionBehavior.h"
11#include "compiler/translator/Pragma.h"
12#include "compiler/preprocessor/DirectiveHandlerBase.h"
13
14class TDiagnostics;
15
16class TDirectiveHandler : public pp::DirectiveHandler
17{
18  public:
19    TDirectiveHandler(TExtensionBehavior& extBehavior,
20                      TDiagnostics& diagnostics,
21                      int& shaderVersion);
22    virtual ~TDirectiveHandler();
23
24    const TPragma& pragma() const { return mPragma; }
25    const TExtensionBehavior& extensionBehavior() const { return mExtensionBehavior; }
26
27    virtual void handleError(const pp::SourceLocation& loc,
28                             const std::string& msg);
29
30    virtual void handlePragma(const pp::SourceLocation& loc,
31                              const std::string& name,
32                              const std::string& value);
33
34    virtual void handleExtension(const pp::SourceLocation& loc,
35                                 const std::string& name,
36                                 const std::string& behavior);
37
38    virtual void handleVersion(const pp::SourceLocation& loc,
39                               int version);
40
41  private:
42    TPragma mPragma;
43    TExtensionBehavior& mExtensionBehavior;
44    TDiagnostics& mDiagnostics;
45    int& mShaderVersion;
46};
47
48#endif  // COMPILER_DIRECTIVE_HANDLER_H_
49