blob: 18f79f01ea547bf5d4a45c59dce4ddb0923c5b97 [file] [log] [blame]
ethannicholasb3058bd2016-07-01 08:22:01 -07001/*
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(Position position, Kind kind)
30 : INHERITED(position)
31 , fKind(kind) {}
32
Greg Daniel792d0f12016-11-20 14:53:35 +000033 std::string description() const override {
ethannicholasb3058bd2016-07-01 08:22:01 -070034 switch (fKind) {
35 case kPostIncrement_Kind:
Greg Daniel792d0f12016-11-20 14:53:35 +000036 return "++";
ethannicholasb3058bd2016-07-01 08:22:01 -070037 case kPostDecrement_Kind:
Greg Daniel792d0f12016-11-20 14:53:35 +000038 return "--";
ethannicholasb3058bd2016-07-01 08:22:01 -070039 default:
40 ABORT("unsupported suffix operator");
41 }
42 }
43
44 Kind fKind;
45
46 typedef ASTPositionNode INHERITED;
47};
48
49} // namespace
50
51#endif