4 #ifndef ASTCOMBINEDPROCESSING_C
5 #define ASTCOMBINEDPROCESSING_C
9 #include "AstCombinedProcessing.h"
16 template <
class I,
class S>
23 template <
class I,
class S>
26 const typename SgCombinedTreeTraversal<I, S>::TraversalPtrList &t)
31 template <
class I,
class S>
36 traversals.push_back(t);
39 template <
class I,
class S>
40 typename SgCombinedTreeTraversal<I, S>::TraversalPtrList &
47 template <
class I,
class S>
49 ::InheritedAttributeTypeList *
53 ::InheritedAttributeTypeList *inheritedValues)
55 InheritedAttributeTypeList *result
56 =
new InheritedAttributeTypeList();
59 result->reserve(numberOfTraversals);
63 typename TraversalPtrList::iterator t = tBegin;
64 typename InheritedAttributeTypeList::iterator i
65 = inheritedValues->begin();
66 typename InheritedAttributeTypeList::const_iterator iEnd
67 = inheritedValues->end();
69 while (t != tEnd && i != iEnd)
70 result->push_back((*t++)->evaluateInheritedAttribute(astNode, *i++));
71 ROSE_ASSERT(t == tEnd && i == iEnd);
72 ROSE_ASSERT(result->size() == numberOfTraversals);
79 template <
class I,
class S>
81 ::SynthesizedAttributeTypeList *
85 ::InheritedAttributeTypeList *inheritedValues,
87 ::SynthesizedAttributesList synthesizedAttributes)
95 typename SynthesizedAttributesList::size_type M
96 = synthesizedAttributes.size();
99 typename TraversalType::SynthesizedAttributesList
100 attributesForTraversal(M);
102 SynthesizedAttributeTypeList *result
103 =
new SynthesizedAttributeTypeList();
104 result->reserve(numberOfTraversals);
106 typename TraversalPtrList::size_type i;
107 typename SynthesizedAttributesList::size_type j;
109 for (i = 0; i < numberOfTraversals; i++)
111 for (j = 0; j < M; j++)
112 attributesForTraversal[j] = (*synthesizedAttributes[j])[i];
115 traversals[i]->evaluateSynthesizedAttribute(
117 (*inheritedValues)[i],
118 attributesForTraversal));
123 for (j = 0; j < M; j++)
124 delete synthesizedAttributes[j];
129 delete inheritedValues;
134 template <
class I,
class S>
136 ::SynthesizedAttributeTypeList *
139 ::InheritedAttributeTypeList *inheritedValues)
142 SynthesizedAttributeTypeList *result
143 =
new SynthesizedAttributeTypeList(numberOfTraversals);
146 typename TraversalPtrList::size_type i;
147 for (i = 0; i < numberOfTraversals; i++)
149 = traversals[i]->defaultSynthesizedAttribute((*inheritedValues)[i]);
151 typename TraversalPtrList::iterator i = traversals.begin();
152 typename SynthesizedAttributeTypeList::iterator j
154 typename InheritedAttributeTypPtrList::iterator k
155 = inheritedValues->begin();
157 *j++ = (*i++)->defaultSynthesizedAttribute(*k++);
163 template <
class I,
class S>
172 tBegin = traversals.begin();
173 tEnd = traversals.end();
174 numberOfTraversals = traversals.size();
177 typename TraversalPtrList::iterator t;
178 for (t = tBegin; t != tEnd; ++t)
179 (*t)->atTraversalStart();
182 template <
class I,
class S>
188 typename TraversalPtrList::iterator t;
189 for (t = tBegin; t != tEnd; ++t)
190 (*t)->atTraversalEnd();
195 template <
class I,
class S>
202 template <
class I,
class S>
205 const typename AstCombinedTopDownBottomUpProcessing<I, S>::TraversalPtrList &t)
210 template <
class I,
class S>
215 traversals.push_back(t);
218 template <
class I,
class S>
219 typename AstCombinedTopDownBottomUpProcessing<I, S>::TraversalPtrList &
226 template <
class I,
class S>
228 ::InheritedAttributeTypeList *
232 ::InheritedAttributeTypeList *inheritedValues)
234 InheritedAttributeTypeList *result
235 =
new InheritedAttributeTypeList();
238 result->reserve(numberOfTraversals);
242 typename TraversalPtrList::iterator t = tBegin;
243 typename InheritedAttributeTypeList::iterator i
244 = inheritedValues->begin();
245 typename InheritedAttributeTypeList::const_iterator iEnd
246 = inheritedValues->end();
248 while (t != tEnd && i != iEnd)
249 result->push_back((*t++)->evaluateInheritedAttribute(astNode, *i++));
250 ROSE_ASSERT(t == tEnd && i == iEnd);
251 ROSE_ASSERT(result->size() == numberOfTraversals);
258 template <
class I,
class S>
260 ::SynthesizedAttributeTypeList *
264 ::InheritedAttributeTypeList *inheritedValues,
266 ::SynthesizedAttributesList synthesizedAttributes)
274 typename SynthesizedAttributesList::size_type M
275 = synthesizedAttributes.size();
278 typename TraversalType::SynthesizedAttributesList
279 attributesForTraversal(M);
281 SynthesizedAttributeTypeList *result
282 =
new SynthesizedAttributeTypeList();
283 result->reserve(numberOfTraversals);
285 typename TraversalPtrList::size_type i;
286 typename SynthesizedAttributesList::size_type j;
288 for (i = 0; i < numberOfTraversals; i++)
290 for (j = 0; j < M; j++)
291 attributesForTraversal[j] = (*synthesizedAttributes[j])[i];
294 traversals[i]->evaluateSynthesizedAttribute(
296 (*inheritedValues)[i],
297 attributesForTraversal));
302 for (j = 0; j < M; j++)
303 delete synthesizedAttributes[j];
308 delete inheritedValues;
313 template <
class I,
class S>
315 ::SynthesizedAttributeTypeList *
318 ::InheritedAttributeTypeList *inheritedValues)
321 SynthesizedAttributeTypeList *result
322 =
new SynthesizedAttributeTypeList(numberOfTraversals);
324 typename TraversalPtrList::size_type i;
325 for (i = 0; i < numberOfTraversals; i++)
327 = traversals[i]->defaultSynthesizedAttribute((*inheritedValues)[i]);
332 template <
class I,
class S>
341 tBegin = traversals.begin();
342 tEnd = traversals.end();
343 numberOfTraversals = traversals.size();
346 typename TraversalPtrList::iterator t;
347 for (t = tBegin; t != tEnd; ++t)
348 (*t)->atTraversalStart();
351 template <
class I,
class S>
357 typename TraversalPtrList::iterator t;
358 for (t = tBegin; t != tEnd; ++t)
359 (*t)->atTraversalEnd();
375 const typename AstCombinedTopDownProcessing<I>::TraversalPtrList &t)
385 traversals.push_back(t);
389 typename AstCombinedTopDownProcessing<I>::TraversalPtrList &
398 ::InheritedAttributeTypeList *
402 ::InheritedAttributeTypeList *inheritedValues)
404 InheritedAttributeTypeList *result
405 =
new InheritedAttributeTypeList();
408 result->reserve(numberOfTraversals);
412 typename TraversalPtrList::iterator t = tBegin;
413 typename InheritedAttributeTypeList::iterator i
414 = inheritedValues->begin();
415 typename InheritedAttributeTypeList::const_iterator iEnd
416 = inheritedValues->end();
418 while (t != tEnd && i != iEnd)
419 result->push_back((*t++)->evaluateInheritedAttribute(astNode, *i++));
420 ROSE_ASSERT(t == tEnd && i == iEnd);
421 ROSE_ASSERT(result->size() == numberOfTraversals);
437 tBegin = traversals.begin();
438 tEnd = traversals.end();
439 numberOfTraversals = traversals.size();
442 typename TraversalPtrList::iterator t;
443 for (t = tBegin; t != tEnd; ++t)
444 (*t)->atTraversalStart();
453 typename TraversalPtrList::iterator t;
454 for (t = tBegin; t != tEnd; ++t)
455 (*t)->atTraversalEnd();
462 InheritedAttributeTypeList *inheritedValues)
464 typename TraversalPtrList::iterator t = tBegin;
465 typename InheritedAttributeTypeList::iterator i
466 = inheritedValues->begin();
467 typename InheritedAttributeTypeList::const_iterator iEnd
468 = inheritedValues->end();
471 while (t != tEnd && i != iEnd)
472 (*t++)->destroyInheritedValue(node, *i++);
473 ROSE_ASSERT(t == tEnd && i == iEnd);
478 delete inheritedValues;
493 const typename AstCombinedBottomUpProcessing<S>::TraversalPtrList &t)
503 traversals.push_back(t);
507 typename AstCombinedBottomUpProcessing<S>::TraversalPtrList &
516 ::SynthesizedAttributeTypeList *
520 ::SynthesizedAttributesList synthesizedAttributes)
528 typename SynthesizedAttributesList::size_type M
529 = synthesizedAttributes.size();
532 typename TraversalType::SynthesizedAttributesList
533 attributesForTraversal(M, NULL);
535 SynthesizedAttributeTypeList *result
536 =
new SynthesizedAttributeTypeList(numberOfTraversals);
538 typename TraversalPtrList::size_type i;
539 typename SynthesizedAttributesList::size_type j;
541 for (i = 0; i < numberOfTraversals; i++)
543 for (j = 0; j < M; j++)
544 attributesForTraversal[j] = (*synthesizedAttributes[j])[i];
547 = traversals[i]->evaluateSynthesizedAttribute(
549 attributesForTraversal);
551 ROSE_ASSERT(result->size() == numberOfTraversals);
555 for (j = 0; j < M; j++)
556 delete synthesizedAttributes[j];
563 ::SynthesizedAttributeTypeList *
568 SynthesizedAttributeTypeList *result
569 =
new SynthesizedAttributeTypeList(numberOfTraversals);
571 typename TraversalPtrList::size_type i;
572 for (i = 0; i < numberOfTraversals; i++)
573 (*result)[i] = traversals[i]->defaultSynthesizedAttribute();
587 tBegin = traversals.begin();
588 tEnd = traversals.end();
589 numberOfTraversals = traversals.size();
592 typename TraversalPtrList::iterator t;
593 for (t = tBegin; t != tEnd; ++t)
594 (*t)->atTraversalStart();
603 typename TraversalPtrList::iterator t;
604 for (t = tBegin; t != tEnd; ++t)
605 (*t)->atTraversalEnd();