[coco] Allow iteration over instrs in a const block (#883)
author박종현/동작제어Lab(SR)/Staff Engineer/삼성전자 <jh1302.park@samsung.com>
Fri, 3 Aug 2018 02:01:28 +0000 (11:01 +0900)
committerGitHub Enterprise <noreply-CODE@samsung.com>
Fri, 3 Aug 2018 02:01:28 +0000 (11:01 +0900)
Currently, users cannot invoke  'Block::instr' method for non-const
Block objects.

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

index 1f95aa3..4bce989 100644 (file)
@@ -33,6 +33,7 @@ public:
 
 public:
   InstrList *instr(void) { return &_instr; }
+  const InstrList *instr(void) const { return &_instr; }
 
 private:
   DLinkedList<Instr, Block>::Head _instr;
index 4ec3739..a731037 100644 (file)
@@ -87,3 +87,19 @@ TEST(IR_MODULE, append_two_instrs)
   ASSERT_EQ(ins_2->prev(), ins_1);
   ASSERT_EQ(ins_2->next(), nullptr);
 }
+
+TEST(IR_MODULE, iterate_constant_block)
+{
+  auto m = coco::Module::create();
+  auto blk = m->entity()->block()->create();
+  auto ins_1 = m->entity()->instr()->create<coco::UnitF>();
+  auto ins_2 = m->entity()->instr()->create<coco::UnitF>();
+
+  blk->instr()->append(ins_1);
+  blk->instr()->append(ins_2);
+
+  const coco::Block *immutable_blk = blk;
+
+  ASSERT_EQ(blk->instr()->head(), ins_1);
+  ASSERT_EQ(blk->instr()->head()->next(), ins_2);
+}