Index: src/sksl/ir/SkSLExpression.h |
diff --git a/src/sksl/ir/SkSLExpression.h b/src/sksl/ir/SkSLExpression.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..1e42c7a4755e02cb42c9f2456d4fd9bfee44c39c |
--- /dev/null |
+++ b/src/sksl/ir/SkSLExpression.h |
@@ -0,0 +1,55 @@ |
+/* |
+ * Copyright 2016 Google Inc. |
+ * |
+ * Use of this source code is governed by a BSD-style license that can be |
+ * found in the LICENSE file. |
+ */ |
+ |
+#ifndef SKSL_EXPRESSION |
+#define SKSL_EXPRESSION |
+ |
+#include "SkSLIRNode.h" |
+#include "SkSLType.h" |
+ |
+namespace SkSL { |
+ |
+/** |
+ * Abstract supertype of all expressions. |
+ */ |
+struct Expression : public IRNode { |
+ enum Kind { |
+ kBinary_Kind, |
+ kBoolLiteral_Kind, |
+ kConstructor_Kind, |
+ kIntLiteral_Kind, |
+ kFieldAccess_Kind, |
+ kFloatLiteral_Kind, |
+ kFunctionReference_Kind, |
+ kFunctionCall_Kind, |
+ kIndex_Kind, |
+ kPrefix_Kind, |
+ kPostfix_Kind, |
+ kSwizzle_Kind, |
+ kVariableReference_Kind, |
+ kTernary_Kind, |
+ kTypeReference_Kind, |
+ }; |
+ |
+ Expression(Position position, Kind kind, std::shared_ptr<Type> type) |
+ : INHERITED(position) |
+ , fKind(kind) |
+ , fType(std::move(type)) {} |
+ |
+ virtual bool isConstant() const { |
+ return false; |
+ } |
+ |
+ const Kind fKind; |
+ const std::shared_ptr<Type> fType; |
+ |
+ typedef IRNode INHERITED; |
+}; |
+ |
+} // namespace |
+ |
+#endif |