| <?xml version="1.0" encoding="iso-8859-1"?> |
| <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> |
| <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"> |
| <head> |
| <title>CustomIntLiteral.java</title> |
| <link rel="stylesheet" type="text/css" href="/objectteams/css/otj.css" title="Default Style" media="screen" /> |
| </head> |
| <body> |
| <div class="code"> |
| <pre> |
| <!-- start of source code --> |
| <span class="import">package</span> <span class="identifier">embedding</span>.<span class="identifier">custom</span>.<span class="identifier">ast</span><span class="symbol">;</span> |
| |
| <span class="import">import</span> <span class="identifier">org</span>.<span class="identifier">eclipse</span>.<span class="identifier">jdt</span>.<span class="identifier">core</span>.<span class="identifier">compiler</span>.<span class="identifier">CharOperation</span><span class="symbol">;</span> |
| <span class="import">import</span> <span class="identifier">org</span>.<span class="identifier">eclipse</span>.<span class="identifier">jdt</span>.<span class="identifier">internal</span>.<span class="identifier">compiler</span>.<span class="identifier">ast</span>.<span class="identifier">IntLiteral</span><span class="symbol">;</span> |
| <span class="import">import</span> <span class="identifier">org</span>.<span class="identifier">eclipse</span>.<span class="identifier">jdt</span>.<span class="identifier">internal</span>.<span class="identifier">compiler</span>.<span class="identifier">impl</span>.<span class="identifier">Constant</span><span class="symbol">;</span> |
| <span class="import">import</span> <span class="identifier">org</span>.<span class="identifier">eclipse</span>.<span class="identifier">jdt</span>.<span class="identifier">internal</span>.<span class="identifier">compiler</span>.<span class="identifier">impl</span>.<span class="identifier">IntConstant</span><span class="symbol">;</span> |
| <span class="import">import</span> <span class="identifier">org</span>.<span class="identifier">eclipse</span>.<span class="identifier">jdt</span>.<span class="identifier">internal</span>.<span class="identifier">compiler</span>.<span class="identifier">lookup</span>.<span class="identifier">BlockScope</span><span class="symbol">;</span> |
| <span class="import">import</span> <span class="identifier">org</span>.<span class="identifier">eclipse</span>.<span class="identifier">jdt</span>.<span class="identifier">internal</span>.<span class="identifier">compiler</span>.<span class="identifier">lookup</span>.<span class="identifier">TypeBinding</span><span class="symbol">;</span> |
| <span class="import">import</span> <span class="identifier">org</span>.<span class="identifier">eclipse</span>.<span class="identifier">jdt</span>.<span class="identifier">internal</span>.<span class="identifier">compiler</span>.<span class="identifier">parser</span>.<span class="identifier">TerminalTokens</span><span class="symbol">;</span> |
| |
| <span class="doccomment">/** |
| * Compiler AST representation of our new syntax element. |
| */</span> |
| @<span class="identifier">SuppressWarnings</span><span class="brace">(</span><span class="string">"restriction"</span><span class="brace">)</span> |
| <span class="keyword">public</span> <span class="keyword">class</span> <span class="identifier">CustomIntLiteral</span> <span class="keyword">extends</span> <span class="identifier">IntLiteral</span> |
| <span class="brace">{</span> |
| <span class="keyword">static</span> <span class="keyword">char</span><span class="brace">[</span><span class="brace">]</span><span class="brace">[</span><span class="brace">]</span><span class="brace">[</span><span class="brace">]</span> <span class="identifier">numbers</span> <span class="symbol">=</span> <span class="keyword">new</span> <span class="keyword">char</span><span class="brace">[</span><span class="brace">]</span><span class="brace">[</span><span class="brace">]</span><span class="brace">[</span><span class="brace">]</span><span class="brace">{</span> |
| <span class="brace">{</span> |
| <span class="string">"english"</span>.<span class="identifier">toCharArray</span><span class="brace">(</span><span class="brace">)</span> |
| <span class="brace">}</span>, |
| <span class="brace">{</span> |
| <span class="string">"zero"</span>.<span class="identifier">toCharArray</span><span class="brace">(</span><span class="brace">)</span>, |
| <span class="string">"one"</span>.<span class="identifier">toCharArray</span><span class="brace">(</span><span class="brace">)</span>, |
| <span class="string">"two"</span>.<span class="identifier">toCharArray</span><span class="brace">(</span><span class="brace">)</span> |
| <span class="brace">}</span>, |
| <span class="brace">{</span> |
| <span class="string">"german"</span>.<span class="identifier">toCharArray</span><span class="brace">(</span><span class="brace">)</span> |
| <span class="brace">}</span>, |
| <span class="brace">{</span> |
| <span class="string">"null"</span>.<span class="identifier">toCharArray</span><span class="brace">(</span><span class="brace">)</span>, |
| <span class="string">"eins"</span>.<span class="identifier">toCharArray</span><span class="brace">(</span><span class="brace">)</span>, |
| <span class="string">"zwei"</span>.<span class="identifier">toCharArray</span><span class="brace">(</span><span class="brace">)</span> |
| <span class="brace">}</span> |
| <span class="brace">}</span><span class="symbol">;</span> |
| |
| <span class="comment">// example additional property of this node:</span> |
| <span class="keyword">public</span> <span class="identifier">String</span> <span class="identifier">language</span><span class="symbol">;</span> |
| |
| <span class="keyword">public</span> <span class="keyword">int</span> <span class="identifier">innerSourceStart</span><span class="symbol">;</span> |
| |
| <span class="keyword">public</span> <span class="keyword">int</span> <span class="identifier">innerSourceEnd</span><span class="symbol">;</span> |
| |
| <span class="keyword">public</span> <span class="identifier">CustomIntLiteral</span><span class="brace">(</span><span class="keyword">char</span><span class="brace">[</span><span class="brace">]</span> <span class="identifier">token</span>, <span class="keyword">int</span> <span class="identifier">outerSourceStart</span>, <span class="keyword">int</span> <span class="identifier">outerSourceEnd</span>, <span class="keyword">int</span> <span class="identifier">innerSourceStart</span>, <span class="keyword">int</span> <span class="identifier">innerSourceEnd</span><span class="brace">)</span> <span class="brace">{</span> |
| <span class="keyword">super</span><span class="brace">(</span><span class="identifier">token</span>, <span class="identifier">outerSourceStart</span>, <span class="identifier">outerSourceEnd</span><span class="brace">)</span><span class="symbol">;</span> |
| <span class="keyword">this</span>.<span class="identifier">language</span> <span class="symbol">=</span> <span class="string">"english"</span><span class="symbol">;</span> |
| <span class="keyword">this</span>.<span class="identifier">innerSourceStart</span> <span class="symbol">=</span> <span class="identifier">innerSourceStart</span><span class="symbol">;</span> |
| <span class="keyword">this</span>.<span class="identifier">innerSourceEnd</span> <span class="symbol">=</span> <span class="identifier">innerSourceEnd</span><span class="symbol">;</span> |
| <span class="brace">}</span> |
| @<span class="identifier">Override</span> |
| <span class="keyword">public</span> <span class="keyword">void</span> <span class="identifier">computeConstant</span><span class="brace">(</span><span class="brace">)</span> <span class="brace">{</span> |
| <span class="comment">// this.value is pre-computed, just use that:</span> |
| <span class="keyword">this</span>.<span class="identifier">constant</span> <span class="symbol">=</span> <span class="identifier">IntConstant</span>.<span class="identifier">fromValue</span><span class="brace">(</span><span class="keyword">this</span>.<span class="identifier">value</span><span class="brace">)</span><span class="symbol">;</span> |
| <span class="brace">}</span> |
| |
| @<span class="identifier">Override</span> |
| <span class="keyword">public</span> <span class="identifier">TypeBinding</span> <span class="identifier">resolveType</span><span class="brace">(</span><span class="identifier">BlockScope</span> <span class="identifier">scope</span><span class="brace">)</span> <span class="brace">{</span> |
| <span class="keyword">char</span><span class="brace">[</span><span class="brace">]</span> <span class="identifier">trimmed</span> <span class="symbol">=</span> <span class="identifier">CharOperation</span>.<span class="identifier">trim</span><span class="brace">(</span><span class="identifier">source</span><span class="brace">(</span><span class="brace">)</span><span class="brace">)</span><span class="symbol">;</span> |
| <span class="keyword">for</span> <span class="brace">(</span><span class="keyword">int</span> <span class="identifier">l</span><span class="symbol">=</span><span class="number">0</span><span class="symbol">;</span> <span class="identifier">l</span><span class="symbol"><</span><span class="identifier">numbers</span>.<span class="identifier">length</span><span class="symbol">;</span> <span class="identifier">l</span><span class="symbol">+</span><span class="symbol">=</span><span class="number">2</span><span class="brace">)</span> <span class="brace">{</span> |
| <span class="keyword">char</span><span class="brace">[</span><span class="brace">]</span><span class="brace">[</span><span class="brace">]</span> <span class="identifier">langNumbers</span> <span class="symbol">=</span> <span class="identifier">numbers</span><span class="brace">[</span><span class="identifier">l</span><span class="symbol">+</span><span class="number">1</span><span class="brace">]</span><span class="symbol">;</span> |
| <span class="keyword">for</span> <span class="brace">(</span><span class="keyword">int</span> <span class="identifier">i</span><span class="symbol">=</span><span class="number">0</span><span class="symbol">;</span> <span class="identifier">i</span><span class="symbol"><</span><span class="identifier">langNumbers</span>.<span class="identifier">length</span><span class="symbol">;</span> <span class="identifier">i</span><span class="symbol">+</span><span class="symbol">+</span><span class="brace">)</span> <span class="brace">{</span> |
| <span class="keyword">if</span> <span class="brace">(</span><span class="identifier">CharOperation</span>.<span class="identifier">equals</span><span class="brace">(</span><span class="identifier">langNumbers</span><span class="brace">[</span><span class="identifier">i</span><span class="brace">]</span>, <span class="identifier">trimmed</span><span class="brace">)</span><span class="brace">)</span> <span class="brace">{</span> |
| <span class="keyword">this</span>.<span class="identifier">value</span> <span class="symbol">=</span> <span class="identifier">i</span><span class="symbol">;</span> |
| <span class="keyword">this</span>.<span class="identifier">language</span> <span class="symbol">=</span> <span class="keyword">new</span> <span class="identifier">String</span><span class="brace">(</span><span class="identifier">numbers</span><span class="brace">[</span><span class="identifier">l</span><span class="brace">]</span><span class="brace">[</span><span class="number">0</span><span class="brace">]</span><span class="brace">)</span><span class="symbol">;</span> |
| <span class="keyword">return</span> <span class="keyword">super</span>.<span class="identifier">resolveType</span><span class="brace">(</span><span class="identifier">scope</span><span class="brace">)</span><span class="symbol">;</span> |
| <span class="brace">}</span> |
| <span class="brace">}</span> |
| <span class="brace">}</span> |
| <span class="keyword">this</span>.<span class="identifier">constant</span> <span class="symbol">=</span> <span class="identifier">Constant</span>.<span class="identifier">NotAConstant</span><span class="symbol">;</span> |
| <span class="identifier">scope</span>.<span class="identifier">problemReporter</span><span class="brace">(</span><span class="brace">)</span>.<span class="identifier">parseErrorReplaceToken</span><span class="brace">(</span><span class="keyword">this</span>.<span class="identifier">sourceStart</span>, <span class="keyword">this</span>.<span class="identifier">sourceEnd</span>, <span class="identifier">TerminalTokens</span>.<span class="identifier">TokenNamenull</span>, <span class="identifier">trimmed</span>, <span class="string">"Unrecognized"</span>, <span class="string">"CustomIntLiteral"</span><span class="brace">)</span><span class="symbol">;</span> |
| <span class="keyword">return</span> <span class="identifier">TypeBinding</span>.<span class="identifier">INT</span><span class="symbol">;</span> |
| <span class="brace">}</span> |
| <span class="brace">}</span> |
| |
| <!-- end of source code --> |
| </pre> |
| </div> |
| </body> |
| </html> |