-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathAstTraverseToRoot_8h_source.html
151 lines (151 loc) · 15.9 KB
/
AstTraverseToRoot_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
<!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: AstTraverseToRoot.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">AstTraverseToRoot.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">// ************************************************************************</span></div>
<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span><span class="comment">// Traversal To Root</span></div>
<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span><span class="comment">// ************************************************************************</span></div>
<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span><span class="comment">// This traversal represents a 2nd alternative traversal from any AST node </span></div>
<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span><span class="comment">// back up the AST to the AST Root node (SgFile or SgProject) along the</span></div>
<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span><span class="comment">// unique chain defined by the parent pointers at each node in the AST.</span></div>
<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span><span class="comment">// This traversal can be helpful for queries (or potentially transformations)</span></div>
<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span><span class="comment">// on variables where they are defined in any of the defining scopes from</span></div>
<div class="line"><a id="l00009" name="l00009"></a><span class="lineno"> 9</span><span class="comment">// the current scope to the global scope. It was initially developed to</span></div>
<div class="line"><a id="l00010" name="l00010"></a><span class="lineno"> 10</span><span class="comment">// support queries to identify containment of subtrees in specific</span></div>
<div class="line"><a id="l00011" name="l00011"></a><span class="lineno"> 11</span><span class="comment">// language constructs (required for the unparser, which currently does not</span></div>
<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span><span class="comment">// use the AST traversal mechanism defined by ROSE, and so can't communicate</span></div>
<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span><span class="comment">// context information though an inherited attribute).</span></div>
<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span><span class="comment">// ************************************************************************</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="keyword">template</span>< <span class="keyword">class</span> InheritedAttributeType, <span class="keyword">class</span> SynthesizedAttributeType ></div>
<div class="foldopen" id="foldopen00017" data-start="{" data-end="};">
<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"><a class="line" href="classTraverseToRoot.html"> 17</a></span><span class="keyword">class </span><a class="code hl_class" href="classTraverseToRoot.html">TraverseToRoot</a></div>
<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span> {</div>
<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span> <span class="keyword">public</span>:</div>
<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span><span class="comment">// ReverseTraversal();</span></div>
<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span> </div>
<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span> SynthesizedAttributeType traverse (</div>
<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span> <a class="code hl_class" href="classSgNode.html">SgNode</a>* astNode,</div>
<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</span> InheritedAttributeType inputInheritedAttribute );</div>
<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</span> </div>
<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span> <span class="keyword">virtual</span> InheritedAttributeType evaluateInheritedAttribute (</div>
<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"> 27</span> <a class="code hl_class" href="classSgNode.html">SgNode</a>* astNode,</div>
<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span> InheritedAttributeType inputInheritedAttribute ) = 0;</div>
<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"> 29</span> </div>
<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"> 30</span> <span class="keyword">virtual</span> SynthesizedAttributeType evaluateSynthesizedAttribute (</div>
<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"> 31</span> <a class="code hl_class" href="classSgNode.html">SgNode</a>* astNode,</div>
<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"> 32</span> InheritedAttributeType inputInheritedAttribute,</div>
<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"> 33</span> SynthesizedAttributeType inputSynthesizedAttribute ) = 0;</div>
<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"> 34</span> };</div>
</div>
<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"> 35</span> </div>
<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"> 36</span> </div>
<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"> 37</span><span class="comment">// Implementation of traverse function</span></div>
<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"> 38</span><span class="keyword">template</span>< <span class="keyword">class</span> InheritedAttributeType, <span class="keyword">class</span> SynthesizedAttributeType ></div>
<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"> 39</span>SynthesizedAttributeType</div>
<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"> 40</span><a class="code hl_class" href="classTraverseToRoot.html">TraverseToRoot<InheritedAttributeType,SynthesizedAttributeType>::traverse</a> (</div>
<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"> 41</span> <a class="code hl_class" href="classSgNode.html">SgNode</a>* node,</div>
<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"> 42</span> InheritedAttributeType inputInheritedAttribute)</div>
<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"> 43</span> {</div>
<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"> 44</span> <span class="comment">// Trace the current node back as far as possible (should be able to reach SgGlobal)</span></div>
<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"> 45</span> <span class="comment">// printf ("Starting at node->sage_class_name() = %s \n",node->sage_class_name());</span></div>
<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"> 46</span><span class="preprocessor">#if 1</span></div>
<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"> 47</span> printf (<span class="stringliteral">"In traverse: at node->sage_class_name() = %s \n"</span>,node-><a class="code hl_function" href="classSgNode.html#add0785fc9b5ab58521d70919f2c725f4">sage_class_name</a>());</div>
<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"> 48</span><span class="preprocessor">#endif</span></div>
<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"> 49</span> </div>
<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"> 50</span> SynthesizedAttributeType returnAttribute;</div>
<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"> 51</span> </div>
<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"> 52</span> <span class="keywordflow">if</span> (node-><a class="code hl_function" href="classSgNode.html#a3384eb2fc572b3371cd9681121cbefa3">get_parent</a>() != NULL)</div>
<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"> 53</span> {</div>
<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"> 54</span> <a class="code hl_class" href="classSgNode.html">SgNode</a>* parentNode = node-><a class="code hl_function" href="classSgNode.html#a3384eb2fc572b3371cd9681121cbefa3">get_parent</a>();</div>
<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"> 55</span> <span class="comment">// printf (" parentNode->sage_class_name() = %s \n",parentNode->sage_class_name());</span></div>
<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"> 56</span> </div>
<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"> 57</span> InheritedAttributeType localInheritedAttribute = evaluateInheritedAttribute(parentNode,inputInheritedAttribute);</div>
<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"> 58</span> SynthesizedAttributeType localSynthesizedAttribute = traverse (parentNode,localInheritedAttribute);</div>
<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"> 59</span> </div>
<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"> 60</span> returnAttribute =</div>
<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"> 61</span> evaluateSynthesizedAttribute (parentNode,localInheritedAttribute,localSynthesizedAttribute);</div>
<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"> 62</span> }</div>
<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"> 63</span><span class="preprocessor">#if 1</span></div>
<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"> 64</span> <span class="keywordflow">else</span></div>
<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"> 65</span> {</div>
<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"> 66</span> printf (<span class="stringliteral">"final node in chain of parents is a %s \n"</span>,node-><a class="code hl_function" href="classSgNode.html#add0785fc9b5ab58521d70919f2c725f4">sage_class_name</a>());</div>
<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"> 67</span> }</div>
<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"> 68</span><span class="preprocessor">#endif</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> <span class="keywordflow">return</span> returnAttribute;</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> </div>
<div class="ttc" id="aclassSgNode_html"><div class="ttname"><a href="classSgNode.html">SgNode</a></div><div class="ttdoc">This class represents the base class for all IR nodes within Sage III.</div><div class="ttdef"><b>Definition</b> <a href="Cxx__Grammar_8h_source.html#l00119">Cxx_Grammar.h:120</a></div></div>
<div class="ttc" id="aclassSgNode_html_a3384eb2fc572b3371cd9681121cbefa3"><div class="ttname"><a href="classSgNode.html#a3384eb2fc572b3371cd9681121cbefa3">SgNode::get_parent</a></div><div class="ttdeci">SgNode * get_parent() const</div><div class="ttdoc">Access function for parent node.</div></div>
<div class="ttc" id="aclassSgNode_html_add0785fc9b5ab58521d70919f2c725f4"><div class="ttname"><a href="classSgNode.html#add0785fc9b5ab58521d70919f2c725f4">SgNode::sage_class_name</a></div><div class="ttdeci">virtual const char * sage_class_name() const</div><div class="ttdoc">generates string representing the class name: (e.g. for SgNode returns "SgNode").</div></div>
<div class="ttc" id="aclassTraverseToRoot_html"><div class="ttname"><a href="classTraverseToRoot.html">TraverseToRoot</a></div><div class="ttdef"><b>Definition</b> <a href="AstTraverseToRoot_8h_source.html#l00017">AstTraverseToRoot.h:18</a></div></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Wed Oct 2 2024 00:08:22 for ROSE by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8
</small></address>
</body>
</html>