blob: 898855c478f0f388fe4d02033382a4349a096cc9 [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 */
Ethan Nicholas0df1b042017-03-31 13:56:23 -04007
ethannicholasb3058bd2016-07-01 08:22:01 -07008#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
Ethan Nicholas5b5f0962017-09-11 13:50:14 -070029 ASTSuffix(int offset, Kind kind)
30 : INHERITED(offset)
ethannicholasb3058bd2016-07-01 08:22:01 -070031 , fKind(kind) {}
32
Ethan Nicholas0df1b042017-03-31 13:56:23 -040033 String description() const override {
ethannicholasb3058bd2016-07-01 08:22:01 -070034 switch (fKind) {
35 case kPostIncrement_Kind:
Ethan Nicholas0df1b042017-03-31 13:56:23 -040036 return String("++");
ethannicholasb3058bd2016-07-01 08:22:01 -070037 case kPostDecrement_Kind:
Ethan Nicholas0df1b042017-03-31 13:56:23 -040038 return String("--");
ethannicholasb3058bd2016-07-01 08:22:01 -070039 default:
40 ABORT("unsupported suffix operator");
Ethan Nicholas0df1b042017-03-31 13:56:23 -040041 }
ethannicholasb3058bd2016-07-01 08:22:01 -070042 }
43
44 Kind fKind;
45
46 typedef ASTPositionNode INHERITED;
47};
48
49} // namespace
50
51#endif