Line data Source code
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 0 : 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 0 : ASTSuffix(Position position, Kind kind)
30 0 : : INHERITED(position)
31 0 : , fKind(kind) {}
32 :
33 0 : String description() const override {
34 0 : switch (fKind) {
35 : case kPostIncrement_Kind:
36 0 : return String("++");
37 : case kPostDecrement_Kind:
38 0 : return String("--");
39 : default:
40 0 : ABORT("unsupported suffix operator");
41 : }
42 : }
43 :
44 : Kind fKind;
45 :
46 : typedef ASTPositionNode INHERITED;
47 : };
48 :
49 : } // namespace
50 :
51 : #endif
|