@@ -67,4 +67,54 @@ public: \
6767 void name (type name##__) { hash_ = 0 ; name##_ = name##__; } \
6868private:
6969
70+ #ifdef DEBUG_SHARED_PTR
71+
72+ #define ATTACH_VIRTUAL_AST_OPERATIONS (klass ) \
73+ virtual klass##_Ptr copy (std::string, size_t ) const = 0; \
74+ virtual klass##_Ptr clone (std::string, size_t ) const = 0; \
75+
76+ #define ATTACH_AST_OPERATIONS (klass ) \
77+ virtual klass##_Ptr copy (std::string, size_t ) const ; \
78+ virtual klass##_Ptr clone (std::string, size_t ) const ; \
79+
80+ #else
81+
82+ #define ATTACH_VIRTUAL_AST_OPERATIONS (klass ) \
83+ virtual klass##_Ptr copy () const = 0; \
84+ virtual klass##_Ptr clone () const = 0; \
85+
86+ #define ATTACH_AST_OPERATIONS (klass ) \
87+ virtual klass##_Ptr copy () const ; \
88+ virtual klass##_Ptr clone () const ; \
89+
90+ #endif
91+
92+ #ifdef DEBUG_SHARED_PTR
93+
94+ #define IMPLEMENT_AST_OPERATORS (klass ) \
95+ klass##_Ptr klass::copy (std::string file, size_t line) const { \
96+ klass##_Ptr cpy = new klass (this ); \
97+ cpy->trace (file, line); \
98+ return cpy; \
99+ } \
100+ klass##_Ptr klass::clone (std::string file, size_t line) const { \
101+ klass##_Ptr cpy = copy (file, line); \
102+ cpy->cloneChildren (); \
103+ return cpy; \
104+ } \
105+
106+ #else
107+
108+ #define IMPLEMENT_AST_OPERATORS (klass ) \
109+ klass##_Ptr klass::copy () const { \
110+ return new klass (this ); \
111+ } \
112+ klass##_Ptr klass::clone () const { \
113+ klass##_Ptr cpy = copy (); \
114+ cpy->cloneChildren (); \
115+ return cpy; \
116+ } \
117+
118+ #endif
119+
70120#endif
0 commit comments