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 14namespace 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 */ 20struct 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