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 ASTSuffixASTSuffix29 ASTSuffix(Position position, Kind kind) 30 : INHERITED(position) 31 , fKind(kind) {} 32 descriptionASTSuffix33 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