-
Notifications
You must be signed in to change notification settings - Fork 0
/
AstProcessing_8h_source.html
1105 lines (1105 loc) · 172 KB
/
AstProcessing_8h_source.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.9.8"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>ROSE: AstProcessing.h Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/search.js"></script>
<link rel="search" href="search_opensearch.php?v=opensearch.xml" type="application/opensearchdescription+xml" title="ROSE"/>
<link href="roseDoxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr id="projectrow">
<td id="projectalign">
<div id="projectname">ROSE<span id="projectnumber"> 0.11.145.141</span>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.8 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "search/",'.html');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
$(function() {
initMenu('',true,true,'search.html','Search');
$(document).ready(function() {
if ($('.searchresults').length > 0) { searchBox.DOMSearchField().focus(); }
});
});
/* @license-end */
</script>
<div id="main-nav"></div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
$(document).ready(function() { init_codefold(0); });
/* @license-end */
</script>
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_ab44dd72236d16e0efa23643a9299efc.html">midend</a></li><li class="navelem"><a class="el" href="dir_72a02784c4a3f4825949a085ba8b7f58.html">astProcessing</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle"><div class="title">AstProcessing.h</div></div>
</div><!--header-->
<div class="contents">
<div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="comment">// Original Author (AstProcessing classes): Markus Schordan</span></div>
<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span><span class="comment">// Rewritten by: Gergo Barany</span></div>
<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span> </div>
<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span><span class="preprocessor">#ifndef ROSE_ASTPROCESSING_H</span></div>
<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span><span class="preprocessor">#define ROSE_ASTPROCESSING_H</span></div>
<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span><span class="preprocessor">#define ROSE_INHERITED 0</span></div>
<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span><span class="preprocessor">#define ROSE_SYNTHESIZED 1</span></div>
<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span><span class="preprocessor">#define ROSE_BOTH 2</span></div>
<div class="line"><a id="l00009" name="l00009"></a><span class="lineno"> 9</span> </div>
<div class="line"><a id="l00010" name="l00010"></a><span class="lineno"> 10</span><span class="keyword">typedef</span> <span class="keyword">enum</span> {preorder = 1, postorder = 2, preandpostorder = preorder | postorder} t_traverseOrder;</div>
<div class="line"><a id="l00011" name="l00011"></a><span class="lineno"> 11</span> </div>
<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span><span class="preprocessor">#ifndef ROSE_USE_INTERNAL_FRONTEND_DEVELOPMENT</span></div>
<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span><span class="preprocessor"> #include "staticCFG.h"</span></div>
<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span><span class="preprocessor">#endif</span></div>
<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span> </div>
<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span><span class="preprocessor">#include <vector></span></div>
<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span><span class="preprocessor">#include <algorithm></span></div>
<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span><span class="preprocessor">#include <utility></span></div>
<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span><span class="preprocessor">#include <iostream></span></div>
<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span> </div>
<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span><span class="comment">//using namespace boost;</span></div>
<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span> </div>
<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span><span class="comment">//bool end = false;</span></div>
<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</span> </div>
<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</span><span class="comment">//using namespace std;</span></div>
<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span> </div>
<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"> 27</span><span class="comment">// tps (01/08/2010) Added sage3basic since this doesnt compile under gcc4.1.2</span></div>
<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span><span class="comment">//#include "sage3basic.h"</span></div>
<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"> 29</span><span class="comment">//#include "sage3.h"</span></div>
<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"> 30</span><span class="comment">// Non-templated helper function in AstProcessing.C</span></div>
<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"> 31</span> </div>
<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"> 32</span> </div>
<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"> 33</span> </div>
<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"> 34</span> </div>
<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"> 35</span>ROSE_DLL_API <span class="keywordtype">bool</span> </div>
<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"> 36</span>SgTreeTraversal_inFileToTraverse(<a class="code hl_class" href="classSgNode.html">SgNode</a>* node, <span class="keywordtype">bool</span> traversalConstraint, <a class="code hl_class" href="classSgFile.html">SgFile</a>* fileToVisit);</div>
<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"> 37</span> </div>
<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"> 38</span><span class="comment">/*</span></div>
<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"> 39</span><span class="comment"> GB (06/01/2007):</span></div>
<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"> 40</span><span class="comment"> Changes to the original code were roughly:</span></div>
<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"> 41</span><span class="comment"> - removed unneeded includes and other code</span></div>
<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"> 42</span><span class="comment"> - removed everything related to visit flags</span></div>
<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"> 43</span><span class="comment"> - changed support for SynthesizedAttributesList; synthesized attributes are</span></div>
<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"> 44</span><span class="comment"> now handled in a smarter way, by keeping them on a stack and (in</span></div>
<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"> 45</span><span class="comment"> principle) only passing iterators instead of copying a container;</span></div>
<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"> 46</span><span class="comment"> traverse() is now only a thin wrapper around performTraversal() that</span></div>
<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"> 47</span><span class="comment"> takes care of visiting nodes and pushing/popping synthesized attributes</span></div>
<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"> 48</span><span class="comment"> - rewrote inFileToTraverse() to use new AST features instead of lots of</span></div>
<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"> 49</span><span class="comment"> string comparisons; it is now explicitly stated (at least in this</span></div>
<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"> 50</span><span class="comment"> comment) that we *do* visit subtrees from other files unless their root</span></div>
<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"> 51</span><span class="comment"> is in global or namespace scope, which is how we hope to avoid headers</span></div>
<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"> 52</span><span class="comment"> but still handle all included "code"</span></div>
<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"> 53</span><span class="comment"> - renamed class _DummyAttribute because that identifier is reserved for the</span></div>
<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"> 54</span><span class="comment"> implementation</span></div>
<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"> 55</span><span class="comment"> - everything that was not changed in some other way was totally</span></div>
<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"> 56</span><span class="comment"> reformatted, so diffing the old and new files won't do anything</span></div>
<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"> 57</span><span class="comment"> meaningful</span></div>
<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"> 58</span><span class="comment"> - appended "" suffix to pretty much any global identifier that would</span></div>
<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"> 59</span><span class="comment"> clash with the existing ones; if this code is ever moved into ROSE to</span></div>
<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"> 60</span><span class="comment"> replace the old version, it should not be exceedingly hard to remove the</span></div>
<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"> 61</span><span class="comment"> suffix everywhere</span></div>
<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"> 62</span><span class="comment"> - added some new virtual functions the user may choose to implement:</span></div>
<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"> 63</span><span class="comment"> atTraversalStart(), atTraversalEnd(), destroyInheritedValue()</span></div>
<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"> 64</span><span class="comment"> - other stuff I have probably forgotten</span></div>
<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"> 65</span><span class="comment"> GB (7/6/2007):</span></div>
<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"> 66</span><span class="comment"> - added new class AstPrePostProcessing and changed the traverseOrder</span></div>
<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"> 67</span><span class="comment"> flag so that it can now be pre and post order at the same time</span></div>
<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"> 68</span><span class="comment"> */</span></div>
<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"> 69</span> </div>
<div class="line"><a id="l00070" name="l00070"></a><span class="lineno"> 70</span> </div>
<div class="line"><a id="l00071" name="l00071"></a><span class="lineno"> 71</span> </div>
<div class="line"><a id="l00072" name="l00072"></a><span class="lineno"> 72</span> </div>
<div class="line"><a id="l00073" name="l00073"></a><span class="lineno"> 73</span> </div>
<div class="line"><a id="l00074" name="l00074"></a><span class="lineno"> 74</span><span class="preprocessor">#include "AstSuccessorsSelectors.h"</span></div>
<div class="line"><a id="l00075" name="l00075"></a><span class="lineno"> 75</span><span class="preprocessor">#include "StackFrameVector.h"</span></div>
<div class="line"><a id="l00076" name="l00076"></a><span class="lineno"> 76</span> </div>
<div class="line"><a id="l00077" name="l00077"></a><span class="lineno"> 77</span><span class="comment">// This type is used as a dummy template parameter for those traversals</span></div>
<div class="line"><a id="l00078" name="l00078"></a><span class="lineno"> 78</span><span class="comment">// that do not use inherited or synthesized attributes.</span></div>
<div class="line"><a id="l00079" name="l00079"></a><span class="lineno"> 79</span><span class="keyword">typedef</span> <span class="keywordtype">void</span> *DummyAttribute;</div>
<div class="line"><a id="l00080" name="l00080"></a><span class="lineno"> 80</span><span class="comment">// We initialize DummyAttributes to this value to avoid "may not be</span></div>
<div class="line"><a id="l00081" name="l00081"></a><span class="lineno"> 81</span><span class="comment">// initialized" warnings. If you change the typedef, adjust the constant...</span></div>
<div class="line"><a id="l00082" name="l00082"></a><span class="lineno"> 82</span><span class="keyword">static</span> <span class="keyword">const</span> DummyAttribute defaultDummyAttribute = <span class="keyword">nullptr</span>;</div>
<div class="line"><a id="l00083" name="l00083"></a><span class="lineno"> 83</span><span class="comment">// The attribute _DummyAttribute is reserved for the implementation, so we</span></div>
<div class="line"><a id="l00084" name="l00084"></a><span class="lineno"> 84</span><span class="comment">// should deprecate it, but there is code using it explicitly. Which it</span></div>
<div class="line"><a id="l00085" name="l00085"></a><span class="lineno"> 85</span><span class="comment">// shouldn't.</span></div>
<div class="line"><a id="l00086" name="l00086"></a><span class="lineno"> 86</span><span class="keyword">typedef</span> DummyAttribute _DummyAttribute;</div>
<div class="line"><a id="l00087" name="l00087"></a><span class="lineno"> 87</span> </div>
<div class="line"><a id="l00088" name="l00088"></a><span class="lineno"> 88</span> </div>
<div class="line"><a id="l00089" name="l00089"></a><span class="lineno"> 89</span><span class="keyword">template</span> <<span class="keyword">class</span> InheritedAttributeType, <span class="keyword">class</span> SynthesizedAttributeType></div>
<div class="line"><a id="l00090" name="l00090"></a><span class="lineno"> 90</span><span class="keyword">class </span><a class="code hl_class" href="classSgCombinedTreeTraversal.html">SgCombinedTreeTraversal</a>;</div>
<div class="line"><a id="l00091" name="l00091"></a><span class="lineno"> 91</span> </div>
<div class="line"><a id="l00092" name="l00092"></a><span class="lineno"> 92</span> </div>
<div class="line"><a id="l00093" name="l00093"></a><span class="lineno"> 93</span> </div>
<div class="line"><a id="l00094" name="l00094"></a><span class="lineno"> 94</span> </div>
<div class="line"><a id="l00095" name="l00095"></a><span class="lineno"> 95</span><span class="comment">// Base class for all traversals.</span></div>
<div class="line"><a id="l00096" name="l00096"></a><span class="lineno"> 96</span><span class="keyword">template</span> <<span class="keyword">class</span> InheritedAttributeType, <span class="keyword">class</span> SynthesizedAttributeType></div>
<div class="foldopen" id="foldopen00097" data-start="{" data-end="};">
<div class="line"><a id="l00097" name="l00097"></a><span class="lineno"><a class="line" href="classSgTreeTraversal.html"> 97</a></span><span class="keyword">class </span><a class="code hl_class" href="classSgTreeTraversal.html">SgTreeTraversal</a></div>
<div class="line"><a id="l00098" name="l00098"></a><span class="lineno"> 98</span>{</div>
<div class="line"><a id="l00099" name="l00099"></a><span class="lineno"> 99</span><span class="keyword">public</span>: </div>
<div class="line"><a id="l00100" name="l00100"></a><span class="lineno"> 100</span> <span class="keyword">typedef</span> <a class="code hl_class" href="classStackFrameVector.html">StackFrameVector<SynthesizedAttributeType></a> <a class="code hl_class" href="classStackFrameVector.html">SynthesizedAttributesList</a>;</div>
<div class="line"><a id="l00101" name="l00101"></a><span class="lineno"> 101</span> </div>
<div class="line"><a id="l00102" name="l00102"></a><span class="lineno"> 102</span> SynthesizedAttributeType traverse(<a class="code hl_class" href="classSgNode.html">SgNode</a>* basenode,</div>
<div class="line"><a id="l00103" name="l00103"></a><span class="lineno"> 103</span> InheritedAttributeType inheritedValue,</div>
<div class="line"><a id="l00104" name="l00104"></a><span class="lineno"> 104</span> t_traverseOrder travOrder = preandpostorder);</div>
<div class="line"><a id="l00105" name="l00105"></a><span class="lineno"> 105</span> </div>
<div class="line"><a id="l00106" name="l00106"></a><span class="lineno"> 106</span> SynthesizedAttributeType traverseWithinFile(<a class="code hl_class" href="classSgNode.html">SgNode</a>* basenode,</div>
<div class="line"><a id="l00107" name="l00107"></a><span class="lineno"> 107</span> InheritedAttributeType inheritedValue,</div>
<div class="line"><a id="l00108" name="l00108"></a><span class="lineno"> 108</span> t_traverseOrder travOrder = preandpostorder);</div>
<div class="line"><a id="l00109" name="l00109"></a><span class="lineno"> 109</span> </div>
<div class="line"><a id="l00110" name="l00110"></a><span class="lineno"> 110</span> <span class="keywordtype">void</span> traverseInputFiles(<a class="code hl_class" href="classSgProject.html">SgProject</a>* projectNode,</div>
<div class="line"><a id="l00111" name="l00111"></a><span class="lineno"> 111</span> InheritedAttributeType inheritedValue,</div>
<div class="line"><a id="l00112" name="l00112"></a><span class="lineno"> 112</span> t_traverseOrder travOrder = preandpostorder);</div>
<div class="line"><a id="l00113" name="l00113"></a><span class="lineno"> 113</span> </div>
<div class="line"><a id="l00114" name="l00114"></a><span class="lineno"> 114</span> <span class="comment">// Default destructor/constructor</span></div>
<div class="line"><a id="l00115" name="l00115"></a><span class="lineno"> 115</span> <span class="keyword">virtual</span> <a class="code hl_class" href="classSgTreeTraversal.html">~SgTreeTraversal</a>();</div>
<div class="line"><a id="l00116" name="l00116"></a><span class="lineno"> 116</span> <a class="code hl_class" href="classSgTreeTraversal.html">SgTreeTraversal</a>();</div>
<div class="line"><a id="l00117" name="l00117"></a><span class="lineno"> 117</span> </div>
<div class="line"><a id="l00118" name="l00118"></a><span class="lineno"> 118</span> <span class="comment">// Copy operations</span></div>
<div class="line"><a id="l00119" name="l00119"></a><span class="lineno"> 119</span> <a class="code hl_class" href="classSgTreeTraversal.html">SgTreeTraversal</a>(<span class="keyword">const</span> <a class="code hl_class" href="classSgTreeTraversal.html">SgTreeTraversal</a> &);</div>
<div class="line"><a id="l00120" name="l00120"></a><span class="lineno"> 120</span> <span class="keyword">const</span> <a class="code hl_class" href="classSgTreeTraversal.html">SgTreeTraversal</a> &operator=(<span class="keyword">const</span> <a class="code hl_class" href="classSgTreeTraversal.html">SgTreeTraversal</a> &);</div>
<div class="line"><a id="l00121" name="l00121"></a><span class="lineno"> 121</span> </div>
<div class="line"><a id="l00122" name="l00122"></a><span class="lineno"> 122</span> <span class="keyword">friend</span> <span class="keyword">class </span><a class="code hl_class" href="classSgCombinedTreeTraversal.html">SgCombinedTreeTraversal</a><InheritedAttributeType, SynthesizedAttributeType>;</div>
<div class="line"><a id="l00123" name="l00123"></a><span class="lineno"> 123</span> </div>
<div class="line"><a id="l00124" name="l00124"></a><span class="lineno"> 124</span> </div>
<div class="line"><a id="l00125" name="l00125"></a><span class="lineno"> 125</span><span class="preprocessor">#include "Cxx_GrammarTreeTraversalAccessEnums.h"</span></div>
<div class="line"><a id="l00126" name="l00126"></a><span class="lineno"> 126</span> </div>
<div class="line"><a id="l00127" name="l00127"></a><span class="lineno"> 127</span><span class="keyword">protected</span>:</div>
<div class="line"><a id="l00128" name="l00128"></a><span class="lineno"> 128</span> <span class="keyword">virtual</span> InheritedAttributeType evaluateInheritedAttribute(<a class="code hl_class" href="classSgNode.html">SgNode</a>* astNode,</div>
<div class="line"><a id="l00129" name="l00129"></a><span class="lineno"> 129</span> InheritedAttributeType inheritedValue) = 0;</div>
<div class="line"><a id="l00130" name="l00130"></a><span class="lineno"> 130</span> </div>
<div class="line"><a id="l00131" name="l00131"></a><span class="lineno"> 131</span> </div>
<div class="line"><a id="l00132" name="l00132"></a><span class="lineno"> 132</span> <span class="keyword">virtual</span> SynthesizedAttributeType evaluateSynthesizedAttribute(<a class="code hl_class" href="classSgNode.html">SgNode</a>* n,</div>
<div class="line"><a id="l00133" name="l00133"></a><span class="lineno"> 133</span> InheritedAttributeType in,</div>
<div class="line"><a id="l00134" name="l00134"></a><span class="lineno"> 134</span> <a class="code hl_class" href="classStackFrameVector.html">SynthesizedAttributesList</a> l) = 0;</div>
<div class="line"><a id="l00135" name="l00135"></a><span class="lineno"> 135</span> </div>
<div class="line"><a id="l00136" name="l00136"></a><span class="lineno"> 136</span> </div>
<div class="line"><a id="l00137" name="l00137"></a><span class="lineno"> 137</span> <span class="keyword">typedef</span> <span class="keyword">typename</span> AstSuccessorsSelectors::SuccessorsContainer SuccessorsContainer;</div>
<div class="line"><a id="l00138" name="l00138"></a><span class="lineno"> 138</span> <span class="keyword">typedef</span> SuccessorsContainer& SuccessorsContainerRef;</div>
<div class="line"><a id="l00139" name="l00139"></a><span class="lineno"> 139</span> </div>
<div class="line"><a id="l00140" name="l00140"></a><span class="lineno"> 140</span> <span class="comment">// GB (09/25/2007): Feel free to override this to implement custom traversals, but see the</span></div>
<div class="line"><a id="l00141" name="l00141"></a><span class="lineno"> 141</span> <span class="comment">// comment for set_useDefaultIndexBasedTraversal() below!</span></div>
<div class="line"><a id="l00142" name="l00142"></a><span class="lineno"> 142</span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> setNodeSuccessors(<a class="code hl_class" href="classSgNode.html">SgNode</a>* node, SuccessorsContainer& succContainer);</div>
<div class="line"><a id="l00143" name="l00143"></a><span class="lineno"> 143</span> </div>
<div class="line"><a id="l00144" name="l00144"></a><span class="lineno"> 144</span> <span class="keyword">virtual</span> SynthesizedAttributeType defaultSynthesizedAttribute(InheritedAttributeType inh);</div>
<div class="line"><a id="l00145" name="l00145"></a><span class="lineno"> 145</span> </div>
<div class="line"><a id="l00146" name="l00146"></a><span class="lineno"> 146</span> <span class="comment">// GB (06/04/2007): A new virtual function called at the start of the</span></div>
<div class="line"><a id="l00147" name="l00147"></a><span class="lineno"> 147</span> <span class="comment">// traversal, before any node is actually visited; can be used to</span></div>
<div class="line"><a id="l00148" name="l00148"></a><span class="lineno"> 148</span> <span class="comment">// compute attributes that may have changed since the constructor was</span></div>
<div class="line"><a id="l00149" name="l00149"></a><span class="lineno"> 149</span> <span class="comment">// executed, but are constant during the traversal itself. A no-op by</span></div>
<div class="line"><a id="l00150" name="l00150"></a><span class="lineno"> 150</span> <span class="comment">// default. If you don't know what you would use this for, ignore it.</span></div>
<div class="line"><a id="l00151" name="l00151"></a><span class="lineno"> 151</span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> atTraversalStart();</div>
<div class="line"><a id="l00152" name="l00152"></a><span class="lineno"> 152</span> <span class="comment">// GB (06/13/2007): Added this just for symmetry, not sure if it is</span></div>
<div class="line"><a id="l00153" name="l00153"></a><span class="lineno"> 153</span> <span class="comment">// useful, but it won't hurt to have it.</span></div>
<div class="line"><a id="l00154" name="l00154"></a><span class="lineno"> 154</span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> atTraversalEnd();</div>
<div class="line"><a id="l00155" name="l00155"></a><span class="lineno"> 155</span> </div>
<div class="line"><a id="l00156" name="l00156"></a><span class="lineno"> 156</span> <span class="comment">// GB (09/25/2007): This flag determines whether the new index-based traversal mechanism or the more general</span></div>
<div class="line"><a id="l00157" name="l00157"></a><span class="lineno"> 157</span> <span class="comment">// mechanism based on successor containers is to be used. Indexing should be faster, but it would be quite hard to</span></div>
<div class="line"><a id="l00158" name="l00158"></a><span class="lineno"> 158</span> <span class="comment">// adapt it to the reverse traversal and other specialized traversals. Thus: This is true by default, and anybody</span></div>
<div class="line"><a id="l00159" name="l00159"></a><span class="lineno"> 159</span> <span class="comment">// who overrides setNodeSuccessors() *must* change this to false to force the traversal to use their custom</span></div>
<div class="line"><a id="l00160" name="l00160"></a><span class="lineno"> 160</span> <span class="comment">// successor container.</span></div>
<div class="line"><a id="l00161" name="l00161"></a><span class="lineno"> 161</span> <span class="keywordtype">void</span> set_useDefaultIndexBasedTraversal(<span class="keywordtype">bool</span>);</div>
<div class="line"><a id="l00162" name="l00162"></a><span class="lineno"> 162</span><span class="keyword">private</span>:</div>
<div class="line"><a id="l00163" name="l00163"></a><span class="lineno"> 163</span> <span class="keywordtype">void</span> performTraversal(<a class="code hl_class" href="classSgNode.html">SgNode</a> *basenode,</div>
<div class="line"><a id="l00164" name="l00164"></a><span class="lineno"> 164</span> InheritedAttributeType inheritedValue,</div>
<div class="line"><a id="l00165" name="l00165"></a><span class="lineno"> 165</span> t_traverseOrder travOrder);</div>
<div class="line"><a id="l00166" name="l00166"></a><span class="lineno"> 166</span> SynthesizedAttributeType traversalResult();</div>
<div class="line"><a id="l00167" name="l00167"></a><span class="lineno"> 167</span> </div>
<div class="line"><a id="l00168" name="l00168"></a><span class="lineno"> 168</span> <span class="keywordtype">bool</span> useDefaultIndexBasedTraversal;</div>
<div class="line"><a id="l00169" name="l00169"></a><span class="lineno"> 169</span> <span class="keywordtype">bool</span> traversalConstraint;</div>
<div class="line"><a id="l00170" name="l00170"></a><span class="lineno"> 170</span> <a class="code hl_class" href="classSgFile.html">SgFile</a> *fileToVisit;</div>
<div class="line"><a id="l00171" name="l00171"></a><span class="lineno"> 171</span> </div>
<div class="line"><a id="l00172" name="l00172"></a><span class="lineno"> 172</span> <span class="comment">// stack of synthesized attributes; evaluateSynthesizedAttribute() is</span></div>
<div class="line"><a id="l00173" name="l00173"></a><span class="lineno"> 173</span> <span class="comment">// automagically called with the appropriate stack frame, which</span></div>
<div class="line"><a id="l00174" name="l00174"></a><span class="lineno"> 174</span> <span class="comment">// behaves like a non-resizable std::vector</span></div>
<div class="line"><a id="l00175" name="l00175"></a><span class="lineno"> 175</span> <a class="code hl_class" href="classStackFrameVector.html">SynthesizedAttributesList</a> *synthesizedAttributes;</div>
<div class="line"><a id="l00176" name="l00176"></a><span class="lineno"> 176</span>};</div>
</div>
<div class="line"><a id="l00177" name="l00177"></a><span class="lineno"> 177</span> </div>
<div class="line"><a id="l00178" name="l00178"></a><span class="lineno"> 178</span> </div>
<div class="line"><a id="l00179" name="l00179"></a><span class="lineno"> 179</span> </div>
<div class="line"><a id="l00180" name="l00180"></a><span class="lineno"> 180</span><span class="keyword">template</span> <<span class="keyword">class</span> InheritedAttributeType, <span class="keyword">class</span> SynthesizedAttributeType></div>
<div class="line"><a id="l00181" name="l00181"></a><span class="lineno"> 181</span><span class="keyword">class </span><a class="code hl_class" href="classAstCombinedTopDownBottomUpProcessing.html">AstCombinedTopDownBottomUpProcessing</a>;</div>
<div class="line"><a id="l00182" name="l00182"></a><span class="lineno"> 182</span> </div>
<div class="line"><a id="l00183" name="l00183"></a><span class="lineno"> 183</span><span class="keyword">template</span> <<span class="keyword">class</span> InheritedAttributeType, <span class="keyword">class</span> SynthesizedAttributeType></div>
<div class="foldopen" id="foldopen00184" data-start="{" data-end="};">
<div class="line"><a id="l00184" name="l00184"></a><span class="lineno"><a class="line" href="classAstTopDownBottomUpProcessing.html"> 184</a></span><span class="keyword">class </span><a class="code hl_class" href="classAstTopDownBottomUpProcessing.html">AstTopDownBottomUpProcessing</a></div>
<div class="line"><a id="l00185" name="l00185"></a><span class="lineno"> 185</span> : <span class="keyword">public</span> <a class="code hl_class" href="classSgTreeTraversal.html">SgTreeTraversal</a><InheritedAttributeType, SynthesizedAttributeType></div>
<div class="line"><a id="l00186" name="l00186"></a><span class="lineno"> 186</span>{ </div>
<div class="line"><a id="l00187" name="l00187"></a><span class="lineno"> 187</span><span class="keyword">public</span>:</div>
<div class="line"><a id="l00188" name="l00188"></a><span class="lineno"> 188</span> <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code hl_class" href="classSgTreeTraversal.html">SgTreeTraversal<InheritedAttributeType, SynthesizedAttributeType></a></div>
<div class="line"><a id="l00189" name="l00189"></a><span class="lineno"> 189</span> ::SynthesizedAttributesList <a class="code hl_class" href="classStackFrameVector.html">SynthesizedAttributesList</a>;</div>
<div class="line"><a id="l00190" name="l00190"></a><span class="lineno"> 190</span> </div>
<div class="line"><a id="l00191" name="l00191"></a><span class="lineno"> 191</span> <span class="comment">// deprecated</span></div>
<div class="line"><a id="l00192" name="l00192"></a><span class="lineno"> 192</span> <span class="keyword">typedef</span> <a class="code hl_class" href="classStackFrameVector.html">SynthesizedAttributesList</a> <a class="code hl_class" href="classStackFrameVector.html">SubTreeSynthesizedAttributes</a>;</div>
<div class="line"><a id="l00193" name="l00193"></a><span class="lineno"> 193</span> </div>
<div class="foldopen" id="foldopen00195" data-start="{" data-end="}">
<div class="line"><a id="l00195" name="l00195"></a><span class="lineno"><a class="line" href="classAstTopDownBottomUpProcessing.html#a91f66968e657cacdb1f72ef3fd0e31e4"> 195</a></span> SynthesizedAttributeType <a class="code hl_function" href="classAstTopDownBottomUpProcessing.html#a91f66968e657cacdb1f72ef3fd0e31e4">traverse</a>(<a class="code hl_class" href="classSgNode.html">SgNode</a>* node, InheritedAttributeType inheritedValue);</div>
<div class="line"><a id="l00196" name="l00196"></a><span class="lineno"> 196</span> </div>
<div class="line"><a id="l00197" name="l00197"></a><span class="lineno"> 197</span> </div>
<div class="line"><a id="l00198" name="l00198"></a><span class="lineno"> 198</span> </div>
<div class="line"><a id="l00199" name="l00199"></a><span class="lineno"> 199</span> </div>
<div class="line"><a id="l00200" name="l00200"></a><span class="lineno"> 200</span> </div>
<div class="line"><a id="l00201" name="l00201"></a><span class="lineno"> 201</span> </div>
<div class="foldopen" id="foldopen00203" data-start="{" data-end="}">
<div class="line"><a id="l00203" name="l00203"></a><span class="lineno"><a class="line" href="classAstTopDownBottomUpProcessing.html#a331aa075eaf60cb3400fd3b6c97f0dc3"> 203</a></span> SynthesizedAttributeType <a class="code hl_function" href="classAstTopDownBottomUpProcessing.html#a331aa075eaf60cb3400fd3b6c97f0dc3">traverseWithinFile</a>(<a class="code hl_class" href="classSgNode.html">SgNode</a>* node, InheritedAttributeType inheritedValue);</div>
<div class="line"><a id="l00204" name="l00204"></a><span class="lineno"> 204</span> </div>
<div class="line"><a id="l00205" name="l00205"></a><span class="lineno"> 205</span> </div>
<div class="line"><a id="l00206" name="l00206"></a><span class="lineno"> 206</span> <span class="keyword">friend</span> <span class="keyword">class </span><a class="code hl_class" href="classAstCombinedTopDownBottomUpProcessing.html">AstCombinedTopDownBottomUpProcessing</a><InheritedAttributeType, SynthesizedAttributeType>;</div>
<div class="line"><a id="l00207" name="l00207"></a><span class="lineno"> 207</span> </div>
<div class="line"><a id="l00208" name="l00208"></a><span class="lineno"> 208</span><span class="keyword">protected</span>:</div>
<div class="line"><a id="l00210" name="l00210"></a><span class="lineno"><a class="line" href="classAstTopDownBottomUpProcessing.html#a5499bed711133092951de318f5abd5e1"> 210</a></span> <span class="keyword">virtual</span> InheritedAttributeType <a class="code hl_function" href="classAstTopDownBottomUpProcessing.html#a5499bed711133092951de318f5abd5e1">evaluateInheritedAttribute</a>(<a class="code hl_class" href="classSgNode.html">SgNode</a>* astNode,</div>
<div class="line"><a id="l00211" name="l00211"></a><span class="lineno"> 211</span> InheritedAttributeType inheritedValue) = 0;</div>
<div class="line"><a id="l00212" name="l00212"></a><span class="lineno"> 212</span> </div>
<div class="line"><a id="l00217" name="l00217"></a><span class="lineno"><a class="line" href="classAstTopDownBottomUpProcessing.html#ab0410bc8008a2275fa90de8ebc4aba94"> 217</a></span> <span class="keyword">virtual</span> SynthesizedAttributeType <a class="code hl_function" href="classAstTopDownBottomUpProcessing.html#ab0410bc8008a2275fa90de8ebc4aba94">evaluateSynthesizedAttribute</a>(<a class="code hl_class" href="classSgNode.html">SgNode</a>*,</div>
<div class="line"><a id="l00218" name="l00218"></a><span class="lineno"> 218</span> InheritedAttributeType,</div>
<div class="line"><a id="l00219" name="l00219"></a><span class="lineno"> 219</span> <a class="code hl_class" href="classStackFrameVector.html">SynthesizedAttributesList</a>) = 0;</div>
<div class="line"><a id="l00220" name="l00220"></a><span class="lineno"> 220</span> </div>
<div class="line"><a id="l00221" name="l00221"></a><span class="lineno"> 221</span> </div>
<div class="line"><a id="l00222" name="l00222"></a><span class="lineno"> 222</span> </div>
<div class="foldopen" id="foldopen00226" data-start="{" data-end="}">
<div class="line"><a id="l00226" name="l00226"></a><span class="lineno"><a class="line" href="classAstTopDownBottomUpProcessing.html#a4e57fd480be2e24b9e4d2db2f197f96d"> 226</a></span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code hl_function" href="classAstTopDownBottomUpProcessing.html#a4e57fd480be2e24b9e4d2db2f197f96d">atTraversalStart</a>();</div>
<div class="line"><a id="l00227" name="l00227"></a><span class="lineno"> 227</span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> atTraversalEnd();</div>
<div class="line"><a id="l00228" name="l00228"></a><span class="lineno"> 228</span>};</div>
<div class="line"><a id="l00229" name="l00229"></a><span class="lineno"> 229</span> </div>
<div class="line"><a id="l00230" name="l00230"></a><span class="lineno"> 230</span><span class="keyword">template</span> <<span class="keyword">class</span> InheritedAttributeType></div>
<div class="line"><a id="l00231" name="l00231"></a><span class="lineno"> 231</span><span class="keyword">class </span><a class="code hl_class" href="classAstCombinedTopDownProcessing.html">AstCombinedTopDownProcessing</a>;</div>
<div class="line"><a id="l00232" name="l00232"></a><span class="lineno"> 232</span> </div>
<div class="line"><a id="l00233" name="l00233"></a><span class="lineno"> 233</span><span class="keyword">template</span> <<span class="keyword">class</span> InheritedAttributeType></div>
<div class="line"><a id="l00234" name="l00234"></a><span class="lineno"><a class="line" href="classDistributedMemoryAnalysisPreTraversal.html"> 234</a></span><span class="keyword">class </span><a class="code hl_class" href="classDistributedMemoryAnalysisPreTraversal.html">DistributedMemoryAnalysisPreTraversal</a>;</div>
<div class="line"><a id="l00235" name="l00235"></a><span class="lineno"> 235</span> </div>
<div class="line"><a id="l00236" name="l00236"></a><span class="lineno"> 236</span><span class="keyword">template</span> <<span class="keyword">class</span> InheritedAttributeType></div>
<div class="foldopen" id="foldopen00237" data-start="{" data-end="};">
<div class="line"><a id="l00237" name="l00237"></a><span class="lineno"><a class="line" href="classAstTopDownProcessing.html"> 237</a></span><span class="keyword">class </span><a class="code hl_class" href="classAstTopDownProcessing.html">AstTopDownProcessing</a></div>
<div class="line"><a id="l00238" name="l00238"></a><span class="lineno"> 238</span> : <span class="keyword">public</span> <a class="code hl_class" href="classSgTreeTraversal.html">SgTreeTraversal</a><InheritedAttributeType, DummyAttribute></div>
<div class="line"><a id="l00239" name="l00239"></a><span class="lineno"> 239</span>{</div>
<div class="line"><a id="l00240" name="l00240"></a><span class="lineno"> 240</span><span class="keyword">public</span>:</div>
<div class="line"><a id="l00241" name="l00241"></a><span class="lineno"> 241</span> <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code hl_class" href="classSgTreeTraversal.html">SgTreeTraversal<InheritedAttributeType, DummyAttribute></a></div>
<div class="line"><a id="l00242" name="l00242"></a><span class="lineno"> 242</span> ::SynthesizedAttributesList SynthesizedAttributesList;</div>
<div class="line"><a id="l00243" name="l00243"></a><span class="lineno"> 243</span> </div>
<div class="foldopen" id="foldopen00245" data-start="{" data-end="}">
<div class="line"><a id="l00245" name="l00245"></a><span class="lineno"><a class="line" href="classAstTopDownProcessing.html#aaf2a0a692483be3a21a2463a92e6720c"> 245</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classAstTopDownProcessing.html#aaf2a0a692483be3a21a2463a92e6720c">traverse</a>(<a class="code hl_class" href="classSgNode.html">SgNode</a>* node, InheritedAttributeType inheritedValue);</div>
<div class="line"><a id="l00246" name="l00246"></a><span class="lineno"> 246</span> </div>
<div class="line"><a id="l00247" name="l00247"></a><span class="lineno"> 247</span> </div>
<div class="foldopen" id="foldopen00249" data-start="{" data-end="}">
<div class="line"><a id="l00249" name="l00249"></a><span class="lineno"><a class="line" href="classAstTopDownProcessing.html#af93b2fe2f3b020ae4311f4eec6378944"> 249</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classAstTopDownProcessing.html#af93b2fe2f3b020ae4311f4eec6378944">traverseWithinFile</a>(<a class="code hl_class" href="classSgNode.html">SgNode</a>* node, InheritedAttributeType inheritedValue);</div>
<div class="line"><a id="l00250" name="l00250"></a><span class="lineno"> 250</span> </div>
<div class="line"><a id="l00251" name="l00251"></a><span class="lineno"> 251</span> </div>
<div class="line"><a id="l00252" name="l00252"></a><span class="lineno"> 252</span> <span class="keyword">friend</span> <span class="keyword">class </span><a class="code hl_class" href="classAstCombinedTopDownProcessing.html">AstCombinedTopDownProcessing</a><InheritedAttributeType>;</div>
<div class="line"><a id="l00253" name="l00253"></a><span class="lineno"> 253</span> <span class="keyword">friend</span> <span class="keyword">class </span><a class="code hl_class" href="classDistributedMemoryAnalysisPreTraversal.html">DistributedMemoryAnalysisPreTraversal</a><InheritedAttributeType>;</div>
<div class="line"><a id="l00254" name="l00254"></a><span class="lineno"> 254</span> </div>
<div class="line"><a id="l00255" name="l00255"></a><span class="lineno"> 255</span><span class="keyword">protected</span>:</div>
<div class="line"><a id="l00257" name="l00257"></a><span class="lineno"><a class="line" href="classAstTopDownProcessing.html#ae9a222c724eb70a85248c82c2069ed05"> 257</a></span> <span class="keyword">virtual</span> InheritedAttributeType <a class="code hl_function" href="classAstTopDownProcessing.html#ae9a222c724eb70a85248c82c2069ed05">evaluateInheritedAttribute</a>(<a class="code hl_class" href="classSgNode.html">SgNode</a>* astNode,</div>
<div class="line"><a id="l00258" name="l00258"></a><span class="lineno"> 258</span> InheritedAttributeType inheritedValue) = 0;</div>
<div class="line"><a id="l00259" name="l00259"></a><span class="lineno"> 259</span> </div>
<div class="line"><a id="l00260" name="l00260"></a><span class="lineno"> 260</span> </div>
<div class="foldopen" id="foldopen00264" data-start="{" data-end="}">
<div class="line"><a id="l00264" name="l00264"></a><span class="lineno"><a class="line" href="classAstTopDownProcessing.html#a36ccf0c6b8acbcd3e81315bf4bfd91bc"> 264</a></span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code hl_function" href="classAstTopDownProcessing.html#a36ccf0c6b8acbcd3e81315bf4bfd91bc">atTraversalStart</a>();</div>
<div class="line"><a id="l00265" name="l00265"></a><span class="lineno"> 265</span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> atTraversalEnd();</div>
<div class="line"><a id="l00266" name="l00266"></a><span class="lineno"> 266</span> <span class="comment">// GB (06/04/2007): This is a new virtual function, a no-op by</span></div>
<div class="line"><a id="l00267" name="l00267"></a><span class="lineno"> 267</span> <span class="comment">// default. It is called for every node, after its successors have</span></div>
<div class="line"><a id="l00268" name="l00268"></a><span class="lineno"> 268</span> <span class="comment">// been visited, with the inherited attribute computed at this node.</span></div>
<div class="line"><a id="l00269" name="l00269"></a><span class="lineno"> 269</span> <span class="comment">// The intention is to be able to free any memory (or other resources)</span></div>
<div class="line"><a id="l00270" name="l00270"></a><span class="lineno"> 270</span> <span class="comment">// allocated by evaluateInheritedAttribute().</span></div>
<div class="line"><a id="l00271" name="l00271"></a><span class="lineno"> 271</span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> destroyInheritedValue(<a class="code hl_class" href="classSgNode.html">SgNode</a>*, InheritedAttributeType);</div>
<div class="line"><a id="l00272" name="l00272"></a><span class="lineno"> 272</span> </div>
<div class="line"><a id="l00273" name="l00273"></a><span class="lineno"> 273</span><span class="keyword">private</span>:</div>
<div class="line"><a id="l00274" name="l00274"></a><span class="lineno"> 274</span> DummyAttribute evaluateSynthesizedAttribute(<a class="code hl_class" href="classSgNode.html">SgNode</a>* astNode,</div>
<div class="line"><a id="l00275" name="l00275"></a><span class="lineno"> 275</span> InheritedAttributeType inheritedValue,</div>
<div class="line"><a id="l00276" name="l00276"></a><span class="lineno"> 276</span> SynthesizedAttributesList l);</div>
<div class="line"><a id="l00277" name="l00277"></a><span class="lineno"> 277</span> </div>
<div class="line"><a id="l00278" name="l00278"></a><span class="lineno"> 278</span> </div>
<div class="line"><a id="l00279" name="l00279"></a><span class="lineno"> 279</span> DummyAttribute defaultSynthesizedAttribute(InheritedAttributeType inh);</div>
<div class="line"><a id="l00280" name="l00280"></a><span class="lineno"> 280</span>};</div>
<div class="line"><a id="l00281" name="l00281"></a><span class="lineno"> 281</span> </div>
<div class="line"><a id="l00282" name="l00282"></a><span class="lineno"> 282</span><span class="keyword">template</span> <<span class="keyword">class</span> SynthesizedAttributeType></div>
<div class="line"><a id="l00283" name="l00283"></a><span class="lineno"> 283</span><span class="keyword">class </span><a class="code hl_class" href="classAstCombinedBottomUpProcessing.html">AstCombinedBottomUpProcessing</a>;</div>
<div class="line"><a id="l00284" name="l00284"></a><span class="lineno"> 284</span> </div>
<div class="line"><a id="l00285" name="l00285"></a><span class="lineno"> 285</span><span class="keyword">template</span> <<span class="keyword">class</span> InheritedAttributeType></div>
<div class="line"><a id="l00286" name="l00286"></a><span class="lineno"><a class="line" href="classDistributedMemoryAnalysisPostTraversal.html"> 286</a></span><span class="keyword">class </span><a class="code hl_class" href="classDistributedMemoryAnalysisPostTraversal.html">DistributedMemoryAnalysisPostTraversal</a>;</div>
<div class="line"><a id="l00287" name="l00287"></a><span class="lineno"> 287</span> </div>
<div class="line"><a id="l00288" name="l00288"></a><span class="lineno"> 288</span><span class="keyword">template</span> <<span class="keyword">class</span> SynthesizedAttributeType></div>
<div class="foldopen" id="foldopen00289" data-start="{" data-end="};">
<div class="line"><a id="l00289" name="l00289"></a><span class="lineno"><a class="line" href="classAstBottomUpProcessing.html"> 289</a></span><span class="keyword">class </span><a class="code hl_class" href="classAstBottomUpProcessing.html">AstBottomUpProcessing</a></div>
<div class="line"><a id="l00290" name="l00290"></a><span class="lineno"> 290</span> : <span class="keyword">public</span> <a class="code hl_class" href="classSgTreeTraversal.html">SgTreeTraversal</a><DummyAttribute,SynthesizedAttributeType></div>
<div class="line"><a id="l00291" name="l00291"></a><span class="lineno"> 291</span>{</div>
<div class="line"><a id="l00292" name="l00292"></a><span class="lineno"> 292</span><span class="keyword">public</span>:</div>
<div class="line"><a id="l00293" name="l00293"></a><span class="lineno"> 293</span> <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code hl_class" href="classSgTreeTraversal.html">SgTreeTraversal<DummyAttribute, SynthesizedAttributeType></a></div>
<div class="line"><a id="l00294" name="l00294"></a><span class="lineno"> 294</span> ::SynthesizedAttributesList SynthesizedAttributesList;</div>
<div class="line"><a id="l00295" name="l00295"></a><span class="lineno"> 295</span> </div>
<div class="line"><a id="l00296" name="l00296"></a><span class="lineno"> 296</span> <span class="comment">// deprecated</span></div>
<div class="line"><a id="l00297" name="l00297"></a><span class="lineno"> 297</span> <span class="keyword">typedef</span> SynthesizedAttributesList SubTreeSynthesizedAttributes; </div>
<div class="line"><a id="l00298" name="l00298"></a><span class="lineno"> 298</span> </div>
<div class="line"><a id="l00299" name="l00299"></a><span class="lineno"> 299</span> </div>
<div class="line"><a id="l00300" name="l00300"></a><span class="lineno"> 300</span> </div>
<div class="foldopen" id="foldopen00302" data-start="{" data-end="}">
<div class="line"><a id="l00302" name="l00302"></a><span class="lineno"><a class="line" href="classAstBottomUpProcessing.html#a355f1ac96e9c1d2cd9e2e77048064e86"> 302</a></span> SynthesizedAttributeType <a class="code hl_function" href="classAstBottomUpProcessing.html#a355f1ac96e9c1d2cd9e2e77048064e86">traverse</a>(<a class="code hl_class" href="classSgNode.html">SgNode</a>* node);</div>
<div class="line"><a id="l00303" name="l00303"></a><span class="lineno"> 303</span> </div>
<div class="line"><a id="l00304" name="l00304"></a><span class="lineno"> 304</span> </div>
<div class="foldopen" id="foldopen00306" data-start="{" data-end="}">
<div class="line"><a id="l00306" name="l00306"></a><span class="lineno"><a class="line" href="classAstBottomUpProcessing.html#af386e2350fc8167cacb6f7f4c3792d11"> 306</a></span> SynthesizedAttributeType <a class="code hl_function" href="classAstBottomUpProcessing.html#af386e2350fc8167cacb6f7f4c3792d11">traverseWithinFile</a>(<a class="code hl_class" href="classSgNode.html">SgNode</a>* node);</div>
<div class="line"><a id="l00307" name="l00307"></a><span class="lineno"> 307</span> </div>
<div class="line"><a id="l00308" name="l00308"></a><span class="lineno"> 308</span> </div>
<div class="foldopen" id="foldopen00310" data-start="{" data-end="}">
<div class="line"><a id="l00310" name="l00310"></a><span class="lineno"><a class="line" href="classAstBottomUpProcessing.html#a1e9e65a2ddae45b0e9ccbf546fb5e071"> 310</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="classAstBottomUpProcessing.html#a1e9e65a2ddae45b0e9ccbf546fb5e071">traverseInputFiles</a>(<a class="code hl_class" href="classSgProject.html">SgProject</a>* projectNode);</div>
<div class="line"><a id="l00311" name="l00311"></a><span class="lineno"> 311</span> </div>
<div class="line"><a id="l00312" name="l00312"></a><span class="lineno"> 312</span> <span class="keyword">friend</span> <span class="keyword">class </span><a class="code hl_class" href="classAstCombinedBottomUpProcessing.html">AstCombinedBottomUpProcessing</a><SynthesizedAttributeType>;</div>
<div class="line"><a id="l00313" name="l00313"></a><span class="lineno"> 313</span> <span class="keyword">friend</span> <span class="keyword">class </span><a class="code hl_class" href="classDistributedMemoryAnalysisPostTraversal.html">DistributedMemoryAnalysisPostTraversal</a><SynthesizedAttributeType>;</div>
<div class="line"><a id="l00314" name="l00314"></a><span class="lineno"> 314</span> </div>
<div class="line"><a id="l00315" name="l00315"></a><span class="lineno"> 315</span><span class="keyword">protected</span>:</div>
<div class="line"><a id="l00320" name="l00320"></a><span class="lineno"><a class="line" href="classAstBottomUpProcessing.html#ae9334e41f59bee62347b1524898b1277"> 320</a></span> <span class="keyword">virtual</span> SynthesizedAttributeType <a class="code hl_function" href="classAstBottomUpProcessing.html#ae9334e41f59bee62347b1524898b1277">evaluateSynthesizedAttribute</a>(<a class="code hl_class" href="classSgNode.html">SgNode</a>*, SynthesizedAttributesList) = 0;</div>
<div class="line"><a id="l00321" name="l00321"></a><span class="lineno"> 321</span> </div>
<div class="line"><a id="l00322" name="l00322"></a><span class="lineno"> 322</span> </div>
<div class="foldopen" id="foldopen00326" data-start="{" data-end="}">
<div class="line"><a id="l00326" name="l00326"></a><span class="lineno"><a class="line" href="classAstBottomUpProcessing.html#a822375c5d12a1d41e9161fbe8135e2d3"> 326</a></span> <span class="keyword">virtual</span> SynthesizedAttributeType <a class="code hl_function" href="classAstBottomUpProcessing.html#a822375c5d12a1d41e9161fbe8135e2d3">defaultSynthesizedAttribute</a>();</div>
<div class="foldopen" id="foldopen00330" data-start="{" data-end="}">
<div class="line"><a id="l00330" name="l00330"></a><span class="lineno"><a class="line" href="classAstBottomUpProcessing.html#a2e79fa23103e6856d7fc07c851734ddd"> 330</a></span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code hl_function" href="classAstBottomUpProcessing.html#a2e79fa23103e6856d7fc07c851734ddd">atTraversalStart</a>();</div>
<div class="line"><a id="l00331" name="l00331"></a><span class="lineno"> 331</span> <span class="keyword">virtual</span> <span class="keywordtype">void</span> atTraversalEnd();</div>
<div class="line"><a id="l00332" name="l00332"></a><span class="lineno"> 332</span> </div>
<div class="line"><a id="l00333" name="l00333"></a><span class="lineno"> 333</span><span class="keyword">private</span>:</div>
<div class="line"><a id="l00334" name="l00334"></a><span class="lineno"> 334</span> <span class="keyword">virtual</span> DummyAttribute evaluateInheritedAttribute(<a class="code hl_class" href="classSgNode.html">SgNode</a>* astNode, DummyAttribute inheritedValue);</div>
<div class="line"><a id="l00335" name="l00335"></a><span class="lineno"> 335</span> </div>
<div class="line"><a id="l00336" name="l00336"></a><span class="lineno"> 336</span> </div>
<div class="line"><a id="l00337" name="l00337"></a><span class="lineno"> 337</span> <span class="keyword">virtual</span> SynthesizedAttributeType <a class="code hl_function" href="classAstBottomUpProcessing.html#ae9334e41f59bee62347b1524898b1277">evaluateSynthesizedAttribute</a>(<a class="code hl_class" href="classSgNode.html">SgNode</a>* astNode, DummyAttribute inheritedValue, SynthesizedAttributesList l);</div>
<div class="line"><a id="l00338" name="l00338"></a><span class="lineno"> 338</span> </div>
<div class="line"><a id="l00339" name="l00339"></a><span class="lineno"> 339</span> </div>
<div class="line"><a id="l00340" name="l00340"></a><span class="lineno"> 340</span> </div>
<div class="line"><a id="l00341" name="l00341"></a><span class="lineno"> 341</span> <span class="keyword">virtual</span> SynthesizedAttributeType <a class="code hl_function" href="classAstBottomUpProcessing.html#a822375c5d12a1d41e9161fbe8135e2d3">defaultSynthesizedAttribute</a>(DummyAttribute inheritedValue);</div>
<div class="line"><a id="l00342" name="l00342"></a><span class="lineno"> 342</span>};</div>
<div class="line"><a id="l00343" name="l00343"></a><span class="lineno"> 343</span> </div>
<div class="line"><a id="l00344" name="l00344"></a><span class="lineno"> 344</span><span class="comment">// deprecated classes (provided for compatibility with existing user code - will be removed at some point in future)</span></div>
<div class="line"><a id="l00345" name="l00345"></a><span class="lineno"><a class="line" href="classAstSynthesizedAttribute.html"> 345</a></span><span class="keyword">class </span><a class="code hl_class" href="classAstSynthesizedAttribute.html">AstSynthesizedAttribute</a> {};</div>
<div class="line"><a id="l00346" name="l00346"></a><span class="lineno"><a class="line" href="classAstInheritedAttribute.html"> 346</a></span><span class="keyword">class </span><a class="code hl_class" href="classAstInheritedAttribute.html">AstInheritedAttribute</a> {};</div>
<div class="line"><a id="l00347" name="l00347"></a><span class="lineno"> 347</span> </div>
<div class="line"><a id="l00349" name="l00349"></a><span class="lineno"><a class="line" href="classSgSynthesizedAttribute.html"> 349</a></span><span class="keyword">class </span><a class="code hl_class" href="classSgSynthesizedAttribute.html">SgSynthesizedAttribute</a> : <span class="keyword">public</span> <a class="code hl_class" href="classAstSynthesizedAttribute.html">AstSynthesizedAttribute</a> {};</div>
<div class="line"><a id="l00350" name="l00350"></a><span class="lineno"> 350</span> </div>
<div class="line"><a id="l00352" name="l00352"></a><span class="lineno"><a class="line" href="classSgInheritedAttribute.html"> 352</a></span><span class="keyword">class </span><a class="code hl_class" href="classSgInheritedAttribute.html">SgInheritedAttribute</a> : <span class="keyword">public</span> <a class="code hl_class" href="classAstInheritedAttribute.html">AstInheritedAttribute</a> {};</div>
<div class="line"><a id="l00353" name="l00353"></a><span class="lineno"> 353</span> </div>
<div class="line"><a id="l00354" name="l00354"></a><span class="lineno"> 354</span> </div>
<div class="line"><a id="l00357" name="l00357"></a><span class="lineno"> 357</span><span class="keyword">template</span> <<span class="keyword">class</span> InheritedAttributeType, <span class="keyword">class</span> SynthesizedAttributeType></div>
<div class="line"><a id="l00358" name="l00358"></a><span class="lineno"><a class="line" href="classSgTopDownBottomUpProcessing.html"> 358</a></span><span class="keyword">class </span><a class="code hl_class" href="classSgTopDownBottomUpProcessing.html">SgTopDownBottomUpProcessing</a> : <span class="keyword">public</span> <a class="code hl_class" href="classAstTopDownBottomUpProcessing.html">AstTopDownBottomUpProcessing</a> <InheritedAttributeType, SynthesizedAttributeType> {};</div>
<div class="line"><a id="l00359" name="l00359"></a><span class="lineno"> 359</span> </div>
<div class="line"><a id="l00361" name="l00361"></a><span class="lineno"> 361</span><span class="keyword">template</span> <<span class="keyword">class</span> InheritedAttributeType></div>
<div class="line"><a id="l00362" name="l00362"></a><span class="lineno"><a class="line" href="classSgTopDownProcessing.html"> 362</a></span><span class="keyword">class </span><a class="code hl_class" href="classSgTopDownProcessing.html">SgTopDownProcessing</a> : <span class="keyword">public</span> <a class="code hl_class" href="classAstTopDownProcessing.html">AstTopDownProcessing</a> <InheritedAttributeType> {};</div>
<div class="line"><a id="l00363" name="l00363"></a><span class="lineno"> 363</span> </div>
<div class="line"><a id="l00365" name="l00365"></a><span class="lineno"> 365</span><span class="keyword">template</span> <<span class="keyword">class</span> SynthesizedAttributeType></div>
<div class="line"><a id="l00366" name="l00366"></a><span class="lineno"><a class="line" href="classSgBottomUpProcessing.html"> 366</a></span><span class="keyword">class </span><a class="code hl_class" href="classSgBottomUpProcessing.html">SgBottomUpProcessing</a> : <span class="keyword">public</span> <a class="code hl_class" href="classAstBottomUpProcessing.html">AstBottomUpProcessing</a> <SynthesizedAttributeType> {};</div>
<div class="line"><a id="l00367" name="l00367"></a><span class="lineno"> 367</span> </div>
<div class="line"><a id="l00368" name="l00368"></a><span class="lineno"> 368</span><span class="comment">// Original Author (AstProcessing classes): Markus Schordan</span></div>
<div class="line"><a id="l00369" name="l00369"></a><span class="lineno"> 369</span><span class="comment">// Rewritten by: Gergo Barany</span></div>
<div class="line"><a id="l00370" name="l00370"></a><span class="lineno"> 370</span><span class="comment">// $Id: AstProcessing.C,v 1.10 2008/01/25 02:25:48 dquinlan Exp $</span></div>
<div class="line"><a id="l00371" name="l00371"></a><span class="lineno"> 371</span> </div>
<div class="line"><a id="l00372" name="l00372"></a><span class="lineno"> 372</span><span class="comment">// For information about the changes introduced during the rewrite, see</span></div>
<div class="line"><a id="l00373" name="l00373"></a><span class="lineno"> 373</span><span class="comment">// the comment in AstProcessing.h</span></div>
<div class="line"><a id="l00374" name="l00374"></a><span class="lineno"> 374</span> </div>
<div class="line"><a id="l00375" name="l00375"></a><span class="lineno"> 375</span><span class="keyword">template</span><<span class="keyword">class</span> InheritedAttributeType, <span class="keyword">class</span> SynthesizedAttributeType></div>
<div class="line"><a id="l00376" name="l00376"></a><span class="lineno"> 376</span><span class="keywordtype">void</span></div>
<div class="line"><a id="l00377" name="l00377"></a><span class="lineno"> 377</span><a class="code hl_class" href="classSgTreeTraversal.html">SgTreeTraversal<InheritedAttributeType, SynthesizedAttributeType>::</a></div>
<div class="line"><a id="l00378" name="l00378"></a><span class="lineno"> 378</span><a class="code hl_class" href="classSgTreeTraversal.html">setNodeSuccessors</a>(<a class="code hl_class" href="classSgNode.html">SgNode</a>* node, SuccessorsContainer& succContainer)</div>
<div class="line"><a id="l00379" name="l00379"></a><span class="lineno"> 379</span>{</div>
<div class="line"><a id="l00380" name="l00380"></a><span class="lineno"> 380</span> AstSuccessorsSelectors::selectDefaultSuccessors(node, succContainer);</div>
<div class="line"><a id="l00381" name="l00381"></a><span class="lineno"> 381</span>}</div>
<div class="line"><a id="l00382" name="l00382"></a><span class="lineno"> 382</span> </div>
<div class="line"><a id="l00383" name="l00383"></a><span class="lineno"> 383</span> </div>
<div class="line"><a id="l00384" name="l00384"></a><span class="lineno"> 384</span> </div>
<div class="line"><a id="l00385" name="l00385"></a><span class="lineno"> 385</span> </div>
<div class="line"><a id="l00386" name="l00386"></a><span class="lineno"> 386</span><span class="comment">// The default constructor of the internal tree traversal class</span></div>
<div class="line"><a id="l00387" name="l00387"></a><span class="lineno"> 387</span><span class="keyword">template</span><<span class="keyword">class</span> InheritedAttributeType, <span class="keyword">class</span> SynthesizedAttributeType></div>
<div class="line"><a id="l00388" name="l00388"></a><span class="lineno"> 388</span><a class="code hl_class" href="classSgTreeTraversal.html">SgTreeTraversal<InheritedAttributeType, SynthesizedAttributeType>::</a></div>
<div class="line"><a id="l00389" name="l00389"></a><span class="lineno"> 389</span><a class="code hl_class" href="classSgTreeTraversal.html">SgTreeTraversal</a>() </div>
<div class="line"><a id="l00390" name="l00390"></a><span class="lineno"> 390</span> : useDefaultIndexBasedTraversal(true),</div>
<div class="line"><a id="l00391" name="l00391"></a><span class="lineno"> 391</span> traversalConstraint(false),</div>
<div class="line"><a id="l00392" name="l00392"></a><span class="lineno"> 392</span> fileToVisit(nullptr),</div>
<div class="line"><a id="l00393" name="l00393"></a><span class="lineno"> 393</span> synthesizedAttributes(new SynthesizedAttributesList())</div>
<div class="line"><a id="l00394" name="l00394"></a><span class="lineno"> 394</span>{</div>
<div class="line"><a id="l00395" name="l00395"></a><span class="lineno"> 395</span>}</div>
<div class="line"><a id="l00396" name="l00396"></a><span class="lineno"> 396</span> </div>
<div class="line"><a id="l00397" name="l00397"></a><span class="lineno"> 397</span><span class="preprocessor">#ifndef SWIG</span></div>
<div class="line"><a id="l00398" name="l00398"></a><span class="lineno"> 398</span><span class="comment">// The destructor of the internal tree traversal class</span></div>
<div class="line"><a id="l00399" name="l00399"></a><span class="lineno"> 399</span><span class="keyword">template</span><<span class="keyword">class</span> InheritedAttributeType, <span class="keyword">class</span> SynthesizedAttributeType></div>
<div class="line"><a id="l00400" name="l00400"></a><span class="lineno"> 400</span><a class="code hl_class" href="classSgTreeTraversal.html">SgTreeTraversal<InheritedAttributeType, SynthesizedAttributeType>::</a></div>
<div class="line"><a id="l00401" name="l00401"></a><span class="lineno"> 401</span><a class="code hl_class" href="classSgTreeTraversal.html">~SgTreeTraversal</a>()</div>
<div class="line"><a id="l00402" name="l00402"></a><span class="lineno"> 402</span>{</div>
<div class="line"><a id="l00403" name="l00403"></a><span class="lineno"> 403</span> ASSERT_not_null(synthesizedAttributes);</div>
<div class="line"><a id="l00404" name="l00404"></a><span class="lineno"> 404</span> <span class="keyword">delete</span> synthesizedAttributes;</div>
<div class="line"><a id="l00405" name="l00405"></a><span class="lineno"> 405</span> synthesizedAttributes = <span class="keyword">nullptr</span>;</div>
<div class="line"><a id="l00406" name="l00406"></a><span class="lineno"> 406</span>}</div>
<div class="line"><a id="l00407" name="l00407"></a><span class="lineno"> 407</span> </div>
<div class="line"><a id="l00408" name="l00408"></a><span class="lineno"> 408</span> </div>
<div class="line"><a id="l00409" name="l00409"></a><span class="lineno"> 409</span><span class="preprocessor">#endif</span></div>
<div class="line"><a id="l00410" name="l00410"></a><span class="lineno"> 410</span> </div>
<div class="line"><a id="l00411" name="l00411"></a><span class="lineno"> 411</span> </div>
<div class="line"><a id="l00412" name="l00412"></a><span class="lineno"> 412</span><span class="comment">// DQ (3/30/2017): This is not called, but can not be removed (required for compiling ROSE).</span></div>
<div class="line"><a id="l00413" name="l00413"></a><span class="lineno"> 413</span><span class="keyword">template</span><<span class="keyword">class</span> InheritedAttributeType, <span class="keyword">class</span> SynthesizedAttributeType></div>
<div class="line"><a id="l00414" name="l00414"></a><span class="lineno"> 414</span><a class="code hl_class" href="classSgTreeTraversal.html">SgTreeTraversal<InheritedAttributeType, SynthesizedAttributeType>::</a></div>
<div class="line"><a id="l00415" name="l00415"></a><span class="lineno"> 415</span><a class="code hl_class" href="classSgTreeTraversal.html">SgTreeTraversal</a>(<span class="keyword">const</span> <a class="code hl_class" href="classSgTreeTraversal.html">SgTreeTraversal</a> &other)</div>
<div class="line"><a id="l00416" name="l00416"></a><span class="lineno"> 416</span> : useDefaultIndexBasedTraversal(other.useDefaultIndexBasedTraversal),</div>
<div class="line"><a id="l00417" name="l00417"></a><span class="lineno"> 417</span> traversalConstraint(other.traversalConstraint),</div>
<div class="line"><a id="l00418" name="l00418"></a><span class="lineno"> 418</span> fileToVisit(other.fileToVisit),</div>
<div class="line"><a id="l00419" name="l00419"></a><span class="lineno"> 419</span> synthesizedAttributes(other.synthesizedAttributes-><a class="code hl_function" href="namespaceSageInterface.html#a2da09930b7dad9871c9a1fd21f1f0710">deepCopy</a>())</div>
<div class="line"><a id="l00420" name="l00420"></a><span class="lineno"> 420</span>{</div>
<div class="line"><a id="l00421" name="l00421"></a><span class="lineno"> 421</span>}</div>
<div class="line"><a id="l00422" name="l00422"></a><span class="lineno"> 422</span> </div>
<div class="line"><a id="l00423" name="l00423"></a><span class="lineno"> 423</span> </div>
<div class="line"><a id="l00424" name="l00424"></a><span class="lineno"> 424</span><span class="comment">// DQ (3/30/2017): This is not called and is not required for Linux compilers, but appears </span></div>
<div class="line"><a id="l00425" name="l00425"></a><span class="lineno"> 425</span><span class="comment">// to be required when compiling with MSVC (Microsoft Windows).</span></div>
<div class="line"><a id="l00426" name="l00426"></a><span class="lineno"> 426</span><span class="keyword">template</span><<span class="keyword">class</span> InheritedAttributeType, <span class="keyword">class</span> SynthesizedAttributeType></div>
<div class="line"><a id="l00427" name="l00427"></a><span class="lineno"> 427</span><span class="keyword">const</span> <a class="code hl_class" href="classSgTreeTraversal.html">SgTreeTraversal<InheritedAttributeType, SynthesizedAttributeType></a> &</div>
<div class="line"><a id="l00428" name="l00428"></a><span class="lineno"> 428</span><a class="code hl_class" href="classSgTreeTraversal.html">SgTreeTraversal<InheritedAttributeType, SynthesizedAttributeType>::</a></div>
<div class="line"><a id="l00429" name="l00429"></a><span class="lineno"> 429</span><a class="code hl_class" href="classSgTreeTraversal.html">operator=</a>(<span class="keyword">const</span> <a class="code hl_class" href="classSgTreeTraversal.html">SgTreeTraversal</a> &other)</div>
<div class="line"><a id="l00430" name="l00430"></a><span class="lineno"> 430</span>{</div>
<div class="line"><a id="l00431" name="l00431"></a><span class="lineno"> 431</span> useDefaultIndexBasedTraversal = other.useDefaultIndexBasedTraversal;</div>
<div class="line"><a id="l00432" name="l00432"></a><span class="lineno"> 432</span> traversalConstraint = other.traversalConstraint;</div>
<div class="line"><a id="l00433" name="l00433"></a><span class="lineno"> 433</span> fileToVisit = other.fileToVisit;</div>
<div class="line"><a id="l00434" name="l00434"></a><span class="lineno"> 434</span> </div>
<div class="line"><a id="l00435" name="l00435"></a><span class="lineno"> 435</span> ASSERT_not_null(synthesizedAttributes);</div>
<div class="line"><a id="l00436" name="l00436"></a><span class="lineno"> 436</span> <span class="keyword">delete</span> synthesizedAttributes;</div>
<div class="line"><a id="l00437" name="l00437"></a><span class="lineno"> 437</span> synthesizedAttributes = other.synthesizedAttributes->deepCopy();</div>
<div class="line"><a id="l00438" name="l00438"></a><span class="lineno"> 438</span> </div>
<div class="line"><a id="l00439" name="l00439"></a><span class="lineno"> 439</span> <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div>
<div class="line"><a id="l00440" name="l00440"></a><span class="lineno"> 440</span>}</div>
<div class="line"><a id="l00441" name="l00441"></a><span class="lineno"> 441</span> </div>
<div class="line"><a id="l00442" name="l00442"></a><span class="lineno"> 442</span> </div>
<div class="line"><a id="l00443" name="l00443"></a><span class="lineno"> 443</span><span class="keyword">template</span><<span class="keyword">class</span> InheritedAttributeType, <span class="keyword">class</span> SynthesizedAttributeType></div>
<div class="line"><a id="l00444" name="l00444"></a><span class="lineno"> 444</span><span class="keywordtype">void</span></div>
<div class="line"><a id="l00445" name="l00445"></a><span class="lineno"> 445</span><a class="code hl_class" href="classSgTreeTraversal.html">SgTreeTraversal<InheritedAttributeType, SynthesizedAttributeType>::</a></div>
<div class="line"><a id="l00446" name="l00446"></a><span class="lineno"> 446</span><a class="code hl_class" href="classSgTreeTraversal.html">set_useDefaultIndexBasedTraversal</a>(<span class="keywordtype">bool</span> val)</div>
<div class="line"><a id="l00447" name="l00447"></a><span class="lineno"> 447</span>{</div>
<div class="line"><a id="l00448" name="l00448"></a><span class="lineno"> 448</span> useDefaultIndexBasedTraversal = val;</div>
<div class="line"><a id="l00449" name="l00449"></a><span class="lineno"> 449</span>}</div>
<div class="line"><a id="l00450" name="l00450"></a><span class="lineno"> 450</span> </div>
<div class="line"><a id="l00451" name="l00451"></a><span class="lineno"> 451</span><span class="comment">// MS: 03/22/02ROSE/tests/nonsmoke/functional/roseTests/astProcessingTests/</span></div>
<div class="line"><a id="l00452" name="l00452"></a><span class="lineno"> 452</span><span class="comment">// function to traverse all ASTs representing inputfiles (excluding include files), </span></div>
<div class="line"><a id="l00453" name="l00453"></a><span class="lineno"> 453</span><span class="keyword">template</span><<span class="keyword">class</span> InheritedAttributeType, <span class="keyword">class</span> SynthesizedAttributeType></div>
<div class="line"><a id="l00454" name="l00454"></a><span class="lineno"> 454</span><span class="keywordtype">void</span></div>
<div class="line"><a id="l00455" name="l00455"></a><span class="lineno"> 455</span><a class="code hl_class" href="classSgTreeTraversal.html">SgTreeTraversal<InheritedAttributeType, SynthesizedAttributeType>::</a></div>
<div class="line"><a id="l00456" name="l00456"></a><span class="lineno"> 456</span><a class="code hl_class" href="classSgTreeTraversal.html">traverseInputFiles</a>(<a class="code hl_class" href="classSgProject.html">SgProject</a>* projectNode,</div>
<div class="line"><a id="l00457" name="l00457"></a><span class="lineno"> 457</span> InheritedAttributeType inheritedValue,</div>
<div class="line"><a id="l00458" name="l00458"></a><span class="lineno"> 458</span> t_traverseOrder travOrder)</div>
<div class="line"><a id="l00459" name="l00459"></a><span class="lineno"> 459</span> {</div>
<div class="line"><a id="l00460" name="l00460"></a><span class="lineno"> 460</span> <span class="keyword">const</span> SgFilePtrList& fList = projectNode->get_fileList();</div>
<div class="line"><a id="l00461" name="l00461"></a><span class="lineno"> 461</span> </div>
<div class="line"><a id="l00462" name="l00462"></a><span class="lineno"> 462</span> <span class="comment">// DQ (9/1/2008): It is observed that this prevents a SgProject from being built on the generated DOT file!</span></div>
<div class="line"><a id="l00463" name="l00463"></a><span class="lineno"> 463</span> <span class="comment">// We might want a better design to be used here or call the evaluation directly to force the handling of </span></div>
<div class="line"><a id="l00464" name="l00464"></a><span class="lineno"> 464</span> <span class="comment">// inherited and synthesized attributes on the SgProject. This detail effect the handling of multiple</span></div>
<div class="line"><a id="l00465" name="l00465"></a><span class="lineno"> 465</span> <span class="comment">// files on the command line (something we want to get a global perspective on if possible).</span></div>
<div class="line"><a id="l00466" name="l00466"></a><span class="lineno"> 466</span> <span class="keywordflow">if</span> ( <a class="code hl_function" href="classSgProject.html#acc4f5deea195f1967735d804d21cf379">SgProject::get_verbose</a>() > 0 )</div>
<div class="line"><a id="l00467" name="l00467"></a><span class="lineno"> 467</span> printf (<span class="stringliteral">"Warning: The traverseInputFiles() iteration over the file list prevents the evaluation of inherited and synthesized attributes on the SgProject IR node! \n"</span>);</div>
<div class="line"><a id="l00468" name="l00468"></a><span class="lineno"> 468</span> </div>
<div class="line"><a id="l00469" name="l00469"></a><span class="lineno"> 469</span> <span class="keywordflow">for</span> (SgFilePtrList::const_iterator fl_iter = fList.begin(); fl_iter != fList.end(); fl_iter++)</div>
<div class="line"><a id="l00470" name="l00470"></a><span class="lineno"> 470</span> {</div>
<div class="line"><a id="l00471" name="l00471"></a><span class="lineno"> 471</span> ASSERT_not_null(*fl_iter);</div>
<div class="line"><a id="l00472" name="l00472"></a><span class="lineno"> 472</span> traverseWithinFile((*fl_iter), inheritedValue, travOrder);</div>
<div class="line"><a id="l00473" name="l00473"></a><span class="lineno"> 473</span> }</div>
<div class="line"><a id="l00474" name="l00474"></a><span class="lineno"> 474</span> }</div>
<div class="line"><a id="l00475" name="l00475"></a><span class="lineno"> 475</span> </div>
<div class="line"><a id="l00476" name="l00476"></a><span class="lineno"> 476</span> </div>
<div class="line"><a id="l00477" name="l00477"></a><span class="lineno"> 477</span> </div>
<div class="line"><a id="l00481" name="l00481"></a><span class="lineno"> 481</span> </div>
<div class="line"><a id="l00482" name="l00482"></a><span class="lineno"> 482</span> </div>
<div class="line"><a id="l00483" name="l00483"></a><span class="lineno"> 483</span><span class="comment">// MS: 04/25/02</span></div>
<div class="line"><a id="l00484" name="l00484"></a><span class="lineno"> 484</span><span class="keyword">template</span> <<span class="keyword">class</span> InheritedAttributeType, <span class="keyword">class</span> SynthesizedAttributeType></div>
<div class="line"><a id="l00485" name="l00485"></a><span class="lineno"> 485</span>SynthesizedAttributeType </div>
<div class="foldopen" id="foldopen00486" data-start="{" data-end="}">
<div class="line"><a id="l00486" name="l00486"></a><span class="lineno"><a class="line" href="classAstTopDownBottomUpProcessing.html#a91f66968e657cacdb1f72ef3fd0e31e4"> 486</a></span><a class="code hl_function" href="classAstTopDownBottomUpProcessing.html#a91f66968e657cacdb1f72ef3fd0e31e4">AstTopDownBottomUpProcessing<InheritedAttributeType, SynthesizedAttributeType>::</a></div>
<div class="line"><a id="l00487" name="l00487"></a><span class="lineno"> 487</span><a class="code hl_function" href="classAstTopDownBottomUpProcessing.html#a91f66968e657cacdb1f72ef3fd0e31e4">traverse</a>(<a class="code hl_class" href="classSgNode.html">SgNode</a>* node, InheritedAttributeType inheritedValue)</div>
<div class="line"><a id="l00488" name="l00488"></a><span class="lineno"> 488</span>{</div>
<div class="line"><a id="l00489" name="l00489"></a><span class="lineno"> 489</span> <span class="comment">// this is now explicitly marked as a pre *and* post order traversal</span></div>
<div class="line"><a id="l00490" name="l00490"></a><span class="lineno"> 490</span> <span class="keywordflow">return</span> <a class="code hl_class" href="classSgTreeTraversal.html">SgTreeTraversal<InheritedAttributeType, SynthesizedAttributeType></a></div>
<div class="line"><a id="l00491" name="l00491"></a><span class="lineno"> 491</span><a class="code hl_class" href="classSgTreeTraversal.html"> ::traverse</a>(node, inheritedValue, preandpostorder);</div>
<div class="line"><a id="l00492" name="l00492"></a><span class="lineno"> 492</span>}</div>
</div>
<div class="line"><a id="l00493" name="l00493"></a><span class="lineno"> 493</span> </div>
<div class="line"><a id="l00494" name="l00494"></a><span class="lineno"> 494</span> </div>
<div class="line"><a id="l00495" name="l00495"></a><span class="lineno"> 495</span><span class="comment">// MS: 04/25/02</span></div>
<div class="line"><a id="l00496" name="l00496"></a><span class="lineno"> 496</span><span class="keyword">template</span> <<span class="keyword">class</span> InheritedAttributeType, <span class="keyword">class</span> SynthesizedAttributeType></div>
<div class="line"><a id="l00497" name="l00497"></a><span class="lineno"> 497</span>SynthesizedAttributeType </div>
<div class="foldopen" id="foldopen00498" data-start="{" data-end="}">
<div class="line"><a id="l00498" name="l00498"></a><span class="lineno"><a class="line" href="classAstTopDownBottomUpProcessing.html#a331aa075eaf60cb3400fd3b6c97f0dc3"> 498</a></span><a class="code hl_function" href="classAstTopDownBottomUpProcessing.html#a331aa075eaf60cb3400fd3b6c97f0dc3">AstTopDownBottomUpProcessing<InheritedAttributeType, SynthesizedAttributeType>::</a></div>
<div class="line"><a id="l00499" name="l00499"></a><span class="lineno"> 499</span><a class="code hl_function" href="classAstTopDownBottomUpProcessing.html#a331aa075eaf60cb3400fd3b6c97f0dc3">traverseWithinFile</a>(<a class="code hl_class" href="classSgNode.html">SgNode</a>* node, InheritedAttributeType inheritedValue)</div>
<div class="line"><a id="l00500" name="l00500"></a><span class="lineno"> 500</span>{</div>
<div class="line"><a id="l00501" name="l00501"></a><span class="lineno"> 501</span> <span class="comment">// this is now explicitly marked as a pre *and* post order traversal</span></div>
<div class="line"><a id="l00502" name="l00502"></a><span class="lineno"> 502</span> <span class="keywordflow">return</span> <a class="code hl_class" href="classSgTreeTraversal.html">SgTreeTraversal<InheritedAttributeType, SynthesizedAttributeType>::traverseWithinFile</a>(node, inheritedValue, preandpostorder);</div>
<div class="line"><a id="l00503" name="l00503"></a><span class="lineno"> 503</span>}</div>
</div>
<div class="line"><a id="l00504" name="l00504"></a><span class="lineno"> 504</span> </div>
<div class="line"><a id="l00508" name="l00508"></a><span class="lineno"> 508</span> </div>
<div class="line"><a id="l00509" name="l00509"></a><span class="lineno"> 509</span><span class="comment">// MS: 04/25/02</span></div>
<div class="line"><a id="l00510" name="l00510"></a><span class="lineno"> 510</span><span class="keyword">template</span> <<span class="keyword">class</span> InheritedAttributeType></div>
<div class="line"><a id="l00511" name="l00511"></a><span class="lineno"> 511</span>DummyAttribute</div>
<div class="line"><a id="l00512" name="l00512"></a><span class="lineno"> 512</span><a class="code hl_class" href="classAstTopDownProcessing.html">AstTopDownProcessing<InheritedAttributeType>::</a></div>
<div class="line"><a id="l00513" name="l00513"></a><span class="lineno"> 513</span><a class="code hl_class" href="classAstTopDownProcessing.html">evaluateSynthesizedAttribute</a>(<a class="code hl_class" href="classSgNode.html">SgNode</a>* astNode,</div>
<div class="line"><a id="l00514" name="l00514"></a><span class="lineno"> 514</span> InheritedAttributeType inheritedValue,</div>
<div class="line"><a id="l00515" name="l00515"></a><span class="lineno"> 515</span> <span class="keyword">typename</span> AstTopDownProcessing<InheritedAttributeType>::SynthesizedAttributesList)</div>
<div class="line"><a id="l00516" name="l00516"></a><span class="lineno"> 516</span>{</div>
<div class="line"><a id="l00517" name="l00517"></a><span class="lineno"> 517</span> <span class="comment">// call the cleanup function</span></div>
<div class="line"><a id="l00518" name="l00518"></a><span class="lineno"> 518</span> destroyInheritedValue(astNode, inheritedValue);</div>
<div class="line"><a id="l00519" name="l00519"></a><span class="lineno"> 519</span> <span class="comment">// return value is not used</span></div>
<div class="line"><a id="l00520" name="l00520"></a><span class="lineno"> 520</span> DummyAttribute a = defaultDummyAttribute;</div>
<div class="line"><a id="l00521" name="l00521"></a><span class="lineno"> 521</span> <span class="keywordflow">return</span> a;</div>
<div class="line"><a id="l00522" name="l00522"></a><span class="lineno"> 522</span>}</div>
<div class="line"><a id="l00523" name="l00523"></a><span class="lineno"> 523</span> </div>
<div class="line"><a id="l00524" name="l00524"></a><span class="lineno"> 524</span> </div>
<div class="line"><a id="l00525" name="l00525"></a><span class="lineno"> 525</span><span class="comment">// MS: 07/30/04</span></div>
<div class="line"><a id="l00526" name="l00526"></a><span class="lineno"> 526</span><span class="keyword">template</span> <<span class="keyword">class</span> InheritedAttributeType></div>
<div class="line"><a id="l00527" name="l00527"></a><span class="lineno"> 527</span>DummyAttribute</div>
<div class="line"><a id="l00528" name="l00528"></a><span class="lineno"> 528</span><a class="code hl_class" href="classAstTopDownProcessing.html">AstTopDownProcessing<InheritedAttributeType>::</a></div>
<div class="line"><a id="l00529" name="l00529"></a><span class="lineno"> 529</span><a class="code hl_class" href="classAstTopDownProcessing.html">defaultSynthesizedAttribute</a>(InheritedAttributeType)</div>
<div class="line"><a id="l00530" name="l00530"></a><span class="lineno"> 530</span>{</div>
<div class="line"><a id="l00531" name="l00531"></a><span class="lineno"> 531</span> <span class="comment">// called but not used</span></div>
<div class="line"><a id="l00532" name="l00532"></a><span class="lineno"> 532</span> DummyAttribute a = defaultDummyAttribute;</div>
<div class="line"><a id="l00533" name="l00533"></a><span class="lineno"> 533</span> <span class="keywordflow">return</span> a;</div>
<div class="line"><a id="l00534" name="l00534"></a><span class="lineno"> 534</span>}</div>
<div class="line"><a id="l00535" name="l00535"></a><span class="lineno"> 535</span> </div>
<div class="line"><a id="l00536" name="l00536"></a><span class="lineno"> 536</span><span class="comment">// MS: 04/25/02</span></div>
<div class="line"><a id="l00537" name="l00537"></a><span class="lineno"> 537</span><span class="keyword">template</span> <<span class="keyword">class</span> InheritedAttributeType></div>
<div class="line"><a id="l00538" name="l00538"></a><span class="lineno"> 538</span><span class="keywordtype">void</span></div>
<div class="foldopen" id="foldopen00539" data-start="{" data-end="}">
<div class="line"><a id="l00539" name="l00539"></a><span class="lineno"><a class="line" href="classAstTopDownProcessing.html#aaf2a0a692483be3a21a2463a92e6720c"> 539</a></span><a class="code hl_function" href="classAstTopDownProcessing.html#aaf2a0a692483be3a21a2463a92e6720c">AstTopDownProcessing<InheritedAttributeType>::</a></div>
<div class="line"><a id="l00540" name="l00540"></a><span class="lineno"> 540</span><a class="code hl_function" href="classAstTopDownProcessing.html#aaf2a0a692483be3a21a2463a92e6720c">traverse</a>(<a class="code hl_class" href="classSgNode.html">SgNode</a>* node, InheritedAttributeType inheritedValue)</div>
<div class="line"><a id="l00541" name="l00541"></a><span class="lineno"> 541</span>{</div>
<div class="line"><a id="l00542" name="l00542"></a><span class="lineno"> 542</span> <span class="comment">// "top down" is now marked as a pre *and* post order traversal because</span></div>
<div class="line"><a id="l00543" name="l00543"></a><span class="lineno"> 543</span> <span class="comment">// there is a post order component (the call to destroyInheritedAttribute)</span></div>
<div class="line"><a id="l00544" name="l00544"></a><span class="lineno"> 544</span> <a class="code hl_class" href="classSgTreeTraversal.html">SgTreeTraversal<InheritedAttributeType, DummyAttribute></a></div>
<div class="line"><a id="l00545" name="l00545"></a><span class="lineno"> 545</span><a class="code hl_class" href="classSgTreeTraversal.html"> ::traverse</a>(node, inheritedValue, preandpostorder);</div>
<div class="line"><a id="l00546" name="l00546"></a><span class="lineno"> 546</span>}</div>
</div>
<div class="line"><a id="l00547" name="l00547"></a><span class="lineno"> 547</span> </div>
<div class="line"><a id="l00548" name="l00548"></a><span class="lineno"> 548</span> </div>
<div class="line"><a id="l00549" name="l00549"></a><span class="lineno"> 549</span><span class="comment">// MS: 09/30/02</span></div>
<div class="line"><a id="l00550" name="l00550"></a><span class="lineno"> 550</span><span class="keyword">template</span> <<span class="keyword">class</span> InheritedAttributeType></div>
<div class="line"><a id="l00551" name="l00551"></a><span class="lineno"> 551</span><span class="keywordtype">void</span></div>
<div class="foldopen" id="foldopen00552" data-start="{" data-end="}">
<div class="line"><a id="l00552" name="l00552"></a><span class="lineno"><a class="line" href="classAstTopDownProcessing.html#af93b2fe2f3b020ae4311f4eec6378944"> 552</a></span><a class="code hl_function" href="classAstTopDownProcessing.html#af93b2fe2f3b020ae4311f4eec6378944">AstTopDownProcessing<InheritedAttributeType>::</a></div>
<div class="line"><a id="l00553" name="l00553"></a><span class="lineno"> 553</span><a class="code hl_function" href="classAstTopDownProcessing.html#af93b2fe2f3b020ae4311f4eec6378944">traverseWithinFile</a>(<a class="code hl_class" href="classSgNode.html">SgNode</a>* node, InheritedAttributeType inheritedValue)</div>
<div class="line"><a id="l00554" name="l00554"></a><span class="lineno"> 554</span>{</div>
<div class="line"><a id="l00555" name="l00555"></a><span class="lineno"> 555</span> <span class="comment">// "top down" is now marked as a pre *and* post order traversal because</span></div>
<div class="line"><a id="l00556" name="l00556"></a><span class="lineno"> 556</span> <span class="comment">// there is a post order component (the call to destroyInheritedAttribute)</span></div>
<div class="line"><a id="l00557" name="l00557"></a><span class="lineno"> 557</span> <a class="code hl_class" href="classSgTreeTraversal.html">SgTreeTraversal<InheritedAttributeType, DummyAttribute>::traverseWithinFile</a>(node, inheritedValue, preandpostorder);</div>
<div class="line"><a id="l00558" name="l00558"></a><span class="lineno"> 558</span>}</div>
</div>
<div class="line"><a id="l00559" name="l00559"></a><span class="lineno"> 559</span> </div>
<div class="line"><a id="l00560" name="l00560"></a><span class="lineno"> 560</span> </div>
<div class="line"><a id="l00564" name="l00564"></a><span class="lineno"> 564</span> </div>
<div class="line"><a id="l00565" name="l00565"></a><span class="lineno"> 565</span> </div>
<div class="line"><a id="l00566" name="l00566"></a><span class="lineno"> 566</span><span class="comment">// MS: 04/25/02</span></div>
<div class="line"><a id="l00567" name="l00567"></a><span class="lineno"> 567</span><span class="keyword">template</span> <<span class="keyword">class</span> SynthesizedAttributeType></div>
<div class="line"><a id="l00568" name="l00568"></a><span class="lineno"> 568</span>DummyAttribute</div>
<div class="line"><a id="l00569" name="l00569"></a><span class="lineno"> 569</span><a class="code hl_class" href="classAstBottomUpProcessing.html">AstBottomUpProcessing<SynthesizedAttributeType>::</a></div>
<div class="line"><a id="l00570" name="l00570"></a><span class="lineno"> 570</span><a class="code hl_class" href="classAstBottomUpProcessing.html">evaluateInheritedAttribute</a>(<a class="code hl_class" href="classSgNode.html">SgNode</a>*, DummyAttribute <span class="comment">/*inheritedValue*/</span>)</div>
<div class="line"><a id="l00571" name="l00571"></a><span class="lineno"> 571</span>{</div>
<div class="line"><a id="l00572" name="l00572"></a><span class="lineno"> 572</span> <span class="comment">/* called but not used */</span></div>
<div class="line"><a id="l00573" name="l00573"></a><span class="lineno"> 573</span> DummyAttribute a = defaultDummyAttribute;</div>
<div class="line"><a id="l00574" name="l00574"></a><span class="lineno"> 574</span> <span class="keywordflow">return</span> a;</div>
<div class="line"><a id="l00575" name="l00575"></a><span class="lineno"> 575</span>}</div>
<div class="line"><a id="l00576" name="l00576"></a><span class="lineno"> 576</span> </div>
<div class="line"><a id="l00577" name="l00577"></a><span class="lineno"> 577</span> </div>
<div class="line"><a id="l00578" name="l00578"></a><span class="lineno"> 578</span> </div>
<div class="line"><a id="l00579" name="l00579"></a><span class="lineno"> 579</span><span class="comment">// MS: 30/07/04</span></div>
<div class="line"><a id="l00580" name="l00580"></a><span class="lineno"> 580</span><span class="keyword">template</span> <<span class="keyword">class</span> SynthesizedAttributeType></div>
<div class="foldopen" id="foldopen00581" data-start="{" data-end="}">
<div class="line"><a id="l00581" name="l00581"></a><span class="lineno"><a class="line" href="classAstBottomUpProcessing.html#a822375c5d12a1d41e9161fbe8135e2d3"> 581</a></span>SynthesizedAttributeType <a class="code hl_function" href="classAstBottomUpProcessing.html#a822375c5d12a1d41e9161fbe8135e2d3">AstBottomUpProcessing<SynthesizedAttributeType>::</a></div>
<div class="line"><a id="l00582" name="l00582"></a><span class="lineno"> 582</span><a class="code hl_function" href="classAstBottomUpProcessing.html#a822375c5d12a1d41e9161fbe8135e2d3">defaultSynthesizedAttribute</a>()</div>
<div class="line"><a id="l00583" name="l00583"></a><span class="lineno"> 583</span>{</div>
<div class="line"><a id="l00584" name="l00584"></a><span class="lineno"> 584</span> <span class="comment">// GB (8/6/2007): This can give "may not be initialized" warnings when</span></div>
<div class="line"><a id="l00585" name="l00585"></a><span class="lineno"> 585</span> <span class="comment">// compiling with optimization (because -O flags cause gcc to perform</span></div>
<div class="line"><a id="l00586" name="l00586"></a><span class="lineno"> 586</span> <span class="comment">// data-flow analysis). I wonder how this might be fixed.</span></div>
<div class="line"><a id="l00587" name="l00587"></a><span class="lineno"> 587</span> SynthesizedAttributeType s = SynthesizedAttributeType();</div>
<div class="line"><a id="l00588" name="l00588"></a><span class="lineno"> 588</span> <span class="keywordflow">return</span> s;</div>
<div class="line"><a id="l00589" name="l00589"></a><span class="lineno"> 589</span>}</div>
</div>
<div class="line"><a id="l00590" name="l00590"></a><span class="lineno"> 590</span> </div>
<div class="line"><a id="l00591" name="l00591"></a><span class="lineno"> 591</span><span class="comment">// MS: 30/07/04</span></div>
<div class="line"><a id="l00592" name="l00592"></a><span class="lineno"> 592</span><span class="keyword">template</span> <<span class="keyword">class</span> SynthesizedAttributeType></div>
<div class="line"><a id="l00593" name="l00593"></a><span class="lineno"> 593</span>SynthesizedAttributeType <a class="code hl_function" href="classAstBottomUpProcessing.html#a822375c5d12a1d41e9161fbe8135e2d3">AstBottomUpProcessing<SynthesizedAttributeType>::</a></div>
<div class="line"><a id="l00594" name="l00594"></a><span class="lineno"> 594</span><a class="code hl_function" href="classAstBottomUpProcessing.html#a822375c5d12a1d41e9161fbe8135e2d3">defaultSynthesizedAttribute</a>(DummyAttribute <span class="comment">/*inheritedValue*/</span>)</div>
<div class="line"><a id="l00595" name="l00595"></a><span class="lineno"> 595</span>{</div>
<div class="line"><a id="l00596" name="l00596"></a><span class="lineno"> 596</span> <span class="keywordflow">return</span> defaultSynthesizedAttribute();</div>
<div class="line"><a id="l00597" name="l00597"></a><span class="lineno"> 597</span>}</div>
<div class="line"><a id="l00598" name="l00598"></a><span class="lineno"> 598</span> </div>
<div class="line"><a id="l00599" name="l00599"></a><span class="lineno"> 599</span><span class="comment">// MS: 04/25/02//ENDEDIT</span></div>
<div class="line"><a id="l00600" name="l00600"></a><span class="lineno"> 600</span><span class="keyword">template</span> <<span class="keyword">class</span> SynthesizedAttributeType></div>
<div class="line"><a id="l00601" name="l00601"></a><span class="lineno"> 601</span>SynthesizedAttributeType <a class="code hl_function" href="classAstBottomUpProcessing.html#ae9334e41f59bee62347b1524898b1277">AstBottomUpProcessing<SynthesizedAttributeType>::</a></div>
<div class="line"><a id="l00602" name="l00602"></a><span class="lineno"> 602</span><a class="code hl_function" href="classAstBottomUpProcessing.html#ae9334e41f59bee62347b1524898b1277">evaluateSynthesizedAttribute</a>(<a class="code hl_class" href="classSgNode.html">SgNode</a>* astNode,</div>
<div class="line"><a id="l00603" name="l00603"></a><span class="lineno"> 603</span> DummyAttribute <span class="comment">/*inheritedValue*/</span>,</div>
<div class="line"><a id="l00604" name="l00604"></a><span class="lineno"> 604</span> SynthesizedAttributesList l)</div>
<div class="line"><a id="l00605" name="l00605"></a><span class="lineno"> 605</span>{</div>
<div class="line"><a id="l00606" name="l00606"></a><span class="lineno"> 606</span> <span class="keywordflow">return</span> evaluateSynthesizedAttribute(astNode, l);</div>
<div class="line"><a id="l00607" name="l00607"></a><span class="lineno"> 607</span>}</div>
<div class="line"><a id="l00608" name="l00608"></a><span class="lineno"> 608</span> </div>
<div class="line"><a id="l00609" name="l00609"></a><span class="lineno"> 609</span> </div>
<div class="line"><a id="l00610" name="l00610"></a><span class="lineno"> 610</span> </div>
<div class="line"><a id="l00611" name="l00611"></a><span class="lineno"> 611</span> </div>
<div class="line"><a id="l00612" name="l00612"></a><span class="lineno"> 612</span> </div>
<div class="line"><a id="l00613" name="l00613"></a><span class="lineno"> 613</span><span class="comment">// MS: 04/25/02</span></div>
<div class="line"><a id="l00614" name="l00614"></a><span class="lineno"> 614</span><span class="keyword">template</span> <<span class="keyword">class</span> SynthesizedAttributeType></div>
<div class="foldopen" id="foldopen00615" data-start="{" data-end="}">
<div class="line"><a id="l00615" name="l00615"></a><span class="lineno"><a class="line" href="classAstBottomUpProcessing.html#a355f1ac96e9c1d2cd9e2e77048064e86"> 615</a></span>SynthesizedAttributeType <a class="code hl_function" href="classAstBottomUpProcessing.html#a355f1ac96e9c1d2cd9e2e77048064e86">AstBottomUpProcessing<SynthesizedAttributeType>::</a></div>
<div class="line"><a id="l00616" name="l00616"></a><span class="lineno"> 616</span><a class="code hl_function" href="classAstBottomUpProcessing.html#a355f1ac96e9c1d2cd9e2e77048064e86">traverse</a>(<a class="code hl_class" href="classSgNode.html">SgNode</a>* node)</div>
<div class="line"><a id="l00617" name="l00617"></a><span class="lineno"> 617</span>{</div>
<div class="line"><a id="l00618" name="l00618"></a><span class="lineno"> 618</span> </div>
<div class="line"><a id="l00619" name="l00619"></a><span class="lineno"> 619</span> <span class="keyword">static</span> DummyAttribute da;</div>
<div class="line"><a id="l00620" name="l00620"></a><span class="lineno"> 620</span> <span class="keywordflow">return</span> <a class="code hl_class" href="classSgTreeTraversal.html">SgTreeTraversal<DummyAttribute, SynthesizedAttributeType></a></div>
<div class="line"><a id="l00621" name="l00621"></a><span class="lineno"> 621</span><a class="code hl_class" href="classSgTreeTraversal.html"> ::traverse</a>(node, da, postorder);</div>
<div class="line"><a id="l00622" name="l00622"></a><span class="lineno"> 622</span> </div>
<div class="line"><a id="l00623" name="l00623"></a><span class="lineno"> 623</span>}</div>
</div>
<div class="line"><a id="l00624" name="l00624"></a><span class="lineno"> 624</span> </div>
<div class="line"><a id="l00625" name="l00625"></a><span class="lineno"> 625</span><span class="comment">// MS: 04/25/02</span></div>
<div class="line"><a id="l00626" name="l00626"></a><span class="lineno"> 626</span><span class="keyword">template</span> <<span class="keyword">class</span> SynthesizedAttributeType></div>
<div class="foldopen" id="foldopen00627" data-start="{" data-end="}">
<div class="line"><a id="l00627" name="l00627"></a><span class="lineno"><a class="line" href="classAstBottomUpProcessing.html#af386e2350fc8167cacb6f7f4c3792d11"> 627</a></span>SynthesizedAttributeType <a class="code hl_function" href="classAstBottomUpProcessing.html#af386e2350fc8167cacb6f7f4c3792d11">AstBottomUpProcessing<SynthesizedAttributeType>::</a></div>
<div class="line"><a id="l00628" name="l00628"></a><span class="lineno"> 628</span><a class="code hl_function" href="classAstBottomUpProcessing.html#af386e2350fc8167cacb6f7f4c3792d11">traverseWithinFile</a>(<a class="code hl_class" href="classSgNode.html">SgNode</a>* node)</div>
<div class="line"><a id="l00629" name="l00629"></a><span class="lineno"> 629</span>{</div>
<div class="line"><a id="l00630" name="l00630"></a><span class="lineno"> 630</span> <span class="keyword">static</span> DummyAttribute da;</div>
<div class="line"><a id="l00631" name="l00631"></a><span class="lineno"> 631</span> <span class="keywordflow">return</span> <a class="code hl_class" href="classSgTreeTraversal.html">SgTreeTraversal<DummyAttribute, SynthesizedAttributeType>::traverseWithinFile</a>(node, da, postorder);</div>
<div class="line"><a id="l00632" name="l00632"></a><span class="lineno"> 632</span>}</div>
</div>
<div class="line"><a id="l00633" name="l00633"></a><span class="lineno"> 633</span> </div>
<div class="line"><a id="l00634" name="l00634"></a><span class="lineno"> 634</span> </div>
<div class="line"><a id="l00635" name="l00635"></a><span class="lineno"> 635</span> </div>
<div class="line"><a id="l00636" name="l00636"></a><span class="lineno"> 636</span><span class="comment">// MS: 04/25/02</span></div>
<div class="line"><a id="l00637" name="l00637"></a><span class="lineno"> 637</span><span class="keyword">template</span> <<span class="keyword">class</span> SynthesizedAttributeType></div>
<div class="foldopen" id="foldopen00638" data-start="{" data-end="}">
<div class="line"><a id="l00638" name="l00638"></a><span class="lineno"><a class="line" href="classAstBottomUpProcessing.html#a1e9e65a2ddae45b0e9ccbf546fb5e071"> 638</a></span><span class="keywordtype">void</span> <a class="code hl_function" href="classAstBottomUpProcessing.html#a1e9e65a2ddae45b0e9ccbf546fb5e071">AstBottomUpProcessing<SynthesizedAttributeType>::</a></div>
<div class="line"><a id="l00639" name="l00639"></a><span class="lineno"> 639</span><a class="code hl_function" href="classAstBottomUpProcessing.html#a1e9e65a2ddae45b0e9ccbf546fb5e071">traverseInputFiles</a>(<a class="code hl_class" href="classSgProject.html">SgProject</a>* projectNode)</div>
<div class="line"><a id="l00640" name="l00640"></a><span class="lineno"> 640</span>{</div>
<div class="line"><a id="l00641" name="l00641"></a><span class="lineno"> 641</span> <span class="keyword">static</span> DummyAttribute da;</div>
<div class="line"><a id="l00642" name="l00642"></a><span class="lineno"> 642</span> <span class="comment">// GB (8/6/2007): This is now a postorder traversal; this did not really</span></div>
<div class="line"><a id="l00643" name="l00643"></a><span class="lineno"> 643</span> <span class="comment">// matter until now, but now evaluateSynthesizedAttribute is only called</span></div>
<div class="line"><a id="l00644" name="l00644"></a><span class="lineno"> 644</span> <span class="comment">// for traversals that have the postorder bit set.</span></div>
<div class="line"><a id="l00645" name="l00645"></a><span class="lineno"> 645</span> <a class="code hl_class" href="classSgTreeTraversal.html">SgTreeTraversal<DummyAttribute, SynthesizedAttributeType></a></div>
<div class="line"><a id="l00646" name="l00646"></a><span class="lineno"> 646</span><a class="code hl_class" href="classSgTreeTraversal.html"> ::traverseInputFiles</a>(projectNode, da, postorder);</div>
<div class="line"><a id="l00647" name="l00647"></a><span class="lineno"> 647</span>}</div>
</div>
<div class="line"><a id="l00648" name="l00648"></a><span class="lineno"> 648</span><span class="preprocessor">#ifdef _MSC_VER</span></div>
<div class="line"><a id="l00649" name="l00649"></a><span class="lineno"> 649</span><span class="comment">//class BooleanQueryInheritedAttributeType;</span></div>
<div class="line"><a id="l00650" name="l00650"></a><span class="lineno"> 650</span><span class="preprocessor">#include "../astQuery/booleanQuery.h"</span></div>
<div class="line"><a id="l00651" name="l00651"></a><span class="lineno"> 651</span><span class="preprocessor">#include "../astQuery/booleanQueryInheritedAttribute.h"</span></div>
<div class="line"><a id="l00652" name="l00652"></a><span class="lineno"> 652</span><span class="preprocessor">#endif</span></div>
<div class="line"><a id="l00653" name="l00653"></a><span class="lineno"> 653</span><span class="comment">// MS: 07/29/04</span></div>
<div class="line"><a id="l00654" name="l00654"></a><span class="lineno"> 654</span><span class="keyword">template</span> <<span class="keyword">class</span> InheritedAttributeType, <span class="keyword">class</span> SynthesizedAttributeType></div>
<div class="line"><a id="l00655" name="l00655"></a><span class="lineno"> 655</span>SynthesizedAttributeType <a class="code hl_class" href="classSgTreeTraversal.html">SgTreeTraversal<InheritedAttributeType, SynthesizedAttributeType>::</a></div>
<div class="line"><a id="l00656" name="l00656"></a><span class="lineno"> 656</span><a class="code hl_class" href="classSgTreeTraversal.html">defaultSynthesizedAttribute</a>(InheritedAttributeType <span class="comment">/*inh*/</span>)</div>
<div class="line"><a id="l00657" name="l00657"></a><span class="lineno"> 657</span>{</div>
<div class="line"><a id="l00658" name="l00658"></a><span class="lineno"> 658</span> <span class="comment">// we provide 'inh' but do not use it in the constructor of 's' to allow primitive types</span></div>
<div class="line"><a id="l00659" name="l00659"></a><span class="lineno"> 659</span> SynthesizedAttributeType s = SynthesizedAttributeType(); </div>
<div class="line"><a id="l00660" name="l00660"></a><span class="lineno"> 660</span> <span class="keywordflow">return</span> s;</div>
<div class="line"><a id="l00661" name="l00661"></a><span class="lineno"> 661</span>}</div>
<div class="line"><a id="l00662" name="l00662"></a><span class="lineno"> 662</span> </div>
<div class="line"><a id="l00663" name="l00663"></a><span class="lineno"> 663</span><span class="comment">// MS: 09/30/02</span></div>
<div class="line"><a id="l00664" name="l00664"></a><span class="lineno"> 664</span><span class="keyword">template</span> <<span class="keyword">class</span> InheritedAttributeType, <span class="keyword">class</span> SynthesizedAttributeType></div>
<div class="line"><a id="l00665" name="l00665"></a><span class="lineno"> 665</span>SynthesizedAttributeType</div>
<div class="line"><a id="l00666" name="l00666"></a><span class="lineno"> 666</span><a class="code hl_class" href="classSgTreeTraversal.html">SgTreeTraversal<InheritedAttributeType, SynthesizedAttributeType>::</a></div>
<div class="line"><a id="l00667" name="l00667"></a><span class="lineno"> 667</span><a class="code hl_class" href="classSgTreeTraversal.html">traverseWithinFile</a>(<a class="code hl_class" href="classSgNode.html">SgNode</a>* node,</div>
<div class="line"><a id="l00668" name="l00668"></a><span class="lineno"> 668</span> InheritedAttributeType inheritedValue,</div>
<div class="line"><a id="l00669" name="l00669"></a><span class="lineno"> 669</span> t_traverseOrder treeTraversalOrder)</div>
<div class="line"><a id="l00670" name="l00670"></a><span class="lineno"> 670</span>{</div>
<div class="line"><a id="l00671" name="l00671"></a><span class="lineno"> 671</span> ASSERT_not_null(<span class="keyword">this</span>);</div>
<div class="line"><a id="l00672" name="l00672"></a><span class="lineno"> 672</span> traversalConstraint = <span class="keyword">true</span>;</div>
<div class="line"><a id="l00673" name="l00673"></a><span class="lineno"> 673</span> </div>
<div class="line"><a id="l00674" name="l00674"></a><span class="lineno"> 674</span> <a class="code hl_class" href="classSgFile.html">SgFile</a>* filenode = isSgFile(node);</div>
<div class="line"><a id="l00675" name="l00675"></a><span class="lineno"> 675</span> <span class="keywordflow">if</span> (filenode == <span class="keyword">nullptr</span>)</div>
<div class="line"><a id="l00676" name="l00676"></a><span class="lineno"> 676</span> {</div>
<div class="line"><a id="l00677" name="l00677"></a><span class="lineno"> 677</span> <span class="keywordflow">if</span> (node == <span class="keyword">nullptr</span>)</div>
<div class="line"><a id="l00678" name="l00678"></a><span class="lineno"> 678</span> {</div>
<div class="line"><a id="l00679" name="l00679"></a><span class="lineno"> 679</span> printf (<span class="stringliteral">"Error: traverseWithinFile(): (node should be non-null) node = %p \n"</span>,node);</div>
<div class="line"><a id="l00680" name="l00680"></a><span class="lineno"> 680</span> }</div>
<div class="line"><a id="l00681" name="l00681"></a><span class="lineno"> 681</span> <span class="keywordflow">else</span></div>
<div class="line"><a id="l00682" name="l00682"></a><span class="lineno"> 682</span> {</div>
<div class="line"><a id="l00683" name="l00683"></a><span class="lineno"> 683</span> <span class="comment">// DQ (4/22/2014): This will fail if the input is specified as a SgProject.</span></div>
<div class="line"><a id="l00684" name="l00684"></a><span class="lineno"> 684</span> printf (<span class="stringliteral">"Error: traverseWithinFile(): (node should be type SgFile) node = %p = %s \n"</span>,node,node-><a class="code hl_function" href="classSgNode.html#aa8723e70f7512769a015e94ca03224d2">class_name</a>().c_str());</div>
<div class="line"><a id="l00685" name="l00685"></a><span class="lineno"> 685</span> }</div>
<div class="line"><a id="l00686" name="l00686"></a><span class="lineno"> 686</span> }</div>
<div class="line"><a id="l00687" name="l00687"></a><span class="lineno"> 687</span> ASSERT_not_null(filenode); <span class="comment">// this function will be extended to work with all nodes soon</span></div>
<div class="line"><a id="l00688" name="l00688"></a><span class="lineno"> 688</span> </div>
<div class="line"><a id="l00689" name="l00689"></a><span class="lineno"> 689</span> <span class="comment">// GB (05/30/2007): changed to a SgFile* instead of a file name,</span></div>
<div class="line"><a id="l00690" name="l00690"></a><span class="lineno"> 690</span> <span class="comment">// comparisons are much cheaper this way</span></div>
<div class="line"><a id="l00691" name="l00691"></a><span class="lineno"> 691</span> fileToVisit = filenode;</div>
<div class="line"><a id="l00692" name="l00692"></a><span class="lineno"> 692</span> </div>
<div class="line"><a id="l00693" name="l00693"></a><span class="lineno"> 693</span><span class="preprocessor">#if 0</span></div>
<div class="line"><a id="l00694" name="l00694"></a><span class="lineno"> 694</span> <span class="comment">// DQ (8/17/2018): Added debugging support for new combined unparse tokens with unparse headers feature.</span></div>
<div class="line"><a id="l00695" name="l00695"></a><span class="lineno"> 695</span> std::string filename = fileToVisit != <span class="keyword">nullptr</span> ? fileToVisit-><a class="code hl_function" href="classSgFile.html#ab597719bce0e6b07dbeafc27fff37acb">getFileName</a>() : <span class="stringliteral">""</span>;</div>
<div class="line"><a id="l00696" name="l00696"></a><span class="lineno"> 696</span> printf (<span class="stringliteral">"In SgTreeTraversal<>::traverseWithinFile(): fileToVisit = %p filename = %s \n"</span>,fileToVisit,filename.c_str());</div>
<div class="line"><a id="l00697" name="l00697"></a><span class="lineno"> 697</span><span class="preprocessor">#endif</span></div>
<div class="line"><a id="l00698" name="l00698"></a><span class="lineno"> 698</span> </div>
<div class="line"><a id="l00699" name="l00699"></a><span class="lineno"> 699</span> ROSE_ASSERT(SgTreeTraversal_inFileToTraverse(node, traversalConstraint, fileToVisit) == <span class="keyword">true</span>);</div>
<div class="line"><a id="l00700" name="l00700"></a><span class="lineno"> 700</span> </div>
<div class="line"><a id="l00701" name="l00701"></a><span class="lineno"> 701</span> SynthesizedAttributeType synth = traverse(node, inheritedValue, treeTraversalOrder);</div>
<div class="line"><a id="l00702" name="l00702"></a><span class="lineno"> 702</span> </div>
<div class="line"><a id="l00703" name="l00703"></a><span class="lineno"> 703</span> traversalConstraint = <span class="keyword">false</span>;</div>
<div class="line"><a id="l00704" name="l00704"></a><span class="lineno"> 704</span> </div>
<div class="line"><a id="l00705" name="l00705"></a><span class="lineno"> 705</span> <span class="keywordflow">return</span> synth;</div>
<div class="line"><a id="l00706" name="l00706"></a><span class="lineno"> 706</span>}</div>
<div class="line"><a id="l00707" name="l00707"></a><span class="lineno"> 707</span> </div>
<div class="line"><a id="l00708" name="l00708"></a><span class="lineno"> 708</span> </div>
<div class="line"><a id="l00709" name="l00709"></a><span class="lineno"> 709</span> </div>
<div class="line"><a id="l00710" name="l00710"></a><span class="lineno"> 710</span> </div>
<div class="line"><a id="l00711" name="l00711"></a><span class="lineno"> 711</span><span class="comment">// GB (06/31/2007): Wrapper function around the performT</span></div>
<div class="line"><a id="l00712" name="l00712"></a><span class="lineno"> 712</span><span class="comment">//raversal()</span></div>
<div class="line"><a id="l00713" name="l00713"></a><span class="lineno"> 713</span><span class="comment">// function that does the real work; when that function is done, we call</span></div>
<div class="line"><a id="l00714" name="l00714"></a><span class="lineno"> 714</span><span class="comment">// traversalResult() to get the final result off the stack of synthesized</span></div>
<div class="line"><a id="l00715" name="l00715"></a><span class="lineno"> 715</span><span class="comment">// attributes.</span></div>
<div class="line"><a id="l00716" name="l00716"></a><span class="lineno"> 716</span><span class="comment">/*</span></div>
<div class="line"><a id="l00717" name="l00717"></a><span class="lineno"> 717</span><span class="comment">template <class InheritedAttributeType></span></div>
<div class="line"><a id="l00718" name="l00718"></a><span class="lineno"> 718</span><span class="comment">DummyAttribute</span></div>
<div class="line"><a id="l00719" name="l00719"></a><span class="lineno"> 719</span><span class="comment">AstTopDownProcessing<InheritedAttributeType>::</span></div>
<div class="line"><a id="l00720" name="l00720"></a><span class="lineno"> 720</span><span class="comment">defaultSynthesizedAttribute(InheritedAttributeType inh)</span></div>
<div class="line"><a id="l00721" name="l00721"></a><span class="lineno"> 721</span><span class="comment">{arentset.begin(); i != parentset.end(); i++) {</span></div>
<div class="line"><a id="l00722" name="l00722"></a><span class="lineno"> 722</span><span class="comment"> map<SgGraphNode*, InheritedAttribute</span></div>
<div class="line"><a id="l00723" name="l00723"></a><span class="lineno"> 723</span><span class="comment"> // called but not used</span></div>
<div class="line"><a id="l00724" name="l00724"></a><span class="lineno"> 724</span><span class="comment"> DummyAttribute a = defaultDummyAttribute;</span></div>
<div class="line"><a id="l00725" name="l00725"></a><span class="lineno"> 725</span><span class="comment"> return a;</span></div>
<div class="line"><a id="l00726" name="l00726"></a><span class="lineno"> 726</span><span class="comment">}</span></div>
<div class="line"><a id="l00727" name="l00727"></a><span class="lineno"> 727</span><span class="comment">*/</span></div>
<div class="line"><a id="l00728" name="l00728"></a><span class="lineno"> 728</span><span class="keyword">template</span> <<span class="keyword">class</span> InheritedAttributeType, <span class="keyword">class</span> SynthesizedAttributeType></div>
<div class="line"><a id="l00729" name="l00729"></a><span class="lineno"> 729</span>SynthesizedAttributeType <a class="code hl_class" href="classSgTreeTraversal.html">SgTreeTraversal<InheritedAttributeType, SynthesizedAttributeType>::</a></div>
<div class="line"><a id="l00730" name="l00730"></a><span class="lineno"> 730</span><a class="code hl_class" href="classSgTreeTraversal.html">traverse</a>(<a class="code hl_class" href="classSgNode.html">SgNode</a> *node, InheritedAttributeType inheritedValue,</div>
<div class="line"><a id="l00731" name="l00731"></a><span class="lineno"> 731</span> t_traverseOrder treeTraversalOrder)</div>
<div class="line"><a id="l00732" name="l00732"></a><span class="lineno"> 732</span>{</div>
<div class="line"><a id="l00733" name="l00733"></a><span class="lineno"> 733</span> <span class="comment">// make sure the stack is empty</span></div>
<div class="line"><a id="l00734" name="l00734"></a><span class="lineno"> 734</span> synthesizedAttributes->resetStack();</div>
<div class="line"><a id="l00735" name="l00735"></a><span class="lineno"> 735</span> ROSE_ASSERT(synthesizedAttributes->debugSize() == 0);</div>
<div class="line"><a id="l00736" name="l00736"></a><span class="lineno"> 736</span> </div>
<div class="line"><a id="l00737" name="l00737"></a><span class="lineno"> 737</span> <span class="comment">// notify the concrete traversal class that a traversal is starting</span></div>
<div class="line"><a id="l00738" name="l00738"></a><span class="lineno"> 738</span> atTraversalStart();</div>
<div class="line"><a id="l00739" name="l00739"></a><span class="lineno"> 739</span> </div>
<div class="line"><a id="l00740" name="l00740"></a><span class="lineno"> 740</span> <span class="comment">// perform the actual traversal</span></div>
<div class="line"><a id="l00741" name="l00741"></a><span class="lineno"> 741</span> performTraversal(node, inheritedValue, treeTraversalOrder);</div>
<div class="line"><a id="l00742" name="l00742"></a><span class="lineno"> 742</span> </div>
<div class="line"><a id="l00743" name="l00743"></a><span class="lineno"> 743</span> <span class="comment">// notify the traversal that we are done</span></div>
<div class="line"><a id="l00744" name="l00744"></a><span class="lineno"> 744</span> atTraversalEnd();</div>
<div class="line"><a id="l00745" name="l00745"></a><span class="lineno"> 745</span> </div>
<div class="line"><a id="l00746" name="l00746"></a><span class="lineno"> 746</span> <span class="comment">// get the result off the stack</span></div>
<div class="line"><a id="l00747" name="l00747"></a><span class="lineno"> 747</span> <span class="keywordflow">return</span> traversalResult();</div>
<div class="line"><a id="l00748" name="l00748"></a><span class="lineno"> 748</span>}</div>
<div class="line"><a id="l00749" name="l00749"></a><span class="lineno"> 749</span> </div>
<div class="line"><a id="l00750" name="l00750"></a><span class="lineno"> 750</span> </div>
<div class="line"><a id="l00751" name="l00751"></a><span class="lineno"> 751</span> </div>
<div class="line"><a id="l00752" name="l00752"></a><span class="lineno"> 752</span><span class="keyword">template</span><<span class="keyword">class</span> InheritedAttributeType, <span class="keyword">class</span> SynthesizedAttributeType></div>
<div class="line"><a id="l00753" name="l00753"></a><span class="lineno"> 753</span><span class="keywordtype">void</span></div>
<div class="line"><a id="l00754" name="l00754"></a><span class="lineno"> 754</span><a class="code hl_class" href="classSgTreeTraversal.html">SgTreeTraversal<InheritedAttributeType, SynthesizedAttributeType>::</a></div>
<div class="line"><a id="l00755" name="l00755"></a><span class="lineno"> 755</span><a class="code hl_class" href="classSgTreeTraversal.html">performTraversal</a>(<a class="code hl_class" href="classSgNode.html">SgNode</a>* node,</div>
<div class="line"><a id="l00756" name="l00756"></a><span class="lineno"> 756</span> InheritedAttributeType inheritedValue,</div>
<div class="line"><a id="l00757" name="l00757"></a><span class="lineno"> 757</span> t_traverseOrder treeTraversalOrder)</div>
<div class="line"><a id="l00758" name="l00758"></a><span class="lineno"> 758</span> {</div>
<div class="line"><a id="l00759" name="l00759"></a><span class="lineno"> 759</span> <span class="comment">//cout << "In SgNode version" << endl;</span></div>
<div class="line"><a id="l00760" name="l00760"></a><span class="lineno"> 760</span> <span class="comment">// 1. node can be a null pointer, only traverse it if !</span></div>
<div class="line"><a id="l00761" name="l00761"></a><span class="lineno"> 761</span> </div>
<div class="line"><a id="l00762" name="l00762"></a><span class="lineno"> 762</span> <span class="comment">// (since the SuccessorContainer is order preserving we require 0 values as well!)</span></div>
<div class="line"><a id="l00763" name="l00763"></a><span class="lineno"> 763</span> <span class="comment">// 2. inFileToTraverse is false if we are trying to go to a different file (than the input file)</span></div>
<div class="line"><a id="l00764" name="l00764"></a><span class="lineno"> 764</span> <span class="comment">// and only if traverseInputFiles was invoked, otherwise it's always true</span></div>
<div class="line"><a id="l00765" name="l00765"></a><span class="lineno"> 765</span> </div>
<div class="line"><a id="l00766" name="l00766"></a><span class="lineno"> 766</span> <span class="keywordflow">if</span> (node && SgTreeTraversal_inFileToTraverse(node, traversalConstraint, fileToVisit))</div>
<div class="line"><a id="l00767" name="l00767"></a><span class="lineno"> 767</span> {</div>
<div class="line"><a id="l00768" name="l00768"></a><span class="lineno"> 768</span> <span class="comment">// In case of a preorder traversal call the function to be applied to each node of the AST</span></div>
<div class="line"><a id="l00769" name="l00769"></a><span class="lineno"> 769</span> <span class="comment">// GB (7/6/2007): Because AstPrePostProcessing was introduced, a</span></div>
<div class="line"><a id="l00770" name="l00770"></a><span class="lineno"> 770</span> <span class="comment">// treeTraversalOrder can now be pre *and* post at the same time! The</span></div>
<div class="line"><a id="l00771" name="l00771"></a><span class="lineno"> 771</span> <span class="comment">// == comparison was therefore replaced by a bit mask check.</span></div>
<div class="line"><a id="l00772" name="l00772"></a><span class="lineno"> 772</span> <span class="keywordflow">if</span> (treeTraversalOrder & preorder)</div>
<div class="line"><a id="l00773" name="l00773"></a><span class="lineno"> 773</span> inheritedValue = evaluateInheritedAttribute(node, inheritedValue);</div>
<div class="line"><a id="l00774" name="l00774"></a><span class="lineno"> 774</span> </div>
<div class="line"><a id="l00775" name="l00775"></a><span class="lineno"> 775</span> <span class="comment">// Visit the traversable data members of this AST node.</span></div>
<div class="line"><a id="l00776" name="l00776"></a><span class="lineno"> 776</span> <span class="comment">// GB (09/25/2007): Added support for index-based traversals. The useDefaultIndexBasedTraversal flag tells us</span></div>
<div class="line"><a id="l00777" name="l00777"></a><span class="lineno"> 777</span> <span class="comment">// whether to use successor containers or direct index-based access to the node's successors.</span></div>
<div class="line"><a id="l00778" name="l00778"></a><span class="lineno"> 778</span> AstSuccessorsSelectors::SuccessorsContainer succContainer;</div>
<div class="line"><a id="l00779" name="l00779"></a><span class="lineno"> 779</span> <span class="keywordtype">size_t</span> numberOfSuccessors;</div>
<div class="line"><a id="l00780" name="l00780"></a><span class="lineno"> 780</span> <span class="keywordflow">if</span> (!useDefaultIndexBasedTraversal)</div>
<div class="line"><a id="l00781" name="l00781"></a><span class="lineno"> 781</span> {</div>
<div class="line"><a id="l00782" name="l00782"></a><span class="lineno"> 782</span> setNodeSuccessors(node, succContainer);</div>
<div class="line"><a id="l00783" name="l00783"></a><span class="lineno"> 783</span> numberOfSuccessors = succContainer.size();</div>
<div class="line"><a id="l00784" name="l00784"></a><span class="lineno"> 784</span> }</div>
<div class="line"><a id="l00785" name="l00785"></a><span class="lineno"> 785</span> <span class="keywordflow">else</span></div>
<div class="line"><a id="l00786" name="l00786"></a><span class="lineno"> 786</span> {</div>
<div class="line"><a id="l00787" name="l00787"></a><span class="lineno"> 787</span> numberOfSuccessors = node-><a class="code hl_function" href="classSgNode.html#a1114b78016dbb20ad0c4e6bf5da1d4aa">get_numberOfTraversalSuccessors</a>();</div>
<div class="line"><a id="l00788" name="l00788"></a><span class="lineno"> 788</span> }</div>
<div class="line"><a id="l00789" name="l00789"></a><span class="lineno"> 789</span> </div>
<div class="line"><a id="l00790" name="l00790"></a><span class="lineno"> 790</span><span class="preprocessor">#if 0</span></div>
<div class="line"><a id="l00791" name="l00791"></a><span class="lineno"> 791</span> <span class="comment">// DQ (8/17/2018): Add support for debugging.</span></div>
<div class="line"><a id="l00792" name="l00792"></a><span class="lineno"> 792</span> printf (<span class="stringliteral">"In SgTreeTraversal<>::performTraversal(): node = %p = %s numberOfSuccessors = %zu \n"</span>,node,node-><a class="code hl_function" href="classSgNode.html#aa8723e70f7512769a015e94ca03224d2">class_name</a>().c_str(),numberOfSuccessors);</div>
<div class="line"><a id="l00793" name="l00793"></a><span class="lineno"> 793</span><span class="preprocessor">#endif</span></div>
<div class="line"><a id="l00794" name="l00794"></a><span class="lineno"> 794</span> </div>
<div class="line"><a id="l00795" name="l00795"></a><span class="lineno"> 795</span> <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> idx = 0; idx < numberOfSuccessors; idx++)</div>
<div class="line"><a id="l00796" name="l00796"></a><span class="lineno"> 796</span> {</div>
<div class="line"><a id="l00797" name="l00797"></a><span class="lineno"> 797</span> <a class="code hl_class" href="classSgNode.html">SgNode</a>* child = <span class="keyword">nullptr</span>;</div>
<div class="line"><a id="l00798" name="l00798"></a><span class="lineno"> 798</span> </div>
<div class="line"><a id="l00799" name="l00799"></a><span class="lineno"> 799</span> <span class="keywordflow">if</span> (useDefaultIndexBasedTraversal)</div>
<div class="line"><a id="l00800" name="l00800"></a><span class="lineno"> 800</span> {</div>
<div class="line"><a id="l00801" name="l00801"></a><span class="lineno"> 801</span> child = node-><a class="code hl_function" href="classSgNode.html#acf6d63ae159dc932a992c6224c4122bf">get_traversalSuccessorByIndex</a>(idx);</div>
<div class="line"><a id="l00802" name="l00802"></a><span class="lineno"> 802</span> </div>
<div class="line"><a id="l00803" name="l00803"></a><span class="lineno"> 803</span> <span class="comment">// DQ (4/21/2014): Valgrind test to isolate uninitialised read reported where child is read below.</span></div>
<div class="line"><a id="l00804" name="l00804"></a><span class="lineno"> 804</span> ASSERT_require(child == <span class="keyword">nullptr</span> || child != <span class="keyword">nullptr</span>);</div>
<div class="line"><a id="l00805" name="l00805"></a><span class="lineno"> 805</span> }</div>
<div class="line"><a id="l00806" name="l00806"></a><span class="lineno"> 806</span> <span class="keywordflow">else</span></div>
<div class="line"><a id="l00807" name="l00807"></a><span class="lineno"> 807</span> {</div>
<div class="line"><a id="l00808" name="l00808"></a><span class="lineno"> 808</span> child = succContainer[idx];</div>
<div class="line"><a id="l00809" name="l00809"></a><span class="lineno"> 809</span> </div>
<div class="line"><a id="l00810" name="l00810"></a><span class="lineno"> 810</span> <span class="comment">// DQ (4/21/2014): Valgrind test to isolate uninitialised read reported where child is read below.</span></div>
<div class="line"><a id="l00811" name="l00811"></a><span class="lineno"> 811</span> ASSERT_require(child == <span class="keyword">nullptr</span> || child != <span class="keyword">nullptr</span>);</div>
<div class="line"><a id="l00812" name="l00812"></a><span class="lineno"> 812</span> }</div>
<div class="line"><a id="l00813" name="l00813"></a><span class="lineno"> 813</span> </div>
<div class="line"><a id="l00814" name="l00814"></a><span class="lineno"> 814</span><span class="preprocessor">#if 0</span></div>
<div class="line"><a id="l00815" name="l00815"></a><span class="lineno"> 815</span> <span class="comment">// DQ (8/17/2018): Add support for debugging.</span></div>
<div class="line"><a id="l00816" name="l00816"></a><span class="lineno"> 816</span> printf (<span class="stringliteral">"In SgTreeTraversal<>::performTraversal(): child = %p \n"</span>,child);</div>
<div class="line"><a id="l00817" name="l00817"></a><span class="lineno"> 817</span><span class="preprocessor">#endif</span></div>
<div class="line"><a id="l00818" name="l00818"></a><span class="lineno"> 818</span> </div>
<div class="line"><a id="l00819" name="l00819"></a><span class="lineno"> 819</span> <span class="keywordflow">if</span> (child != <span class="keyword">nullptr</span>)</div>
<div class="line"><a id="l00820" name="l00820"></a><span class="lineno"> 820</span> {</div>
<div class="line"><a id="l00821" name="l00821"></a><span class="lineno"> 821</span><span class="preprocessor">#if 0</span></div>
<div class="line"><a id="l00822" name="l00822"></a><span class="lineno"> 822</span> <span class="comment">// DQ (8/17/2018): Add support for debugging.</span></div>
<div class="line"><a id="l00823" name="l00823"></a><span class="lineno"> 823</span> printf (<span class="stringliteral">"In SgTreeTraversal<>::performTraversal(): child = %p = %s \n"</span>,child,child-><a class="code hl_function" href="classSgNode.html#aa8723e70f7512769a015e94ca03224d2">class_name</a>().c_str());</div>
<div class="line"><a id="l00824" name="l00824"></a><span class="lineno"> 824</span><span class="preprocessor">#endif</span></div>
<div class="line"><a id="l00825" name="l00825"></a><span class="lineno"> 825</span> performTraversal(child, inheritedValue, treeTraversalOrder);</div>
<div class="line"><a id="l00826" name="l00826"></a><span class="lineno"> 826</span> </div>
<div class="line"><a id="l00827" name="l00827"></a><span class="lineno"> 827</span> <span class="comment">// ENDEDIT</span></div>
<div class="line"><a id="l00828" name="l00828"></a><span class="lineno"> 828</span> }</div>
<div class="line"><a id="l00829" name="l00829"></a><span class="lineno"> 829</span> <span class="keywordflow">else</span></div>
<div class="line"><a id="l00830" name="l00830"></a><span class="lineno"> 830</span> {</div>
<div class="line"><a id="l00831" name="l00831"></a><span class="lineno"> 831</span> <span class="comment">// null pointer (not traversed): we put the default value(s) of SynthesizedAttribute onto the stack</span></div>
<div class="line"><a id="l00832" name="l00832"></a><span class="lineno"> 832</span> <span class="keywordflow">if</span> (treeTraversalOrder & postorder)</div>
<div class="line"><a id="l00833" name="l00833"></a><span class="lineno"> 833</span> synthesizedAttributes->push(defaultSynthesizedAttribute(inheritedValue));</div>
<div class="line"><a id="l00834" name="l00834"></a><span class="lineno"> 834</span> }</div>
<div class="line"><a id="l00835" name="l00835"></a><span class="lineno"> 835</span> }</div>
<div class="line"><a id="l00836" name="l00836"></a><span class="lineno"> 836</span> </div>
<div class="line"><a id="l00837" name="l00837"></a><span class="lineno"> 837</span> <span class="comment">// In case of a postorder traversal call the function to be applied to each node of the AST</span></div>
<div class="line"><a id="l00838" name="l00838"></a><span class="lineno"> 838</span> <span class="comment">// GB (7/6/2007): Because AstPrePostProcessing was introduced, a</span></div>
<div class="line"><a id="l00839" name="l00839"></a><span class="lineno"> 839</span> <span class="comment">// treeTraversalOrder can now be pre *and* post at the same time! The</span></div>
<div class="line"><a id="l00840" name="l00840"></a><span class="lineno"> 840</span> <span class="comment">// == comparison was therefore replaced by a bit mask check.</span></div>
<div class="line"><a id="l00841" name="l00841"></a><span class="lineno"> 841</span> <span class="comment">// The call to evaluateInheritedAttribute at this point also had to be</span></div>
<div class="line"><a id="l00842" name="l00842"></a><span class="lineno"> 842</span> <span class="comment">// changed; it was never elegant anyway as we were not really</span></div>
<div class="line"><a id="l00843" name="l00843"></a><span class="lineno"> 843</span> <span class="comment">// evaluating attributes here.</span></div>
<div class="line"><a id="l00844" name="l00844"></a><span class="lineno"> 844</span> <span class="keywordflow">if</span> (treeTraversalOrder & postorder)</div>
<div class="line"><a id="l00845" name="l00845"></a><span class="lineno"> 845</span> {</div>
<div class="line"><a id="l00846" name="l00846"></a><span class="lineno"> 846</span> <span class="comment">// Now that every child's synthesized attributes are on the stack:</span></div>
<div class="line"><a id="l00847" name="l00847"></a><span class="lineno"> 847</span> <span class="comment">// Tell the stack how big the stack frame containing those</span></div>
<div class="line"><a id="l00848" name="l00848"></a><span class="lineno"> 848</span> <span class="comment">// attributes is to be, and pass that frame to</span></div>
<div class="line"><a id="l00849" name="l00849"></a><span class="lineno"> 849</span> <span class="comment">// evaluateSynthesizedAttribute(); then replace those results by</span></div>
<div class="line"><a id="l00850" name="l00850"></a><span class="lineno"> 850</span> <span class="comment">// pushing the computed value onto the stack (which pops off the</span></div>
<div class="line"><a id="l00851" name="l00851"></a><span class="lineno"> 851</span> <span class="comment">// previous stack frame).</span></div>
<div class="line"><a id="l00852" name="l00852"></a><span class="lineno"> 852</span> synthesizedAttributes->setFrameSize(numberOfSuccessors);</div>
<div class="line"><a id="l00853" name="l00853"></a><span class="lineno"> 853</span> ROSE_ASSERT(synthesizedAttributes->size() == numberOfSuccessors);</div>
<div class="line"><a id="l00854" name="l00854"></a><span class="lineno"> 854</span> synthesizedAttributes->push(evaluateSynthesizedAttribute(node, inheritedValue, *synthesizedAttributes));</div>
<div class="line"><a id="l00855" name="l00855"></a><span class="lineno"> 855</span> }</div>
<div class="line"><a id="l00856" name="l00856"></a><span class="lineno"> 856</span> }</div>
<div class="line"><a id="l00857" name="l00857"></a><span class="lineno"> 857</span> <span class="keywordflow">else</span> <span class="comment">// if (node && inFileToTraverse(node))</span></div>
<div class="line"><a id="l00858" name="l00858"></a><span class="lineno"> 858</span> {</div>
<div class="line"><a id="l00859" name="l00859"></a><span class="lineno"> 859</span> <span class="keywordflow">if</span> (treeTraversalOrder & postorder)</div>
<div class="line"><a id="l00860" name="l00860"></a><span class="lineno"> 860</span> synthesizedAttributes->push(defaultSynthesizedAttribute(inheritedValue));</div>
<div class="line"><a id="l00861" name="l00861"></a><span class="lineno"> 861</span> }</div>
<div class="line"><a id="l00862" name="l00862"></a><span class="lineno"> 862</span> } <span class="comment">// function body</span></div>
<div class="line"><a id="l00863" name="l00863"></a><span class="lineno"> 863</span> </div>
<div class="line"><a id="l00864" name="l00864"></a><span class="lineno"> 864</span> </div>
<div class="line"><a id="l00865" name="l00865"></a><span class="lineno"> 865</span><span class="comment">// GB (05/30/2007)</span></div>
<div class="line"><a id="l00866" name="l00866"></a><span class="lineno"> 866</span><span class="keyword">template</span> <<span class="keyword">class</span> InheritedAttributeType, <span class="keyword">class</span> SynthesizedAttributeType></div>
<div class="line"><a id="l00867" name="l00867"></a><span class="lineno"> 867</span>SynthesizedAttributeType <a class="code hl_class" href="classSgTreeTraversal.html">SgTreeTraversal<InheritedAttributeType, SynthesizedAttributeType>::</a></div>
<div class="line"><a id="l00868" name="l00868"></a><span class="lineno"> 868</span><a class="code hl_class" href="classSgTreeTraversal.html">traversalResult</a>()</div>
<div class="line"><a id="l00869" name="l00869"></a><span class="lineno"> 869</span>{</div>
<div class="line"><a id="l00870" name="l00870"></a><span class="lineno"> 870</span> <span class="comment">// If the stack of synthesizedAttributes contains exactly one object, then</span></div>
<div class="line"><a id="l00871" name="l00871"></a><span class="lineno"> 871</span> <span class="comment">// that one is the valid final result of the computation, so we should</span></div>
<div class="line"><a id="l00872" name="l00872"></a><span class="lineno"> 872</span> <span class="comment">// return it. Otherwise, either there are no objects on the stack (because</span></div>
<div class="line"><a id="l00873" name="l00873"></a><span class="lineno"> 873</span> <span class="comment">// the traversal didn't use any attributes), or there are more than one</span></div>
<div class="line"><a id="l00874" name="l00874"></a><span class="lineno"> 874</span> <span class="comment">// (usually because the traversal exited prematurely by throwing an</span></div>
<div class="line"><a id="l00875" name="l00875"></a><span class="lineno"> 875</span> <span class="comment">// exception); in this case, just return a default attribute.</span></div>
<div class="line"><a id="l00876" name="l00876"></a><span class="lineno"> 876</span> <span class="keywordflow">if</span> (synthesizedAttributes->debugSize() == 1)</div>
<div class="line"><a id="l00877" name="l00877"></a><span class="lineno"> 877</span> {</div>
<div class="line"><a id="l00878" name="l00878"></a><span class="lineno"> 878</span> <span class="keywordflow">return</span> synthesizedAttributes->pop();</div>
<div class="line"><a id="l00879" name="l00879"></a><span class="lineno"> 879</span> }</div>
<div class="line"><a id="l00880" name="l00880"></a><span class="lineno"> 880</span> <span class="keywordflow">else</span></div>
<div class="line"><a id="l00881" name="l00881"></a><span class="lineno"> 881</span> {</div>
<div class="line"><a id="l00882" name="l00882"></a><span class="lineno"> 882</span> <span class="keyword">static</span> SynthesizedAttributeType sa;</div>
<div class="line"><a id="l00883" name="l00883"></a><span class="lineno"> 883</span> <span class="keywordflow">return</span> sa;</div>
<div class="line"><a id="l00884" name="l00884"></a><span class="lineno"> 884</span> }</div>
<div class="line"><a id="l00885" name="l00885"></a><span class="lineno"> 885</span>}</div>
<div class="line"><a id="l00886" name="l00886"></a><span class="lineno"> 886</span> </div>
<div class="line"><a id="l00887" name="l00887"></a><span class="lineno"> 887</span> </div>
<div class="line"><a id="l00888" name="l00888"></a><span class="lineno"> 888</span><span class="comment">// GB (05/30/2007)</span></div>
<div class="line"><a id="l00889" name="l00889"></a><span class="lineno"> 889</span><span class="keyword">template</span> <<span class="keyword">class</span> InheritedAttributeType, <span class="keyword">class</span> SynthesizedAttributeType></div>
<div class="line"><a id="l00890" name="l00890"></a><span class="lineno"> 890</span><span class="keywordtype">void</span></div>
<div class="line"><a id="l00891" name="l00891"></a><span class="lineno"> 891</span><a class="code hl_class" href="classSgTreeTraversal.html">SgTreeTraversal<InheritedAttributeType, SynthesizedAttributeType>::</a></div>
<div class="line"><a id="l00892" name="l00892"></a><span class="lineno"> 892</span><a class="code hl_class" href="classSgTreeTraversal.html">atTraversalStart</a>()</div>
<div class="line"><a id="l00893" name="l00893"></a><span class="lineno"> 893</span>{</div>
<div class="line"><a id="l00894" name="l00894"></a><span class="lineno"> 894</span>}</div>
<div class="line"><a id="l00895" name="l00895"></a><span class="lineno"> 895</span> </div>
<div class="line"><a id="l00896" name="l00896"></a><span class="lineno"> 896</span> </div>
<div class="line"><a id="l00897" name="l00897"></a><span class="lineno"> 897</span><span class="keyword">template</span> <<span class="keyword">class</span> InheritedAttributeType, <span class="keyword">class</span> SynthesizedAttributeType></div>
<div class="line"><a id="l00898" name="l00898"></a><span class="lineno"> 898</span><span class="keywordtype">void</span></div>
<div class="line"><a id="l00899" name="l00899"></a><span class="lineno"> 899</span><a class="code hl_class" href="classSgTreeTraversal.html">SgTreeTraversal<InheritedAttributeType, SynthesizedAttributeType>::</a></div>
<div class="line"><a id="l00900" name="l00900"></a><span class="lineno"> 900</span><a class="code hl_class" href="classSgTreeTraversal.html">atTraversalEnd</a>()</div>
<div class="line"><a id="l00901" name="l00901"></a><span class="lineno"> 901</span>{</div>
<div class="line"><a id="l00902" name="l00902"></a><span class="lineno"> 902</span>}</div>
<div class="line"><a id="l00903" name="l00903"></a><span class="lineno"> 903</span> </div>
<div class="line"><a id="l00904" name="l00904"></a><span class="lineno"> 904</span><span class="comment">/*</span></div>
<div class="line"><a id="l00905" name="l00905"></a><span class="lineno"> 905</span><span class="comment">template <class InheritedAttributeType, class SynthesizedAttributeType></span></div>
<div class="line"><a id="l00906" name="l00906"></a><span class="lineno"> 906</span><span class="comment">void</span></div>
<div class="line"><a id="l00907" name="l00907"></a><span class="lineno"> 907</span><span class="comment">SgTreeTraversal<InheritedAttributeType, SynthesizedAttributeType>::</span></div>
<div class="line"><a id="l00908" name="l00908"></a><span class="lineno"> 908</span><span class="comment">afterSingleTraversal()</span></div>
<div class="line"><a id="l00909" name="l00909"></a><span class="lineno"> 909</span><span class="comment">{</span></div>
<div class="line"><a id="l00910" name="l00910"></a><span class="lineno"> 910</span><span class="comment">}</span></div>
<div class="line"><a id="l00911" name="l00911"></a><span class="lineno"> 911</span><span class="comment"></span> </div>
<div class="line"><a id="l00912" name="l00912"></a><span class="lineno"> 912</span><span class="comment">template <class InheritedAttributeType, class SynthesizedAttributeType></span></div>
<div class="line"><a id="l00913" name="l00913"></a><span class="lineno"> 913</span><span class="comment">void</span></div>
<div class="line"><a id="l00914" name="l00914"></a><span class="lineno"> 914</span><span class="comment">SgTreeTraversal<InheritedAttributeType, SynthesizedAttributeType>::</span></div>
<div class="line"><a id="l00915" name="l00915"></a><span class="lineno"> 915</span><span class="comment"></span> </div>
<div class="line"><a id="l00916" name="l00916"></a><span class="lineno"> 916</span><span class="comment">beforeSingleTraversal()</span></div>
<div class="line"><a id="l00917" name="l00917"></a><span class="lineno"> 917</span><span class="comment">{</span></div>
<div class="line"><a id="l00918" name="l00918"></a><span class="lineno"> 918</span><span class="comment">}</span></div>
<div class="line"><a id="l00919" name="l00919"></a><span class="lineno"> 919</span><span class="comment">*/</span></div>
<div class="line"><a id="l00920" name="l00920"></a><span class="lineno"> 920</span> </div>
<div class="line"><a id="l00921" name="l00921"></a><span class="lineno"> 921</span><span class="keyword">template</span> <<span class="keyword">class</span> InheritedAttributeType, <span class="keyword">class</span> SynthesizedAttributeType></div>
<div class="line"><a id="l00922" name="l00922"></a><span class="lineno"> 922</span><span class="keywordtype">void</span></div>
<div class="foldopen" id="foldopen00923" data-start="{" data-end="}">
<div class="line"><a id="l00923" name="l00923"></a><span class="lineno"><a class="line" href="classAstTopDownBottomUpProcessing.html#a4e57fd480be2e24b9e4d2db2f197f96d"> 923</a></span><a class="code hl_function" href="classAstTopDownBottomUpProcessing.html#a4e57fd480be2e24b9e4d2db2f197f96d">AstTopDownBottomUpProcessing<InheritedAttributeType, SynthesizedAttributeType>::</a></div>
<div class="line"><a id="l00924" name="l00924"></a><span class="lineno"> 924</span><a class="code hl_function" href="classAstTopDownBottomUpProcessing.html#a4e57fd480be2e24b9e4d2db2f197f96d">atTraversalStart</a>()</div>
<div class="line"><a id="l00925" name="l00925"></a><span class="lineno"> 925</span>{</div>
<div class="line"><a id="l00926" name="l00926"></a><span class="lineno"> 926</span>}</div>
</div>
<div class="line"><a id="l00927" name="l00927"></a><span class="lineno"> 927</span> </div>
<div class="line"><a id="l00928" name="l00928"></a><span class="lineno"> 928</span><span class="keyword">template</span> <<span class="keyword">class</span> InheritedAttributeType, <span class="keyword">class</span> SynthesizedAttributeType></div>
<div class="line"><a id="l00929" name="l00929"></a><span class="lineno"> 929</span><span class="keywordtype">void</span></div>
<div class="line"><a id="l00930" name="l00930"></a><span class="lineno"> 930</span><a class="code hl_class" href="classAstTopDownBottomUpProcessing.html">AstTopDownBottomUpProcessing<InheritedAttributeType, SynthesizedAttributeType>::</a></div>
<div class="line"><a id="l00931" name="l00931"></a><span class="lineno"> 931</span><a class="code hl_class" href="classAstTopDownBottomUpProcessing.html">atTraversalEnd</a>()</div>
<div class="line"><a id="l00932" name="l00932"></a><span class="lineno"> 932</span>{</div>
<div class="line"><a id="l00933" name="l00933"></a><span class="lineno"> 933</span>}</div>
<div class="line"><a id="l00934" name="l00934"></a><span class="lineno"> 934</span> </div>
<div class="line"><a id="l00935" name="l00935"></a><span class="lineno"> 935</span><span class="keyword">template</span> <<span class="keyword">class</span> InheritedAttributeType></div>
<div class="line"><a id="l00936" name="l00936"></a><span class="lineno"> 936</span><span class="keywordtype">void</span></div>
<div class="line"><a id="l00937" name="l00937"></a><span class="lineno"> 937</span><a class="code hl_class" href="classAstTopDownProcessing.html">AstTopDownProcessing<InheritedAttributeType>::</a></div>
<div class="line"><a id="l00938" name="l00938"></a><span class="lineno"> 938</span><a class="code hl_class" href="classAstTopDownProcessing.html">destroyInheritedValue</a>(<a class="code hl_class" href="classSgNode.html">SgNode</a>*, InheritedAttributeType)</div>
<div class="line"><a id="l00939" name="l00939"></a><span class="lineno"> 939</span>{</div>
<div class="line"><a id="l00940" name="l00940"></a><span class="lineno"> 940</span>}</div>
<div class="line"><a id="l00941" name="l00941"></a><span class="lineno"> 941</span> </div>
<div class="line"><a id="l00942" name="l00942"></a><span class="lineno"> 942</span><span class="keyword">template</span> <<span class="keyword">class</span> InheritedAttributeType></div>
<div class="line"><a id="l00943" name="l00943"></a><span class="lineno"> 943</span><span class="keywordtype">void</span></div>
<div class="foldopen" id="foldopen00944" data-start="{" data-end="}">
<div class="line"><a id="l00944" name="l00944"></a><span class="lineno"><a class="line" href="classAstTopDownProcessing.html#a36ccf0c6b8acbcd3e81315bf4bfd91bc"> 944</a></span><a class="code hl_function" href="classAstTopDownProcessing.html#a36ccf0c6b8acbcd3e81315bf4bfd91bc">AstTopDownProcessing<InheritedAttributeType>::</a></div>
<div class="line"><a id="l00945" name="l00945"></a><span class="lineno"> 945</span><a class="code hl_function" href="classAstTopDownProcessing.html#a36ccf0c6b8acbcd3e81315bf4bfd91bc">atTraversalStart</a>()</div>