Skip to content

Commit ea71cf5

Browse files
Merge pull request #81 from AjayBrahmakshatriya/master
Blocks AST cloning
2 parents 7347252 + 65a68b8 commit ea71cf5

File tree

5 files changed

+331
-1
lines changed

5 files changed

+331
-1
lines changed

include/blocks/block.h

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,20 @@ std::shared_ptr<T> to(std::shared_ptr<block> p) {
2929
return ret;
3030
}
3131

32+
template <typename T>
33+
std::shared_ptr<T> clone(std::shared_ptr<T> p) {
34+
if (!p) return nullptr;
35+
return to<T>(p->clone_impl());
36+
}
37+
38+
template <typename T>
39+
std::shared_ptr<T> clone_obj(T* t) {
40+
auto np = std::make_shared<T>();
41+
np->static_offset = t->static_offset;
42+
np->metadata_map = t->metadata_map;
43+
return np;
44+
}
45+
3246
template <typename T>
3347
class block_metadata_impl;
3448

@@ -62,6 +76,8 @@ class block_metadata_impl : public block_metadata {
6276
block_metadata_impl(T _val) : val(_val) {}
6377
};
6478

79+
80+
6581
class block : public std::enable_shared_from_this<block> {
6682
public:
6783
virtual ~block() = default;
@@ -113,6 +129,11 @@ class block : public std::enable_shared_from_this<block> {
113129
return false;
114130
return true;
115131
}
132+
133+
virtual block::Ptr clone_impl(void) {
134+
// abstract class always returns nullptr
135+
return nullptr;
136+
}
116137
};
117138
} // namespace block
118139
#endif

0 commit comments

Comments
 (0)