Add IntermNodePatternMatcher helper class

This will enable sharing code between different AST traversers that
apply transformations on similar node structures. This will make the
code more maintainable.

For now the helper class is used in UnfoldShortCircuitToIf and
SeparateExpressionsReturningArrays.

BUG=angleproject:1341
TEST=angle_end2end_tests, WebGL 2 conformance tests

Change-Id: Ib1e0d5a84fd05bcca983b34f18d47c53e86dc227
Reviewed-on: https://chromium-review.googlesource.com/361693
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Commit-Queue: Olli Etuaho <oetuaho@nvidia.com>
diff --git a/src/compiler/translator/IntermNodePatternMatcher.h b/src/compiler/translator/IntermNodePatternMatcher.h
new file mode 100644
index 0000000..b088633
--- /dev/null
+++ b/src/compiler/translator/IntermNodePatternMatcher.h
@@ -0,0 +1,40 @@
+//
+// Copyright (c) 2016 The ANGLE Project Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+//
+// IntermNodePatternMatcher is a helper class for matching node trees to given patterns.
+// It can be used whenever the same checks for certain node structures are common to multiple AST
+// traversers.
+//
+
+#ifndef COMPILER_TRANSLATOR_INTERMNODEPATTERNMATCHER_H_
+#define COMPILER_TRANSLATOR_INTERMNODEPATTERNMATCHER_H_
+
+class TIntermAggregate;
+class TIntermBinary;
+class TIntermNode;
+class TIntermSelection;
+
+class IntermNodePatternMatcher
+{
+  public:
+    enum PatternType
+    {
+        kUnfoldedShortCircuitExpression = 0x0001,
+
+        // Matches expressions that return arrays with the exception of simple statements where a
+        // constructor or function call result is assigned.
+        kExpressionReturningArray = 0x0002
+    };
+    IntermNodePatternMatcher(const unsigned int mask);
+
+    bool match(TIntermBinary *node, TIntermNode *parentNode);
+    bool match(TIntermAggregate *node, TIntermNode *parentNode);
+    bool match(TIntermSelection *node);
+
+  private:
+    const unsigned int mMask;
+};
+
+#endif