[coco] Introduce Instr::IMutator interface (#1614)
author박종현/동작제어Lab(SR)/Staff Engineer/삼성전자 <jh1302.park@samsung.com>
Fri, 21 Sep 2018 01:35:46 +0000 (10:35 +0900)
committerGitHub Enterprise <noreply-CODE@samsung.com>
Fri, 21 Sep 2018 01:35:46 +0000 (10:35 +0900)
This commit introduces Instr::IMutator interface, which aims to minimize
code changes upon Instr (similarly as in Instr::IVisitor).

Signed-off-by: Jonghyun Park <jh1302.park@samsung.com>
contrib/coco/core/include/coco/IR/Instr.h

index 3d31077..78f27ce 100644 (file)
@@ -92,19 +92,24 @@ public:
   template <typename T> T accept(IVisitor<T> &&v) const { return accept(&v); }
 
 public:
-  struct Mutator
+  /**
+   * @brief Instr mutator interface
+   *
+   * WARN Use this interface only for coco-internal classes
+   *      (to minimize changes upon Instr extension)
+   */
+  struct IMutator
   {
-    virtual ~Mutator() = default;
+    virtual ~IMutator() = default;
 
 #define INSTR(Name) virtual void mutate(Name *) = 0;
 #include "coco/IR/Instr.lst"
 #undef INSTR
   };
 
-public:
-  struct DefaultMutator : public Mutator
+  struct Mutator : public IMutator
   {
-    virtual ~DefaultMutator() = default;
+    virtual ~Mutator() = default;
 
 #define INSTR(Name) \
   void mutate(Name *) override { throw std::runtime_error{"NYI"}; }
@@ -112,8 +117,11 @@ public:
 #undef INSTR
   };
 
+  // Deprecated. Use Mutator instead
+  using DefaultMutator = Mutator;
+
 public:
-  void accept(Mutator *m)
+  void accept(IMutator *m)
   {
 #define INSTR(Name)          \
   if (auto ins = as##Name()) \
@@ -125,8 +133,8 @@ public:
     throw std::runtime_error{"unreachable"};
   }
 
-  void accept(Mutator &m) { return accept(&m); }
-  void accept(Mutator &&m) { return accept(&m); }
+  void accept(IMutator &m) { return accept(&m); }
+  void accept(IMutator &&m) { return accept(&m); }
 
 public:
   /** @brief Returns a set of bags that Instr reads during execution */