tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

Preprocessor.h (2003B)


      1 //
      2 // Copyright 2011 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_PREPROCESSOR_PREPROCESSOR_H_
      8 #define COMPILER_PREPROCESSOR_PREPROCESSOR_H_
      9 
     10 #include <cstddef>
     11 
     12 #include "GLSLANG/ShaderLang.h"
     13 #include "common/angleutils.h"
     14 
     15 namespace angle
     16 {
     17 
     18 namespace pp
     19 {
     20 
     21 class Diagnostics;
     22 class DirectiveHandler;
     23 struct PreprocessorImpl;
     24 struct Token;
     25 
     26 struct PreprocessorSettings final
     27 {
     28    PreprocessorSettings(ShShaderSpec shaderSpec)
     29        : maxMacroExpansionDepth(1000), shaderSpec(shaderSpec)
     30    {}
     31 
     32    PreprocessorSettings(const PreprocessorSettings &other) = default;
     33 
     34    int maxMacroExpansionDepth;
     35    ShShaderSpec shaderSpec;
     36 };
     37 
     38 class Preprocessor : angle::NonCopyable
     39 {
     40  public:
     41    Preprocessor(Diagnostics *diagnostics,
     42                 DirectiveHandler *directiveHandler,
     43                 const PreprocessorSettings &settings);
     44    ~Preprocessor();
     45 
     46    // count: specifies the number of elements in the string and length arrays.
     47    // string: specifies an array of pointers to strings.
     48    // length: specifies an array of string lengths.
     49    // If length is NULL, each string is assumed to be null terminated.
     50    // If length is a value other than NULL, it points to an array containing
     51    // a string length for each of the corresponding elements of string.
     52    // Each element in the length array may contain the length of the
     53    // corresponding string or a value less than 0 to indicate that the string
     54    // is null terminated.
     55    bool init(size_t count, const char *const string[], const int length[]);
     56    // Adds a pre-defined macro.
     57    void predefineMacro(const char *name, int value);
     58 
     59    void lex(Token *token);
     60 
     61    // Set maximum preprocessor token size
     62    void setMaxTokenSize(size_t maxTokenSize);
     63 
     64  private:
     65    PreprocessorImpl *mImpl;
     66 };
     67 
     68 }  // namespace pp
     69 
     70 }  // namespace angle
     71 
     72 #endif  // COMPILER_PREPROCESSOR_PREPROCESSOR_H_