blob: 48b3c04542e7794a9405ecbb2d409634a0e61dea [file] [log] [blame]
John Bauman66b8ab22014-05-06 15:57:45 -04001//
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
Nicolas Capenscc863da2015-01-21 15:50:55 -050010#include "ExtensionBehavior.h"
11#include "Pragma.h"
12#include "preprocessor/DirectiveHandler.h"
John Bauman66b8ab22014-05-06 15:57:45 -040013
14class TDiagnostics;
15
16class TDirectiveHandler : public pp::DirectiveHandler
17{
Nicolas Capensc6841852015-02-15 14:25:37 -050018public:
John Bauman66b8ab22014-05-06 15:57:45 -040019 TDirectiveHandler(TExtensionBehavior& extBehavior,
Nicolas Capensc6841852015-02-15 14:25:37 -050020 TDiagnostics& diagnostics,
21 int& shaderVersion);
John Bauman66b8ab22014-05-06 15:57:45 -040022 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
Nicolas Capensc6841852015-02-15 14:25:37 -050041private:
John Bauman66b8ab22014-05-06 15:57:45 -040042 TPragma mPragma;
43 TExtensionBehavior& mExtensionBehavior;
44 TDiagnostics& mDiagnostics;
Nicolas Capensc6841852015-02-15 14:25:37 -050045 int& mShaderVersion;
John Bauman66b8ab22014-05-06 15:57:45 -040046};
47
48#endif // COMPILER_DIRECTIVE_HANDLER_H_