[coco] Safe downcast to UnitF (#824)
author박종현/동작제어Lab(SR)/Staff Engineer/삼성전자 <jh1302.park@samsung.com>
Thu, 26 Jul 2018 00:56:33 +0000 (09:56 +0900)
committerGitHub Enterprise <noreply-CODE@samsung.com>
Thu, 26 Jul 2018 00:56:33 +0000 (09:56 +0900)
This commit introduces 'asUnitF' method in Instr, which allows users to
safely downcast an Instr object as a UnitF object.

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

index 56a2001..35da4d2 100644 (file)
@@ -9,6 +9,8 @@
 namespace coco
 {
 
+class UnitF;
+
 using InstrList = coco::DLinkedList<Instr, Block>::Head;
 
 /**
@@ -34,6 +36,10 @@ public:
 
 public:
   InstrList *head(void) const override;
+
+public:
+  virtual UnitF *asUnitF(void) { return nullptr; }
+  virtual const UnitF *asUnitF(void) const { return nullptr; }
 };
 
 } // namespace coco
@@ -97,6 +103,10 @@ public:
     // DO NOTHING
   }
 
+public:
+  UnitF *asUnitF(void) override { return this; }
+  const UnitF *asUnitF(void) const override { return this; }
+
 private:
   Op *_op;
 
index 31ebaeb..d7e88df 100644 (file)
@@ -61,6 +61,18 @@ TEST(IR_UNIT_F, ctor)
   ASSERT_EQ(ins.op(), nullptr);
 }
 
+TEST(IR_UNIT_F, asUnitF)
+{
+  coco::PtrLink<coco::Instr, coco::Block> link;
+  coco::UnitF ins{&link};
+
+  coco::Instr *mutable_ptr = &ins;
+  const coco::Instr *immutable_ptr = &ins;
+
+  ASSERT_NE(mutable_ptr->asUnitF(), nullptr);
+  ASSERT_EQ(mutable_ptr->asUnitF(), immutable_ptr->asUnitF());
+}
+
 TEST(IR_UNIT_F, op_update)
 {
   coco::PtrLink<coco::Instr, coco::Block> link;