Sophie

Sophie

distrib > Fedora > 14 > i386 > by-pkgid > dd7a95aabe1c049ac9f84beede8143d3 > files > 1836

synopsis-doc-0.12-4.fc14.i686.rpm

<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
<!-- Source/Synopsis/Parsers/IDL/omni.py.html -->
<!-- this view was generated by Source -->
<head>
<meta content="text/html; charset=iso-8859-1" http-equiv="Content-Type"/>
<title >Synopsis - Synopsis/Parsers/IDL/omni.py</title>
<link href="../../../../style.css" type="text/css" rel="stylesheet" />
</head>
<body class="Source">
<div class="navigation">
<span class="normal"><a href="../../../../Scopes/Synopsis.html" >Global Package</a></span>
<span class="normal"><a href="../../../../InheritanceTree.html" >Inheritance Tree</a></span>
<span class="normal"><a href="../../../../InheritanceGraph.html" >Inheritance Graph</a></span>
<span class="normal"><a href="../../../../NameIndex.html" >Name Index</a></span>
</div>
File: <b >Synopsis/Parsers/IDL/omni.py</b><pre class="sxr"><a id="line1"></a><span class="lineno">  1</span><span class="line"><span class="py-comment">#</span></span>
<a id="line2"></a><span class="lineno">  2</span><span class="line"><span class="py-comment"># Copyright (C) 2000 Stefan Seefeld</span></span>
<a id="line3"></a><span class="lineno">  3</span><span class="line"><span class="py-comment"># All rights reserved.</span></span>
<a id="line4"></a><span class="lineno">  4</span><span class="line"><span class="py-comment"># Licensed to the public under the terms of the GNU LGPL (&gt;= 2),</span></span>
<a id="line5"></a><span class="lineno">  5</span><span class="line"><span class="py-comment"># see the file COPYING for details.</span></span>
<a id="line6"></a><span class="lineno">  6</span><span class="line"><span class="py-comment">#</span></span>
<a id="line7"></a><span class="lineno">  7</span>
<a id="line8"></a><span class="lineno">  8</span><span class="line"><span class="py-keyword">from</span> Synopsis <span class="py-keyword">import</span> IR, ASG</span>
<a id="line9"></a><span class="lineno">  9</span><span class="line"><span class="py-keyword">from</span> Synopsis.QualifiedName <span class="py-keyword">import</span> QualifiedCxxName <span class="py-keyword">as</span> QName</span>
<a id="line10"></a><span class="lineno"> 10</span><span class="line"><span class="py-keyword">from</span> Synopsis.SourceFile <span class="py-keyword">import</span> *</span>
<a id="line11"></a><span class="lineno"> 11</span><span class="line"><span class="py-keyword">import</span> idlast, idltype, idlvisitor, idlutil</span>
<a id="line12"></a><span class="lineno"> 12</span><span class="line"><span class="py-keyword">import</span> _omniidl</span>
<a id="line13"></a><span class="lineno"> 13</span><span class="line"><span class="py-keyword">import</span> sys, getopt, os, os.path, string, types</span>
<a id="line14"></a><span class="lineno"> 14</span>
<a id="line15"></a><span class="lineno"> 15</span><span class="line">sourcefile = None</span>
<a id="line16"></a><span class="lineno"> 16</span>
<a id="line17"></a><span class="lineno"> 17</span><span class="line"><span class="py-keyword">def</span> <a href="../../../../Scopes/Synopsis/Parsers/IDL/omni.html#strip_filename">strip_filename</a>(filename):</span>
<a id="line18"></a><span class="lineno"> 18</span><span class="line">   <span class="py-string">&quot;This is aliased as strip if -b used and basename set&quot;</span></span>
<a id="line19"></a><span class="lineno"> 19</span>
<a id="line20"></a><span class="lineno"> 20</span><span class="line">   <span class="py-keyword">if</span> len(basename) &gt; len(filename): <span class="py-keyword">return</span> filename</span>
<a id="line21"></a><span class="lineno"> 21</span><span class="line">   <span class="py-keyword">if</span> filename[:len(basename)] == basename:</span>
<a id="line22"></a><span class="lineno"> 22</span><span class="line">      <span class="py-keyword">return</span> filename[len(basename):]</span>
<a id="line23"></a><span class="lineno"> 23</span><span class="line">   <span class="py-keyword">return</span> filename</span>
<a id="line24"></a><span class="lineno"> 24</span>
<a id="line25"></a><span class="lineno"> 25</span><span class="line"><span class="py-keyword">class</span> <a href="../../../../Scopes/Synopsis/Parsers/IDL/omni/TypeTranslator.html">TypeTranslator</a>(idlvisitor.TypeVisitor):</span>
<a id="line26"></a><span class="lineno"> 26</span><span class="line">   <span class="py-string">&quot;&quot;&quot;maps idltype objects to ASG.TypeId objects in a ASG.Dictionary&quot;&quot;&quot;</span></span>
<a id="line27"></a><span class="lineno"> 27</span>
<a id="line28"></a><span class="lineno"> 28</span><span class="line">   <span class="py-keyword">def</span> <a href="../../../../Scopes/Synopsis/Parsers/IDL/omni/TypeTranslator.html#__init__">__init__</a>(self, types):</span>
<a id="line29"></a><span class="lineno"> 29</span><span class="line">      self.types = types</span>
<a id="line30"></a><span class="lineno"> 30</span><span class="line">      self.__result = None</span>
<a id="line31"></a><span class="lineno"> 31</span><span class="line">      self.__basetypes = {idltype.tk_void:       QName((<span class="py-string">'void'</span>,)),</span>
<a id="line32"></a><span class="lineno"> 32</span><span class="line">                          idltype.tk_short:      QName((<span class="py-string">'short'</span>,)),</span>
<a id="line33"></a><span class="lineno"> 33</span><span class="line">                          idltype.tk_long:       QName((<span class="py-string">'long'</span>,)),</span>
<a id="line34"></a><span class="lineno"> 34</span><span class="line">                          idltype.tk_ushort:     QName((<span class="py-string">'unsigned short'</span>,)),</span>
<a id="line35"></a><span class="lineno"> 35</span><span class="line">                          idltype.tk_ulong:      QName((<span class="py-string">'unsigned long'</span>,)),</span>
<a id="line36"></a><span class="lineno"> 36</span><span class="line">                          idltype.tk_float:      QName((<span class="py-string">'float'</span>,)),</span>
<a id="line37"></a><span class="lineno"> 37</span><span class="line">                          idltype.tk_double:     QName((<span class="py-string">'double'</span>,)),</span>
<a id="line38"></a><span class="lineno"> 38</span><span class="line">                          idltype.tk_boolean:    QName((<span class="py-string">'boolean'</span>,)),</span>
<a id="line39"></a><span class="lineno"> 39</span><span class="line">                          idltype.tk_char:       QName((<span class="py-string">'char'</span>,)),</span>
<a id="line40"></a><span class="lineno"> 40</span><span class="line">                          idltype.tk_octet:      QName((<span class="py-string">'octet'</span>,)),</span>
<a id="line41"></a><span class="lineno"> 41</span><span class="line">                          idltype.tk_any:        QName((<span class="py-string">'any'</span>,)),</span>
<a id="line42"></a><span class="lineno"> 42</span><span class="line">                          idltype.tk_TypeCode:   QName((<span class="py-string">'CORBA'</span>,<span class="py-string">'TypeCode'</span>,)),</span>
<a id="line43"></a><span class="lineno"> 43</span><span class="line">                          idltype.tk_Principal:  QName((<span class="py-string">'CORBA'</span>,<span class="py-string">'Principal'</span>,)),</span>
<a id="line44"></a><span class="lineno"> 44</span><span class="line">                          idltype.tk_longlong:   QName((<span class="py-string">'long long'</span>,)),</span>
<a id="line45"></a><span class="lineno"> 45</span><span class="line">                          idltype.tk_ulonglong:  QName((<span class="py-string">'unsigned long long'</span>,)),</span>
<a id="line46"></a><span class="lineno"> 46</span><span class="line">                          idltype.tk_longdouble: QName((<span class="py-string">'long double'</span>,)),</span>
<a id="line47"></a><span class="lineno"> 47</span><span class="line">                          idltype.tk_wchar:      QName((<span class="py-string">'wchar'</span>,))}</span>
<a id="line48"></a><span class="lineno"> 48</span>
<a id="line49"></a><span class="lineno"> 49</span><span class="line">   <span class="py-keyword">def</span> <a href="../../../../Scopes/Synopsis/Parsers/IDL/omni/TypeTranslator.html#internalize">internalize</a>(self, idltype):</span>
<a id="line50"></a><span class="lineno"> 50</span>
<a id="line51"></a><span class="lineno"> 51</span><span class="line">      idltype.accept(self)</span>
<a id="line52"></a><span class="lineno"> 52</span><span class="line">      <span class="py-keyword">return</span> self.__result</span>
<a id="line53"></a><span class="lineno"> 53</span>
<a id="line54"></a><span class="lineno"> 54</span><span class="line">   <span class="py-keyword">def</span> <a href="../../../../Scopes/Synopsis/Parsers/IDL/omni/TypeTranslator.html#has_key">has_key</a>(self, name): <span class="py-keyword">return</span> self.types.has_key(name)</span>
<a id="line55"></a><span class="lineno"> 55</span>
<a id="line56"></a><span class="lineno"> 56</span><span class="line">   <span class="py-keyword">def</span> <a href="../../../../Scopes/Synopsis/Parsers/IDL/omni/TypeTranslator.html#add">add</a>(self, name, type):</span>
<a id="line57"></a><span class="lineno"> 57</span><span class="line">      self.types[name] = type</span>
<a id="line58"></a><span class="lineno"> 58</span>
<a id="line59"></a><span class="lineno"> 59</span><span class="line">   <span class="py-keyword">def</span> <a href="../../../../Scopes/Synopsis/Parsers/IDL/omni/TypeTranslator.html#get">get</a>(self, name):</span>
<a id="line60"></a><span class="lineno"> 60</span><span class="line">      <span class="py-keyword">return</span> self.types[name]</span>
<a id="line61"></a><span class="lineno"> 61</span>
<a id="line62"></a><span class="lineno"> 62</span><span class="line">   <span class="py-keyword">def</span> <a href="../../../../Scopes/Synopsis/Parsers/IDL/omni/TypeTranslator.html#visitBaseType">visitBaseType</a>(self, idltype):</span>
<a id="line63"></a><span class="lineno"> 63</span>
<a id="line64"></a><span class="lineno"> 64</span><span class="line">      type = ASG.BuiltinTypeId(<span class="py-string">'IDL'</span>, self.__basetypes[idltype.kind()])</span>
<a id="line65"></a><span class="lineno"> 65</span><span class="line">      self.types[type.name] = type</span>
<a id="line66"></a><span class="lineno"> 66</span><span class="line">      self.__result = type.name</span>
<a id="line67"></a><span class="lineno"> 67</span>
<a id="line68"></a><span class="lineno"> 68</span><span class="line">   <span class="py-keyword">def</span> <a href="../../../../Scopes/Synopsis/Parsers/IDL/omni/TypeTranslator.html#visitStringType">visitStringType</a>(self, idltype):</span>
<a id="line69"></a><span class="lineno"> 69</span>
<a id="line70"></a><span class="lineno"> 70</span><span class="line">      <span class="py-comment"># FIXME: Should we create a ParametrizedTypeId with the appropriate bound parameters ?</span></span>
<a id="line71"></a><span class="lineno"> 71</span><span class="line">      <span class="py-keyword">if</span> idltype.bound() == 0:</span>
<a id="line72"></a><span class="lineno"> 72</span><span class="line">         qname = QName((<span class="py-string">'string'</span>,))</span>
<a id="line73"></a><span class="lineno"> 73</span><span class="line">      <span class="py-keyword">else</span>:</span>
<a id="line74"></a><span class="lineno"> 74</span><span class="line">         qname = QName((<span class="py-string">'string&lt;%s&gt;'</span>%idltype.bound(),))</span>
<a id="line75"></a><span class="lineno"> 75</span><span class="line">      <span class="py-keyword">if</span> qname <span class="py-keyword">not</span> <span class="py-keyword">in</span> self.types:</span>
<a id="line76"></a><span class="lineno"> 76</span><span class="line">         self.types[qname] = ASG.BuiltinTypeId(<span class="py-string">'IDL'</span>, qname)</span>
<a id="line77"></a><span class="lineno"> 77</span><span class="line">      self.__result = qname</span>
<a id="line78"></a><span class="lineno"> 78</span>
<a id="line79"></a><span class="lineno"> 79</span><span class="line">   <span class="py-keyword">def</span> <a href="../../../../Scopes/Synopsis/Parsers/IDL/omni/TypeTranslator.html#visitWStringType">visitWStringType</a>(self, idltype):</span>
<a id="line80"></a><span class="lineno"> 80</span>
<a id="line81"></a><span class="lineno"> 81</span><span class="line">      <span class="py-comment"># FIXME: Should we create a ParametrizedTypeId with the appropriate bound parameters ?</span></span>
<a id="line82"></a><span class="lineno"> 82</span><span class="line">      <span class="py-keyword">if</span> idltype.bound() == 0:</span>
<a id="line83"></a><span class="lineno"> 83</span><span class="line">         qname = QName((<span class="py-string">'wstring'</span>,))</span>
<a id="line84"></a><span class="lineno"> 84</span><span class="line">      <span class="py-keyword">else</span>:</span>
<a id="line85"></a><span class="lineno"> 85</span><span class="line">         qname = QName((<span class="py-string">'wstring&lt;%s&gt;'</span>%idltype.bound(),))</span>
<a id="line86"></a><span class="lineno"> 86</span><span class="line">      <span class="py-keyword">if</span> qname <span class="py-keyword">not</span> <span class="py-keyword">in</span> self.types:</span>
<a id="line87"></a><span class="lineno"> 87</span><span class="line">         self.types[qname] = ASG.BuiltinTypeId(<span class="py-string">'IDL'</span>, qname)</span>
<a id="line88"></a><span class="lineno"> 88</span><span class="line">      self.__result = qname</span>
<a id="line89"></a><span class="lineno"> 89</span>
<a id="line90"></a><span class="lineno"> 90</span><span class="line">   <span class="py-keyword">def</span> <a href="../../../../Scopes/Synopsis/Parsers/IDL/omni/TypeTranslator.html#visitSequenceType">visitSequenceType</a>(self, idltype):</span>
<a id="line91"></a><span class="lineno"> 91</span>
<a id="line92"></a><span class="lineno"> 92</span><span class="line">      qname = QName((<span class="py-string">'sequence'</span>,))</span>
<a id="line93"></a><span class="lineno"> 93</span><span class="line">      <span class="py-keyword">if</span> <span class="py-keyword">not</span> self.types.has_key(qname):</span>
<a id="line94"></a><span class="lineno"> 94</span><span class="line">         self.types[qname] = ASG.BuiltinTypeId(<span class="py-string">&quot;IDL&quot;</span>, qname)</span>
<a id="line95"></a><span class="lineno"> 95</span><span class="line">      idltype.seqType().accept(self)</span>
<a id="line96"></a><span class="lineno"> 96</span><span class="line">      ptype = self.types[self.__result]</span>
<a id="line97"></a><span class="lineno"> 97</span><span class="line">      type = ASG.ParametrizedTypeId(<span class="py-string">&quot;IDL&quot;</span>, self.types[qname], [ptype])</span>
<a id="line98"></a><span class="lineno"> 98</span><span class="line">      qname  = QName((<span class="py-string">'sequence&lt;%s&gt;'</span>%str(ptype.name),))</span>
<a id="line99"></a><span class="lineno"> 99</span><span class="line">      self.types[qname] = type</span>
<a id="line100"></a><span class="lineno">100</span><span class="line">      self.__result = qname</span>
<a id="line101"></a><span class="lineno">101</span>
<a id="line102"></a><span class="lineno">102</span><span class="line">   <span class="py-keyword">def</span> <a href="../../../../Scopes/Synopsis/Parsers/IDL/omni/TypeTranslator.html#visitDeclaredType">visitDeclaredType</a>(self, idltype):</span>
<a id="line103"></a><span class="lineno">103</span>
<a id="line104"></a><span class="lineno">104</span><span class="line">      self.__result = QName(idltype.decl().scopedName())</span>
<a id="line105"></a><span class="lineno">105</span>
<a id="line106"></a><span class="lineno">106</span><span class="line"><span class="py-keyword">class</span> <a href="../../../../Scopes/Synopsis/Parsers/IDL/omni/ASGTranslator.html">ASGTranslator</a>(idlvisitor.AstVisitor):</span>
<a id="line107"></a><span class="lineno">107</span>
<a id="line108"></a><span class="lineno">108</span><span class="line">   <span class="py-keyword">def</span> <a href="../../../../Scopes/Synopsis/Parsers/IDL/omni/ASGTranslator.html#__init__">__init__</a>(self, declarations, types, primary_file_only):</span>
<a id="line109"></a><span class="lineno">109</span>
<a id="line110"></a><span class="lineno">110</span><span class="line">      self.declarations = declarations</span>
<a id="line111"></a><span class="lineno">111</span><span class="line">      self.primary_file_only = primary_file_only</span>
<a id="line112"></a><span class="lineno">112</span><span class="line">      self.types = types</span>
<a id="line113"></a><span class="lineno">113</span><span class="line">      self.__scope = []</span>
<a id="line114"></a><span class="lineno">114</span><span class="line">      self.__operation = None</span>
<a id="line115"></a><span class="lineno">115</span><span class="line">      self.__enum = None</span>
<a id="line116"></a><span class="lineno">116</span>
<a id="line117"></a><span class="lineno">117</span><span class="line">   <span class="py-keyword">def</span> <a href="../../../../Scopes/Synopsis/Parsers/IDL/omni/ASGTranslator.html#scope">scope</a>(self): <span class="py-keyword">return</span> self.__scope[-1].name</span>
<a id="line118"></a><span class="lineno">118</span>
<a id="line119"></a><span class="lineno">119</span><span class="line">   <span class="py-keyword">def</span> <a href="../../../../Scopes/Synopsis/Parsers/IDL/omni/ASGTranslator.html#add_declaration">add_declaration</a>(self, declaration):</span>
<a id="line120"></a><span class="lineno">120</span><span class="line">      self.__scope[-1].declarations.append(declaration)</span>
<a id="line121"></a><span class="lineno">121</span>
<a id="line122"></a><span class="lineno">122</span><span class="line">   <span class="py-keyword">def</span> <a href="../../../../Scopes/Synopsis/Parsers/IDL/omni/ASGTranslator.html#addType">addType</a>(self, name, type):</span>
<a id="line123"></a><span class="lineno">123</span>
<a id="line124"></a><span class="lineno">124</span><span class="line">      <span class="py-keyword">if</span> self.types.has_key(name):</span>
<a id="line125"></a><span class="lineno">125</span><span class="line">         <span class="py-keyword">if</span> isinstance(self.types.get(name), ASG.UnknownTypeId):</span>
<a id="line126"></a><span class="lineno">126</span><span class="line">            self.types.add(name, type)</span>
<a id="line127"></a><span class="lineno">127</span><span class="line">         <span class="py-keyword">else</span>:</span>
<a id="line128"></a><span class="lineno">128</span><span class="line">            <span class="py-keyword">pass</span></span>
<a id="line129"></a><span class="lineno">129</span><span class="line">         <span class="py-keyword">return</span></span>
<a id="line130"></a><span class="lineno">130</span><span class="line">      self.types.add(name, type)</span>
<a id="line131"></a><span class="lineno">131</span>
<a id="line132"></a><span class="lineno">132</span><span class="line">   <span class="py-keyword">def</span> <a href="../../../../Scopes/Synopsis/Parsers/IDL/omni/ASGTranslator.html#getType">getType</a>(self, name): <span class="py-keyword">return</span> self.types.get(QName(name))</span>
<a id="line133"></a><span class="lineno">133</span><span class="line">   <span class="py-keyword">def</span> <a href="../../../../Scopes/Synopsis/Parsers/IDL/omni/ASGTranslator.html#visitAST">visitAST</a>(self, node):</span>
<a id="line134"></a><span class="lineno">134</span>
<a id="line135"></a><span class="lineno">135</span><span class="line">      self.__scope.append(ASG.Scope(sourcefile, 0, <span class="py-string">'file'</span>, QName()))</span>
<a id="line136"></a><span class="lineno">136</span><span class="line">      <span class="py-comment"># add an 'Object' Type to the Type Dictionary. Don't declare it in the ASG since</span></span>
<a id="line137"></a><span class="lineno">137</span><span class="line">      <span class="py-comment"># there is no corresponding declaration</span></span>
<a id="line138"></a><span class="lineno">138</span><span class="line">      qname = QName((<span class="py-string">'CORBA'</span>, <span class="py-string">'Object'</span>))</span>
<a id="line139"></a><span class="lineno">139</span><span class="line">      object = ASG.Class(sourcefile, 0, <span class="py-string">'interface'</span>, qname)</span>
<a id="line140"></a><span class="lineno">140</span><span class="line">      self.addType(qname, ASG.DeclaredTypeId(<span class="py-string">'IDL'</span>, qname, object))</span>
<a id="line141"></a><span class="lineno">141</span><span class="line">      <span class="py-keyword">for</span> n <span class="py-keyword">in</span> node.declarations():</span>
<a id="line142"></a><span class="lineno">142</span><span class="line">         n.accept(self)</span>
<a id="line143"></a><span class="lineno">143</span><span class="line">      <span class="py-keyword">for</span> d <span class="py-keyword">in</span> self.__scope[-1].declarations:</span>
<a id="line144"></a><span class="lineno">144</span><span class="line">         self.declarations.append(d)</span>
<a id="line145"></a><span class="lineno">145</span>
<a id="line146"></a><span class="lineno">146</span><span class="line">   <span class="py-keyword">def</span> <a href="../../../../Scopes/Synopsis/Parsers/IDL/omni/ASGTranslator.html#visitModule">visitModule</a>(self, node):</span>
<a id="line147"></a><span class="lineno">147</span>
<a id="line148"></a><span class="lineno">148</span><span class="line">      visible = node.mainFile() <span class="py-keyword">or</span> <span class="py-keyword">not</span> self.primary_file_only</span>
<a id="line149"></a><span class="lineno">149</span><span class="line">      qname = QName(list(self.scope()) + [node.identifier()])</span>
<a id="line150"></a><span class="lineno">150</span><span class="line">      module = ASG.Module(sourcefile, node.line(), <span class="py-string">'module'</span>, qname)</span>
<a id="line151"></a><span class="lineno">151</span><span class="line">      <span class="py-keyword">if</span> visible:</span>
<a id="line152"></a><span class="lineno">152</span><span class="line">         self.add_declaration(module)</span>
<a id="line153"></a><span class="lineno">153</span><span class="line">      self.__scope.append(module)</span>
<a id="line154"></a><span class="lineno">154</span><span class="line">      self.addType(qname, ASG.DeclaredTypeId(<span class="py-string">'IDL'</span>, qname, module))</span>
<a id="line155"></a><span class="lineno">155</span><span class="line">      <span class="py-keyword">if</span> <span class="py-keyword">not</span> self.primary_file_only <span class="py-keyword">or</span> node.mainFile():</span>
<a id="line156"></a><span class="lineno">156</span><span class="line">         comments = [c.text() <span class="py-keyword">for</span> c <span class="py-keyword">in</span> node.comments()]</span>
<a id="line157"></a><span class="lineno">157</span><span class="line">         <span class="py-keyword">if</span> comments:</span>
<a id="line158"></a><span class="lineno">158</span><span class="line">            module.annotations[<span class="py-string">'comments'</span>] = comments</span>
<a id="line159"></a><span class="lineno">159</span><span class="line">      <span class="py-keyword">for</span> n <span class="py-keyword">in</span> node.definitions():</span>
<a id="line160"></a><span class="lineno">160</span><span class="line">         n.accept(self)</span>
<a id="line161"></a><span class="lineno">161</span><span class="line">      self.__scope.pop()</span>
<a id="line162"></a><span class="lineno">162</span>
<a id="line163"></a><span class="lineno">163</span><span class="line">   <span class="py-keyword">def</span> <a href="../../../../Scopes/Synopsis/Parsers/IDL/omni/ASGTranslator.html#visitInterface">visitInterface</a>(self, node):</span>
<a id="line164"></a><span class="lineno">164</span>
<a id="line165"></a><span class="lineno">165</span><span class="line">      visible = node.mainFile() <span class="py-keyword">or</span> <span class="py-keyword">not</span> self.primary_file_only</span>
<a id="line166"></a><span class="lineno">166</span><span class="line">      qname = QName(list(self.scope()) + [node.identifier()])</span>
<a id="line167"></a><span class="lineno">167</span><span class="line">      class_ = ASG.Class(sourcefile, node.line(), <span class="py-string">'interface'</span>, qname)</span>
<a id="line168"></a><span class="lineno">168</span><span class="line">      <span class="py-keyword">if</span> visible:</span>
<a id="line169"></a><span class="lineno">169</span><span class="line">         self.add_declaration(class_)</span>
<a id="line170"></a><span class="lineno">170</span><span class="line">      self.__scope.append(class_)</span>
<a id="line171"></a><span class="lineno">171</span><span class="line">      self.addType(qname, ASG.DeclaredTypeId(<span class="py-string">'IDL'</span>, qname, class_))</span>
<a id="line172"></a><span class="lineno">172</span><span class="line">      <span class="py-keyword">if</span> <span class="py-keyword">not</span> self.primary_file_only <span class="py-keyword">or</span> node.mainFile():</span>
<a id="line173"></a><span class="lineno">173</span><span class="line">         comments = [c.text() <span class="py-keyword">for</span> c <span class="py-keyword">in</span> node.comments()]</span>
<a id="line174"></a><span class="lineno">174</span><span class="line">         <span class="py-keyword">if</span> comments:</span>
<a id="line175"></a><span class="lineno">175</span><span class="line">            class_.annotations[<span class="py-string">'comments'</span>] = comments</span>
<a id="line176"></a><span class="lineno">176</span><span class="line">      <span class="py-keyword">for</span> i <span class="py-keyword">in</span> node.inherits():</span>
<a id="line177"></a><span class="lineno">177</span><span class="line">         parent = self.getType(i.scopedName())</span>
<a id="line178"></a><span class="lineno">178</span><span class="line">         class_.parents.append(ASG.Inheritance(<span class="py-string">&quot;&quot;</span>, parent, []))</span>
<a id="line179"></a><span class="lineno">179</span><span class="line">      <span class="py-keyword">for</span> c <span class="py-keyword">in</span> node.contents(): c.accept(self)</span>
<a id="line180"></a><span class="lineno">180</span><span class="line">      self.__scope.pop()</span>
<a id="line181"></a><span class="lineno">181</span>
<a id="line182"></a><span class="lineno">182</span><span class="line">   <span class="py-keyword">def</span> <a href="../../../../Scopes/Synopsis/Parsers/IDL/omni/ASGTranslator.html#visitForward">visitForward</a>(self, node):</span>
<a id="line183"></a><span class="lineno">183</span>
<a id="line184"></a><span class="lineno">184</span><span class="line">      visible = node.mainFile() <span class="py-keyword">or</span> <span class="py-keyword">not</span> self.primary_file_only</span>
<a id="line185"></a><span class="lineno">185</span><span class="line">      name = list(self.scope())</span>
<a id="line186"></a><span class="lineno">186</span><span class="line">      qname = QName(name + [node.identifier()])</span>
<a id="line187"></a><span class="lineno">187</span><span class="line">      forward = ASG.Forward(sourcefile, node.line(), <span class="py-string">'interface'</span>, qname)</span>
<a id="line188"></a><span class="lineno">188</span><span class="line">      <span class="py-keyword">if</span> visible:</span>
<a id="line189"></a><span class="lineno">189</span><span class="line">         self.add_declaration(forward)</span>
<a id="line190"></a><span class="lineno">190</span><span class="line">      self.addType(qname, ASG.UnknownTypeId(<span class="py-string">'IDL'</span>, qname))</span>
<a id="line191"></a><span class="lineno">191</span>
<a id="line192"></a><span class="lineno">192</span><span class="line">   <span class="py-keyword">def</span> <a href="../../../../Scopes/Synopsis/Parsers/IDL/omni/ASGTranslator.html#visitConst">visitConst</a>(self, node):</span>
<a id="line193"></a><span class="lineno">193</span>
<a id="line194"></a><span class="lineno">194</span><span class="line">      visible = node.mainFile() <span class="py-keyword">or</span> <span class="py-keyword">not</span> self.primary_file_only</span>
<a id="line195"></a><span class="lineno">195</span><span class="line">      name = list(self.scope())</span>
<a id="line196"></a><span class="lineno">196</span><span class="line">      qname = QName(name + [node.identifier()])</span>
<a id="line197"></a><span class="lineno">197</span><span class="line">      type = self.types.internalize(node.constType())</span>
<a id="line198"></a><span class="lineno">198</span><span class="line">      <span class="py-keyword">if</span> node.constType().kind() == idltype.tk_enum:</span>
<a id="line199"></a><span class="lineno">199</span><span class="line">         value = <span class="py-string">&quot;::&quot;</span> + idlutil.ccolonName(node.value().scopedName())</span>
<a id="line200"></a><span class="lineno">200</span><span class="line">      <span class="py-keyword">else</span>:</span>
<a id="line201"></a><span class="lineno">201</span><span class="line">         value = str(node.value())</span>
<a id="line202"></a><span class="lineno">202</span><span class="line">      const = ASG.Const(sourcefile, node.line(), <span class="py-string">'const'</span>,</span>
<a id="line203"></a><span class="lineno">203</span><span class="line">                        self.getType(type), qname, value)</span>
<a id="line204"></a><span class="lineno">204</span><span class="line">      <span class="py-keyword">if</span> visible:</span>
<a id="line205"></a><span class="lineno">205</span><span class="line">         self.add_declaration(const)</span>
<a id="line206"></a><span class="lineno">206</span><span class="line">      comments = [c.text() <span class="py-keyword">for</span> c <span class="py-keyword">in</span> node.comments()]</span>
<a id="line207"></a><span class="lineno">207</span><span class="line">      <span class="py-keyword">if</span> comments:</span>
<a id="line208"></a><span class="lineno">208</span><span class="line">         const.annotations[<span class="py-string">'comments'</span>] = comments</span>
<a id="line209"></a><span class="lineno">209</span>
<a id="line210"></a><span class="lineno">210</span><span class="line">   <span class="py-keyword">def</span> <a href="../../../../Scopes/Synopsis/Parsers/IDL/omni/ASGTranslator.html#visitTypedef">visitTypedef</a>(self, node):</span>
<a id="line211"></a><span class="lineno">211</span>
<a id="line212"></a><span class="lineno">212</span><span class="line">      visible = node.mainFile() <span class="py-keyword">or</span> <span class="py-keyword">not</span> self.primary_file_only</span>
<a id="line213"></a><span class="lineno">213</span><span class="line">      <span class="py-comment"># if this is an inline constructed type, it is a 'Declared' type</span></span>
<a id="line214"></a><span class="lineno">214</span><span class="line">      <span class="py-comment"># and we need to visit the declaration first</span></span>
<a id="line215"></a><span class="lineno">215</span><span class="line">      <span class="py-keyword">if</span> node.constrType():</span>
<a id="line216"></a><span class="lineno">216</span><span class="line">         node.aliasType().decl().accept(self)</span>
<a id="line217"></a><span class="lineno">217</span><span class="line">      type = self.types.internalize(node.aliasType())</span>
<a id="line218"></a><span class="lineno">218</span><span class="line">      comments = [c.text() <span class="py-keyword">for</span> c <span class="py-keyword">in</span> node.comments()]</span>
<a id="line219"></a><span class="lineno">219</span><span class="line">      <span class="py-keyword">for</span> d <span class="py-keyword">in</span> node.declarators():</span>
<a id="line220"></a><span class="lineno">220</span><span class="line">         <span class="py-comment"># reinit the type for this declarator, as each declarator of</span></span>
<a id="line221"></a><span class="lineno">221</span><span class="line">         <span class="py-comment"># a single typedef declaration can have a different type. *sigh*</span></span>
<a id="line222"></a><span class="lineno">222</span><span class="line">         dtype = type</span>
<a id="line223"></a><span class="lineno">223</span><span class="line">         <span class="py-keyword">if</span> d.sizes():</span>
<a id="line224"></a><span class="lineno">224</span><span class="line">            array = ASG.ArrayTypeId(<span class="py-string">'IDL'</span>, self.getType(type), [str(s) <span class="py-keyword">for</span> s <span class="py-keyword">in</span> d.sizes()])</span>
<a id="line225"></a><span class="lineno">225</span><span class="line">            dtype = map(None, type[:-1])</span>
<a id="line226"></a><span class="lineno">226</span><span class="line">            dtype.append(type[-1] + string.join(map(<span class="py-keyword">lambda</span> s:<span class="py-string">&quot;[&quot;</span>+ str(s) +<span class="py-string">&quot;]&quot;</span>, d.sizes()),<span class="py-string">''</span>))</span>
<a id="line227"></a><span class="lineno">227</span><span class="line">            self.addType(QName(dtype), array)</span>
<a id="line228"></a><span class="lineno">228</span><span class="line">         name = list(self.scope())</span>
<a id="line229"></a><span class="lineno">229</span><span class="line">         qname = QName(name + [d.identifier()])</span>
<a id="line230"></a><span class="lineno">230</span><span class="line">         typedef = ASG.Typedef(sourcefile, node.line(), <span class="py-string">'typedef'</span>, qname, self.getType(dtype), node.constrType())</span>
<a id="line231"></a><span class="lineno">231</span><span class="line">         d_comments = comments + [c.text() <span class="py-keyword">for</span> c <span class="py-keyword">in</span> d.comments()]</span>
<a id="line232"></a><span class="lineno">232</span><span class="line">         <span class="py-keyword">if</span> d_comments:</span>
<a id="line233"></a><span class="lineno">233</span><span class="line">            typedef.annotations[<span class="py-string">'comments'</span>] = d_comments</span>
<a id="line234"></a><span class="lineno">234</span><span class="line">         self.addType(qname, ASG.DeclaredTypeId(<span class="py-string">'IDL'</span>, qname, typedef))</span>
<a id="line235"></a><span class="lineno">235</span><span class="line">         <span class="py-keyword">if</span> visible:</span>
<a id="line236"></a><span class="lineno">236</span><span class="line">            self.add_declaration(typedef)</span>
<a id="line237"></a><span class="lineno">237</span>
<a id="line238"></a><span class="lineno">238</span><span class="line">   <span class="py-keyword">def</span> <a href="../../../../Scopes/Synopsis/Parsers/IDL/omni/ASGTranslator.html#visitMember">visitMember</a>(self, node):</span>
<a id="line239"></a><span class="lineno">239</span>
<a id="line240"></a><span class="lineno">240</span><span class="line">      visible = node.mainFile() <span class="py-keyword">or</span> <span class="py-keyword">not</span> self.primary_file_only</span>
<a id="line241"></a><span class="lineno">241</span><span class="line">      <span class="py-comment"># if this is an inline constructed type, it is a 'Declared' type</span></span>
<a id="line242"></a><span class="lineno">242</span><span class="line">      <span class="py-comment"># and we need to visit the declaration first</span></span>
<a id="line243"></a><span class="lineno">243</span><span class="line">      <span class="py-keyword">if</span> node.constrType():</span>
<a id="line244"></a><span class="lineno">244</span><span class="line">         node.memberType().decl().accept(self)</span>
<a id="line245"></a><span class="lineno">245</span><span class="line">      type = self.types.internalize(node.memberType())</span>
<a id="line246"></a><span class="lineno">246</span><span class="line">      comments = [c.text() <span class="py-keyword">for</span> c <span class="py-keyword">in</span> node.comments()]</span>
<a id="line247"></a><span class="lineno">247</span><span class="line">      <span class="py-keyword">for</span> d <span class="py-keyword">in</span> node.declarators():</span>
<a id="line248"></a><span class="lineno">248</span><span class="line">         <span class="py-comment"># reinit the type for this declarator, as each declarator of</span></span>
<a id="line249"></a><span class="lineno">249</span><span class="line">         <span class="py-comment"># a single typedef declaration can have a different type. *sigh*</span></span>
<a id="line250"></a><span class="lineno">250</span><span class="line">         dtype = type</span>
<a id="line251"></a><span class="lineno">251</span><span class="line">         <span class="py-keyword">if</span> d.sizes():</span>
<a id="line252"></a><span class="lineno">252</span><span class="line">            array = ASG.ArrayTypeId(<span class="py-string">'IDL'</span>, self.getType(type), [str(s) <span class="py-keyword">for</span> s <span class="py-keyword">in</span> node.sizes()])</span>
<a id="line253"></a><span class="lineno">253</span><span class="line">            dtype = type[:-1]</span>
<a id="line254"></a><span class="lineno">254</span><span class="line">            dtype.append(type[-1] + string.join(map(<span class="py-keyword">lambda</span> s:<span class="py-string">&quot;[&quot;</span>+s+<span class="py-string">&quot;]&quot;</span>, d.sizes()),<span class="py-string">''</span>))</span>
<a id="line255"></a><span class="lineno">255</span><span class="line">            self.addType(dtype, array)</span>
<a id="line256"></a><span class="lineno">256</span><span class="line">         qname = QName(list(self.scope()) + [d.identifier()])</span>
<a id="line257"></a><span class="lineno">257</span><span class="line">         member = ASG.Variable(sourcefile, node.line(), <span class="py-string">'variable'</span>, qname, self.getType(dtype), node.constrType())</span>
<a id="line258"></a><span class="lineno">258</span><span class="line">         d_comments = comments + [c.text() <span class="py-keyword">for</span> c <span class="py-keyword">in</span> d.comments()]</span>
<a id="line259"></a><span class="lineno">259</span><span class="line">         <span class="py-keyword">if</span> d_comments:</span>
<a id="line260"></a><span class="lineno">260</span><span class="line">            member.annotations[<span class="py-string">'comments'</span>] = d_comments</span>
<a id="line261"></a><span class="lineno">261</span><span class="line">         self.addType(qname, ASG.DeclaredTypeId(<span class="py-string">'IDL'</span>, qname, member))</span>
<a id="line262"></a><span class="lineno">262</span><span class="line">         <span class="py-keyword">if</span> visible:</span>
<a id="line263"></a><span class="lineno">263</span><span class="line">            self.add_declaration(member)</span>
<a id="line264"></a><span class="lineno">264</span>
<a id="line265"></a><span class="lineno">265</span><span class="line">   <span class="py-keyword">def</span> <a href="../../../../Scopes/Synopsis/Parsers/IDL/omni/ASGTranslator.html#visitStruct">visitStruct</a>(self, node):</span>
<a id="line266"></a><span class="lineno">266</span>
<a id="line267"></a><span class="lineno">267</span><span class="line">      visible = node.mainFile() <span class="py-keyword">or</span> <span class="py-keyword">not</span> self.primary_file_only</span>
<a id="line268"></a><span class="lineno">268</span><span class="line">      qname = QName(list(self.scope()) + [node.identifier()])</span>
<a id="line269"></a><span class="lineno">269</span><span class="line">      <span class="py-keyword">if</span> self.primary_file_only <span class="py-keyword">and</span> <span class="py-keyword">not</span> node.mainFile():</span>
<a id="line270"></a><span class="lineno">270</span><span class="line">         forward = ASG.Forward(sourcefile, node.line(), <span class="py-string">'struct'</span>, qname)</span>
<a id="line271"></a><span class="lineno">271</span><span class="line">         <span class="py-keyword">if</span> visible:</span>
<a id="line272"></a><span class="lineno">272</span><span class="line">            self.add_declaration(forward)</span>
<a id="line273"></a><span class="lineno">273</span><span class="line">         self.addType(qname, ASG.DeclaredTypeId(<span class="py-string">'IDL'</span>, qname, forward))</span>
<a id="line274"></a><span class="lineno">274</span><span class="line">         <span class="py-keyword">return</span></span>
<a id="line275"></a><span class="lineno">275</span><span class="line">      struct = ASG.Class(sourcefile, node.line(), <span class="py-string">'struct'</span>, qname)</span>
<a id="line276"></a><span class="lineno">276</span><span class="line">      <span class="py-keyword">if</span> visible:</span>
<a id="line277"></a><span class="lineno">277</span><span class="line">         self.add_declaration(struct)</span>
<a id="line278"></a><span class="lineno">278</span><span class="line">      self.addType(qname, ASG.DeclaredTypeId(<span class="py-string">'IDL'</span>, qname, struct))</span>
<a id="line279"></a><span class="lineno">279</span><span class="line">      comments = [c.text() <span class="py-keyword">for</span> c <span class="py-keyword">in</span> node.comments()]</span>
<a id="line280"></a><span class="lineno">280</span><span class="line">      <span class="py-keyword">if</span> comments:</span>
<a id="line281"></a><span class="lineno">281</span><span class="line">         struct.annotations[<span class="py-string">'comments'</span>] = comments</span>
<a id="line282"></a><span class="lineno">282</span><span class="line">      self.__scope.append(struct)</span>
<a id="line283"></a><span class="lineno">283</span><span class="line">      <span class="py-keyword">for</span> member <span class="py-keyword">in</span> node.members(): member.accept(self)</span>
<a id="line284"></a><span class="lineno">284</span><span class="line">      self.__scope.pop()</span>
<a id="line285"></a><span class="lineno">285</span>
<a id="line286"></a><span class="lineno">286</span><span class="line">   <span class="py-keyword">def</span> <a href="../../../../Scopes/Synopsis/Parsers/IDL/omni/ASGTranslator.html#visitException">visitException</a>(self, node):</span>
<a id="line287"></a><span class="lineno">287</span>
<a id="line288"></a><span class="lineno">288</span><span class="line">      visible = node.mainFile() <span class="py-keyword">or</span> <span class="py-keyword">not</span> self.primary_file_only</span>
<a id="line289"></a><span class="lineno">289</span><span class="line">      qname = QName(list(self.scope()) + [node.identifier()])</span>
<a id="line290"></a><span class="lineno">290</span><span class="line">      <span class="py-keyword">if</span> self.primary_file_only <span class="py-keyword">and</span> <span class="py-keyword">not</span> node.mainFile():</span>
<a id="line291"></a><span class="lineno">291</span><span class="line">         forward = ASG.Forward(sourcefile, node.line(), <span class="py-string">'exception'</span>, qname)</span>
<a id="line292"></a><span class="lineno">292</span><span class="line">         <span class="py-keyword">if</span> visible:</span>
<a id="line293"></a><span class="lineno">293</span><span class="line">            self.add_declaration(forward)</span>
<a id="line294"></a><span class="lineno">294</span><span class="line">         self.addType(qname, ASG.DeclaredTypeId(<span class="py-string">'IDL'</span>, qname, forward))</span>
<a id="line295"></a><span class="lineno">295</span><span class="line">         <span class="py-keyword">return</span></span>
<a id="line296"></a><span class="lineno">296</span><span class="line">      exc = ASG.Class(sourcefile, node.line(), <span class="py-string">'exception'</span>, qname)</span>
<a id="line297"></a><span class="lineno">297</span><span class="line">      <span class="py-keyword">if</span> visible:</span>
<a id="line298"></a><span class="lineno">298</span><span class="line">         self.add_declaration(exc)</span>
<a id="line299"></a><span class="lineno">299</span><span class="line">      self.addType(qname, ASG.DeclaredTypeId(<span class="py-string">'IDL'</span>, qname, exc))</span>
<a id="line300"></a><span class="lineno">300</span><span class="line">      self.__scope.append(exc)</span>
<a id="line301"></a><span class="lineno">301</span><span class="line">      comments = [c.text() <span class="py-keyword">for</span> c <span class="py-keyword">in</span> node.comments()]</span>
<a id="line302"></a><span class="lineno">302</span><span class="line">      <span class="py-keyword">if</span> comments:</span>
<a id="line303"></a><span class="lineno">303</span><span class="line">         exc.annotations[<span class="py-string">'comments'</span>] = comments</span>
<a id="line304"></a><span class="lineno">304</span><span class="line">      <span class="py-keyword">for</span> member <span class="py-keyword">in</span> node.members(): member.accept(self)</span>
<a id="line305"></a><span class="lineno">305</span><span class="line">      self.__scope.pop()</span>
<a id="line306"></a><span class="lineno">306</span>
<a id="line307"></a><span class="lineno">307</span><span class="line">    <span class="py-comment">#    def visitCaseLabel(self, node):    return</span></span>
<a id="line308"></a><span class="lineno">308</span>
<a id="line309"></a><span class="lineno">309</span><span class="line">   <span class="py-keyword">def</span> <a href="../../../../Scopes/Synopsis/Parsers/IDL/omni/ASGTranslator.html#visitUnionCase">visitUnionCase</a>(self, node):</span>
<a id="line310"></a><span class="lineno">310</span>
<a id="line311"></a><span class="lineno">311</span><span class="line">      <span class="py-comment"># if this is an inline constructed type, it is a 'Declared' type</span></span>
<a id="line312"></a><span class="lineno">312</span><span class="line">      <span class="py-comment"># and we need to visit the declaration first</span></span>
<a id="line313"></a><span class="lineno">313</span><span class="line">      <span class="py-keyword">if</span> node.constrType():</span>
<a id="line314"></a><span class="lineno">314</span><span class="line">         node.caseType().decl().accept(self)</span>
<a id="line315"></a><span class="lineno">315</span><span class="line">      type = self.types.internalize(node.caseType())</span>
<a id="line316"></a><span class="lineno">316</span><span class="line">      declarator = node.declarator()</span>
<a id="line317"></a><span class="lineno">317</span><span class="line">      <span class="py-keyword">if</span> declarator.sizes():</span>
<a id="line318"></a><span class="lineno">318</span><span class="line">         array = ASG.ArrayTypeId(<span class="py-string">'IDL'</span>, self.getType(type), [str(s) <span class="py-keyword">for</span> s <span class="py-keyword">in</span> declarator.sizes()])</span>
<a id="line319"></a><span class="lineno">319</span><span class="line">         type = type[:-1]</span>
<a id="line320"></a><span class="lineno">320</span><span class="line">         type.append(type[-1] + string.join(map(<span class="py-keyword">lambda</span> s:<span class="py-string">&quot;[&quot;</span>+s+<span class="py-string">&quot;]&quot;</span>,node.sizes()),<span class="py-string">''</span>))</span>
<a id="line321"></a><span class="lineno">321</span><span class="line">         self.addType(type, array)</span>
<a id="line322"></a><span class="lineno">322</span><span class="line">      qname = QName(list(self.scope()) + [node.declarator().identifier()])</span>
<a id="line323"></a><span class="lineno">323</span><span class="line">      self.__scope[-1].declarations.append(</span>
<a id="line324"></a><span class="lineno">324</span><span class="line">         ASG.Operation(sourcefile, node.line(), <span class="py-string">'case'</span>,</span>
<a id="line325"></a><span class="lineno">325</span><span class="line">                       [], self.getType(type), [], qname, qname[-1]))</span>
<a id="line326"></a><span class="lineno">326</span>
<a id="line327"></a><span class="lineno">327</span><span class="line">   <span class="py-keyword">def</span> <a href="../../../../Scopes/Synopsis/Parsers/IDL/omni/ASGTranslator.html#visitUnion">visitUnion</a>(self, node):</span>
<a id="line328"></a><span class="lineno">328</span>
<a id="line329"></a><span class="lineno">329</span><span class="line">      visible = node.mainFile() <span class="py-keyword">or</span> <span class="py-keyword">not</span> self.primary_file_only</span>
<a id="line330"></a><span class="lineno">330</span><span class="line">      qname = QName(list(self.scope()) + [node.identifier()])</span>
<a id="line331"></a><span class="lineno">331</span><span class="line">      <span class="py-keyword">if</span> self.primary_file_only <span class="py-keyword">and</span> <span class="py-keyword">not</span> node.mainFile():</span>
<a id="line332"></a><span class="lineno">332</span><span class="line">         forward = ASG.Forward(sourcefile, node.line(), <span class="py-string">'union'</span>, qname)</span>
<a id="line333"></a><span class="lineno">333</span><span class="line">         <span class="py-keyword">if</span> visible:</span>
<a id="line334"></a><span class="lineno">334</span><span class="line">            self.add_declaration(forward)</span>
<a id="line335"></a><span class="lineno">335</span><span class="line">         self.addType(qname, ASG.DeclaredTypeId(<span class="py-string">'IDL'</span>, qname, forward))</span>
<a id="line336"></a><span class="lineno">336</span><span class="line">         <span class="py-keyword">return</span></span>
<a id="line337"></a><span class="lineno">337</span><span class="line">      class_ = ASG.Class(sourcefile, node.line(), <span class="py-string">'union'</span>, qname)</span>
<a id="line338"></a><span class="lineno">338</span><span class="line">      self.add_declaration(class_)</span>
<a id="line339"></a><span class="lineno">339</span><span class="line">      self.__scope.append(class_)</span>
<a id="line340"></a><span class="lineno">340</span><span class="line">      self.addType(qname, ASG.DeclaredTypeId(<span class="py-string">'IDL'</span>, qname, class_))</span>
<a id="line341"></a><span class="lineno">341</span><span class="line">      comments = [c.text() <span class="py-keyword">for</span> c <span class="py-keyword">in</span> node.comments()]</span>
<a id="line342"></a><span class="lineno">342</span><span class="line">      <span class="py-keyword">if</span> comments:</span>
<a id="line343"></a><span class="lineno">343</span><span class="line">         class_.annotations[<span class="py-string">'comments'</span>] = comments</span>
<a id="line344"></a><span class="lineno">344</span><span class="line">      <span class="py-keyword">for</span> c <span class="py-keyword">in</span> node.cases(): c.accept(self)</span>
<a id="line345"></a><span class="lineno">345</span><span class="line">      self.__scope.pop()</span>
<a id="line346"></a><span class="lineno">346</span>
<a id="line347"></a><span class="lineno">347</span><span class="line">   <span class="py-keyword">def</span> <a href="../../../../Scopes/Synopsis/Parsers/IDL/omni/ASGTranslator.html#visitEnumerator">visitEnumerator</a>(self, node):</span>
<a id="line348"></a><span class="lineno">348</span>
<a id="line349"></a><span class="lineno">349</span><span class="line">      qname = QName(list(self.scope()) + [node.identifier()])</span>
<a id="line350"></a><span class="lineno">350</span><span class="line">      enum = ASG.Enumerator(sourcefile, node.line(), qname, <span class="py-string">''</span>)</span>
<a id="line351"></a><span class="lineno">351</span><span class="line">      self.addType(qname, ASG.DeclaredTypeId(<span class="py-string">'IDL'</span>, qname, enum))</span>
<a id="line352"></a><span class="lineno">352</span><span class="line">      self.__enum.enumerators.append(enum)</span>
<a id="line353"></a><span class="lineno">353</span>
<a id="line354"></a><span class="lineno">354</span><span class="line">   <span class="py-keyword">def</span> <a href="../../../../Scopes/Synopsis/Parsers/IDL/omni/ASGTranslator.html#visitEnum">visitEnum</a>(self, node):</span>
<a id="line355"></a><span class="lineno">355</span>
<a id="line356"></a><span class="lineno">356</span><span class="line">      visible = node.mainFile() <span class="py-keyword">or</span> <span class="py-keyword">not</span> self.primary_file_only</span>
<a id="line357"></a><span class="lineno">357</span><span class="line">      qname = QName(list(self.scope()) + [node.identifier()])</span>
<a id="line358"></a><span class="lineno">358</span><span class="line">      <span class="py-keyword">if</span> self.primary_file_only <span class="py-keyword">and</span> <span class="py-keyword">not</span> node.mainFile():</span>
<a id="line359"></a><span class="lineno">359</span><span class="line">         forward = ASG.Forward(sourcefile, node.line(), <span class="py-string">'enum'</span>, qname)</span>
<a id="line360"></a><span class="lineno">360</span><span class="line">         <span class="py-keyword">if</span> visible:</span>
<a id="line361"></a><span class="lineno">361</span><span class="line">            self.add_declaration(forward)</span>
<a id="line362"></a><span class="lineno">362</span><span class="line">         self.addType(qname, ASG.DeclaredTypeId(<span class="py-string">'IDL'</span>, qname, forward))</span>
<a id="line363"></a><span class="lineno">363</span><span class="line">         <span class="py-keyword">return</span></span>
<a id="line364"></a><span class="lineno">364</span><span class="line">      self.__enum = ASG.Enum(sourcefile, node.line(), qname, [])</span>
<a id="line365"></a><span class="lineno">365</span><span class="line">      <span class="py-keyword">if</span> visible:</span>
<a id="line366"></a><span class="lineno">366</span><span class="line">         self.add_declaration(self.__enum)</span>
<a id="line367"></a><span class="lineno">367</span><span class="line">      self.addType(qname, ASG.DeclaredTypeId(<span class="py-string">'IDL'</span>, qname, self.__enum))</span>
<a id="line368"></a><span class="lineno">368</span><span class="line">      comments = [c.text() <span class="py-keyword">for</span> c <span class="py-keyword">in</span> node.comments()]</span>
<a id="line369"></a><span class="lineno">369</span><span class="line">      <span class="py-keyword">if</span> comments:</span>
<a id="line370"></a><span class="lineno">370</span><span class="line">         self.__enum.annotations[<span class="py-string">'comments'</span>] = comments</span>
<a id="line371"></a><span class="lineno">371</span><span class="line">      <span class="py-keyword">for</span> enumerator <span class="py-keyword">in</span> node.enumerators(): enumerator.accept(self)</span>
<a id="line372"></a><span class="lineno">372</span><span class="line">      self.__enum = None</span>
<a id="line373"></a><span class="lineno">373</span>
<a id="line374"></a><span class="lineno">374</span><span class="line">   <span class="py-keyword">def</span> <a href="../../../../Scopes/Synopsis/Parsers/IDL/omni/ASGTranslator.html#visitAttribute">visitAttribute</a>(self, node):</span>
<a id="line375"></a><span class="lineno">375</span>
<a id="line376"></a><span class="lineno">376</span><span class="line">      visible = node.mainFile() <span class="py-keyword">or</span> <span class="py-keyword">not</span> self.primary_file_only</span>
<a id="line377"></a><span class="lineno">377</span><span class="line">      scopename = list(self.scope())</span>
<a id="line378"></a><span class="lineno">378</span><span class="line">      <span class="py-keyword">if</span> self.primary_file_only <span class="py-keyword">and</span> <span class="py-keyword">not</span> node.mainFile(): <span class="py-keyword">return</span></span>
<a id="line379"></a><span class="lineno">379</span><span class="line">      <span class="py-comment"># Add real Operation objects</span></span>
<a id="line380"></a><span class="lineno">380</span><span class="line">      pre = []</span>
<a id="line381"></a><span class="lineno">381</span><span class="line">      <span class="py-keyword">if</span> node.readonly(): pre.append(<span class="py-string">&quot;readonly&quot;</span>)</span>
<a id="line382"></a><span class="lineno">382</span><span class="line">      type = self.types.internalize(node.attrType())</span>
<a id="line383"></a><span class="lineno">383</span><span class="line">      comments = [c.text() <span class="py-keyword">for</span> c <span class="py-keyword">in</span> node.comments()]</span>
<a id="line384"></a><span class="lineno">384</span><span class="line">      <span class="py-keyword">for</span> id <span class="py-keyword">in</span> node.identifiers():</span>
<a id="line385"></a><span class="lineno">385</span><span class="line">         qname = QName(scopename + [id])</span>
<a id="line386"></a><span class="lineno">386</span><span class="line">         attr = ASG.Operation(sourcefile, node.line(), <span class="py-string">'attribute'</span>,</span>
<a id="line387"></a><span class="lineno">387</span><span class="line">                              pre, self.getType(type), [], qname, qname[-1])</span>
<a id="line388"></a><span class="lineno">388</span><span class="line">         <span class="py-keyword">if</span> comments:</span>
<a id="line389"></a><span class="lineno">389</span><span class="line">            attr.annotations[<span class="py-string">'comments'</span>] = comments</span>
<a id="line390"></a><span class="lineno">390</span><span class="line">         <span class="py-keyword">if</span> visible:</span>
<a id="line391"></a><span class="lineno">391</span><span class="line">            self.add_declaration(attr)</span>
<a id="line392"></a><span class="lineno">392</span>
<a id="line393"></a><span class="lineno">393</span><span class="line">   <span class="py-keyword">def</span> <a href="../../../../Scopes/Synopsis/Parsers/IDL/omni/ASGTranslator.html#visitParameter">visitParameter</a>(self, node):</span>
<a id="line394"></a><span class="lineno">394</span>
<a id="line395"></a><span class="lineno">395</span><span class="line">      operation = self.__operation</span>
<a id="line396"></a><span class="lineno">396</span><span class="line">      pre = []</span>
<a id="line397"></a><span class="lineno">397</span><span class="line">      <span class="py-keyword">if</span> node.direction() == 0: pre.append(<span class="py-string">&quot;in&quot;</span>)</span>
<a id="line398"></a><span class="lineno">398</span><span class="line">      <span class="py-keyword">elif</span> node.direction() == 1: pre.append(<span class="py-string">&quot;out&quot;</span>)</span>
<a id="line399"></a><span class="lineno">399</span><span class="line">      <span class="py-keyword">else</span>: pre.append(<span class="py-string">&quot;inout&quot;</span>)</span>
<a id="line400"></a><span class="lineno">400</span><span class="line">      post = []</span>
<a id="line401"></a><span class="lineno">401</span><span class="line">      name = self.types.internalize(node.paramType())</span>
<a id="line402"></a><span class="lineno">402</span><span class="line">      operation.parameters.append(ASG.Parameter(pre, self.getType(name), post, node.identifier()))</span>
<a id="line403"></a><span class="lineno">403</span>
<a id="line404"></a><span class="lineno">404</span><span class="line">   <span class="py-keyword">def</span> <a href="../../../../Scopes/Synopsis/Parsers/IDL/omni/ASGTranslator.html#visitOperation">visitOperation</a>(self, node):</span>
<a id="line405"></a><span class="lineno">405</span>
<a id="line406"></a><span class="lineno">406</span><span class="line">      visible = node.mainFile() <span class="py-keyword">or</span> <span class="py-keyword">not</span> self.primary_file_only</span>
<a id="line407"></a><span class="lineno">407</span><span class="line">      pre = []</span>
<a id="line408"></a><span class="lineno">408</span><span class="line">      <span class="py-keyword">if</span> node.oneway(): pre.append(<span class="py-string">&quot;oneway&quot;</span>)</span>
<a id="line409"></a><span class="lineno">409</span><span class="line">      return_type = self.types.internalize(node.returnType())</span>
<a id="line410"></a><span class="lineno">410</span><span class="line">      qname = QName(list(self.scope()) + [node.identifier()])</span>
<a id="line411"></a><span class="lineno">411</span><span class="line">      self.__operation = ASG.Operation(sourcefile, node.line(), <span class="py-string">'operation'</span>, pre, self.getType(return_type), [], qname, qname[-1])</span>
<a id="line412"></a><span class="lineno">412</span><span class="line">      comments = [c.text() <span class="py-keyword">for</span> c <span class="py-keyword">in</span> node.comments()]</span>
<a id="line413"></a><span class="lineno">413</span><span class="line">      <span class="py-keyword">if</span> comments:</span>
<a id="line414"></a><span class="lineno">414</span><span class="line">         self.__operation.annotations[<span class="py-string">'comments'</span>] = comments</span>
<a id="line415"></a><span class="lineno">415</span><span class="line">      <span class="py-keyword">for</span> p <span class="py-keyword">in</span> node.parameters(): p.accept(self)</span>
<a id="line416"></a><span class="lineno">416</span><span class="line">      <span class="py-keyword">for</span> e <span class="py-keyword">in</span> node.raises():</span>
<a id="line417"></a><span class="lineno">417</span><span class="line">         exception = self.getType(e.scopedName())</span>
<a id="line418"></a><span class="lineno">418</span><span class="line">         self.__operation.exceptions.append(exception)</span>
<a id="line419"></a><span class="lineno">419</span>
<a id="line420"></a><span class="lineno">420</span><span class="line">      <span class="py-keyword">if</span> visible:</span>
<a id="line421"></a><span class="lineno">421</span><span class="line">         self.add_declaration(self.__operation)</span>
<a id="line422"></a><span class="lineno">422</span><span class="line">      self.__operation = None</span>
<a id="line423"></a><span class="lineno">423</span>
<a id="line424"></a><span class="lineno">424</span><span class="line"><span class="py-comment">#    def visitNative(self, node):       return</span></span>
<a id="line425"></a><span class="lineno">425</span><span class="line"><span class="py-comment">#    def visitStateMember(self, node):  return</span></span>
<a id="line426"></a><span class="lineno">426</span><span class="line"><span class="py-comment">#    def visitFactory(self, node):      return</span></span>
<a id="line427"></a><span class="lineno">427</span><span class="line"><span class="py-comment">#    def visitValueForward(self, node): return</span></span>
<a id="line428"></a><span class="lineno">428</span><span class="line"><span class="py-comment">#    def visitValueBox(self, node):     return</span></span>
<a id="line429"></a><span class="lineno">429</span><span class="line"><span class="py-comment">#    def visitValueAbs(self, node):     return</span></span>
<a id="line430"></a><span class="lineno">430</span><span class="line"><span class="py-comment">#    def visitValue(self, node):        return</span></span>
<a id="line431"></a><span class="lineno">431</span>
<a id="line432"></a><span class="lineno">432</span><span class="line"><span class="py-keyword">def</span> <a href="../../../../Scopes/Synopsis/Parsers/IDL/omni.html#parse">parse</a>(ir, cppfile, src, primary_file_only,</span>
<a id="line433"></a><span class="lineno">433</span><span class="line">          base_path, verbose, debug):</span>
<a id="line434"></a><span class="lineno">434</span><span class="line">   <span class="py-keyword">global</span> basename, strip, sourcefile</span>
<a id="line435"></a><span class="lineno">435</span>
<a id="line436"></a><span class="lineno">436</span><span class="line">   <span class="py-keyword">if</span> base_path:</span>
<a id="line437"></a><span class="lineno">437</span><span class="line">      basename = base_path</span>
<a id="line438"></a><span class="lineno">438</span>
<a id="line439"></a><span class="lineno">439</span><span class="line">   _omniidl.keepComments(1)</span>
<a id="line440"></a><span class="lineno">440</span><span class="line">   _omniidl.noForwardWarning()</span>
<a id="line441"></a><span class="lineno">441</span><span class="line">   tree = _omniidl.compile(open(cppfile, <span class="py-string">'r+'</span>))</span>
<a id="line442"></a><span class="lineno">442</span><span class="line">   <span class="py-keyword">if</span> tree == None:</span>
<a id="line443"></a><span class="lineno">443</span><span class="line">      sys.stderr.write(<span class="py-string">&quot;omni: Error parsing %s\n&quot;</span>%cppfile)</span>
<a id="line444"></a><span class="lineno">444</span><span class="line">      sys.exit(1)</span>
<a id="line445"></a><span class="lineno">445</span>
<a id="line446"></a><span class="lineno">446</span><span class="line">   sourcefile = SourceFile(strip_filename(src), src, <span class="py-string">'IDL'</span>)</span>
<a id="line447"></a><span class="lineno">447</span><span class="line">   sourcefile.annotations[<span class="py-string">'primary'</span>] = True</span>
<a id="line448"></a><span class="lineno">448</span><span class="line">   new_ir = IR.IR()</span>
<a id="line449"></a><span class="lineno">449</span><span class="line">   new_ir.files[sourcefile.name] = sourcefile</span>
<a id="line450"></a><span class="lineno">450</span><span class="line">   type_trans = TypeTranslator(new_ir.asg.types)</span>
<a id="line451"></a><span class="lineno">451</span><span class="line">   ast_trans = ASGTranslator(new_ir.asg.declarations, type_trans, primary_file_only)</span>
<a id="line452"></a><span class="lineno">452</span><span class="line">   tree.accept(ast_trans)</span>
<a id="line453"></a><span class="lineno">453</span><span class="line">   sourcefile.declarations[:] = new_ir.asg.declarations</span>
<a id="line454"></a><span class="lineno">454</span><span class="line">   ir.merge(new_ir)</span>
<a id="line455"></a><span class="lineno">455</span><span class="line">   _omniidl.clear()</span>
<a id="line456"></a><span class="lineno">456</span><span class="line">   <span class="py-keyword">return</span> ir</span>
<a id="line457"></a><span class="lineno">457</span>
</pre>
<div class="logo">Generated on Thu Apr 16 16:27:14 2009 by 
<br/>
<a href="http://synopsis.fresco.org" target="_blank"><img src="../../../../synopsis.png" alt="logo"/> synopsis</a> (version devel)</div>
</body>
</html>