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_ASTSUFFIX
      9 #define SKSL_ASTSUFFIX
     10 
     11 #include "SkSLASTPositionNode.h"
     12 #include "SkSLASTExpression.h"
     13 
     14 namespace SkSL {
     15 
     16 /**
     17  * This and its subclasses represents expression suffixes, such as '[0]' or '.rgb'. Suffixes are not
     18  * expressions in and of themselves; they are attached to expressions to modify them.
     19  */
     20 struct ASTSuffix : public ASTPositionNode {
     21     enum Kind {
     22         kIndex_Kind,
     23         kCall_Kind,
     24         kField_Kind,
     25         kPostIncrement_Kind,
     26         kPostDecrement_Kind
     27     };
     28 
     29     ASTSuffix(int offset, Kind kind)
     30     : INHERITED(offset)
     31     , fKind(kind) {}
     32 
     33     String description() const override {
     34         switch (fKind) {
     35             case kPostIncrement_Kind:
     36                 return String("++");
     37             case kPostDecrement_Kind:
     38                 return String("--");
     39             default:
     40                 ABORT("unsupported suffix operator");
     41         }
     42     }
     43 
     44     Kind fKind;
     45 
     46     typedef ASTPositionNode INHERITED;
     47 };
     48 
     49 } // namespace
     50 
     51 #endif
     52