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