Home | History | Annotate | Download | only in ast
      1 /*
      2  * Copyright 2016 Google Inc.
      3  *
      4  * Use of this source code is governed by a BSD-style license that can be
      5  * found in the LICENSE file.
      6  */
      7 
      8 #ifndef SKSL_ASTTYPE
      9 #define SKSL_ASTTYPE
     10 
     11 #include "SkSLASTPositionNode.h"
     12 
     13 namespace SkSL {
     14 
     15 /**
     16  * A type, such as 'int' or 'struct foo'.
     17  */
     18 struct ASTType : public ASTPositionNode {
     19     enum Kind {
     20         kIdentifier_Kind,
     21         kStruct_Kind
     22     };
     23 
     24     ASTType(int offset, StringFragment name, Kind kind, std::vector<int> sizes)
     25     : INHERITED(offset)
     26     , fName(name)
     27     , fKind(kind)
     28     , fSizes(std::move(sizes)) {}
     29 
     30     String description() const override {
     31         return fName;
     32     }
     33 
     34     const StringFragment fName;
     35 
     36     const Kind fKind;
     37 
     38     // array sizes, -1 meaning unspecified
     39     const std::vector<int> fSizes;
     40 
     41     typedef ASTPositionNode INHERITED;
     42 };
     43 
     44 } // namespace
     45 
     46 #endif
     47