mirror of
https://github.com/jashkenas/coffeescript.git
synced 2022-11-09 12:23:24 -05:00
CoffeeScript 0.9.4
This commit is contained in:
parent
25c8b4b34f
commit
c50cf23b7b
36 changed files with 771 additions and 736 deletions
2
Rakefile
2
Rakefile
|
@ -6,7 +6,7 @@ require 'closure-compiler'
|
||||||
|
|
||||||
HEADER = <<-EOS
|
HEADER = <<-EOS
|
||||||
/**
|
/**
|
||||||
* CoffeeScript Compiler v0.9.3
|
* CoffeeScript Compiler v0.9.4
|
||||||
* http://coffeescript.org
|
* http://coffeescript.org
|
||||||
*
|
*
|
||||||
* Copyright 2010, Jeremy Ashkenas
|
* Copyright 2010, Jeremy Ashkenas
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
###
|
###
|
||||||
CoffeeScript Compiler v0.9.3
|
CoffeeScript Compiler v0.9.4
|
||||||
Released under the MIT License
|
Released under the MIT License
|
||||||
###
|
###
|
|
@ -1,26 +1,24 @@
|
||||||
<!DOCTYPE html> <html> <head> <title>browser.coffee</title> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> <link rel="stylesheet" media="all" href="docco.css" /> </head> <body> <div id="container"> <div id="background"></div> <div id="jump_to"> Jump To … <div id="jump_wrapper"> <div id="jump_page"> <a class="source" href="browser.html"> browser.coffee </a> <a class="source" href="cake.html"> cake.coffee </a> <a class="source" href="coffee-script.html"> coffee-script.coffee </a> <a class="source" href="command.html"> command.coffee </a> <a class="source" href="grammar.html"> grammar.coffee </a> <a class="source" href="helpers.html"> helpers.coffee </a> <a class="source" href="index.html"> index.coffee </a> <a class="source" href="lexer.html"> lexer.coffee </a> <a class="source" href="nodes.html"> nodes.coffee </a> <a class="source" href="optparse.html"> optparse.coffee </a> <a class="source" href="repl.html"> repl.coffee </a> <a class="source" href="rewriter.html"> rewriter.coffee </a> <a class="source" href="scope.html"> scope.coffee </a> </div> </div> </div> <table cellpadding="0" cellspacing="0"> <thead> <tr> <th class="docs"> <h1> browser.coffee </h1> </th> <th class="code"> </th> </tr> </thead> <tbody> <tr id="section-1"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-1">#</a> </div> <p>Activate CoffeeScript in the browser by having it compile and evaluate
|
<!DOCTYPE html> <html> <head> <title>browser.coffee</title> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> <link rel="stylesheet" media="all" href="docco.css" /> </head> <body> <div id="container"> <div id="background"></div> <div id="jump_to"> Jump To … <div id="jump_wrapper"> <div id="jump_page"> <a class="source" href="browser.html"> browser.coffee </a> <a class="source" href="cake.html"> cake.coffee </a> <a class="source" href="coffee-script.html"> coffee-script.coffee </a> <a class="source" href="command.html"> command.coffee </a> <a class="source" href="grammar.html"> grammar.coffee </a> <a class="source" href="helpers.html"> helpers.coffee </a> <a class="source" href="index.html"> index.coffee </a> <a class="source" href="lexer.html"> lexer.coffee </a> <a class="source" href="nodes.html"> nodes.coffee </a> <a class="source" href="optparse.html"> optparse.coffee </a> <a class="source" href="repl.html"> repl.coffee </a> <a class="source" href="rewriter.html"> rewriter.coffee </a> <a class="source" href="scope.html"> scope.coffee </a> </div> </div> </div> <table cellpadding="0" cellspacing="0"> <thead> <tr> <th class="docs"> <h1> browser.coffee </h1> </th> <th class="code"> </th> </tr> </thead> <tbody> <tr id="section-1"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-1">#</a> </div> <p>Override exported methods for non-Node.js engines.</p> </td> <td class="code"> <div class="highlight"><pre><span class="nv">CoffeeScript = </span><span class="nx">require</span> <span class="s1">'./coffee-script'</span></pre></div> </td> </tr> <tr id="section-2"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-2">#</a> </div> <p>Use standard JavaScript <code>eval</code> to eval code.</p> </td> <td class="code"> <div class="highlight"><pre><span class="nv">CoffeeScript.eval = </span><span class="p">(</span><span class="nx">code</span><span class="p">,</span> <span class="nx">options</span><span class="p">)</span> <span class="o">-></span>
|
||||||
|
<span class="nb">eval</span> <span class="nx">CoffeeScript</span><span class="p">.</span><span class="nx">compile</span> <span class="nx">code</span><span class="p">,</span> <span class="nx">options</span></pre></div> </td> </tr> <tr id="section-3"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-3">#</a> </div> <p>Running code does not provide access to this scope.</p> </td> <td class="code"> <div class="highlight"><pre><span class="nv">CoffeeScript.run = </span><span class="p">(</span><span class="nx">code</span><span class="p">,</span> <span class="nx">options</span><span class="p">)</span> <span class="o">-></span>
|
||||||
|
<span class="p">(</span><span class="nb">Function</span> <span class="nx">CoffeeScript</span><span class="p">.</span><span class="nx">compile</span> <span class="nx">code</span><span class="p">,</span> <span class="nx">options</span><span class="p">)()</span></pre></div> </td> </tr> <tr id="section-4"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-4">#</a> </div> <p>If we're not in a browser environment, we're finished with the public API.</p> </td> <td class="code"> <div class="highlight"><pre><span class="k">return</span> <span class="nx">unless</span> <span class="nb">window</span><span class="o">?</span></pre></div> </td> </tr> <tr id="section-5"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-5">#</a> </div> <p>Load a remote script from the current domain via XHR.</p> </td> <td class="code"> <div class="highlight"><pre><span class="nv">CoffeeScript.load = </span><span class="p">(</span><span class="nx">url</span><span class="p">,</span> <span class="nx">options</span><span class="p">)</span> <span class="o">-></span>
|
||||||
|
<span class="nv">xhr = </span><span class="k">new</span> <span class="p">(</span><span class="nb">window</span><span class="p">.</span><span class="nx">ActiveXObject</span> <span class="o">or</span> <span class="nx">XMLHttpRequest</span><span class="p">)(</span><span class="s1">'Microsoft.XMLHTTP'</span><span class="p">)</span>
|
||||||
|
<span class="nx">xhr</span><span class="p">.</span><span class="nx">open</span> <span class="s1">'GET'</span><span class="p">,</span> <span class="nx">url</span><span class="p">,</span> <span class="kc">true</span>
|
||||||
|
<span class="nx">xhr</span><span class="p">.</span><span class="nx">overrideMimeType</span> <span class="s1">'text/plain'</span> <span class="k">if</span> <span class="s1">'overrideMimeType'</span> <span class="k">of</span> <span class="nx">xhr</span>
|
||||||
|
<span class="nv">xhr.onreadystatechange = </span><span class="o">-></span>
|
||||||
|
<span class="nx">CoffeeScript</span><span class="p">.</span><span class="nx">run</span> <span class="nx">xhr</span><span class="p">.</span><span class="nx">responseText</span><span class="p">,</span> <span class="nx">options</span> <span class="k">if</span> <span class="nx">xhr</span><span class="p">.</span><span class="nx">readyState</span> <span class="o">is</span> <span class="mi">4</span>
|
||||||
|
<span class="nx">xhr</span><span class="p">.</span><span class="nx">send</span> <span class="kc">null</span></pre></div> </td> </tr> <tr id="section-6"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-6">#</a> </div> <p>Activate CoffeeScript in the browser by having it compile and evaluate
|
||||||
all script tags with a content-type of <code>text/coffeescript</code>.
|
all script tags with a content-type of <code>text/coffeescript</code>.
|
||||||
This happens on page load.</p> </td> <td class="code"> <div class="highlight"><pre><span class="k">if</span> <span class="nb">document</span><span class="o">?</span><span class="p">.</span><span class="nx">getElementsByTagName</span>
|
This happens on page load.</p> </td> <td class="code"> <div class="highlight"><pre><span class="nv">processScripts = </span><span class="o">-></span>
|
||||||
<span class="nv">grind = </span><span class="p">(</span><span class="nx">coffee</span><span class="p">)</span> <span class="o">-></span>
|
<span class="k">for</span> <span class="nx">script</span> <span class="k">in</span> <span class="nb">document</span><span class="p">.</span><span class="nx">getElementsByTagName</span> <span class="s1">'script'</span>
|
||||||
<span class="nx">setTimeout</span> <span class="nx">exports</span><span class="p">.</span><span class="nx">compile</span> <span class="nx">coffee</span>
|
<span class="k">if</span> <span class="nx">script</span><span class="p">.</span><span class="nx">type</span> <span class="o">is</span> <span class="s1">'text/coffeescript'</span>
|
||||||
<span class="nv">grindRemote = </span><span class="p">(</span><span class="nx">url</span><span class="p">)</span> <span class="o">-></span>
|
<span class="k">if</span> <span class="nx">script</span><span class="p">.</span><span class="nx">src</span>
|
||||||
<span class="nv">xhr = </span><span class="k">new</span> <span class="p">(</span><span class="nb">window</span><span class="p">.</span><span class="nx">ActiveXObject</span> <span class="o">or</span> <span class="nx">XMLHttpRequest</span><span class="p">)(</span><span class="s1">'Microsoft.XMLHTTP'</span><span class="p">)</span>
|
<span class="nx">CoffeeScript</span><span class="p">.</span><span class="nx">load</span> <span class="nx">script</span><span class="p">.</span><span class="nx">src</span>
|
||||||
<span class="nx">xhr</span><span class="p">.</span><span class="nx">open</span> <span class="s1">'GET'</span><span class="p">,</span> <span class="nx">url</span><span class="p">,</span> <span class="kc">true</span>
|
<span class="k">else</span>
|
||||||
<span class="nx">xhr</span><span class="p">.</span><span class="nx">overrideMimeType</span> <span class="s1">'text/plain'</span> <span class="k">if</span> <span class="s1">'overrideMimeType'</span> <span class="k">of</span> <span class="nx">xhr</span>
|
<span class="nx">setTimeout</span> <span class="o">-></span> <span class="nx">CoffeeScript</span><span class="p">.</span><span class="nx">run</span> <span class="nx">script</span><span class="p">.</span><span class="nx">innerHTML</span>
|
||||||
<span class="nv">xhr.onreadystatechange = </span><span class="o">-></span>
|
<span class="kc">null</span>
|
||||||
<span class="nx">grind</span> <span class="nx">xhr</span><span class="p">.</span><span class="nx">responseText</span> <span class="k">if</span> <span class="nx">xhr</span><span class="p">.</span><span class="nx">readyState</span> <span class="o">is</span> <span class="mi">4</span>
|
<span class="k">if</span> <span class="nb">window</span><span class="p">.</span><span class="nx">addEventListener</span>
|
||||||
<span class="nx">xhr</span><span class="p">.</span><span class="nx">send</span> <span class="kc">null</span>
|
<span class="nx">addEventListener</span> <span class="s1">'DOMContentLoaded'</span><span class="p">,</span> <span class="nx">processScripts</span><span class="p">,</span> <span class="kc">false</span>
|
||||||
<span class="nv">processScripts = </span><span class="o">-></span>
|
<span class="k">else</span>
|
||||||
<span class="k">for</span> <span class="nx">script</span> <span class="k">in</span> <span class="nb">document</span><span class="p">.</span><span class="nx">getElementsByTagName</span> <span class="s1">'script'</span>
|
<span class="nx">attachEvent</span> <span class="s1">'onload'</span><span class="p">,</span> <span class="nx">processScripts</span>
|
||||||
<span class="k">if</span> <span class="nx">script</span><span class="p">.</span><span class="nx">type</span> <span class="o">is</span> <span class="s1">'text/coffeescript'</span>
|
|
||||||
<span class="k">if</span> <span class="nx">script</span><span class="p">.</span><span class="nx">src</span>
|
|
||||||
<span class="nx">grindRemote</span> <span class="nx">script</span><span class="p">.</span><span class="nx">src</span>
|
|
||||||
<span class="k">else</span>
|
|
||||||
<span class="nx">grind</span> <span class="nx">script</span><span class="p">.</span><span class="nx">innerHTML</span>
|
|
||||||
<span class="kc">null</span>
|
|
||||||
<span class="k">if</span> <span class="nb">window</span><span class="p">.</span><span class="nx">addEventListener</span>
|
|
||||||
<span class="nx">addEventListener</span> <span class="s1">'DOMContentLoaded'</span><span class="p">,</span> <span class="nx">processScripts</span><span class="p">,</span> <span class="kc">false</span>
|
|
||||||
<span class="k">else</span>
|
|
||||||
<span class="nx">attachEvent</span> <span class="s1">'onload'</span><span class="p">,</span> <span class="nx">processScripts</span>
|
|
||||||
|
|
||||||
</pre></div> </td> </tr> </tbody> </table> </div> </body> </html>
|
</pre></div> </td> </tr> </tbody> </table> </div> </body> </html>
|
|
@ -33,7 +33,7 @@ If no tasks are passed, print the help screen.</p> </td>
|
||||||
<span class="nx">puts</span> <span class="s1">''</span>
|
<span class="nx">puts</span> <span class="s1">''</span>
|
||||||
<span class="k">for</span> <span class="nx">all</span> <span class="nx">name</span><span class="p">,</span> <span class="nx">task</span> <span class="k">of</span> <span class="nx">tasks</span>
|
<span class="k">for</span> <span class="nx">all</span> <span class="nx">name</span><span class="p">,</span> <span class="nx">task</span> <span class="k">of</span> <span class="nx">tasks</span>
|
||||||
<span class="nv">spaces = </span><span class="mi">20</span> <span class="o">-</span> <span class="nx">name</span><span class="p">.</span><span class="nx">length</span>
|
<span class="nv">spaces = </span><span class="mi">20</span> <span class="o">-</span> <span class="nx">name</span><span class="p">.</span><span class="nx">length</span>
|
||||||
<span class="nv">spaces = </span><span class="k">if</span> <span class="nx">spaces</span> <span class="o">></span> <span class="mi">0</span> <span class="k">then</span> <span class="p">(</span><span class="s1">' '</span> <span class="k">for</span> <span class="nx">i</span> <span class="k">in</span> <span class="p">[</span><span class="mi">0</span><span class="p">..</span><span class="nx">spaces</span><span class="p">]).</span><span class="nx">join</span><span class="p">(</span><span class="s1">''</span><span class="p">)</span> <span class="k">else</span> <span class="s1">''</span>
|
<span class="nv">spaces = </span><span class="k">if</span> <span class="nx">spaces</span> <span class="o">></span> <span class="mi">0</span> <span class="k">then</span> <span class="nb">Array</span><span class="p">(</span><span class="nx">spaces</span> <span class="o">+</span> <span class="mi">1</span><span class="p">).</span><span class="nx">join</span><span class="p">(</span><span class="s1">' '</span><span class="p">)</span> <span class="k">else</span> <span class="s1">''</span>
|
||||||
<span class="nv">desc = </span><span class="k">if</span> <span class="nx">task</span><span class="p">.</span><span class="nx">description</span> <span class="k">then</span> <span class="s2">"# #{task.description}"</span> <span class="k">else</span> <span class="s1">''</span>
|
<span class="nv">desc = </span><span class="k">if</span> <span class="nx">task</span><span class="p">.</span><span class="nx">description</span> <span class="k">then</span> <span class="s2">"# #{task.description}"</span> <span class="k">else</span> <span class="s1">''</span>
|
||||||
<span class="nx">puts</span> <span class="s2">"cake #{name}#{spaces} #{desc}"</span>
|
<span class="nx">puts</span> <span class="s2">"cake #{name}#{spaces} #{desc}"</span>
|
||||||
<span class="nx">puts</span> <span class="nx">oparse</span><span class="p">.</span><span class="nx">help</span><span class="p">()</span> <span class="k">if</span> <span class="nx">switches</span><span class="p">.</span><span class="nx">length</span></pre></div> </td> </tr> <tr id="section-10"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-10">#</a> </div> <p>Print an error and exit when attempting to all an undefined task.</p> </td> <td class="code"> <div class="highlight"><pre><span class="nv">missingTask = </span><span class="p">(</span><span class="nx">task</span><span class="p">)</span> <span class="o">-></span>
|
<span class="nx">puts</span> <span class="nx">oparse</span><span class="p">.</span><span class="nx">help</span><span class="p">()</span> <span class="k">if</span> <span class="nx">switches</span><span class="p">.</span><span class="nx">length</span></pre></div> </td> </tr> <tr id="section-10"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-10">#</a> </div> <p>Print an error and exit when attempting to all an undefined task.</p> </td> <td class="code"> <div class="highlight"><pre><span class="nv">missingTask = </span><span class="p">(</span><span class="nx">task</span><span class="p">)</span> <span class="o">-></span>
|
||||||
|
|
|
@ -4,19 +4,16 @@ contains the main entry functions for tokenzing, parsing, and compiling source
|
||||||
CoffeeScript into JavaScript.</p>
|
CoffeeScript into JavaScript.</p>
|
||||||
|
|
||||||
<p>If included on a webpage, it will automatically sniff out, compile, and
|
<p>If included on a webpage, it will automatically sniff out, compile, and
|
||||||
execute all scripts present in <code>text/coffeescript</code> tags.</p> </td> <td class="code"> <div class="highlight"><pre></pre></div> </td> </tr> <tr id="section-2"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-2">#</a> </div> <p>Set up dependencies correctly for both the server and the browser.</p> </td> <td class="code"> <div class="highlight"><pre><span class="k">if</span> <span class="nx">process</span><span class="o">?</span>
|
execute all scripts present in <code>text/coffeescript</code> tags.</p> </td> <td class="code"> <div class="highlight"><pre><span class="nv">path = </span><span class="nx">require</span> <span class="s1">'path'</span>
|
||||||
<span class="nv">path = </span><span class="nx">require</span> <span class="s1">'path'</span>
|
<span class="p">{</span><span class="nx">Lexer</span><span class="p">}</span> <span class="o">=</span> <span class="nx">require</span> <span class="s1">'./lexer'</span>
|
||||||
<span class="nv">Lexer = </span><span class="nx">require</span><span class="p">(</span><span class="s1">'./lexer'</span><span class="p">).</span><span class="nx">Lexer</span>
|
<span class="p">{</span><span class="nx">parser</span><span class="p">}</span> <span class="o">=</span> <span class="nx">require</span> <span class="s1">'./parser'</span></pre></div> </td> </tr> <tr id="section-2"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-2">#</a> </div> <p>TODO: Remove registerExtension when fully deprecated</p> </td> <td class="code"> <div class="highlight"><pre><span class="k">if</span> <span class="nx">require</span><span class="p">.</span><span class="nx">extensions</span>
|
||||||
<span class="nv">parser = </span><span class="nx">require</span><span class="p">(</span><span class="s1">'./parser'</span><span class="p">).</span><span class="nx">parser</span>
|
<span class="nv">fs = </span><span class="nx">require</span> <span class="s1">'fs'</span>
|
||||||
<span class="nv">helpers = </span><span class="nx">require</span><span class="p">(</span><span class="s1">'./helpers'</span><span class="p">).</span><span class="nx">helpers</span>
|
<span class="nx">require</span><span class="p">.</span><span class="nx">extensions</span><span class="p">[</span><span class="s1">'.coffee'</span><span class="p">]</span> <span class="o">=</span> <span class="p">(</span><span class="nx">module</span><span class="p">,</span> <span class="nx">filename</span><span class="p">)</span> <span class="o">-></span>
|
||||||
<span class="nx">helpers</span><span class="p">.</span><span class="nx">extend</span> <span class="nx">global</span><span class="p">,</span> <span class="nx">require</span> <span class="s1">'./nodes'</span>
|
<span class="nv">content = </span><span class="nx">compile</span> <span class="nx">fs</span><span class="p">.</span><span class="nx">readFileSync</span> <span class="nx">filename</span><span class="p">,</span> <span class="s1">'utf8'</span>
|
||||||
<span class="k">if</span> <span class="nx">require</span><span class="p">.</span><span class="nx">registerExtension</span>
|
<span class="nv">module.filename = </span><span class="s2">"#{filename} (compiled)"</span>
|
||||||
<span class="nx">require</span><span class="p">.</span><span class="nx">registerExtension</span> <span class="s1">'.coffee'</span><span class="p">,</span> <span class="p">(</span><span class="nx">content</span><span class="p">)</span> <span class="o">-></span> <span class="nx">compile</span> <span class="nx">content</span>
|
<span class="nx">module</span><span class="p">.</span><span class="nx">_compile</span> <span class="nx">content</span><span class="p">,</span> <span class="nx">module</span><span class="p">.</span><span class="nx">filename</span>
|
||||||
<span class="k">else</span>
|
<span class="k">else</span> <span class="k">if</span> <span class="nx">require</span><span class="p">.</span><span class="nx">registerExtension</span>
|
||||||
<span class="k">this</span><span class="p">.</span><span class="nv">exports = </span><span class="k">this</span><span class="p">.</span><span class="nv">CoffeeScript = </span><span class="p">{}</span>
|
<span class="nx">require</span><span class="p">.</span><span class="nx">registerExtension</span> <span class="s1">'.coffee'</span><span class="p">,</span> <span class="p">(</span><span class="nx">content</span><span class="p">)</span> <span class="o">-></span> <span class="nx">compile</span> <span class="nx">content</span></pre></div> </td> </tr> <tr id="section-3"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-3">#</a> </div> <p>The current CoffeeScript version number.</p> </td> <td class="code"> <div class="highlight"><pre><span class="nv">exports.VERSION = </span><span class="s1">'0.9.4'</span></pre></div> </td> </tr> <tr id="section-4"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-4">#</a> </div> <p>Compile a string of CoffeeScript code to JavaScript, using the Coffee/Jison
|
||||||
<span class="nv">Lexer = </span><span class="k">this</span><span class="p">.</span><span class="nx">Lexer</span>
|
|
||||||
<span class="nv">parser = </span><span class="k">this</span><span class="p">.</span><span class="nx">parser</span>
|
|
||||||
<span class="nv">helpers = </span><span class="k">this</span><span class="p">.</span><span class="nx">helpers</span></pre></div> </td> </tr> <tr id="section-3"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-3">#</a> </div> <p>The current CoffeeScript version number.</p> </td> <td class="code"> <div class="highlight"><pre><span class="nv">exports.VERSION = </span><span class="s1">'0.9.3'</span></pre></div> </td> </tr> <tr id="section-4"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-4">#</a> </div> <p>Compile a string of CoffeeScript code to JavaScript, using the Coffee/Jison
|
|
||||||
compiler.</p> </td> <td class="code"> <div class="highlight"><pre><span class="nv">exports.compile = compile = </span><span class="p">(</span><span class="nx">code</span><span class="p">,</span> <span class="nx">options</span><span class="p">)</span> <span class="o">-></span>
|
compiler.</p> </td> <td class="code"> <div class="highlight"><pre><span class="nv">exports.compile = compile = </span><span class="p">(</span><span class="nx">code</span><span class="p">,</span> <span class="nx">options</span><span class="p">)</span> <span class="o">-></span>
|
||||||
<span class="nx">options</span> <span class="o">or=</span> <span class="p">{}</span>
|
<span class="nx">options</span> <span class="o">or=</span> <span class="p">{}</span>
|
||||||
<span class="k">try</span>
|
<span class="k">try</span>
|
||||||
|
@ -28,10 +25,13 @@ compiler.</p> </td> <td class="code"> <div
|
||||||
then compile it by calling <code>.compile()</code> on the root, or traverse it by using
|
then compile it by calling <code>.compile()</code> on the root, or traverse it by using
|
||||||
<code>.traverse()</code> with a callback.</p> </td> <td class="code"> <div class="highlight"><pre><span class="nv">exports.nodes = </span><span class="p">(</span><span class="nx">code</span><span class="p">)</span> <span class="o">-></span>
|
<code>.traverse()</code> with a callback.</p> </td> <td class="code"> <div class="highlight"><pre><span class="nv">exports.nodes = </span><span class="p">(</span><span class="nx">code</span><span class="p">)</span> <span class="o">-></span>
|
||||||
<span class="nx">parser</span><span class="p">.</span><span class="nx">parse</span> <span class="nx">lexer</span><span class="p">.</span><span class="nx">tokenize</span> <span class="nx">code</span></pre></div> </td> </tr> <tr id="section-7"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-7">#</a> </div> <p>Compile and execute a string of CoffeeScript (on the server), correctly
|
<span class="nx">parser</span><span class="p">.</span><span class="nx">parse</span> <span class="nx">lexer</span><span class="p">.</span><span class="nx">tokenize</span> <span class="nx">code</span></pre></div> </td> </tr> <tr id="section-7"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-7">#</a> </div> <p>Compile and execute a string of CoffeeScript (on the server), correctly
|
||||||
setting <code>__filename</code>, <code>__dirname</code>, and relative <code>require()</code>.</p> </td> <td class="code"> <div class="highlight"><pre><span class="nv">exports.run = </span><span class="p">(</span><span class="nx">code</span><span class="p">,</span> <span class="nx">options</span><span class="p">)</span> <span class="o">-></span>
|
setting <code>__filename</code>, <code>__dirname</code>, and relative <code>require()</code>.</p> </td> <td class="code"> <div class="highlight"><pre><span class="nv">exports.run = </span><span class="p">(</span><span class="nx">code</span><span class="p">,</span> <span class="nx">options</span><span class="p">)</span> <span class="o">-></span></pre></div> </td> </tr> <tr id="section-8"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-8">#</a> </div> <p>We want the root module.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nv">root = </span><span class="nx">module</span>
|
||||||
<span class="nv">module.filename = __filename = </span><span class="nx">options</span><span class="p">.</span><span class="nx">fileName</span>
|
<span class="k">while</span> <span class="nx">root</span><span class="p">.</span><span class="nx">parent</span>
|
||||||
<span class="nv">__dirname = </span><span class="nx">path</span><span class="p">.</span><span class="nx">dirname</span> <span class="nx">__filename</span>
|
<span class="nv">root = </span><span class="nx">root</span><span class="p">.</span><span class="nx">parent</span></pre></div> </td> </tr> <tr id="section-9"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-9">#</a> </div> <p>Set the filename</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nv">root.filename = __filename = </span><span class="s2">"#{options.fileName} (compiled)"</span></pre></div> </td> </tr> <tr id="section-10"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-10">#</a> </div> <p>Clear the module cache</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nv">root.moduleCache = </span><span class="p">{}</span> <span class="k">if</span> <span class="nx">root</span><span class="p">.</span><span class="nx">moduleCache</span></pre></div> </td> </tr> <tr id="section-11"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-11">#</a> </div> <p>Compile</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">root</span><span class="p">.</span><span class="nx">_compile</span> <span class="nx">exports</span><span class="p">.</span><span class="nx">compile</span><span class="p">(</span><span class="nx">code</span><span class="p">,</span> <span class="nx">options</span><span class="p">),</span> <span class="nx">root</span><span class="p">.</span><span class="nx">filename</span></pre></div> </td> </tr> <tr id="section-12"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-12">#</a> </div> <p>Compile and evaluate a string of CoffeeScript (in a Node.js-like environment).
|
||||||
<span class="nb">eval</span> <span class="nx">exports</span><span class="p">.</span><span class="nx">compile</span> <span class="nx">code</span><span class="p">,</span> <span class="nx">options</span></pre></div> </td> </tr> <tr id="section-8"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-8">#</a> </div> <p>Instantiate a Lexer for our use here.</p> </td> <td class="code"> <div class="highlight"><pre><span class="nv">lexer = </span><span class="k">new</span> <span class="nx">Lexer</span></pre></div> </td> </tr> <tr id="section-9"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-9">#</a> </div> <p>The real Lexer produces a generic stream of tokens. This object provides a
|
The CoffeeScript REPL uses this to run the input.</p> </td> <td class="code"> <div class="highlight"><pre><span class="nv">exports.eval = </span><span class="p">(</span><span class="nx">code</span><span class="p">,</span> <span class="nx">options</span><span class="p">)</span> <span class="o">-></span>
|
||||||
|
<span class="nv">__filename = </span><span class="nx">options</span><span class="p">.</span><span class="nx">fileName</span>
|
||||||
|
<span class="nv">__dirname = </span><span class="nx">path</span><span class="p">.</span><span class="nx">dirname</span> <span class="nx">__filename</span>
|
||||||
|
<span class="nb">eval</span> <span class="nx">exports</span><span class="p">.</span><span class="nx">compile</span><span class="p">(</span><span class="nx">code</span><span class="p">,</span> <span class="nx">options</span><span class="p">)</span></pre></div> </td> </tr> <tr id="section-13"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-13">#</a> </div> <p>Instantiate a Lexer for our use here.</p> </td> <td class="code"> <div class="highlight"><pre><span class="nv">lexer = </span><span class="k">new</span> <span class="nx">Lexer</span></pre></div> </td> </tr> <tr id="section-14"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-14">#</a> </div> <p>The real Lexer produces a generic stream of tokens. This object provides a
|
||||||
thin wrapper around it, compatible with the Jison API. We can then pass it
|
thin wrapper around it, compatible with the Jison API. We can then pass it
|
||||||
directly as a "Jison lexer".</p> </td> <td class="code"> <div class="highlight"><pre><span class="nv">parser.lexer =</span>
|
directly as a "Jison lexer".</p> </td> <td class="code"> <div class="highlight"><pre><span class="nv">parser.lexer =</span>
|
||||||
<span class="nx">lex</span><span class="o">:</span> <span class="o">-></span>
|
<span class="nx">lex</span><span class="o">:</span> <span class="o">-></span>
|
||||||
|
@ -45,4 +45,6 @@ directly as a "Jison lexer".</p> </td> <td class="code">
|
||||||
<span class="vi">@pos = </span><span class="mi">0</span>
|
<span class="vi">@pos = </span><span class="mi">0</span>
|
||||||
<span class="nx">upcomingInput</span><span class="o">:</span> <span class="o">-></span> <span class="s2">""</span>
|
<span class="nx">upcomingInput</span><span class="o">:</span> <span class="o">-></span> <span class="s2">""</span>
|
||||||
|
|
||||||
|
<span class="nv">parser.yy = </span><span class="nx">require</span> <span class="s1">'./nodes'</span>
|
||||||
|
|
||||||
</pre></div> </td> </tr> </tbody> </table> </div> </body> </html>
|
</pre></div> </td> </tr> </tbody> </table> </div> </body> </html>
|
|
@ -21,6 +21,7 @@ optionally. If no action is specified, we simply pass the value of the
|
||||||
previous nonterminal.</p> </td> <td class="code"> <div class="highlight"><pre><span class="nv">o = </span><span class="p">(</span><span class="nx">patternString</span><span class="p">,</span> <span class="nx">action</span><span class="p">,</span> <span class="nx">options</span><span class="p">)</span> <span class="o">-></span>
|
previous nonterminal.</p> </td> <td class="code"> <div class="highlight"><pre><span class="nv">o = </span><span class="p">(</span><span class="nx">patternString</span><span class="p">,</span> <span class="nx">action</span><span class="p">,</span> <span class="nx">options</span><span class="p">)</span> <span class="o">-></span>
|
||||||
<span class="k">return</span> <span class="p">[</span><span class="nx">patternString</span><span class="p">,</span> <span class="s1">'$$ = $1;'</span><span class="p">,</span> <span class="nx">options</span><span class="p">]</span> <span class="nx">unless</span> <span class="nx">action</span>
|
<span class="k">return</span> <span class="p">[</span><span class="nx">patternString</span><span class="p">,</span> <span class="s1">'$$ = $1;'</span><span class="p">,</span> <span class="nx">options</span><span class="p">]</span> <span class="nx">unless</span> <span class="nx">action</span>
|
||||||
<span class="nv">action = </span><span class="k">if</span> <span class="nv">match = </span><span class="p">(</span><span class="nx">action</span> <span class="o">+</span> <span class="s1">''</span><span class="p">).</span><span class="nx">match</span><span class="p">(</span><span class="nx">unwrap</span><span class="p">)</span> <span class="k">then</span> <span class="nx">match</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="k">else</span> <span class="s2">"(#{action}())"</span>
|
<span class="nv">action = </span><span class="k">if</span> <span class="nv">match = </span><span class="p">(</span><span class="nx">action</span> <span class="o">+</span> <span class="s1">''</span><span class="p">).</span><span class="nx">match</span><span class="p">(</span><span class="nx">unwrap</span><span class="p">)</span> <span class="k">then</span> <span class="nx">match</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="k">else</span> <span class="s2">"(#{action}())"</span>
|
||||||
|
<span class="nv">action = </span><span class="nx">action</span><span class="p">.</span><span class="nx">replace</span> <span class="sr">/\b(?:[A-Z][a-z]+Node|Expressions)\b/g</span><span class="p">,</span> <span class="s1">'yy.$&'</span>
|
||||||
<span class="p">[</span><span class="nx">patternString</span><span class="p">,</span> <span class="s2">"$$ = #{action};"</span><span class="p">,</span> <span class="nx">options</span><span class="p">]</span></pre></div> </td> </tr> <tr id="section-6"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-6">#</a> </div> <h2>Grammatical Rules</h2> </td> <td class="code"> <div class="highlight"><pre></pre></div> </td> </tr> <tr id="section-7"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-7">#</a> </div> <p>In all of the rules that follow, you'll see the name of the nonterminal as
|
<span class="p">[</span><span class="nx">patternString</span><span class="p">,</span> <span class="s2">"$$ = #{action};"</span><span class="p">,</span> <span class="nx">options</span><span class="p">]</span></pre></div> </td> </tr> <tr id="section-6"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-6">#</a> </div> <h2>Grammatical Rules</h2> </td> <td class="code"> <div class="highlight"><pre></pre></div> </td> </tr> <tr id="section-7"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-7">#</a> </div> <p>In all of the rules that follow, you'll see the name of the nonterminal as
|
||||||
the key to a list of alternative matches. With each match's action, the
|
the key to a list of alternative matches. With each match's action, the
|
||||||
dollar-sign variables are provided by Jison as references to the value of
|
dollar-sign variables are provided by Jison as references to the value of
|
||||||
|
@ -182,6 +183,7 @@ and optional references to the superclass.</p> </td> <td
|
||||||
<span class="p">]</span></pre></div> </td> </tr> <tr id="section-36"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-36">#</a> </div> <p>Assignments that can happen directly inside a class declaration.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">ClassAssign</span><span class="o">:</span> <span class="p">[</span>
|
<span class="p">]</span></pre></div> </td> </tr> <tr id="section-36"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-36">#</a> </div> <p>Assignments that can happen directly inside a class declaration.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">ClassAssign</span><span class="o">:</span> <span class="p">[</span>
|
||||||
<span class="nx">o</span> <span class="s2">"AssignObj"</span><span class="p">,</span> <span class="o">-></span> <span class="nx">$1</span>
|
<span class="nx">o</span> <span class="s2">"AssignObj"</span><span class="p">,</span> <span class="o">-></span> <span class="nx">$1</span>
|
||||||
<span class="nx">o</span> <span class="s2">"ThisProperty : Expression"</span><span class="p">,</span> <span class="o">-></span> <span class="k">new</span> <span class="nx">AssignNode</span> <span class="k">new</span> <span class="nx">ValueNode</span><span class="p">(</span><span class="nx">$1</span><span class="p">),</span> <span class="nx">$3</span><span class="p">,</span> <span class="s1">'this'</span>
|
<span class="nx">o</span> <span class="s2">"ThisProperty : Expression"</span><span class="p">,</span> <span class="o">-></span> <span class="k">new</span> <span class="nx">AssignNode</span> <span class="k">new</span> <span class="nx">ValueNode</span><span class="p">(</span><span class="nx">$1</span><span class="p">),</span> <span class="nx">$3</span><span class="p">,</span> <span class="s1">'this'</span>
|
||||||
|
<span class="nx">o</span> <span class="s2">"ThisProperty : INDENT Expression OUTDENT"</span><span class="p">,</span> <span class="o">-></span> <span class="k">new</span> <span class="nx">AssignNode</span> <span class="k">new</span> <span class="nx">ValueNode</span><span class="p">(</span><span class="nx">$1</span><span class="p">),</span> <span class="nx">$4</span><span class="p">,</span> <span class="s1">'this'</span>
|
||||||
<span class="p">]</span></pre></div> </td> </tr> <tr id="section-37"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-37">#</a> </div> <p>A list of assignments to a class.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">ClassBody</span><span class="o">:</span> <span class="p">[</span>
|
<span class="p">]</span></pre></div> </td> </tr> <tr id="section-37"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-37">#</a> </div> <p>A list of assignments to a class.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">ClassBody</span><span class="o">:</span> <span class="p">[</span>
|
||||||
<span class="nx">o</span> <span class="s2">""</span><span class="p">,</span> <span class="o">-></span> <span class="p">[]</span>
|
<span class="nx">o</span> <span class="s2">""</span><span class="p">,</span> <span class="o">-></span> <span class="p">[]</span>
|
||||||
<span class="nx">o</span> <span class="s2">"ClassAssign"</span><span class="p">,</span> <span class="o">-></span> <span class="p">[</span><span class="nx">$1</span><span class="p">]</span>
|
<span class="nx">o</span> <span class="s2">"ClassAssign"</span><span class="p">,</span> <span class="o">-></span> <span class="p">[</span><span class="nx">$1</span><span class="p">]</span>
|
||||||
|
|
|
@ -1,35 +1,34 @@
|
||||||
<!DOCTYPE html> <html> <head> <title>helpers.coffee</title> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> <link rel="stylesheet" media="all" href="docco.css" /> </head> <body> <div id="container"> <div id="background"></div> <div id="jump_to"> Jump To … <div id="jump_wrapper"> <div id="jump_page"> <a class="source" href="browser.html"> browser.coffee </a> <a class="source" href="cake.html"> cake.coffee </a> <a class="source" href="coffee-script.html"> coffee-script.coffee </a> <a class="source" href="command.html"> command.coffee </a> <a class="source" href="grammar.html"> grammar.coffee </a> <a class="source" href="helpers.html"> helpers.coffee </a> <a class="source" href="index.html"> index.coffee </a> <a class="source" href="lexer.html"> lexer.coffee </a> <a class="source" href="nodes.html"> nodes.coffee </a> <a class="source" href="optparse.html"> optparse.coffee </a> <a class="source" href="repl.html"> repl.coffee </a> <a class="source" href="rewriter.html"> rewriter.coffee </a> <a class="source" href="scope.html"> scope.coffee </a> </div> </div> </div> <table cellpadding="0" cellspacing="0"> <thead> <tr> <th class="docs"> <h1> helpers.coffee </h1> </th> <th class="code"> </th> </tr> </thead> <tbody> <tr id="section-1"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-1">#</a> </div> <p>This file contains the common helper functions that we'd like to share among
|
<!DOCTYPE html> <html> <head> <title>helpers.coffee</title> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> <link rel="stylesheet" media="all" href="docco.css" /> </head> <body> <div id="container"> <div id="background"></div> <div id="jump_to"> Jump To … <div id="jump_wrapper"> <div id="jump_page"> <a class="source" href="browser.html"> browser.coffee </a> <a class="source" href="cake.html"> cake.coffee </a> <a class="source" href="coffee-script.html"> coffee-script.coffee </a> <a class="source" href="command.html"> command.coffee </a> <a class="source" href="grammar.html"> grammar.coffee </a> <a class="source" href="helpers.html"> helpers.coffee </a> <a class="source" href="index.html"> index.coffee </a> <a class="source" href="lexer.html"> lexer.coffee </a> <a class="source" href="nodes.html"> nodes.coffee </a> <a class="source" href="optparse.html"> optparse.coffee </a> <a class="source" href="repl.html"> repl.coffee </a> <a class="source" href="rewriter.html"> rewriter.coffee </a> <a class="source" href="scope.html"> scope.coffee </a> </div> </div> </div> <table cellpadding="0" cellspacing="0"> <thead> <tr> <th class="docs"> <h1> helpers.coffee </h1> </th> <th class="code"> </th> </tr> </thead> <tbody> <tr id="section-1"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-1">#</a> </div> <p>This file contains the common helper functions that we'd like to share among
|
||||||
the <strong>Lexer</strong>, <strong>Rewriter</strong>, and the <strong>Nodes</strong>. Merge objects, flatten
|
the <strong>Lexer</strong>, <strong>Rewriter</strong>, and the <strong>Nodes</strong>. Merge objects, flatten
|
||||||
arrays, count characters, that sort of thing.</p> </td> <td class="code"> <div class="highlight"><pre></pre></div> </td> </tr> <tr id="section-2"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-2">#</a> </div> <p>Set up exported variables for both <strong>Node.js</strong> and the browser.</p> </td> <td class="code"> <div class="highlight"><pre><span class="k">this</span><span class="p">.</span><span class="nv">exports = </span><span class="k">this</span> <span class="nx">unless</span> <span class="nx">process</span><span class="o">?</span>
|
arrays, count characters, that sort of thing.</p> </td> <td class="code"> <div class="highlight"><pre><span class="nv">helpers = exports.helpers = </span><span class="p">{}</span></pre></div> </td> </tr> <tr id="section-2"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-2">#</a> </div> <p>Cross-browser indexOf, so that IE can join the party.</p> </td> <td class="code"> <div class="highlight"><pre><span class="nv">helpers.indexOf = indexOf = </span><span class="p">(</span><span class="nx">array</span><span class="p">,</span> <span class="nx">item</span><span class="p">,</span> <span class="nx">from</span><span class="p">)</span> <span class="o">-></span>
|
||||||
<span class="nv">helpers = exports.helpers = </span><span class="p">{}</span></pre></div> </td> </tr> <tr id="section-3"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-3">#</a> </div> <p>Cross-browser indexOf, so that IE can join the party.</p> </td> <td class="code"> <div class="highlight"><pre><span class="nv">helpers.indexOf = indexOf = </span><span class="p">(</span><span class="nx">array</span><span class="p">,</span> <span class="nx">item</span><span class="p">,</span> <span class="nx">from</span><span class="p">)</span> <span class="o">-></span>
|
|
||||||
<span class="k">return</span> <span class="nx">array</span><span class="p">.</span><span class="nx">indexOf</span> <span class="nx">item</span><span class="p">,</span> <span class="nx">from</span> <span class="k">if</span> <span class="nx">array</span><span class="p">.</span><span class="nx">indexOf</span>
|
<span class="k">return</span> <span class="nx">array</span><span class="p">.</span><span class="nx">indexOf</span> <span class="nx">item</span><span class="p">,</span> <span class="nx">from</span> <span class="k">if</span> <span class="nx">array</span><span class="p">.</span><span class="nx">indexOf</span>
|
||||||
<span class="k">for</span> <span class="nx">other</span><span class="p">,</span> <span class="nx">index</span> <span class="k">in</span> <span class="nx">array</span>
|
<span class="k">for</span> <span class="nx">other</span><span class="p">,</span> <span class="nx">index</span> <span class="k">in</span> <span class="nx">array</span>
|
||||||
<span class="k">if</span> <span class="nx">other</span> <span class="o">is</span> <span class="nx">item</span> <span class="o">and</span> <span class="p">(</span><span class="o">not</span> <span class="nx">from</span> <span class="o">or</span> <span class="p">(</span><span class="nx">from</span> <span class="o"><=</span> <span class="nx">index</span><span class="p">))</span>
|
<span class="k">if</span> <span class="nx">other</span> <span class="o">is</span> <span class="nx">item</span> <span class="o">and</span> <span class="p">(</span><span class="o">not</span> <span class="nx">from</span> <span class="o">or</span> <span class="p">(</span><span class="nx">from</span> <span class="o"><=</span> <span class="nx">index</span><span class="p">))</span>
|
||||||
<span class="k">return</span> <span class="nx">index</span>
|
<span class="k">return</span> <span class="nx">index</span>
|
||||||
<span class="o">-</span><span class="mi">1</span></pre></div> </td> </tr> <tr id="section-4"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-4">#</a> </div> <p>Does a list include a value?</p> </td> <td class="code"> <div class="highlight"><pre><span class="nv">helpers.include = include = </span><span class="p">(</span><span class="nx">list</span><span class="p">,</span> <span class="nx">value</span><span class="p">)</span> <span class="o">-></span>
|
<span class="o">-</span><span class="mi">1</span></pre></div> </td> </tr> <tr id="section-3"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-3">#</a> </div> <p>Does a list include a value?</p> </td> <td class="code"> <div class="highlight"><pre><span class="nv">helpers.include = include = </span><span class="p">(</span><span class="nx">list</span><span class="p">,</span> <span class="nx">value</span><span class="p">)</span> <span class="o">-></span>
|
||||||
<span class="nx">indexOf</span><span class="p">(</span><span class="nx">list</span><span class="p">,</span> <span class="nx">value</span><span class="p">)</span> <span class="o">>=</span> <span class="mi">0</span></pre></div> </td> </tr> <tr id="section-5"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-5">#</a> </div> <p>Peek at the beginning of a given string to see if it matches a sequence.</p> </td> <td class="code"> <div class="highlight"><pre><span class="nv">helpers.starts = starts = </span><span class="p">(</span><span class="nx">string</span><span class="p">,</span> <span class="nx">literal</span><span class="p">,</span> <span class="nx">start</span><span class="p">)</span> <span class="o">-></span>
|
<span class="nx">indexOf</span><span class="p">(</span><span class="nx">list</span><span class="p">,</span> <span class="nx">value</span><span class="p">)</span> <span class="o">>=</span> <span class="mi">0</span></pre></div> </td> </tr> <tr id="section-4"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-4">#</a> </div> <p>Peek at the beginning of a given string to see if it matches a sequence.</p> </td> <td class="code"> <div class="highlight"><pre><span class="nv">helpers.starts = starts = </span><span class="p">(</span><span class="nx">string</span><span class="p">,</span> <span class="nx">literal</span><span class="p">,</span> <span class="nx">start</span><span class="p">)</span> <span class="o">-></span>
|
||||||
<span class="nx">string</span><span class="p">.</span><span class="nx">substring</span><span class="p">(</span><span class="nx">start</span><span class="p">,</span> <span class="p">(</span><span class="nx">start</span> <span class="o">or</span> <span class="mi">0</span><span class="p">)</span> <span class="o">+</span> <span class="nx">literal</span><span class="p">.</span><span class="nx">length</span><span class="p">)</span> <span class="o">is</span> <span class="nx">literal</span></pre></div> </td> </tr> <tr id="section-6"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-6">#</a> </div> <p>Peek at the end of a given string to see if it matches a sequence.</p> </td> <td class="code"> <div class="highlight"><pre><span class="nv">helpers.ends = ends = </span><span class="p">(</span><span class="nx">string</span><span class="p">,</span> <span class="nx">literal</span><span class="p">,</span> <span class="nx">back</span><span class="p">)</span> <span class="o">-></span>
|
<span class="nx">string</span><span class="p">.</span><span class="nx">substring</span><span class="p">(</span><span class="nx">start</span><span class="p">,</span> <span class="p">(</span><span class="nx">start</span> <span class="o">or</span> <span class="mi">0</span><span class="p">)</span> <span class="o">+</span> <span class="nx">literal</span><span class="p">.</span><span class="nx">length</span><span class="p">)</span> <span class="o">is</span> <span class="nx">literal</span></pre></div> </td> </tr> <tr id="section-5"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-5">#</a> </div> <p>Peek at the end of a given string to see if it matches a sequence.</p> </td> <td class="code"> <div class="highlight"><pre><span class="nv">helpers.ends = ends = </span><span class="p">(</span><span class="nx">string</span><span class="p">,</span> <span class="nx">literal</span><span class="p">,</span> <span class="nx">back</span><span class="p">)</span> <span class="o">-></span>
|
||||||
<span class="nv">start = </span><span class="nx">string</span><span class="p">.</span><span class="nx">length</span> <span class="o">-</span> <span class="nx">literal</span><span class="p">.</span><span class="nx">length</span> <span class="o">-</span> <span class="p">(</span><span class="nx">back</span> <span class="o">?</span> <span class="mi">0</span><span class="p">)</span>
|
<span class="nv">start = </span><span class="nx">string</span><span class="p">.</span><span class="nx">length</span> <span class="o">-</span> <span class="nx">literal</span><span class="p">.</span><span class="nx">length</span> <span class="o">-</span> <span class="p">(</span><span class="nx">back</span> <span class="o">?</span> <span class="mi">0</span><span class="p">)</span>
|
||||||
<span class="nx">string</span><span class="p">.</span><span class="nx">substring</span><span class="p">(</span><span class="nx">start</span><span class="p">,</span> <span class="nx">start</span> <span class="o">+</span> <span class="nx">literal</span><span class="p">.</span><span class="nx">length</span><span class="p">)</span> <span class="o">is</span> <span class="nx">literal</span></pre></div> </td> </tr> <tr id="section-7"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-7">#</a> </div> <p>Trim out all falsy values from an array.</p> </td> <td class="code"> <div class="highlight"><pre><span class="nv">helpers.compact = compact = </span><span class="p">(</span><span class="nx">array</span><span class="p">)</span> <span class="o">-></span> <span class="nx">item</span> <span class="k">for</span> <span class="nx">item</span> <span class="k">in</span> <span class="nx">array</span> <span class="k">when</span> <span class="nx">item</span></pre></div> </td> </tr> <tr id="section-8"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-8">#</a> </div> <p>Count the number of occurences of a character in a string.</p> </td> <td class="code"> <div class="highlight"><pre><span class="nv">helpers.count = count = </span><span class="p">(</span><span class="nx">string</span><span class="p">,</span> <span class="nx">letter</span><span class="p">)</span> <span class="o">-></span>
|
<span class="nx">string</span><span class="p">.</span><span class="nx">substring</span><span class="p">(</span><span class="nx">start</span><span class="p">,</span> <span class="nx">start</span> <span class="o">+</span> <span class="nx">literal</span><span class="p">.</span><span class="nx">length</span><span class="p">)</span> <span class="o">is</span> <span class="nx">literal</span></pre></div> </td> </tr> <tr id="section-6"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-6">#</a> </div> <p>Trim out all falsy values from an array.</p> </td> <td class="code"> <div class="highlight"><pre><span class="nv">helpers.compact = compact = </span><span class="p">(</span><span class="nx">array</span><span class="p">)</span> <span class="o">-></span> <span class="nx">item</span> <span class="k">for</span> <span class="nx">item</span> <span class="k">in</span> <span class="nx">array</span> <span class="k">when</span> <span class="nx">item</span></pre></div> </td> </tr> <tr id="section-7"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-7">#</a> </div> <p>Count the number of occurences of a character in a string.</p> </td> <td class="code"> <div class="highlight"><pre><span class="nv">helpers.count = count = </span><span class="p">(</span><span class="nx">string</span><span class="p">,</span> <span class="nx">letter</span><span class="p">)</span> <span class="o">-></span>
|
||||||
<span class="nv">num = </span><span class="mi">0</span>
|
<span class="nv">num = </span><span class="mi">0</span>
|
||||||
<span class="nv">pos = </span><span class="nx">indexOf</span> <span class="nx">string</span><span class="p">,</span> <span class="nx">letter</span>
|
<span class="nv">pos = </span><span class="nx">indexOf</span> <span class="nx">string</span><span class="p">,</span> <span class="nx">letter</span>
|
||||||
<span class="k">while</span> <span class="nx">pos</span> <span class="o">isnt</span> <span class="o">-</span><span class="mi">1</span>
|
<span class="k">while</span> <span class="nx">pos</span> <span class="o">isnt</span> <span class="o">-</span><span class="mi">1</span>
|
||||||
<span class="nx">num</span> <span class="o">+=</span> <span class="mi">1</span>
|
<span class="nx">num</span> <span class="o">+=</span> <span class="mi">1</span>
|
||||||
<span class="nv">pos = </span><span class="nx">indexOf</span> <span class="nx">string</span><span class="p">,</span> <span class="nx">letter</span><span class="p">,</span> <span class="nx">pos</span> <span class="o">+</span> <span class="mi">1</span>
|
<span class="nv">pos = </span><span class="nx">indexOf</span> <span class="nx">string</span><span class="p">,</span> <span class="nx">letter</span><span class="p">,</span> <span class="nx">pos</span> <span class="o">+</span> <span class="mi">1</span>
|
||||||
<span class="nx">num</span></pre></div> </td> </tr> <tr id="section-9"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-9">#</a> </div> <p>Merge objects, returning a fresh copy with attributes from both sides.
|
<span class="nx">num</span></pre></div> </td> </tr> <tr id="section-8"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-8">#</a> </div> <p>Merge objects, returning a fresh copy with attributes from both sides.
|
||||||
Used every time <code>BaseNode#compile</code> is called, to allow properties in the
|
Used every time <code>BaseNode#compile</code> is called, to allow properties in the
|
||||||
options hash to propagate down the tree without polluting other branches.</p> </td> <td class="code"> <div class="highlight"><pre><span class="nv">helpers.merge = merge = </span><span class="p">(</span><span class="nx">options</span><span class="p">,</span> <span class="nx">overrides</span><span class="p">)</span> <span class="o">-></span>
|
options hash to propagate down the tree without polluting other branches.</p> </td> <td class="code"> <div class="highlight"><pre><span class="nv">helpers.merge = merge = </span><span class="p">(</span><span class="nx">options</span><span class="p">,</span> <span class="nx">overrides</span><span class="p">)</span> <span class="o">-></span>
|
||||||
<span class="nv">fresh = </span><span class="p">{}</span>
|
<span class="nv">fresh = </span><span class="p">{}</span>
|
||||||
<span class="p">(</span><span class="nx">fresh</span><span class="p">[</span><span class="nx">key</span><span class="p">]</span> <span class="o">=</span> <span class="nx">val</span><span class="p">)</span> <span class="k">for</span> <span class="nx">all</span> <span class="nx">key</span><span class="p">,</span> <span class="nx">val</span> <span class="k">of</span> <span class="nx">options</span>
|
<span class="p">(</span><span class="nx">fresh</span><span class="p">[</span><span class="nx">key</span><span class="p">]</span> <span class="o">=</span> <span class="nx">val</span><span class="p">)</span> <span class="k">for</span> <span class="nx">all</span> <span class="nx">key</span><span class="p">,</span> <span class="nx">val</span> <span class="k">of</span> <span class="nx">options</span>
|
||||||
<span class="p">(</span><span class="nx">fresh</span><span class="p">[</span><span class="nx">key</span><span class="p">]</span> <span class="o">=</span> <span class="nx">val</span><span class="p">)</span> <span class="k">for</span> <span class="nx">all</span> <span class="nx">key</span><span class="p">,</span> <span class="nx">val</span> <span class="k">of</span> <span class="nx">overrides</span> <span class="k">if</span> <span class="nx">overrides</span>
|
<span class="p">(</span><span class="nx">fresh</span><span class="p">[</span><span class="nx">key</span><span class="p">]</span> <span class="o">=</span> <span class="nx">val</span><span class="p">)</span> <span class="k">for</span> <span class="nx">all</span> <span class="nx">key</span><span class="p">,</span> <span class="nx">val</span> <span class="k">of</span> <span class="nx">overrides</span> <span class="k">if</span> <span class="nx">overrides</span>
|
||||||
<span class="nx">fresh</span></pre></div> </td> </tr> <tr id="section-10"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-10">#</a> </div> <p>Extend a source object with the properties of another object (shallow copy).
|
<span class="nx">fresh</span></pre></div> </td> </tr> <tr id="section-9"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-9">#</a> </div> <p>Extend a source object with the properties of another object (shallow copy).
|
||||||
We use this to simulate Node's deprecated <code>process.mixin</code></p> </td> <td class="code"> <div class="highlight"><pre><span class="nv">helpers.extend = extend = </span><span class="p">(</span><span class="nx">object</span><span class="p">,</span> <span class="nx">properties</span><span class="p">)</span> <span class="o">-></span>
|
We use this to simulate Node's deprecated <code>process.mixin</code></p> </td> <td class="code"> <div class="highlight"><pre><span class="nv">helpers.extend = extend = </span><span class="p">(</span><span class="nx">object</span><span class="p">,</span> <span class="nx">properties</span><span class="p">)</span> <span class="o">-></span>
|
||||||
<span class="p">(</span><span class="nx">object</span><span class="p">[</span><span class="nx">key</span><span class="p">]</span> <span class="o">=</span> <span class="nx">val</span><span class="p">)</span> <span class="k">for</span> <span class="nx">all</span> <span class="nx">key</span><span class="p">,</span> <span class="nx">val</span> <span class="k">of</span> <span class="nx">properties</span></pre></div> </td> </tr> <tr id="section-11"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-11">#</a> </div> <p>Return a completely flattened version of an array. Handy for getting a
|
<span class="p">(</span><span class="nx">object</span><span class="p">[</span><span class="nx">key</span><span class="p">]</span> <span class="o">=</span> <span class="nx">val</span><span class="p">)</span> <span class="k">for</span> <span class="nx">all</span> <span class="nx">key</span><span class="p">,</span> <span class="nx">val</span> <span class="k">of</span> <span class="nx">properties</span></pre></div> </td> </tr> <tr id="section-10"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-10">#</a> </div> <p>Return a completely flattened version of an array. Handy for getting a
|
||||||
list of <code>children</code> from the nodes.</p> </td> <td class="code"> <div class="highlight"><pre><span class="nv">helpers.flatten = flatten = </span><span class="p">(</span><span class="nx">array</span><span class="p">)</span> <span class="o">-></span>
|
list of <code>children</code> from the nodes.</p> </td> <td class="code"> <div class="highlight"><pre><span class="nv">helpers.flatten = flatten = </span><span class="p">(</span><span class="nx">array</span><span class="p">)</span> <span class="o">-></span>
|
||||||
<span class="nv">memo = </span><span class="p">[]</span>
|
<span class="nv">memo = </span><span class="p">[]</span>
|
||||||
<span class="k">for</span> <span class="nx">item</span> <span class="k">in</span> <span class="nx">array</span>
|
<span class="k">for</span> <span class="nx">item</span> <span class="k">in</span> <span class="nx">array</span>
|
||||||
<span class="k">if</span> <span class="nx">item</span> <span class="k">instanceof</span> <span class="nb">Array</span> <span class="k">then</span> <span class="nv">memo = </span><span class="nx">memo</span><span class="p">.</span><span class="nx">concat</span><span class="p">(</span><span class="nx">item</span><span class="p">)</span> <span class="k">else</span> <span class="nx">memo</span><span class="p">.</span><span class="nx">push</span><span class="p">(</span><span class="nx">item</span><span class="p">)</span>
|
<span class="k">if</span> <span class="nx">item</span> <span class="k">instanceof</span> <span class="nb">Array</span> <span class="k">then</span> <span class="nv">memo = </span><span class="nx">memo</span><span class="p">.</span><span class="nx">concat</span><span class="p">(</span><span class="nx">item</span><span class="p">)</span> <span class="k">else</span> <span class="nx">memo</span><span class="p">.</span><span class="nx">push</span><span class="p">(</span><span class="nx">item</span><span class="p">)</span>
|
||||||
<span class="nx">memo</span></pre></div> </td> </tr> <tr id="section-12"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-12">#</a> </div> <p>Delete a key from an object, returning the value. Useful when a node is
|
<span class="nx">memo</span></pre></div> </td> </tr> <tr id="section-11"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-11">#</a> </div> <p>Delete a key from an object, returning the value. Useful when a node is
|
||||||
looking for a particular method in an options hash.</p> </td> <td class="code"> <div class="highlight"><pre><span class="nv">helpers.del = del = </span><span class="p">(</span><span class="nx">obj</span><span class="p">,</span> <span class="nx">key</span><span class="p">)</span> <span class="o">-></span>
|
looking for a particular method in an options hash.</p> </td> <td class="code"> <div class="highlight"><pre><span class="nv">helpers.del = del = </span><span class="p">(</span><span class="nx">obj</span><span class="p">,</span> <span class="nx">key</span><span class="p">)</span> <span class="o">-></span>
|
||||||
<span class="nv">val = </span><span class="nx">obj</span><span class="p">[</span><span class="nx">key</span><span class="p">]</span>
|
<span class="nv">val = </span><span class="nx">obj</span><span class="p">[</span><span class="nx">key</span><span class="p">]</span>
|
||||||
<span class="k">delete</span> <span class="nx">obj</span><span class="p">[</span><span class="nx">key</span><span class="p">]</span>
|
<span class="k">delete</span> <span class="nx">obj</span><span class="p">[</span><span class="nx">key</span><span class="p">]</span>
|
||||||
|
|
File diff suppressed because one or more lines are too long
|
@ -1,14 +1,7 @@
|
||||||
<!DOCTYPE html> <html> <head> <title>nodes.coffee</title> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> <link rel="stylesheet" media="all" href="docco.css" /> </head> <body> <div id="container"> <div id="background"></div> <div id="jump_to"> Jump To … <div id="jump_wrapper"> <div id="jump_page"> <a class="source" href="browser.html"> browser.coffee </a> <a class="source" href="cake.html"> cake.coffee </a> <a class="source" href="coffee-script.html"> coffee-script.coffee </a> <a class="source" href="command.html"> command.coffee </a> <a class="source" href="grammar.html"> grammar.coffee </a> <a class="source" href="helpers.html"> helpers.coffee </a> <a class="source" href="index.html"> index.coffee </a> <a class="source" href="lexer.html"> lexer.coffee </a> <a class="source" href="nodes.html"> nodes.coffee </a> <a class="source" href="optparse.html"> optparse.coffee </a> <a class="source" href="repl.html"> repl.coffee </a> <a class="source" href="rewriter.html"> rewriter.coffee </a> <a class="source" href="scope.html"> scope.coffee </a> </div> </div> </div> <table cellpadding="0" cellspacing="0"> <thead> <tr> <th class="docs"> <h1> nodes.coffee </h1> </th> <th class="code"> </th> </tr> </thead> <tbody> <tr id="section-1"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-1">#</a> </div> <p><code>nodes.coffee</code> contains all of the node classes for the syntax tree. Most
|
<!DOCTYPE html> <html> <head> <title>nodes.coffee</title> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> <link rel="stylesheet" media="all" href="docco.css" /> </head> <body> <div id="container"> <div id="background"></div> <div id="jump_to"> Jump To … <div id="jump_wrapper"> <div id="jump_page"> <a class="source" href="browser.html"> browser.coffee </a> <a class="source" href="cake.html"> cake.coffee </a> <a class="source" href="coffee-script.html"> coffee-script.coffee </a> <a class="source" href="command.html"> command.coffee </a> <a class="source" href="grammar.html"> grammar.coffee </a> <a class="source" href="helpers.html"> helpers.coffee </a> <a class="source" href="index.html"> index.coffee </a> <a class="source" href="lexer.html"> lexer.coffee </a> <a class="source" href="nodes.html"> nodes.coffee </a> <a class="source" href="optparse.html"> optparse.coffee </a> <a class="source" href="repl.html"> repl.coffee </a> <a class="source" href="rewriter.html"> rewriter.coffee </a> <a class="source" href="scope.html"> scope.coffee </a> </div> </div> </div> <table cellpadding="0" cellspacing="0"> <thead> <tr> <th class="docs"> <h1> nodes.coffee </h1> </th> <th class="code"> </th> </tr> </thead> <tbody> <tr id="section-1"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-1">#</a> </div> <p><code>nodes.coffee</code> contains all of the node classes for the syntax tree. Most
|
||||||
nodes are created as the result of actions in the <a href="grammar.html">grammar</a>,
|
nodes are created as the result of actions in the <a href="grammar.html">grammar</a>,
|
||||||
but some are created by other nodes as a method of code generation. To convert
|
but some are created by other nodes as a method of code generation. To convert
|
||||||
the syntax tree into a string of JavaScript code, call <code>compile()</code> on the root.</p> </td> <td class="code"> <div class="highlight"><pre></pre></div> </td> </tr> <tr id="section-2"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-2">#</a> </div> <p>Set up for both <strong>Node.js</strong> and the browser, by
|
the syntax tree into a string of JavaScript code, call <code>compile()</code> on the root.</p> </td> <td class="code"> <div class="highlight"><pre><span class="p">{</span><span class="nx">Scope</span><span class="p">}</span> <span class="o">=</span> <span class="nx">require</span> <span class="s1">'./scope'</span></pre></div> </td> </tr> <tr id="section-2"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-2">#</a> </div> <p>Import the helpers we plan to use.</p> </td> <td class="code"> <div class="highlight"><pre><span class="p">{</span><span class="nx">compact</span><span class="p">,</span> <span class="nx">flatten</span><span class="p">,</span> <span class="nx">merge</span><span class="p">,</span> <span class="nx">del</span><span class="p">,</span> <span class="nx">include</span><span class="p">,</span> <span class="nx">indexOf</span><span class="p">,</span> <span class="nx">starts</span><span class="p">,</span> <span class="nx">ends</span><span class="p">}</span> <span class="o">=</span> <span class="nx">require</span><span class="p">(</span><span class="s1">'./helpers'</span><span class="p">).</span><span class="nx">helpers</span></pre></div> </td> </tr> <tr id="section-3"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-3">#</a> </div> <h3>BaseNode</h3> </td> <td class="code"> <div class="highlight"><pre></pre></div> </td> </tr> <tr id="section-4"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-4">#</a> </div> <p>The <strong>BaseNode</strong> is the abstract base class for all nodes in the syntax tree.
|
||||||
including the <a href="scope.html">Scope</a> class and the <a href="helpers.html">helper</a> functions.</p> </td> <td class="code"> <div class="highlight"><pre><span class="k">if</span> <span class="nx">process</span><span class="o">?</span>
|
|
||||||
<span class="nv">Scope = </span> <span class="nx">require</span><span class="p">(</span><span class="s1">'./scope'</span><span class="p">).</span><span class="nx">Scope</span>
|
|
||||||
<span class="nv">helpers = </span><span class="nx">require</span><span class="p">(</span><span class="s1">'./helpers'</span><span class="p">).</span><span class="nx">helpers</span>
|
|
||||||
<span class="k">else</span>
|
|
||||||
<span class="k">this</span><span class="p">.</span><span class="nv">exports = </span><span class="k">this</span>
|
|
||||||
<span class="nv">helpers = </span> <span class="k">this</span><span class="p">.</span><span class="nx">helpers</span>
|
|
||||||
<span class="nv">Scope = </span> <span class="k">this</span><span class="p">.</span><span class="nx">Scope</span></pre></div> </td> </tr> <tr id="section-3"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-3">#</a> </div> <p>Import the helpers we plan to use.</p> </td> <td class="code"> <div class="highlight"><pre><span class="p">{</span><span class="nx">compact</span><span class="p">,</span> <span class="nx">flatten</span><span class="p">,</span> <span class="nx">merge</span><span class="p">,</span> <span class="nx">del</span><span class="p">,</span> <span class="nx">include</span><span class="p">,</span> <span class="nx">indexOf</span><span class="p">,</span> <span class="nx">starts</span><span class="p">,</span> <span class="nx">ends</span><span class="p">}</span> <span class="o">=</span> <span class="nx">helpers</span></pre></div> </td> </tr> <tr id="section-4"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-4">#</a> </div> <h3>BaseNode</h3> </td> <td class="code"> <div class="highlight"><pre></pre></div> </td> </tr> <tr id="section-5"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-5">#</a> </div> <p>The <strong>BaseNode</strong> is the abstract base class for all nodes in the syntax tree.
|
|
||||||
Each subclass implements the <code>compileNode</code> method, which performs the
|
Each subclass implements the <code>compileNode</code> method, which performs the
|
||||||
code generation for that node. To compile a node to JavaScript,
|
code generation for that node. To compile a node to JavaScript,
|
||||||
call <code>compile</code> on it, which wraps <code>compileNode</code> in some generic extra smarts,
|
call <code>compile</code> on it, which wraps <code>compileNode</code> in some generic extra smarts,
|
||||||
|
@ -19,7 +12,7 @@ being requested by the surrounding function), information about the current
|
||||||
scope, and indentation level.</p> </td> <td class="code"> <div class="highlight"><pre><span class="nv">exports.BaseNode = </span><span class="nx">class</span> <span class="nx">BaseNode</span>
|
scope, and indentation level.</p> </td> <td class="code"> <div class="highlight"><pre><span class="nv">exports.BaseNode = </span><span class="nx">class</span> <span class="nx">BaseNode</span>
|
||||||
|
|
||||||
<span class="nx">constructor</span><span class="o">:</span> <span class="o">-></span>
|
<span class="nx">constructor</span><span class="o">:</span> <span class="o">-></span>
|
||||||
<span class="vi">@tags = </span><span class="p">{}</span></pre></div> </td> </tr> <tr id="section-6"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-6">#</a> </div> <p>Common logic for determining whether to wrap this node in a closure before
|
<span class="vi">@tags = </span><span class="p">{}</span></pre></div> </td> </tr> <tr id="section-5"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-5">#</a> </div> <p>Common logic for determining whether to wrap this node in a closure before
|
||||||
compiling it, or to compile directly. We need to wrap if this node is a
|
compiling it, or to compile directly. We need to wrap if this node is a
|
||||||
<em>statement</em>, and it's not a <em>pureStatement</em>, and we're not at
|
<em>statement</em>, and it's not a <em>pureStatement</em>, and we're not at
|
||||||
the top level of a block (which would be unnecessary), and we haven't
|
the top level of a block (which would be unnecessary), and we haven't
|
||||||
|
@ -36,11 +29,14 @@ top-level statement within the function body.</p> </td>
|
||||||
<span class="nv">closure = </span><span class="nx">@isStatement</span><span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="o">and</span> <span class="o">not</span> <span class="nx">@isPureStatement</span><span class="p">()</span> <span class="o">and</span> <span class="o">not</span> <span class="nx">top</span> <span class="o">and</span>
|
<span class="nv">closure = </span><span class="nx">@isStatement</span><span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="o">and</span> <span class="o">not</span> <span class="nx">@isPureStatement</span><span class="p">()</span> <span class="o">and</span> <span class="o">not</span> <span class="nx">top</span> <span class="o">and</span>
|
||||||
<span class="o">not</span> <span class="nx">@options</span><span class="p">.</span><span class="nx">asStatement</span> <span class="o">and</span> <span class="k">this</span> <span class="o">not</span> <span class="k">instanceof</span> <span class="nx">CommentNode</span> <span class="o">and</span>
|
<span class="o">not</span> <span class="nx">@options</span><span class="p">.</span><span class="nx">asStatement</span> <span class="o">and</span> <span class="k">this</span> <span class="o">not</span> <span class="k">instanceof</span> <span class="nx">CommentNode</span> <span class="o">and</span>
|
||||||
<span class="o">not</span> <span class="nx">@containsPureStatement</span><span class="p">()</span>
|
<span class="o">not</span> <span class="nx">@containsPureStatement</span><span class="p">()</span>
|
||||||
<span class="k">if</span> <span class="nx">closure</span> <span class="k">then</span> <span class="nx">@compileClosure</span><span class="p">(</span><span class="nx">@options</span><span class="p">)</span> <span class="k">else</span> <span class="nx">@compileNode</span><span class="p">(</span><span class="nx">@options</span><span class="p">)</span></pre></div> </td> </tr> <tr id="section-7"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-7">#</a> </div> <p>Statements converted into expressions via closure-wrapping share a scope
|
<span class="nx">o</span><span class="p">.</span><span class="nx">scope</span><span class="p">.</span><span class="nx">startLevel</span><span class="p">()</span> <span class="k">if</span> <span class="o">not</span> <span class="nx">o</span><span class="p">.</span><span class="nx">keepLevel</span>
|
||||||
|
<span class="nv">code = </span><span class="k">if</span> <span class="nx">closure</span> <span class="k">then</span> <span class="nx">@compileClosure</span><span class="p">(</span><span class="nx">@options</span><span class="p">)</span> <span class="k">else</span> <span class="nx">@compileNode</span><span class="p">(</span><span class="nx">@options</span><span class="p">)</span>
|
||||||
|
<span class="nx">o</span><span class="p">.</span><span class="nx">scope</span><span class="p">.</span><span class="nx">endLevel</span><span class="p">()</span> <span class="k">if</span> <span class="o">not</span> <span class="nx">o</span><span class="p">.</span><span class="nx">keepLevel</span>
|
||||||
|
<span class="nx">code</span></pre></div> </td> </tr> <tr id="section-6"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-6">#</a> </div> <p>Statements converted into expressions via closure-wrapping share a scope
|
||||||
object with their parent closure, to preserve the expected lexical scope.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">compileClosure</span><span class="o">:</span> <span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="o">-></span>
|
object with their parent closure, to preserve the expected lexical scope.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">compileClosure</span><span class="o">:</span> <span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="o">-></span>
|
||||||
<span class="vi">@tab = </span><span class="nx">o</span><span class="p">.</span><span class="nx">indent</span>
|
<span class="vi">@tab = </span><span class="nx">o</span><span class="p">.</span><span class="nx">indent</span>
|
||||||
<span class="nv">o.sharedScope = </span><span class="nx">o</span><span class="p">.</span><span class="nx">scope</span>
|
<span class="nv">o.sharedScope = </span><span class="nx">o</span><span class="p">.</span><span class="nx">scope</span>
|
||||||
<span class="nx">ClosureNode</span><span class="p">.</span><span class="nx">wrap</span><span class="p">(</span><span class="k">this</span><span class="p">).</span><span class="nx">compile</span> <span class="nx">o</span></pre></div> </td> </tr> <tr id="section-8"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-8">#</a> </div> <p>If the code generation wishes to use the result of a complex expression
|
<span class="nx">ClosureNode</span><span class="p">.</span><span class="nx">wrap</span><span class="p">(</span><span class="k">this</span><span class="p">).</span><span class="nx">compile</span> <span class="nx">o</span></pre></div> </td> </tr> <tr id="section-7"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-7">#</a> </div> <p>If the code generation wishes to use the result of a complex expression
|
||||||
in multiple places, ensure that the expression is only ever evaluated once,
|
in multiple places, ensure that the expression is only ever evaluated once,
|
||||||
by assigning it to a temporary variable.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">compileReference</span><span class="o">:</span> <span class="p">(</span><span class="nx">o</span><span class="p">,</span> <span class="nx">options</span><span class="p">)</span> <span class="o">-></span>
|
by assigning it to a temporary variable.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">compileReference</span><span class="o">:</span> <span class="p">(</span><span class="nx">o</span><span class="p">,</span> <span class="nx">options</span><span class="p">)</span> <span class="o">-></span>
|
||||||
<span class="nx">options</span> <span class="o">or=</span> <span class="p">{}</span>
|
<span class="nx">options</span> <span class="o">or=</span> <span class="p">{}</span>
|
||||||
|
@ -50,18 +46,18 @@ by assigning it to a temporary variable.</p> </td> <td c
|
||||||
<span class="k">else</span> <span class="k">if</span> <span class="k">this</span> <span class="k">instanceof</span> <span class="nx">ValueNode</span> <span class="o">and</span> <span class="nx">options</span><span class="p">.</span><span class="nx">assignment</span>
|
<span class="k">else</span> <span class="k">if</span> <span class="k">this</span> <span class="k">instanceof</span> <span class="nx">ValueNode</span> <span class="o">and</span> <span class="nx">options</span><span class="p">.</span><span class="nx">assignment</span>
|
||||||
<span class="k">this</span><span class="p">.</span><span class="nx">cacheIndexes</span><span class="p">(</span><span class="nx">o</span><span class="p">)</span>
|
<span class="k">this</span><span class="p">.</span><span class="nx">cacheIndexes</span><span class="p">(</span><span class="nx">o</span><span class="p">)</span>
|
||||||
<span class="k">else</span>
|
<span class="k">else</span>
|
||||||
<span class="nv">reference = </span><span class="nx">literal</span> <span class="nx">o</span><span class="p">.</span><span class="nx">scope</span><span class="p">.</span><span class="nx">freeVariable</span><span class="p">()</span>
|
<span class="nv">reference = </span><span class="nx">literal</span> <span class="nx">o</span><span class="p">.</span><span class="nx">scope</span><span class="p">.</span><span class="nx">freeVariable</span> <span class="s1">'ref'</span>
|
||||||
<span class="nv">compiled = </span><span class="k">new</span> <span class="nx">AssignNode</span> <span class="nx">reference</span><span class="p">,</span> <span class="k">this</span>
|
<span class="nv">compiled = </span><span class="k">new</span> <span class="nx">AssignNode</span> <span class="nx">reference</span><span class="p">,</span> <span class="k">this</span>
|
||||||
<span class="p">[</span><span class="nx">compiled</span><span class="p">,</span> <span class="nx">reference</span><span class="p">]</span>
|
<span class="p">[</span><span class="nx">compiled</span><span class="p">,</span> <span class="nx">reference</span><span class="p">]</span>
|
||||||
<span class="k">return</span> <span class="p">[</span><span class="nx">pair</span><span class="p">[</span><span class="mi">0</span><span class="p">].</span><span class="nx">compile</span><span class="p">(</span><span class="nx">o</span><span class="p">),</span> <span class="nx">pair</span><span class="p">[</span><span class="mi">1</span><span class="p">].</span><span class="nx">compile</span><span class="p">(</span><span class="nx">o</span><span class="p">)]</span> <span class="k">if</span> <span class="nx">options</span><span class="p">.</span><span class="nx">precompile</span>
|
<span class="k">return</span> <span class="p">[</span><span class="nx">pair</span><span class="p">[</span><span class="mi">0</span><span class="p">].</span><span class="nx">compile</span><span class="p">(</span><span class="nx">o</span><span class="p">),</span> <span class="nx">pair</span><span class="p">[</span><span class="mi">1</span><span class="p">].</span><span class="nx">compile</span><span class="p">(</span><span class="nx">o</span><span class="p">)]</span> <span class="k">if</span> <span class="nx">options</span><span class="p">.</span><span class="nx">precompile</span>
|
||||||
<span class="nx">pair</span></pre></div> </td> </tr> <tr id="section-9"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-9">#</a> </div> <p>Convenience method to grab the current indentation level, plus tabbing in.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">idt</span><span class="o">:</span> <span class="p">(</span><span class="nx">tabs</span><span class="p">)</span> <span class="o">-></span>
|
<span class="nx">pair</span></pre></div> </td> </tr> <tr id="section-8"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-8">#</a> </div> <p>Convenience method to grab the current indentation level, plus tabbing in.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">idt</span><span class="o">:</span> <span class="p">(</span><span class="nx">tabs</span><span class="p">)</span> <span class="o">-></span>
|
||||||
<span class="nv">idt = </span><span class="nx">@tab</span> <span class="o">or</span> <span class="s1">''</span>
|
<span class="nv">idt = </span><span class="nx">@tab</span> <span class="o">or</span> <span class="s1">''</span>
|
||||||
<span class="nv">num = </span><span class="p">(</span><span class="nx">tabs</span> <span class="o">or</span> <span class="mi">0</span><span class="p">)</span> <span class="o">+</span> <span class="mi">1</span>
|
<span class="nv">num = </span><span class="p">(</span><span class="nx">tabs</span> <span class="o">or</span> <span class="mi">0</span><span class="p">)</span> <span class="o">+</span> <span class="mi">1</span>
|
||||||
<span class="nx">idt</span> <span class="o">+=</span> <span class="nx">TAB</span> <span class="k">while</span> <span class="nx">num</span> <span class="o">-=</span> <span class="mi">1</span>
|
<span class="nx">idt</span> <span class="o">+=</span> <span class="nx">TAB</span> <span class="k">while</span> <span class="nx">num</span> <span class="o">-=</span> <span class="mi">1</span>
|
||||||
<span class="nx">idt</span></pre></div> </td> </tr> <tr id="section-10"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-10">#</a> </div> <p>Construct a node that returns the current node's result.
|
<span class="nx">idt</span></pre></div> </td> </tr> <tr id="section-9"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-9">#</a> </div> <p>Construct a node that returns the current node's result.
|
||||||
Note that this is overridden for smarter behavior for
|
Note that this is overridden for smarter behavior for
|
||||||
many statement nodes (eg IfNode, ForNode)...</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">makeReturn</span><span class="o">:</span> <span class="o">-></span>
|
many statement nodes (eg IfNode, ForNode)...</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">makeReturn</span><span class="o">:</span> <span class="o">-></span>
|
||||||
<span class="k">new</span> <span class="nx">ReturnNode</span> <span class="k">this</span></pre></div> </td> </tr> <tr id="section-11"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-11">#</a> </div> <p>Does this node, or any of its children, contain a node of a certain kind?
|
<span class="k">new</span> <span class="nx">ReturnNode</span> <span class="k">this</span></pre></div> </td> </tr> <tr id="section-10"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-10">#</a> </div> <p>Does this node, or any of its children, contain a node of a certain kind?
|
||||||
Recursively traverses down the <em>children</em> of the nodes, yielding to a block
|
Recursively traverses down the <em>children</em> of the nodes, yielding to a block
|
||||||
and returning true when the block finds a match. <code>contains</code> does not cross
|
and returning true when the block finds a match. <code>contains</code> does not cross
|
||||||
scope boundaries.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">contains</span><span class="o">:</span> <span class="p">(</span><span class="nx">block</span><span class="p">)</span> <span class="o">-></span>
|
scope boundaries.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">contains</span><span class="o">:</span> <span class="p">(</span><span class="nx">block</span><span class="p">)</span> <span class="o">-></span>
|
||||||
|
@ -70,10 +66,10 @@ scope boundaries.</p> </td> <td class="code">
|
||||||
<span class="k">if</span> <span class="nx">block</span><span class="p">(</span><span class="nx">node</span><span class="p">)</span>
|
<span class="k">if</span> <span class="nx">block</span><span class="p">(</span><span class="nx">node</span><span class="p">)</span>
|
||||||
<span class="nv">contains = </span><span class="kc">true</span>
|
<span class="nv">contains = </span><span class="kc">true</span>
|
||||||
<span class="k">return</span> <span class="kc">false</span>
|
<span class="k">return</span> <span class="kc">false</span>
|
||||||
<span class="nx">contains</span></pre></div> </td> </tr> <tr id="section-12"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-12">#</a> </div> <p>Is this node of a certain type, or does it contain the type?</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">containsType</span><span class="o">:</span> <span class="p">(</span><span class="nx">type</span><span class="p">)</span> <span class="o">-></span>
|
<span class="nx">contains</span></pre></div> </td> </tr> <tr id="section-11"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-11">#</a> </div> <p>Is this node of a certain type, or does it contain the type?</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">containsType</span><span class="o">:</span> <span class="p">(</span><span class="nx">type</span><span class="p">)</span> <span class="o">-></span>
|
||||||
<span class="k">this</span> <span class="k">instanceof</span> <span class="nx">type</span> <span class="o">or</span> <span class="nx">@contains</span> <span class="p">(</span><span class="nx">n</span><span class="p">)</span> <span class="o">-></span> <span class="nx">n</span> <span class="k">instanceof</span> <span class="nx">type</span></pre></div> </td> </tr> <tr id="section-13"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-13">#</a> </div> <p>Convenience for the most common use of contains. Does the node contain
|
<span class="k">this</span> <span class="k">instanceof</span> <span class="nx">type</span> <span class="o">or</span> <span class="nx">@contains</span> <span class="p">(</span><span class="nx">n</span><span class="p">)</span> <span class="o">-></span> <span class="nx">n</span> <span class="k">instanceof</span> <span class="nx">type</span></pre></div> </td> </tr> <tr id="section-12"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-12">#</a> </div> <p>Convenience for the most common use of contains. Does the node contain
|
||||||
a pure statement?</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">containsPureStatement</span><span class="o">:</span> <span class="o">-></span>
|
a pure statement?</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">containsPureStatement</span><span class="o">:</span> <span class="o">-></span>
|
||||||
<span class="nx">@isPureStatement</span><span class="p">()</span> <span class="o">or</span> <span class="nx">@contains</span> <span class="p">(</span><span class="nx">n</span><span class="p">)</span> <span class="o">-></span> <span class="nx">n</span><span class="p">.</span><span class="nx">isPureStatement</span> <span class="o">and</span> <span class="nx">n</span><span class="p">.</span><span class="nx">isPureStatement</span><span class="p">()</span></pre></div> </td> </tr> <tr id="section-14"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-14">#</a> </div> <p>Perform an in-order traversal of the AST. Crosses scope boundaries.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">traverse</span><span class="o">:</span> <span class="p">(</span><span class="nx">block</span><span class="p">)</span> <span class="o">-></span> <span class="nx">@traverseChildren</span> <span class="kc">true</span><span class="p">,</span> <span class="nx">block</span></pre></div> </td> </tr> <tr id="section-15"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-15">#</a> </div> <p><code>toString</code> representation of the node, for inspecting the parse tree.
|
<span class="nx">@isPureStatement</span><span class="p">()</span> <span class="o">or</span> <span class="nx">@contains</span> <span class="p">(</span><span class="nx">n</span><span class="p">)</span> <span class="o">-></span> <span class="nx">n</span><span class="p">.</span><span class="nx">isPureStatement</span> <span class="o">and</span> <span class="nx">n</span><span class="p">.</span><span class="nx">isPureStatement</span><span class="p">()</span></pre></div> </td> </tr> <tr id="section-13"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-13">#</a> </div> <p>Perform an in-order traversal of the AST. Crosses scope boundaries.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">traverse</span><span class="o">:</span> <span class="p">(</span><span class="nx">block</span><span class="p">)</span> <span class="o">-></span> <span class="nx">@traverseChildren</span> <span class="kc">true</span><span class="p">,</span> <span class="nx">block</span></pre></div> </td> </tr> <tr id="section-14"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-14">#</a> </div> <p><code>toString</code> representation of the node, for inspecting the parse tree.
|
||||||
This is what <code>coffee --nodes</code> prints out.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">toString</span><span class="o">:</span> <span class="p">(</span><span class="nx">idt</span><span class="p">,</span> <span class="nx">override</span><span class="p">)</span> <span class="o">-></span>
|
This is what <code>coffee --nodes</code> prints out.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">toString</span><span class="o">:</span> <span class="p">(</span><span class="nx">idt</span><span class="p">,</span> <span class="nx">override</span><span class="p">)</span> <span class="o">-></span>
|
||||||
<span class="nx">idt</span> <span class="o">or=</span> <span class="s1">''</span>
|
<span class="nx">idt</span> <span class="o">or=</span> <span class="s1">''</span>
|
||||||
<span class="nv">children = </span><span class="p">(</span><span class="nx">child</span><span class="p">.</span><span class="nx">toString</span> <span class="nx">idt</span> <span class="o">+</span> <span class="nx">TAB</span> <span class="k">for</span> <span class="nx">child</span> <span class="k">in</span> <span class="nx">@collectChildren</span><span class="p">()).</span><span class="nx">join</span><span class="p">(</span><span class="s1">''</span><span class="p">)</span>
|
<span class="nv">children = </span><span class="p">(</span><span class="nx">child</span><span class="p">.</span><span class="nx">toString</span> <span class="nx">idt</span> <span class="o">+</span> <span class="nx">TAB</span> <span class="k">for</span> <span class="nx">child</span> <span class="k">in</span> <span class="nx">@collectChildren</span><span class="p">()).</span><span class="nx">join</span><span class="p">(</span><span class="s1">''</span><span class="p">)</span>
|
||||||
|
@ -93,14 +89,14 @@ This is what <code>coffee --nodes</code> prints out.</p> </td>
|
||||||
<span class="nx">traverseChildren</span><span class="o">:</span> <span class="p">(</span><span class="nx">crossScope</span><span class="p">,</span> <span class="nx">func</span><span class="p">)</span> <span class="o">-></span>
|
<span class="nx">traverseChildren</span><span class="o">:</span> <span class="p">(</span><span class="nx">crossScope</span><span class="p">,</span> <span class="nx">func</span><span class="p">)</span> <span class="o">-></span>
|
||||||
<span class="nx">@eachChild</span> <span class="p">(</span><span class="nx">child</span><span class="p">)</span> <span class="o">-></span>
|
<span class="nx">@eachChild</span> <span class="p">(</span><span class="nx">child</span><span class="p">)</span> <span class="o">-></span>
|
||||||
<span class="nx">func</span><span class="p">.</span><span class="nx">apply</span><span class="p">(</span><span class="k">this</span><span class="p">,</span> <span class="nx">arguments</span><span class="p">)</span>
|
<span class="nx">func</span><span class="p">.</span><span class="nx">apply</span><span class="p">(</span><span class="k">this</span><span class="p">,</span> <span class="nx">arguments</span><span class="p">)</span>
|
||||||
<span class="nx">child</span><span class="p">.</span><span class="nx">traverseChildren</span><span class="p">(</span><span class="nx">crossScope</span><span class="p">,</span> <span class="nx">func</span><span class="p">)</span> <span class="k">if</span> <span class="nx">child</span> <span class="k">instanceof</span> <span class="nx">BaseNode</span></pre></div> </td> </tr> <tr id="section-16"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-16">#</a> </div> <p>Default implementations of the common node properties and methods. Nodes
|
<span class="nx">child</span><span class="p">.</span><span class="nx">traverseChildren</span><span class="p">(</span><span class="nx">crossScope</span><span class="p">,</span> <span class="nx">func</span><span class="p">)</span> <span class="k">if</span> <span class="nx">child</span> <span class="k">instanceof</span> <span class="nx">BaseNode</span></pre></div> </td> </tr> <tr id="section-15"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-15">#</a> </div> <p>Default implementations of the common node properties and methods. Nodes
|
||||||
will override these with custom logic, if needed.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">class</span><span class="o">:</span> <span class="s1">'BaseNode'</span>
|
will override these with custom logic, if needed.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">class</span><span class="o">:</span> <span class="s1">'BaseNode'</span>
|
||||||
<span class="nx">children</span><span class="o">:</span> <span class="p">[]</span>
|
<span class="nx">children</span><span class="o">:</span> <span class="p">[]</span>
|
||||||
|
|
||||||
<span class="nx">unwrap</span> <span class="o">:</span> <span class="o">-></span> <span class="k">this</span>
|
<span class="nx">unwrap</span> <span class="o">:</span> <span class="o">-></span> <span class="k">this</span>
|
||||||
<span class="nx">isStatement</span> <span class="o">:</span> <span class="o">-></span> <span class="kc">no</span>
|
<span class="nx">isStatement</span> <span class="o">:</span> <span class="o">-></span> <span class="kc">no</span>
|
||||||
<span class="nx">isPureStatement</span> <span class="o">:</span> <span class="o">-></span> <span class="kc">no</span>
|
<span class="nx">isPureStatement</span> <span class="o">:</span> <span class="o">-></span> <span class="kc">no</span>
|
||||||
<span class="nx">topSensitive</span> <span class="o">:</span> <span class="o">-></span> <span class="kc">no</span></pre></div> </td> </tr> <tr id="section-17"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-17">#</a> </div> <h3>Expressions</h3> </td> <td class="code"> <div class="highlight"><pre></pre></div> </td> </tr> <tr id="section-18"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-18">#</a> </div> <p>The expressions body is the list of expressions that forms the body of an
|
<span class="nx">topSensitive</span> <span class="o">:</span> <span class="o">-></span> <span class="kc">no</span></pre></div> </td> </tr> <tr id="section-16"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-16">#</a> </div> <h3>Expressions</h3> </td> <td class="code"> <div class="highlight"><pre></pre></div> </td> </tr> <tr id="section-17"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-17">#</a> </div> <p>The expressions body is the list of expressions that forms the body of an
|
||||||
indented block of code -- the implementation of a function, a clause in an
|
indented block of code -- the implementation of a function, a clause in an
|
||||||
<code>if</code>, <code>switch</code>, or <code>try</code>, and so on...</p> </td> <td class="code"> <div class="highlight"><pre><span class="nv">exports.Expressions = </span><span class="nx">class</span> <span class="nx">Expressions</span> <span class="k">extends</span> <span class="nx">BaseNode</span>
|
<code>if</code>, <code>switch</code>, or <code>try</code>, and so on...</p> </td> <td class="code"> <div class="highlight"><pre><span class="nv">exports.Expressions = </span><span class="nx">class</span> <span class="nx">Expressions</span> <span class="k">extends</span> <span class="nx">BaseNode</span>
|
||||||
|
|
||||||
|
@ -110,26 +106,26 @@ indented block of code -- the implementation of a function, a clause in an
|
||||||
|
|
||||||
<span class="nx">constructor</span><span class="o">:</span> <span class="p">(</span><span class="nx">nodes</span><span class="p">)</span> <span class="o">-></span>
|
<span class="nx">constructor</span><span class="o">:</span> <span class="p">(</span><span class="nx">nodes</span><span class="p">)</span> <span class="o">-></span>
|
||||||
<span class="k">super</span><span class="p">()</span>
|
<span class="k">super</span><span class="p">()</span>
|
||||||
<span class="vi">@expressions = </span><span class="nx">compact</span> <span class="nx">flatten</span> <span class="nx">nodes</span> <span class="o">or</span> <span class="p">[]</span></pre></div> </td> </tr> <tr id="section-19"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-19">#</a> </div> <p>Tack an expression on to the end of this expression list.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">push</span><span class="o">:</span> <span class="p">(</span><span class="nx">node</span><span class="p">)</span> <span class="o">-></span>
|
<span class="vi">@expressions = </span><span class="nx">compact</span> <span class="nx">flatten</span> <span class="nx">nodes</span> <span class="o">or</span> <span class="p">[]</span></pre></div> </td> </tr> <tr id="section-18"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-18">#</a> </div> <p>Tack an expression on to the end of this expression list.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">push</span><span class="o">:</span> <span class="p">(</span><span class="nx">node</span><span class="p">)</span> <span class="o">-></span>
|
||||||
<span class="nx">@expressions</span><span class="p">.</span><span class="nx">push</span><span class="p">(</span><span class="nx">node</span><span class="p">)</span>
|
<span class="nx">@expressions</span><span class="p">.</span><span class="nx">push</span><span class="p">(</span><span class="nx">node</span><span class="p">)</span>
|
||||||
<span class="k">this</span></pre></div> </td> </tr> <tr id="section-20"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-20">#</a> </div> <p>Add an expression at the beginning of this expression list.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">unshift</span><span class="o">:</span> <span class="p">(</span><span class="nx">node</span><span class="p">)</span> <span class="o">-></span>
|
<span class="k">this</span></pre></div> </td> </tr> <tr id="section-19"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-19">#</a> </div> <p>Add an expression at the beginning of this expression list.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">unshift</span><span class="o">:</span> <span class="p">(</span><span class="nx">node</span><span class="p">)</span> <span class="o">-></span>
|
||||||
<span class="nx">@expressions</span><span class="p">.</span><span class="nx">unshift</span><span class="p">(</span><span class="nx">node</span><span class="p">)</span>
|
<span class="nx">@expressions</span><span class="p">.</span><span class="nx">unshift</span><span class="p">(</span><span class="nx">node</span><span class="p">)</span>
|
||||||
<span class="k">this</span></pre></div> </td> </tr> <tr id="section-21"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-21">#</a> </div> <p>If this Expressions consists of just a single node, unwrap it by pulling
|
<span class="k">this</span></pre></div> </td> </tr> <tr id="section-20"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-20">#</a> </div> <p>If this Expressions consists of just a single node, unwrap it by pulling
|
||||||
it back out.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">unwrap</span><span class="o">:</span> <span class="o">-></span>
|
it back out.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">unwrap</span><span class="o">:</span> <span class="o">-></span>
|
||||||
<span class="k">if</span> <span class="nx">@expressions</span><span class="p">.</span><span class="nx">length</span> <span class="o">is</span> <span class="mi">1</span> <span class="k">then</span> <span class="nx">@expressions</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="k">else</span> <span class="k">this</span></pre></div> </td> </tr> <tr id="section-22"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-22">#</a> </div> <p>Is this an empty block of code?</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">empty</span><span class="o">:</span> <span class="o">-></span>
|
<span class="k">if</span> <span class="nx">@expressions</span><span class="p">.</span><span class="nx">length</span> <span class="o">is</span> <span class="mi">1</span> <span class="k">then</span> <span class="nx">@expressions</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="k">else</span> <span class="k">this</span></pre></div> </td> </tr> <tr id="section-21"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-21">#</a> </div> <p>Is this an empty block of code?</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">empty</span><span class="o">:</span> <span class="o">-></span>
|
||||||
<span class="nx">@expressions</span><span class="p">.</span><span class="nx">length</span> <span class="o">is</span> <span class="mi">0</span></pre></div> </td> </tr> <tr id="section-23"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-23">#</a> </div> <p>An Expressions node does not return its entire body, rather it
|
<span class="nx">@expressions</span><span class="p">.</span><span class="nx">length</span> <span class="o">is</span> <span class="mi">0</span></pre></div> </td> </tr> <tr id="section-22"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-22">#</a> </div> <p>An Expressions node does not return its entire body, rather it
|
||||||
ensures that the final expression is returned.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">makeReturn</span><span class="o">:</span> <span class="o">-></span>
|
ensures that the final expression is returned.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">makeReturn</span><span class="o">:</span> <span class="o">-></span>
|
||||||
<span class="nv">idx = </span><span class="nx">@expressions</span><span class="p">.</span><span class="nx">length</span> <span class="o">-</span> <span class="mi">1</span>
|
<span class="nv">idx = </span><span class="nx">@expressions</span><span class="p">.</span><span class="nx">length</span> <span class="o">-</span> <span class="mi">1</span>
|
||||||
<span class="nv">last = </span><span class="nx">@expressions</span><span class="p">[</span><span class="nx">idx</span><span class="p">]</span>
|
<span class="nv">last = </span><span class="nx">@expressions</span><span class="p">[</span><span class="nx">idx</span><span class="p">]</span>
|
||||||
<span class="nv">last = </span><span class="nx">@expressions</span><span class="p">[</span><span class="nx">idx</span> <span class="o">-=</span> <span class="mi">1</span><span class="p">]</span> <span class="k">if</span> <span class="nx">last</span> <span class="k">instanceof</span> <span class="nx">CommentNode</span>
|
<span class="nv">last = </span><span class="nx">@expressions</span><span class="p">[</span><span class="nx">idx</span> <span class="o">-=</span> <span class="mi">1</span><span class="p">]</span> <span class="k">if</span> <span class="nx">last</span> <span class="k">instanceof</span> <span class="nx">CommentNode</span>
|
||||||
<span class="k">return</span> <span class="k">this</span> <span class="k">if</span> <span class="o">not</span> <span class="nx">last</span> <span class="o">or</span> <span class="nx">last</span> <span class="k">instanceof</span> <span class="nx">ReturnNode</span>
|
<span class="k">return</span> <span class="k">this</span> <span class="k">if</span> <span class="o">not</span> <span class="nx">last</span> <span class="o">or</span> <span class="nx">last</span> <span class="k">instanceof</span> <span class="nx">ReturnNode</span>
|
||||||
<span class="nx">@expressions</span><span class="p">[</span><span class="nx">idx</span><span class="p">]</span> <span class="o">=</span> <span class="nx">last</span><span class="p">.</span><span class="nx">makeReturn</span><span class="p">()</span>
|
<span class="nx">@expressions</span><span class="p">[</span><span class="nx">idx</span><span class="p">]</span> <span class="o">=</span> <span class="nx">last</span><span class="p">.</span><span class="nx">makeReturn</span><span class="p">()</span>
|
||||||
<span class="k">this</span></pre></div> </td> </tr> <tr id="section-24"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-24">#</a> </div> <p>An <strong>Expressions</strong> is the only node that can serve as the root.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">compile</span><span class="o">:</span> <span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="o">-></span>
|
<span class="k">this</span></pre></div> </td> </tr> <tr id="section-23"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-23">#</a> </div> <p>An <strong>Expressions</strong> is the only node that can serve as the root.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">compile</span><span class="o">:</span> <span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="o">-></span>
|
||||||
<span class="nx">o</span> <span class="o">or=</span> <span class="p">{}</span>
|
<span class="nx">o</span> <span class="o">or=</span> <span class="p">{}</span>
|
||||||
<span class="k">if</span> <span class="nx">o</span><span class="p">.</span><span class="nx">scope</span> <span class="k">then</span> <span class="k">super</span><span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="k">else</span> <span class="nx">@compileRoot</span><span class="p">(</span><span class="nx">o</span><span class="p">)</span>
|
<span class="k">if</span> <span class="nx">o</span><span class="p">.</span><span class="nx">scope</span> <span class="k">then</span> <span class="k">super</span><span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="k">else</span> <span class="nx">@compileRoot</span><span class="p">(</span><span class="nx">o</span><span class="p">)</span>
|
||||||
|
|
||||||
<span class="nx">compileNode</span><span class="o">:</span> <span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="o">-></span>
|
<span class="nx">compileNode</span><span class="o">:</span> <span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="o">-></span>
|
||||||
<span class="p">(</span><span class="nx">@compileExpression</span><span class="p">(</span><span class="nx">node</span><span class="p">,</span> <span class="nx">merge</span><span class="p">(</span><span class="nx">o</span><span class="p">))</span> <span class="k">for</span> <span class="nx">node</span> <span class="k">in</span> <span class="nx">@expressions</span><span class="p">).</span><span class="nx">join</span><span class="p">(</span><span class="s2">"\n"</span><span class="p">)</span></pre></div> </td> </tr> <tr id="section-25"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-25">#</a> </div> <p>If we happen to be the top-level <strong>Expressions</strong>, wrap everything in
|
<span class="p">(</span><span class="nx">@compileExpression</span><span class="p">(</span><span class="nx">node</span><span class="p">,</span> <span class="nx">merge</span><span class="p">(</span><span class="nx">o</span><span class="p">))</span> <span class="k">for</span> <span class="nx">node</span> <span class="k">in</span> <span class="nx">@expressions</span><span class="p">).</span><span class="nx">join</span><span class="p">(</span><span class="s2">"\n"</span><span class="p">)</span></pre></div> </td> </tr> <tr id="section-24"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-24">#</a> </div> <p>If we happen to be the top-level <strong>Expressions</strong>, wrap everything in
|
||||||
a safety closure, unless requested not to.
|
a safety closure, unless requested not to.
|
||||||
It would be better not to generate them in the first place, but for now,
|
It would be better not to generate them in the first place, but for now,
|
||||||
clean up obvious double-parentheses.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">compileRoot</span><span class="o">:</span> <span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="o">-></span>
|
clean up obvious double-parentheses.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">compileRoot</span><span class="o">:</span> <span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="o">-></span>
|
||||||
|
@ -137,20 +133,20 @@ clean up obvious double-parentheses.</p> </td> <td class
|
||||||
<span class="nv">o.scope = </span><span class="k">new</span> <span class="nx">Scope</span><span class="p">(</span><span class="kc">null</span><span class="p">,</span> <span class="k">this</span><span class="p">,</span> <span class="kc">null</span><span class="p">)</span>
|
<span class="nv">o.scope = </span><span class="k">new</span> <span class="nx">Scope</span><span class="p">(</span><span class="kc">null</span><span class="p">,</span> <span class="k">this</span><span class="p">,</span> <span class="kc">null</span><span class="p">)</span>
|
||||||
<span class="nv">code = </span><span class="nx">@compileWithDeclarations</span><span class="p">(</span><span class="nx">o</span><span class="p">)</span>
|
<span class="nv">code = </span><span class="nx">@compileWithDeclarations</span><span class="p">(</span><span class="nx">o</span><span class="p">)</span>
|
||||||
<span class="nv">code = </span><span class="nx">code</span><span class="p">.</span><span class="nx">replace</span><span class="p">(</span><span class="nx">TRAILING_WHITESPACE</span><span class="p">,</span> <span class="s1">''</span><span class="p">)</span>
|
<span class="nv">code = </span><span class="nx">code</span><span class="p">.</span><span class="nx">replace</span><span class="p">(</span><span class="nx">TRAILING_WHITESPACE</span><span class="p">,</span> <span class="s1">''</span><span class="p">)</span>
|
||||||
<span class="k">if</span> <span class="nx">o</span><span class="p">.</span><span class="nx">noWrap</span> <span class="k">then</span> <span class="nx">code</span> <span class="k">else</span> <span class="s2">"(function() {\n#{code}\n})();\n"</span></pre></div> </td> </tr> <tr id="section-26"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-26">#</a> </div> <p>Compile the expressions body for the contents of a function, with
|
<span class="k">if</span> <span class="nx">o</span><span class="p">.</span><span class="nx">noWrap</span> <span class="k">then</span> <span class="nx">code</span> <span class="k">else</span> <span class="s2">"(function() {\n#{code}\n}).call(this);\n"</span></pre></div> </td> </tr> <tr id="section-25"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-25">#</a> </div> <p>Compile the expressions body for the contents of a function, with
|
||||||
declarations of all inner variables pushed up to the top.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">compileWithDeclarations</span><span class="o">:</span> <span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="o">-></span>
|
declarations of all inner variables pushed up to the top.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">compileWithDeclarations</span><span class="o">:</span> <span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="o">-></span>
|
||||||
<span class="nv">code = </span><span class="nx">@compileNode</span><span class="p">(</span><span class="nx">o</span><span class="p">)</span>
|
<span class="nv">code = </span><span class="nx">@compileNode</span><span class="p">(</span><span class="nx">o</span><span class="p">)</span>
|
||||||
<span class="nv">code = </span><span class="s2">"#{@tab}var #{o.scope.compiledAssignments()};\n#{code}"</span> <span class="k">if</span> <span class="nx">o</span><span class="p">.</span><span class="nx">scope</span><span class="p">.</span><span class="nx">hasAssignments</span><span class="p">(</span><span class="k">this</span><span class="p">)</span>
|
<span class="nv">code = </span><span class="s2">"#{@tab}var #{o.scope.compiledAssignments()};\n#{code}"</span> <span class="k">if</span> <span class="nx">o</span><span class="p">.</span><span class="nx">scope</span><span class="p">.</span><span class="nx">hasAssignments</span><span class="p">(</span><span class="k">this</span><span class="p">)</span>
|
||||||
<span class="nv">code = </span><span class="s2">"#{@tab}var #{o.scope.compiledDeclarations()};\n#{code}"</span> <span class="k">if</span> <span class="o">not</span> <span class="nx">o</span><span class="p">.</span><span class="nx">globals</span> <span class="o">and</span> <span class="nx">o</span><span class="p">.</span><span class="nx">scope</span><span class="p">.</span><span class="nx">hasDeclarations</span><span class="p">(</span><span class="k">this</span><span class="p">)</span>
|
<span class="nv">code = </span><span class="s2">"#{@tab}var #{o.scope.compiledDeclarations()};\n#{code}"</span> <span class="k">if</span> <span class="o">not</span> <span class="nx">o</span><span class="p">.</span><span class="nx">globals</span> <span class="o">and</span> <span class="nx">o</span><span class="p">.</span><span class="nx">scope</span><span class="p">.</span><span class="nx">hasDeclarations</span><span class="p">(</span><span class="k">this</span><span class="p">)</span>
|
||||||
<span class="nx">code</span></pre></div> </td> </tr> <tr id="section-27"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-27">#</a> </div> <p>Compiles a single expression within the expressions body. If we need to
|
<span class="nx">code</span></pre></div> </td> </tr> <tr id="section-26"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-26">#</a> </div> <p>Compiles a single expression within the expressions body. If we need to
|
||||||
return the result, and it's an expression, simply return it. If it's a
|
return the result, and it's an expression, simply return it. If it's a
|
||||||
statement, ask the statement to do so.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">compileExpression</span><span class="o">:</span> <span class="p">(</span><span class="nx">node</span><span class="p">,</span> <span class="nx">o</span><span class="p">)</span> <span class="o">-></span>
|
statement, ask the statement to do so.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">compileExpression</span><span class="o">:</span> <span class="p">(</span><span class="nx">node</span><span class="p">,</span> <span class="nx">o</span><span class="p">)</span> <span class="o">-></span>
|
||||||
<span class="vi">@tab = </span><span class="nx">o</span><span class="p">.</span><span class="nx">indent</span>
|
<span class="vi">@tab = </span><span class="nx">o</span><span class="p">.</span><span class="nx">indent</span>
|
||||||
<span class="nv">compiledNode = </span><span class="nx">node</span><span class="p">.</span><span class="nx">compile</span> <span class="nx">merge</span> <span class="nx">o</span><span class="p">,</span> <span class="nx">top</span><span class="o">:</span> <span class="kc">true</span>
|
<span class="nv">compiledNode = </span><span class="nx">node</span><span class="p">.</span><span class="nx">compile</span> <span class="nx">merge</span> <span class="nx">o</span><span class="p">,</span> <span class="nx">top</span><span class="o">:</span> <span class="kc">true</span>
|
||||||
<span class="k">if</span> <span class="nx">node</span><span class="p">.</span><span class="nx">isStatement</span><span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="k">then</span> <span class="nx">compiledNode</span> <span class="k">else</span> <span class="s2">"#{@idt()}#{compiledNode};"</span></pre></div> </td> </tr> <tr id="section-28"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-28">#</a> </div> <p>Wrap up the given nodes as an <strong>Expressions</strong>, unless it already happens
|
<span class="k">if</span> <span class="nx">node</span><span class="p">.</span><span class="nx">isStatement</span><span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="k">then</span> <span class="nx">compiledNode</span> <span class="k">else</span> <span class="s2">"#{@idt()}#{compiledNode};"</span></pre></div> </td> </tr> <tr id="section-27"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-27">#</a> </div> <p>Wrap up the given nodes as an <strong>Expressions</strong>, unless it already happens
|
||||||
to be one.</p> </td> <td class="code"> <div class="highlight"><pre><span class="nv">Expressions.wrap = </span><span class="p">(</span><span class="nx">nodes</span><span class="p">)</span> <span class="o">-></span>
|
to be one.</p> </td> <td class="code"> <div class="highlight"><pre><span class="nv">Expressions.wrap = </span><span class="p">(</span><span class="nx">nodes</span><span class="p">)</span> <span class="o">-></span>
|
||||||
<span class="k">return</span> <span class="nx">nodes</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="k">if</span> <span class="nx">nodes</span><span class="p">.</span><span class="nx">length</span> <span class="o">is</span> <span class="mi">1</span> <span class="o">and</span> <span class="nx">nodes</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="k">instanceof</span> <span class="nx">Expressions</span>
|
<span class="k">return</span> <span class="nx">nodes</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="k">if</span> <span class="nx">nodes</span><span class="p">.</span><span class="nx">length</span> <span class="o">is</span> <span class="mi">1</span> <span class="o">and</span> <span class="nx">nodes</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="k">instanceof</span> <span class="nx">Expressions</span>
|
||||||
<span class="k">new</span> <span class="nx">Expressions</span><span class="p">(</span><span class="nx">nodes</span><span class="p">)</span></pre></div> </td> </tr> <tr id="section-29"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-29">#</a> </div> <h3>LiteralNode</h3> </td> <td class="code"> <div class="highlight"><pre></pre></div> </td> </tr> <tr id="section-30"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-30">#</a> </div> <p>Literals are static values that can be passed through directly into
|
<span class="k">new</span> <span class="nx">Expressions</span><span class="p">(</span><span class="nx">nodes</span><span class="p">)</span></pre></div> </td> </tr> <tr id="section-28"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-28">#</a> </div> <h3>LiteralNode</h3> </td> <td class="code"> <div class="highlight"><pre></pre></div> </td> </tr> <tr id="section-29"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-29">#</a> </div> <p>Literals are static values that can be passed through directly into
|
||||||
JavaScript without translation, such as: strings, numbers,
|
JavaScript without translation, such as: strings, numbers,
|
||||||
<code>true</code>, <code>false</code>, <code>null</code>...</p> </td> <td class="code"> <div class="highlight"><pre><span class="nv">exports.LiteralNode = </span><span class="nx">class</span> <span class="nx">LiteralNode</span> <span class="k">extends</span> <span class="nx">BaseNode</span>
|
<code>true</code>, <code>false</code>, <code>null</code>...</p> </td> <td class="code"> <div class="highlight"><pre><span class="nv">exports.LiteralNode = </span><span class="nx">class</span> <span class="nx">LiteralNode</span> <span class="k">extends</span> <span class="nx">BaseNode</span>
|
||||||
|
|
||||||
|
@ -160,7 +156,7 @@ JavaScript without translation, such as: strings, numbers,
|
||||||
<span class="k">super</span><span class="p">()</span>
|
<span class="k">super</span><span class="p">()</span>
|
||||||
|
|
||||||
<span class="nx">makeReturn</span><span class="o">:</span> <span class="o">-></span>
|
<span class="nx">makeReturn</span><span class="o">:</span> <span class="o">-></span>
|
||||||
<span class="k">if</span> <span class="nx">@isStatement</span><span class="p">()</span> <span class="k">then</span> <span class="k">this</span> <span class="k">else</span> <span class="k">super</span><span class="p">()</span></pre></div> </td> </tr> <tr id="section-31"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-31">#</a> </div> <p>Break and continue must be treated as pure statements -- they lose their
|
<span class="k">if</span> <span class="nx">@isStatement</span><span class="p">()</span> <span class="k">then</span> <span class="k">this</span> <span class="k">else</span> <span class="k">super</span><span class="p">()</span></pre></div> </td> </tr> <tr id="section-30"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-30">#</a> </div> <p>Break and continue must be treated as pure statements -- they lose their
|
||||||
meaning when wrapped in a closure.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">isStatement</span><span class="o">:</span> <span class="o">-></span>
|
meaning when wrapped in a closure.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">isStatement</span><span class="o">:</span> <span class="o">-></span>
|
||||||
<span class="nx">@value</span> <span class="o">is</span> <span class="s1">'break'</span> <span class="o">or</span> <span class="nx">@value</span> <span class="o">is</span> <span class="s1">'continue'</span> <span class="o">or</span> <span class="nx">@value</span> <span class="o">is</span> <span class="s1">'debugger'</span>
|
<span class="nx">@value</span> <span class="o">is</span> <span class="s1">'break'</span> <span class="o">or</span> <span class="nx">@value</span> <span class="o">is</span> <span class="s1">'continue'</span> <span class="o">or</span> <span class="nx">@value</span> <span class="o">is</span> <span class="s1">'debugger'</span>
|
||||||
<span class="nx">isPureStatement</span><span class="o">:</span> <span class="nx">LiteralNode</span><span class="o">::</span><span class="nx">isStatement</span>
|
<span class="nx">isPureStatement</span><span class="o">:</span> <span class="nx">LiteralNode</span><span class="o">::</span><span class="nx">isStatement</span>
|
||||||
|
@ -171,7 +167,7 @@ meaning when wrapped in a closure.</p> </td> <td class="
|
||||||
<span class="nx">idt</span> <span class="o">+</span> <span class="nx">@value</span> <span class="o">+</span> <span class="nx">end</span>
|
<span class="nx">idt</span> <span class="o">+</span> <span class="nx">@value</span> <span class="o">+</span> <span class="nx">end</span>
|
||||||
|
|
||||||
<span class="nx">toString</span><span class="o">:</span> <span class="p">(</span><span class="nx">idt</span><span class="p">)</span> <span class="o">-></span>
|
<span class="nx">toString</span><span class="o">:</span> <span class="p">(</span><span class="nx">idt</span><span class="p">)</span> <span class="o">-></span>
|
||||||
<span class="s1">'"'</span> <span class="o">+</span> <span class="nx">@value</span> <span class="o">+</span> <span class="s1">'"'</span></pre></div> </td> </tr> <tr id="section-32"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-32">#</a> </div> <h3>ReturnNode</h3> </td> <td class="code"> <div class="highlight"><pre></pre></div> </td> </tr> <tr id="section-33"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-33">#</a> </div> <p>A <code>return</code> is a <em>pureStatement</em> -- wrapping it in a closure wouldn't
|
<span class="s1">'"'</span> <span class="o">+</span> <span class="nx">@value</span> <span class="o">+</span> <span class="s1">'"'</span></pre></div> </td> </tr> <tr id="section-31"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-31">#</a> </div> <h3>ReturnNode</h3> </td> <td class="code"> <div class="highlight"><pre></pre></div> </td> </tr> <tr id="section-32"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-32">#</a> </div> <p>A <code>return</code> is a <em>pureStatement</em> -- wrapping it in a closure wouldn't
|
||||||
make sense.</p> </td> <td class="code"> <div class="highlight"><pre><span class="nv">exports.ReturnNode = </span><span class="nx">class</span> <span class="nx">ReturnNode</span> <span class="k">extends</span> <span class="nx">BaseNode</span>
|
make sense.</p> </td> <td class="code"> <div class="highlight"><pre><span class="nv">exports.ReturnNode = </span><span class="nx">class</span> <span class="nx">ReturnNode</span> <span class="k">extends</span> <span class="nx">BaseNode</span>
|
||||||
|
|
||||||
<span class="nx">class</span><span class="o">:</span> <span class="s1">'ReturnNode'</span>
|
<span class="nx">class</span><span class="o">:</span> <span class="s1">'ReturnNode'</span>
|
||||||
|
@ -192,18 +188,18 @@ make sense.</p> </td> <td class="code"> <d
|
||||||
|
|
||||||
<span class="nx">compileNode</span><span class="o">:</span> <span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="o">-></span>
|
<span class="nx">compileNode</span><span class="o">:</span> <span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="o">-></span>
|
||||||
<span class="nv">o.asStatement = </span><span class="kc">true</span> <span class="k">if</span> <span class="nx">@expression</span><span class="p">.</span><span class="nx">isStatement</span><span class="p">(</span><span class="nx">o</span><span class="p">)</span>
|
<span class="nv">o.asStatement = </span><span class="kc">true</span> <span class="k">if</span> <span class="nx">@expression</span><span class="p">.</span><span class="nx">isStatement</span><span class="p">(</span><span class="nx">o</span><span class="p">)</span>
|
||||||
<span class="s2">"#{@tab}return #{@expression.compile(o)};"</span></pre></div> </td> </tr> <tr id="section-34"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-34">#</a> </div> <h3>ValueNode</h3> </td> <td class="code"> <div class="highlight"><pre></pre></div> </td> </tr> <tr id="section-35"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-35">#</a> </div> <p>A value, variable or literal or parenthesized, indexed or dotted into,
|
<span class="s2">"#{@tab}return #{@expression.compile(o)};"</span></pre></div> </td> </tr> <tr id="section-33"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-33">#</a> </div> <h3>ValueNode</h3> </td> <td class="code"> <div class="highlight"><pre></pre></div> </td> </tr> <tr id="section-34"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-34">#</a> </div> <p>A value, variable or literal or parenthesized, indexed or dotted into,
|
||||||
or vanilla.</p> </td> <td class="code"> <div class="highlight"><pre><span class="nv">exports.ValueNode = </span><span class="nx">class</span> <span class="nx">ValueNode</span> <span class="k">extends</span> <span class="nx">BaseNode</span>
|
or vanilla.</p> </td> <td class="code"> <div class="highlight"><pre><span class="nv">exports.ValueNode = </span><span class="nx">class</span> <span class="nx">ValueNode</span> <span class="k">extends</span> <span class="nx">BaseNode</span>
|
||||||
|
|
||||||
<span class="nx">class</span><span class="o">:</span> <span class="s1">'ValueNode'</span>
|
<span class="nx">class</span><span class="o">:</span> <span class="s1">'ValueNode'</span>
|
||||||
<span class="nx">children</span><span class="o">:</span> <span class="p">[</span><span class="s1">'base'</span><span class="p">,</span> <span class="s1">'properties'</span><span class="p">]</span></pre></div> </td> </tr> <tr id="section-36"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-36">#</a> </div> <p>A <strong>ValueNode</strong> has a base and a list of property accesses.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">constructor</span><span class="o">:</span> <span class="p">(</span><span class="nx">@base</span><span class="p">,</span> <span class="nx">@properties</span><span class="p">)</span> <span class="o">-></span>
|
<span class="nx">children</span><span class="o">:</span> <span class="p">[</span><span class="s1">'base'</span><span class="p">,</span> <span class="s1">'properties'</span><span class="p">]</span></pre></div> </td> </tr> <tr id="section-35"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-35">#</a> </div> <p>A <strong>ValueNode</strong> has a base and a list of property accesses.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">constructor</span><span class="o">:</span> <span class="p">(</span><span class="nx">@base</span><span class="p">,</span> <span class="nx">@properties</span><span class="p">)</span> <span class="o">-></span>
|
||||||
<span class="k">super</span><span class="p">()</span>
|
<span class="k">super</span><span class="p">()</span>
|
||||||
<span class="nx">@properties</span> <span class="o">or=</span> <span class="p">[]</span></pre></div> </td> </tr> <tr id="section-37"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-37">#</a> </div> <p>Add a property access to the list.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">push</span><span class="o">:</span> <span class="p">(</span><span class="nx">prop</span><span class="p">)</span> <span class="o">-></span>
|
<span class="nx">@properties</span> <span class="o">or=</span> <span class="p">[]</span></pre></div> </td> </tr> <tr id="section-36"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-36">#</a> </div> <p>Add a property access to the list.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">push</span><span class="o">:</span> <span class="p">(</span><span class="nx">prop</span><span class="p">)</span> <span class="o">-></span>
|
||||||
<span class="nx">@properties</span><span class="p">.</span><span class="nx">push</span><span class="p">(</span><span class="nx">prop</span><span class="p">)</span>
|
<span class="nx">@properties</span><span class="p">.</span><span class="nx">push</span><span class="p">(</span><span class="nx">prop</span><span class="p">)</span>
|
||||||
<span class="k">this</span>
|
<span class="k">this</span>
|
||||||
|
|
||||||
<span class="nx">hasProperties</span><span class="o">:</span> <span class="o">-></span>
|
<span class="nx">hasProperties</span><span class="o">:</span> <span class="o">-></span>
|
||||||
<span class="o">!!</span><span class="nx">@properties</span><span class="p">.</span><span class="nx">length</span></pre></div> </td> </tr> <tr id="section-38"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-38">#</a> </div> <p>Some boolean checks for the benefit of other nodes.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">isArray</span><span class="o">:</span> <span class="o">-></span>
|
<span class="o">!!</span><span class="nx">@properties</span><span class="p">.</span><span class="nx">length</span></pre></div> </td> </tr> <tr id="section-37"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-37">#</a> </div> <p>Some boolean checks for the benefit of other nodes.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">isArray</span><span class="o">:</span> <span class="o">-></span>
|
||||||
<span class="nx">@base</span> <span class="k">instanceof</span> <span class="nx">ArrayNode</span> <span class="o">and</span> <span class="o">not</span> <span class="nx">@hasProperties</span><span class="p">()</span>
|
<span class="nx">@base</span> <span class="k">instanceof</span> <span class="nx">ArrayNode</span> <span class="o">and</span> <span class="o">not</span> <span class="nx">@hasProperties</span><span class="p">()</span>
|
||||||
|
|
||||||
<span class="nx">isObject</span><span class="o">:</span> <span class="o">-></span>
|
<span class="nx">isObject</span><span class="o">:</span> <span class="o">-></span>
|
||||||
|
@ -213,13 +209,13 @@ or vanilla.</p> </td> <td class="code"> <d
|
||||||
<span class="nx">@hasProperties</span><span class="p">()</span> <span class="o">and</span> <span class="nx">@properties</span><span class="p">[</span><span class="nx">@properties</span><span class="p">.</span><span class="nx">length</span> <span class="o">-</span> <span class="mi">1</span><span class="p">]</span> <span class="k">instanceof</span> <span class="nx">SliceNode</span>
|
<span class="nx">@hasProperties</span><span class="p">()</span> <span class="o">and</span> <span class="nx">@properties</span><span class="p">[</span><span class="nx">@properties</span><span class="p">.</span><span class="nx">length</span> <span class="o">-</span> <span class="mi">1</span><span class="p">]</span> <span class="k">instanceof</span> <span class="nx">SliceNode</span>
|
||||||
|
|
||||||
<span class="nx">makeReturn</span><span class="o">:</span> <span class="o">-></span>
|
<span class="nx">makeReturn</span><span class="o">:</span> <span class="o">-></span>
|
||||||
<span class="k">if</span> <span class="nx">@hasProperties</span><span class="p">()</span> <span class="k">then</span> <span class="k">super</span><span class="p">()</span> <span class="k">else</span> <span class="nx">@base</span><span class="p">.</span><span class="nx">makeReturn</span><span class="p">()</span></pre></div> </td> </tr> <tr id="section-39"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-39">#</a> </div> <p>The value can be unwrapped as its inner node, if there are no attached
|
<span class="k">if</span> <span class="nx">@hasProperties</span><span class="p">()</span> <span class="k">then</span> <span class="k">super</span><span class="p">()</span> <span class="k">else</span> <span class="nx">@base</span><span class="p">.</span><span class="nx">makeReturn</span><span class="p">()</span></pre></div> </td> </tr> <tr id="section-38"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-38">#</a> </div> <p>The value can be unwrapped as its inner node, if there are no attached
|
||||||
properties.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">unwrap</span><span class="o">:</span> <span class="o">-></span>
|
properties.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">unwrap</span><span class="o">:</span> <span class="o">-></span>
|
||||||
<span class="k">if</span> <span class="nx">@properties</span><span class="p">.</span><span class="nx">length</span> <span class="k">then</span> <span class="k">this</span> <span class="k">else</span> <span class="nx">@base</span></pre></div> </td> </tr> <tr id="section-40"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-40">#</a> </div> <p>Values are considered to be statements if their base is a statement.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">isStatement</span><span class="o">:</span> <span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="o">-></span>
|
<span class="k">if</span> <span class="nx">@properties</span><span class="p">.</span><span class="nx">length</span> <span class="k">then</span> <span class="k">this</span> <span class="k">else</span> <span class="nx">@base</span></pre></div> </td> </tr> <tr id="section-39"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-39">#</a> </div> <p>Values are considered to be statements if their base is a statement.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">isStatement</span><span class="o">:</span> <span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="o">-></span>
|
||||||
<span class="nx">@base</span><span class="p">.</span><span class="nx">isStatement</span> <span class="o">and</span> <span class="nx">@base</span><span class="p">.</span><span class="nx">isStatement</span><span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="o">and</span> <span class="o">not</span> <span class="nx">@hasProperties</span><span class="p">()</span>
|
<span class="nx">@base</span><span class="p">.</span><span class="nx">isStatement</span> <span class="o">and</span> <span class="nx">@base</span><span class="p">.</span><span class="nx">isStatement</span><span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="o">and</span> <span class="o">not</span> <span class="nx">@hasProperties</span><span class="p">()</span>
|
||||||
|
|
||||||
<span class="nx">isNumber</span><span class="o">:</span> <span class="o">-></span>
|
<span class="nx">isNumber</span><span class="o">:</span> <span class="o">-></span>
|
||||||
<span class="nx">@base</span> <span class="k">instanceof</span> <span class="nx">LiteralNode</span> <span class="o">and</span> <span class="nx">@base</span><span class="p">.</span><span class="nx">value</span><span class="p">.</span><span class="nx">match</span> <span class="nx">NUMBER</span></pre></div> </td> </tr> <tr id="section-41"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-41">#</a> </div> <p>If the value node has indexes containing function calls, and the value node
|
<span class="nx">@base</span> <span class="k">instanceof</span> <span class="nx">LiteralNode</span> <span class="o">and</span> <span class="nx">@base</span><span class="p">.</span><span class="nx">value</span><span class="p">.</span><span class="nx">match</span> <span class="nx">NUMBER</span></pre></div> </td> </tr> <tr id="section-40"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-40">#</a> </div> <p>If the value node has indexes containing function calls, and the value node
|
||||||
needs to be used twice, in compound assignment ... then we need to cache
|
needs to be used twice, in compound assignment ... then we need to cache
|
||||||
the value of the indexes.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">cacheIndexes</span><span class="o">:</span> <span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="o">-></span>
|
the value of the indexes.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">cacheIndexes</span><span class="o">:</span> <span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="o">-></span>
|
||||||
<span class="nv">copy = </span><span class="k">new</span> <span class="nx">ValueNode</span> <span class="nx">@base</span><span class="p">,</span> <span class="nx">@properties</span><span class="p">[</span><span class="mi">0</span><span class="p">..]</span>
|
<span class="nv">copy = </span><span class="k">new</span> <span class="nx">ValueNode</span> <span class="nx">@base</span><span class="p">,</span> <span class="nx">@properties</span><span class="p">[</span><span class="mi">0</span><span class="p">..]</span>
|
||||||
|
@ -230,8 +226,8 @@ the value of the indexes.</p> </td> <td class="code">
|
||||||
<span class="p">[</span><span class="nx">index</span><span class="p">,</span> <span class="nx">indexVar</span><span class="p">]</span> <span class="o">=</span> <span class="nx">prop</span><span class="p">.</span><span class="nx">index</span><span class="p">.</span><span class="nx">compileReference</span> <span class="nx">o</span>
|
<span class="p">[</span><span class="nx">index</span><span class="p">,</span> <span class="nx">indexVar</span><span class="p">]</span> <span class="o">=</span> <span class="nx">prop</span><span class="p">.</span><span class="nx">index</span><span class="p">.</span><span class="nx">compileReference</span> <span class="nx">o</span>
|
||||||
<span class="k">this</span><span class="p">.</span><span class="nx">properties</span><span class="p">[</span><span class="nx">i</span><span class="p">]</span> <span class="o">=</span> <span class="k">new</span> <span class="nx">IndexNode</span> <span class="nx">index</span>
|
<span class="k">this</span><span class="p">.</span><span class="nx">properties</span><span class="p">[</span><span class="nx">i</span><span class="p">]</span> <span class="o">=</span> <span class="k">new</span> <span class="nx">IndexNode</span> <span class="nx">index</span>
|
||||||
<span class="nx">copy</span><span class="p">.</span><span class="nx">properties</span><span class="p">[</span><span class="nx">i</span><span class="p">]</span> <span class="o">=</span> <span class="k">new</span> <span class="nx">IndexNode</span> <span class="nx">indexVar</span>
|
<span class="nx">copy</span><span class="p">.</span><span class="nx">properties</span><span class="p">[</span><span class="nx">i</span><span class="p">]</span> <span class="o">=</span> <span class="k">new</span> <span class="nx">IndexNode</span> <span class="nx">indexVar</span>
|
||||||
<span class="p">[</span><span class="k">this</span><span class="p">,</span> <span class="nx">copy</span><span class="p">]</span></pre></div> </td> </tr> <tr id="section-42"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-42">#</a> </div> <p>Override compile to unwrap the value when possible.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">compile</span><span class="o">:</span> <span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="o">-></span>
|
<span class="p">[</span><span class="k">this</span><span class="p">,</span> <span class="nx">copy</span><span class="p">]</span></pre></div> </td> </tr> <tr id="section-41"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-41">#</a> </div> <p>Override compile to unwrap the value when possible.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">compile</span><span class="o">:</span> <span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="o">-></span>
|
||||||
<span class="k">if</span> <span class="o">not</span> <span class="nx">o</span><span class="p">.</span><span class="nx">top</span> <span class="o">or</span> <span class="nx">@properties</span><span class="p">.</span><span class="nx">length</span> <span class="k">then</span> <span class="k">super</span><span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="k">else</span> <span class="nx">@base</span><span class="p">.</span><span class="nx">compile</span><span class="p">(</span><span class="nx">o</span><span class="p">)</span></pre></div> </td> </tr> <tr id="section-43"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-43">#</a> </div> <p>We compile a value to JavaScript by compiling and joining each property.
|
<span class="k">if</span> <span class="o">not</span> <span class="nx">o</span><span class="p">.</span><span class="nx">top</span> <span class="o">or</span> <span class="nx">@properties</span><span class="p">.</span><span class="nx">length</span> <span class="k">then</span> <span class="k">super</span><span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="k">else</span> <span class="nx">@base</span><span class="p">.</span><span class="nx">compile</span><span class="p">(</span><span class="nx">o</span><span class="p">)</span></pre></div> </td> </tr> <tr id="section-42"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-42">#</a> </div> <p>We compile a value to JavaScript by compiling and joining each property.
|
||||||
Things get much more insteresting if the chain of properties has <em>soak</em>
|
Things get much more insteresting if the chain of properties has <em>soak</em>
|
||||||
operators <code>?.</code> interspersed. Then we have to take care not to accidentally
|
operators <code>?.</code> interspersed. Then we have to take care not to accidentally
|
||||||
evaluate a anything twice when building the soak chain.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">compileNode</span><span class="o">:</span> <span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="o">-></span>
|
evaluate a anything twice when building the soak chain.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">compileNode</span><span class="o">:</span> <span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="o">-></span>
|
||||||
|
@ -252,7 +248,7 @@ evaluate a anything twice when building the soak chain.</p> </td>
|
||||||
<span class="vi">@source = </span><span class="nx">baseline</span>
|
<span class="vi">@source = </span><span class="nx">baseline</span>
|
||||||
<span class="k">if</span> <span class="nx">prop</span><span class="p">.</span><span class="nx">soakNode</span>
|
<span class="k">if</span> <span class="nx">prop</span><span class="p">.</span><span class="nx">soakNode</span>
|
||||||
<span class="k">if</span> <span class="nx">@base</span><span class="p">.</span><span class="nx">containsType</span><span class="p">(</span><span class="nx">CallNode</span><span class="p">)</span> <span class="o">and</span> <span class="nx">i</span> <span class="o">is</span> <span class="mi">0</span>
|
<span class="k">if</span> <span class="nx">@base</span><span class="p">.</span><span class="nx">containsType</span><span class="p">(</span><span class="nx">CallNode</span><span class="p">)</span> <span class="o">and</span> <span class="nx">i</span> <span class="o">is</span> <span class="mi">0</span>
|
||||||
<span class="nv">temp = </span><span class="nx">o</span><span class="p">.</span><span class="nx">scope</span><span class="p">.</span><span class="nx">freeVariable</span><span class="p">()</span>
|
<span class="nv">temp = </span><span class="nx">o</span><span class="p">.</span><span class="nx">scope</span><span class="p">.</span><span class="nx">freeVariable</span> <span class="s1">'ref'</span>
|
||||||
<span class="nv">complete = </span><span class="s2">"(#{ baseline = temp } = (#{complete}))"</span>
|
<span class="nv">complete = </span><span class="s2">"(#{ baseline = temp } = (#{complete}))"</span>
|
||||||
<span class="nv">complete = </span><span class="k">if</span> <span class="nx">i</span> <span class="o">is</span> <span class="mi">0</span>
|
<span class="nv">complete = </span><span class="k">if</span> <span class="nx">i</span> <span class="o">is</span> <span class="mi">0</span>
|
||||||
<span class="s2">"(typeof #{complete} === \"undefined\" || #{baseline} === null) ? undefined : "</span>
|
<span class="s2">"(typeof #{complete} === \"undefined\" || #{baseline} === null) ? undefined : "</span>
|
||||||
|
@ -268,7 +264,7 @@ evaluate a anything twice when building the soak chain.</p> </td>
|
||||||
<span class="nx">complete</span> <span class="o">+=</span> <span class="nx">part</span>
|
<span class="nx">complete</span> <span class="o">+=</span> <span class="nx">part</span>
|
||||||
<span class="vi">@last = </span><span class="nx">part</span>
|
<span class="vi">@last = </span><span class="nx">part</span>
|
||||||
|
|
||||||
<span class="k">if</span> <span class="nx">op</span> <span class="o">and</span> <span class="nx">@wrapped</span> <span class="k">then</span> <span class="s2">"(#{complete})"</span> <span class="k">else</span> <span class="nx">complete</span></pre></div> </td> </tr> <tr id="section-44"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-44">#</a> </div> <h3>CommentNode</h3> </td> <td class="code"> <div class="highlight"><pre></pre></div> </td> </tr> <tr id="section-45"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-45">#</a> </div> <p>CoffeeScript passes through block comments as JavaScript block comments
|
<span class="k">if</span> <span class="nx">op</span> <span class="o">and</span> <span class="nx">@wrapped</span> <span class="k">then</span> <span class="s2">"(#{complete})"</span> <span class="k">else</span> <span class="nx">complete</span></pre></div> </td> </tr> <tr id="section-43"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-43">#</a> </div> <h3>CommentNode</h3> </td> <td class="code"> <div class="highlight"><pre></pre></div> </td> </tr> <tr id="section-44"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-44">#</a> </div> <p>CoffeeScript passes through block comments as JavaScript block comments
|
||||||
at the same position.</p> </td> <td class="code"> <div class="highlight"><pre><span class="nv">exports.CommentNode = </span><span class="nx">class</span> <span class="nx">CommentNode</span> <span class="k">extends</span> <span class="nx">BaseNode</span>
|
at the same position.</p> </td> <td class="code"> <div class="highlight"><pre><span class="nv">exports.CommentNode = </span><span class="nx">class</span> <span class="nx">CommentNode</span> <span class="k">extends</span> <span class="nx">BaseNode</span>
|
||||||
|
|
||||||
<span class="nx">class</span><span class="o">:</span> <span class="s1">'CommentNode'</span>
|
<span class="nx">class</span><span class="o">:</span> <span class="s1">'CommentNode'</span>
|
||||||
|
@ -281,7 +277,7 @@ at the same position.</p> </td> <td class="code">
|
||||||
<span class="k">this</span>
|
<span class="k">this</span>
|
||||||
|
|
||||||
<span class="nx">compileNode</span><span class="o">:</span> <span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="o">-></span>
|
<span class="nx">compileNode</span><span class="o">:</span> <span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="o">-></span>
|
||||||
<span class="nx">@tab</span> <span class="o">+</span> <span class="s1">'/*'</span> <span class="o">+</span> <span class="nx">@comment</span><span class="p">.</span><span class="nx">replace</span><span class="p">(</span><span class="sr">/\r?\n/g</span><span class="p">,</span> <span class="s1">'\n'</span> <span class="o">+</span> <span class="nx">@tab</span><span class="p">)</span> <span class="o">+</span> <span class="s1">'*/'</span></pre></div> </td> </tr> <tr id="section-46"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-46">#</a> </div> <h3>CallNode</h3> </td> <td class="code"> <div class="highlight"><pre></pre></div> </td> </tr> <tr id="section-47"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-47">#</a> </div> <p>Node for a function invocation. Takes care of converting <code>super()</code> calls into
|
<span class="nx">@tab</span> <span class="o">+</span> <span class="s1">'/*'</span> <span class="o">+</span> <span class="nx">@comment</span><span class="p">.</span><span class="nx">replace</span><span class="p">(</span><span class="sr">/\r?\n/g</span><span class="p">,</span> <span class="s1">'\n'</span> <span class="o">+</span> <span class="nx">@tab</span><span class="p">)</span> <span class="o">+</span> <span class="s1">'*/'</span></pre></div> </td> </tr> <tr id="section-45"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-45">#</a> </div> <h3>CallNode</h3> </td> <td class="code"> <div class="highlight"><pre></pre></div> </td> </tr> <tr id="section-46"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-46">#</a> </div> <p>Node for a function invocation. Takes care of converting <code>super()</code> calls into
|
||||||
calls against the prototype's function of the same name.</p> </td> <td class="code"> <div class="highlight"><pre><span class="nv">exports.CallNode = </span><span class="nx">class</span> <span class="nx">CallNode</span> <span class="k">extends</span> <span class="nx">BaseNode</span>
|
calls against the prototype's function of the same name.</p> </td> <td class="code"> <div class="highlight"><pre><span class="nv">exports.CallNode = </span><span class="nx">class</span> <span class="nx">CallNode</span> <span class="k">extends</span> <span class="nx">BaseNode</span>
|
||||||
|
|
||||||
<span class="nx">class</span><span class="o">:</span> <span class="s1">'CallNode'</span>
|
<span class="nx">class</span><span class="o">:</span> <span class="s1">'CallNode'</span>
|
||||||
|
@ -295,26 +291,33 @@ calls against the prototype's function of the same name.</p> </td>
|
||||||
<span class="nx">@args</span> <span class="o">or=</span> <span class="p">[]</span>
|
<span class="nx">@args</span> <span class="o">or=</span> <span class="p">[]</span>
|
||||||
<span class="vi">@first = @last = </span><span class="s1">''</span>
|
<span class="vi">@first = @last = </span><span class="s1">''</span>
|
||||||
<span class="vi">@compileSplatArguments = </span><span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="o">-></span>
|
<span class="vi">@compileSplatArguments = </span><span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="o">-></span>
|
||||||
<span class="nx">SplatNode</span><span class="p">.</span><span class="nx">compileSplattedArray</span><span class="p">.</span><span class="nx">call</span><span class="p">(</span><span class="k">this</span><span class="p">,</span> <span class="nx">@args</span><span class="p">,</span> <span class="nx">o</span><span class="p">)</span></pre></div> </td> </tr> <tr id="section-48"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-48">#</a> </div> <p>Tag this invocation as creating a new instance.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">newInstance</span><span class="o">:</span> <span class="o">-></span>
|
<span class="nx">SplatNode</span><span class="p">.</span><span class="nx">compileSplattedArray</span><span class="p">.</span><span class="nx">call</span><span class="p">(</span><span class="k">this</span><span class="p">,</span> <span class="nx">@args</span><span class="p">,</span> <span class="nx">o</span><span class="p">)</span></pre></div> </td> </tr> <tr id="section-47"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-47">#</a> </div> <p>Tag this invocation as creating a new instance.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">newInstance</span><span class="o">:</span> <span class="o">-></span>
|
||||||
<span class="vi">@isNew = </span><span class="kc">true</span>
|
<span class="vi">@isNew = </span><span class="kc">true</span>
|
||||||
<span class="k">this</span>
|
<span class="k">this</span>
|
||||||
|
|
||||||
<span class="nx">prefix</span><span class="o">:</span> <span class="o">-></span>
|
<span class="nx">prefix</span><span class="o">:</span> <span class="o">-></span>
|
||||||
<span class="k">if</span> <span class="nx">@isNew</span> <span class="k">then</span> <span class="s1">'new '</span> <span class="k">else</span> <span class="s1">''</span></pre></div> </td> </tr> <tr id="section-49"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-49">#</a> </div> <p>Grab the reference to the superclass' implementation of the current method.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">superReference</span><span class="o">:</span> <span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="o">-></span>
|
<span class="k">if</span> <span class="nx">@isNew</span> <span class="k">then</span> <span class="s1">'new '</span> <span class="k">else</span> <span class="s1">''</span></pre></div> </td> </tr> <tr id="section-48"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-48">#</a> </div> <p>Grab the reference to the superclass' implementation of the current method.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">superReference</span><span class="o">:</span> <span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="o">-></span>
|
||||||
<span class="k">throw</span> <span class="k">new</span> <span class="nb">Error</span> <span class="s2">"cannot call super outside of a function"</span> <span class="nx">unless</span> <span class="nx">o</span><span class="p">.</span><span class="nx">scope</span><span class="p">.</span><span class="nx">method</span>
|
<span class="k">throw</span> <span class="k">new</span> <span class="nb">Error</span> <span class="s2">"cannot call super outside of a function"</span> <span class="nx">unless</span> <span class="nx">o</span><span class="p">.</span><span class="nx">scope</span><span class="p">.</span><span class="nx">method</span>
|
||||||
<span class="nv">methname = </span><span class="nx">o</span><span class="p">.</span><span class="nx">scope</span><span class="p">.</span><span class="nx">method</span><span class="p">.</span><span class="nx">name</span>
|
<span class="nv">methname = </span><span class="nx">o</span><span class="p">.</span><span class="nx">scope</span><span class="p">.</span><span class="nx">method</span><span class="p">.</span><span class="nx">name</span>
|
||||||
<span class="nv">meth = </span><span class="k">if</span> <span class="nx">o</span><span class="p">.</span><span class="nx">scope</span><span class="p">.</span><span class="nx">method</span><span class="p">.</span><span class="nx">proto</span>
|
<span class="nv">meth = </span><span class="k">if</span> <span class="nx">o</span><span class="p">.</span><span class="nx">scope</span><span class="p">.</span><span class="nx">method</span><span class="p">.</span><span class="nx">proto</span>
|
||||||
<span class="s2">"#{o.scope.method.proto}.__super__.#{methname}"</span>
|
<span class="s2">"#{o.scope.method.proto}.__super__.#{methname}"</span>
|
||||||
<span class="k">else</span> <span class="k">if</span> <span class="nx">methname</span>
|
<span class="k">else</span> <span class="k">if</span> <span class="nx">methname</span>
|
||||||
<span class="s2">"#{methname}.__super__.constructor"</span>
|
<span class="s2">"#{methname}.__super__.constructor"</span>
|
||||||
<span class="k">else</span> <span class="k">throw</span> <span class="k">new</span> <span class="nb">Error</span> <span class="s2">"cannot call super on an anonymous function."</span></pre></div> </td> </tr> <tr id="section-50"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-50">#</a> </div> <p>Compile a vanilla function call.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">compileNode</span><span class="o">:</span> <span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="o">-></span>
|
<span class="k">else</span> <span class="k">throw</span> <span class="k">new</span> <span class="nb">Error</span> <span class="s2">"cannot call super on an anonymous function."</span></pre></div> </td> </tr> <tr id="section-49"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-49">#</a> </div> <p>Compile a vanilla function call.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">compileNode</span><span class="o">:</span> <span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="o">-></span>
|
||||||
<span class="nv">o.chainRoot = </span><span class="k">this</span> <span class="nx">unless</span> <span class="nx">o</span><span class="p">.</span><span class="nx">chainRoot</span>
|
<span class="nv">o.chainRoot = </span><span class="k">this</span> <span class="nx">unless</span> <span class="nx">o</span><span class="p">.</span><span class="nx">chainRoot</span>
|
||||||
<span class="nv">op = </span><span class="nx">@tags</span><span class="p">.</span><span class="nx">operation</span>
|
<span class="nv">op = </span><span class="nx">@tags</span><span class="p">.</span><span class="nx">operation</span>
|
||||||
<span class="k">if</span> <span class="nx">@exist</span>
|
<span class="k">if</span> <span class="nx">@exist</span>
|
||||||
<span class="p">[</span><span class="nx">@first</span><span class="p">,</span> <span class="nx">@meth</span><span class="p">]</span> <span class="o">=</span> <span class="nx">@variable</span><span class="p">.</span><span class="nx">compileReference</span> <span class="nx">o</span><span class="p">,</span> <span class="nx">precompile</span><span class="o">:</span> <span class="kc">yes</span>
|
<span class="k">if</span> <span class="nx">@variable</span> <span class="k">instanceof</span> <span class="nx">ValueNode</span> <span class="o">and</span> <span class="nx">@variable</span><span class="p">.</span><span class="nx">properties</span><span class="p">[</span><span class="nx">@variable</span><span class="p">.</span><span class="nx">properties</span><span class="p">.</span><span class="nx">length</span> <span class="o">-</span> <span class="mi">1</span><span class="p">]</span> <span class="k">instanceof</span> <span class="nx">AccessorNode</span>
|
||||||
|
<span class="nv">methodAccessor = </span><span class="nx">@variable</span><span class="p">.</span><span class="nx">properties</span><span class="p">.</span><span class="nx">pop</span><span class="p">()</span>
|
||||||
|
<span class="p">[</span><span class="nx">first</span><span class="p">,</span> <span class="nx">meth</span><span class="p">]</span> <span class="o">=</span> <span class="nx">@variable</span><span class="p">.</span><span class="nx">compileReference</span> <span class="nx">o</span>
|
||||||
|
<span class="vi">@first = </span><span class="k">new</span> <span class="nx">ValueNode</span><span class="p">(</span><span class="nx">first</span><span class="p">,</span> <span class="p">[</span><span class="nx">methodAccessor</span><span class="p">]).</span><span class="nx">compile</span> <span class="nx">o</span>
|
||||||
|
<span class="vi">@meth = </span><span class="k">new</span> <span class="nx">ValueNode</span><span class="p">(</span><span class="nx">meth</span><span class="p">,</span> <span class="p">[</span><span class="nx">methodAccessor</span><span class="p">]).</span><span class="nx">compile</span> <span class="nx">o</span>
|
||||||
|
<span class="k">else</span>
|
||||||
|
<span class="p">[</span><span class="nx">@first</span><span class="p">,</span> <span class="nx">@meth</span><span class="p">]</span> <span class="o">=</span> <span class="nx">@variable</span><span class="p">.</span><span class="nx">compileReference</span> <span class="nx">o</span><span class="p">,</span> <span class="nx">precompile</span><span class="o">:</span> <span class="kc">yes</span>
|
||||||
<span class="vi">@first = </span><span class="s2">"(typeof #{@first} === \"function\" ? "</span>
|
<span class="vi">@first = </span><span class="s2">"(typeof #{@first} === \"function\" ? "</span>
|
||||||
<span class="vi">@last = </span><span class="s2">" : undefined)"</span>
|
<span class="vi">@last = </span><span class="s2">" : undefined)"</span>
|
||||||
<span class="k">else</span> <span class="k">if</span> <span class="nx">@variable</span> <span class="k">then</span> <span class="vi">@meth = </span><span class="nx">@variable</span><span class="p">.</span><span class="nx">compile</span> <span class="nx">o</span>
|
<span class="k">else</span> <span class="k">if</span> <span class="nx">@variable</span>
|
||||||
|
<span class="vi">@meth = </span><span class="nx">@variable</span><span class="p">.</span><span class="nx">compile</span> <span class="nx">o</span>
|
||||||
<span class="k">for</span> <span class="nx">arg</span> <span class="k">in</span> <span class="nx">@args</span> <span class="k">when</span> <span class="nx">arg</span> <span class="k">instanceof</span> <span class="nx">SplatNode</span>
|
<span class="k">for</span> <span class="nx">arg</span> <span class="k">in</span> <span class="nx">@args</span> <span class="k">when</span> <span class="nx">arg</span> <span class="k">instanceof</span> <span class="nx">SplatNode</span>
|
||||||
<span class="nv">code = </span><span class="nx">@compileSplat</span><span class="p">(</span><span class="nx">o</span><span class="p">)</span>
|
<span class="nv">code = </span><span class="nx">@compileSplat</span><span class="p">(</span><span class="nx">o</span><span class="p">)</span>
|
||||||
<span class="k">if</span> <span class="o">not</span> <span class="nx">code</span>
|
<span class="k">if</span> <span class="o">not</span> <span class="nx">code</span>
|
||||||
|
@ -325,16 +328,16 @@ calls against the prototype's function of the same name.</p> </td>
|
||||||
<span class="nx">@compileSuper</span><span class="p">(</span><span class="nx">args</span><span class="p">.</span><span class="nx">join</span><span class="p">(</span><span class="s1">', '</span><span class="p">),</span> <span class="nx">o</span><span class="p">)</span>
|
<span class="nx">@compileSuper</span><span class="p">(</span><span class="nx">args</span><span class="p">.</span><span class="nx">join</span><span class="p">(</span><span class="s1">', '</span><span class="p">),</span> <span class="nx">o</span><span class="p">)</span>
|
||||||
<span class="k">else</span>
|
<span class="k">else</span>
|
||||||
<span class="s2">"#{@first}#{@prefix()}#{@meth}(#{ args.join(', ') })#{@last}"</span>
|
<span class="s2">"#{@first}#{@prefix()}#{@meth}(#{ args.join(', ') })#{@last}"</span>
|
||||||
<span class="k">if</span> <span class="nx">op</span> <span class="o">and</span> <span class="nx">@variable</span> <span class="o">and</span> <span class="nx">@variable</span><span class="p">.</span><span class="nx">wrapped</span> <span class="k">then</span> <span class="s2">"(#{code})"</span> <span class="k">else</span> <span class="nx">code</span></pre></div> </td> </tr> <tr id="section-51"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-51">#</a> </div> <p><code>super()</code> is converted into a call against the superclass's implementation
|
<span class="k">if</span> <span class="nx">op</span> <span class="o">and</span> <span class="nx">@variable</span> <span class="o">and</span> <span class="nx">@variable</span><span class="p">.</span><span class="nx">wrapped</span> <span class="k">then</span> <span class="s2">"(#{code})"</span> <span class="k">else</span> <span class="nx">code</span></pre></div> </td> </tr> <tr id="section-50"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-50">#</a> </div> <p><code>super()</code> is converted into a call against the superclass's implementation
|
||||||
of the current function.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">compileSuper</span><span class="o">:</span> <span class="p">(</span><span class="nx">args</span><span class="p">,</span> <span class="nx">o</span><span class="p">)</span> <span class="o">-></span>
|
of the current function.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">compileSuper</span><span class="o">:</span> <span class="p">(</span><span class="nx">args</span><span class="p">,</span> <span class="nx">o</span><span class="p">)</span> <span class="o">-></span>
|
||||||
<span class="s2">"#{@superReference(o)}.call(this#{ if args.length then ', ' else '' }#{args})"</span></pre></div> </td> </tr> <tr id="section-52"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-52">#</a> </div> <p>If you call a function with a splat, it's converted into a JavaScript
|
<span class="s2">"#{@superReference(o)}.call(this#{ if args.length then ', ' else '' }#{args})"</span></pre></div> </td> </tr> <tr id="section-51"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-51">#</a> </div> <p>If you call a function with a splat, it's converted into a JavaScript
|
||||||
<code>.apply()</code> call to allow an array of arguments to be passed.
|
<code>.apply()</code> call to allow an array of arguments to be passed.
|
||||||
If it's a constructor, then things get real tricky. We have to inject an
|
If it's a constructor, then things get real tricky. We have to inject an
|
||||||
inner constructor in order to be able to pass the varargs.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">compileSplat</span><span class="o">:</span> <span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="o">-></span>
|
inner constructor in order to be able to pass the varargs.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">compileSplat</span><span class="o">:</span> <span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="o">-></span>
|
||||||
<span class="nv">meth = </span><span class="nx">@meth</span> <span class="o">or</span> <span class="nx">@superReference</span><span class="p">(</span><span class="nx">o</span><span class="p">)</span>
|
<span class="nv">meth = </span><span class="nx">@meth</span> <span class="o">or</span> <span class="nx">@superReference</span><span class="p">(</span><span class="nx">o</span><span class="p">)</span>
|
||||||
<span class="nv">obj = </span><span class="nx">@variable</span> <span class="o">and</span> <span class="nx">@variable</span><span class="p">.</span><span class="nx">source</span> <span class="o">or</span> <span class="s1">'this'</span>
|
<span class="nv">obj = </span><span class="nx">@variable</span> <span class="o">and</span> <span class="nx">@variable</span><span class="p">.</span><span class="nx">source</span> <span class="o">or</span> <span class="s1">'this'</span>
|
||||||
<span class="k">if</span> <span class="nx">obj</span><span class="p">.</span><span class="nx">match</span><span class="p">(</span><span class="sr">/\(/</span><span class="p">)</span>
|
<span class="k">if</span> <span class="nx">obj</span><span class="p">.</span><span class="nx">match</span><span class="p">(</span><span class="sr">/\(/</span><span class="p">)</span>
|
||||||
<span class="nv">temp = </span><span class="nx">o</span><span class="p">.</span><span class="nx">scope</span><span class="p">.</span><span class="nx">freeVariable</span><span class="p">()</span>
|
<span class="nv">temp = </span><span class="nx">o</span><span class="p">.</span><span class="nx">scope</span><span class="p">.</span><span class="nx">freeVariable</span> <span class="s1">'ref'</span>
|
||||||
<span class="nv">obj = </span><span class="nx">temp</span>
|
<span class="nv">obj = </span><span class="nx">temp</span>
|
||||||
<span class="nv">meth = </span><span class="s2">"(#{temp} = #{ @variable.source })#{ @variable.last }"</span>
|
<span class="nv">meth = </span><span class="s2">"(#{temp} = #{ @variable.source })#{ @variable.last }"</span>
|
||||||
<span class="k">if</span> <span class="nx">@isNew</span>
|
<span class="k">if</span> <span class="nx">@isNew</span>
|
||||||
|
@ -342,29 +345,29 @@ inner constructor in order to be able to pass the varargs.</p> </td>
|
||||||
<span class="k">for</span> <span class="nx">arg</span> <span class="k">in</span> <span class="nx">@args</span>
|
<span class="k">for</span> <span class="nx">arg</span> <span class="k">in</span> <span class="nx">@args</span>
|
||||||
<span class="nx">arg</span><span class="p">.</span><span class="nx">contains</span> <span class="p">(</span><span class="nx">n</span><span class="p">)</span> <span class="o">-></span> <span class="nx">mentionsArgs</span> <span class="o">or=</span> <span class="nx">n</span> <span class="k">instanceof</span> <span class="nx">LiteralNode</span> <span class="o">and</span> <span class="p">(</span><span class="nx">n</span><span class="p">.</span><span class="nx">value</span> <span class="o">is</span> <span class="s1">'arguments'</span><span class="p">)</span>
|
<span class="nx">arg</span><span class="p">.</span><span class="nx">contains</span> <span class="p">(</span><span class="nx">n</span><span class="p">)</span> <span class="o">-></span> <span class="nx">mentionsArgs</span> <span class="o">or=</span> <span class="nx">n</span> <span class="k">instanceof</span> <span class="nx">LiteralNode</span> <span class="o">and</span> <span class="p">(</span><span class="nx">n</span><span class="p">.</span><span class="nx">value</span> <span class="o">is</span> <span class="s1">'arguments'</span><span class="p">)</span>
|
||||||
<span class="nx">utility</span> <span class="s1">'extends'</span>
|
<span class="nx">utility</span> <span class="s1">'extends'</span>
|
||||||
<span class="nv">a = </span><span class="nx">o</span><span class="p">.</span><span class="nx">scope</span><span class="p">.</span><span class="nx">freeVariable</span><span class="p">()</span>
|
<span class="nv">a = </span><span class="nx">o</span><span class="p">.</span><span class="nx">scope</span><span class="p">.</span><span class="nx">freeVariable</span> <span class="s1">'ctor'</span>
|
||||||
<span class="nv">b = </span><span class="nx">o</span><span class="p">.</span><span class="nx">scope</span><span class="p">.</span><span class="nx">freeVariable</span><span class="p">()</span>
|
<span class="nv">b = </span><span class="nx">o</span><span class="p">.</span><span class="nx">scope</span><span class="p">.</span><span class="nx">freeVariable</span> <span class="s1">'ref'</span>
|
||||||
<span class="nv">c = </span><span class="nx">o</span><span class="p">.</span><span class="nx">scope</span><span class="p">.</span><span class="nx">freeVariable</span><span class="p">()</span>
|
<span class="nv">c = </span><span class="nx">o</span><span class="p">.</span><span class="nx">scope</span><span class="p">.</span><span class="nx">freeVariable</span> <span class="s1">'result'</span>
|
||||||
<span class="s2">"""</span>
|
<span class="s2">"""</span>
|
||||||
|
|
||||||
<span class="s2">#DIVIDER</span>
|
<span class="s2">#DIVIDER</span>
|
||||||
<span class="s2"> """</span>
|
<span class="s2"> """</span>
|
||||||
<span class="k">else</span>
|
<span class="k">else</span>
|
||||||
<span class="s2">"#{@first}#{@prefix()}#{meth}.apply(#{obj}, #{ @compileSplatArguments(o) })#{@last}"</span></pre></div> </td> </tr> <tr id="section-53"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-53">#</a> </div> <p>{@first}(function() {
|
<span class="s2">"#{@first}#{@prefix()}#{meth}.apply(#{obj}, #{ @compileSplatArguments(o) })#{@last}"</span></pre></div> </td> </tr> <tr id="section-52"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-52">#</a> </div> <p>{@first}(function() {
|
||||||
{@idt(1)}var ctor = function(){};
|
{@idt(1)}var ctor = function(){};
|
||||||
{@idt(1)}__extends(ctor, #{a} = #{meth});
|
{@idt(1)}__extends(ctor, #{a} = #{meth});
|
||||||
{@idt(1)}return typeof (#{b} = #{a}.apply(#{c} = new ctor, #{ @compileSplatArguments(o) })) === "object" ? #{b} : #{c};
|
{@idt(1)}return typeof (#{c} = #{a}.apply(#{b} = new ctor, #{ @compileSplatArguments(o) })) === "object" ? #{c} : #{b};
|
||||||
{@tab}}).#{ if mentionsArgs then 'apply(this, arguments)' else 'call(this)'}#{@last}</p> </td> <td class="code"> <div class="highlight"><pre></pre></div> </td> </tr> <tr id="section-54"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-54">#</a> </div> <h3>ExtendsNode</h3> </td> <td class="code"> <div class="highlight"><pre><span class="nv">exports.ExtendsNode = </span><span class="nx">class</span> <span class="nx">ExtendsNode</span> <span class="k">extends</span> <span class="nx">BaseNode</span>
|
{@tab}}).#{ if mentionsArgs then 'apply(this, arguments)' else 'call(this)'}#{@last}</p> </td> <td class="code"> <div class="highlight"><pre></pre></div> </td> </tr> <tr id="section-53"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-53">#</a> </div> <h3>ExtendsNode</h3> </td> <td class="code"> <div class="highlight"><pre><span class="nv">exports.ExtendsNode = </span><span class="nx">class</span> <span class="nx">ExtendsNode</span> <span class="k">extends</span> <span class="nx">BaseNode</span>
|
||||||
|
|
||||||
<span class="nx">class</span><span class="o">:</span> <span class="s1">'ExtendsNode'</span>
|
<span class="nx">class</span><span class="o">:</span> <span class="s1">'ExtendsNode'</span>
|
||||||
<span class="nx">children</span><span class="o">:</span> <span class="p">[</span><span class="s1">'child'</span><span class="p">,</span> <span class="s1">'parent'</span><span class="p">]</span>
|
<span class="nx">children</span><span class="o">:</span> <span class="p">[</span><span class="s1">'child'</span><span class="p">,</span> <span class="s1">'parent'</span><span class="p">]</span>
|
||||||
|
|
||||||
<span class="nx">constructor</span><span class="o">:</span> <span class="p">(</span><span class="nx">@child</span><span class="p">,</span> <span class="nx">@parent</span><span class="p">)</span> <span class="o">-></span>
|
<span class="nx">constructor</span><span class="o">:</span> <span class="p">(</span><span class="nx">@child</span><span class="p">,</span> <span class="nx">@parent</span><span class="p">)</span> <span class="o">-></span>
|
||||||
<span class="k">super</span><span class="p">()</span></pre></div> </td> </tr> <tr id="section-55"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-55">#</a> </div> <p>Node to extend an object's prototype with an ancestor object.
|
<span class="k">super</span><span class="p">()</span></pre></div> </td> </tr> <tr id="section-54"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-54">#</a> </div> <p>Node to extend an object's prototype with an ancestor object.
|
||||||
After <code>goog.inherits</code> from the
|
After <code>goog.inherits</code> from the
|
||||||
<a href="http://closure-library.googlecode.com/svn/docs/closureGoogBase.js.html">Closure Library</a>.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">compileNode</span><span class="o">:</span> <span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="o">-></span>
|
<a href="http://closure-library.googlecode.com/svn/docs/closureGoogBase.js.html">Closure Library</a>.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">compileNode</span><span class="o">:</span> <span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="o">-></span>
|
||||||
<span class="nv">ref = </span> <span class="k">new</span> <span class="nx">ValueNode</span> <span class="nx">literal</span> <span class="nx">utility</span> <span class="s1">'extends'</span>
|
<span class="nv">ref = </span> <span class="k">new</span> <span class="nx">ValueNode</span> <span class="nx">literal</span> <span class="nx">utility</span> <span class="s1">'extends'</span>
|
||||||
<span class="p">(</span><span class="k">new</span> <span class="nx">CallNode</span> <span class="nx">ref</span><span class="p">,</span> <span class="p">[</span><span class="nx">@child</span><span class="p">,</span> <span class="nx">@parent</span><span class="p">]).</span><span class="nx">compile</span> <span class="nx">o</span></pre></div> </td> </tr> <tr id="section-56"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-56">#</a> </div> <p>Hooks one constructor into another's prototype chain.</p> </td> <td class="code"> <div class="highlight"><pre></pre></div> </td> </tr> <tr id="section-57"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-57">#</a> </div> <h3>AccessorNode</h3> </td> <td class="code"> <div class="highlight"><pre><span class="nv">exports.AccessorNode = </span><span class="nx">class</span> <span class="nx">AccessorNode</span> <span class="k">extends</span> <span class="nx">BaseNode</span>
|
<span class="p">(</span><span class="k">new</span> <span class="nx">CallNode</span> <span class="nx">ref</span><span class="p">,</span> <span class="p">[</span><span class="nx">@child</span><span class="p">,</span> <span class="nx">@parent</span><span class="p">]).</span><span class="nx">compile</span> <span class="nx">o</span></pre></div> </td> </tr> <tr id="section-55"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-55">#</a> </div> <p>Hooks one constructor into another's prototype chain.</p> </td> <td class="code"> <div class="highlight"><pre></pre></div> </td> </tr> <tr id="section-56"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-56">#</a> </div> <h3>AccessorNode</h3> </td> <td class="code"> <div class="highlight"><pre><span class="nv">exports.AccessorNode = </span><span class="nx">class</span> <span class="nx">AccessorNode</span> <span class="k">extends</span> <span class="nx">BaseNode</span>
|
||||||
|
|
||||||
<span class="nx">class</span><span class="o">:</span> <span class="s1">'AccessorNode'</span>
|
<span class="nx">class</span><span class="o">:</span> <span class="s1">'AccessorNode'</span>
|
||||||
<span class="nx">children</span><span class="o">:</span> <span class="p">[</span><span class="s1">'name'</span><span class="p">]</span>
|
<span class="nx">children</span><span class="o">:</span> <span class="p">[</span><span class="s1">'name'</span><span class="p">]</span>
|
||||||
|
@ -378,8 +381,8 @@ After <code>goog.inherits</code> from the
|
||||||
<span class="nv">name = </span><span class="nx">@name</span><span class="p">.</span><span class="nx">compile</span> <span class="nx">o</span>
|
<span class="nv">name = </span><span class="nx">@name</span><span class="p">.</span><span class="nx">compile</span> <span class="nx">o</span>
|
||||||
<span class="nx">o</span><span class="p">.</span><span class="nx">chainRoot</span><span class="p">.</span><span class="nx">wrapped</span> <span class="o">or=</span> <span class="nx">@soakNode</span>
|
<span class="nx">o</span><span class="p">.</span><span class="nx">chainRoot</span><span class="p">.</span><span class="nx">wrapped</span> <span class="o">or=</span> <span class="nx">@soakNode</span>
|
||||||
<span class="nv">namePart = </span><span class="k">if</span> <span class="nx">name</span><span class="p">.</span><span class="nx">match</span><span class="p">(</span><span class="nx">IS_STRING</span><span class="p">)</span> <span class="k">then</span> <span class="s2">"[#{name}]"</span> <span class="k">else</span> <span class="s2">".#{name}"</span>
|
<span class="nv">namePart = </span><span class="k">if</span> <span class="nx">name</span><span class="p">.</span><span class="nx">match</span><span class="p">(</span><span class="nx">IS_STRING</span><span class="p">)</span> <span class="k">then</span> <span class="s2">"[#{name}]"</span> <span class="k">else</span> <span class="s2">".#{name}"</span>
|
||||||
<span class="nx">@prototype</span> <span class="o">+</span> <span class="nx">namePart</span></pre></div> </td> </tr> <tr id="section-58"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-58">#</a> </div> <p>A <code>.</code> accessor into a property of a value, or the <code>::</code> shorthand for
|
<span class="nx">@prototype</span> <span class="o">+</span> <span class="nx">namePart</span></pre></div> </td> </tr> <tr id="section-57"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-57">#</a> </div> <p>A <code>.</code> accessor into a property of a value, or the <code>::</code> shorthand for
|
||||||
an accessor into the object's prototype.</p> </td> <td class="code"> <div class="highlight"><pre></pre></div> </td> </tr> <tr id="section-59"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-59">#</a> </div> <h3>IndexNode</h3> </td> <td class="code"> <div class="highlight"><pre><span class="nv">exports.IndexNode = </span><span class="nx">class</span> <span class="nx">IndexNode</span> <span class="k">extends</span> <span class="nx">BaseNode</span>
|
an accessor into the object's prototype.</p> </td> <td class="code"> <div class="highlight"><pre></pre></div> </td> </tr> <tr id="section-58"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-58">#</a> </div> <h3>IndexNode</h3> </td> <td class="code"> <div class="highlight"><pre><span class="nv">exports.IndexNode = </span><span class="nx">class</span> <span class="nx">IndexNode</span> <span class="k">extends</span> <span class="nx">BaseNode</span>
|
||||||
|
|
||||||
<span class="nx">class</span><span class="o">:</span> <span class="s1">'IndexNode'</span>
|
<span class="nx">class</span><span class="o">:</span> <span class="s1">'IndexNode'</span>
|
||||||
<span class="nx">children</span><span class="o">:</span> <span class="p">[</span><span class="s1">'index'</span><span class="p">]</span>
|
<span class="nx">children</span><span class="o">:</span> <span class="p">[</span><span class="s1">'index'</span><span class="p">]</span>
|
||||||
|
@ -391,7 +394,7 @@ an accessor into the object's prototype.</p> </td> <td c
|
||||||
<span class="nx">o</span><span class="p">.</span><span class="nx">chainRoot</span><span class="p">.</span><span class="nx">wrapped</span> <span class="o">or=</span> <span class="nx">@soakNode</span>
|
<span class="nx">o</span><span class="p">.</span><span class="nx">chainRoot</span><span class="p">.</span><span class="nx">wrapped</span> <span class="o">or=</span> <span class="nx">@soakNode</span>
|
||||||
<span class="nv">idx = </span><span class="nx">@index</span><span class="p">.</span><span class="nx">compile</span> <span class="nx">o</span>
|
<span class="nv">idx = </span><span class="nx">@index</span><span class="p">.</span><span class="nx">compile</span> <span class="nx">o</span>
|
||||||
<span class="nv">prefix = </span><span class="k">if</span> <span class="nx">@proto</span> <span class="k">then</span> <span class="s1">'.prototype'</span> <span class="k">else</span> <span class="s1">''</span>
|
<span class="nv">prefix = </span><span class="k">if</span> <span class="nx">@proto</span> <span class="k">then</span> <span class="s1">'.prototype'</span> <span class="k">else</span> <span class="s1">''</span>
|
||||||
<span class="s2">"#{prefix}[#{idx}]"</span></pre></div> </td> </tr> <tr id="section-60"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-60">#</a> </div> <p>A <code>[ ... ]</code> indexed accessor into an array or object.</p> </td> <td class="code"> <div class="highlight"><pre></pre></div> </td> </tr> <tr id="section-61"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-61">#</a> </div> <h3>RangeNode</h3> </td> <td class="code"> <div class="highlight"><pre><span class="nv">exports.RangeNode = </span><span class="nx">class</span> <span class="nx">RangeNode</span> <span class="k">extends</span> <span class="nx">BaseNode</span>
|
<span class="s2">"#{prefix}[#{idx}]"</span></pre></div> </td> </tr> <tr id="section-59"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-59">#</a> </div> <p>A <code>[ ... ]</code> indexed accessor into an array or object.</p> </td> <td class="code"> <div class="highlight"><pre></pre></div> </td> </tr> <tr id="section-60"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-60">#</a> </div> <h3>RangeNode</h3> </td> <td class="code"> <div class="highlight"><pre><span class="nv">exports.RangeNode = </span><span class="nx">class</span> <span class="nx">RangeNode</span> <span class="k">extends</span> <span class="nx">BaseNode</span>
|
||||||
|
|
||||||
<span class="nx">class</span><span class="o">:</span> <span class="s1">'RangeNode'</span>
|
<span class="nx">class</span><span class="o">:</span> <span class="s1">'RangeNode'</span>
|
||||||
<span class="nx">children</span><span class="o">:</span> <span class="p">[</span><span class="s1">'from'</span><span class="p">,</span> <span class="s1">'to'</span><span class="p">]</span>
|
<span class="nx">children</span><span class="o">:</span> <span class="p">[</span><span class="s1">'from'</span><span class="p">,</span> <span class="s1">'to'</span><span class="p">]</span>
|
||||||
|
@ -399,7 +402,7 @@ an accessor into the object's prototype.</p> </td> <td c
|
||||||
<span class="nx">constructor</span><span class="o">:</span> <span class="p">(</span><span class="nx">@from</span><span class="p">,</span> <span class="nx">@to</span><span class="p">,</span> <span class="nx">tag</span><span class="p">)</span> <span class="o">-></span>
|
<span class="nx">constructor</span><span class="o">:</span> <span class="p">(</span><span class="nx">@from</span><span class="p">,</span> <span class="nx">@to</span><span class="p">,</span> <span class="nx">tag</span><span class="p">)</span> <span class="o">-></span>
|
||||||
<span class="k">super</span><span class="p">()</span>
|
<span class="k">super</span><span class="p">()</span>
|
||||||
<span class="vi">@exclusive = </span><span class="nx">tag</span> <span class="o">is</span> <span class="s1">'exclusive'</span>
|
<span class="vi">@exclusive = </span><span class="nx">tag</span> <span class="o">is</span> <span class="s1">'exclusive'</span>
|
||||||
<span class="vi">@equals = </span><span class="k">if</span> <span class="nx">@exclusive</span> <span class="k">then</span> <span class="s1">''</span> <span class="k">else</span> <span class="s1">'='</span></pre></div> </td> </tr> <tr id="section-62"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-62">#</a> </div> <p>A range literal. Ranges can be used to extract portions (slices) of arrays,
|
<span class="vi">@equals = </span><span class="k">if</span> <span class="nx">@exclusive</span> <span class="k">then</span> <span class="s1">''</span> <span class="k">else</span> <span class="s1">'='</span></pre></div> </td> </tr> <tr id="section-61"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-61">#</a> </div> <p>A range literal. Ranges can be used to extract portions (slices) of arrays,
|
||||||
to specify a range for comprehensions, or as a value, to be expanded into the
|
to specify a range for comprehensions, or as a value, to be expanded into the
|
||||||
corresponding array of integers at runtime.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">compileVariables</span><span class="o">:</span> <span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="o">-></span>
|
corresponding array of integers at runtime.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">compileVariables</span><span class="o">:</span> <span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="o">-></span>
|
||||||
<span class="nv">o = </span><span class="nx">merge</span><span class="p">(</span><span class="nx">o</span><span class="p">,</span> <span class="nx">top</span><span class="o">:</span> <span class="kc">true</span><span class="p">)</span>
|
<span class="nv">o = </span><span class="nx">merge</span><span class="p">(</span><span class="nx">o</span><span class="p">,</span> <span class="nx">top</span><span class="o">:</span> <span class="kc">true</span><span class="p">)</span>
|
||||||
|
@ -409,7 +412,7 @@ corresponding array of integers at runtime.</p> </td> <t
|
||||||
<span class="nv">parts = </span><span class="p">[]</span>
|
<span class="nv">parts = </span><span class="p">[]</span>
|
||||||
<span class="nx">parts</span><span class="p">.</span><span class="nx">push</span> <span class="nx">@from</span> <span class="k">if</span> <span class="nx">@from</span> <span class="o">isnt</span> <span class="nx">@fromVar</span>
|
<span class="nx">parts</span><span class="p">.</span><span class="nx">push</span> <span class="nx">@from</span> <span class="k">if</span> <span class="nx">@from</span> <span class="o">isnt</span> <span class="nx">@fromVar</span>
|
||||||
<span class="nx">parts</span><span class="p">.</span><span class="nx">push</span> <span class="nx">@to</span> <span class="k">if</span> <span class="nx">@to</span> <span class="o">isnt</span> <span class="nx">@toVar</span>
|
<span class="nx">parts</span><span class="p">.</span><span class="nx">push</span> <span class="nx">@to</span> <span class="k">if</span> <span class="nx">@to</span> <span class="o">isnt</span> <span class="nx">@toVar</span>
|
||||||
<span class="k">if</span> <span class="nx">parts</span><span class="p">.</span><span class="nx">length</span> <span class="k">then</span> <span class="s2">"#{parts.join('; ')}; "</span> <span class="k">else</span> <span class="s1">''</span></pre></div> </td> </tr> <tr id="section-63"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-63">#</a> </div> <p>Compiles the range's source variables -- where it starts and where it ends.
|
<span class="k">if</span> <span class="nx">parts</span><span class="p">.</span><span class="nx">length</span> <span class="k">then</span> <span class="s2">"#{parts.join('; ')}; "</span> <span class="k">else</span> <span class="s1">''</span></pre></div> </td> </tr> <tr id="section-62"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-62">#</a> </div> <p>Compiles the range's source variables -- where it starts and where it ends.
|
||||||
But only if they need to be cached to avoid double evaluation.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">compileNode</span><span class="o">:</span> <span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="o">-></span>
|
But only if they need to be cached to avoid double evaluation.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">compileNode</span><span class="o">:</span> <span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="o">-></span>
|
||||||
<span class="k">return</span> <span class="nx">@compileArray</span><span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="nx">unless</span> <span class="nx">o</span><span class="p">.</span><span class="nx">index</span>
|
<span class="k">return</span> <span class="nx">@compileArray</span><span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="nx">unless</span> <span class="nx">o</span><span class="p">.</span><span class="nx">index</span>
|
||||||
<span class="k">return</span> <span class="nx">@compileSimple</span><span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="k">if</span> <span class="nx">@fromNum</span> <span class="o">and</span> <span class="nx">@toNum</span>
|
<span class="k">return</span> <span class="nx">@compileSimple</span><span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="k">if</span> <span class="nx">@fromNum</span> <span class="o">and</span> <span class="nx">@toNum</span>
|
||||||
|
@ -420,7 +423,7 @@ But only if they need to be cached to avoid double evaluation.</p> <
|
||||||
<span class="nv">compare = </span><span class="s2">"#{intro} <#{@equals} #{@toVar} : #{idx} >#{@equals} #{@toVar})"</span>
|
<span class="nv">compare = </span><span class="s2">"#{intro} <#{@equals} #{@toVar} : #{idx} >#{@equals} #{@toVar})"</span>
|
||||||
<span class="nv">stepPart = </span><span class="k">if</span> <span class="nx">step</span> <span class="k">then</span> <span class="nx">step</span><span class="p">.</span><span class="nx">compile</span><span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="k">else</span> <span class="s1">'1'</span>
|
<span class="nv">stepPart = </span><span class="k">if</span> <span class="nx">step</span> <span class="k">then</span> <span class="nx">step</span><span class="p">.</span><span class="nx">compile</span><span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="k">else</span> <span class="s1">'1'</span>
|
||||||
<span class="nv">incr = </span><span class="k">if</span> <span class="nx">step</span> <span class="k">then</span> <span class="s2">"#{idx} += #{stepPart}"</span> <span class="k">else</span> <span class="s2">"#{intro} += #{stepPart} : #{idx} -= #{stepPart})"</span>
|
<span class="nv">incr = </span><span class="k">if</span> <span class="nx">step</span> <span class="k">then</span> <span class="s2">"#{idx} += #{stepPart}"</span> <span class="k">else</span> <span class="s2">"#{intro} += #{stepPart} : #{idx} -= #{stepPart})"</span>
|
||||||
<span class="s2">"#{vars}; #{compare}; #{incr}"</span></pre></div> </td> </tr> <tr id="section-64"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-64">#</a> </div> <p>When compiled normally, the range returns the contents of the <em>for loop</em>
|
<span class="s2">"#{vars}; #{compare}; #{incr}"</span></pre></div> </td> </tr> <tr id="section-63"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-63">#</a> </div> <p>When compiled normally, the range returns the contents of the <em>for loop</em>
|
||||||
needed to iterate over the values in the range. Used by comprehensions.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">compileSimple</span><span class="o">:</span> <span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="o">-></span>
|
needed to iterate over the values in the range. Used by comprehensions.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">compileSimple</span><span class="o">:</span> <span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="o">-></span>
|
||||||
<span class="p">[</span><span class="nx">from</span><span class="p">,</span> <span class="nx">to</span><span class="p">]</span> <span class="o">=</span> <span class="p">[</span><span class="nb">parseInt</span><span class="p">(</span><span class="nx">@fromNum</span><span class="p">,</span> <span class="mi">10</span><span class="p">),</span> <span class="nb">parseInt</span><span class="p">(</span><span class="nx">@toNum</span><span class="p">,</span> <span class="mi">10</span><span class="p">)]</span>
|
<span class="p">[</span><span class="nx">from</span><span class="p">,</span> <span class="nx">to</span><span class="p">]</span> <span class="o">=</span> <span class="p">[</span><span class="nb">parseInt</span><span class="p">(</span><span class="nx">@fromNum</span><span class="p">,</span> <span class="mi">10</span><span class="p">),</span> <span class="nb">parseInt</span><span class="p">(</span><span class="nx">@toNum</span><span class="p">,</span> <span class="mi">10</span><span class="p">)]</span>
|
||||||
<span class="nv">idx = </span><span class="nx">del</span> <span class="nx">o</span><span class="p">,</span> <span class="s1">'index'</span>
|
<span class="nv">idx = </span><span class="nx">del</span> <span class="nx">o</span><span class="p">,</span> <span class="s1">'index'</span>
|
||||||
|
@ -429,15 +432,15 @@ needed to iterate over the values in the range. Used by comprehensions.</p>
|
||||||
<span class="k">if</span> <span class="nx">from</span> <span class="o"><=</span> <span class="nx">to</span>
|
<span class="k">if</span> <span class="nx">from</span> <span class="o"><=</span> <span class="nx">to</span>
|
||||||
<span class="s2">"#{idx} = #{from}; #{idx} <#{@equals} #{to}; #{step or "</span><span class="c1">#{idx}++"}"</span>
|
<span class="s2">"#{idx} = #{from}; #{idx} <#{@equals} #{to}; #{step or "</span><span class="c1">#{idx}++"}"</span>
|
||||||
<span class="k">else</span>
|
<span class="k">else</span>
|
||||||
<span class="s2">"#{idx} = #{from}; #{idx} >#{@equals} #{to}; #{step or "</span><span class="c1">#{idx}--"}"</span></pre></div> </td> </tr> <tr id="section-65"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-65">#</a> </div> <p>Compile a simple range comprehension, with integers.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">compileArray</span><span class="o">:</span> <span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="o">-></span>
|
<span class="s2">"#{idx} = #{from}; #{idx} >#{@equals} #{to}; #{step or "</span><span class="c1">#{idx}--"}"</span></pre></div> </td> </tr> <tr id="section-64"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-64">#</a> </div> <p>Compile a simple range comprehension, with integers.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">compileArray</span><span class="o">:</span> <span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="o">-></span>
|
||||||
<span class="nv">idt = </span><span class="nx">@idt</span> <span class="mi">1</span>
|
<span class="nv">idt = </span><span class="nx">@idt</span> <span class="mi">1</span>
|
||||||
<span class="nv">vars = </span><span class="nx">@compileVariables</span> <span class="nx">merge</span> <span class="nx">o</span><span class="p">,</span> <span class="nx">indent</span><span class="o">:</span> <span class="nx">idt</span>
|
<span class="nv">vars = </span><span class="nx">@compileVariables</span> <span class="nx">merge</span> <span class="nx">o</span><span class="p">,</span> <span class="nx">indent</span><span class="o">:</span> <span class="nx">idt</span>
|
||||||
<span class="k">if</span> <span class="nx">@fromNum</span> <span class="o">and</span> <span class="nx">@toNum</span> <span class="o">and</span> <span class="nb">Math</span><span class="p">.</span><span class="nx">abs</span><span class="p">(</span><span class="o">+</span><span class="nx">@fromNum</span> <span class="o">-</span> <span class="o">+</span><span class="nx">@toNum</span><span class="p">)</span> <span class="o"><=</span> <span class="mi">20</span>
|
<span class="k">if</span> <span class="nx">@fromNum</span> <span class="o">and</span> <span class="nx">@toNum</span> <span class="o">and</span> <span class="nb">Math</span><span class="p">.</span><span class="nx">abs</span><span class="p">(</span><span class="o">+</span><span class="nx">@fromNum</span> <span class="o">-</span> <span class="o">+</span><span class="nx">@toNum</span><span class="p">)</span> <span class="o"><=</span> <span class="mi">20</span>
|
||||||
<span class="nv">range = </span><span class="p">[</span><span class="o">+</span><span class="nx">@fromNum</span><span class="p">..</span><span class="o">+</span><span class="nx">@toNum</span><span class="p">]</span>
|
<span class="nv">range = </span><span class="p">[</span><span class="o">+</span><span class="nx">@fromNum</span><span class="p">..</span><span class="o">+</span><span class="nx">@toNum</span><span class="p">]</span>
|
||||||
<span class="nx">range</span><span class="p">.</span><span class="nx">pop</span><span class="p">()</span> <span class="k">if</span> <span class="nx">@exclusive</span>
|
<span class="nx">range</span><span class="p">.</span><span class="nx">pop</span><span class="p">()</span> <span class="k">if</span> <span class="nx">@exclusive</span>
|
||||||
<span class="k">return</span> <span class="s2">"[#{ range.join(', ') }]"</span>
|
<span class="k">return</span> <span class="s2">"[#{ range.join(', ') }]"</span>
|
||||||
<span class="nv">i = </span><span class="nx">o</span><span class="p">.</span><span class="nx">scope</span><span class="p">.</span><span class="nx">freeVariable</span><span class="p">()</span>
|
<span class="nv">i = </span><span class="nx">o</span><span class="p">.</span><span class="nx">scope</span><span class="p">.</span><span class="nx">freeVariable</span> <span class="s1">'i'</span>
|
||||||
<span class="nv">result = </span><span class="nx">o</span><span class="p">.</span><span class="nx">scope</span><span class="p">.</span><span class="nx">freeVariable</span><span class="p">()</span>
|
<span class="nv">result = </span><span class="nx">o</span><span class="p">.</span><span class="nx">scope</span><span class="p">.</span><span class="nx">freeVariable</span> <span class="s1">'result'</span>
|
||||||
<span class="nv">pre = </span><span class="s2">"\n#{idt}#{result} = []; #{vars}"</span>
|
<span class="nv">pre = </span><span class="s2">"\n#{idt}#{result} = []; #{vars}"</span>
|
||||||
<span class="k">if</span> <span class="nx">@fromNum</span> <span class="o">and</span> <span class="nx">@toNum</span>
|
<span class="k">if</span> <span class="nx">@fromNum</span> <span class="o">and</span> <span class="nx">@toNum</span>
|
||||||
<span class="nv">o.index = </span><span class="nx">i</span>
|
<span class="nv">o.index = </span><span class="nx">i</span>
|
||||||
|
@ -446,7 +449,7 @@ needed to iterate over the values in the range. Used by comprehensions.</p>
|
||||||
<span class="nv">clause = </span><span class="s2">"#{@fromVar} <= #{@toVar} ?"</span>
|
<span class="nv">clause = </span><span class="s2">"#{@fromVar} <= #{@toVar} ?"</span>
|
||||||
<span class="nv">body = </span><span class="s2">"var #{i} = #{@fromVar}; #{clause} #{i} <#{@equals} #{@toVar} : #{i} >#{@equals} #{@toVar}; #{clause} #{i} += 1 : #{i} -= 1"</span>
|
<span class="nv">body = </span><span class="s2">"var #{i} = #{@fromVar}; #{clause} #{i} <#{@equals} #{@toVar} : #{i} >#{@equals} #{@toVar}; #{clause} #{i} += 1 : #{i} -= 1"</span>
|
||||||
<span class="nv">post = </span><span class="s2">"{ #{result}.push(#{i}); }\n#{idt}return #{result};\n#{o.indent}"</span>
|
<span class="nv">post = </span><span class="s2">"{ #{result}.push(#{i}); }\n#{idt}return #{result};\n#{o.indent}"</span>
|
||||||
<span class="s2">"(function() {#{pre}\n#{idt}for (#{body})#{post}}).call(this)"</span></pre></div> </td> </tr> <tr id="section-66"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-66">#</a> </div> <p>When used as a value, expand the range into the equivalent array.</p> </td> <td class="code"> <div class="highlight"><pre></pre></div> </td> </tr> <tr id="section-67"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-67">#</a> </div> <h3>SliceNode</h3> </td> <td class="code"> <div class="highlight"><pre><span class="nv">exports.SliceNode = </span><span class="nx">class</span> <span class="nx">SliceNode</span> <span class="k">extends</span> <span class="nx">BaseNode</span>
|
<span class="s2">"(function() {#{pre}\n#{idt}for (#{body})#{post}}).call(this)"</span></pre></div> </td> </tr> <tr id="section-65"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-65">#</a> </div> <p>When used as a value, expand the range into the equivalent array.</p> </td> <td class="code"> <div class="highlight"><pre></pre></div> </td> </tr> <tr id="section-66"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-66">#</a> </div> <h3>SliceNode</h3> </td> <td class="code"> <div class="highlight"><pre><span class="nv">exports.SliceNode = </span><span class="nx">class</span> <span class="nx">SliceNode</span> <span class="k">extends</span> <span class="nx">BaseNode</span>
|
||||||
|
|
||||||
<span class="nx">class</span><span class="o">:</span> <span class="s1">'SliceNode'</span>
|
<span class="nx">class</span><span class="o">:</span> <span class="s1">'SliceNode'</span>
|
||||||
<span class="nx">children</span><span class="o">:</span> <span class="p">[</span><span class="s1">'range'</span><span class="p">]</span>
|
<span class="nx">children</span><span class="o">:</span> <span class="p">[</span><span class="s1">'range'</span><span class="p">]</span>
|
||||||
|
@ -459,9 +462,9 @@ needed to iterate over the values in the range. Used by comprehensions.</p>
|
||||||
<span class="nv">to = </span> <span class="k">if</span> <span class="nx">@range</span><span class="p">.</span><span class="nx">to</span> <span class="k">then</span> <span class="nx">@range</span><span class="p">.</span><span class="nx">to</span><span class="p">.</span><span class="nx">compile</span><span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="k">else</span> <span class="s1">''</span>
|
<span class="nv">to = </span> <span class="k">if</span> <span class="nx">@range</span><span class="p">.</span><span class="nx">to</span> <span class="k">then</span> <span class="nx">@range</span><span class="p">.</span><span class="nx">to</span><span class="p">.</span><span class="nx">compile</span><span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="k">else</span> <span class="s1">''</span>
|
||||||
<span class="nx">to</span> <span class="o">+=</span> <span class="k">if</span> <span class="o">not</span> <span class="nx">to</span> <span class="o">or</span> <span class="nx">@range</span><span class="p">.</span><span class="nx">exclusive</span> <span class="k">then</span> <span class="s1">''</span> <span class="k">else</span> <span class="s1">' + 1'</span>
|
<span class="nx">to</span> <span class="o">+=</span> <span class="k">if</span> <span class="o">not</span> <span class="nx">to</span> <span class="o">or</span> <span class="nx">@range</span><span class="p">.</span><span class="nx">exclusive</span> <span class="k">then</span> <span class="s1">''</span> <span class="k">else</span> <span class="s1">' + 1'</span>
|
||||||
<span class="nv">to = </span> <span class="s1">', '</span> <span class="o">+</span> <span class="nx">to</span> <span class="k">if</span> <span class="nx">to</span>
|
<span class="nv">to = </span> <span class="s1">', '</span> <span class="o">+</span> <span class="nx">to</span> <span class="k">if</span> <span class="nx">to</span>
|
||||||
<span class="s2">".slice(#{from}#{to})"</span></pre></div> </td> </tr> <tr id="section-68"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-68">#</a> </div> <p>An array slice literal. Unlike JavaScript's <code>Array#slice</code>, the second parameter
|
<span class="s2">".slice(#{from}#{to})"</span></pre></div> </td> </tr> <tr id="section-67"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-67">#</a> </div> <p>An array slice literal. Unlike JavaScript's <code>Array#slice</code>, the second parameter
|
||||||
specifies the index of the end of the slice, just as the first parameter
|
specifies the index of the end of the slice, just as the first parameter
|
||||||
is the index of the beginning.</p> </td> <td class="code"> <div class="highlight"><pre></pre></div> </td> </tr> <tr id="section-69"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-69">#</a> </div> <h3>ObjectNode</h3> </td> <td class="code"> <div class="highlight"><pre><span class="nv">exports.ObjectNode = </span><span class="nx">class</span> <span class="nx">ObjectNode</span> <span class="k">extends</span> <span class="nx">BaseNode</span>
|
is the index of the beginning.</p> </td> <td class="code"> <div class="highlight"><pre></pre></div> </td> </tr> <tr id="section-68"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-68">#</a> </div> <h3>ObjectNode</h3> </td> <td class="code"> <div class="highlight"><pre><span class="nv">exports.ObjectNode = </span><span class="nx">class</span> <span class="nx">ObjectNode</span> <span class="k">extends</span> <span class="nx">BaseNode</span>
|
||||||
|
|
||||||
<span class="nx">class</span><span class="o">:</span> <span class="s1">'ObjectNode'</span>
|
<span class="nx">class</span><span class="o">:</span> <span class="s1">'ObjectNode'</span>
|
||||||
<span class="nx">children</span><span class="o">:</span> <span class="p">[</span><span class="s1">'properties'</span><span class="p">]</span>
|
<span class="nx">children</span><span class="o">:</span> <span class="p">[</span><span class="s1">'properties'</span><span class="p">]</span>
|
||||||
|
@ -486,7 +489,7 @@ is the index of the beginning.</p> </td> <td class="code
|
||||||
<span class="nx">indent</span> <span class="o">+</span> <span class="nx">prop</span><span class="p">.</span><span class="nx">compile</span><span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="o">+</span> <span class="nx">join</span>
|
<span class="nx">indent</span> <span class="o">+</span> <span class="nx">prop</span><span class="p">.</span><span class="nx">compile</span><span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="o">+</span> <span class="nx">join</span>
|
||||||
<span class="nv">props = </span><span class="nx">props</span><span class="p">.</span><span class="nx">join</span><span class="p">(</span><span class="s1">''</span><span class="p">)</span>
|
<span class="nv">props = </span><span class="nx">props</span><span class="p">.</span><span class="nx">join</span><span class="p">(</span><span class="s1">''</span><span class="p">)</span>
|
||||||
<span class="nv">obj = </span><span class="s1">'{'</span> <span class="o">+</span> <span class="p">(</span><span class="k">if</span> <span class="nx">props</span> <span class="k">then</span> <span class="s1">'\n'</span> <span class="o">+</span> <span class="nx">props</span> <span class="o">+</span> <span class="s1">'\n'</span> <span class="o">+</span> <span class="nx">@idt</span><span class="p">()</span> <span class="k">else</span> <span class="s1">''</span><span class="p">)</span> <span class="o">+</span> <span class="s1">'}'</span>
|
<span class="nv">obj = </span><span class="s1">'{'</span> <span class="o">+</span> <span class="p">(</span><span class="k">if</span> <span class="nx">props</span> <span class="k">then</span> <span class="s1">'\n'</span> <span class="o">+</span> <span class="nx">props</span> <span class="o">+</span> <span class="s1">'\n'</span> <span class="o">+</span> <span class="nx">@idt</span><span class="p">()</span> <span class="k">else</span> <span class="s1">''</span><span class="p">)</span> <span class="o">+</span> <span class="s1">'}'</span>
|
||||||
<span class="k">if</span> <span class="nx">top</span> <span class="k">then</span> <span class="s2">"(#{obj})"</span> <span class="k">else</span> <span class="nx">obj</span></pre></div> </td> </tr> <tr id="section-70"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-70">#</a> </div> <p>An object literal, nothing fancy.</p> </td> <td class="code"> <div class="highlight"><pre></pre></div> </td> </tr> <tr id="section-71"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-71">#</a> </div> <h3>ArrayNode</h3> </td> <td class="code"> <div class="highlight"><pre><span class="nv">exports.ArrayNode = </span><span class="nx">class</span> <span class="nx">ArrayNode</span> <span class="k">extends</span> <span class="nx">BaseNode</span>
|
<span class="k">if</span> <span class="nx">top</span> <span class="k">then</span> <span class="s2">"(#{obj})"</span> <span class="k">else</span> <span class="nx">obj</span></pre></div> </td> </tr> <tr id="section-69"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-69">#</a> </div> <p>An object literal, nothing fancy.</p> </td> <td class="code"> <div class="highlight"><pre></pre></div> </td> </tr> <tr id="section-70"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-70">#</a> </div> <h3>ArrayNode</h3> </td> <td class="code"> <div class="highlight"><pre><span class="nv">exports.ArrayNode = </span><span class="nx">class</span> <span class="nx">ArrayNode</span> <span class="k">extends</span> <span class="nx">BaseNode</span>
|
||||||
|
|
||||||
<span class="nx">class</span><span class="o">:</span> <span class="s1">'ArrayNode'</span>
|
<span class="nx">class</span><span class="o">:</span> <span class="s1">'ArrayNode'</span>
|
||||||
<span class="nx">children</span><span class="o">:</span> <span class="p">[</span><span class="s1">'objects'</span><span class="p">]</span>
|
<span class="nx">children</span><span class="o">:</span> <span class="p">[</span><span class="s1">'objects'</span><span class="p">]</span>
|
||||||
|
@ -514,20 +517,20 @@ is the index of the beginning.</p> </td> <td class="code
|
||||||
<span class="k">if</span> <span class="nx">indexOf</span><span class="p">(</span><span class="nx">objects</span><span class="p">,</span> <span class="s1">'\n'</span><span class="p">)</span> <span class="o">>=</span> <span class="mi">0</span>
|
<span class="k">if</span> <span class="nx">indexOf</span><span class="p">(</span><span class="nx">objects</span><span class="p">,</span> <span class="s1">'\n'</span><span class="p">)</span> <span class="o">>=</span> <span class="mi">0</span>
|
||||||
<span class="s2">"[\n#{@idt(1)}#{objects}\n#{@tab}]"</span>
|
<span class="s2">"[\n#{@idt(1)}#{objects}\n#{@tab}]"</span>
|
||||||
<span class="k">else</span>
|
<span class="k">else</span>
|
||||||
<span class="s2">"[#{objects}]"</span></pre></div> </td> </tr> <tr id="section-72"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-72">#</a> </div> <p>An array literal.</p> </td> <td class="code"> <div class="highlight"><pre></pre></div> </td> </tr> <tr id="section-73"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-73">#</a> </div> <h3>ClassNode</h3> </td> <td class="code"> <div class="highlight"><pre><span class="nv">exports.ClassNode = </span><span class="nx">class</span> <span class="nx">ClassNode</span> <span class="k">extends</span> <span class="nx">BaseNode</span>
|
<span class="s2">"[#{objects}]"</span></pre></div> </td> </tr> <tr id="section-71"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-71">#</a> </div> <p>An array literal.</p> </td> <td class="code"> <div class="highlight"><pre></pre></div> </td> </tr> <tr id="section-72"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-72">#</a> </div> <h3>ClassNode</h3> </td> <td class="code"> <div class="highlight"><pre><span class="nv">exports.ClassNode = </span><span class="nx">class</span> <span class="nx">ClassNode</span> <span class="k">extends</span> <span class="nx">BaseNode</span>
|
||||||
|
|
||||||
<span class="nx">class</span><span class="o">:</span> <span class="s1">'ClassNode'</span>
|
<span class="nx">class</span><span class="o">:</span> <span class="s1">'ClassNode'</span>
|
||||||
<span class="nx">children</span><span class="o">:</span> <span class="p">[</span><span class="s1">'variable'</span><span class="p">,</span> <span class="s1">'parent'</span><span class="p">,</span> <span class="s1">'properties'</span><span class="p">]</span>
|
<span class="nx">children</span><span class="o">:</span> <span class="p">[</span><span class="s1">'variable'</span><span class="p">,</span> <span class="s1">'parent'</span><span class="p">,</span> <span class="s1">'properties'</span><span class="p">]</span>
|
||||||
<span class="nx">isStatement</span><span class="o">:</span> <span class="o">-></span> <span class="kc">yes</span></pre></div> </td> </tr> <tr id="section-74"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-74">#</a> </div> <p>The CoffeeScript class definition.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">constructor</span><span class="o">:</span> <span class="p">(</span><span class="nx">@variable</span><span class="p">,</span> <span class="nx">@parent</span><span class="p">,</span> <span class="nx">@properties</span><span class="p">)</span> <span class="o">-></span>
|
<span class="nx">isStatement</span><span class="o">:</span> <span class="o">-></span> <span class="kc">yes</span></pre></div> </td> </tr> <tr id="section-73"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-73">#</a> </div> <p>The CoffeeScript class definition.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">constructor</span><span class="o">:</span> <span class="p">(</span><span class="nx">@variable</span><span class="p">,</span> <span class="nx">@parent</span><span class="p">,</span> <span class="nx">@properties</span><span class="p">)</span> <span class="o">-></span>
|
||||||
<span class="k">super</span><span class="p">()</span>
|
<span class="k">super</span><span class="p">()</span>
|
||||||
<span class="nx">@properties</span> <span class="o">or=</span> <span class="p">[]</span>
|
<span class="nx">@properties</span> <span class="o">or=</span> <span class="p">[]</span>
|
||||||
<span class="vi">@returns = </span><span class="kc">false</span>
|
<span class="vi">@returns = </span><span class="kc">false</span>
|
||||||
|
|
||||||
<span class="nx">makeReturn</span><span class="o">:</span> <span class="o">-></span>
|
<span class="nx">makeReturn</span><span class="o">:</span> <span class="o">-></span>
|
||||||
<span class="vi">@returns = </span><span class="kc">true</span>
|
<span class="vi">@returns = </span><span class="kc">true</span>
|
||||||
<span class="k">this</span></pre></div> </td> </tr> <tr id="section-75"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-75">#</a> </div> <p>Initialize a <strong>ClassNode</strong> with its name, an optional superclass, and a
|
<span class="k">this</span></pre></div> </td> </tr> <tr id="section-74"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-74">#</a> </div> <p>Initialize a <strong>ClassNode</strong> with its name, an optional superclass, and a
|
||||||
list of prototype property assignments.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">compileNode</span><span class="o">:</span> <span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="o">-></span>
|
list of prototype property assignments.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">compileNode</span><span class="o">:</span> <span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="o">-></span>
|
||||||
<span class="vi">@variable = </span><span class="nx">literal</span> <span class="nx">o</span><span class="p">.</span><span class="nx">scope</span><span class="p">.</span><span class="nx">freeVariable</span><span class="p">()</span> <span class="k">if</span> <span class="nx">@variable</span> <span class="o">is</span> <span class="s1">'__temp__'</span>
|
<span class="vi">@variable = </span><span class="nx">literal</span> <span class="nx">o</span><span class="p">.</span><span class="nx">scope</span><span class="p">.</span><span class="nx">freeVariable</span> <span class="s1">'ctor'</span> <span class="k">if</span> <span class="nx">@variable</span> <span class="o">is</span> <span class="s1">'__temp__'</span>
|
||||||
<span class="nv">extension = </span><span class="nx">@parent</span> <span class="o">and</span> <span class="k">new</span> <span class="nx">ExtendsNode</span><span class="p">(</span><span class="nx">@variable</span><span class="p">,</span> <span class="nx">@parent</span><span class="p">)</span>
|
<span class="nv">extension = </span><span class="nx">@parent</span> <span class="o">and</span> <span class="k">new</span> <span class="nx">ExtendsNode</span><span class="p">(</span><span class="nx">@variable</span><span class="p">,</span> <span class="nx">@parent</span><span class="p">)</span>
|
||||||
<span class="nv">props = </span><span class="k">new</span> <span class="nx">Expressions</span>
|
<span class="nv">props = </span><span class="k">new</span> <span class="nx">Expressions</span>
|
||||||
<span class="nv">o.top = </span><span class="kc">true</span>
|
<span class="nv">o.top = </span><span class="kc">true</span>
|
||||||
|
@ -559,7 +562,7 @@ list of prototype property assignments.</p> </td> <td cl
|
||||||
<span class="k">else</span>
|
<span class="k">else</span>
|
||||||
<span class="nv">func.bound = </span><span class="kc">false</span>
|
<span class="nv">func.bound = </span><span class="kc">false</span>
|
||||||
<span class="nx">constScope</span> <span class="o">or=</span> <span class="k">new</span> <span class="nx">Scope</span><span class="p">(</span><span class="nx">o</span><span class="p">.</span><span class="nx">scope</span><span class="p">,</span> <span class="nx">constructor</span><span class="p">.</span><span class="nx">body</span><span class="p">,</span> <span class="nx">constructor</span><span class="p">)</span>
|
<span class="nx">constScope</span> <span class="o">or=</span> <span class="k">new</span> <span class="nx">Scope</span><span class="p">(</span><span class="nx">o</span><span class="p">.</span><span class="nx">scope</span><span class="p">,</span> <span class="nx">constructor</span><span class="p">.</span><span class="nx">body</span><span class="p">,</span> <span class="nx">constructor</span><span class="p">)</span>
|
||||||
<span class="nx">me</span> <span class="o">or=</span> <span class="nx">constScope</span><span class="p">.</span><span class="nx">freeVariable</span><span class="p">()</span>
|
<span class="nx">me</span> <span class="o">or=</span> <span class="nx">constScope</span><span class="p">.</span><span class="nx">freeVariable</span> <span class="s1">'this'</span>
|
||||||
<span class="nv">pname = </span><span class="nx">pvar</span><span class="p">.</span><span class="nx">compile</span><span class="p">(</span><span class="nx">o</span><span class="p">)</span>
|
<span class="nv">pname = </span><span class="nx">pvar</span><span class="p">.</span><span class="nx">compile</span><span class="p">(</span><span class="nx">o</span><span class="p">)</span>
|
||||||
<span class="nx">constructor</span><span class="p">.</span><span class="nx">body</span><span class="p">.</span><span class="nx">push</span> <span class="k">new</span> <span class="nx">ReturnNode</span> <span class="nx">literal</span> <span class="s1">'this'</span> <span class="k">if</span> <span class="nx">constructor</span><span class="p">.</span><span class="nx">body</span><span class="p">.</span><span class="nx">empty</span><span class="p">()</span>
|
<span class="nx">constructor</span><span class="p">.</span><span class="nx">body</span><span class="p">.</span><span class="nx">push</span> <span class="k">new</span> <span class="nx">ReturnNode</span> <span class="nx">literal</span> <span class="s1">'this'</span> <span class="k">if</span> <span class="nx">constructor</span><span class="p">.</span><span class="nx">body</span><span class="p">.</span><span class="nx">empty</span><span class="p">()</span>
|
||||||
<span class="nx">constructor</span><span class="p">.</span><span class="nx">body</span><span class="p">.</span><span class="nx">unshift</span> <span class="nx">literal</span> <span class="s2">"this.#{pname} = function(){ return #{className}.prototype.#{pname}.apply(#{me}, arguments); }"</span>
|
<span class="nx">constructor</span><span class="p">.</span><span class="nx">body</span><span class="p">.</span><span class="nx">unshift</span> <span class="nx">literal</span> <span class="s2">"this.#{pname} = function(){ return #{className}.prototype.#{pname}.apply(#{me}, arguments); }"</span>
|
||||||
|
@ -574,9 +577,9 @@ list of prototype property assignments.</p> </td> <td cl
|
||||||
<span class="nv">props = </span><span class="k">if</span> <span class="o">!</span><span class="nx">props</span><span class="p">.</span><span class="nx">empty</span><span class="p">()</span> <span class="k">then</span> <span class="s1">'\n'</span> <span class="o">+</span> <span class="nx">props</span><span class="p">.</span><span class="nx">compile</span><span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="k">else</span> <span class="s1">''</span>
|
<span class="nv">props = </span><span class="k">if</span> <span class="o">!</span><span class="nx">props</span><span class="p">.</span><span class="nx">empty</span><span class="p">()</span> <span class="k">then</span> <span class="s1">'\n'</span> <span class="o">+</span> <span class="nx">props</span><span class="p">.</span><span class="nx">compile</span><span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="k">else</span> <span class="s1">''</span>
|
||||||
<span class="nv">extension = </span><span class="k">if</span> <span class="nx">extension</span> <span class="k">then</span> <span class="s1">'\n'</span> <span class="o">+</span> <span class="nx">@idt</span><span class="p">()</span> <span class="o">+</span> <span class="nx">extension</span><span class="p">.</span><span class="nx">compile</span><span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="o">+</span> <span class="s1">';'</span> <span class="k">else</span> <span class="s1">''</span>
|
<span class="nv">extension = </span><span class="k">if</span> <span class="nx">extension</span> <span class="k">then</span> <span class="s1">'\n'</span> <span class="o">+</span> <span class="nx">@idt</span><span class="p">()</span> <span class="o">+</span> <span class="nx">extension</span><span class="p">.</span><span class="nx">compile</span><span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="o">+</span> <span class="s1">';'</span> <span class="k">else</span> <span class="s1">''</span>
|
||||||
<span class="nv">returns = </span><span class="k">if</span> <span class="nx">@returns</span> <span class="k">then</span> <span class="s1">'\n'</span> <span class="o">+</span> <span class="k">new</span> <span class="nx">ReturnNode</span><span class="p">(</span><span class="nx">@variable</span><span class="p">).</span><span class="nx">compile</span><span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="k">else</span> <span class="s1">''</span>
|
<span class="nv">returns = </span><span class="k">if</span> <span class="nx">@returns</span> <span class="k">then</span> <span class="s1">'\n'</span> <span class="o">+</span> <span class="k">new</span> <span class="nx">ReturnNode</span><span class="p">(</span><span class="nx">@variable</span><span class="p">).</span><span class="nx">compile</span><span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="k">else</span> <span class="s1">''</span>
|
||||||
<span class="nx">construct</span> <span class="o">+</span> <span class="nx">extension</span> <span class="o">+</span> <span class="nx">props</span> <span class="o">+</span> <span class="nx">returns</span></pre></div> </td> </tr> <tr id="section-76"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-76">#</a> </div> <p>Instead of generating the JavaScript string directly, we build up the
|
<span class="nx">construct</span> <span class="o">+</span> <span class="nx">extension</span> <span class="o">+</span> <span class="nx">props</span> <span class="o">+</span> <span class="nx">returns</span></pre></div> </td> </tr> <tr id="section-75"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-75">#</a> </div> <p>Instead of generating the JavaScript string directly, we build up the
|
||||||
equivalent syntax tree and compile that, in pieces. You can see the
|
equivalent syntax tree and compile that, in pieces. You can see the
|
||||||
constructor, property assignments, and inheritance getting built out below.</p> </td> <td class="code"> <div class="highlight"><pre></pre></div> </td> </tr> <tr id="section-77"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-77">#</a> </div> <h3>AssignNode</h3> </td> <td class="code"> <div class="highlight"><pre><span class="nv">exports.AssignNode = </span><span class="nx">class</span> <span class="nx">AssignNode</span> <span class="k">extends</span> <span class="nx">BaseNode</span></pre></div> </td> </tr> <tr id="section-78"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-78">#</a> </div> <p>The <strong>AssignNode</strong> is used to assign a local variable to value, or to set the
|
constructor, property assignments, and inheritance getting built out below.</p> </td> <td class="code"> <div class="highlight"><pre></pre></div> </td> </tr> <tr id="section-76"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-76">#</a> </div> <h3>AssignNode</h3> </td> <td class="code"> <div class="highlight"><pre><span class="nv">exports.AssignNode = </span><span class="nx">class</span> <span class="nx">AssignNode</span> <span class="k">extends</span> <span class="nx">BaseNode</span></pre></div> </td> </tr> <tr id="section-77"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-77">#</a> </div> <p>The <strong>AssignNode</strong> is used to assign a local variable to value, or to set the
|
||||||
property of an object -- including within object literals.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">PROTO_ASSIGN</span><span class="o">:</span> <span class="sr">/^(\S+)\.prototype/</span>
|
property of an object -- including within object literals.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">PROTO_ASSIGN</span><span class="o">:</span> <span class="sr">/^(\S+)\.prototype/</span>
|
||||||
<span class="nx">LEADING_DOT</span><span class="o">:</span> <span class="sr">/^\.(prototype\.)?/</span>
|
<span class="nx">LEADING_DOT</span><span class="o">:</span> <span class="sr">/^\.(prototype\.)?/</span>
|
||||||
|
|
||||||
|
@ -599,7 +602,7 @@ property of an object -- including within object literals.</p> </td>
|
||||||
<span class="k">super</span><span class="p">()</span>
|
<span class="k">super</span><span class="p">()</span>
|
||||||
|
|
||||||
<span class="nx">isStatement</span><span class="o">:</span> <span class="o">-></span>
|
<span class="nx">isStatement</span><span class="o">:</span> <span class="o">-></span>
|
||||||
<span class="nx">@isValue</span><span class="p">()</span> <span class="o">and</span> <span class="p">(</span><span class="nx">@variable</span><span class="p">.</span><span class="nx">isArray</span><span class="p">()</span> <span class="o">or</span> <span class="nx">@variable</span><span class="p">.</span><span class="nx">isObject</span><span class="p">())</span></pre></div> </td> </tr> <tr id="section-79"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-79">#</a> </div> <p>Matchers for detecting prototype assignments.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">compileNode</span><span class="o">:</span> <span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="o">-></span>
|
<span class="nx">@isValue</span><span class="p">()</span> <span class="o">and</span> <span class="p">(</span><span class="nx">@variable</span><span class="p">.</span><span class="nx">isArray</span><span class="p">()</span> <span class="o">or</span> <span class="nx">@variable</span><span class="p">.</span><span class="nx">isObject</span><span class="p">())</span></pre></div> </td> </tr> <tr id="section-78"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-78">#</a> </div> <p>Matchers for detecting prototype assignments.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">compileNode</span><span class="o">:</span> <span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="o">-></span>
|
||||||
<span class="nv">top = </span><span class="nx">del</span> <span class="nx">o</span><span class="p">,</span> <span class="s1">'top'</span>
|
<span class="nv">top = </span><span class="nx">del</span> <span class="nx">o</span><span class="p">,</span> <span class="s1">'top'</span>
|
||||||
<span class="k">return</span> <span class="nx">@compilePatternMatch</span><span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="k">if</span> <span class="nx">@isStatement</span><span class="p">(</span><span class="nx">o</span><span class="p">)</span>
|
<span class="k">return</span> <span class="nx">@compilePatternMatch</span><span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="k">if</span> <span class="nx">@isStatement</span><span class="p">(</span><span class="nx">o</span><span class="p">)</span>
|
||||||
<span class="k">return</span> <span class="nx">@compileSplice</span><span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="k">if</span> <span class="nx">@isValue</span><span class="p">()</span> <span class="o">and</span> <span class="nx">@variable</span><span class="p">.</span><span class="nx">isSplice</span><span class="p">()</span>
|
<span class="k">return</span> <span class="nx">@compileSplice</span><span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="k">if</span> <span class="nx">@isValue</span><span class="p">()</span> <span class="o">and</span> <span class="nx">@variable</span><span class="p">.</span><span class="nx">isSplice</span><span class="p">()</span>
|
||||||
|
@ -616,23 +619,23 @@ property of an object -- including within object literals.</p> </td>
|
||||||
<span class="nx">o</span><span class="p">.</span><span class="nx">scope</span><span class="p">.</span><span class="nx">find</span> <span class="nx">name</span> <span class="nx">unless</span> <span class="nx">@isValue</span><span class="p">()</span> <span class="o">and</span> <span class="p">(</span><span class="nx">@variable</span><span class="p">.</span><span class="nx">hasProperties</span><span class="p">()</span> <span class="o">or</span> <span class="nx">@variable</span><span class="p">.</span><span class="nx">namespaced</span><span class="p">)</span>
|
<span class="nx">o</span><span class="p">.</span><span class="nx">scope</span><span class="p">.</span><span class="nx">find</span> <span class="nx">name</span> <span class="nx">unless</span> <span class="nx">@isValue</span><span class="p">()</span> <span class="o">and</span> <span class="p">(</span><span class="nx">@variable</span><span class="p">.</span><span class="nx">hasProperties</span><span class="p">()</span> <span class="o">or</span> <span class="nx">@variable</span><span class="p">.</span><span class="nx">namespaced</span><span class="p">)</span>
|
||||||
<span class="nv">val = </span><span class="s2">"#{name} = #{val}"</span>
|
<span class="nv">val = </span><span class="s2">"#{name} = #{val}"</span>
|
||||||
<span class="k">return</span> <span class="s2">"#{@tab}#{val};"</span> <span class="k">if</span> <span class="nx">stmt</span>
|
<span class="k">return</span> <span class="s2">"#{@tab}#{val};"</span> <span class="k">if</span> <span class="nx">stmt</span>
|
||||||
<span class="k">if</span> <span class="nx">top</span> <span class="o">or</span> <span class="nx">@parenthetical</span> <span class="k">then</span> <span class="nx">val</span> <span class="k">else</span> <span class="s2">"(#{val})"</span></pre></div> </td> </tr> <tr id="section-80"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-80">#</a> </div> <p>Compile an assignment, delegating to <code>compilePatternMatch</code> or
|
<span class="k">if</span> <span class="nx">top</span> <span class="o">or</span> <span class="nx">@parenthetical</span> <span class="k">then</span> <span class="nx">val</span> <span class="k">else</span> <span class="s2">"(#{val})"</span></pre></div> </td> </tr> <tr id="section-79"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-79">#</a> </div> <p>Compile an assignment, delegating to <code>compilePatternMatch</code> or
|
||||||
<code>compileSplice</code> if appropriate. Keep track of the name of the base object
|
<code>compileSplice</code> if appropriate. Keep track of the name of the base object
|
||||||
we've been assigned to, for correct internal references. If the variable
|
we've been assigned to, for correct internal references. If the variable
|
||||||
has not been seen yet within the current scope, declare it.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">compilePatternMatch</span><span class="o">:</span> <span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="o">-></span>
|
has not been seen yet within the current scope, declare it.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">compilePatternMatch</span><span class="o">:</span> <span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="o">-></span>
|
||||||
<span class="nv">valVar = </span><span class="nx">o</span><span class="p">.</span><span class="nx">scope</span><span class="p">.</span><span class="nx">freeVariable</span><span class="p">()</span>
|
<span class="nv">valVar = </span><span class="nx">o</span><span class="p">.</span><span class="nx">scope</span><span class="p">.</span><span class="nx">freeVariable</span> <span class="s1">'ref'</span>
|
||||||
<span class="nv">value = </span><span class="k">if</span> <span class="nx">@value</span><span class="p">.</span><span class="nx">isStatement</span><span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="k">then</span> <span class="nx">ClosureNode</span><span class="p">.</span><span class="nx">wrap</span><span class="p">(</span><span class="nx">@value</span><span class="p">)</span> <span class="k">else</span> <span class="nx">@value</span>
|
<span class="nv">value = </span><span class="k">if</span> <span class="nx">@value</span><span class="p">.</span><span class="nx">isStatement</span><span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="k">then</span> <span class="nx">ClosureNode</span><span class="p">.</span><span class="nx">wrap</span><span class="p">(</span><span class="nx">@value</span><span class="p">)</span> <span class="k">else</span> <span class="nx">@value</span>
|
||||||
<span class="nv">assigns = </span><span class="p">[</span><span class="s2">"#{@tab}#{valVar} = #{ value.compile(o) };"</span><span class="p">]</span>
|
<span class="nv">assigns = </span><span class="p">[</span><span class="s2">"#{@tab}#{valVar} = #{ value.compile(o) };"</span><span class="p">]</span>
|
||||||
<span class="nv">o.top = </span><span class="kc">true</span>
|
<span class="nv">o.top = </span><span class="kc">true</span>
|
||||||
<span class="nv">o.asStatement = </span><span class="kc">true</span>
|
<span class="nv">o.asStatement = </span><span class="kc">true</span>
|
||||||
<span class="nv">splat = </span><span class="kc">false</span>
|
<span class="nv">splat = </span><span class="kc">false</span>
|
||||||
<span class="k">for</span> <span class="nx">obj</span><span class="p">,</span> <span class="nx">i</span> <span class="k">in</span> <span class="nx">@variable</span><span class="p">.</span><span class="nx">base</span><span class="p">.</span><span class="nx">objects</span></pre></div> </td> </tr> <tr id="section-81"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-81">#</a> </div> <p>Brief implementation of recursive pattern matching, when assigning array or
|
<span class="k">for</span> <span class="nx">obj</span><span class="p">,</span> <span class="nx">i</span> <span class="k">in</span> <span class="nx">@variable</span><span class="p">.</span><span class="nx">base</span><span class="p">.</span><span class="nx">objects</span></pre></div> </td> </tr> <tr id="section-80"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-80">#</a> </div> <p>Brief implementation of recursive pattern matching, when assigning array or
|
||||||
object literals to a value. Peeks at their properties to assign inner names.
|
object literals to a value. Peeks at their properties to assign inner names.
|
||||||
See the <a href="http://wiki.ecmascript.org/doku.php?id=harmony:destructuring">ECMAScript Harmony Wiki</a>
|
See the <a href="http://wiki.ecmascript.org/doku.php?id=harmony:destructuring">ECMAScript Harmony Wiki</a>
|
||||||
for details.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nv">idx = </span><span class="nx">i</span>
|
for details.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nv">idx = </span><span class="nx">i</span>
|
||||||
<span class="k">if</span> <span class="nx">@variable</span><span class="p">.</span><span class="nx">isObject</span><span class="p">()</span>
|
<span class="k">if</span> <span class="nx">@variable</span><span class="p">.</span><span class="nx">isObject</span><span class="p">()</span>
|
||||||
<span class="k">if</span> <span class="nx">obj</span> <span class="k">instanceof</span> <span class="nx">AssignNode</span></pre></div> </td> </tr> <tr id="section-82"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-82">#</a> </div> <p>A regular array pattern-match.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="p">[</span><span class="nx">obj</span><span class="p">,</span> <span class="nx">idx</span><span class="p">]</span> <span class="o">=</span> <span class="p">[</span><span class="nx">obj</span><span class="p">.</span><span class="nx">value</span><span class="p">,</span> <span class="nx">obj</span><span class="p">.</span><span class="nx">variable</span><span class="p">.</span><span class="nx">base</span><span class="p">]</span>
|
<span class="k">if</span> <span class="nx">obj</span> <span class="k">instanceof</span> <span class="nx">AssignNode</span></pre></div> </td> </tr> <tr id="section-81"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-81">#</a> </div> <p>A regular array pattern-match.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="p">[</span><span class="nx">obj</span><span class="p">,</span> <span class="nx">idx</span><span class="p">]</span> <span class="o">=</span> <span class="p">[</span><span class="nx">obj</span><span class="p">.</span><span class="nx">value</span><span class="p">,</span> <span class="nx">obj</span><span class="p">.</span><span class="nx">variable</span><span class="p">.</span><span class="nx">base</span><span class="p">]</span>
|
||||||
<span class="k">else</span></pre></div> </td> </tr> <tr id="section-83"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-83">#</a> </div> <p>A regular object pattern-match.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nv">idx = </span><span class="nx">obj</span>
|
<span class="k">else</span></pre></div> </td> </tr> <tr id="section-82"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-82">#</a> </div> <p>A regular object pattern-match.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nv">idx = </span><span class="nx">obj</span>
|
||||||
<span class="k">if</span> <span class="o">not</span> <span class="p">(</span><span class="nx">obj</span> <span class="k">instanceof</span> <span class="nx">ValueNode</span> <span class="o">or</span> <span class="nx">obj</span> <span class="k">instanceof</span> <span class="nx">SplatNode</span><span class="p">)</span>
|
<span class="k">if</span> <span class="o">not</span> <span class="p">(</span><span class="nx">obj</span> <span class="k">instanceof</span> <span class="nx">ValueNode</span> <span class="o">or</span> <span class="nx">obj</span> <span class="k">instanceof</span> <span class="nx">SplatNode</span><span class="p">)</span>
|
||||||
<span class="k">throw</span> <span class="k">new</span> <span class="nb">Error</span> <span class="s1">'pattern matching must use only identifiers on the left-hand side.'</span>
|
<span class="k">throw</span> <span class="k">new</span> <span class="nb">Error</span> <span class="s1">'pattern matching must use only identifiers on the left-hand side.'</span>
|
||||||
<span class="nv">isString = </span><span class="nx">idx</span><span class="p">.</span><span class="nx">value</span> <span class="o">and</span> <span class="nx">idx</span><span class="p">.</span><span class="nx">value</span><span class="p">.</span><span class="nx">match</span> <span class="nx">IS_STRING</span>
|
<span class="nv">isString = </span><span class="nx">idx</span><span class="p">.</span><span class="nx">value</span> <span class="o">and</span> <span class="nx">idx</span><span class="p">.</span><span class="nx">value</span><span class="p">.</span><span class="nx">match</span> <span class="nx">IS_STRING</span>
|
||||||
|
@ -647,7 +650,7 @@ for details.</p> </td> <td class="code"> <
|
||||||
<span class="nv">val = </span><span class="k">new</span> <span class="nx">ValueNode</span><span class="p">(</span><span class="nx">literal</span><span class="p">(</span><span class="nx">valVar</span><span class="p">),</span> <span class="p">[</span><span class="k">new</span> <span class="nx">accessClass</span><span class="p">(</span><span class="nx">idx</span><span class="p">)])</span>
|
<span class="nv">val = </span><span class="k">new</span> <span class="nx">ValueNode</span><span class="p">(</span><span class="nx">literal</span><span class="p">(</span><span class="nx">valVar</span><span class="p">),</span> <span class="p">[</span><span class="k">new</span> <span class="nx">accessClass</span><span class="p">(</span><span class="nx">idx</span><span class="p">)])</span>
|
||||||
<span class="nx">assigns</span><span class="p">.</span><span class="nx">push</span><span class="p">(</span><span class="k">new</span> <span class="nx">AssignNode</span><span class="p">(</span><span class="nx">obj</span><span class="p">,</span> <span class="nx">val</span><span class="p">).</span><span class="nx">compile</span><span class="p">(</span><span class="nx">o</span><span class="p">))</span>
|
<span class="nx">assigns</span><span class="p">.</span><span class="nx">push</span><span class="p">(</span><span class="k">new</span> <span class="nx">AssignNode</span><span class="p">(</span><span class="nx">obj</span><span class="p">,</span> <span class="nx">val</span><span class="p">).</span><span class="nx">compile</span><span class="p">(</span><span class="nx">o</span><span class="p">))</span>
|
||||||
<span class="nv">code = </span><span class="nx">assigns</span><span class="p">.</span><span class="nx">join</span><span class="p">(</span><span class="s2">"\n"</span><span class="p">)</span>
|
<span class="nv">code = </span><span class="nx">assigns</span><span class="p">.</span><span class="nx">join</span><span class="p">(</span><span class="s2">"\n"</span><span class="p">)</span>
|
||||||
<span class="nx">code</span></pre></div> </td> </tr> <tr id="section-84"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-84">#</a> </div> <p>A shorthand <code>{a, b, c} = val</code> pattern-match.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">compileSplice</span><span class="o">:</span> <span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="o">-></span>
|
<span class="nx">code</span></pre></div> </td> </tr> <tr id="section-83"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-83">#</a> </div> <p>A shorthand <code>{a, b, c} = val</code> pattern-match.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">compileSplice</span><span class="o">:</span> <span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="o">-></span>
|
||||||
<span class="nv">name = </span><span class="nx">@variable</span><span class="p">.</span><span class="nx">compile</span> <span class="nx">merge</span> <span class="nx">o</span><span class="p">,</span> <span class="nx">onlyFirst</span><span class="o">:</span> <span class="kc">true</span>
|
<span class="nv">name = </span><span class="nx">@variable</span><span class="p">.</span><span class="nx">compile</span> <span class="nx">merge</span> <span class="nx">o</span><span class="p">,</span> <span class="nx">onlyFirst</span><span class="o">:</span> <span class="kc">true</span>
|
||||||
<span class="nv">l = </span><span class="nx">@variable</span><span class="p">.</span><span class="nx">properties</span><span class="p">.</span><span class="nx">length</span>
|
<span class="nv">l = </span><span class="nx">@variable</span><span class="p">.</span><span class="nx">properties</span><span class="p">.</span><span class="nx">length</span>
|
||||||
<span class="nv">range = </span><span class="nx">@variable</span><span class="p">.</span><span class="nx">properties</span><span class="p">[</span><span class="nx">l</span> <span class="o">-</span> <span class="mi">1</span><span class="p">].</span><span class="nx">range</span>
|
<span class="nv">range = </span><span class="nx">@variable</span><span class="p">.</span><span class="nx">properties</span><span class="p">[</span><span class="nx">l</span> <span class="o">-</span> <span class="mi">1</span><span class="p">].</span><span class="nx">range</span>
|
||||||
|
@ -655,8 +658,8 @@ for details.</p> </td> <td class="code"> <
|
||||||
<span class="nv">from = </span><span class="k">if</span> <span class="nx">range</span><span class="p">.</span><span class="nx">from</span> <span class="k">then</span> <span class="nx">range</span><span class="p">.</span><span class="nx">from</span><span class="p">.</span><span class="nx">compile</span><span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="k">else</span> <span class="s1">'0'</span>
|
<span class="nv">from = </span><span class="k">if</span> <span class="nx">range</span><span class="p">.</span><span class="nx">from</span> <span class="k">then</span> <span class="nx">range</span><span class="p">.</span><span class="nx">from</span><span class="p">.</span><span class="nx">compile</span><span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="k">else</span> <span class="s1">'0'</span>
|
||||||
<span class="nv">to = </span><span class="k">if</span> <span class="nx">range</span><span class="p">.</span><span class="nx">to</span> <span class="k">then</span> <span class="nx">range</span><span class="p">.</span><span class="nx">to</span><span class="p">.</span><span class="nx">compile</span><span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="o">+</span> <span class="s1">' - '</span> <span class="o">+</span> <span class="nx">from</span> <span class="o">+</span> <span class="nx">plus</span> <span class="k">else</span> <span class="s2">"#{name}.length"</span>
|
<span class="nv">to = </span><span class="k">if</span> <span class="nx">range</span><span class="p">.</span><span class="nx">to</span> <span class="k">then</span> <span class="nx">range</span><span class="p">.</span><span class="nx">to</span><span class="p">.</span><span class="nx">compile</span><span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="o">+</span> <span class="s1">' - '</span> <span class="o">+</span> <span class="nx">from</span> <span class="o">+</span> <span class="nx">plus</span> <span class="k">else</span> <span class="s2">"#{name}.length"</span>
|
||||||
<span class="nv">val = </span><span class="nx">@value</span><span class="p">.</span><span class="nx">compile</span><span class="p">(</span><span class="nx">o</span><span class="p">)</span>
|
<span class="nv">val = </span><span class="nx">@value</span><span class="p">.</span><span class="nx">compile</span><span class="p">(</span><span class="nx">o</span><span class="p">)</span>
|
||||||
<span class="s2">"#{name}.splice.apply(#{name}, [#{from}, #{to}].concat(#{val}))"</span></pre></div> </td> </tr> <tr id="section-85"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-85">#</a> </div> <p>Compile the assignment from an array splice literal, using JavaScript's
|
<span class="s2">"#{name}.splice.apply(#{name}, [#{from}, #{to}].concat(#{val}))"</span></pre></div> </td> </tr> <tr id="section-84"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-84">#</a> </div> <p>Compile the assignment from an array splice literal, using JavaScript's
|
||||||
<code>Array#splice</code> method.</p> </td> <td class="code"> <div class="highlight"><pre></pre></div> </td> </tr> <tr id="section-86"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-86">#</a> </div> <h3>CodeNode</h3> </td> <td class="code"> <div class="highlight"><pre><span class="nv">exports.CodeNode = </span><span class="nx">class</span> <span class="nx">CodeNode</span> <span class="k">extends</span> <span class="nx">BaseNode</span>
|
<code>Array#splice</code> method.</p> </td> <td class="code"> <div class="highlight"><pre></pre></div> </td> </tr> <tr id="section-85"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-85">#</a> </div> <h3>CodeNode</h3> </td> <td class="code"> <div class="highlight"><pre><span class="nv">exports.CodeNode = </span><span class="nx">class</span> <span class="nx">CodeNode</span> <span class="k">extends</span> <span class="nx">BaseNode</span>
|
||||||
|
|
||||||
<span class="nx">class</span><span class="o">:</span> <span class="s1">'CodeNode'</span>
|
<span class="nx">class</span><span class="o">:</span> <span class="s1">'CodeNode'</span>
|
||||||
<span class="nx">children</span><span class="o">:</span> <span class="p">[</span><span class="s1">'params'</span><span class="p">,</span> <span class="s1">'body'</span><span class="p">]</span>
|
<span class="nx">children</span><span class="o">:</span> <span class="p">[</span><span class="s1">'params'</span><span class="p">,</span> <span class="s1">'body'</span><span class="p">]</span>
|
||||||
|
@ -666,7 +669,7 @@ for details.</p> </td> <td class="code"> <
|
||||||
<span class="nx">@params</span> <span class="o">or=</span> <span class="p">[]</span>
|
<span class="nx">@params</span> <span class="o">or=</span> <span class="p">[]</span>
|
||||||
<span class="nx">@body</span> <span class="o">or=</span> <span class="k">new</span> <span class="nx">Expressions</span>
|
<span class="nx">@body</span> <span class="o">or=</span> <span class="k">new</span> <span class="nx">Expressions</span>
|
||||||
<span class="vi">@bound = </span><span class="nx">tag</span> <span class="o">is</span> <span class="s1">'boundfunc'</span>
|
<span class="vi">@bound = </span><span class="nx">tag</span> <span class="o">is</span> <span class="s1">'boundfunc'</span>
|
||||||
<span class="vi">@context = </span><span class="s1">'this'</span> <span class="k">if</span> <span class="nx">@bound</span></pre></div> </td> </tr> <tr id="section-87"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-87">#</a> </div> <p>A function definition. This is the only node that creates a new Scope.
|
<span class="vi">@context = </span><span class="s1">'this'</span> <span class="k">if</span> <span class="nx">@bound</span></pre></div> </td> </tr> <tr id="section-86"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-86">#</a> </div> <p>A function definition. This is the only node that creates a new Scope.
|
||||||
When for the purposes of walking the contents of a function body, the CodeNode
|
When for the purposes of walking the contents of a function body, the CodeNode
|
||||||
has no <em>children</em> -- they're within the inner scope.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">compileNode</span><span class="o">:</span> <span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="o">-></span>
|
has no <em>children</em> -- they're within the inner scope.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">compileNode</span><span class="o">:</span> <span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="o">-></span>
|
||||||
<span class="nv">sharedScope = </span><span class="nx">del</span> <span class="nx">o</span><span class="p">,</span> <span class="s1">'sharedScope'</span>
|
<span class="nv">sharedScope = </span><span class="nx">del</span> <span class="nx">o</span><span class="p">,</span> <span class="s1">'sharedScope'</span>
|
||||||
|
@ -688,7 +691,7 @@ has no <em>children</em> -- they're within the inner scope.</p> </td
|
||||||
<span class="k">else</span>
|
<span class="k">else</span>
|
||||||
<span class="k">if</span> <span class="nx">param</span><span class="p">.</span><span class="nx">attach</span>
|
<span class="k">if</span> <span class="nx">param</span><span class="p">.</span><span class="nx">attach</span>
|
||||||
<span class="p">{</span><span class="nx">value</span><span class="p">}</span> <span class="o">=</span> <span class="nx">param</span>
|
<span class="p">{</span><span class="nx">value</span><span class="p">}</span> <span class="o">=</span> <span class="nx">param</span>
|
||||||
<span class="p">[</span><span class="nx">param</span><span class="p">,</span> <span class="nx">param</span><span class="p">.</span><span class="nx">splat</span><span class="p">]</span> <span class="o">=</span> <span class="p">[</span><span class="nx">literal</span><span class="p">(</span><span class="nx">o</span><span class="p">.</span><span class="nx">scope</span><span class="p">.</span><span class="nx">freeVariable</span><span class="p">()),</span> <span class="nx">param</span><span class="p">.</span><span class="nx">splat</span><span class="p">]</span>
|
<span class="p">[</span><span class="nx">param</span><span class="p">,</span> <span class="nx">param</span><span class="p">.</span><span class="nx">splat</span><span class="p">]</span> <span class="o">=</span> <span class="p">[</span><span class="nx">literal</span><span class="p">(</span><span class="nx">o</span><span class="p">.</span><span class="nx">scope</span><span class="p">.</span><span class="nx">freeVariable</span> <span class="s1">'arg'</span><span class="p">),</span> <span class="nx">param</span><span class="p">.</span><span class="nx">splat</span><span class="p">]</span>
|
||||||
<span class="nx">@body</span><span class="p">.</span><span class="nx">unshift</span> <span class="k">new</span> <span class="nx">AssignNode</span> <span class="k">new</span> <span class="nx">ValueNode</span><span class="p">(</span><span class="nx">literal</span><span class="p">(</span><span class="s1">'this'</span><span class="p">),</span> <span class="p">[</span><span class="k">new</span> <span class="nx">AccessorNode</span> <span class="nx">value</span><span class="p">]),</span> <span class="nx">param</span>
|
<span class="nx">@body</span><span class="p">.</span><span class="nx">unshift</span> <span class="k">new</span> <span class="nx">AssignNode</span> <span class="k">new</span> <span class="nx">ValueNode</span><span class="p">(</span><span class="nx">literal</span><span class="p">(</span><span class="s1">'this'</span><span class="p">),</span> <span class="p">[</span><span class="k">new</span> <span class="nx">AccessorNode</span> <span class="nx">value</span><span class="p">]),</span> <span class="nx">param</span>
|
||||||
<span class="k">if</span> <span class="nx">param</span><span class="p">.</span><span class="nx">splat</span>
|
<span class="k">if</span> <span class="nx">param</span><span class="p">.</span><span class="nx">splat</span>
|
||||||
<span class="nv">splat = </span><span class="k">new</span> <span class="nx">SplatNode</span> <span class="nx">param</span><span class="p">.</span><span class="nx">value</span>
|
<span class="nv">splat = </span><span class="k">new</span> <span class="nx">SplatNode</span> <span class="nx">param</span><span class="p">.</span><span class="nx">value</span>
|
||||||
|
@ -707,7 +710,7 @@ has no <em>children</em> -- they're within the inner scope.</p> </td
|
||||||
<span class="k">if</span> <span class="nx">top</span> <span class="k">then</span> <span class="s2">"(#{func})"</span> <span class="k">else</span> <span class="nx">func</span>
|
<span class="k">if</span> <span class="nx">top</span> <span class="k">then</span> <span class="s2">"(#{func})"</span> <span class="k">else</span> <span class="nx">func</span>
|
||||||
|
|
||||||
<span class="nx">topSensitive</span><span class="o">:</span> <span class="o">-></span>
|
<span class="nx">topSensitive</span><span class="o">:</span> <span class="o">-></span>
|
||||||
<span class="kc">true</span></pre></div> </td> </tr> <tr id="section-88"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-88">#</a> </div> <p>Compilation creates a new scope unless explicitly asked to share with the
|
<span class="kc">true</span></pre></div> </td> </tr> <tr id="section-87"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-87">#</a> </div> <p>Compilation creates a new scope unless explicitly asked to share with the
|
||||||
outer scope. Handles splat parameters in the parameter list by peeking at
|
outer scope. Handles splat parameters in the parameter list by peeking at
|
||||||
the JavaScript <code>arguments</code> objects. If the function is bound with the <code>=></code>
|
the JavaScript <code>arguments</code> objects. If the function is bound with the <code>=></code>
|
||||||
arrow, generates a wrapper that saves the current value of <code>this</code> through
|
arrow, generates a wrapper that saves the current value of <code>this</code> through
|
||||||
|
@ -716,8 +719,8 @@ a closure.</p> </td> <td class="code"> <di
|
||||||
<span class="nx">toString</span><span class="o">:</span> <span class="p">(</span><span class="nx">idt</span><span class="p">)</span> <span class="o">-></span>
|
<span class="nx">toString</span><span class="o">:</span> <span class="p">(</span><span class="nx">idt</span><span class="p">)</span> <span class="o">-></span>
|
||||||
<span class="nx">idt</span> <span class="o">or=</span> <span class="s1">''</span>
|
<span class="nx">idt</span> <span class="o">or=</span> <span class="s1">''</span>
|
||||||
<span class="nv">children = </span><span class="p">(</span><span class="nx">child</span><span class="p">.</span><span class="nx">toString</span><span class="p">(</span><span class="nx">idt</span> <span class="o">+</span> <span class="nx">TAB</span><span class="p">)</span> <span class="k">for</span> <span class="nx">child</span> <span class="k">in</span> <span class="nx">@collectChildren</span><span class="p">()).</span><span class="nx">join</span><span class="p">(</span><span class="s1">''</span><span class="p">)</span>
|
<span class="nv">children = </span><span class="p">(</span><span class="nx">child</span><span class="p">.</span><span class="nx">toString</span><span class="p">(</span><span class="nx">idt</span> <span class="o">+</span> <span class="nx">TAB</span><span class="p">)</span> <span class="k">for</span> <span class="nx">child</span> <span class="k">in</span> <span class="nx">@collectChildren</span><span class="p">()).</span><span class="nx">join</span><span class="p">(</span><span class="s1">''</span><span class="p">)</span>
|
||||||
<span class="s1">'\n'</span> <span class="o">+</span> <span class="nx">idt</span> <span class="o">+</span> <span class="nx">children</span></pre></div> </td> </tr> <tr id="section-89"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-89">#</a> </div> <p>Short-circuit traverseChildren method to prevent it from crossing scope boundaries
|
<span class="s1">'\n'</span> <span class="o">+</span> <span class="nx">idt</span> <span class="o">+</span> <span class="nx">children</span></pre></div> </td> </tr> <tr id="section-88"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-88">#</a> </div> <p>Short-circuit traverseChildren method to prevent it from crossing scope boundaries
|
||||||
unless crossScope is true</p> </td> <td class="code"> <div class="highlight"><pre></pre></div> </td> </tr> <tr id="section-90"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-90">#</a> </div> <h3>ParamNode</h3> </td> <td class="code"> <div class="highlight"><pre><span class="nv">exports.ParamNode = </span><span class="nx">class</span> <span class="nx">ParamNode</span> <span class="k">extends</span> <span class="nx">BaseNode</span>
|
unless crossScope is true</p> </td> <td class="code"> <div class="highlight"><pre></pre></div> </td> </tr> <tr id="section-89"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-89">#</a> </div> <h3>ParamNode</h3> </td> <td class="code"> <div class="highlight"><pre><span class="nv">exports.ParamNode = </span><span class="nx">class</span> <span class="nx">ParamNode</span> <span class="k">extends</span> <span class="nx">BaseNode</span>
|
||||||
|
|
||||||
<span class="nx">class</span><span class="o">:</span> <span class="s1">'ParamNode'</span>
|
<span class="nx">class</span><span class="o">:</span> <span class="s1">'ParamNode'</span>
|
||||||
<span class="nx">children</span><span class="o">:</span> <span class="p">[</span><span class="s1">'name'</span><span class="p">]</span>
|
<span class="nx">children</span><span class="o">:</span> <span class="p">[</span><span class="s1">'name'</span><span class="p">]</span>
|
||||||
|
@ -730,9 +733,9 @@ unless crossScope is true</p> </td> <td class="code">
|
||||||
<span class="nx">@value</span><span class="p">.</span><span class="nx">compile</span> <span class="nx">o</span>
|
<span class="nx">@value</span><span class="p">.</span><span class="nx">compile</span> <span class="nx">o</span>
|
||||||
|
|
||||||
<span class="nx">toString</span><span class="o">:</span> <span class="p">(</span><span class="nx">idt</span><span class="p">)</span> <span class="o">-></span>
|
<span class="nx">toString</span><span class="o">:</span> <span class="p">(</span><span class="nx">idt</span><span class="p">)</span> <span class="o">-></span>
|
||||||
<span class="k">if</span> <span class="nx">@attach</span> <span class="k">then</span> <span class="p">(</span><span class="nx">literal</span> <span class="s1">'@'</span> <span class="o">+</span> <span class="nx">@name</span><span class="p">).</span><span class="nx">toString</span> <span class="nx">idt</span> <span class="k">else</span> <span class="nx">@value</span><span class="p">.</span><span class="nx">toString</span> <span class="nx">idt</span></pre></div> </td> </tr> <tr id="section-91"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-91">#</a> </div> <p>A parameter in a function definition. Beyond a typical Javascript parameter,
|
<span class="k">if</span> <span class="nx">@attach</span> <span class="k">then</span> <span class="p">(</span><span class="nx">literal</span> <span class="s1">'@'</span> <span class="o">+</span> <span class="nx">@name</span><span class="p">).</span><span class="nx">toString</span> <span class="nx">idt</span> <span class="k">else</span> <span class="nx">@value</span><span class="p">.</span><span class="nx">toString</span> <span class="nx">idt</span></pre></div> </td> </tr> <tr id="section-90"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-90">#</a> </div> <p>A parameter in a function definition. Beyond a typical Javascript parameter,
|
||||||
these parameters can also attach themselves to the context of the function,
|
these parameters can also attach themselves to the context of the function,
|
||||||
as well as be a splat, gathering up a group of parameters into an array.</p> </td> <td class="code"> <div class="highlight"><pre></pre></div> </td> </tr> <tr id="section-92"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-92">#</a> </div> <h3>SplatNode</h3> </td> <td class="code"> <div class="highlight"><pre><span class="nv">exports.SplatNode = </span><span class="nx">class</span> <span class="nx">SplatNode</span> <span class="k">extends</span> <span class="nx">BaseNode</span>
|
as well as be a splat, gathering up a group of parameters into an array.</p> </td> <td class="code"> <div class="highlight"><pre></pre></div> </td> </tr> <tr id="section-91"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-91">#</a> </div> <h3>SplatNode</h3> </td> <td class="code"> <div class="highlight"><pre><span class="nv">exports.SplatNode = </span><span class="nx">class</span> <span class="nx">SplatNode</span> <span class="k">extends</span> <span class="nx">BaseNode</span>
|
||||||
|
|
||||||
<span class="nx">class</span><span class="o">:</span> <span class="s1">'SplatNode'</span>
|
<span class="nx">class</span><span class="o">:</span> <span class="s1">'SplatNode'</span>
|
||||||
<span class="nx">children</span><span class="o">:</span> <span class="p">[</span><span class="s1">'name'</span><span class="p">]</span>
|
<span class="nx">children</span><span class="o">:</span> <span class="p">[</span><span class="s1">'name'</span><span class="p">]</span>
|
||||||
|
@ -743,28 +746,28 @@ as well as be a splat, gathering up a group of parameters into an array.</p>
|
||||||
<span class="vi">@name = </span><span class="nx">name</span>
|
<span class="vi">@name = </span><span class="nx">name</span>
|
||||||
|
|
||||||
<span class="nx">compileNode</span><span class="o">:</span> <span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="o">-></span>
|
<span class="nx">compileNode</span><span class="o">:</span> <span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="o">-></span>
|
||||||
<span class="k">if</span> <span class="nx">@index</span><span class="o">?</span> <span class="k">then</span> <span class="nx">@compileParam</span><span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="k">else</span> <span class="nx">@name</span><span class="p">.</span><span class="nx">compile</span><span class="p">(</span><span class="nx">o</span><span class="p">)</span></pre></div> </td> </tr> <tr id="section-93"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-93">#</a> </div> <p>A splat, either as a parameter to a function, an argument to a call,
|
<span class="k">if</span> <span class="nx">@index</span><span class="o">?</span> <span class="k">then</span> <span class="nx">@compileParam</span><span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="k">else</span> <span class="nx">@name</span><span class="p">.</span><span class="nx">compile</span><span class="p">(</span><span class="nx">o</span><span class="p">)</span></pre></div> </td> </tr> <tr id="section-92"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-92">#</a> </div> <p>A splat, either as a parameter to a function, an argument to a call,
|
||||||
or as part of a destructuring assignment.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">compileParam</span><span class="o">:</span> <span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="o">-></span>
|
or as part of a destructuring assignment.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">compileParam</span><span class="o">:</span> <span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="o">-></span>
|
||||||
<span class="nv">name = </span><span class="nx">@name</span><span class="p">.</span><span class="nx">compile</span><span class="p">(</span><span class="nx">o</span><span class="p">)</span>
|
<span class="nv">name = </span><span class="nx">@name</span><span class="p">.</span><span class="nx">compile</span><span class="p">(</span><span class="nx">o</span><span class="p">)</span>
|
||||||
<span class="nx">o</span><span class="p">.</span><span class="nx">scope</span><span class="p">.</span><span class="nx">find</span> <span class="nx">name</span>
|
<span class="nx">o</span><span class="p">.</span><span class="nx">scope</span><span class="p">.</span><span class="nx">find</span> <span class="nx">name</span>
|
||||||
<span class="nv">end = </span><span class="s1">''</span>
|
<span class="nv">end = </span><span class="s1">''</span>
|
||||||
<span class="k">if</span> <span class="nx">@trailings</span><span class="p">.</span><span class="nx">length</span>
|
<span class="k">if</span> <span class="nx">@trailings</span><span class="p">.</span><span class="nx">length</span>
|
||||||
<span class="nv">len = </span><span class="nx">o</span><span class="p">.</span><span class="nx">scope</span><span class="p">.</span><span class="nx">freeVariable</span><span class="p">()</span>
|
<span class="nv">len = </span><span class="nx">o</span><span class="p">.</span><span class="nx">scope</span><span class="p">.</span><span class="nx">freeVariable</span> <span class="s1">'len'</span>
|
||||||
<span class="nx">o</span><span class="p">.</span><span class="nx">scope</span><span class="p">.</span><span class="nx">assign</span> <span class="nx">len</span><span class="p">,</span> <span class="s2">"arguments.length"</span>
|
<span class="nx">o</span><span class="p">.</span><span class="nx">scope</span><span class="p">.</span><span class="nx">assign</span> <span class="nx">len</span><span class="p">,</span> <span class="s2">"arguments.length"</span>
|
||||||
<span class="nv">variadic = </span><span class="nx">o</span><span class="p">.</span><span class="nx">scope</span><span class="p">.</span><span class="nx">freeVariable</span><span class="p">()</span>
|
<span class="nv">variadic = </span><span class="nx">o</span><span class="p">.</span><span class="nx">scope</span><span class="p">.</span><span class="nx">freeVariable</span> <span class="s1">'result'</span>
|
||||||
<span class="nx">o</span><span class="p">.</span><span class="nx">scope</span><span class="p">.</span><span class="nx">assign</span> <span class="nx">variadic</span><span class="p">,</span> <span class="nx">len</span> <span class="o">+</span> <span class="s1">' >= '</span> <span class="o">+</span> <span class="nx">@arglength</span>
|
<span class="nx">o</span><span class="p">.</span><span class="nx">scope</span><span class="p">.</span><span class="nx">assign</span> <span class="nx">variadic</span><span class="p">,</span> <span class="nx">len</span> <span class="o">+</span> <span class="s1">' >= '</span> <span class="o">+</span> <span class="nx">@arglength</span>
|
||||||
<span class="nv">end = </span><span class="k">if</span> <span class="nx">@trailings</span><span class="p">.</span><span class="nx">length</span> <span class="k">then</span> <span class="s2">", #{len} - #{@trailings.length}"</span>
|
<span class="nv">end = </span><span class="k">if</span> <span class="nx">@trailings</span><span class="p">.</span><span class="nx">length</span> <span class="k">then</span> <span class="s2">", #{len} - #{@trailings.length}"</span>
|
||||||
<span class="k">for</span> <span class="nx">trailing</span><span class="p">,</span> <span class="nx">idx</span> <span class="k">in</span> <span class="nx">@trailings</span>
|
<span class="k">for</span> <span class="nx">trailing</span><span class="p">,</span> <span class="nx">idx</span> <span class="k">in</span> <span class="nx">@trailings</span>
|
||||||
<span class="k">if</span> <span class="nx">trailing</span><span class="p">.</span><span class="nx">attach</span>
|
<span class="k">if</span> <span class="nx">trailing</span><span class="p">.</span><span class="nx">attach</span>
|
||||||
<span class="nv">assign = </span><span class="nx">trailing</span><span class="p">.</span><span class="nx">assign</span>
|
<span class="nv">assign = </span><span class="nx">trailing</span><span class="p">.</span><span class="nx">assign</span>
|
||||||
<span class="nv">trailing = </span><span class="nx">literal</span> <span class="nx">o</span><span class="p">.</span><span class="nx">scope</span><span class="p">.</span><span class="nx">freeVariable</span><span class="p">()</span>
|
<span class="nv">trailing = </span><span class="nx">literal</span> <span class="nx">o</span><span class="p">.</span><span class="nx">scope</span><span class="p">.</span><span class="nx">freeVariable</span> <span class="s1">'arg'</span>
|
||||||
<span class="nv">assign.value = </span><span class="nx">trailing</span>
|
<span class="nv">assign.value = </span><span class="nx">trailing</span>
|
||||||
<span class="nv">pos = </span><span class="nx">@trailings</span><span class="p">.</span><span class="nx">length</span> <span class="o">-</span> <span class="nx">idx</span>
|
<span class="nv">pos = </span><span class="nx">@trailings</span><span class="p">.</span><span class="nx">length</span> <span class="o">-</span> <span class="nx">idx</span>
|
||||||
<span class="nx">o</span><span class="p">.</span><span class="nx">scope</span><span class="p">.</span><span class="nx">assign</span><span class="p">(</span><span class="nx">trailing</span><span class="p">.</span><span class="nx">compile</span><span class="p">(</span><span class="nx">o</span><span class="p">),</span> <span class="s2">"arguments[#{variadic} ? #{len} - #{pos} : #{@index + idx}]"</span><span class="p">)</span>
|
<span class="nx">o</span><span class="p">.</span><span class="nx">scope</span><span class="p">.</span><span class="nx">assign</span><span class="p">(</span><span class="nx">trailing</span><span class="p">.</span><span class="nx">compile</span><span class="p">(</span><span class="nx">o</span><span class="p">),</span> <span class="s2">"arguments[#{variadic} ? #{len} - #{pos} : #{@index + idx}]"</span><span class="p">)</span>
|
||||||
<span class="s2">"#{name} = #{utility('slice')}.call(arguments, #{@index}#{end})"</span></pre></div> </td> </tr> <tr id="section-94"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-94">#</a> </div> <p>Compiling a parameter splat means recovering the parameters that succeed
|
<span class="s2">"#{name} = #{utility('slice')}.call(arguments, #{@index}#{end})"</span></pre></div> </td> </tr> <tr id="section-93"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-93">#</a> </div> <p>Compiling a parameter splat means recovering the parameters that succeed
|
||||||
the splat in the parameter list, by slicing the arguments object.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">compileValue</span><span class="o">:</span> <span class="p">(</span><span class="nx">o</span><span class="p">,</span> <span class="nx">name</span><span class="p">,</span> <span class="nx">index</span><span class="p">,</span> <span class="nx">trailings</span><span class="p">)</span> <span class="o">-></span>
|
the splat in the parameter list, by slicing the arguments object.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">compileValue</span><span class="o">:</span> <span class="p">(</span><span class="nx">o</span><span class="p">,</span> <span class="nx">name</span><span class="p">,</span> <span class="nx">index</span><span class="p">,</span> <span class="nx">trailings</span><span class="p">)</span> <span class="o">-></span>
|
||||||
<span class="nv">trail = </span><span class="k">if</span> <span class="nx">trailings</span> <span class="k">then</span> <span class="s2">", #{name}.length - #{trailings}"</span> <span class="k">else</span> <span class="s1">''</span>
|
<span class="nv">trail = </span><span class="k">if</span> <span class="nx">trailings</span> <span class="k">then</span> <span class="s2">", #{name}.length - #{trailings}"</span> <span class="k">else</span> <span class="s1">''</span>
|
||||||
<span class="s2">"#{utility 'slice'}.call(#{name}, #{index}#{trail})"</span></pre></div> </td> </tr> <tr id="section-95"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-95">#</a> </div> <p>A compiling a splat as a destructuring assignment means slicing arguments
|
<span class="s2">"#{utility 'slice'}.call(#{name}, #{index}#{trail})"</span></pre></div> </td> </tr> <tr id="section-94"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-94">#</a> </div> <p>A compiling a splat as a destructuring assignment means slicing arguments
|
||||||
from the right-hand-side's corresponding array.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">@compileSplattedArray</span><span class="o">:</span> <span class="p">(</span><span class="nx">list</span><span class="p">,</span> <span class="nx">o</span><span class="p">)</span> <span class="o">-></span>
|
from the right-hand-side's corresponding array.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">@compileSplattedArray</span><span class="o">:</span> <span class="p">(</span><span class="nx">list</span><span class="p">,</span> <span class="nx">o</span><span class="p">)</span> <span class="o">-></span>
|
||||||
<span class="nv">args = </span><span class="p">[]</span>
|
<span class="nv">args = </span><span class="p">[]</span>
|
||||||
<span class="k">for</span> <span class="nx">arg</span><span class="p">,</span> <span class="nx">i</span> <span class="k">in</span> <span class="nx">list</span>
|
<span class="k">for</span> <span class="nx">arg</span><span class="p">,</span> <span class="nx">i</span> <span class="k">in</span> <span class="nx">list</span>
|
||||||
|
@ -780,8 +783,8 @@ from the right-hand-side's corresponding array.</p> </td>
|
||||||
<span class="k">else</span>
|
<span class="k">else</span>
|
||||||
<span class="nv">code = </span><span class="s2">"[#{code}]"</span>
|
<span class="nv">code = </span><span class="s2">"[#{code}]"</span>
|
||||||
<span class="nx">args</span><span class="p">.</span><span class="nx">push</span><span class="p">(</span><span class="k">if</span> <span class="nx">i</span> <span class="o">is</span> <span class="mi">0</span> <span class="k">then</span> <span class="nx">code</span> <span class="k">else</span> <span class="s2">".concat(#{code})"</span><span class="p">)</span>
|
<span class="nx">args</span><span class="p">.</span><span class="nx">push</span><span class="p">(</span><span class="k">if</span> <span class="nx">i</span> <span class="o">is</span> <span class="mi">0</span> <span class="k">then</span> <span class="nx">code</span> <span class="k">else</span> <span class="s2">".concat(#{code})"</span><span class="p">)</span>
|
||||||
<span class="nx">args</span><span class="p">.</span><span class="nx">join</span><span class="p">(</span><span class="s1">''</span><span class="p">)</span></pre></div> </td> </tr> <tr id="section-96"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-96">#</a> </div> <p>Utility function that converts arbitrary number of elements, mixed with
|
<span class="nx">args</span><span class="p">.</span><span class="nx">join</span><span class="p">(</span><span class="s1">''</span><span class="p">)</span></pre></div> </td> </tr> <tr id="section-95"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-95">#</a> </div> <p>Utility function that converts arbitrary number of elements, mixed with
|
||||||
splats, to a proper array</p> </td> <td class="code"> <div class="highlight"><pre></pre></div> </td> </tr> <tr id="section-97"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-97">#</a> </div> <h3>WhileNode</h3> </td> <td class="code"> <div class="highlight"><pre><span class="nv">exports.WhileNode = </span><span class="nx">class</span> <span class="nx">WhileNode</span> <span class="k">extends</span> <span class="nx">BaseNode</span>
|
splats, to a proper array</p> </td> <td class="code"> <div class="highlight"><pre></pre></div> </td> </tr> <tr id="section-96"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-96">#</a> </div> <h3>WhileNode</h3> </td> <td class="code"> <div class="highlight"><pre><span class="nv">exports.WhileNode = </span><span class="nx">class</span> <span class="nx">WhileNode</span> <span class="k">extends</span> <span class="nx">BaseNode</span>
|
||||||
|
|
||||||
<span class="nx">class</span><span class="o">:</span> <span class="s1">'WhileNode'</span>
|
<span class="nx">class</span><span class="o">:</span> <span class="s1">'WhileNode'</span>
|
||||||
<span class="nx">children</span><span class="o">:</span> <span class="p">[</span><span class="s1">'condition'</span><span class="p">,</span> <span class="s1">'guard'</span><span class="p">,</span> <span class="s1">'body'</span><span class="p">]</span>
|
<span class="nx">children</span><span class="o">:</span> <span class="p">[</span><span class="s1">'condition'</span><span class="p">,</span> <span class="s1">'guard'</span><span class="p">,</span> <span class="s1">'body'</span><span class="p">]</span>
|
||||||
|
@ -804,7 +807,7 @@ splats, to a proper array</p> </td> <td class="code">
|
||||||
<span class="k">this</span>
|
<span class="k">this</span>
|
||||||
|
|
||||||
<span class="nx">topSensitive</span><span class="o">:</span> <span class="o">-></span>
|
<span class="nx">topSensitive</span><span class="o">:</span> <span class="o">-></span>
|
||||||
<span class="kc">true</span></pre></div> </td> </tr> <tr id="section-98"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-98">#</a> </div> <p>A while loop, the only sort of low-level loop exposed by CoffeeScript. From
|
<span class="kc">true</span></pre></div> </td> </tr> <tr id="section-97"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-97">#</a> </div> <p>A while loop, the only sort of low-level loop exposed by CoffeeScript. From
|
||||||
it, all other loops can be manufactured. Useful in cases where you need more
|
it, all other loops can be manufactured. Useful in cases where you need more
|
||||||
flexibility or more speed than a comprehension can provide.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">compileNode</span><span class="o">:</span> <span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="o">-></span>
|
flexibility or more speed than a comprehension can provide.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">compileNode</span><span class="o">:</span> <span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="o">-></span>
|
||||||
<span class="nv">top = </span> <span class="nx">del</span><span class="p">(</span><span class="nx">o</span><span class="p">,</span> <span class="s1">'top'</span><span class="p">)</span> <span class="o">and</span> <span class="o">not</span> <span class="nx">@returns</span>
|
<span class="nv">top = </span> <span class="nx">del</span><span class="p">(</span><span class="nx">o</span><span class="p">,</span> <span class="s1">'top'</span><span class="p">)</span> <span class="o">and</span> <span class="o">not</span> <span class="nx">@returns</span>
|
||||||
|
@ -814,7 +817,7 @@ flexibility or more speed than a comprehension can provide.</p> </td
|
||||||
<span class="nv">cond = </span> <span class="nx">@condition</span><span class="p">.</span><span class="nx">compile</span><span class="p">(</span><span class="nx">o</span><span class="p">)</span>
|
<span class="nv">cond = </span> <span class="nx">@condition</span><span class="p">.</span><span class="nx">compile</span><span class="p">(</span><span class="nx">o</span><span class="p">)</span>
|
||||||
<span class="nv">set = </span> <span class="s1">''</span>
|
<span class="nv">set = </span> <span class="s1">''</span>
|
||||||
<span class="nx">unless</span> <span class="nx">top</span>
|
<span class="nx">unless</span> <span class="nx">top</span>
|
||||||
<span class="nv">rvar = </span><span class="nx">o</span><span class="p">.</span><span class="nx">scope</span><span class="p">.</span><span class="nx">freeVariable</span><span class="p">()</span>
|
<span class="nv">rvar = </span><span class="nx">o</span><span class="p">.</span><span class="nx">scope</span><span class="p">.</span><span class="nx">freeVariable</span> <span class="s1">'result'</span>
|
||||||
<span class="nv">set = </span><span class="s2">"#{@tab}#{rvar} = [];\n"</span>
|
<span class="nv">set = </span><span class="s2">"#{@tab}#{rvar} = [];\n"</span>
|
||||||
<span class="vi">@body = </span><span class="nx">PushNode</span><span class="p">.</span><span class="nx">wrap</span><span class="p">(</span><span class="nx">rvar</span><span class="p">,</span> <span class="nx">@body</span><span class="p">)</span> <span class="k">if</span> <span class="nx">@body</span>
|
<span class="vi">@body = </span><span class="nx">PushNode</span><span class="p">.</span><span class="nx">wrap</span><span class="p">(</span><span class="nx">rvar</span><span class="p">,</span> <span class="nx">@body</span><span class="p">)</span> <span class="k">if</span> <span class="nx">@body</span>
|
||||||
<span class="nv">pre = </span><span class="s2">"#{set}#{@tab}while (#{cond})"</span>
|
<span class="nv">pre = </span><span class="s2">"#{set}#{@tab}while (#{cond})"</span>
|
||||||
|
@ -823,15 +826,15 @@ flexibility or more speed than a comprehension can provide.</p> </td
|
||||||
<span class="nv">post = </span><span class="s1">'\n'</span> <span class="o">+</span> <span class="k">new</span> <span class="nx">ReturnNode</span><span class="p">(</span><span class="nx">literal</span><span class="p">(</span><span class="nx">rvar</span><span class="p">)).</span><span class="nx">compile</span><span class="p">(</span><span class="nx">merge</span><span class="p">(</span><span class="nx">o</span><span class="p">,</span> <span class="nx">indent</span><span class="o">:</span> <span class="nx">@idt</span><span class="p">()))</span>
|
<span class="nv">post = </span><span class="s1">'\n'</span> <span class="o">+</span> <span class="k">new</span> <span class="nx">ReturnNode</span><span class="p">(</span><span class="nx">literal</span><span class="p">(</span><span class="nx">rvar</span><span class="p">)).</span><span class="nx">compile</span><span class="p">(</span><span class="nx">merge</span><span class="p">(</span><span class="nx">o</span><span class="p">,</span> <span class="nx">indent</span><span class="o">:</span> <span class="nx">@idt</span><span class="p">()))</span>
|
||||||
<span class="k">else</span>
|
<span class="k">else</span>
|
||||||
<span class="nv">post = </span><span class="s1">''</span>
|
<span class="nv">post = </span><span class="s1">''</span>
|
||||||
<span class="s2">"#{pre} {\n#{ @body.compile(o) }\n#{@tab}}#{post}"</span></pre></div> </td> </tr> <tr id="section-99"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-99">#</a> </div> <p>The main difference from a JavaScript <em>while</em> is that the CoffeeScript
|
<span class="s2">"#{pre} {\n#{ @body.compile(o) }\n#{@tab}}#{post}"</span></pre></div> </td> </tr> <tr id="section-98"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-98">#</a> </div> <p>The main difference from a JavaScript <em>while</em> is that the CoffeeScript
|
||||||
<em>while</em> can be used as a part of a larger expression -- while loops may
|
<em>while</em> can be used as a part of a larger expression -- while loops may
|
||||||
return an array containing the computed result of each iteration.</p> </td> <td class="code"> <div class="highlight"><pre></pre></div> </td> </tr> <tr id="section-100"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-100">#</a> </div> <h3>OpNode</h3> </td> <td class="code"> <div class="highlight"><pre><span class="nv">exports.OpNode = </span><span class="nx">class</span> <span class="nx">OpNode</span> <span class="k">extends</span> <span class="nx">BaseNode</span></pre></div> </td> </tr> <tr id="section-101"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-101">#</a> </div> <p>Simple Arithmetic and logical operations. Performs some conversion from
|
return an array containing the computed result of each iteration.</p> </td> <td class="code"> <div class="highlight"><pre></pre></div> </td> </tr> <tr id="section-99"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-99">#</a> </div> <h3>OpNode</h3> </td> <td class="code"> <div class="highlight"><pre><span class="nv">exports.OpNode = </span><span class="nx">class</span> <span class="nx">OpNode</span> <span class="k">extends</span> <span class="nx">BaseNode</span></pre></div> </td> </tr> <tr id="section-100"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-100">#</a> </div> <p>Simple Arithmetic and logical operations. Performs some conversion from
|
||||||
CoffeeScript operations into their JavaScript equivalents.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">CONVERSIONS</span><span class="o">:</span>
|
CoffeeScript operations into their JavaScript equivalents.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">CONVERSIONS</span><span class="o">:</span>
|
||||||
<span class="s1">'=='</span><span class="o">:</span> <span class="s1">'==='</span>
|
<span class="s1">'=='</span><span class="o">:</span> <span class="s1">'==='</span>
|
||||||
<span class="s1">'!='</span><span class="o">:</span> <span class="s1">'!=='</span></pre></div> </td> </tr> <tr id="section-102"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-102">#</a> </div> <p>The map of conversions from CoffeeScript to JavaScript symbols.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">INVERSIONS</span><span class="o">:</span>
|
<span class="s1">'!='</span><span class="o">:</span> <span class="s1">'!=='</span></pre></div> </td> </tr> <tr id="section-101"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-101">#</a> </div> <p>The map of conversions from CoffeeScript to JavaScript symbols.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">INVERSIONS</span><span class="o">:</span>
|
||||||
<span class="s1">'!=='</span><span class="o">:</span> <span class="s1">'==='</span>
|
<span class="s1">'!=='</span><span class="o">:</span> <span class="s1">'==='</span>
|
||||||
<span class="s1">'==='</span><span class="o">:</span> <span class="s1">'!=='</span></pre></div> </td> </tr> <tr id="section-103"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-103">#</a> </div> <p>The map of invertible operators.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">CHAINABLE</span><span class="o">:</span> <span class="p">[</span><span class="s1">'<'</span><span class="p">,</span> <span class="s1">'>'</span><span class="p">,</span> <span class="s1">'>='</span><span class="p">,</span> <span class="s1">'<='</span><span class="p">,</span> <span class="s1">'==='</span><span class="p">,</span> <span class="s1">'!=='</span><span class="p">]</span></pre></div> </td> </tr> <tr id="section-104"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-104">#</a> </div> <p>The list of operators for which we perform
|
<span class="s1">'==='</span><span class="o">:</span> <span class="s1">'!=='</span></pre></div> </td> </tr> <tr id="section-102"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-102">#</a> </div> <p>The map of invertible operators.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">CHAINABLE</span><span class="o">:</span> <span class="p">[</span><span class="s1">'<'</span><span class="p">,</span> <span class="s1">'>'</span><span class="p">,</span> <span class="s1">'>='</span><span class="p">,</span> <span class="s1">'<='</span><span class="p">,</span> <span class="s1">'==='</span><span class="p">,</span> <span class="s1">'!=='</span><span class="p">]</span></pre></div> </td> </tr> <tr id="section-103"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-103">#</a> </div> <p>The list of operators for which we perform
|
||||||
<a href="http://docs.python.org/reference/expressions.html#notin">Python-style comparison chaining</a>.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">ASSIGNMENT</span><span class="o">:</span> <span class="p">[</span><span class="s1">'||='</span><span class="p">,</span> <span class="s1">'&&='</span><span class="p">,</span> <span class="s1">'?='</span><span class="p">]</span></pre></div> </td> </tr> <tr id="section-105"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-105">#</a> </div> <p>Our assignment operators that have no JavaScript equivalent.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">PREFIX_OPERATORS</span><span class="o">:</span> <span class="p">[</span><span class="s1">'typeof'</span><span class="p">,</span> <span class="s1">'delete'</span><span class="p">]</span>
|
<a href="http://docs.python.org/reference/expressions.html#notin">Python-style comparison chaining</a>.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">ASSIGNMENT</span><span class="o">:</span> <span class="p">[</span><span class="s1">'||='</span><span class="p">,</span> <span class="s1">'&&='</span><span class="p">,</span> <span class="s1">'?='</span><span class="p">]</span></pre></div> </td> </tr> <tr id="section-104"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-104">#</a> </div> <p>Our assignment operators that have no JavaScript equivalent.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">PREFIX_OPERATORS</span><span class="o">:</span> <span class="p">[</span><span class="s1">'typeof'</span><span class="p">,</span> <span class="s1">'delete'</span><span class="p">]</span>
|
||||||
|
|
||||||
<span class="nx">class</span><span class="o">:</span> <span class="s1">'OpNode'</span>
|
<span class="nx">class</span><span class="o">:</span> <span class="s1">'OpNode'</span>
|
||||||
<span class="nx">children</span><span class="o">:</span> <span class="p">[</span><span class="s1">'first'</span><span class="p">,</span> <span class="s1">'second'</span><span class="p">]</span>
|
<span class="nx">children</span><span class="o">:</span> <span class="p">[</span><span class="s1">'first'</span><span class="p">,</span> <span class="s1">'second'</span><span class="p">]</span>
|
||||||
|
@ -872,11 +875,11 @@ CoffeeScript operations into their JavaScript equivalents.</p> </td>
|
||||||
<span class="k">return</span> <span class="nx">@compileExistence</span><span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="k">if</span> <span class="nx">@operator</span> <span class="o">is</span> <span class="s1">'?'</span>
|
<span class="k">return</span> <span class="nx">@compileExistence</span><span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="k">if</span> <span class="nx">@operator</span> <span class="o">is</span> <span class="s1">'?'</span>
|
||||||
<span class="vi">@first = </span><span class="k">new</span> <span class="nx">ParentheticalNode</span><span class="p">(</span><span class="nx">@first</span><span class="p">)</span> <span class="k">if</span> <span class="nx">@first</span> <span class="k">instanceof</span> <span class="nx">OpNode</span> <span class="o">and</span> <span class="nx">@first</span><span class="p">.</span><span class="nx">isMutator</span><span class="p">()</span>
|
<span class="vi">@first = </span><span class="k">new</span> <span class="nx">ParentheticalNode</span><span class="p">(</span><span class="nx">@first</span><span class="p">)</span> <span class="k">if</span> <span class="nx">@first</span> <span class="k">instanceof</span> <span class="nx">OpNode</span> <span class="o">and</span> <span class="nx">@first</span><span class="p">.</span><span class="nx">isMutator</span><span class="p">()</span>
|
||||||
<span class="vi">@second = </span><span class="k">new</span> <span class="nx">ParentheticalNode</span><span class="p">(</span><span class="nx">@second</span><span class="p">)</span> <span class="k">if</span> <span class="nx">@second</span> <span class="k">instanceof</span> <span class="nx">OpNode</span> <span class="o">and</span> <span class="nx">@second</span><span class="p">.</span><span class="nx">isMutator</span><span class="p">()</span>
|
<span class="vi">@second = </span><span class="k">new</span> <span class="nx">ParentheticalNode</span><span class="p">(</span><span class="nx">@second</span><span class="p">)</span> <span class="k">if</span> <span class="nx">@second</span> <span class="k">instanceof</span> <span class="nx">OpNode</span> <span class="o">and</span> <span class="nx">@second</span><span class="p">.</span><span class="nx">isMutator</span><span class="p">()</span>
|
||||||
<span class="p">[</span><span class="nx">@first</span><span class="p">.</span><span class="nx">compile</span><span class="p">(</span><span class="nx">o</span><span class="p">),</span> <span class="nx">@operator</span><span class="p">,</span> <span class="nx">@second</span><span class="p">.</span><span class="nx">compile</span><span class="p">(</span><span class="nx">o</span><span class="p">)].</span><span class="nx">join</span> <span class="s1">' '</span></pre></div> </td> </tr> <tr id="section-106"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-106">#</a> </div> <p>Operators must come before their operands with a space.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">compileChain</span><span class="o">:</span> <span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="o">-></span>
|
<span class="p">[</span><span class="nx">@first</span><span class="p">.</span><span class="nx">compile</span><span class="p">(</span><span class="nx">o</span><span class="p">),</span> <span class="nx">@operator</span><span class="p">,</span> <span class="nx">@second</span><span class="p">.</span><span class="nx">compile</span><span class="p">(</span><span class="nx">o</span><span class="p">)].</span><span class="nx">join</span> <span class="s1">' '</span></pre></div> </td> </tr> <tr id="section-105"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-105">#</a> </div> <p>Operators must come before their operands with a space.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">compileChain</span><span class="o">:</span> <span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="o">-></span>
|
||||||
<span class="nv">shared = </span><span class="nx">@first</span><span class="p">.</span><span class="nx">unwrap</span><span class="p">().</span><span class="nx">second</span>
|
<span class="nv">shared = </span><span class="nx">@first</span><span class="p">.</span><span class="nx">unwrap</span><span class="p">().</span><span class="nx">second</span>
|
||||||
<span class="p">[</span><span class="nx">@first</span><span class="p">.</span><span class="nx">second</span><span class="p">,</span> <span class="nx">shared</span><span class="p">]</span> <span class="o">=</span> <span class="nx">shared</span><span class="p">.</span><span class="nx">compileReference</span><span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="k">if</span> <span class="nx">shared</span><span class="p">.</span><span class="nx">containsType</span> <span class="nx">CallNode</span>
|
<span class="p">[</span><span class="nx">@first</span><span class="p">.</span><span class="nx">second</span><span class="p">,</span> <span class="nx">shared</span><span class="p">]</span> <span class="o">=</span> <span class="nx">shared</span><span class="p">.</span><span class="nx">compileReference</span><span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="k">if</span> <span class="nx">shared</span><span class="p">.</span><span class="nx">containsType</span> <span class="nx">CallNode</span>
|
||||||
<span class="p">[</span><span class="nx">first</span><span class="p">,</span> <span class="nx">second</span><span class="p">,</span> <span class="nx">shared</span><span class="p">]</span> <span class="o">=</span> <span class="p">[</span><span class="nx">@first</span><span class="p">.</span><span class="nx">compile</span><span class="p">(</span><span class="nx">o</span><span class="p">),</span> <span class="nx">@second</span><span class="p">.</span><span class="nx">compile</span><span class="p">(</span><span class="nx">o</span><span class="p">),</span> <span class="nx">shared</span><span class="p">.</span><span class="nx">compile</span><span class="p">(</span><span class="nx">o</span><span class="p">)]</span>
|
<span class="p">[</span><span class="nx">first</span><span class="p">,</span> <span class="nx">second</span><span class="p">,</span> <span class="nx">shared</span><span class="p">]</span> <span class="o">=</span> <span class="p">[</span><span class="nx">@first</span><span class="p">.</span><span class="nx">compile</span><span class="p">(</span><span class="nx">o</span><span class="p">),</span> <span class="nx">@second</span><span class="p">.</span><span class="nx">compile</span><span class="p">(</span><span class="nx">o</span><span class="p">),</span> <span class="nx">shared</span><span class="p">.</span><span class="nx">compile</span><span class="p">(</span><span class="nx">o</span><span class="p">)]</span>
|
||||||
<span class="s2">"(#{first}) && (#{shared} #{@operator} #{second})"</span></pre></div> </td> </tr> <tr id="section-107"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-107">#</a> </div> <p>Mimic Python's chained comparisons when multiple comparison operators are
|
<span class="s2">"(#{first}) && (#{shared} #{@operator} #{second})"</span></pre></div> </td> </tr> <tr id="section-106"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-106">#</a> </div> <p>Mimic Python's chained comparisons when multiple comparison operators are
|
||||||
used sequentially. For example:</p>
|
used sequentially. For example:</p>
|
||||||
|
|
||||||
<pre><code>bin/coffee -e "puts 50 < 65 > 10"
|
<pre><code>bin/coffee -e "puts 50 < 65 > 10"
|
||||||
|
@ -887,16 +890,16 @@ true
|
||||||
<span class="nv">second = </span><span class="s2">"(#{second})"</span> <span class="k">if</span> <span class="nx">@second</span> <span class="k">instanceof</span> <span class="nx">OpNode</span>
|
<span class="nv">second = </span><span class="s2">"(#{second})"</span> <span class="k">if</span> <span class="nx">@second</span> <span class="k">instanceof</span> <span class="nx">OpNode</span>
|
||||||
<span class="nx">o</span><span class="p">.</span><span class="nx">scope</span><span class="p">.</span><span class="nx">find</span><span class="p">(</span><span class="nx">first</span><span class="p">)</span> <span class="k">if</span> <span class="nx">first</span><span class="p">.</span><span class="nx">match</span><span class="p">(</span><span class="nx">IDENTIFIER</span><span class="p">)</span>
|
<span class="nx">o</span><span class="p">.</span><span class="nx">scope</span><span class="p">.</span><span class="nx">find</span><span class="p">(</span><span class="nx">first</span><span class="p">)</span> <span class="k">if</span> <span class="nx">first</span><span class="p">.</span><span class="nx">match</span><span class="p">(</span><span class="nx">IDENTIFIER</span><span class="p">)</span>
|
||||||
<span class="k">return</span> <span class="s2">"#{first} = #{ ExistenceNode.compileTest(o, literal(firstVar))[0] } ? #{firstVar} : #{second}"</span> <span class="k">if</span> <span class="nx">@operator</span> <span class="o">is</span> <span class="s1">'?='</span>
|
<span class="k">return</span> <span class="s2">"#{first} = #{ ExistenceNode.compileTest(o, literal(firstVar))[0] } ? #{firstVar} : #{second}"</span> <span class="k">if</span> <span class="nx">@operator</span> <span class="o">is</span> <span class="s1">'?='</span>
|
||||||
<span class="s2">"#{first} #{ @operator.substr(0, 2) } (#{firstVar} = #{second})"</span></pre></div> </td> </tr> <tr id="section-108"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-108">#</a> </div> <p>When compiling a conditional assignment, take care to ensure that the
|
<span class="s2">"#{first} #{ @operator.substr(0, 2) } (#{firstVar} = #{second})"</span></pre></div> </td> </tr> <tr id="section-107"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-107">#</a> </div> <p>When compiling a conditional assignment, take care to ensure that the
|
||||||
operands are only evaluated once, even though we have to reference them
|
operands are only evaluated once, even though we have to reference them
|
||||||
more than once.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">compileExistence</span><span class="o">:</span> <span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="o">-></span>
|
more than once.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">compileExistence</span><span class="o">:</span> <span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="o">-></span>
|
||||||
<span class="p">[</span><span class="nx">test</span><span class="p">,</span> <span class="nx">ref</span><span class="p">]</span> <span class="o">=</span> <span class="nx">ExistenceNode</span><span class="p">.</span><span class="nx">compileTest</span><span class="p">(</span><span class="nx">o</span><span class="p">,</span> <span class="nx">@first</span><span class="p">)</span>
|
<span class="p">[</span><span class="nx">test</span><span class="p">,</span> <span class="nx">ref</span><span class="p">]</span> <span class="o">=</span> <span class="nx">ExistenceNode</span><span class="p">.</span><span class="nx">compileTest</span><span class="p">(</span><span class="nx">o</span><span class="p">,</span> <span class="nx">@first</span><span class="p">)</span>
|
||||||
<span class="s2">"#{test} ? #{ref} : #{ @second.compile(o) }"</span></pre></div> </td> </tr> <tr id="section-109"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-109">#</a> </div> <p>If this is an existence operator, we delegate to <code>ExistenceNode.compileTest</code>
|
<span class="s2">"#{test} ? #{ref} : #{ @second.compile(o) }"</span></pre></div> </td> </tr> <tr id="section-108"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-108">#</a> </div> <p>If this is an existence operator, we delegate to <code>ExistenceNode.compileTest</code>
|
||||||
to give us the safe references for the variables.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">compileUnary</span><span class="o">:</span> <span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="o">-></span>
|
to give us the safe references for the variables.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">compileUnary</span><span class="o">:</span> <span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="o">-></span>
|
||||||
<span class="nv">space = </span><span class="k">if</span> <span class="nx">indexOf</span><span class="p">(</span><span class="nx">@PREFIX_OPERATORS</span><span class="p">,</span> <span class="nx">@operator</span><span class="p">)</span> <span class="o">>=</span> <span class="mi">0</span> <span class="k">then</span> <span class="s1">' '</span> <span class="k">else</span> <span class="s1">''</span>
|
<span class="nv">space = </span><span class="k">if</span> <span class="nx">indexOf</span><span class="p">(</span><span class="nx">@PREFIX_OPERATORS</span><span class="p">,</span> <span class="nx">@operator</span><span class="p">)</span> <span class="o">>=</span> <span class="mi">0</span> <span class="k">then</span> <span class="s1">' '</span> <span class="k">else</span> <span class="s1">''</span>
|
||||||
<span class="nv">parts = </span><span class="p">[</span><span class="nx">@operator</span><span class="p">,</span> <span class="nx">space</span><span class="p">,</span> <span class="nx">@first</span><span class="p">.</span><span class="nx">compile</span><span class="p">(</span><span class="nx">o</span><span class="p">)]</span>
|
<span class="nv">parts = </span><span class="p">[</span><span class="nx">@operator</span><span class="p">,</span> <span class="nx">space</span><span class="p">,</span> <span class="nx">@first</span><span class="p">.</span><span class="nx">compile</span><span class="p">(</span><span class="nx">o</span><span class="p">)]</span>
|
||||||
<span class="nv">parts = </span><span class="nx">parts</span><span class="p">.</span><span class="nx">reverse</span><span class="p">()</span> <span class="k">if</span> <span class="nx">@flip</span>
|
<span class="nv">parts = </span><span class="nx">parts</span><span class="p">.</span><span class="nx">reverse</span><span class="p">()</span> <span class="k">if</span> <span class="nx">@flip</span>
|
||||||
<span class="nx">parts</span><span class="p">.</span><span class="nx">join</span><span class="p">(</span><span class="s1">''</span><span class="p">)</span></pre></div> </td> </tr> <tr id="section-110"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-110">#</a> </div> <p>Compile a unary <strong>OpNode</strong>.</p> </td> <td class="code"> <div class="highlight"><pre><span class="nv">exports.InNode = </span><span class="nx">class</span> <span class="nx">InNode</span> <span class="k">extends</span> <span class="nx">BaseNode</span>
|
<span class="nx">parts</span><span class="p">.</span><span class="nx">join</span><span class="p">(</span><span class="s1">''</span><span class="p">)</span></pre></div> </td> </tr> <tr id="section-109"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-109">#</a> </div> <p>Compile a unary <strong>OpNode</strong>.</p> </td> <td class="code"> <div class="highlight"><pre><span class="nv">exports.InNode = </span><span class="nx">class</span> <span class="nx">InNode</span> <span class="k">extends</span> <span class="nx">BaseNode</span>
|
||||||
|
|
||||||
<span class="nx">class</span><span class="o">:</span> <span class="s1">'InNode'</span>
|
<span class="nx">class</span><span class="o">:</span> <span class="s1">'InNode'</span>
|
||||||
<span class="nx">children</span><span class="o">:</span> <span class="p">[</span><span class="s1">'object'</span><span class="p">,</span> <span class="s1">'array'</span><span class="p">]</span>
|
<span class="nx">children</span><span class="o">:</span> <span class="p">[</span><span class="s1">'object'</span><span class="p">,</span> <span class="s1">'array'</span><span class="p">]</span>
|
||||||
|
@ -918,9 +921,9 @@ to give us the safe references for the variables.</p> </td>
|
||||||
|
|
||||||
<span class="nx">compileLoopTest</span><span class="o">:</span> <span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="o">-></span>
|
<span class="nx">compileLoopTest</span><span class="o">:</span> <span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="o">-></span>
|
||||||
<span class="p">[</span><span class="nx">@arr1</span><span class="p">,</span> <span class="nx">@arr2</span><span class="p">]</span> <span class="o">=</span> <span class="nx">@array</span><span class="p">.</span><span class="nx">compileReference</span> <span class="nx">o</span><span class="p">,</span> <span class="nx">precompile</span><span class="o">:</span> <span class="kc">yes</span>
|
<span class="p">[</span><span class="nx">@arr1</span><span class="p">,</span> <span class="nx">@arr2</span><span class="p">]</span> <span class="o">=</span> <span class="nx">@array</span><span class="p">.</span><span class="nx">compileReference</span> <span class="nx">o</span><span class="p">,</span> <span class="nx">precompile</span><span class="o">:</span> <span class="kc">yes</span>
|
||||||
<span class="p">[</span><span class="nx">i</span><span class="p">,</span> <span class="nx">l</span><span class="p">]</span> <span class="o">=</span> <span class="p">[</span><span class="nx">o</span><span class="p">.</span><span class="nx">scope</span><span class="p">.</span><span class="nx">freeVariable</span><span class="p">(),</span> <span class="nx">o</span><span class="p">.</span><span class="nx">scope</span><span class="p">.</span><span class="nx">freeVariable</span><span class="p">()]</span>
|
<span class="p">[</span><span class="nx">i</span><span class="p">,</span> <span class="nx">l</span><span class="p">]</span> <span class="o">=</span> <span class="p">[</span><span class="nx">o</span><span class="p">.</span><span class="nx">scope</span><span class="p">.</span><span class="nx">freeVariable</span><span class="p">(</span><span class="s1">'i'</span><span class="p">),</span> <span class="nx">o</span><span class="p">.</span><span class="nx">scope</span><span class="p">.</span><span class="nx">freeVariable</span><span class="p">(</span><span class="s1">'len'</span><span class="p">)]</span>
|
||||||
<span class="nv">prefix = </span><span class="k">if</span> <span class="nx">@obj1</span> <span class="o">isnt</span> <span class="nx">@obj2</span> <span class="k">then</span> <span class="nx">@obj1</span> <span class="o">+</span> <span class="s1">'; '</span> <span class="k">else</span> <span class="s1">''</span>
|
<span class="nv">prefix = </span><span class="k">if</span> <span class="nx">@obj1</span> <span class="o">isnt</span> <span class="nx">@obj2</span> <span class="k">then</span> <span class="nx">@obj1</span> <span class="o">+</span> <span class="s1">'; '</span> <span class="k">else</span> <span class="s1">''</span>
|
||||||
<span class="s2">"(function(){ #{prefix}for (var #{i}=0, #{l}=#{@arr1}.length; #{i}<#{l}; #{i}++) { if (#{@arr2}[#{i}] === #{@obj2}) return true; } return false; }).call(this)"</span></pre></div> </td> </tr> <tr id="section-111"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-111">#</a> </div> <h3>InNode</h3> </td> <td class="code"> <div class="highlight"><pre></pre></div> </td> </tr> <tr id="section-112"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-112">#</a> </div> <h3>TryNode</h3> </td> <td class="code"> <div class="highlight"><pre><span class="nv">exports.TryNode = </span><span class="nx">class</span> <span class="nx">TryNode</span> <span class="k">extends</span> <span class="nx">BaseNode</span>
|
<span class="s2">"(function(){ #{prefix}for (var #{i}=0, #{l}=#{@arr1}.length; #{i}<#{l}; #{i}++) { if (#{@arr2}[#{i}] === #{@obj2}) return true; } return false; }).call(this)"</span></pre></div> </td> </tr> <tr id="section-110"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-110">#</a> </div> <h3>InNode</h3> </td> <td class="code"> <div class="highlight"><pre></pre></div> </td> </tr> <tr id="section-111"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-111">#</a> </div> <h3>TryNode</h3> </td> <td class="code"> <div class="highlight"><pre><span class="nv">exports.TryNode = </span><span class="nx">class</span> <span class="nx">TryNode</span> <span class="k">extends</span> <span class="nx">BaseNode</span>
|
||||||
|
|
||||||
<span class="nx">class</span><span class="o">:</span> <span class="s1">'TryNode'</span>
|
<span class="nx">class</span><span class="o">:</span> <span class="s1">'TryNode'</span>
|
||||||
<span class="nx">children</span><span class="o">:</span> <span class="p">[</span><span class="s1">'attempt'</span><span class="p">,</span> <span class="s1">'recovery'</span><span class="p">,</span> <span class="s1">'ensure'</span><span class="p">]</span>
|
<span class="nx">children</span><span class="o">:</span> <span class="p">[</span><span class="s1">'attempt'</span><span class="p">,</span> <span class="s1">'recovery'</span><span class="p">,</span> <span class="s1">'ensure'</span><span class="p">]</span>
|
||||||
|
@ -932,26 +935,26 @@ to give us the safe references for the variables.</p> </td>
|
||||||
<span class="nx">makeReturn</span><span class="o">:</span> <span class="o">-></span>
|
<span class="nx">makeReturn</span><span class="o">:</span> <span class="o">-></span>
|
||||||
<span class="vi">@attempt = </span><span class="nx">@attempt</span><span class="p">.</span><span class="nx">makeReturn</span><span class="p">()</span> <span class="k">if</span> <span class="nx">@attempt</span>
|
<span class="vi">@attempt = </span><span class="nx">@attempt</span><span class="p">.</span><span class="nx">makeReturn</span><span class="p">()</span> <span class="k">if</span> <span class="nx">@attempt</span>
|
||||||
<span class="vi">@recovery = </span><span class="nx">@recovery</span><span class="p">.</span><span class="nx">makeReturn</span><span class="p">()</span> <span class="k">if</span> <span class="nx">@recovery</span>
|
<span class="vi">@recovery = </span><span class="nx">@recovery</span><span class="p">.</span><span class="nx">makeReturn</span><span class="p">()</span> <span class="k">if</span> <span class="nx">@recovery</span>
|
||||||
<span class="k">this</span></pre></div> </td> </tr> <tr id="section-113"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-113">#</a> </div> <p>A classic <em>try/catch/finally</em> block.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">compileNode</span><span class="o">:</span> <span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="o">-></span>
|
<span class="k">this</span></pre></div> </td> </tr> <tr id="section-112"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-112">#</a> </div> <p>A classic <em>try/catch/finally</em> block.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">compileNode</span><span class="o">:</span> <span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="o">-></span>
|
||||||
<span class="nv">o.indent = </span><span class="nx">@idt</span> <span class="mi">1</span>
|
<span class="nv">o.indent = </span><span class="nx">@idt</span> <span class="mi">1</span>
|
||||||
<span class="nv">o.top = </span><span class="kc">true</span>
|
<span class="nv">o.top = </span><span class="kc">true</span>
|
||||||
<span class="nv">attemptPart = </span><span class="nx">@attempt</span><span class="p">.</span><span class="nx">compile</span><span class="p">(</span><span class="nx">o</span><span class="p">)</span>
|
<span class="nv">attemptPart = </span><span class="nx">@attempt</span><span class="p">.</span><span class="nx">compile</span><span class="p">(</span><span class="nx">o</span><span class="p">)</span>
|
||||||
<span class="nv">errorPart = </span><span class="k">if</span> <span class="nx">@error</span> <span class="k">then</span> <span class="s2">" (#{ @error.compile(o) }) "</span> <span class="k">else</span> <span class="s1">' '</span>
|
<span class="nv">errorPart = </span><span class="k">if</span> <span class="nx">@error</span> <span class="k">then</span> <span class="s2">" (#{ @error.compile(o) }) "</span> <span class="k">else</span> <span class="s1">' '</span>
|
||||||
<span class="nv">catchPart = </span><span class="k">if</span> <span class="nx">@recovery</span> <span class="k">then</span> <span class="s2">" catch#{errorPart}{\n#{ @recovery.compile(o) }\n#{@tab}}"</span> <span class="k">else</span> <span class="s1">''</span>
|
<span class="nv">catchPart = </span><span class="k">if</span> <span class="nx">@recovery</span> <span class="k">then</span> <span class="s2">" catch#{errorPart}{\n#{ @recovery.compile(o) }\n#{@tab}}"</span> <span class="k">else</span> <span class="s1">''</span>
|
||||||
<span class="nv">finallyPart = </span><span class="p">(</span><span class="nx">@ensure</span> <span class="o">or</span> <span class="s1">''</span><span class="p">)</span> <span class="o">and</span> <span class="s1">' finally {\n'</span> <span class="o">+</span> <span class="nx">@ensure</span><span class="p">.</span><span class="nx">compile</span><span class="p">(</span><span class="nx">merge</span><span class="p">(</span><span class="nx">o</span><span class="p">))</span> <span class="o">+</span> <span class="s2">"\n#{@tab}}"</span>
|
<span class="nv">finallyPart = </span><span class="p">(</span><span class="nx">@ensure</span> <span class="o">or</span> <span class="s1">''</span><span class="p">)</span> <span class="o">and</span> <span class="s1">' finally {\n'</span> <span class="o">+</span> <span class="nx">@ensure</span><span class="p">.</span><span class="nx">compile</span><span class="p">(</span><span class="nx">merge</span><span class="p">(</span><span class="nx">o</span><span class="p">))</span> <span class="o">+</span> <span class="s2">"\n#{@tab}}"</span>
|
||||||
<span class="s2">"#{@tab}try {\n#{attemptPart}\n#{@tab}}#{catchPart}#{finallyPart}"</span></pre></div> </td> </tr> <tr id="section-114"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-114">#</a> </div> <p>Compilation is more or less as you would expect -- the <em>finally</em> clause
|
<span class="s2">"#{@tab}try {\n#{attemptPart}\n#{@tab}}#{catchPart}#{finallyPart}"</span></pre></div> </td> </tr> <tr id="section-113"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-113">#</a> </div> <p>Compilation is more or less as you would expect -- the <em>finally</em> clause
|
||||||
is optional, the <em>catch</em> is not.</p> </td> <td class="code"> <div class="highlight"><pre></pre></div> </td> </tr> <tr id="section-115"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-115">#</a> </div> <h3>ThrowNode</h3> </td> <td class="code"> <div class="highlight"><pre><span class="nv">exports.ThrowNode = </span><span class="nx">class</span> <span class="nx">ThrowNode</span> <span class="k">extends</span> <span class="nx">BaseNode</span>
|
is optional, the <em>catch</em> is not.</p> </td> <td class="code"> <div class="highlight"><pre></pre></div> </td> </tr> <tr id="section-114"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-114">#</a> </div> <h3>ThrowNode</h3> </td> <td class="code"> <div class="highlight"><pre><span class="nv">exports.ThrowNode = </span><span class="nx">class</span> <span class="nx">ThrowNode</span> <span class="k">extends</span> <span class="nx">BaseNode</span>
|
||||||
|
|
||||||
<span class="nx">class</span><span class="o">:</span> <span class="s1">'ThrowNode'</span>
|
<span class="nx">class</span><span class="o">:</span> <span class="s1">'ThrowNode'</span>
|
||||||
<span class="nx">children</span><span class="o">:</span> <span class="p">[</span><span class="s1">'expression'</span><span class="p">]</span>
|
<span class="nx">children</span><span class="o">:</span> <span class="p">[</span><span class="s1">'expression'</span><span class="p">]</span>
|
||||||
<span class="nx">isStatement</span><span class="o">:</span> <span class="o">-></span> <span class="kc">yes</span>
|
<span class="nx">isStatement</span><span class="o">:</span> <span class="o">-></span> <span class="kc">yes</span>
|
||||||
|
|
||||||
<span class="nx">constructor</span><span class="o">:</span> <span class="p">(</span><span class="nx">@expression</span><span class="p">)</span> <span class="o">-></span>
|
<span class="nx">constructor</span><span class="o">:</span> <span class="p">(</span><span class="nx">@expression</span><span class="p">)</span> <span class="o">-></span>
|
||||||
<span class="k">super</span><span class="p">()</span></pre></div> </td> </tr> <tr id="section-116"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-116">#</a> </div> <p>Simple node to throw an exception.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">makeReturn</span><span class="o">:</span> <span class="o">-></span>
|
<span class="k">super</span><span class="p">()</span></pre></div> </td> </tr> <tr id="section-115"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-115">#</a> </div> <p>Simple node to throw an exception.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">makeReturn</span><span class="o">:</span> <span class="o">-></span>
|
||||||
<span class="k">return</span> <span class="k">this</span>
|
<span class="k">return</span> <span class="k">this</span>
|
||||||
|
|
||||||
<span class="nx">compileNode</span><span class="o">:</span> <span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="o">-></span>
|
<span class="nx">compileNode</span><span class="o">:</span> <span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="o">-></span>
|
||||||
<span class="s2">"#{@tab}throw #{@expression.compile(o)};"</span></pre></div> </td> </tr> <tr id="section-117"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-117">#</a> </div> <p>A <strong>ThrowNode</strong> is already a return, of sorts...</p> </td> <td class="code"> <div class="highlight"><pre></pre></div> </td> </tr> <tr id="section-118"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-118">#</a> </div> <h3>ExistenceNode</h3> </td> <td class="code"> <div class="highlight"><pre><span class="nv">exports.ExistenceNode = </span><span class="nx">class</span> <span class="nx">ExistenceNode</span> <span class="k">extends</span> <span class="nx">BaseNode</span>
|
<span class="s2">"#{@tab}throw #{@expression.compile(o)};"</span></pre></div> </td> </tr> <tr id="section-116"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-116">#</a> </div> <p>A <strong>ThrowNode</strong> is already a return, of sorts...</p> </td> <td class="code"> <div class="highlight"><pre></pre></div> </td> </tr> <tr id="section-117"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-117">#</a> </div> <h3>ExistenceNode</h3> </td> <td class="code"> <div class="highlight"><pre><span class="nv">exports.ExistenceNode = </span><span class="nx">class</span> <span class="nx">ExistenceNode</span> <span class="k">extends</span> <span class="nx">BaseNode</span>
|
||||||
|
|
||||||
<span class="nx">class</span><span class="o">:</span> <span class="s1">'ExistenceNode'</span>
|
<span class="nx">class</span><span class="o">:</span> <span class="s1">'ExistenceNode'</span>
|
||||||
<span class="nx">children</span><span class="o">:</span> <span class="p">[</span><span class="s1">'expression'</span><span class="p">]</span>
|
<span class="nx">children</span><span class="o">:</span> <span class="p">[</span><span class="s1">'expression'</span><span class="p">]</span>
|
||||||
|
@ -961,13 +964,13 @@ is optional, the <em>catch</em> is not.</p> </td> <td cl
|
||||||
|
|
||||||
<span class="nx">compileNode</span><span class="o">:</span> <span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="o">-></span>
|
<span class="nx">compileNode</span><span class="o">:</span> <span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="o">-></span>
|
||||||
<span class="nv">test = </span><span class="nx">ExistenceNode</span><span class="p">.</span><span class="nx">compileTest</span><span class="p">(</span><span class="nx">o</span><span class="p">,</span> <span class="nx">@expression</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span>
|
<span class="nv">test = </span><span class="nx">ExistenceNode</span><span class="p">.</span><span class="nx">compileTest</span><span class="p">(</span><span class="nx">o</span><span class="p">,</span> <span class="nx">@expression</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span>
|
||||||
<span class="k">if</span> <span class="nx">@parenthetical</span> <span class="k">then</span> <span class="nx">test</span><span class="p">.</span><span class="nx">substring</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="nx">test</span><span class="p">.</span><span class="nx">length</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span> <span class="k">else</span> <span class="nx">test</span></pre></div> </td> </tr> <tr id="section-119"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-119">#</a> </div> <p>Checks a variable for existence -- not <em>null</em> and not <em>undefined</em>. This is
|
<span class="k">if</span> <span class="nx">@parenthetical</span> <span class="k">then</span> <span class="nx">test</span><span class="p">.</span><span class="nx">substring</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="nx">test</span><span class="p">.</span><span class="nx">length</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span> <span class="k">else</span> <span class="nx">test</span></pre></div> </td> </tr> <tr id="section-118"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-118">#</a> </div> <p>Checks a variable for existence -- not <em>null</em> and not <em>undefined</em>. This is
|
||||||
similar to <code>.nil?</code> in Ruby, and avoids having to consult a JavaScript truth
|
similar to <code>.nil?</code> in Ruby, and avoids having to consult a JavaScript truth
|
||||||
table.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">@compileTest</span><span class="o">:</span> <span class="p">(</span><span class="nx">o</span><span class="p">,</span> <span class="nx">variable</span><span class="p">)</span> <span class="o">-></span>
|
table.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">@compileTest</span><span class="o">:</span> <span class="p">(</span><span class="nx">o</span><span class="p">,</span> <span class="nx">variable</span><span class="p">)</span> <span class="o">-></span>
|
||||||
<span class="p">[</span><span class="nx">first</span><span class="p">,</span> <span class="nx">second</span><span class="p">]</span> <span class="o">=</span> <span class="nx">variable</span><span class="p">.</span><span class="nx">compileReference</span> <span class="nx">o</span><span class="p">,</span> <span class="nx">precompile</span><span class="o">:</span> <span class="kc">yes</span>
|
<span class="p">[</span><span class="nx">first</span><span class="p">,</span> <span class="nx">second</span><span class="p">]</span> <span class="o">=</span> <span class="nx">variable</span><span class="p">.</span><span class="nx">compileReference</span> <span class="nx">o</span><span class="p">,</span> <span class="nx">precompile</span><span class="o">:</span> <span class="kc">yes</span>
|
||||||
<span class="p">[</span><span class="s2">"(typeof #{first} !== \"undefined\" && #{second} !== null)"</span><span class="p">,</span> <span class="nx">second</span><span class="p">]</span></pre></div> </td> </tr> <tr id="section-120"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-120">#</a> </div> <p>The meat of the <strong>ExistenceNode</strong> is in this static <code>compileTest</code> method
|
<span class="p">[</span><span class="s2">"(typeof #{first} !== \"undefined\" && #{second} !== null)"</span><span class="p">,</span> <span class="nx">second</span><span class="p">]</span></pre></div> </td> </tr> <tr id="section-119"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-119">#</a> </div> <p>The meat of the <strong>ExistenceNode</strong> is in this static <code>compileTest</code> method
|
||||||
because other nodes like to check the existence of their variables as well.
|
because other nodes like to check the existence of their variables as well.
|
||||||
Be careful not to double-evaluate anything.</p> </td> <td class="code"> <div class="highlight"><pre></pre></div> </td> </tr> <tr id="section-121"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-121">#</a> </div> <h3>ParentheticalNode</h3> </td> <td class="code"> <div class="highlight"><pre><span class="nv">exports.ParentheticalNode = </span><span class="nx">class</span> <span class="nx">ParentheticalNode</span> <span class="k">extends</span> <span class="nx">BaseNode</span>
|
Be careful not to double-evaluate anything.</p> </td> <td class="code"> <div class="highlight"><pre></pre></div> </td> </tr> <tr id="section-120"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-120">#</a> </div> <h3>ParentheticalNode</h3> </td> <td class="code"> <div class="highlight"><pre><span class="nv">exports.ParentheticalNode = </span><span class="nx">class</span> <span class="nx">ParentheticalNode</span> <span class="k">extends</span> <span class="nx">BaseNode</span>
|
||||||
|
|
||||||
<span class="nx">class</span><span class="o">:</span> <span class="s1">'ParentheticalNode'</span>
|
<span class="nx">class</span><span class="o">:</span> <span class="s1">'ParentheticalNode'</span>
|
||||||
<span class="nx">children</span><span class="o">:</span> <span class="p">[</span><span class="s1">'expression'</span><span class="p">]</span>
|
<span class="nx">children</span><span class="o">:</span> <span class="p">[</span><span class="s1">'expression'</span><span class="p">]</span>
|
||||||
|
@ -991,11 +994,11 @@ Be careful not to double-evaluate anything.</p> </td> <t
|
||||||
<span class="k">return</span> <span class="nx">code</span> <span class="k">if</span> <span class="nx">top</span> <span class="o">and</span> <span class="nx">@expression</span><span class="p">.</span><span class="nx">isPureStatement</span> <span class="nx">o</span>
|
<span class="k">return</span> <span class="nx">code</span> <span class="k">if</span> <span class="nx">top</span> <span class="o">and</span> <span class="nx">@expression</span><span class="p">.</span><span class="nx">isPureStatement</span> <span class="nx">o</span>
|
||||||
<span class="k">if</span> <span class="nx">@parenthetical</span> <span class="o">or</span> <span class="nx">@isStatement</span> <span class="nx">o</span>
|
<span class="k">if</span> <span class="nx">@parenthetical</span> <span class="o">or</span> <span class="nx">@isStatement</span> <span class="nx">o</span>
|
||||||
<span class="k">return</span> <span class="k">if</span> <span class="nx">top</span> <span class="k">then</span> <span class="nx">@tab</span> <span class="o">+</span> <span class="nx">code</span> <span class="o">+</span> <span class="s1">';'</span> <span class="k">else</span> <span class="nx">code</span>
|
<span class="k">return</span> <span class="k">if</span> <span class="nx">top</span> <span class="k">then</span> <span class="nx">@tab</span> <span class="o">+</span> <span class="nx">code</span> <span class="o">+</span> <span class="s1">';'</span> <span class="k">else</span> <span class="nx">code</span>
|
||||||
<span class="s2">"(#{code})"</span></pre></div> </td> </tr> <tr id="section-122"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-122">#</a> </div> <p>An extra set of parentheses, specified explicitly in the source. At one time
|
<span class="s2">"(#{code})"</span></pre></div> </td> </tr> <tr id="section-121"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-121">#</a> </div> <p>An extra set of parentheses, specified explicitly in the source. At one time
|
||||||
we tried to clean up the results by detecting and removing redundant
|
we tried to clean up the results by detecting and removing redundant
|
||||||
parentheses, but no longer -- you can put in as many as you please.</p>
|
parentheses, but no longer -- you can put in as many as you please.</p>
|
||||||
|
|
||||||
<p>Parentheses are a good way to force any statement to become an expression.</p> </td> <td class="code"> <div class="highlight"><pre></pre></div> </td> </tr> <tr id="section-123"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-123">#</a> </div> <h3>ForNode</h3> </td> <td class="code"> <div class="highlight"><pre><span class="nv">exports.ForNode = </span><span class="nx">class</span> <span class="nx">ForNode</span> <span class="k">extends</span> <span class="nx">BaseNode</span>
|
<p>Parentheses are a good way to force any statement to become an expression.</p> </td> <td class="code"> <div class="highlight"><pre></pre></div> </td> </tr> <tr id="section-122"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-122">#</a> </div> <h3>ForNode</h3> </td> <td class="code"> <div class="highlight"><pre><span class="nv">exports.ForNode = </span><span class="nx">class</span> <span class="nx">ForNode</span> <span class="k">extends</span> <span class="nx">BaseNode</span>
|
||||||
|
|
||||||
<span class="nx">class</span><span class="o">:</span> <span class="s1">'ForNode'</span>
|
<span class="nx">class</span><span class="o">:</span> <span class="s1">'ForNode'</span>
|
||||||
<span class="nx">children</span><span class="o">:</span> <span class="p">[</span><span class="s1">'body'</span><span class="p">,</span> <span class="s1">'source'</span><span class="p">,</span> <span class="s1">'guard'</span><span class="p">]</span>
|
<span class="nx">children</span><span class="o">:</span> <span class="p">[</span><span class="s1">'body'</span><span class="p">,</span> <span class="s1">'source'</span><span class="p">,</span> <span class="s1">'guard'</span><span class="p">]</span>
|
||||||
|
@ -1024,7 +1027,7 @@ parentheses, but no longer -- you can put in as many as you please.</p>
|
||||||
<span class="nx">compileReturnValue</span><span class="o">:</span> <span class="p">(</span><span class="nx">val</span><span class="p">,</span> <span class="nx">o</span><span class="p">)</span> <span class="o">-></span>
|
<span class="nx">compileReturnValue</span><span class="o">:</span> <span class="p">(</span><span class="nx">val</span><span class="p">,</span> <span class="nx">o</span><span class="p">)</span> <span class="o">-></span>
|
||||||
<span class="k">return</span> <span class="s1">'\n'</span> <span class="o">+</span> <span class="k">new</span> <span class="nx">ReturnNode</span><span class="p">(</span><span class="nx">literal</span><span class="p">(</span><span class="nx">val</span><span class="p">)).</span><span class="nx">compile</span><span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="k">if</span> <span class="nx">@returns</span>
|
<span class="k">return</span> <span class="s1">'\n'</span> <span class="o">+</span> <span class="k">new</span> <span class="nx">ReturnNode</span><span class="p">(</span><span class="nx">literal</span><span class="p">(</span><span class="nx">val</span><span class="p">)).</span><span class="nx">compile</span><span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="k">if</span> <span class="nx">@returns</span>
|
||||||
<span class="k">return</span> <span class="s1">'\n'</span> <span class="o">+</span> <span class="nx">val</span> <span class="k">if</span> <span class="nx">val</span>
|
<span class="k">return</span> <span class="s1">'\n'</span> <span class="o">+</span> <span class="nx">val</span> <span class="k">if</span> <span class="nx">val</span>
|
||||||
<span class="s1">''</span></pre></div> </td> </tr> <tr id="section-124"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-124">#</a> </div> <p>CoffeeScript's replacement for the <em>for</em> loop is our array and object
|
<span class="s1">''</span></pre></div> </td> </tr> <tr id="section-123"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-123">#</a> </div> <p>CoffeeScript's replacement for the <em>for</em> loop is our array and object
|
||||||
comprehensions, that compile into <em>for</em> loops here. They also act as an
|
comprehensions, that compile into <em>for</em> loops here. They also act as an
|
||||||
expression, able to return the result of each filtered iteration.</p>
|
expression, able to return the result of each filtered iteration.</p>
|
||||||
|
|
||||||
|
@ -1036,12 +1039,12 @@ you can map and filter in a single pass.</p> </td> <td c
|
||||||
<span class="nv">source = </span><span class="k">if</span> <span class="nx">range</span> <span class="k">then</span> <span class="nx">@source</span><span class="p">.</span><span class="nx">base</span> <span class="k">else</span> <span class="nx">@source</span>
|
<span class="nv">source = </span><span class="k">if</span> <span class="nx">range</span> <span class="k">then</span> <span class="nx">@source</span><span class="p">.</span><span class="nx">base</span> <span class="k">else</span> <span class="nx">@source</span>
|
||||||
<span class="nv">codeInBody = </span><span class="nx">@body</span><span class="p">.</span><span class="nx">contains</span> <span class="p">(</span><span class="nx">n</span><span class="p">)</span> <span class="o">-></span> <span class="nx">n</span> <span class="k">instanceof</span> <span class="nx">CodeNode</span>
|
<span class="nv">codeInBody = </span><span class="nx">@body</span><span class="p">.</span><span class="nx">contains</span> <span class="p">(</span><span class="nx">n</span><span class="p">)</span> <span class="o">-></span> <span class="nx">n</span> <span class="k">instanceof</span> <span class="nx">CodeNode</span>
|
||||||
<span class="nv">scope = </span><span class="nx">o</span><span class="p">.</span><span class="nx">scope</span>
|
<span class="nv">scope = </span><span class="nx">o</span><span class="p">.</span><span class="nx">scope</span>
|
||||||
<span class="nv">name = </span><span class="p">(</span><span class="nx">@name</span> <span class="o">and</span> <span class="nx">@name</span><span class="p">.</span><span class="nx">compile</span><span class="p">(</span><span class="nx">o</span><span class="p">))</span> <span class="o">or</span> <span class="nx">scope</span><span class="p">.</span><span class="nx">freeVariable</span><span class="p">()</span>
|
<span class="nv">name = </span><span class="p">(</span><span class="nx">@name</span> <span class="o">and</span> <span class="nx">@name</span><span class="p">.</span><span class="nx">compile</span><span class="p">(</span><span class="nx">o</span><span class="p">))</span> <span class="o">or</span> <span class="nx">scope</span><span class="p">.</span><span class="nx">freeVariable</span> <span class="s1">'i'</span>
|
||||||
<span class="nv">index = </span><span class="nx">@index</span> <span class="o">and</span> <span class="nx">@index</span><span class="p">.</span><span class="nx">compile</span> <span class="nx">o</span>
|
<span class="nv">index = </span><span class="nx">@index</span> <span class="o">and</span> <span class="nx">@index</span><span class="p">.</span><span class="nx">compile</span> <span class="nx">o</span>
|
||||||
<span class="nx">scope</span><span class="p">.</span><span class="nx">find</span><span class="p">(</span><span class="nx">name</span><span class="p">,</span> <span class="nx">immediate</span><span class="o">:</span> <span class="kc">yes</span><span class="p">)</span> <span class="k">if</span> <span class="nx">name</span> <span class="o">and</span> <span class="o">not</span> <span class="nx">@pattern</span> <span class="o">and</span> <span class="p">(</span><span class="nx">range</span> <span class="o">or</span> <span class="o">not</span> <span class="nx">codeInBody</span><span class="p">)</span>
|
<span class="nx">scope</span><span class="p">.</span><span class="nx">find</span><span class="p">(</span><span class="nx">name</span><span class="p">,</span> <span class="nx">immediate</span><span class="o">:</span> <span class="kc">yes</span><span class="p">)</span> <span class="k">if</span> <span class="nx">name</span> <span class="o">and</span> <span class="o">not</span> <span class="nx">@pattern</span> <span class="o">and</span> <span class="p">(</span><span class="nx">range</span> <span class="o">or</span> <span class="o">not</span> <span class="nx">codeInBody</span><span class="p">)</span>
|
||||||
<span class="nx">scope</span><span class="p">.</span><span class="nx">find</span><span class="p">(</span><span class="nx">index</span><span class="p">,</span> <span class="nx">immediate</span><span class="o">:</span> <span class="kc">yes</span><span class="p">)</span> <span class="k">if</span> <span class="nx">index</span>
|
<span class="nx">scope</span><span class="p">.</span><span class="nx">find</span><span class="p">(</span><span class="nx">index</span><span class="p">,</span> <span class="nx">immediate</span><span class="o">:</span> <span class="kc">yes</span><span class="p">)</span> <span class="k">if</span> <span class="nx">index</span>
|
||||||
<span class="nv">rvar = </span><span class="nx">scope</span><span class="p">.</span><span class="nx">freeVariable</span><span class="p">()</span> <span class="nx">unless</span> <span class="nx">topLevel</span>
|
<span class="nv">rvar = </span><span class="nx">scope</span><span class="p">.</span><span class="nx">freeVariable</span> <span class="s1">'result'</span> <span class="nx">unless</span> <span class="nx">topLevel</span>
|
||||||
<span class="nv">ivar = </span><span class="k">if</span> <span class="nx">codeInBody</span> <span class="k">then</span> <span class="nx">scope</span><span class="p">.</span><span class="nx">freeVariable</span><span class="p">()</span> <span class="k">else</span> <span class="k">if</span> <span class="nx">range</span> <span class="k">then</span> <span class="nx">name</span> <span class="k">else</span> <span class="nx">index</span> <span class="o">or</span> <span class="nx">scope</span><span class="p">.</span><span class="nx">freeVariable</span><span class="p">()</span>
|
<span class="nv">ivar = </span><span class="k">if</span> <span class="nx">codeInBody</span> <span class="k">then</span> <span class="nx">scope</span><span class="p">.</span><span class="nx">freeVariable</span> <span class="s1">'i'</span> <span class="k">else</span> <span class="k">if</span> <span class="nx">range</span> <span class="k">then</span> <span class="nx">name</span> <span class="k">else</span> <span class="nx">index</span> <span class="o">or</span> <span class="nx">scope</span><span class="p">.</span><span class="nx">freeVariable</span> <span class="s1">'i'</span>
|
||||||
<span class="nv">varPart = </span><span class="s1">''</span>
|
<span class="nv">varPart = </span><span class="s1">''</span>
|
||||||
<span class="nv">guardPart = </span><span class="s1">''</span>
|
<span class="nv">guardPart = </span><span class="s1">''</span>
|
||||||
<span class="nv">body = </span><span class="nx">Expressions</span><span class="p">.</span><span class="nx">wrap</span><span class="p">([</span><span class="nx">@body</span><span class="p">])</span>
|
<span class="nv">body = </span><span class="nx">Expressions</span><span class="p">.</span><span class="nx">wrap</span><span class="p">([</span><span class="nx">@body</span><span class="p">])</span>
|
||||||
|
@ -1049,14 +1052,14 @@ you can map and filter in a single pass.</p> </td> <td c
|
||||||
<span class="nv">sourcePart = </span><span class="nx">source</span><span class="p">.</span><span class="nx">compileVariables</span><span class="p">(</span><span class="nx">o</span><span class="p">)</span>
|
<span class="nv">sourcePart = </span><span class="nx">source</span><span class="p">.</span><span class="nx">compileVariables</span><span class="p">(</span><span class="nx">o</span><span class="p">)</span>
|
||||||
<span class="nv">forPart = </span><span class="nx">source</span><span class="p">.</span><span class="nx">compile</span> <span class="nx">merge</span> <span class="nx">o</span><span class="p">,</span> <span class="nx">index</span><span class="o">:</span> <span class="nx">ivar</span><span class="p">,</span> <span class="nx">step</span><span class="o">:</span> <span class="nx">@step</span>
|
<span class="nv">forPart = </span><span class="nx">source</span><span class="p">.</span><span class="nx">compile</span> <span class="nx">merge</span> <span class="nx">o</span><span class="p">,</span> <span class="nx">index</span><span class="o">:</span> <span class="nx">ivar</span><span class="p">,</span> <span class="nx">step</span><span class="o">:</span> <span class="nx">@step</span>
|
||||||
<span class="k">else</span>
|
<span class="k">else</span>
|
||||||
<span class="nv">svar = </span><span class="nx">scope</span><span class="p">.</span><span class="nx">freeVariable</span><span class="p">()</span>
|
<span class="nv">svar = </span><span class="nx">scope</span><span class="p">.</span><span class="nx">freeVariable</span> <span class="s1">'ref'</span>
|
||||||
<span class="nv">sourcePart = </span><span class="s2">"#{svar} = #{ @source.compile(o) };"</span>
|
<span class="nv">sourcePart = </span><span class="s2">"#{svar} = #{ @source.compile(o) };"</span>
|
||||||
<span class="k">if</span> <span class="nx">@pattern</span>
|
<span class="k">if</span> <span class="nx">@pattern</span>
|
||||||
<span class="nv">namePart = </span><span class="k">new</span> <span class="nx">AssignNode</span><span class="p">(</span><span class="nx">@name</span><span class="p">,</span> <span class="nx">literal</span><span class="p">(</span><span class="s2">"#{svar}[#{ivar}]"</span><span class="p">)).</span><span class="nx">compile</span><span class="p">(</span><span class="nx">merge</span> <span class="nx">o</span><span class="p">,</span> <span class="p">{</span><span class="nx">indent</span><span class="o">:</span> <span class="nx">@idt</span><span class="p">(</span><span class="mi">1</span><span class="p">),</span> <span class="nx">top</span><span class="o">:</span> <span class="kc">true</span><span class="p">})</span> <span class="o">+</span> <span class="s1">'\n'</span>
|
<span class="nv">namePart = </span><span class="k">new</span> <span class="nx">AssignNode</span><span class="p">(</span><span class="nx">@name</span><span class="p">,</span> <span class="nx">literal</span><span class="p">(</span><span class="s2">"#{svar}[#{ivar}]"</span><span class="p">)).</span><span class="nx">compile</span><span class="p">(</span><span class="nx">merge</span> <span class="nx">o</span><span class="p">,</span> <span class="p">{</span><span class="nx">indent</span><span class="o">:</span> <span class="nx">@idt</span><span class="p">(</span><span class="mi">1</span><span class="p">),</span> <span class="nx">top</span><span class="o">:</span> <span class="kc">true</span><span class="p">,</span> <span class="nx">keepLevel</span><span class="o">:</span> <span class="kc">yes</span><span class="p">})</span> <span class="o">+</span> <span class="s1">'\n'</span>
|
||||||
<span class="k">else</span>
|
<span class="k">else</span>
|
||||||
<span class="nv">namePart = </span><span class="s2">"#{name} = #{svar}[#{ivar}]"</span> <span class="k">if</span> <span class="nx">name</span>
|
<span class="nv">namePart = </span><span class="s2">"#{name} = #{svar}[#{ivar}]"</span> <span class="k">if</span> <span class="nx">name</span>
|
||||||
<span class="nx">unless</span> <span class="nx">@object</span>
|
<span class="nx">unless</span> <span class="nx">@object</span>
|
||||||
<span class="nv">lvar = </span><span class="nx">scope</span><span class="p">.</span><span class="nx">freeVariable</span><span class="p">()</span>
|
<span class="nv">lvar = </span><span class="nx">scope</span><span class="p">.</span><span class="nx">freeVariable</span> <span class="s1">'len'</span>
|
||||||
<span class="nv">stepPart = </span><span class="k">if</span> <span class="nx">@step</span> <span class="k">then</span> <span class="s2">"#{ivar} += #{ @step.compile(o) }"</span> <span class="k">else</span> <span class="s2">"#{ivar}++"</span>
|
<span class="nv">stepPart = </span><span class="k">if</span> <span class="nx">@step</span> <span class="k">then</span> <span class="s2">"#{ivar} += #{ @step.compile(o) }"</span> <span class="k">else</span> <span class="s2">"#{ivar}++"</span>
|
||||||
<span class="nv">forPart = </span><span class="s2">"#{ivar} = 0, #{lvar} = #{svar}.length; #{ivar} < #{lvar}; #{stepPart}"</span>
|
<span class="nv">forPart = </span><span class="s2">"#{ivar} = 0, #{lvar} = #{svar}.length; #{ivar} < #{lvar}; #{stepPart}"</span>
|
||||||
<span class="nv">sourcePart = </span><span class="p">(</span><span class="k">if</span> <span class="nx">rvar</span> <span class="k">then</span> <span class="s2">"#{rvar} = []; "</span> <span class="k">else</span> <span class="s1">''</span><span class="p">)</span> <span class="o">+</span> <span class="nx">sourcePart</span>
|
<span class="nv">sourcePart = </span><span class="p">(</span><span class="k">if</span> <span class="nx">rvar</span> <span class="k">then</span> <span class="s2">"#{rvar} = []; "</span> <span class="k">else</span> <span class="s1">''</span><span class="p">)</span> <span class="o">+</span> <span class="nx">sourcePart</span>
|
||||||
|
@ -1078,10 +1081,10 @@ you can map and filter in a single pass.</p> </td> <td c
|
||||||
<span class="nv">guardPart = </span><span class="s2">"\n#{@idt(1)}if (!#{utility('hasProp')}.call(#{svar}, #{ivar})) continue;"</span> <span class="nx">unless</span> <span class="nx">@raw</span>
|
<span class="nv">guardPart = </span><span class="s2">"\n#{@idt(1)}if (!#{utility('hasProp')}.call(#{svar}, #{ivar})) continue;"</span> <span class="nx">unless</span> <span class="nx">@raw</span>
|
||||||
<span class="nv">body = </span><span class="nx">body</span><span class="p">.</span><span class="nx">compile</span><span class="p">(</span><span class="nx">merge</span><span class="p">(</span><span class="nx">o</span><span class="p">,</span> <span class="p">{</span><span class="nx">indent</span><span class="o">:</span> <span class="nx">@idt</span><span class="p">(</span><span class="mi">1</span><span class="p">),</span> <span class="nx">top</span><span class="o">:</span> <span class="kc">true</span><span class="p">}))</span>
|
<span class="nv">body = </span><span class="nx">body</span><span class="p">.</span><span class="nx">compile</span><span class="p">(</span><span class="nx">merge</span><span class="p">(</span><span class="nx">o</span><span class="p">,</span> <span class="p">{</span><span class="nx">indent</span><span class="o">:</span> <span class="nx">@idt</span><span class="p">(</span><span class="mi">1</span><span class="p">),</span> <span class="nx">top</span><span class="o">:</span> <span class="kc">true</span><span class="p">}))</span>
|
||||||
<span class="nv">vars = </span><span class="k">if</span> <span class="nx">range</span> <span class="k">then</span> <span class="nx">name</span> <span class="k">else</span> <span class="s2">"#{name}, #{ivar}"</span>
|
<span class="nv">vars = </span><span class="k">if</span> <span class="nx">range</span> <span class="k">then</span> <span class="nx">name</span> <span class="k">else</span> <span class="s2">"#{name}, #{ivar}"</span>
|
||||||
<span class="s2">"#{sourcePart}for (#{forPart}) {#{guardPart}\n#{varPart}#{body}\n#{@tab}}#{returnResult}"</span></pre></div> </td> </tr> <tr id="section-125"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-125">#</a> </div> <p>Welcome to the hairiest method in all of CoffeeScript. Handles the inner
|
<span class="s2">"#{sourcePart}for (#{forPart}) {#{guardPart}\n#{varPart}#{body}\n#{@tab}}#{returnResult}"</span></pre></div> </td> </tr> <tr id="section-124"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-124">#</a> </div> <p>Welcome to the hairiest method in all of CoffeeScript. Handles the inner
|
||||||
loop, filtering, stepping, and result saving for array, object, and range
|
loop, filtering, stepping, and result saving for array, object, and range
|
||||||
comprehensions. Some of the generated code can be shared in common, and
|
comprehensions. Some of the generated code can be shared in common, and
|
||||||
some cannot.</p> </td> <td class="code"> <div class="highlight"><pre></pre></div> </td> </tr> <tr id="section-126"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-126">#</a> </div> <h3>SwitchNode</h3> </td> <td class="code"> <div class="highlight"><pre><span class="nv">exports.SwitchNode = </span><span class="nx">class</span> <span class="nx">SwitchNode</span> <span class="k">extends</span> <span class="nx">BaseNode</span>
|
some cannot.</p> </td> <td class="code"> <div class="highlight"><pre></pre></div> </td> </tr> <tr id="section-125"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-125">#</a> </div> <h3>SwitchNode</h3> </td> <td class="code"> <div class="highlight"><pre><span class="nv">exports.SwitchNode = </span><span class="nx">class</span> <span class="nx">SwitchNode</span> <span class="k">extends</span> <span class="nx">BaseNode</span>
|
||||||
|
|
||||||
<span class="nx">class</span><span class="o">:</span> <span class="s1">'SwitchNode'</span>
|
<span class="nx">class</span><span class="o">:</span> <span class="s1">'SwitchNode'</span>
|
||||||
<span class="nx">children</span><span class="o">:</span> <span class="p">[</span><span class="s1">'subject'</span><span class="p">,</span> <span class="s1">'cases'</span><span class="p">,</span> <span class="s1">'otherwise'</span><span class="p">]</span>
|
<span class="nx">children</span><span class="o">:</span> <span class="p">[</span><span class="s1">'subject'</span><span class="p">,</span> <span class="s1">'cases'</span><span class="p">,</span> <span class="s1">'otherwise'</span><span class="p">]</span>
|
||||||
|
@ -1099,7 +1102,7 @@ some cannot.</p> </td> <td class="code"> <
|
||||||
<span class="k">this</span>
|
<span class="k">this</span>
|
||||||
|
|
||||||
<span class="nx">compileNode</span><span class="o">:</span> <span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="o">-></span>
|
<span class="nx">compileNode</span><span class="o">:</span> <span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="o">-></span>
|
||||||
<span class="nv">idt = o.indent = </span><span class="nx">@idt</span> <span class="mi">1</span>
|
<span class="nv">idt = o.indent = </span><span class="nx">@idt</span> <span class="mi">2</span>
|
||||||
<span class="nv">o.top = </span><span class="kc">yes</span>
|
<span class="nv">o.top = </span><span class="kc">yes</span>
|
||||||
<span class="nv">code = </span><span class="s2">"#{ @tab }switch (#{ @subject.compile o }) {"</span>
|
<span class="nv">code = </span><span class="s2">"#{ @tab }switch (#{ @subject.compile o }) {"</span>
|
||||||
<span class="k">for</span> <span class="nx">pair</span> <span class="k">in</span> <span class="nx">@cases</span>
|
<span class="k">for</span> <span class="nx">pair</span> <span class="k">in</span> <span class="nx">@cases</span>
|
||||||
|
@ -1107,13 +1110,13 @@ some cannot.</p> </td> <td class="code"> <
|
||||||
<span class="nv">exprs = </span><span class="nx">block</span><span class="p">.</span><span class="nx">expressions</span>
|
<span class="nv">exprs = </span><span class="nx">block</span><span class="p">.</span><span class="nx">expressions</span>
|
||||||
<span class="k">for</span> <span class="nx">condition</span> <span class="k">in</span> <span class="nx">flatten</span> <span class="p">[</span><span class="nx">conditions</span><span class="p">]</span>
|
<span class="k">for</span> <span class="nx">condition</span> <span class="k">in</span> <span class="nx">flatten</span> <span class="p">[</span><span class="nx">conditions</span><span class="p">]</span>
|
||||||
<span class="nv">condition = </span><span class="k">new</span> <span class="nx">OpNode</span> <span class="s1">'!!'</span><span class="p">,</span> <span class="k">new</span> <span class="nx">ParentheticalNode</span> <span class="nx">condition</span> <span class="k">if</span> <span class="nx">@tags</span><span class="p">.</span><span class="nx">subjectless</span>
|
<span class="nv">condition = </span><span class="k">new</span> <span class="nx">OpNode</span> <span class="s1">'!!'</span><span class="p">,</span> <span class="k">new</span> <span class="nx">ParentheticalNode</span> <span class="nx">condition</span> <span class="k">if</span> <span class="nx">@tags</span><span class="p">.</span><span class="nx">subjectless</span>
|
||||||
<span class="nx">code</span> <span class="o">+=</span> <span class="s2">"\n#{ @tab }case #{ condition.compile o }:"</span>
|
<span class="nx">code</span> <span class="o">+=</span> <span class="s2">"\n#{ @idt(1) }case #{ condition.compile o }:"</span>
|
||||||
<span class="nx">code</span> <span class="o">+=</span> <span class="s2">"\n#{ block.compile o }"</span>
|
<span class="nx">code</span> <span class="o">+=</span> <span class="s2">"\n#{ block.compile o }"</span>
|
||||||
<span class="nx">code</span> <span class="o">+=</span> <span class="s2">"\n#{ idt }break;"</span> <span class="nx">unless</span> <span class="nx">exprs</span><span class="p">[</span><span class="nx">exprs</span><span class="p">.</span><span class="nx">length</span> <span class="o">-</span> <span class="mi">1</span><span class="p">]</span> <span class="k">instanceof</span> <span class="nx">ReturnNode</span>
|
<span class="nx">code</span> <span class="o">+=</span> <span class="s2">"\n#{ idt }break;"</span> <span class="nx">unless</span> <span class="nx">exprs</span><span class="p">[</span><span class="nx">exprs</span><span class="p">.</span><span class="nx">length</span> <span class="o">-</span> <span class="mi">1</span><span class="p">]</span> <span class="k">instanceof</span> <span class="nx">ReturnNode</span>
|
||||||
<span class="k">if</span> <span class="nx">@otherwise</span>
|
<span class="k">if</span> <span class="nx">@otherwise</span>
|
||||||
<span class="nx">code</span> <span class="o">+=</span> <span class="s2">"\n#{ @tab }default:\n#{ @otherwise.compile o }"</span>
|
<span class="nx">code</span> <span class="o">+=</span> <span class="s2">"\n#{ @idt(1) }default:\n#{ @otherwise.compile o }"</span>
|
||||||
<span class="nx">code</span> <span class="o">+=</span> <span class="s2">"\n#{ @tab }}"</span>
|
<span class="nx">code</span> <span class="o">+=</span> <span class="s2">"\n#{ @tab }}"</span>
|
||||||
<span class="nx">code</span></pre></div> </td> </tr> <tr id="section-127"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-127">#</a> </div> <p>A JavaScript <em>switch</em> statement. Converts into a returnable expression on-demand.</p> </td> <td class="code"> <div class="highlight"><pre></pre></div> </td> </tr> <tr id="section-128"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-128">#</a> </div> <h3>IfNode</h3> </td> <td class="code"> <div class="highlight"><pre><span class="nv">exports.IfNode = </span><span class="nx">class</span> <span class="nx">IfNode</span> <span class="k">extends</span> <span class="nx">BaseNode</span>
|
<span class="nx">code</span></pre></div> </td> </tr> <tr id="section-126"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-126">#</a> </div> <p>A JavaScript <em>switch</em> statement. Converts into a returnable expression on-demand.</p> </td> <td class="code"> <div class="highlight"><pre></pre></div> </td> </tr> <tr id="section-127"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-127">#</a> </div> <h3>IfNode</h3> </td> <td class="code"> <div class="highlight"><pre><span class="nv">exports.IfNode = </span><span class="nx">class</span> <span class="nx">IfNode</span> <span class="k">extends</span> <span class="nx">BaseNode</span>
|
||||||
|
|
||||||
<span class="nx">class</span><span class="o">:</span> <span class="s1">'IfNode'</span>
|
<span class="nx">class</span><span class="o">:</span> <span class="s1">'IfNode'</span>
|
||||||
<span class="nx">children</span><span class="o">:</span> <span class="p">[</span><span class="s1">'condition'</span><span class="p">,</span> <span class="s1">'body'</span><span class="p">,</span> <span class="s1">'elseBody'</span><span class="p">,</span> <span class="s1">'assigner'</span><span class="p">]</span>
|
<span class="nx">children</span><span class="o">:</span> <span class="p">[</span><span class="s1">'condition'</span><span class="p">,</span> <span class="s1">'body'</span><span class="p">,</span> <span class="s1">'elseBody'</span><span class="p">,</span> <span class="s1">'assigner'</span><span class="p">]</span>
|
||||||
|
@ -1135,7 +1138,7 @@ some cannot.</p> </td> <td class="code"> <
|
||||||
|
|
||||||
<span class="nx">forceStatement</span><span class="o">:</span> <span class="o">-></span>
|
<span class="nx">forceStatement</span><span class="o">:</span> <span class="o">-></span>
|
||||||
<span class="vi">@tags.statement = </span><span class="kc">true</span>
|
<span class="vi">@tags.statement = </span><span class="kc">true</span>
|
||||||
<span class="k">this</span></pre></div> </td> </tr> <tr id="section-129"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-129">#</a> </div> <p><em>If/else</em> statements. Acts as an expression by pushing down requested returns
|
<span class="k">this</span></pre></div> </td> </tr> <tr id="section-128"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-128">#</a> </div> <p><em>If/else</em> statements. Acts as an expression by pushing down requested returns
|
||||||
to the last line of each clause.</p>
|
to the last line of each clause.</p>
|
||||||
|
|
||||||
<p>Single-expression <strong>IfNodes</strong> are compiled into ternary operators if possible,
|
<p>Single-expression <strong>IfNodes</strong> are compiled into ternary operators if possible,
|
||||||
|
@ -1145,7 +1148,7 @@ because ternaries are already proper expressions, and don't need conversion.</p>
|
||||||
<span class="k">else</span>
|
<span class="k">else</span>
|
||||||
<span class="vi">@isChain = </span><span class="nx">elseBody</span> <span class="k">instanceof</span> <span class="nx">IfNode</span>
|
<span class="vi">@isChain = </span><span class="nx">elseBody</span> <span class="k">instanceof</span> <span class="nx">IfNode</span>
|
||||||
<span class="vi">@elseBody = </span><span class="nx">@ensureExpressions</span> <span class="nx">elseBody</span>
|
<span class="vi">@elseBody = </span><span class="nx">@ensureExpressions</span> <span class="nx">elseBody</span>
|
||||||
<span class="k">this</span></pre></div> </td> </tr> <tr id="section-130"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-130">#</a> </div> <p>Rewrite a chain of <strong>IfNodes</strong> to add a default case as the final <em>else</em>.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">isStatement</span><span class="o">:</span> <span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="o">-></span>
|
<span class="k">this</span></pre></div> </td> </tr> <tr id="section-129"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-129">#</a> </div> <p>Rewrite a chain of <strong>IfNodes</strong> to add a default case as the final <em>else</em>.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">isStatement</span><span class="o">:</span> <span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="o">-></span>
|
||||||
<span class="nx">@statement</span> <span class="o">or=</span> <span class="o">!!</span><span class="p">((</span><span class="nx">o</span> <span class="o">and</span> <span class="nx">o</span><span class="p">.</span><span class="nx">top</span><span class="p">)</span> <span class="o">or</span> <span class="nx">@tags</span><span class="p">.</span><span class="nx">statement</span> <span class="o">or</span> <span class="nx">@bodyNode</span><span class="p">().</span><span class="nx">isStatement</span><span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="o">or</span> <span class="p">(</span><span class="nx">@elseBody</span> <span class="o">and</span> <span class="nx">@elseBodyNode</span><span class="p">().</span><span class="nx">isStatement</span><span class="p">(</span><span class="nx">o</span><span class="p">)))</span>
|
<span class="nx">@statement</span> <span class="o">or=</span> <span class="o">!!</span><span class="p">((</span><span class="nx">o</span> <span class="o">and</span> <span class="nx">o</span><span class="p">.</span><span class="nx">top</span><span class="p">)</span> <span class="o">or</span> <span class="nx">@tags</span><span class="p">.</span><span class="nx">statement</span> <span class="o">or</span> <span class="nx">@bodyNode</span><span class="p">().</span><span class="nx">isStatement</span><span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="o">or</span> <span class="p">(</span><span class="nx">@elseBody</span> <span class="o">and</span> <span class="nx">@elseBodyNode</span><span class="p">().</span><span class="nx">isStatement</span><span class="p">(</span><span class="nx">o</span><span class="p">)))</span>
|
||||||
|
|
||||||
<span class="nx">compileCondition</span><span class="o">:</span> <span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="o">-></span>
|
<span class="nx">compileCondition</span><span class="o">:</span> <span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="o">-></span>
|
||||||
|
@ -1165,7 +1168,7 @@ because ternaries are already proper expressions, and don't need conversion.</p>
|
||||||
<span class="k">new</span> <span class="nx">ReturnNode</span> <span class="k">this</span>
|
<span class="k">new</span> <span class="nx">ReturnNode</span> <span class="k">this</span>
|
||||||
|
|
||||||
<span class="nx">ensureExpressions</span><span class="o">:</span> <span class="p">(</span><span class="nx">node</span><span class="p">)</span> <span class="o">-></span>
|
<span class="nx">ensureExpressions</span><span class="o">:</span> <span class="p">(</span><span class="nx">node</span><span class="p">)</span> <span class="o">-></span>
|
||||||
<span class="k">if</span> <span class="nx">node</span> <span class="k">instanceof</span> <span class="nx">Expressions</span> <span class="k">then</span> <span class="nx">node</span> <span class="k">else</span> <span class="k">new</span> <span class="nx">Expressions</span> <span class="p">[</span><span class="nx">node</span><span class="p">]</span></pre></div> </td> </tr> <tr id="section-131"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-131">#</a> </div> <p>The <strong>IfNode</strong> only compiles into a statement if either of its bodies needs
|
<span class="k">if</span> <span class="nx">node</span> <span class="k">instanceof</span> <span class="nx">Expressions</span> <span class="k">then</span> <span class="nx">node</span> <span class="k">else</span> <span class="k">new</span> <span class="nx">Expressions</span> <span class="p">[</span><span class="nx">node</span><span class="p">]</span></pre></div> </td> </tr> <tr id="section-130"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-130">#</a> </div> <p>The <strong>IfNode</strong> only compiles into a statement if either of its bodies needs
|
||||||
to be a statement. Otherwise a ternary is safe.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">compileStatement</span><span class="o">:</span> <span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="o">-></span>
|
to be a statement. Otherwise a ternary is safe.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">compileStatement</span><span class="o">:</span> <span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="o">-></span>
|
||||||
<span class="nv">top = </span><span class="nx">del</span> <span class="nx">o</span><span class="p">,</span> <span class="s1">'top'</span>
|
<span class="nv">top = </span><span class="nx">del</span> <span class="nx">o</span><span class="p">,</span> <span class="s1">'top'</span>
|
||||||
<span class="nv">child = </span><span class="nx">del</span> <span class="nx">o</span><span class="p">,</span> <span class="s1">'chainChild'</span>
|
<span class="nv">child = </span><span class="nx">del</span> <span class="nx">o</span><span class="p">,</span> <span class="s1">'chainChild'</span>
|
||||||
|
@ -1181,23 +1184,23 @@ to be a statement. Otherwise a ternary is safe.</p> </td>
|
||||||
<span class="s1">' else '</span> <span class="o">+</span> <span class="nx">@elseBodyNode</span><span class="p">().</span><span class="nx">compile</span><span class="p">(</span><span class="nx">merge</span><span class="p">(</span><span class="nx">o</span><span class="p">,</span> <span class="p">{</span><span class="nx">indent</span><span class="o">:</span> <span class="nx">@idt</span><span class="p">(),</span> <span class="nx">chainChild</span><span class="o">:</span> <span class="kc">true</span><span class="p">}))</span>
|
<span class="s1">' else '</span> <span class="o">+</span> <span class="nx">@elseBodyNode</span><span class="p">().</span><span class="nx">compile</span><span class="p">(</span><span class="nx">merge</span><span class="p">(</span><span class="nx">o</span><span class="p">,</span> <span class="p">{</span><span class="nx">indent</span><span class="o">:</span> <span class="nx">@idt</span><span class="p">(),</span> <span class="nx">chainChild</span><span class="o">:</span> <span class="kc">true</span><span class="p">}))</span>
|
||||||
<span class="k">else</span>
|
<span class="k">else</span>
|
||||||
<span class="s2">" else {\n#{ @elseBody.compile(o) }\n#{@tab}}"</span>
|
<span class="s2">" else {\n#{ @elseBody.compile(o) }\n#{@tab}}"</span>
|
||||||
<span class="s2">"#{ifPart}#{elsePart}"</span></pre></div> </td> </tr> <tr id="section-132"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-132">#</a> </div> <p>Compile the <strong>IfNode</strong> as a regular <em>if-else</em> statement. Flattened chains
|
<span class="s2">"#{ifPart}#{elsePart}"</span></pre></div> </td> </tr> <tr id="section-131"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-131">#</a> </div> <p>Compile the <strong>IfNode</strong> as a regular <em>if-else</em> statement. Flattened chains
|
||||||
force inner <em>else</em> bodies into statement form.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">compileTernary</span><span class="o">:</span> <span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="o">-></span>
|
force inner <em>else</em> bodies into statement form.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">compileTernary</span><span class="o">:</span> <span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="o">-></span>
|
||||||
<span class="nx">@bodyNode</span><span class="p">().</span><span class="nv">tags.operation = </span><span class="vi">@condition.tags.operation = </span><span class="kc">yes</span>
|
<span class="nx">@bodyNode</span><span class="p">().</span><span class="nv">tags.operation = </span><span class="vi">@condition.tags.operation = </span><span class="kc">yes</span>
|
||||||
<span class="nx">@elseBodyNode</span><span class="p">().</span><span class="nv">tags.operation = </span><span class="kc">yes</span> <span class="k">if</span> <span class="nx">@elseBody</span>
|
<span class="nx">@elseBodyNode</span><span class="p">().</span><span class="nv">tags.operation = </span><span class="kc">yes</span> <span class="k">if</span> <span class="nx">@elseBody</span>
|
||||||
<span class="nv">ifPart = </span><span class="nx">@condition</span><span class="p">.</span><span class="nx">compile</span><span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="o">+</span> <span class="s1">' ? '</span> <span class="o">+</span> <span class="nx">@bodyNode</span><span class="p">().</span><span class="nx">compile</span><span class="p">(</span><span class="nx">o</span><span class="p">)</span>
|
<span class="nv">ifPart = </span><span class="nx">@condition</span><span class="p">.</span><span class="nx">compile</span><span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="o">+</span> <span class="s1">' ? '</span> <span class="o">+</span> <span class="nx">@bodyNode</span><span class="p">().</span><span class="nx">compile</span><span class="p">(</span><span class="nx">o</span><span class="p">)</span>
|
||||||
<span class="nv">elsePart = </span><span class="k">if</span> <span class="nx">@elseBody</span> <span class="k">then</span> <span class="nx">@elseBodyNode</span><span class="p">().</span><span class="nx">compile</span><span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="k">else</span> <span class="s1">'null'</span>
|
<span class="nv">elsePart = </span><span class="k">if</span> <span class="nx">@elseBody</span> <span class="k">then</span> <span class="nx">@elseBodyNode</span><span class="p">().</span><span class="nx">compile</span><span class="p">(</span><span class="nx">o</span><span class="p">)</span> <span class="k">else</span> <span class="s1">'null'</span>
|
||||||
<span class="nv">code = </span><span class="s2">"#{ifPart} : #{elsePart}"</span>
|
<span class="nv">code = </span><span class="s2">"#{ifPart} : #{elsePart}"</span>
|
||||||
<span class="k">if</span> <span class="nx">@tags</span><span class="p">.</span><span class="nx">operation</span> <span class="k">then</span> <span class="s2">"(#{code})"</span> <span class="k">else</span> <span class="nx">code</span></pre></div> </td> </tr> <tr id="section-133"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-133">#</a> </div> <p>Compile the IfNode as a ternary operator.</p> </td> <td class="code"> <div class="highlight"><pre></pre></div> </td> </tr> <tr id="section-134"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-134">#</a> </div> <h2>Faux-Nodes</h2> </td> <td class="code"> <div class="highlight"><pre></pre></div> </td> </tr> <tr id="section-135"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-135">#</a> </div> <h3>PushNode</h3> </td> <td class="code"> <div class="highlight"><pre><span class="nv">PushNode = exports.PushNode =</span>
|
<span class="k">if</span> <span class="nx">@tags</span><span class="p">.</span><span class="nx">operation</span> <span class="k">then</span> <span class="s2">"(#{code})"</span> <span class="k">else</span> <span class="nx">code</span></pre></div> </td> </tr> <tr id="section-132"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-132">#</a> </div> <p>Compile the IfNode as a ternary operator.</p> </td> <td class="code"> <div class="highlight"><pre></pre></div> </td> </tr> <tr id="section-133"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-133">#</a> </div> <h2>Faux-Nodes</h2> </td> <td class="code"> <div class="highlight"><pre></pre></div> </td> </tr> <tr id="section-134"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-134">#</a> </div> <h3>PushNode</h3> </td> <td class="code"> <div class="highlight"><pre><span class="nv">PushNode = exports.PushNode =</span>
|
||||||
<span class="nx">wrap</span><span class="o">:</span> <span class="p">(</span><span class="nx">array</span><span class="p">,</span> <span class="nx">expressions</span><span class="p">)</span> <span class="o">-></span>
|
<span class="nx">wrap</span><span class="o">:</span> <span class="p">(</span><span class="nx">array</span><span class="p">,</span> <span class="nx">expressions</span><span class="p">)</span> <span class="o">-></span>
|
||||||
<span class="nv">expr = </span><span class="nx">expressions</span><span class="p">.</span><span class="nx">unwrap</span><span class="p">()</span>
|
<span class="nv">expr = </span><span class="nx">expressions</span><span class="p">.</span><span class="nx">unwrap</span><span class="p">()</span>
|
||||||
<span class="k">return</span> <span class="nx">expressions</span> <span class="k">if</span> <span class="nx">expr</span><span class="p">.</span><span class="nx">isPureStatement</span><span class="p">()</span> <span class="o">or</span> <span class="nx">expr</span><span class="p">.</span><span class="nx">containsPureStatement</span><span class="p">()</span>
|
<span class="k">return</span> <span class="nx">expressions</span> <span class="k">if</span> <span class="nx">expr</span><span class="p">.</span><span class="nx">isPureStatement</span><span class="p">()</span> <span class="o">or</span> <span class="nx">expr</span><span class="p">.</span><span class="nx">containsPureStatement</span><span class="p">()</span>
|
||||||
<span class="nx">Expressions</span><span class="p">.</span><span class="nx">wrap</span><span class="p">([</span><span class="k">new</span> <span class="nx">CallNode</span><span class="p">(</span>
|
<span class="nx">Expressions</span><span class="p">.</span><span class="nx">wrap</span><span class="p">([</span><span class="k">new</span> <span class="nx">CallNode</span><span class="p">(</span>
|
||||||
<span class="k">new</span> <span class="nx">ValueNode</span><span class="p">(</span><span class="nx">literal</span><span class="p">(</span><span class="nx">array</span><span class="p">),</span> <span class="p">[</span><span class="k">new</span> <span class="nx">AccessorNode</span><span class="p">(</span><span class="nx">literal</span><span class="p">(</span><span class="s1">'push'</span><span class="p">))]),</span> <span class="p">[</span><span class="nx">expr</span><span class="p">]</span>
|
<span class="k">new</span> <span class="nx">ValueNode</span><span class="p">(</span><span class="nx">literal</span><span class="p">(</span><span class="nx">array</span><span class="p">),</span> <span class="p">[</span><span class="k">new</span> <span class="nx">AccessorNode</span><span class="p">(</span><span class="nx">literal</span><span class="p">(</span><span class="s1">'push'</span><span class="p">))]),</span> <span class="p">[</span><span class="nx">expr</span><span class="p">]</span>
|
||||||
<span class="p">)])</span></pre></div> </td> </tr> <tr id="section-136"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-136">#</a> </div> <p>Faux-nodes are never created by the grammar, but are used during code
|
<span class="p">)])</span></pre></div> </td> </tr> <tr id="section-135"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-135">#</a> </div> <p>Faux-nodes are never created by the grammar, but are used during code
|
||||||
generation to generate other combinations of nodes. The <strong>PushNode</strong> creates
|
generation to generate other combinations of nodes. The <strong>PushNode</strong> creates
|
||||||
the tree for <code>array.push(value)</code>, which is helpful for recording the result
|
the tree for <code>array.push(value)</code>, which is helpful for recording the result
|
||||||
arrays from comprehensions.</p> </td> <td class="code"> <div class="highlight"><pre></pre></div> </td> </tr> <tr id="section-137"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-137">#</a> </div> <h3>ClosureNode</h3> </td> <td class="code"> <div class="highlight"><pre><span class="nv">ClosureNode = exports.ClosureNode =</span></pre></div> </td> </tr> <tr id="section-138"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-138">#</a> </div> <p>A faux-node used to wrap an expressions body in a closure.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">wrap</span><span class="o">:</span> <span class="p">(</span><span class="nx">expressions</span><span class="p">,</span> <span class="nx">statement</span><span class="p">)</span> <span class="o">-></span>
|
arrays from comprehensions.</p> </td> <td class="code"> <div class="highlight"><pre></pre></div> </td> </tr> <tr id="section-136"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-136">#</a> </div> <h3>ClosureNode</h3> </td> <td class="code"> <div class="highlight"><pre><span class="nv">ClosureNode = exports.ClosureNode =</span></pre></div> </td> </tr> <tr id="section-137"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-137">#</a> </div> <p>A faux-node used to wrap an expressions body in a closure.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">wrap</span><span class="o">:</span> <span class="p">(</span><span class="nx">expressions</span><span class="p">,</span> <span class="nx">statement</span><span class="p">)</span> <span class="o">-></span>
|
||||||
<span class="k">return</span> <span class="nx">expressions</span> <span class="k">if</span> <span class="nx">expressions</span><span class="p">.</span><span class="nx">containsPureStatement</span><span class="p">()</span>
|
<span class="k">return</span> <span class="nx">expressions</span> <span class="k">if</span> <span class="nx">expressions</span><span class="p">.</span><span class="nx">containsPureStatement</span><span class="p">()</span>
|
||||||
<span class="nv">func = </span><span class="k">new</span> <span class="nx">ParentheticalNode</span><span class="p">(</span><span class="k">new</span> <span class="nx">CodeNode</span><span class="p">([],</span> <span class="nx">Expressions</span><span class="p">.</span><span class="nx">wrap</span><span class="p">([</span><span class="nx">expressions</span><span class="p">])))</span>
|
<span class="nv">func = </span><span class="k">new</span> <span class="nx">ParentheticalNode</span><span class="p">(</span><span class="k">new</span> <span class="nx">CodeNode</span><span class="p">([],</span> <span class="nx">Expressions</span><span class="p">.</span><span class="nx">wrap</span><span class="p">([</span><span class="nx">expressions</span><span class="p">])))</span>
|
||||||
<span class="nv">args = </span><span class="p">[]</span>
|
<span class="nv">args = </span><span class="p">[]</span>
|
||||||
|
@ -1212,9 +1215,9 @@ arrays from comprehensions.</p> </td> <td class="code">
|
||||||
<span class="nx">args</span><span class="p">.</span><span class="nx">push</span> <span class="nx">literal</span> <span class="s1">'arguments'</span> <span class="k">if</span> <span class="nx">mentionsArgs</span>
|
<span class="nx">args</span><span class="p">.</span><span class="nx">push</span> <span class="nx">literal</span> <span class="s1">'arguments'</span> <span class="k">if</span> <span class="nx">mentionsArgs</span>
|
||||||
<span class="nv">func = </span><span class="k">new</span> <span class="nx">ValueNode</span> <span class="nx">func</span><span class="p">,</span> <span class="p">[</span><span class="k">new</span> <span class="nx">AccessorNode</span><span class="p">(</span><span class="nx">meth</span><span class="p">)]</span>
|
<span class="nv">func = </span><span class="k">new</span> <span class="nx">ValueNode</span> <span class="nx">func</span><span class="p">,</span> <span class="p">[</span><span class="k">new</span> <span class="nx">AccessorNode</span><span class="p">(</span><span class="nx">meth</span><span class="p">)]</span>
|
||||||
<span class="nv">call = </span><span class="k">new</span> <span class="nx">CallNode</span><span class="p">(</span><span class="nx">func</span><span class="p">,</span> <span class="nx">args</span><span class="p">)</span>
|
<span class="nv">call = </span><span class="k">new</span> <span class="nx">CallNode</span><span class="p">(</span><span class="nx">func</span><span class="p">,</span> <span class="nx">args</span><span class="p">)</span>
|
||||||
<span class="k">if</span> <span class="nx">statement</span> <span class="k">then</span> <span class="nx">Expressions</span><span class="p">.</span><span class="nx">wrap</span><span class="p">([</span><span class="nx">call</span><span class="p">])</span> <span class="k">else</span> <span class="nx">call</span></pre></div> </td> </tr> <tr id="section-139"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-139">#</a> </div> <p>Wrap the expressions body, unless it contains a pure statement,
|
<span class="k">if</span> <span class="nx">statement</span> <span class="k">then</span> <span class="nx">Expressions</span><span class="p">.</span><span class="nx">wrap</span><span class="p">([</span><span class="nx">call</span><span class="p">])</span> <span class="k">else</span> <span class="nx">call</span></pre></div> </td> </tr> <tr id="section-138"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-138">#</a> </div> <p>Wrap the expressions body, unless it contains a pure statement,
|
||||||
in which case, no dice. If the body mentions <code>this</code> or <code>arguments</code>,
|
in which case, no dice. If the body mentions <code>this</code> or <code>arguments</code>,
|
||||||
then make sure that the closure wrapper preserves the original values.</p> </td> <td class="code"> <div class="highlight"><pre><span class="nv">UTILITIES =</span></pre></div> </td> </tr> <tr id="section-140"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-140">#</a> </div> <h2>Utility Functions</h2> </td> <td class="code"> <div class="highlight"><pre> <span class="k">extends</span><span class="o">:</span> <span class="s2">"""</span>
|
then make sure that the closure wrapper preserves the original values.</p> </td> <td class="code"> <div class="highlight"><pre><span class="nv">UTILITIES =</span></pre></div> </td> </tr> <tr id="section-139"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-139">#</a> </div> <h2>Utility Functions</h2> </td> <td class="code"> <div class="highlight"><pre> <span class="k">extends</span><span class="o">:</span> <span class="s2">"""</span>
|
||||||
<span class="s2"> function(child, parent) {</span>
|
<span class="s2"> function(child, parent) {</span>
|
||||||
<span class="s2"> var ctor = function(){};</span>
|
<span class="s2"> var ctor = function(){};</span>
|
||||||
<span class="s2"> ctor.prototype = parent.prototype;</span>
|
<span class="s2"> ctor.prototype = parent.prototype;</span>
|
||||||
|
@ -1223,20 +1226,20 @@ then make sure that the closure wrapper preserves the original values.</p>
|
||||||
<span class="s2"> if (typeof parent.extended === "</span><span class="nx">function</span><span class="s2">") parent.extended(child);</span>
|
<span class="s2"> if (typeof parent.extended === "</span><span class="nx">function</span><span class="s2">") parent.extended(child);</span>
|
||||||
<span class="s2"> child.__super__ = parent.prototype;</span>
|
<span class="s2"> child.__super__ = parent.prototype;</span>
|
||||||
<span class="s2"> }</span>
|
<span class="s2"> }</span>
|
||||||
<span class="s2"> """</span></pre></div> </td> </tr> <tr id="section-141"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-141">#</a> </div> <p>Correctly set up a prototype chain for inheritance, including a reference
|
<span class="s2"> """</span></pre></div> </td> </tr> <tr id="section-140"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-140">#</a> </div> <p>Correctly set up a prototype chain for inheritance, including a reference
|
||||||
to the superclass for <code>super()</code> calls. See:
|
to the superclass for <code>super()</code> calls. See:
|
||||||
<a href="http://closure-library.googlecode.com/svn/docs/closureGoogBase.js.source.html#line1206">goog.inherits</a>.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">bind</span><span class="o">:</span> <span class="s2">"""</span>
|
<a href="http://closure-library.googlecode.com/svn/docs/closureGoogBase.js.source.html#line1206">goog.inherits</a>.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">bind</span><span class="o">:</span> <span class="s2">"""</span>
|
||||||
<span class="s2"> function(func, context) {</span>
|
<span class="s2"> function(func, context) {</span>
|
||||||
<span class="s2"> return function(){ return func.apply(context, arguments); };</span>
|
<span class="s2"> return function(){ return func.apply(context, arguments); };</span>
|
||||||
<span class="s2"> }</span>
|
<span class="s2"> }</span>
|
||||||
<span class="s2"> """</span></pre></div> </td> </tr> <tr id="section-142"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-142">#</a> </div> <p>Create a function bound to the current value of "this".</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">hasProp</span><span class="o">:</span> <span class="s1">'Object.prototype.hasOwnProperty'</span>
|
<span class="s2"> """</span></pre></div> </td> </tr> <tr id="section-141"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-141">#</a> </div> <p>Create a function bound to the current value of "this".</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">hasProp</span><span class="o">:</span> <span class="s1">'Object.prototype.hasOwnProperty'</span>
|
||||||
<span class="nx">slice</span><span class="o">:</span> <span class="s1">'Array.prototype.slice'</span></pre></div> </td> </tr> <tr id="section-143"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-143">#</a> </div> <p>Shortcuts to speed up the lookup time for native functions.</p> </td> <td class="code"> <div class="highlight"><pre></pre></div> </td> </tr> <tr id="section-144"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-144">#</a> </div> <h2>Constants</h2> </td> <td class="code"> <div class="highlight"><pre><span class="nv">TAB = </span><span class="s1">' '</span></pre></div> </td> </tr> <tr id="section-145"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-145">#</a> </div> <p>Tabs are two spaces for pretty printing.</p> </td> <td class="code"> <div class="highlight"><pre><span class="nv">TRAILING_WHITESPACE = </span><span class="sr">/[ \t]+$/gm</span></pre></div> </td> </tr> <tr id="section-146"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-146">#</a> </div> <p>Trim out all trailing whitespace, so that the generated code plays nice
|
<span class="nx">slice</span><span class="o">:</span> <span class="s1">'Array.prototype.slice'</span></pre></div> </td> </tr> <tr id="section-142"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-142">#</a> </div> <p>Shortcuts to speed up the lookup time for native functions.</p> </td> <td class="code"> <div class="highlight"><pre></pre></div> </td> </tr> <tr id="section-143"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-143">#</a> </div> <h2>Constants</h2> </td> <td class="code"> <div class="highlight"><pre><span class="nv">TAB = </span><span class="s1">' '</span></pre></div> </td> </tr> <tr id="section-144"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-144">#</a> </div> <p>Tabs are two spaces for pretty printing.</p> </td> <td class="code"> <div class="highlight"><pre><span class="nv">TRAILING_WHITESPACE = </span><span class="sr">/[ \t]+$/gm</span></pre></div> </td> </tr> <tr id="section-145"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-145">#</a> </div> <p>Trim out all trailing whitespace, so that the generated code plays nice
|
||||||
with Git.</p> </td> <td class="code"> <div class="highlight"><pre><span class="nv">IDENTIFIER = </span><span class="sr">/^[a-zA-Z\$_](\w|\$)*$/</span>
|
with Git.</p> </td> <td class="code"> <div class="highlight"><pre><span class="nv">IDENTIFIER = </span><span class="sr">/^[a-zA-Z\$_](\w|\$)*$/</span>
|
||||||
<span class="nv">NUMBER = </span><span class="sr">/^(((\b0(x|X)[0-9a-fA-F]+)|((\b[0-9]+(\.[0-9]+)?|\.[0-9]+)(e[+\-]?[0-9]+)?)))\b$/i</span>
|
<span class="nv">NUMBER = </span><span class="sr">/^(((\b0(x|X)[0-9a-fA-F]+)|((\b[0-9]+(\.[0-9]+)?|\.[0-9]+)(e[+\-]?[0-9]+)?)))\b$/i</span>
|
||||||
<span class="nv">SIMPLENUM = </span><span class="sr">/^-?\d+$/</span></pre></div> </td> </tr> <tr id="section-147"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-147">#</a> </div> <p>Keep these identifier regexes in sync with the Lexer.</p> </td> <td class="code"> <div class="highlight"><pre><span class="nv">IS_STRING = </span><span class="sr">/^['"]/</span></pre></div> </td> </tr> <tr id="section-148"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-148">#</a> </div> <p>Is a literal value a string?</p> </td> <td class="code"> <div class="highlight"><pre></pre></div> </td> </tr> <tr id="section-149"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-149">#</a> </div> <h2>Utility Functions</h2> </td> <td class="code"> <div class="highlight"><pre><span class="nv">literal = </span><span class="p">(</span><span class="nx">name</span><span class="p">)</span> <span class="o">-></span>
|
<span class="nv">SIMPLENUM = </span><span class="sr">/^-?\d+$/</span></pre></div> </td> </tr> <tr id="section-146"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-146">#</a> </div> <p>Keep these identifier regexes in sync with the Lexer.</p> </td> <td class="code"> <div class="highlight"><pre><span class="nv">IS_STRING = </span><span class="sr">/^['"]/</span></pre></div> </td> </tr> <tr id="section-147"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-147">#</a> </div> <p>Is a literal value a string?</p> </td> <td class="code"> <div class="highlight"><pre></pre></div> </td> </tr> <tr id="section-148"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-148">#</a> </div> <h2>Utility Functions</h2> </td> <td class="code"> <div class="highlight"><pre><span class="nv">literal = </span><span class="p">(</span><span class="nx">name</span><span class="p">)</span> <span class="o">-></span>
|
||||||
<span class="k">new</span> <span class="nx">LiteralNode</span><span class="p">(</span><span class="nx">name</span><span class="p">)</span></pre></div> </td> </tr> <tr id="section-150"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-150">#</a> </div> <p>Handy helper for a generating LiteralNode.</p> </td> <td class="code"> <div class="highlight"><pre><span class="nv">utility = </span><span class="p">(</span><span class="nx">name</span><span class="p">)</span> <span class="o">-></span>
|
<span class="k">new</span> <span class="nx">LiteralNode</span><span class="p">(</span><span class="nx">name</span><span class="p">)</span></pre></div> </td> </tr> <tr id="section-149"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-149">#</a> </div> <p>Handy helper for a generating LiteralNode.</p> </td> <td class="code"> <div class="highlight"><pre><span class="nv">utility = </span><span class="p">(</span><span class="nx">name</span><span class="p">)</span> <span class="o">-></span>
|
||||||
<span class="nv">ref = </span><span class="s2">"__#{name}"</span>
|
<span class="nv">ref = </span><span class="s2">"__#{name}"</span>
|
||||||
<span class="nx">Scope</span><span class="p">.</span><span class="nx">root</span><span class="p">.</span><span class="nx">assign</span> <span class="nx">ref</span><span class="p">,</span> <span class="nx">UTILITIES</span><span class="p">[</span><span class="nx">name</span><span class="p">]</span>
|
<span class="nx">Scope</span><span class="p">.</span><span class="nx">root</span><span class="p">.</span><span class="nx">assign</span> <span class="nx">ref</span><span class="p">,</span> <span class="nx">UTILITIES</span><span class="p">[</span><span class="nx">name</span><span class="p">]</span>
|
||||||
<span class="nx">ref</span>
|
<span class="nx">ref</span>
|
||||||
|
|
||||||
</pre></div> </td> </tr> <tr id="section-151"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-151">#</a> </div> <p>Helper for ensuring that utility functions are assigned at the top level.</p> </td> <td class="code"> <div class="highlight"><pre>undefined</pre></div> </td> </tr> </tbody> </table> </div> </body> </html>
|
</pre></div> </td> </tr> <tr id="section-150"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-150">#</a> </div> <p>Helper for ensuring that utility functions are assigned at the top level.</p> </td> <td class="code"> <div class="highlight"><pre>undefined</pre></div> </td> </tr> </tbody> </table> </div> </body> </html>
|
|
@ -39,7 +39,7 @@ of the valid options, for <code>--help</code> and such.</p> </td>
|
||||||
<span class="nx">lines</span><span class="p">.</span><span class="nx">unshift</span> <span class="s2">"#{@banner}\n"</span> <span class="k">if</span> <span class="nx">@banner</span>
|
<span class="nx">lines</span><span class="p">.</span><span class="nx">unshift</span> <span class="s2">"#{@banner}\n"</span> <span class="k">if</span> <span class="nx">@banner</span>
|
||||||
<span class="k">for</span> <span class="nx">rule</span> <span class="k">in</span> <span class="nx">@rules</span>
|
<span class="k">for</span> <span class="nx">rule</span> <span class="k">in</span> <span class="nx">@rules</span>
|
||||||
<span class="nv">spaces = </span><span class="mi">15</span> <span class="o">-</span> <span class="nx">rule</span><span class="p">.</span><span class="nx">longFlag</span><span class="p">.</span><span class="nx">length</span>
|
<span class="nv">spaces = </span><span class="mi">15</span> <span class="o">-</span> <span class="nx">rule</span><span class="p">.</span><span class="nx">longFlag</span><span class="p">.</span><span class="nx">length</span>
|
||||||
<span class="nv">spaces = </span><span class="k">if</span> <span class="nx">spaces</span> <span class="o">></span> <span class="mi">0</span> <span class="k">then</span> <span class="p">(</span><span class="s1">' '</span> <span class="k">for</span> <span class="nx">i</span> <span class="k">in</span> <span class="p">[</span><span class="mi">0</span><span class="p">..</span><span class="nx">spaces</span><span class="p">]).</span><span class="nx">join</span><span class="p">(</span><span class="s1">''</span><span class="p">)</span> <span class="k">else</span> <span class="s1">''</span>
|
<span class="nv">spaces = </span><span class="k">if</span> <span class="nx">spaces</span> <span class="o">></span> <span class="mi">0</span> <span class="k">then</span> <span class="nb">Array</span><span class="p">(</span><span class="nx">spaces</span> <span class="o">+</span> <span class="mi">1</span><span class="p">).</span><span class="nx">join</span><span class="p">(</span><span class="s1">' '</span><span class="p">)</span> <span class="k">else</span> <span class="s1">''</span>
|
||||||
<span class="nv">letPart = </span><span class="k">if</span> <span class="nx">rule</span><span class="p">.</span><span class="nx">shortFlag</span> <span class="k">then</span> <span class="nx">rule</span><span class="p">.</span><span class="nx">shortFlag</span> <span class="o">+</span> <span class="s1">', '</span> <span class="k">else</span> <span class="s1">' '</span>
|
<span class="nv">letPart = </span><span class="k">if</span> <span class="nx">rule</span><span class="p">.</span><span class="nx">shortFlag</span> <span class="k">then</span> <span class="nx">rule</span><span class="p">.</span><span class="nx">shortFlag</span> <span class="o">+</span> <span class="s1">', '</span> <span class="k">else</span> <span class="s1">' '</span>
|
||||||
<span class="nx">lines</span><span class="p">.</span><span class="nx">push</span> <span class="s1">' '</span> <span class="o">+</span> <span class="nx">letPart</span> <span class="o">+</span> <span class="nx">rule</span><span class="p">.</span><span class="nx">longFlag</span> <span class="o">+</span> <span class="nx">spaces</span> <span class="o">+</span> <span class="nx">rule</span><span class="p">.</span><span class="nx">description</span>
|
<span class="nx">lines</span><span class="p">.</span><span class="nx">push</span> <span class="s1">' '</span> <span class="o">+</span> <span class="nx">letPart</span> <span class="o">+</span> <span class="nx">rule</span><span class="p">.</span><span class="nx">longFlag</span> <span class="o">+</span> <span class="nx">spaces</span> <span class="o">+</span> <span class="nx">rule</span><span class="p">.</span><span class="nx">description</span>
|
||||||
<span class="s2">"\n#{ lines.join('\n') }\n"</span></pre></div> </td> </tr> <tr id="section-5"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-5">#</a> </div> <h2>Helpers</h2> </td> <td class="code"> <div class="highlight"><pre></pre></div> </td> </tr> <tr id="section-6"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-6">#</a> </div> <p>Regex matchers for option flags.</p> </td> <td class="code"> <div class="highlight"><pre><span class="nv">LONG_FLAG = </span><span class="sr">/^(--\w[\w\-]+)/</span>
|
<span class="s2">"\n#{ lines.join('\n') }\n"</span></pre></div> </td> </tr> <tr id="section-5"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-5">#</a> </div> <h2>Helpers</h2> </td> <td class="code"> <div class="highlight"><pre></pre></div> </td> </tr> <tr id="section-6"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-6">#</a> </div> <p>Regex matchers for option flags.</p> </td> <td class="code"> <div class="highlight"><pre><span class="nv">LONG_FLAG = </span><span class="sr">/^(--\w[\w\-]+)/</span>
|
||||||
|
|
|
@ -9,7 +9,7 @@ Using it looks like this:</p>
|
||||||
Attempt to evaluate the command. If there's an exception, print it out instead
|
Attempt to evaluate the command. If there's an exception, print it out instead
|
||||||
of exiting.</p> </td> <td class="code"> <div class="highlight"><pre><span class="nv">run = </span><span class="p">(</span><span class="nx">buffer</span><span class="p">)</span> <span class="o">-></span>
|
of exiting.</p> </td> <td class="code"> <div class="highlight"><pre><span class="nv">run = </span><span class="p">(</span><span class="nx">buffer</span><span class="p">)</span> <span class="o">-></span>
|
||||||
<span class="k">try</span>
|
<span class="k">try</span>
|
||||||
<span class="nv">val = </span><span class="nx">CoffeeScript</span><span class="p">.</span><span class="nx">run</span> <span class="nx">buffer</span><span class="p">.</span><span class="nx">toString</span><span class="p">(),</span> <span class="nx">noWrap</span><span class="o">:</span> <span class="kc">true</span><span class="p">,</span> <span class="nx">globals</span><span class="o">:</span> <span class="kc">true</span><span class="p">,</span> <span class="nx">fileName</span><span class="o">:</span> <span class="s1">'repl'</span>
|
<span class="nv">val = </span><span class="nx">CoffeeScript</span><span class="p">.</span><span class="nb">eval</span> <span class="nx">buffer</span><span class="p">.</span><span class="nx">toString</span><span class="p">(),</span> <span class="nx">noWrap</span><span class="o">:</span> <span class="kc">true</span><span class="p">,</span> <span class="nx">globals</span><span class="o">:</span> <span class="kc">true</span><span class="p">,</span> <span class="nx">fileName</span><span class="o">:</span> <span class="s1">'repl'</span>
|
||||||
<span class="nx">puts</span> <span class="nx">inspect</span> <span class="nx">val</span> <span class="k">if</span> <span class="nx">val</span> <span class="o">isnt</span> <span class="kc">undefined</span>
|
<span class="nx">puts</span> <span class="nx">inspect</span> <span class="nx">val</span> <span class="k">if</span> <span class="nx">val</span> <span class="o">isnt</span> <span class="kc">undefined</span>
|
||||||
<span class="k">catch</span> <span class="nx">err</span>
|
<span class="k">catch</span> <span class="nx">err</span>
|
||||||
<span class="nx">puts</span> <span class="nx">err</span><span class="p">.</span><span class="nx">stack</span> <span class="o">or</span> <span class="nx">err</span><span class="p">.</span><span class="nx">toString</span><span class="p">()</span>
|
<span class="nx">puts</span> <span class="nx">err</span><span class="p">.</span><span class="nx">stack</span> <span class="o">or</span> <span class="nx">err</span><span class="p">.</span><span class="nx">toString</span><span class="p">()</span>
|
||||||
|
|
|
@ -3,13 +3,9 @@ and shorthand syntax. This can greatly complicate a grammar and bloat
|
||||||
the resulting parse table. Instead of making the parser handle it all, we take
|
the resulting parse table. Instead of making the parser handle it all, we take
|
||||||
a series of passes over the token stream, using this <strong>Rewriter</strong> to convert
|
a series of passes over the token stream, using this <strong>Rewriter</strong> to convert
|
||||||
shorthand into the unambiguous long form, add implicit indentation and
|
shorthand into the unambiguous long form, add implicit indentation and
|
||||||
parentheses, balance incorrect nestings, and generally clean things up.</p> </td> <td class="code"> <div class="highlight"><pre></pre></div> </td> </tr> <tr id="section-2"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-2">#</a> </div> <p>Set up exported variables for both Node.js and the browser.</p> </td> <td class="code"> <div class="highlight"><pre><span class="k">if</span> <span class="nx">process</span><span class="o">?</span>
|
parentheses, balance incorrect nestings, and generally clean things up.</p> </td> <td class="code"> <div class="highlight"><pre></pre></div> </td> </tr> <tr id="section-2"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-2">#</a> </div> <p>Import the helpers we need.</p> </td> <td class="code"> <div class="highlight"><pre><span class="p">{</span><span class="nx">include</span><span class="p">}</span> <span class="o">=</span> <span class="nx">require</span><span class="p">(</span><span class="s1">'./helpers'</span><span class="p">).</span><span class="nx">helpers</span></pre></div> </td> </tr> <tr id="section-3"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-3">#</a> </div> <p>The <strong>Rewriter</strong> class is used by the <a href="lexer.html">Lexer</a>, directly against
|
||||||
<span class="p">{</span><span class="nx">helpers</span><span class="p">}</span> <span class="o">=</span> <span class="nx">require</span><span class="p">(</span><span class="s1">'./helpers'</span><span class="p">)</span>
|
its internal array of tokens.</p> </td> <td class="code"> <div class="highlight"><pre><span class="nv">exports.Rewriter = </span><span class="nx">class</span> <span class="nx">Rewriter</span></pre></div> </td> </tr> <tr id="section-4"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-4">#</a> </div> <p>Helpful snippet for debugging:
|
||||||
<span class="k">else</span>
|
puts (t[0] + '/' + t[1] for t in @tokens).join ' '</p> </td> <td class="code"> <div class="highlight"><pre></pre></div> </td> </tr> <tr id="section-5"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-5">#</a> </div> <p>Rewrite the token stream in multiple passes, one logical filter at
|
||||||
<span class="k">this</span><span class="p">.</span><span class="nv">exports = </span><span class="k">this</span>
|
|
||||||
<span class="nv">helpers = </span><span class="k">this</span><span class="p">.</span><span class="nx">helpers</span></pre></div> </td> </tr> <tr id="section-3"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-3">#</a> </div> <p>Import the helpers we need.</p> </td> <td class="code"> <div class="highlight"><pre><span class="p">{</span><span class="nx">include</span><span class="p">}</span> <span class="o">=</span> <span class="nx">helpers</span></pre></div> </td> </tr> <tr id="section-4"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-4">#</a> </div> <p>The <strong>Rewriter</strong> class is used by the <a href="lexer.html">Lexer</a>, directly against
|
|
||||||
its internal array of tokens.</p> </td> <td class="code"> <div class="highlight"><pre><span class="nv">exports.Rewriter = </span><span class="nx">class</span> <span class="nx">Rewriter</span></pre></div> </td> </tr> <tr id="section-5"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-5">#</a> </div> <p>Helpful snippet for debugging:
|
|
||||||
puts (t[0] + '/' + t[1] for t in @tokens).join ' '</p> </td> <td class="code"> <div class="highlight"><pre></pre></div> </td> </tr> <tr id="section-6"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-6">#</a> </div> <p>Rewrite the token stream in multiple passes, one logical filter at
|
|
||||||
a time. This could certainly be changed into a single pass through the
|
a time. This could certainly be changed into a single pass through the
|
||||||
stream, with a big ol' efficient switch, but it's much nicer to work with
|
stream, with a big ol' efficient switch, but it's much nicer to work with
|
||||||
like this. The order of these passes matters -- indentation must be
|
like this. The order of these passes matters -- indentation must be
|
||||||
|
@ -26,7 +22,7 @@ corrected before implicit parentheses can be wrapped around blocks of code.</p>
|
||||||
<span class="nx">@addImplicitParentheses</span><span class="p">()</span>
|
<span class="nx">@addImplicitParentheses</span><span class="p">()</span>
|
||||||
<span class="nx">@ensureBalance</span> <span class="nx">BALANCED_PAIRS</span>
|
<span class="nx">@ensureBalance</span> <span class="nx">BALANCED_PAIRS</span>
|
||||||
<span class="nx">@rewriteClosingParens</span><span class="p">()</span>
|
<span class="nx">@rewriteClosingParens</span><span class="p">()</span>
|
||||||
<span class="nx">@tokens</span></pre></div> </td> </tr> <tr id="section-7"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-7">#</a> </div> <p>Rewrite the token stream, looking one token ahead and behind.
|
<span class="nx">@tokens</span></pre></div> </td> </tr> <tr id="section-6"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-6">#</a> </div> <p>Rewrite the token stream, looking one token ahead and behind.
|
||||||
Allow the return value of the block to tell us how many tokens to move
|
Allow the return value of the block to tell us how many tokens to move
|
||||||
forwards (or backwards) in the stream, to make sure we don't miss anything
|
forwards (or backwards) in the stream, to make sure we don't miss anything
|
||||||
as tokens are inserted and removed, and the stream changes length under
|
as tokens are inserted and removed, and the stream changes length under
|
||||||
|
@ -47,7 +43,7 @@ our feet.</p> </td> <td class="code"> <div
|
||||||
<span class="nx">levels</span> <span class="o">+=</span> <span class="mi">1</span> <span class="k">if</span> <span class="nx">include</span> <span class="nx">EXPRESSION_START</span><span class="p">,</span> <span class="nx">token</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
|
<span class="nx">levels</span> <span class="o">+=</span> <span class="mi">1</span> <span class="k">if</span> <span class="nx">include</span> <span class="nx">EXPRESSION_START</span><span class="p">,</span> <span class="nx">token</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
|
||||||
<span class="nx">levels</span> <span class="o">-=</span> <span class="mi">1</span> <span class="k">if</span> <span class="nx">include</span> <span class="nx">EXPRESSION_END</span><span class="p">,</span> <span class="nx">token</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
|
<span class="nx">levels</span> <span class="o">-=</span> <span class="mi">1</span> <span class="k">if</span> <span class="nx">include</span> <span class="nx">EXPRESSION_END</span><span class="p">,</span> <span class="nx">token</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
|
||||||
<span class="nx">i</span> <span class="o">+=</span> <span class="mi">1</span>
|
<span class="nx">i</span> <span class="o">+=</span> <span class="mi">1</span>
|
||||||
<span class="nx">i</span> <span class="o">-</span> <span class="mi">1</span></pre></div> </td> </tr> <tr id="section-8"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-8">#</a> </div> <p>Massage newlines and indentations so that comments don't have to be
|
<span class="nx">i</span> <span class="o">-</span> <span class="mi">1</span></pre></div> </td> </tr> <tr id="section-7"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-7">#</a> </div> <p>Massage newlines and indentations so that comments don't have to be
|
||||||
correctly indented, or appear on a line of their own.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">adjustComments</span><span class="o">:</span> <span class="o">-></span>
|
correctly indented, or appear on a line of their own.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">adjustComments</span><span class="o">:</span> <span class="o">-></span>
|
||||||
<span class="nx">@scanTokens</span> <span class="p">(</span><span class="nx">token</span><span class="p">,</span> <span class="nx">i</span><span class="p">)</span> <span class="o">-></span>
|
<span class="nx">@scanTokens</span> <span class="p">(</span><span class="nx">token</span><span class="p">,</span> <span class="nx">i</span><span class="p">)</span> <span class="o">-></span>
|
||||||
<span class="k">return</span> <span class="mi">1</span> <span class="nx">unless</span> <span class="nx">token</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">is</span> <span class="s1">'HERECOMMENT'</span>
|
<span class="k">return</span> <span class="mi">1</span> <span class="nx">unless</span> <span class="nx">token</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">is</span> <span class="s1">'HERECOMMENT'</span>
|
||||||
|
@ -66,14 +62,14 @@ correctly indented, or appear on a line of their own.</p> </td>
|
||||||
<span class="k">else</span>
|
<span class="k">else</span>
|
||||||
<span class="nx">@tokens</span><span class="p">.</span><span class="nx">splice</span> <span class="nx">i</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="p">[</span><span class="s1">'TERMINATOR'</span><span class="p">,</span> <span class="s2">"\n"</span><span class="p">,</span> <span class="nx">prev</span><span class="p">[</span><span class="mi">2</span><span class="p">]]</span>
|
<span class="nx">@tokens</span><span class="p">.</span><span class="nx">splice</span> <span class="nx">i</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="p">[</span><span class="s1">'TERMINATOR'</span><span class="p">,</span> <span class="s2">"\n"</span><span class="p">,</span> <span class="nx">prev</span><span class="p">[</span><span class="mi">2</span><span class="p">]]</span>
|
||||||
<span class="k">return</span> <span class="mi">2</span>
|
<span class="k">return</span> <span class="mi">2</span>
|
||||||
<span class="k">return</span> <span class="mi">1</span></pre></div> </td> </tr> <tr id="section-9"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-9">#</a> </div> <p>Leading newlines would introduce an ambiguity in the grammar, so we
|
<span class="k">return</span> <span class="mi">1</span></pre></div> </td> </tr> <tr id="section-8"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-8">#</a> </div> <p>Leading newlines would introduce an ambiguity in the grammar, so we
|
||||||
dispatch them here.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">removeLeadingNewlines</span><span class="o">:</span> <span class="o">-></span>
|
dispatch them here.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">removeLeadingNewlines</span><span class="o">:</span> <span class="o">-></span>
|
||||||
<span class="nx">@tokens</span><span class="p">.</span><span class="nx">shift</span><span class="p">()</span> <span class="k">while</span> <span class="nx">@tokens</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">and</span> <span class="nx">@tokens</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span> <span class="o">is</span> <span class="s1">'TERMINATOR'</span></pre></div> </td> </tr> <tr id="section-10"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-10">#</a> </div> <p>Some blocks occur in the middle of expressions -- when we're expecting
|
<span class="nx">@tokens</span><span class="p">.</span><span class="nx">shift</span><span class="p">()</span> <span class="k">while</span> <span class="nx">@tokens</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">and</span> <span class="nx">@tokens</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span> <span class="o">is</span> <span class="s1">'TERMINATOR'</span></pre></div> </td> </tr> <tr id="section-9"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-9">#</a> </div> <p>Some blocks occur in the middle of expressions -- when we're expecting
|
||||||
this, remove their trailing newlines.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">removeMidExpressionNewlines</span><span class="o">:</span> <span class="o">-></span>
|
this, remove their trailing newlines.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">removeMidExpressionNewlines</span><span class="o">:</span> <span class="o">-></span>
|
||||||
<span class="nx">@scanTokens</span> <span class="p">(</span><span class="nx">token</span><span class="p">,</span> <span class="nx">i</span><span class="p">)</span> <span class="o">-></span>
|
<span class="nx">@scanTokens</span> <span class="p">(</span><span class="nx">token</span><span class="p">,</span> <span class="nx">i</span><span class="p">)</span> <span class="o">-></span>
|
||||||
<span class="k">return</span> <span class="mi">1</span> <span class="nx">unless</span> <span class="nx">include</span><span class="p">(</span><span class="nx">EXPRESSION_CLOSE</span><span class="p">,</span> <span class="nx">@tag</span><span class="p">(</span><span class="nx">i</span> <span class="o">+</span> <span class="mi">1</span><span class="p">))</span> <span class="o">and</span> <span class="nx">token</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">is</span> <span class="s1">'TERMINATOR'</span>
|
<span class="k">return</span> <span class="mi">1</span> <span class="nx">unless</span> <span class="nx">include</span><span class="p">(</span><span class="nx">EXPRESSION_CLOSE</span><span class="p">,</span> <span class="nx">@tag</span><span class="p">(</span><span class="nx">i</span> <span class="o">+</span> <span class="mi">1</span><span class="p">))</span> <span class="o">and</span> <span class="nx">token</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">is</span> <span class="s1">'TERMINATOR'</span>
|
||||||
<span class="nx">@tokens</span><span class="p">.</span><span class="nx">splice</span> <span class="nx">i</span><span class="p">,</span> <span class="mi">1</span>
|
<span class="nx">@tokens</span><span class="p">.</span><span class="nx">splice</span> <span class="nx">i</span><span class="p">,</span> <span class="mi">1</span>
|
||||||
<span class="k">return</span> <span class="mi">0</span></pre></div> </td> </tr> <tr id="section-11"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-11">#</a> </div> <p>The lexer has tagged the opening parenthesis of a method call. Match it with
|
<span class="k">return</span> <span class="mi">0</span></pre></div> </td> </tr> <tr id="section-10"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-10">#</a> </div> <p>The lexer has tagged the opening parenthesis of a method call. Match it with
|
||||||
its paired close. We have the mis-nested outdent case included here for
|
its paired close. We have the mis-nested outdent case included here for
|
||||||
calls that close on the same line, just before their outdent.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">closeOpenCalls</span><span class="o">:</span> <span class="o">-></span>
|
calls that close on the same line, just before their outdent.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">closeOpenCalls</span><span class="o">:</span> <span class="o">-></span>
|
||||||
<span class="nx">@scanTokens</span> <span class="p">(</span><span class="nx">token</span><span class="p">,</span> <span class="nx">i</span><span class="p">)</span> <span class="o">-></span>
|
<span class="nx">@scanTokens</span> <span class="p">(</span><span class="nx">token</span><span class="p">,</span> <span class="nx">i</span><span class="p">)</span> <span class="o">-></span>
|
||||||
|
@ -84,14 +80,14 @@ calls that close on the same line, just before their outdent.</p> </
|
||||||
<span class="nv">idx = </span><span class="k">if</span> <span class="nx">token</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">is</span> <span class="s1">'OUTDENT'</span> <span class="k">then</span> <span class="nx">i</span> <span class="o">-</span> <span class="mi">1</span> <span class="k">else</span> <span class="nx">i</span>
|
<span class="nv">idx = </span><span class="k">if</span> <span class="nx">token</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">is</span> <span class="s1">'OUTDENT'</span> <span class="k">then</span> <span class="nx">i</span> <span class="o">-</span> <span class="mi">1</span> <span class="k">else</span> <span class="nx">i</span>
|
||||||
<span class="nx">@tokens</span><span class="p">[</span><span class="nx">idx</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span> <span class="o">=</span> <span class="s1">'CALL_END'</span>
|
<span class="nx">@tokens</span><span class="p">[</span><span class="nx">idx</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span> <span class="o">=</span> <span class="s1">'CALL_END'</span>
|
||||||
<span class="nx">@detectEnd</span> <span class="nx">i</span> <span class="o">+</span> <span class="mi">1</span><span class="p">,</span> <span class="nx">condition</span><span class="p">,</span> <span class="nx">action</span>
|
<span class="nx">@detectEnd</span> <span class="nx">i</span> <span class="o">+</span> <span class="mi">1</span><span class="p">,</span> <span class="nx">condition</span><span class="p">,</span> <span class="nx">action</span>
|
||||||
<span class="k">return</span> <span class="mi">1</span></pre></div> </td> </tr> <tr id="section-12"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-12">#</a> </div> <p>The lexer has tagged the opening parenthesis of an indexing operation call.
|
<span class="k">return</span> <span class="mi">1</span></pre></div> </td> </tr> <tr id="section-11"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-11">#</a> </div> <p>The lexer has tagged the opening parenthesis of an indexing operation call.
|
||||||
Match it with its paired close.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">closeOpenIndexes</span><span class="o">:</span> <span class="o">-></span>
|
Match it with its paired close.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">closeOpenIndexes</span><span class="o">:</span> <span class="o">-></span>
|
||||||
<span class="nx">@scanTokens</span> <span class="p">(</span><span class="nx">token</span><span class="p">,</span> <span class="nx">i</span><span class="p">)</span> <span class="o">-></span>
|
<span class="nx">@scanTokens</span> <span class="p">(</span><span class="nx">token</span><span class="p">,</span> <span class="nx">i</span><span class="p">)</span> <span class="o">-></span>
|
||||||
<span class="k">if</span> <span class="nx">token</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">is</span> <span class="s1">'INDEX_START'</span>
|
<span class="k">if</span> <span class="nx">token</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">is</span> <span class="s1">'INDEX_START'</span>
|
||||||
<span class="nv">condition = </span><span class="p">(</span><span class="nx">token</span><span class="p">,</span> <span class="nx">i</span><span class="p">)</span> <span class="o">-></span> <span class="nx">token</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="k">in</span> <span class="p">[</span><span class="s1">']'</span><span class="p">,</span> <span class="s1">'INDEX_END'</span><span class="p">]</span>
|
<span class="nv">condition = </span><span class="p">(</span><span class="nx">token</span><span class="p">,</span> <span class="nx">i</span><span class="p">)</span> <span class="o">-></span> <span class="nx">token</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="k">in</span> <span class="p">[</span><span class="s1">']'</span><span class="p">,</span> <span class="s1">'INDEX_END'</span><span class="p">]</span>
|
||||||
<span class="nv">action = </span><span class="p">(</span><span class="nx">token</span><span class="p">,</span> <span class="nx">i</span><span class="p">)</span> <span class="o">-></span> <span class="nx">token</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">=</span> <span class="s1">'INDEX_END'</span>
|
<span class="nv">action = </span><span class="p">(</span><span class="nx">token</span><span class="p">,</span> <span class="nx">i</span><span class="p">)</span> <span class="o">-></span> <span class="nx">token</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">=</span> <span class="s1">'INDEX_END'</span>
|
||||||
<span class="nx">@detectEnd</span> <span class="nx">i</span> <span class="o">+</span> <span class="mi">1</span><span class="p">,</span> <span class="nx">condition</span><span class="p">,</span> <span class="nx">action</span>
|
<span class="nx">@detectEnd</span> <span class="nx">i</span> <span class="o">+</span> <span class="mi">1</span><span class="p">,</span> <span class="nx">condition</span><span class="p">,</span> <span class="nx">action</span>
|
||||||
<span class="k">return</span> <span class="mi">1</span></pre></div> </td> </tr> <tr id="section-13"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-13">#</a> </div> <p>Object literals may be written with implicit braces, for simple cases.
|
<span class="k">return</span> <span class="mi">1</span></pre></div> </td> </tr> <tr id="section-12"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-12">#</a> </div> <p>Object literals may be written with implicit braces, for simple cases.
|
||||||
Insert the missing braces here, so that the parser doesn't have to.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">addImplicitBraces</span><span class="o">:</span> <span class="o">-></span>
|
Insert the missing braces here, so that the parser doesn't have to.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">addImplicitBraces</span><span class="o">:</span> <span class="o">-></span>
|
||||||
<span class="nv">stack = </span><span class="p">[]</span>
|
<span class="nv">stack = </span><span class="p">[]</span>
|
||||||
<span class="nx">@scanTokens</span> <span class="p">(</span><span class="nx">token</span><span class="p">,</span> <span class="nx">i</span><span class="p">)</span> <span class="o">-></span>
|
<span class="nx">@scanTokens</span> <span class="p">(</span><span class="nx">token</span><span class="p">,</span> <span class="nx">i</span><span class="p">)</span> <span class="o">-></span>
|
||||||
|
@ -103,6 +99,7 @@ Insert the missing braces here, so that the parser doesn't have to.</p>
|
||||||
<span class="k">if</span> <span class="nx">token</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">is</span> <span class="s1">':'</span> <span class="o">and</span> <span class="p">(</span><span class="o">not</span> <span class="nx">last</span> <span class="o">or</span> <span class="nx">last</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">isnt</span> <span class="s1">'{'</span><span class="p">)</span>
|
<span class="k">if</span> <span class="nx">token</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">is</span> <span class="s1">':'</span> <span class="o">and</span> <span class="p">(</span><span class="o">not</span> <span class="nx">last</span> <span class="o">or</span> <span class="nx">last</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">isnt</span> <span class="s1">'{'</span><span class="p">)</span>
|
||||||
<span class="nx">stack</span><span class="p">.</span><span class="nx">push</span> <span class="s1">'{'</span>
|
<span class="nx">stack</span><span class="p">.</span><span class="nx">push</span> <span class="s1">'{'</span>
|
||||||
<span class="nv">idx = </span><span class="k">if</span> <span class="nx">@tag</span><span class="p">(</span><span class="nx">i</span> <span class="o">-</span> <span class="mi">2</span><span class="p">)</span> <span class="o">is</span> <span class="s1">'@'</span> <span class="k">then</span> <span class="nx">i</span> <span class="o">-</span> <span class="mi">2</span> <span class="k">else</span> <span class="nx">i</span> <span class="o">-</span> <span class="mi">1</span>
|
<span class="nv">idx = </span><span class="k">if</span> <span class="nx">@tag</span><span class="p">(</span><span class="nx">i</span> <span class="o">-</span> <span class="mi">2</span><span class="p">)</span> <span class="o">is</span> <span class="s1">'@'</span> <span class="k">then</span> <span class="nx">i</span> <span class="o">-</span> <span class="mi">2</span> <span class="k">else</span> <span class="nx">i</span> <span class="o">-</span> <span class="mi">1</span>
|
||||||
|
<span class="nx">idx</span> <span class="o">-=</span> <span class="mi">2</span> <span class="k">if</span> <span class="nx">@tag</span><span class="p">(</span><span class="nx">idx</span> <span class="o">-</span> <span class="mi">2</span><span class="p">)</span> <span class="o">is</span> <span class="s1">'HERECOMMENT'</span>
|
||||||
<span class="nv">tok = </span><span class="p">[</span><span class="s1">'{'</span><span class="p">,</span> <span class="s1">'{'</span><span class="p">,</span> <span class="nx">token</span><span class="p">[</span><span class="mi">2</span><span class="p">]]</span>
|
<span class="nv">tok = </span><span class="p">[</span><span class="s1">'{'</span><span class="p">,</span> <span class="s1">'{'</span><span class="p">,</span> <span class="nx">token</span><span class="p">[</span><span class="mi">2</span><span class="p">]]</span>
|
||||||
<span class="nv">tok.generated = </span><span class="kc">yes</span>
|
<span class="nv">tok.generated = </span><span class="kc">yes</span>
|
||||||
<span class="nx">@tokens</span><span class="p">.</span><span class="nx">splice</span> <span class="nx">idx</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="nx">tok</span>
|
<span class="nx">@tokens</span><span class="p">.</span><span class="nx">splice</span> <span class="nx">idx</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="nx">tok</span>
|
||||||
|
@ -115,7 +112,7 @@ Insert the missing braces here, so that the parser doesn't have to.</p>
|
||||||
<span class="nx">@tokens</span><span class="p">.</span><span class="nx">splice</span> <span class="nx">i</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="p">[</span><span class="s1">'}'</span><span class="p">,</span> <span class="s1">'}'</span><span class="p">,</span> <span class="nx">token</span><span class="p">[</span><span class="mi">2</span><span class="p">]]</span>
|
<span class="nx">@tokens</span><span class="p">.</span><span class="nx">splice</span> <span class="nx">i</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="p">[</span><span class="s1">'}'</span><span class="p">,</span> <span class="s1">'}'</span><span class="p">,</span> <span class="nx">token</span><span class="p">[</span><span class="mi">2</span><span class="p">]]</span>
|
||||||
<span class="nx">@detectEnd</span> <span class="nx">i</span> <span class="o">+</span> <span class="mi">2</span><span class="p">,</span> <span class="nx">condition</span><span class="p">,</span> <span class="nx">action</span>
|
<span class="nx">@detectEnd</span> <span class="nx">i</span> <span class="o">+</span> <span class="mi">2</span><span class="p">,</span> <span class="nx">condition</span><span class="p">,</span> <span class="nx">action</span>
|
||||||
<span class="k">return</span> <span class="mi">2</span>
|
<span class="k">return</span> <span class="mi">2</span>
|
||||||
<span class="k">return</span> <span class="mi">1</span></pre></div> </td> </tr> <tr id="section-14"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-14">#</a> </div> <p>Methods may be optionally called without parentheses, for simple cases.
|
<span class="k">return</span> <span class="mi">1</span></pre></div> </td> </tr> <tr id="section-13"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-13">#</a> </div> <p>Methods may be optionally called without parentheses, for simple cases.
|
||||||
Insert the implicit parentheses here, so that the parser doesn't have to
|
Insert the implicit parentheses here, so that the parser doesn't have to
|
||||||
deal with them.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">addImplicitParentheses</span><span class="o">:</span> <span class="o">-></span>
|
deal with them.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">addImplicitParentheses</span><span class="o">:</span> <span class="o">-></span>
|
||||||
<span class="nv">classLine = </span><span class="kc">no</span>
|
<span class="nv">classLine = </span><span class="kc">no</span>
|
||||||
|
@ -135,8 +132,9 @@ deal with them.</p> </td> <td class="code">
|
||||||
<span class="nv">condition = </span><span class="p">(</span><span class="nx">token</span><span class="p">,</span> <span class="nx">i</span><span class="p">)</span> <span class="o">-></span>
|
<span class="nv">condition = </span><span class="p">(</span><span class="nx">token</span><span class="p">,</span> <span class="nx">i</span><span class="p">)</span> <span class="o">-></span>
|
||||||
<span class="k">return</span> <span class="kc">yes</span> <span class="k">if</span> <span class="o">not</span> <span class="nx">seenSingle</span> <span class="o">and</span> <span class="nx">token</span><span class="p">.</span><span class="nx">fromThen</span>
|
<span class="k">return</span> <span class="kc">yes</span> <span class="k">if</span> <span class="o">not</span> <span class="nx">seenSingle</span> <span class="o">and</span> <span class="nx">token</span><span class="p">.</span><span class="nx">fromThen</span>
|
||||||
<span class="nv">seenSingle = </span><span class="kc">yes</span> <span class="k">if</span> <span class="nx">token</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="k">in</span> <span class="p">[</span><span class="s1">'IF'</span><span class="p">,</span> <span class="s1">'ELSE'</span><span class="p">,</span> <span class="s1">'UNLESS'</span><span class="p">,</span> <span class="s1">'->'</span><span class="p">,</span> <span class="s1">'=>'</span><span class="p">]</span>
|
<span class="nv">seenSingle = </span><span class="kc">yes</span> <span class="k">if</span> <span class="nx">token</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="k">in</span> <span class="p">[</span><span class="s1">'IF'</span><span class="p">,</span> <span class="s1">'ELSE'</span><span class="p">,</span> <span class="s1">'UNLESS'</span><span class="p">,</span> <span class="s1">'->'</span><span class="p">,</span> <span class="s1">'=>'</span><span class="p">]</span>
|
||||||
|
<span class="nv">post = </span><span class="nx">@tokens</span><span class="p">[</span><span class="nx">i</span> <span class="o">+</span> <span class="mi">1</span><span class="p">]</span>
|
||||||
<span class="p">(</span><span class="o">not</span> <span class="nx">token</span><span class="p">.</span><span class="nx">generated</span> <span class="o">and</span> <span class="nx">@tokens</span><span class="p">[</span><span class="nx">i</span> <span class="o">-</span> <span class="mi">1</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span> <span class="o">isnt</span> <span class="s1">','</span> <span class="o">and</span> <span class="nx">include</span><span class="p">(</span><span class="nx">IMPLICIT_END</span><span class="p">,</span> <span class="nx">token</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span> <span class="o">and</span>
|
<span class="p">(</span><span class="o">not</span> <span class="nx">token</span><span class="p">.</span><span class="nx">generated</span> <span class="o">and</span> <span class="nx">@tokens</span><span class="p">[</span><span class="nx">i</span> <span class="o">-</span> <span class="mi">1</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span> <span class="o">isnt</span> <span class="s1">','</span> <span class="o">and</span> <span class="nx">include</span><span class="p">(</span><span class="nx">IMPLICIT_END</span><span class="p">,</span> <span class="nx">token</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span> <span class="o">and</span>
|
||||||
<span class="o">not</span> <span class="p">(</span><span class="nx">token</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">is</span> <span class="s1">'INDENT'</span> <span class="o">and</span> <span class="p">(</span><span class="nx">include</span><span class="p">(</span><span class="nx">IMPLICIT_BLOCK</span><span class="p">,</span> <span class="nx">@tag</span><span class="p">(</span><span class="nx">i</span> <span class="o">-</span> <span class="mi">1</span><span class="p">))</span> <span class="o">or</span> <span class="nx">@tag</span><span class="p">(</span><span class="nx">i</span> <span class="o">-</span> <span class="mi">2</span><span class="p">)</span> <span class="o">is</span> <span class="s1">'CLASS'</span> <span class="o">or</span> <span class="nx">@tag</span><span class="p">(</span><span class="nx">i</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span> <span class="o">is</span> <span class="s1">'{'</span><span class="p">)))</span> <span class="o">or</span>
|
<span class="o">not</span> <span class="p">(</span><span class="nx">token</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">is</span> <span class="s1">'INDENT'</span> <span class="o">and</span> <span class="p">(</span><span class="nx">include</span><span class="p">(</span><span class="nx">IMPLICIT_BLOCK</span><span class="p">,</span> <span class="nx">@tag</span><span class="p">(</span><span class="nx">i</span> <span class="o">-</span> <span class="mi">1</span><span class="p">))</span> <span class="o">or</span> <span class="nx">@tag</span><span class="p">(</span><span class="nx">i</span> <span class="o">-</span> <span class="mi">2</span><span class="p">)</span> <span class="o">is</span> <span class="s1">'CLASS'</span> <span class="o">or</span> <span class="p">(</span><span class="nx">post</span> <span class="o">and</span> <span class="nx">post</span><span class="p">.</span><span class="nx">generated</span> <span class="o">and</span> <span class="nx">post</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">is</span> <span class="s1">'{'</span><span class="p">))))</span> <span class="o">or</span>
|
||||||
<span class="nx">token</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">is</span> <span class="s1">'PROPERTY_ACCESS'</span> <span class="o">and</span> <span class="nx">@tag</span><span class="p">(</span><span class="nx">i</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span> <span class="o">is</span> <span class="s1">'OUTDENT'</span>
|
<span class="nx">token</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">is</span> <span class="s1">'PROPERTY_ACCESS'</span> <span class="o">and</span> <span class="nx">@tag</span><span class="p">(</span><span class="nx">i</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span> <span class="o">is</span> <span class="s1">'OUTDENT'</span>
|
||||||
<span class="nv">action = </span><span class="p">(</span><span class="nx">token</span><span class="p">,</span> <span class="nx">i</span><span class="p">)</span> <span class="o">-></span>
|
<span class="nv">action = </span><span class="p">(</span><span class="nx">token</span><span class="p">,</span> <span class="nx">i</span><span class="p">)</span> <span class="o">-></span>
|
||||||
<span class="nv">idx = </span><span class="k">if</span> <span class="nx">token</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">is</span> <span class="s1">'OUTDENT'</span> <span class="k">then</span> <span class="nx">i</span> <span class="o">+</span> <span class="mi">1</span> <span class="k">else</span> <span class="nx">i</span>
|
<span class="nv">idx = </span><span class="k">if</span> <span class="nx">token</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">is</span> <span class="s1">'OUTDENT'</span> <span class="k">then</span> <span class="nx">i</span> <span class="o">+</span> <span class="mi">1</span> <span class="k">else</span> <span class="nx">i</span>
|
||||||
|
@ -144,7 +142,7 @@ deal with them.</p> </td> <td class="code">
|
||||||
<span class="nx">@detectEnd</span> <span class="nx">i</span> <span class="o">+</span> <span class="nx">idx</span><span class="p">,</span> <span class="nx">condition</span><span class="p">,</span> <span class="nx">action</span>
|
<span class="nx">@detectEnd</span> <span class="nx">i</span> <span class="o">+</span> <span class="nx">idx</span><span class="p">,</span> <span class="nx">condition</span><span class="p">,</span> <span class="nx">action</span>
|
||||||
<span class="nx">prev</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">=</span> <span class="s1">'FUNC_EXIST'</span> <span class="k">if</span> <span class="nx">prev</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">is</span> <span class="s1">'?'</span>
|
<span class="nx">prev</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">=</span> <span class="s1">'FUNC_EXIST'</span> <span class="k">if</span> <span class="nx">prev</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">is</span> <span class="s1">'?'</span>
|
||||||
<span class="k">return</span> <span class="mi">2</span>
|
<span class="k">return</span> <span class="mi">2</span>
|
||||||
<span class="k">return</span> <span class="mi">1</span></pre></div> </td> </tr> <tr id="section-15"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-15">#</a> </div> <p>Because our grammar is LALR(1), it can't handle some single-line
|
<span class="k">return</span> <span class="mi">1</span></pre></div> </td> </tr> <tr id="section-14"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-14">#</a> </div> <p>Because our grammar is LALR(1), it can't handle some single-line
|
||||||
expressions that lack ending delimiters. The <strong>Rewriter</strong> adds the implicit
|
expressions that lack ending delimiters. The <strong>Rewriter</strong> adds the implicit
|
||||||
blocks, so it doesn't need to. ')' can close a single-line block,
|
blocks, so it doesn't need to. ')' can close a single-line block,
|
||||||
but we need to make sure it's balanced.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">addImplicitIndentation</span><span class="o">:</span> <span class="o">-></span>
|
but we need to make sure it's balanced.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">addImplicitIndentation</span><span class="o">:</span> <span class="o">-></span>
|
||||||
|
@ -172,7 +170,7 @@ but we need to make sure it's balanced.</p> </td> <td cl
|
||||||
<span class="nx">@detectEnd</span> <span class="nx">i</span> <span class="o">+</span> <span class="mi">2</span><span class="p">,</span> <span class="nx">condition</span><span class="p">,</span> <span class="nx">action</span>
|
<span class="nx">@detectEnd</span> <span class="nx">i</span> <span class="o">+</span> <span class="mi">2</span><span class="p">,</span> <span class="nx">condition</span><span class="p">,</span> <span class="nx">action</span>
|
||||||
<span class="nx">@tokens</span><span class="p">.</span><span class="nx">splice</span> <span class="nx">i</span><span class="p">,</span> <span class="mi">1</span> <span class="k">if</span> <span class="nx">token</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">is</span> <span class="s1">'THEN'</span>
|
<span class="nx">@tokens</span><span class="p">.</span><span class="nx">splice</span> <span class="nx">i</span><span class="p">,</span> <span class="mi">1</span> <span class="k">if</span> <span class="nx">token</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">is</span> <span class="s1">'THEN'</span>
|
||||||
<span class="k">return</span> <span class="mi">2</span>
|
<span class="k">return</span> <span class="mi">2</span>
|
||||||
<span class="k">return</span> <span class="mi">1</span></pre></div> </td> </tr> <tr id="section-16"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-16">#</a> </div> <p>Tag postfix conditionals as such, so that we can parse them with a
|
<span class="k">return</span> <span class="mi">1</span></pre></div> </td> </tr> <tr id="section-15"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-15">#</a> </div> <p>Tag postfix conditionals as such, so that we can parse them with a
|
||||||
different precedence.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">tagPostfixConditionals</span><span class="o">:</span> <span class="o">-></span>
|
different precedence.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">tagPostfixConditionals</span><span class="o">:</span> <span class="o">-></span>
|
||||||
<span class="nx">@scanTokens</span> <span class="p">(</span><span class="nx">token</span><span class="p">,</span> <span class="nx">i</span><span class="p">)</span> <span class="o">-></span>
|
<span class="nx">@scanTokens</span> <span class="p">(</span><span class="nx">token</span><span class="p">,</span> <span class="nx">i</span><span class="p">)</span> <span class="o">-></span>
|
||||||
<span class="k">if</span> <span class="nx">token</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="k">in</span> <span class="p">[</span><span class="s1">'IF'</span><span class="p">,</span> <span class="s1">'UNLESS'</span><span class="p">]</span>
|
<span class="k">if</span> <span class="nx">token</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="k">in</span> <span class="p">[</span><span class="s1">'IF'</span><span class="p">,</span> <span class="s1">'UNLESS'</span><span class="p">]</span>
|
||||||
|
@ -183,7 +181,7 @@ different precedence.</p> </td> <td class="code">
|
||||||
<span class="nx">original</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">=</span> <span class="s1">'POST_'</span> <span class="o">+</span> <span class="nx">original</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="k">if</span> <span class="nx">token</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">isnt</span> <span class="s1">'INDENT'</span>
|
<span class="nx">original</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">=</span> <span class="s1">'POST_'</span> <span class="o">+</span> <span class="nx">original</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="k">if</span> <span class="nx">token</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">isnt</span> <span class="s1">'INDENT'</span>
|
||||||
<span class="nx">@detectEnd</span> <span class="nx">i</span> <span class="o">+</span> <span class="mi">1</span><span class="p">,</span> <span class="nx">condition</span><span class="p">,</span> <span class="nx">action</span>
|
<span class="nx">@detectEnd</span> <span class="nx">i</span> <span class="o">+</span> <span class="mi">1</span><span class="p">,</span> <span class="nx">condition</span><span class="p">,</span> <span class="nx">action</span>
|
||||||
<span class="k">return</span> <span class="mi">1</span>
|
<span class="k">return</span> <span class="mi">1</span>
|
||||||
<span class="k">return</span> <span class="mi">1</span></pre></div> </td> </tr> <tr id="section-17"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-17">#</a> </div> <p>Ensure that all listed pairs of tokens are correctly balanced throughout
|
<span class="k">return</span> <span class="mi">1</span></pre></div> </td> </tr> <tr id="section-16"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-16">#</a> </div> <p>Ensure that all listed pairs of tokens are correctly balanced throughout
|
||||||
the course of the token stream.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">ensureBalance</span><span class="o">:</span> <span class="p">(</span><span class="nx">pairs</span><span class="p">)</span> <span class="o">-></span>
|
the course of the token stream.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">ensureBalance</span><span class="o">:</span> <span class="p">(</span><span class="nx">pairs</span><span class="p">)</span> <span class="o">-></span>
|
||||||
<span class="nv">levels = </span><span class="p">{}</span>
|
<span class="nv">levels = </span><span class="p">{}</span>
|
||||||
<span class="nv">openLine = </span><span class="p">{}</span>
|
<span class="nv">openLine = </span><span class="p">{}</span>
|
||||||
|
@ -201,7 +199,7 @@ the course of the token stream.</p> </td> <td class="cod
|
||||||
<span class="k">if</span> <span class="nx">unclosed</span><span class="p">.</span><span class="nx">length</span>
|
<span class="k">if</span> <span class="nx">unclosed</span><span class="p">.</span><span class="nx">length</span>
|
||||||
<span class="nv">open = </span><span class="nx">unclosed</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
|
<span class="nv">open = </span><span class="nx">unclosed</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
|
||||||
<span class="nv">line = </span><span class="nx">openLine</span><span class="p">[</span><span class="nx">open</span><span class="p">]</span> <span class="o">+</span> <span class="mi">1</span>
|
<span class="nv">line = </span><span class="nx">openLine</span><span class="p">[</span><span class="nx">open</span><span class="p">]</span> <span class="o">+</span> <span class="mi">1</span>
|
||||||
<span class="k">throw</span> <span class="k">new</span> <span class="nb">Error</span> <span class="s2">"unclosed #{open} on line #{line}"</span></pre></div> </td> </tr> <tr id="section-18"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-18">#</a> </div> <p>We'd like to support syntax like this:</p>
|
<span class="k">throw</span> <span class="k">new</span> <span class="nb">Error</span> <span class="s2">"unclosed #{open} on line #{line}"</span></pre></div> </td> </tr> <tr id="section-17"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-17">#</a> </div> <p>We'd like to support syntax like this:</p>
|
||||||
|
|
||||||
<pre><code>el.click((event) ->
|
<pre><code>el.click((event) ->
|
||||||
el.hide())
|
el.hide())
|
||||||
|
@ -248,20 +246,20 @@ rewriting.</li>
|
||||||
<span class="nx">@tokens</span><span class="p">.</span><span class="nx">splice</span> <span class="nx">i</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="nx">val</span>
|
<span class="nx">@tokens</span><span class="p">.</span><span class="nx">splice</span> <span class="nx">i</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="nx">val</span>
|
||||||
<span class="k">return</span> <span class="mi">1</span>
|
<span class="k">return</span> <span class="mi">1</span>
|
||||||
<span class="k">else</span>
|
<span class="k">else</span>
|
||||||
<span class="k">return</span> <span class="mi">1</span></pre></div> </td> </tr> <tr id="section-19"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-19">#</a> </div> <p>Generate the indentation tokens, based on another token on the same line.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">indentation</span><span class="o">:</span> <span class="p">(</span><span class="nx">token</span><span class="p">)</span> <span class="o">-></span>
|
<span class="k">return</span> <span class="mi">1</span></pre></div> </td> </tr> <tr id="section-18"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-18">#</a> </div> <p>Generate the indentation tokens, based on another token on the same line.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">indentation</span><span class="o">:</span> <span class="p">(</span><span class="nx">token</span><span class="p">)</span> <span class="o">-></span>
|
||||||
<span class="p">[[</span><span class="s1">'INDENT'</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="nx">token</span><span class="p">[</span><span class="mi">2</span><span class="p">]],</span> <span class="p">[</span><span class="s1">'OUTDENT'</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="nx">token</span><span class="p">[</span><span class="mi">2</span><span class="p">]]]</span></pre></div> </td> </tr> <tr id="section-20"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-20">#</a> </div> <p>Look up a tag by token index.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">tag</span><span class="o">:</span> <span class="p">(</span><span class="nx">i</span><span class="p">)</span> <span class="o">-></span>
|
<span class="p">[[</span><span class="s1">'INDENT'</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="nx">token</span><span class="p">[</span><span class="mi">2</span><span class="p">]],</span> <span class="p">[</span><span class="s1">'OUTDENT'</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="nx">token</span><span class="p">[</span><span class="mi">2</span><span class="p">]]]</span></pre></div> </td> </tr> <tr id="section-19"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-19">#</a> </div> <p>Look up a tag by token index.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">tag</span><span class="o">:</span> <span class="p">(</span><span class="nx">i</span><span class="p">)</span> <span class="o">-></span>
|
||||||
<span class="nx">@tokens</span><span class="p">[</span><span class="nx">i</span><span class="p">]</span> <span class="o">and</span> <span class="nx">@tokens</span><span class="p">[</span><span class="nx">i</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span></pre></div> </td> </tr> <tr id="section-21"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-21">#</a> </div> <h2>Constants</h2> </td> <td class="code"> <div class="highlight"><pre></pre></div> </td> </tr> <tr id="section-22"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-22">#</a> </div> <p>List of the token pairs that must be balanced.</p> </td> <td class="code"> <div class="highlight"><pre><span class="nv">BALANCED_PAIRS = </span><span class="p">[[</span><span class="s1">'('</span><span class="p">,</span> <span class="s1">')'</span><span class="p">],</span> <span class="p">[</span><span class="s1">'['</span><span class="p">,</span> <span class="s1">']'</span><span class="p">],</span> <span class="p">[</span><span class="s1">'{'</span><span class="p">,</span> <span class="s1">'}'</span><span class="p">],</span> <span class="p">[</span><span class="s1">'INDENT'</span><span class="p">,</span> <span class="s1">'OUTDENT'</span><span class="p">],</span>
|
<span class="nx">@tokens</span><span class="p">[</span><span class="nx">i</span><span class="p">]</span> <span class="o">and</span> <span class="nx">@tokens</span><span class="p">[</span><span class="nx">i</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span></pre></div> </td> </tr> <tr id="section-20"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-20">#</a> </div> <h2>Constants</h2> </td> <td class="code"> <div class="highlight"><pre></pre></div> </td> </tr> <tr id="section-21"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-21">#</a> </div> <p>List of the token pairs that must be balanced.</p> </td> <td class="code"> <div class="highlight"><pre><span class="nv">BALANCED_PAIRS = </span><span class="p">[[</span><span class="s1">'('</span><span class="p">,</span> <span class="s1">')'</span><span class="p">],</span> <span class="p">[</span><span class="s1">'['</span><span class="p">,</span> <span class="s1">']'</span><span class="p">],</span> <span class="p">[</span><span class="s1">'{'</span><span class="p">,</span> <span class="s1">'}'</span><span class="p">],</span> <span class="p">[</span><span class="s1">'INDENT'</span><span class="p">,</span> <span class="s1">'OUTDENT'</span><span class="p">],</span>
|
||||||
<span class="p">[</span><span class="s1">'PARAM_START'</span><span class="p">,</span> <span class="s1">'PARAM_END'</span><span class="p">],</span> <span class="p">[</span><span class="s1">'CALL_START'</span><span class="p">,</span> <span class="s1">'CALL_END'</span><span class="p">],</span> <span class="p">[</span><span class="s1">'INDEX_START'</span><span class="p">,</span> <span class="s1">'INDEX_END'</span><span class="p">]]</span></pre></div> </td> </tr> <tr id="section-23"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-23">#</a> </div> <p>The inverse mappings of <code>BALANCED_PAIRS</code> we're trying to fix up, so we can
|
<span class="p">[</span><span class="s1">'PARAM_START'</span><span class="p">,</span> <span class="s1">'PARAM_END'</span><span class="p">],</span> <span class="p">[</span><span class="s1">'CALL_START'</span><span class="p">,</span> <span class="s1">'CALL_END'</span><span class="p">],</span> <span class="p">[</span><span class="s1">'INDEX_START'</span><span class="p">,</span> <span class="s1">'INDEX_END'</span><span class="p">]]</span></pre></div> </td> </tr> <tr id="section-22"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-22">#</a> </div> <p>The inverse mappings of <code>BALANCED_PAIRS</code> we're trying to fix up, so we can
|
||||||
look things up from either end.</p> </td> <td class="code"> <div class="highlight"><pre><span class="nv">INVERSES = </span><span class="p">{}</span>
|
look things up from either end.</p> </td> <td class="code"> <div class="highlight"><pre><span class="nv">INVERSES = </span><span class="p">{}</span>
|
||||||
<span class="k">for</span> <span class="nx">pair</span> <span class="k">in</span> <span class="nx">BALANCED_PAIRS</span>
|
<span class="k">for</span> <span class="nx">pair</span> <span class="k">in</span> <span class="nx">BALANCED_PAIRS</span>
|
||||||
<span class="nx">INVERSES</span><span class="p">[</span><span class="nx">pair</span><span class="p">[</span><span class="mi">0</span><span class="p">]]</span> <span class="o">=</span> <span class="nx">pair</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
|
<span class="nx">INVERSES</span><span class="p">[</span><span class="nx">pair</span><span class="p">[</span><span class="mi">0</span><span class="p">]]</span> <span class="o">=</span> <span class="nx">pair</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
|
||||||
<span class="nx">INVERSES</span><span class="p">[</span><span class="nx">pair</span><span class="p">[</span><span class="mi">1</span><span class="p">]]</span> <span class="o">=</span> <span class="nx">pair</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span></pre></div> </td> </tr> <tr id="section-24"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-24">#</a> </div> <p>The tokens that signal the start of a balanced pair.</p> </td> <td class="code"> <div class="highlight"><pre><span class="nv">EXPRESSION_START = </span><span class="nx">pair</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="k">for</span> <span class="nx">pair</span> <span class="k">in</span> <span class="nx">BALANCED_PAIRS</span></pre></div> </td> </tr> <tr id="section-25"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-25">#</a> </div> <p>The tokens that signal the end of a balanced pair.</p> </td> <td class="code"> <div class="highlight"><pre><span class="nv">EXPRESSION_END = </span><span class="nx">pair</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="k">for</span> <span class="nx">pair</span> <span class="k">in</span> <span class="nx">BALANCED_PAIRS</span></pre></div> </td> </tr> <tr id="section-26"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-26">#</a> </div> <p>Tokens that indicate the close of a clause of an expression.</p> </td> <td class="code"> <div class="highlight"><pre><span class="nv">EXPRESSION_CLOSE = </span><span class="p">[</span><span class="s1">'CATCH'</span><span class="p">,</span> <span class="s1">'WHEN'</span><span class="p">,</span> <span class="s1">'ELSE'</span><span class="p">,</span> <span class="s1">'FINALLY'</span><span class="p">].</span><span class="nx">concat</span> <span class="nx">EXPRESSION_END</span></pre></div> </td> </tr> <tr id="section-27"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-27">#</a> </div> <p>Tokens that, if followed by an <code>IMPLICIT_CALL</code>, indicate a function invocation.</p> </td> <td class="code"> <div class="highlight"><pre><span class="nv">IMPLICIT_FUNC = </span><span class="p">[</span><span class="s1">'IDENTIFIER'</span><span class="p">,</span> <span class="s1">'SUPER'</span><span class="p">,</span> <span class="s1">')'</span><span class="p">,</span> <span class="s1">'CALL_END'</span><span class="p">,</span> <span class="s1">']'</span><span class="p">,</span> <span class="s1">'INDEX_END'</span><span class="p">,</span> <span class="s1">'@'</span><span class="p">,</span> <span class="s1">'THIS'</span><span class="p">]</span></pre></div> </td> </tr> <tr id="section-28"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-28">#</a> </div> <p>If preceded by an <code>IMPLICIT_FUNC</code>, indicates a function invocation.</p> </td> <td class="code"> <div class="highlight"><pre><span class="nv">IMPLICIT_CALL = </span><span class="p">[</span>
|
<span class="nx">INVERSES</span><span class="p">[</span><span class="nx">pair</span><span class="p">[</span><span class="mi">1</span><span class="p">]]</span> <span class="o">=</span> <span class="nx">pair</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span></pre></div> </td> </tr> <tr id="section-23"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-23">#</a> </div> <p>The tokens that signal the start of a balanced pair.</p> </td> <td class="code"> <div class="highlight"><pre><span class="nv">EXPRESSION_START = </span><span class="nx">pair</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="k">for</span> <span class="nx">pair</span> <span class="k">in</span> <span class="nx">BALANCED_PAIRS</span></pre></div> </td> </tr> <tr id="section-24"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-24">#</a> </div> <p>The tokens that signal the end of a balanced pair.</p> </td> <td class="code"> <div class="highlight"><pre><span class="nv">EXPRESSION_END = </span><span class="nx">pair</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="k">for</span> <span class="nx">pair</span> <span class="k">in</span> <span class="nx">BALANCED_PAIRS</span></pre></div> </td> </tr> <tr id="section-25"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-25">#</a> </div> <p>Tokens that indicate the close of a clause of an expression.</p> </td> <td class="code"> <div class="highlight"><pre><span class="nv">EXPRESSION_CLOSE = </span><span class="p">[</span><span class="s1">'CATCH'</span><span class="p">,</span> <span class="s1">'WHEN'</span><span class="p">,</span> <span class="s1">'ELSE'</span><span class="p">,</span> <span class="s1">'FINALLY'</span><span class="p">].</span><span class="nx">concat</span> <span class="nx">EXPRESSION_END</span></pre></div> </td> </tr> <tr id="section-26"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-26">#</a> </div> <p>Tokens that, if followed by an <code>IMPLICIT_CALL</code>, indicate a function invocation.</p> </td> <td class="code"> <div class="highlight"><pre><span class="nv">IMPLICIT_FUNC = </span><span class="p">[</span><span class="s1">'IDENTIFIER'</span><span class="p">,</span> <span class="s1">'SUPER'</span><span class="p">,</span> <span class="s1">')'</span><span class="p">,</span> <span class="s1">'CALL_END'</span><span class="p">,</span> <span class="s1">']'</span><span class="p">,</span> <span class="s1">'INDEX_END'</span><span class="p">,</span> <span class="s1">'@'</span><span class="p">,</span> <span class="s1">'THIS'</span><span class="p">]</span></pre></div> </td> </tr> <tr id="section-27"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-27">#</a> </div> <p>If preceded by an <code>IMPLICIT_FUNC</code>, indicates a function invocation.</p> </td> <td class="code"> <div class="highlight"><pre><span class="nv">IMPLICIT_CALL = </span><span class="p">[</span>
|
||||||
<span class="s1">'IDENTIFIER'</span><span class="p">,</span> <span class="s1">'NUMBER'</span><span class="p">,</span> <span class="s1">'STRING'</span><span class="p">,</span> <span class="s1">'JS'</span><span class="p">,</span> <span class="s1">'REGEX'</span><span class="p">,</span> <span class="s1">'NEW'</span><span class="p">,</span> <span class="s1">'PARAM_START'</span><span class="p">,</span> <span class="s1">'CLASS'</span><span class="p">,</span>
|
<span class="s1">'IDENTIFIER'</span><span class="p">,</span> <span class="s1">'NUMBER'</span><span class="p">,</span> <span class="s1">'STRING'</span><span class="p">,</span> <span class="s1">'JS'</span><span class="p">,</span> <span class="s1">'REGEX'</span><span class="p">,</span> <span class="s1">'NEW'</span><span class="p">,</span> <span class="s1">'PARAM_START'</span><span class="p">,</span> <span class="s1">'CLASS'</span><span class="p">,</span>
|
||||||
<span class="s1">'IF'</span><span class="p">,</span> <span class="s1">'UNLESS'</span><span class="p">,</span> <span class="s1">'TRY'</span><span class="p">,</span> <span class="s1">'SWITCH'</span><span class="p">,</span> <span class="s1">'THIS'</span><span class="p">,</span> <span class="s1">'NULL'</span><span class="p">,</span> <span class="s1">'UNARY'</span>
|
<span class="s1">'IF'</span><span class="p">,</span> <span class="s1">'UNLESS'</span><span class="p">,</span> <span class="s1">'TRY'</span><span class="p">,</span> <span class="s1">'SWITCH'</span><span class="p">,</span> <span class="s1">'THIS'</span><span class="p">,</span> <span class="s1">'NULL'</span><span class="p">,</span> <span class="s1">'UNARY'</span>
|
||||||
<span class="s1">'TRUE'</span><span class="p">,</span> <span class="s1">'FALSE'</span><span class="p">,</span> <span class="s1">'YES'</span><span class="p">,</span> <span class="s1">'NO'</span><span class="p">,</span> <span class="s1">'ON'</span><span class="p">,</span> <span class="s1">'OFF'</span><span class="p">,</span>
|
<span class="s1">'TRUE'</span><span class="p">,</span> <span class="s1">'FALSE'</span><span class="p">,</span> <span class="s1">'YES'</span><span class="p">,</span> <span class="s1">'NO'</span><span class="p">,</span> <span class="s1">'ON'</span><span class="p">,</span> <span class="s1">'OFF'</span><span class="p">,</span>
|
||||||
<span class="s1">'@'</span><span class="p">,</span> <span class="s1">'->'</span><span class="p">,</span> <span class="s1">'=>'</span><span class="p">,</span> <span class="s1">'['</span><span class="p">,</span> <span class="s1">'('</span><span class="p">,</span> <span class="s1">'{'</span>
|
<span class="s1">'@'</span><span class="p">,</span> <span class="s1">'->'</span><span class="p">,</span> <span class="s1">'=>'</span><span class="p">,</span> <span class="s1">'['</span><span class="p">,</span> <span class="s1">'('</span><span class="p">,</span> <span class="s1">'{'</span>
|
||||||
<span class="p">]</span></pre></div> </td> </tr> <tr id="section-29"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-29">#</a> </div> <p>Tokens indicating that the implicit call must enclose a block of expressions.</p> </td> <td class="code"> <div class="highlight"><pre><span class="nv">IMPLICIT_BLOCK = </span><span class="p">[</span><span class="s1">'->'</span><span class="p">,</span> <span class="s1">'=>'</span><span class="p">,</span> <span class="s1">'{'</span><span class="p">,</span> <span class="s1">'['</span><span class="p">,</span> <span class="s1">','</span><span class="p">]</span></pre></div> </td> </tr> <tr id="section-30"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-30">#</a> </div> <p>Tokens that always mark the end of an implicit call for single-liners.</p> </td> <td class="code"> <div class="highlight"><pre><span class="nv">IMPLICIT_END = </span><span class="p">[</span><span class="s1">'POST_IF'</span><span class="p">,</span> <span class="s1">'POST_UNLESS'</span><span class="p">,</span> <span class="s1">'FOR'</span><span class="p">,</span> <span class="s1">'WHILE'</span><span class="p">,</span> <span class="s1">'UNTIL'</span><span class="p">,</span> <span class="s1">'LOOP'</span><span class="p">,</span> <span class="s1">'TERMINATOR'</span><span class="p">,</span> <span class="s1">'INDENT'</span><span class="p">]</span></pre></div> </td> </tr> <tr id="section-31"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-31">#</a> </div> <p>Single-line flavors of block expressions that have unclosed endings.
|
<span class="p">]</span></pre></div> </td> </tr> <tr id="section-28"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-28">#</a> </div> <p>Tokens indicating that the implicit call must enclose a block of expressions.</p> </td> <td class="code"> <div class="highlight"><pre><span class="nv">IMPLICIT_BLOCK = </span><span class="p">[</span><span class="s1">'->'</span><span class="p">,</span> <span class="s1">'=>'</span><span class="p">,</span> <span class="s1">'{'</span><span class="p">,</span> <span class="s1">'['</span><span class="p">,</span> <span class="s1">','</span><span class="p">]</span></pre></div> </td> </tr> <tr id="section-29"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-29">#</a> </div> <p>Tokens that always mark the end of an implicit call for single-liners.</p> </td> <td class="code"> <div class="highlight"><pre><span class="nv">IMPLICIT_END = </span><span class="p">[</span><span class="s1">'POST_IF'</span><span class="p">,</span> <span class="s1">'POST_UNLESS'</span><span class="p">,</span> <span class="s1">'FOR'</span><span class="p">,</span> <span class="s1">'WHILE'</span><span class="p">,</span> <span class="s1">'UNTIL'</span><span class="p">,</span> <span class="s1">'LOOP'</span><span class="p">,</span> <span class="s1">'TERMINATOR'</span><span class="p">,</span> <span class="s1">'INDENT'</span><span class="p">]</span></pre></div> </td> </tr> <tr id="section-30"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-30">#</a> </div> <p>Single-line flavors of block expressions that have unclosed endings.
|
||||||
The grammar can't disambiguate them, so we insert the implicit indentation.</p> </td> <td class="code"> <div class="highlight"><pre><span class="nv">SINGLE_LINERS = </span><span class="p">[</span><span class="s1">'ELSE'</span><span class="p">,</span> <span class="s2">"->"</span><span class="p">,</span> <span class="s2">"=>"</span><span class="p">,</span> <span class="s1">'TRY'</span><span class="p">,</span> <span class="s1">'FINALLY'</span><span class="p">,</span> <span class="s1">'THEN'</span><span class="p">]</span>
|
The grammar can't disambiguate them, so we insert the implicit indentation.</p> </td> <td class="code"> <div class="highlight"><pre><span class="nv">SINGLE_LINERS = </span><span class="p">[</span><span class="s1">'ELSE'</span><span class="p">,</span> <span class="s2">"->"</span><span class="p">,</span> <span class="s2">"=>"</span><span class="p">,</span> <span class="s1">'TRY'</span><span class="p">,</span> <span class="s1">'FINALLY'</span><span class="p">,</span> <span class="s1">'THEN'</span><span class="p">]</span>
|
||||||
<span class="nv">SINGLE_CLOSERS = </span><span class="p">[</span><span class="s1">'TERMINATOR'</span><span class="p">,</span> <span class="s1">'CATCH'</span><span class="p">,</span> <span class="s1">'FINALLY'</span><span class="p">,</span> <span class="s1">'ELSE'</span><span class="p">,</span> <span class="s1">'OUTDENT'</span><span class="p">,</span> <span class="s1">'LEADING_WHEN'</span><span class="p">]</span></pre></div> </td> </tr> <tr id="section-32"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-32">#</a> </div> <p>Tokens that end a line.</p> </td> <td class="code"> <div class="highlight"><pre><span class="nv">LINEBREAKS = </span><span class="p">[</span><span class="s1">'TERMINATOR'</span><span class="p">,</span> <span class="s1">'INDENT'</span><span class="p">,</span> <span class="s1">'OUTDENT'</span><span class="p">]</span>
|
<span class="nv">SINGLE_CLOSERS = </span><span class="p">[</span><span class="s1">'TERMINATOR'</span><span class="p">,</span> <span class="s1">'CATCH'</span><span class="p">,</span> <span class="s1">'FINALLY'</span><span class="p">,</span> <span class="s1">'ELSE'</span><span class="p">,</span> <span class="s1">'OUTDENT'</span><span class="p">,</span> <span class="s1">'LEADING_WHEN'</span><span class="p">]</span></pre></div> </td> </tr> <tr id="section-31"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-31">#</a> </div> <p>Tokens that end a line.</p> </td> <td class="code"> <div class="highlight"><pre><span class="nv">LINEBREAKS = </span><span class="p">[</span><span class="s1">'TERMINATOR'</span><span class="p">,</span> <span class="s1">'INDENT'</span><span class="p">,</span> <span class="s1">'OUTDENT'</span><span class="p">]</span>
|
||||||
|
|
||||||
</pre></div> </td> </tr> </tbody> </table> </div> </body> </html>
|
</pre></div> </td> </tr> </tbody> </table> </div> </body> </html>
|
|
@ -3,7 +3,7 @@ generate code, you create a tree of scopes in the same shape as the nested
|
||||||
function bodies. Each scope knows about the variables declared within it,
|
function bodies. Each scope knows about the variables declared within it,
|
||||||
and has a reference to its parent enclosing scope. In this way, we know which
|
and has a reference to its parent enclosing scope. In this way, we know which
|
||||||
variables are new and need to be declared with <code>var</code>, and which are shared
|
variables are new and need to be declared with <code>var</code>, and which are shared
|
||||||
with the outside.</p> </td> <td class="code"> <div class="highlight"><pre></pre></div> </td> </tr> <tr id="section-2"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-2">#</a> </div> <p>Set up exported variables for both <strong>Node.js</strong> and the browser.</p> </td> <td class="code"> <div class="highlight"><pre><span class="k">this</span><span class="p">.</span><span class="nv">exports = </span><span class="k">this</span> <span class="nx">unless</span> <span class="nx">process</span><span class="o">?</span>
|
with the outside.</p> </td> <td class="code"> <div class="highlight"><pre></pre></div> </td> </tr> <tr id="section-2"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-2">#</a> </div> <p>Import the helpers we plan to use.</p> </td> <td class="code"> <div class="highlight"><pre><span class="p">{</span><span class="nx">extend</span><span class="p">}</span> <span class="o">=</span> <span class="nx">require</span><span class="p">(</span><span class="s1">'./helpers'</span><span class="p">).</span><span class="nx">helpers</span>
|
||||||
|
|
||||||
<span class="nv">exports.Scope = </span><span class="nx">class</span> <span class="nx">Scope</span></pre></div> </td> </tr> <tr id="section-3"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-3">#</a> </div> <p>The top-level <strong>Scope</strong> object.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">@root</span><span class="o">:</span> <span class="kc">null</span></pre></div> </td> </tr> <tr id="section-4"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-4">#</a> </div> <p>Initialize a scope with its parent, for lookups up the chain,
|
<span class="nv">exports.Scope = </span><span class="nx">class</span> <span class="nx">Scope</span></pre></div> </td> </tr> <tr id="section-3"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-3">#</a> </div> <p>The top-level <strong>Scope</strong> object.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">@root</span><span class="o">:</span> <span class="kc">null</span></pre></div> </td> </tr> <tr id="section-4"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-4">#</a> </div> <p>Initialize a scope with its parent, for lookups up the chain,
|
||||||
as well as a reference to the <strong>Expressions</strong> node is belongs to, which is
|
as well as a reference to the <strong>Expressions</strong> node is belongs to, which is
|
||||||
|
@ -12,39 +12,46 @@ it wraps.</p> </td> <td class="code"> <div
|
||||||
<span class="p">[</span><span class="nx">@parent</span><span class="p">,</span> <span class="nx">@expressions</span><span class="p">,</span> <span class="nx">@method</span><span class="p">]</span> <span class="o">=</span> <span class="p">[</span><span class="nx">parent</span><span class="p">,</span> <span class="nx">expressions</span><span class="p">,</span> <span class="nx">method</span><span class="p">]</span>
|
<span class="p">[</span><span class="nx">@parent</span><span class="p">,</span> <span class="nx">@expressions</span><span class="p">,</span> <span class="nx">@method</span><span class="p">]</span> <span class="o">=</span> <span class="p">[</span><span class="nx">parent</span><span class="p">,</span> <span class="nx">expressions</span><span class="p">,</span> <span class="nx">method</span><span class="p">]</span>
|
||||||
<span class="vi">@variables = </span><span class="p">{}</span>
|
<span class="vi">@variables = </span><span class="p">{}</span>
|
||||||
<span class="k">if</span> <span class="nx">@parent</span>
|
<span class="k">if</span> <span class="nx">@parent</span>
|
||||||
<span class="vi">@tempVar = </span><span class="nx">@parent</span><span class="p">.</span><span class="nx">tempVar</span>
|
<span class="vi">@garbage = </span><span class="nx">@parent</span><span class="p">.</span><span class="nx">garbage</span>
|
||||||
<span class="k">else</span>
|
<span class="k">else</span>
|
||||||
<span class="nv">Scope.root = </span><span class="k">this</span>
|
<span class="vi">@garbage = </span><span class="p">[]</span>
|
||||||
<span class="vi">@tempVar = </span><span class="s1">'_a'</span></pre></div> </td> </tr> <tr id="section-5"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-5">#</a> </div> <p>Look up a variable name in lexical scope, and declare it if it does not
|
<span class="nv">Scope.root = </span><span class="k">this</span></pre></div> </td> </tr> <tr id="section-5"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-5">#</a> </div> <p>Create a new garbage level</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">startLevel</span><span class="o">:</span> <span class="o">-></span>
|
||||||
|
<span class="nx">@garbage</span><span class="p">.</span><span class="nx">push</span> <span class="p">[]</span></pre></div> </td> </tr> <tr id="section-6"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-6">#</a> </div> <p>Return to the previous garbage level and erase referenced temporary
|
||||||
|
variables in current level from scope.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">endLevel</span><span class="o">:</span> <span class="o">-></span>
|
||||||
|
<span class="p">(</span><span class="nx">@variables</span><span class="p">[</span><span class="nx">name</span><span class="p">]</span> <span class="o">=</span> <span class="s1">'reuse'</span><span class="p">)</span> <span class="k">for</span> <span class="nx">name</span> <span class="k">in</span> <span class="nx">@garbage</span><span class="p">.</span><span class="nx">pop</span><span class="p">()</span> <span class="k">when</span> <span class="nx">@variables</span><span class="p">[</span><span class="nx">name</span><span class="p">]</span> <span class="o">is</span> <span class="s1">'var'</span></pre></div> </td> </tr> <tr id="section-7"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-7">#</a> </div> <p>Look up a variable name in lexical scope, and declare it if it does not
|
||||||
already exist.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">find</span><span class="o">:</span> <span class="p">(</span><span class="nx">name</span><span class="p">,</span> <span class="nx">options</span><span class="p">)</span> <span class="o">-></span>
|
already exist.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">find</span><span class="o">:</span> <span class="p">(</span><span class="nx">name</span><span class="p">,</span> <span class="nx">options</span><span class="p">)</span> <span class="o">-></span>
|
||||||
<span class="k">return</span> <span class="kc">true</span> <span class="k">if</span> <span class="nx">@check</span> <span class="nx">name</span><span class="p">,</span> <span class="nx">options</span>
|
<span class="k">return</span> <span class="kc">true</span> <span class="k">if</span> <span class="nx">@check</span> <span class="nx">name</span><span class="p">,</span> <span class="nx">options</span>
|
||||||
<span class="nx">@variables</span><span class="p">[</span><span class="nx">name</span><span class="p">]</span> <span class="o">=</span> <span class="s1">'var'</span>
|
<span class="nx">@variables</span><span class="p">[</span><span class="nx">name</span><span class="p">]</span> <span class="o">=</span> <span class="s1">'var'</span>
|
||||||
<span class="kc">false</span></pre></div> </td> </tr> <tr id="section-6"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-6">#</a> </div> <p>Test variables and return true the first time fn(v, k) returns true</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">any</span><span class="o">:</span> <span class="p">(</span><span class="nx">fn</span><span class="p">)</span> <span class="o">-></span>
|
<span class="kc">false</span></pre></div> </td> </tr> <tr id="section-8"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-8">#</a> </div> <p>Test variables and return true the first time fn(v, k) returns true</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">any</span><span class="o">:</span> <span class="p">(</span><span class="nx">fn</span><span class="p">)</span> <span class="o">-></span>
|
||||||
<span class="k">for</span> <span class="nx">v</span><span class="p">,</span> <span class="nx">k</span> <span class="k">of</span> <span class="nx">@variables</span> <span class="k">when</span> <span class="nx">fn</span><span class="p">(</span><span class="nx">v</span><span class="p">,</span> <span class="nx">k</span><span class="p">)</span>
|
<span class="k">for</span> <span class="nx">v</span><span class="p">,</span> <span class="nx">k</span> <span class="k">of</span> <span class="nx">@variables</span> <span class="k">when</span> <span class="nx">fn</span><span class="p">(</span><span class="nx">v</span><span class="p">,</span> <span class="nx">k</span><span class="p">)</span>
|
||||||
<span class="k">return</span> <span class="kc">true</span>
|
<span class="k">return</span> <span class="kc">true</span>
|
||||||
<span class="k">return</span> <span class="kc">false</span></pre></div> </td> </tr> <tr id="section-7"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-7">#</a> </div> <p>Reserve a variable name as originating from a function parameter for this
|
<span class="k">return</span> <span class="kc">false</span></pre></div> </td> </tr> <tr id="section-9"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-9">#</a> </div> <p>Reserve a variable name as originating from a function parameter for this
|
||||||
scope. No <code>var</code> required for internal references.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">parameter</span><span class="o">:</span> <span class="p">(</span><span class="nx">name</span><span class="p">)</span> <span class="o">-></span>
|
scope. No <code>var</code> required for internal references.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">parameter</span><span class="o">:</span> <span class="p">(</span><span class="nx">name</span><span class="p">)</span> <span class="o">-></span>
|
||||||
<span class="nx">@variables</span><span class="p">[</span><span class="nx">name</span><span class="p">]</span> <span class="o">=</span> <span class="s1">'param'</span></pre></div> </td> </tr> <tr id="section-8"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-8">#</a> </div> <p>Just check to see if a variable has already been declared, without reserving,
|
<span class="nx">@variables</span><span class="p">[</span><span class="nx">name</span><span class="p">]</span> <span class="o">=</span> <span class="s1">'param'</span></pre></div> </td> </tr> <tr id="section-10"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-10">#</a> </div> <p>Just check to see if a variable has already been declared, without reserving,
|
||||||
walks up to the root scope.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">check</span><span class="o">:</span> <span class="p">(</span><span class="nx">name</span><span class="p">,</span> <span class="nx">options</span><span class="p">)</span> <span class="o">-></span>
|
walks up to the root scope.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">check</span><span class="o">:</span> <span class="p">(</span><span class="nx">name</span><span class="p">,</span> <span class="nx">options</span><span class="p">)</span> <span class="o">-></span>
|
||||||
<span class="nv">immediate = </span><span class="nb">Object</span><span class="o">::</span><span class="nx">hasOwnProperty</span><span class="p">.</span><span class="nx">call</span> <span class="nx">@variables</span><span class="p">,</span> <span class="nx">name</span>
|
<span class="nv">immediate = </span><span class="nb">Object</span><span class="o">::</span><span class="nx">hasOwnProperty</span><span class="p">.</span><span class="nx">call</span> <span class="nx">@variables</span><span class="p">,</span> <span class="nx">name</span>
|
||||||
<span class="k">return</span> <span class="nx">immediate</span> <span class="k">if</span> <span class="nx">immediate</span> <span class="o">or</span> <span class="p">(</span><span class="nx">options</span> <span class="o">and</span> <span class="nx">options</span><span class="p">.</span><span class="nx">immediate</span><span class="p">)</span>
|
<span class="k">return</span> <span class="nx">immediate</span> <span class="k">if</span> <span class="nx">immediate</span> <span class="o">or</span> <span class="p">(</span><span class="nx">options</span> <span class="o">and</span> <span class="nx">options</span><span class="p">.</span><span class="nx">immediate</span><span class="p">)</span>
|
||||||
<span class="o">!!</span><span class="p">(</span><span class="nx">@parent</span> <span class="o">and</span> <span class="nx">@parent</span><span class="p">.</span><span class="nx">check</span><span class="p">(</span><span class="nx">name</span><span class="p">))</span></pre></div> </td> </tr> <tr id="section-9"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-9">#</a> </div> <p>If we need to store an intermediate result, find an available name for a
|
<span class="o">!!</span><span class="p">(</span><span class="nx">@parent</span> <span class="o">and</span> <span class="nx">@parent</span><span class="p">.</span><span class="nx">check</span><span class="p">(</span><span class="nx">name</span><span class="p">))</span></pre></div> </td> </tr> <tr id="section-11"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-11">#</a> </div> <p>Generate a temporary variable name at the given index.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">temporary</span><span class="o">:</span> <span class="p">(</span><span class="nx">type</span><span class="p">,</span> <span class="nx">index</span><span class="p">)</span> <span class="o">-></span>
|
||||||
compiler-generated variable. <code>_a</code>, <code>_b</code>, and so on...</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">freeVariable</span><span class="o">:</span> <span class="o">-></span>
|
<span class="k">if</span> <span class="nx">type</span><span class="p">.</span><span class="nx">length</span> <span class="o">></span> <span class="mi">1</span>
|
||||||
<span class="k">while</span> <span class="nx">@check</span> <span class="nx">@tempVar</span>
|
<span class="s1">'_'</span> <span class="o">+</span> <span class="nx">type</span> <span class="o">+</span> <span class="k">if</span> <span class="nx">index</span> <span class="o">></span> <span class="mi">1</span> <span class="k">then</span> <span class="nx">index</span> <span class="k">else</span> <span class="s1">''</span>
|
||||||
<span class="nv">ordinal = </span><span class="mi">1</span> <span class="o">+</span> <span class="nb">parseInt</span> <span class="nx">@tempVar</span><span class="p">.</span><span class="nx">substr</span><span class="p">(</span><span class="mi">1</span><span class="p">),</span> <span class="mi">36</span>
|
<span class="k">else</span>
|
||||||
<span class="vi">@tempVar = </span><span class="s1">'_'</span> <span class="o">+</span> <span class="nx">ordinal</span><span class="p">.</span><span class="nx">toString</span><span class="p">(</span><span class="mi">36</span><span class="p">).</span><span class="nx">replace</span><span class="p">(</span><span class="sr">/\d/g</span><span class="p">,</span> <span class="s1">'a'</span><span class="p">)</span>
|
<span class="s1">'_'</span> <span class="o">+</span> <span class="p">(</span><span class="nx">index</span> <span class="o">+</span> <span class="nb">parseInt</span> <span class="nx">type</span><span class="p">,</span> <span class="mi">36</span><span class="p">).</span><span class="nx">toString</span><span class="p">(</span><span class="mi">36</span><span class="p">).</span><span class="nx">replace</span> <span class="sr">/\d/g</span><span class="p">,</span> <span class="s1">'a'</span></pre></div> </td> </tr> <tr id="section-12"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-12">#</a> </div> <p>If we need to store an intermediate result, find an available name for a
|
||||||
<span class="nx">@variables</span><span class="p">[</span><span class="nx">@tempVar</span><span class="p">]</span> <span class="o">=</span> <span class="s1">'var'</span>
|
compiler-generated variable. <code>_var</code>, <code>_var2</code>, and so on...</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">freeVariable</span><span class="o">:</span> <span class="p">(</span><span class="nx">type</span><span class="p">)</span> <span class="o">-></span>
|
||||||
<span class="nx">@tempVar</span></pre></div> </td> </tr> <tr id="section-10"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-10">#</a> </div> <p>Ensure that an assignment is made at the top of this scope
|
<span class="nv">index = </span><span class="mi">0</span>
|
||||||
|
<span class="nx">index</span><span class="o">++</span> <span class="k">while</span> <span class="nx">@check</span><span class="p">(</span><span class="nv">temp = </span><span class="nx">@temporary</span> <span class="nx">type</span><span class="p">,</span> <span class="nx">index</span><span class="p">)</span> <span class="o">and</span> <span class="nx">@variables</span><span class="p">[</span><span class="nx">temp</span><span class="p">]</span> <span class="o">isnt</span> <span class="s1">'reuse'</span>
|
||||||
|
<span class="nx">@variables</span><span class="p">[</span><span class="nx">temp</span><span class="p">]</span> <span class="o">=</span> <span class="s1">'var'</span>
|
||||||
|
<span class="nx">@garbage</span><span class="p">[</span><span class="nx">@garbage</span><span class="p">.</span><span class="nx">length</span> <span class="o">-</span> <span class="mi">1</span><span class="p">].</span><span class="nx">push</span> <span class="nx">temp</span> <span class="k">if</span> <span class="nx">@garbage</span><span class="p">.</span><span class="nx">length</span>
|
||||||
|
<span class="nx">temp</span></pre></div> </td> </tr> <tr id="section-13"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-13">#</a> </div> <p>Ensure that an assignment is made at the top of this scope
|
||||||
(or at the top-level scope, if requested).</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">assign</span><span class="o">:</span> <span class="p">(</span><span class="nx">name</span><span class="p">,</span> <span class="nx">value</span><span class="p">)</span> <span class="o">-></span>
|
(or at the top-level scope, if requested).</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">assign</span><span class="o">:</span> <span class="p">(</span><span class="nx">name</span><span class="p">,</span> <span class="nx">value</span><span class="p">)</span> <span class="o">-></span>
|
||||||
<span class="nx">@variables</span><span class="p">[</span><span class="nx">name</span><span class="p">]</span> <span class="o">=</span> <span class="nx">value</span><span class="o">:</span> <span class="nx">value</span><span class="p">,</span> <span class="nx">assigned</span><span class="o">:</span> <span class="kc">true</span></pre></div> </td> </tr> <tr id="section-11"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-11">#</a> </div> <p>Does this scope reference any variables that need to be declared in the
|
<span class="nx">@variables</span><span class="p">[</span><span class="nx">name</span><span class="p">]</span> <span class="o">=</span> <span class="nx">value</span><span class="o">:</span> <span class="nx">value</span><span class="p">,</span> <span class="nx">assigned</span><span class="o">:</span> <span class="kc">true</span></pre></div> </td> </tr> <tr id="section-14"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-14">#</a> </div> <p>Does this scope reference any variables that need to be declared in the
|
||||||
given function body?</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">hasDeclarations</span><span class="o">:</span> <span class="p">(</span><span class="nx">body</span><span class="p">)</span> <span class="o">-></span>
|
given function body?</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">hasDeclarations</span><span class="o">:</span> <span class="p">(</span><span class="nx">body</span><span class="p">)</span> <span class="o">-></span>
|
||||||
<span class="nx">body</span> <span class="o">is</span> <span class="nx">@expressions</span> <span class="o">and</span> <span class="nx">@any</span> <span class="p">(</span><span class="nx">k</span><span class="p">,</span> <span class="nx">val</span><span class="p">)</span> <span class="o">-></span> <span class="nx">val</span> <span class="o">is</span> <span class="s1">'var'</span></pre></div> </td> </tr> <tr id="section-12"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-12">#</a> </div> <p>Does this scope reference any assignments that need to be declared at the
|
<span class="nx">body</span> <span class="o">is</span> <span class="nx">@expressions</span> <span class="o">and</span> <span class="nx">@any</span> <span class="p">(</span><span class="nx">k</span><span class="p">,</span> <span class="nx">val</span><span class="p">)</span> <span class="o">-></span> <span class="nx">val</span> <span class="o">is</span> <span class="s1">'var'</span> <span class="o">or</span> <span class="nx">val</span> <span class="o">is</span> <span class="s1">'reuse'</span></pre></div> </td> </tr> <tr id="section-15"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-15">#</a> </div> <p>Does this scope reference any assignments that need to be declared at the
|
||||||
top of the given function body?</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">hasAssignments</span><span class="o">:</span> <span class="p">(</span><span class="nx">body</span><span class="p">)</span> <span class="o">-></span>
|
top of the given function body?</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">hasAssignments</span><span class="o">:</span> <span class="p">(</span><span class="nx">body</span><span class="p">)</span> <span class="o">-></span>
|
||||||
<span class="nx">body</span> <span class="o">is</span> <span class="nx">@expressions</span> <span class="o">and</span> <span class="nx">@any</span> <span class="p">(</span><span class="nx">k</span><span class="p">,</span> <span class="nx">val</span><span class="p">)</span> <span class="o">-></span> <span class="nx">val</span><span class="p">.</span><span class="nx">assigned</span></pre></div> </td> </tr> <tr id="section-13"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-13">#</a> </div> <p>Return the list of variables first declared in this scope.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">declaredVariables</span><span class="o">:</span> <span class="o">-></span>
|
<span class="nx">body</span> <span class="o">is</span> <span class="nx">@expressions</span> <span class="o">and</span> <span class="nx">@any</span> <span class="p">(</span><span class="nx">k</span><span class="p">,</span> <span class="nx">val</span><span class="p">)</span> <span class="o">-></span> <span class="nx">val</span><span class="p">.</span><span class="nx">assigned</span></pre></div> </td> </tr> <tr id="section-16"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-16">#</a> </div> <p>Return the list of variables first declared in this scope.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">declaredVariables</span><span class="o">:</span> <span class="o">-></span>
|
||||||
<span class="p">(</span><span class="nx">key</span> <span class="k">for</span> <span class="nx">key</span><span class="p">,</span> <span class="nx">val</span> <span class="k">of</span> <span class="nx">@variables</span> <span class="k">when</span> <span class="nx">val</span> <span class="o">is</span> <span class="s1">'var'</span><span class="p">).</span><span class="nx">sort</span><span class="p">()</span></pre></div> </td> </tr> <tr id="section-14"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-14">#</a> </div> <p>Return the list of assignments that are supposed to be made at the top
|
<span class="p">(</span><span class="nx">key</span> <span class="k">for</span> <span class="nx">key</span><span class="p">,</span> <span class="nx">val</span> <span class="k">of</span> <span class="nx">@variables</span> <span class="k">when</span> <span class="nx">val</span> <span class="o">is</span> <span class="s1">'var'</span> <span class="o">or</span> <span class="nx">val</span> <span class="o">is</span> <span class="s1">'reuse'</span><span class="p">).</span><span class="nx">sort</span><span class="p">()</span></pre></div> </td> </tr> <tr id="section-17"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-17">#</a> </div> <p>Return the list of assignments that are supposed to be made at the top
|
||||||
of this scope.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">assignedVariables</span><span class="o">:</span> <span class="o">-></span>
|
of this scope.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">assignedVariables</span><span class="o">:</span> <span class="o">-></span>
|
||||||
<span class="s2">"#{key} = #{val.value}"</span> <span class="k">for</span> <span class="nx">key</span><span class="p">,</span> <span class="nx">val</span> <span class="k">of</span> <span class="nx">@variables</span> <span class="k">when</span> <span class="nx">val</span><span class="p">.</span><span class="nx">assigned</span></pre></div> </td> </tr> <tr id="section-15"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-15">#</a> </div> <p>Compile the JavaScript for all of the variable declarations in this scope.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">compiledDeclarations</span><span class="o">:</span> <span class="o">-></span>
|
<span class="s2">"#{key} = #{val.value}"</span> <span class="k">for</span> <span class="nx">key</span><span class="p">,</span> <span class="nx">val</span> <span class="k">of</span> <span class="nx">@variables</span> <span class="k">when</span> <span class="nx">val</span><span class="p">.</span><span class="nx">assigned</span></pre></div> </td> </tr> <tr id="section-18"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-18">#</a> </div> <p>Compile the JavaScript for all of the variable declarations in this scope.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">compiledDeclarations</span><span class="o">:</span> <span class="o">-></span>
|
||||||
<span class="nx">@declaredVariables</span><span class="p">().</span><span class="nx">join</span> <span class="s1">', '</span></pre></div> </td> </tr> <tr id="section-16"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-16">#</a> </div> <p>Compile the JavaScript for all of the variable assignments in this scope.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">compiledAssignments</span><span class="o">:</span> <span class="o">-></span>
|
<span class="nx">@declaredVariables</span><span class="p">().</span><span class="nx">join</span> <span class="s1">', '</span></pre></div> </td> </tr> <tr id="section-19"> <td class="docs"> <div class="octowrap"> <a class="octothorpe" href="#section-19">#</a> </div> <p>Compile the JavaScript forall of the variable assignments in this scope.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nx">compiledAssignments</span><span class="o">:</span> <span class="o">-></span>
|
||||||
<span class="nx">@assignedVariables</span><span class="p">().</span><span class="nx">join</span> <span class="s1">', '</span>
|
<span class="nx">@assignedVariables</span><span class="p">().</span><span class="nx">join</span> <span class="s1">', '</span>
|
||||||
|
|
||||||
</pre></div> </td> </tr> </tbody> </table> </div> </body> </html>
|
</pre></div> </td> </tr> </tbody> </table> </div> </body> </html>
|
|
@ -124,7 +124,7 @@
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
<b>Latest Version:</b>
|
<b>Latest Version:</b>
|
||||||
<a href="http://github.com/jashkenas/coffee-script/tarball/0.9.3">0.9.3</a>
|
<a href="http://github.com/jashkenas/coffee-script/tarball/0.9.4">0.9.4</a>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<h2>
|
<h2>
|
||||||
|
@ -169,7 +169,7 @@
|
||||||
Then clone the CoffeeScript
|
Then clone the CoffeeScript
|
||||||
<a href="http://github.com/jashkenas/coffee-script">source repository</a>
|
<a href="http://github.com/jashkenas/coffee-script">source repository</a>
|
||||||
from GitHub, or download the latest
|
from GitHub, or download the latest
|
||||||
release: <a href="http://github.com/jashkenas/coffee-script/tarball/0.9.3">0.9.3</a>.
|
release: <a href="http://github.com/jashkenas/coffee-script/tarball/0.9.4">0.9.4</a>.
|
||||||
To install the CoffeeScript compiler system-wide
|
To install the CoffeeScript compiler system-wide
|
||||||
under <tt>/usr/local</tt>, open the directory and run:
|
under <tt>/usr/local</tt>, open the directory and run:
|
||||||
</p>
|
</p>
|
||||||
|
@ -925,6 +925,11 @@ coffee --print app/scripts/*.coffee > concatenation.js</pre>
|
||||||
— a CoffeeScript compiler plug-in that allows you to include external
|
— a CoffeeScript compiler plug-in that allows you to include external
|
||||||
source files.
|
source files.
|
||||||
</li>
|
</li>
|
||||||
|
<li>
|
||||||
|
<b>mauricemach</b>'s <a href="http://github.com/mauricemach/coffeekup">CoffeeKup</a>
|
||||||
|
— Markup as CoffeeScript. After _why's
|
||||||
|
<a href="http://markaby.github.com/">Markaby</a>.
|
||||||
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<b>jashkenas</b>'s <a href="http://jashkenas.github.com/docco/">Docco</a>
|
<b>jashkenas</b>'s <a href="http://jashkenas.github.com/docco/">Docco</a>
|
||||||
— a quick-and-dirty literate-programming-style documentation generator
|
— a quick-and-dirty literate-programming-style documentation generator
|
||||||
|
@ -952,6 +957,15 @@ coffee --print app/scripts/*.coffee > concatenation.js</pre>
|
||||||
Change Log
|
Change Log
|
||||||
</h2>
|
</h2>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
<b class="header" style="margin-top: 20px;">0.9.4</b>
|
||||||
|
CoffeeScript now uses appropriately-named temporary variables, and recycles
|
||||||
|
their references after use. Added <tt>require.extensions</tt> support for
|
||||||
|
<b>Node.js 0.3</b>. Loading CoffeeScript in the browser now adds just a
|
||||||
|
single <tt>CoffeeScript</tt> object to global scope.
|
||||||
|
Fixes for implicit object and block comment edge cases.
|
||||||
|
</p>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
<b class="header" style="margin-top: 20px;">0.9.3</b>
|
<b class="header" style="margin-top: 20px;">0.9.3</b>
|
||||||
CoffeeScript <tt>switch</tt> statements now compile into JS <tt>switch</tt>
|
CoffeeScript <tt>switch</tt> statements now compile into JS <tt>switch</tt>
|
||||||
|
|
|
@ -1,18 +1,18 @@
|
||||||
var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, food, lunch, roid, roid2;
|
var _i, _j, _len, _len2, _ref, _ref2, _result, food, lunch, roid, roid2;
|
||||||
lunch = (function() {
|
lunch = (function() {
|
||||||
_a = []; _c = ['toast', 'cheese', 'wine'];
|
_result = []; _ref = ['toast', 'cheese', 'wine'];
|
||||||
for (_b = 0, _d = _c.length; _b < _d; _b++) {
|
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
|
||||||
food = _c[_b];
|
food = _ref[_i];
|
||||||
_a.push(eat(food));
|
_result.push(eat(food));
|
||||||
}
|
}
|
||||||
return _a;
|
return _result;
|
||||||
})();
|
})();
|
||||||
_f = asteroids;
|
_ref = asteroids;
|
||||||
for (_e = 0, _g = _f.length; _e < _g; _e++) {
|
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
|
||||||
roid = _f[_e];
|
roid = _ref[_i];
|
||||||
_i = asteroids;
|
_ref2 = asteroids;
|
||||||
for (_h = 0, _j = _i.length; _h < _j; _h++) {
|
for (_j = 0, _len2 = _ref2.length; _j < _len2; _j++) {
|
||||||
roid2 = _i[_h];
|
roid2 = _ref2[_j];
|
||||||
if (roid !== roid2) {
|
if (roid !== roid2) {
|
||||||
if (roid.overlaps(roid2)) {
|
if (roid.overlaps(roid2)) {
|
||||||
roid.explode();
|
roid.explode();
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
/*CoffeeScript Compiler v0.9.3
|
/*
|
||||||
|
CoffeeScript Compiler v0.9.4
|
||||||
Released under the MIT License
|
Released under the MIT License
|
||||||
*/
|
*/
|
|
@ -7,8 +7,8 @@ var __extends = function(child, parent) {
|
||||||
if (typeof parent.extended === "function") parent.extended(child);
|
if (typeof parent.extended === "function") parent.extended(child);
|
||||||
child.__super__ = parent.prototype;
|
child.__super__ = parent.prototype;
|
||||||
};
|
};
|
||||||
Animal = function(_a) {
|
Animal = function(_arg) {
|
||||||
this.name = _a;
|
this.name = _arg;
|
||||||
return this;
|
return this;
|
||||||
};
|
};
|
||||||
Animal.prototype.move = function(meters) {
|
Animal.prototype.move = function(meters) {
|
||||||
|
|
|
@ -1,11 +1,11 @@
|
||||||
var _a, _b, _c, globals, name;
|
var _i, _ref, _result, globals, name;
|
||||||
var __hasProp = Object.prototype.hasOwnProperty;
|
var __hasProp = Object.prototype.hasOwnProperty;
|
||||||
globals = (function() {
|
globals = (function() {
|
||||||
_b = []; _c = window;
|
_result = []; _ref = window;
|
||||||
for (name in _c) {
|
for (name in _ref) {
|
||||||
if (!__hasProp.call(_c, name)) continue;
|
if (!__hasProp.call(_ref, name)) continue;
|
||||||
_a = _c[name];
|
_i = _ref[name];
|
||||||
_b.push(name);
|
_result.push(name);
|
||||||
}
|
}
|
||||||
return _b;
|
return _result;
|
||||||
})().slice(0, 10);
|
})().slice(0, 10);
|
|
@ -1,8 +1,8 @@
|
||||||
var _a, city, forecast, temp, weatherReport;
|
var _ref, city, forecast, temp, weatherReport;
|
||||||
weatherReport = function(location) {
|
weatherReport = function(location) {
|
||||||
return [location, 72, "Mostly Sunny"];
|
return [location, 72, "Mostly Sunny"];
|
||||||
};
|
};
|
||||||
_a = weatherReport("Berkeley, CA");
|
_ref = weatherReport("Berkeley, CA");
|
||||||
city = _a[0];
|
city = _ref[0];
|
||||||
temp = _a[1];
|
temp = _ref[1];
|
||||||
forecast = _a[2];
|
forecast = _ref[2];
|
|
@ -1,4 +1,4 @@
|
||||||
var _a, _b, age, ages, child, yearsOld;
|
var _ref, _result, age, ages, child, yearsOld;
|
||||||
var __hasProp = Object.prototype.hasOwnProperty;
|
var __hasProp = Object.prototype.hasOwnProperty;
|
||||||
yearsOld = {
|
yearsOld = {
|
||||||
max: 10,
|
max: 10,
|
||||||
|
@ -6,11 +6,11 @@ yearsOld = {
|
||||||
tim: 11
|
tim: 11
|
||||||
};
|
};
|
||||||
ages = (function() {
|
ages = (function() {
|
||||||
_a = []; _b = yearsOld;
|
_result = []; _ref = yearsOld;
|
||||||
for (child in _b) {
|
for (child in _ref) {
|
||||||
if (!__hasProp.call(_b, child)) continue;
|
if (!__hasProp.call(_ref, child)) continue;
|
||||||
age = _b[child];
|
age = _ref[child];
|
||||||
_a.push(child + " is " + age);
|
_result.push(child + " is " + age);
|
||||||
}
|
}
|
||||||
return _a;
|
return _result;
|
||||||
})();
|
})();
|
|
@ -1,4 +1,4 @@
|
||||||
var _a, _b, _c, city, futurists, name, street;
|
var _ref, _ref2, _ref3, city, futurists, name, street;
|
||||||
futurists = {
|
futurists = {
|
||||||
sculptor: "Umberto Boccioni",
|
sculptor: "Umberto Boccioni",
|
||||||
painter: "Vladimir Burliuk",
|
painter: "Vladimir Burliuk",
|
||||||
|
@ -7,9 +7,9 @@ futurists = {
|
||||||
address: ["Via Roma 42R", "Bellagio, Italy 22021"]
|
address: ["Via Roma 42R", "Bellagio, Italy 22021"]
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
_a = futurists;
|
_ref = futurists;
|
||||||
_b = _a.poet;
|
_ref2 = _ref.poet;
|
||||||
name = _b.name;
|
name = _ref2.name;
|
||||||
_c = _b.address;
|
_ref3 = _ref2.address;
|
||||||
street = _c[0];
|
street = _ref3[0];
|
||||||
city = _c[1];
|
city = _ref3[1];
|
|
@ -1,4 +1,4 @@
|
||||||
var _a, _b, _c, _d, cubes, list, math, num, number, opposite, race, square;
|
var _i, _len, _ref, _result, cubes, list, math, num, number, opposite, race, square;
|
||||||
var __slice = Array.prototype.slice;
|
var __slice = Array.prototype.slice;
|
||||||
number = 42;
|
number = 42;
|
||||||
opposite = true;
|
opposite = true;
|
||||||
|
@ -25,10 +25,10 @@ if (typeof elvis !== "undefined" && elvis !== null) {
|
||||||
alert("I knew it!");
|
alert("I knew it!");
|
||||||
}
|
}
|
||||||
cubes = (function() {
|
cubes = (function() {
|
||||||
_a = []; _c = list;
|
_result = []; _ref = list;
|
||||||
for (_b = 0, _d = _c.length; _b < _d; _b++) {
|
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
|
||||||
num = _c[_b];
|
num = _ref[_i];
|
||||||
_a.push(math.cube(num));
|
_result.push(math.cube(num));
|
||||||
}
|
}
|
||||||
return _a;
|
return _result;
|
||||||
})();
|
})();
|
|
@ -1,6 +1,6 @@
|
||||||
var _a, theBait, theSwitch;
|
var _ref, theBait, theSwitch;
|
||||||
theBait = 1000;
|
theBait = 1000;
|
||||||
theSwitch = 0;
|
theSwitch = 0;
|
||||||
_a = [theSwitch, theBait];
|
_ref = [theSwitch, theBait];
|
||||||
theBait = _a[0];
|
theBait = _ref[0];
|
||||||
theSwitch = _a[1];
|
theSwitch = _ref[1];
|
|
@ -1,7 +1,7 @@
|
||||||
var _a, close, contents, open, tag;
|
var _ref, close, contents, open, tag;
|
||||||
var __slice = Array.prototype.slice;
|
var __slice = Array.prototype.slice;
|
||||||
tag = "<impossible>";
|
tag = "<impossible>";
|
||||||
_a = tag.split("");
|
_ref = tag.split("");
|
||||||
open = _a[0];
|
open = _ref[0];
|
||||||
contents = __slice.call(_a, 1, _a.length - 1);
|
contents = __slice.call(_ref, 1, _ref.length - 1);
|
||||||
close = _a[_a.length - 1];
|
close = _ref[_ref.length - 1];
|
|
@ -1,19 +1,19 @@
|
||||||
var _a, countdown, deliverEggs, num;
|
var _result, countdown, deliverEggs, num;
|
||||||
countdown = (function() {
|
countdown = (function() {
|
||||||
_a = [];
|
_result = [];
|
||||||
for (num = 10; num >= 1; num--) {
|
for (num = 10; num >= 1; num--) {
|
||||||
_a.push(num);
|
_result.push(num);
|
||||||
}
|
}
|
||||||
return _a;
|
return _result;
|
||||||
})();
|
})();
|
||||||
deliverEggs = function() {
|
deliverEggs = function() {
|
||||||
var _b, _c, dozen, i;
|
var _ref, _result2, dozen, i;
|
||||||
_b = []; _c = eggs.length;
|
_result2 = []; _ref = eggs.length;
|
||||||
for (i = 0; (0 <= _c ? i < _c : i > _c); i += 12) {
|
for (i = 0; (0 <= _ref ? i < _ref : i > _ref); i += 12) {
|
||||||
_b.push((function() {
|
_result2.push((function() {
|
||||||
dozen = eggs.slice(i, i + 12);
|
dozen = eggs.slice(i, i + 12);
|
||||||
return deliver(new eggCarton(dozen));
|
return deliver(new eggCarton(dozen));
|
||||||
})());
|
})());
|
||||||
}
|
}
|
||||||
return _b;
|
return _result2;
|
||||||
};
|
};
|
|
@ -1,2 +1,2 @@
|
||||||
var _a, _b;
|
var _ref, _ref2;
|
||||||
(typeof (_b = ((_a = lottery.drawWinner()))) === "undefined" || _b === null) ? undefined : _b.address == null ? undefined : _b.address.zipcode;
|
(typeof (_ref2 = ((_ref = lottery.drawWinner()))) === "undefined" || _ref2 === null) ? undefined : _ref2.address == null ? undefined : _ref2.address.zipcode;
|
|
@ -1,23 +1,23 @@
|
||||||
switch (day) {
|
switch (day) {
|
||||||
case "Mon":
|
case "Mon":
|
||||||
go(work);
|
go(work);
|
||||||
break;
|
break;
|
||||||
case "Tue":
|
case "Tue":
|
||||||
go(relax);
|
go(relax);
|
||||||
break;
|
break;
|
||||||
case "Thu":
|
case "Thu":
|
||||||
go(iceFishing);
|
go(iceFishing);
|
||||||
break;
|
break;
|
||||||
case "Fri":
|
case "Fri":
|
||||||
case "Sat":
|
case "Sat":
|
||||||
if (day === bingoDay) {
|
if (day === bingoDay) {
|
||||||
go(bingo);
|
go(bingo);
|
||||||
go(dancing);
|
go(dancing);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case "Sun":
|
case "Sun":
|
||||||
go(church);
|
go(church);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
go(work);
|
go(work);
|
||||||
}
|
}
|
|
@ -1,4 +1,4 @@
|
||||||
var _a, lyrics, num;
|
var _result, lyrics, num;
|
||||||
if (this.studyingEconomics) {
|
if (this.studyingEconomics) {
|
||||||
while (supply > demand) {
|
while (supply > demand) {
|
||||||
buy();
|
buy();
|
||||||
|
@ -9,10 +9,10 @@ if (this.studyingEconomics) {
|
||||||
}
|
}
|
||||||
num = 6;
|
num = 6;
|
||||||
lyrics = (function() {
|
lyrics = (function() {
|
||||||
_a = [];
|
_result = [];
|
||||||
while (num -= 1) {
|
while (num -= 1) {
|
||||||
_a.push(num + " little monkeys, jumping on the bed.\
|
_result.push(num + " little monkeys, jumping on the bed.\
|
||||||
One fell out and bumped his head.");
|
One fell out and bumped his head.");
|
||||||
}
|
}
|
||||||
return _a;
|
return _result;
|
||||||
})();
|
})();
|
|
@ -1,5 +1,5 @@
|
||||||
/**
|
/**
|
||||||
* CoffeeScript Compiler v0.9.3
|
* CoffeeScript Compiler v0.9.4
|
||||||
* http://coffeescript.org
|
* http://coffeescript.org
|
||||||
*
|
*
|
||||||
* Copyright 2010, Jeremy Ashkenas
|
* Copyright 2010, Jeremy Ashkenas
|
||||||
|
@ -12,11 +12,11 @@ this.addImplicitBraces();this.addImplicitParentheses();this.ensureBalance(x);thi
|
||||||
m){var v,u,I,M,y;if(t[0]!=="HERECOMMENT")return 1;v=[this.tokens[m-2],this.tokens[m-1],this.tokens[m+1],this.tokens[m+2]];I=v[0];y=v[1];M=v[2];if((u=v[3])&&u[0]==="INDENT"){this.tokens.splice(m+2,1);I&&I[0]==="OUTDENT"&&M&&y[0]===M[0]&&M[0]==="TERMINATOR"?this.tokens.splice(m-2,1):this.tokens.splice(m,0,u)}else if(y&&!("TERMINATOR"===(v=y[0])||"INDENT"===v||"OUTDENT"===v)){if(M&&M[0]==="TERMINATOR"&&u&&u[0]==="OUTDENT"){this.tokens.splice.apply(this.tokens,[m+2,0].concat(this.tokens.splice(m,2)));
|
m){var v,u,I,M,y;if(t[0]!=="HERECOMMENT")return 1;v=[this.tokens[m-2],this.tokens[m-1],this.tokens[m+1],this.tokens[m+2]];I=v[0];y=v[1];M=v[2];if((u=v[3])&&u[0]==="INDENT"){this.tokens.splice(m+2,1);I&&I[0]==="OUTDENT"&&M&&y[0]===M[0]&&M[0]==="TERMINATOR"?this.tokens.splice(m-2,1):this.tokens.splice(m,0,u)}else if(y&&!("TERMINATOR"===(v=y[0])||"INDENT"===v||"OUTDENT"===v)){if(M&&M[0]==="TERMINATOR"&&u&&u[0]==="OUTDENT"){this.tokens.splice.apply(this.tokens,[m+2,0].concat(this.tokens.splice(m,2)));
|
||||||
this.tokens[m+2][0]!=="TERMINATOR"&&this.tokens.splice(m+2,0,["TERMINATOR","\n",y[2]])}else this.tokens.splice(m,0,["TERMINATOR","\n",y[2]]);return 2}return 1})};C.prototype.removeLeadingNewlines=function(){var t;for(t=[];this.tokens[0]&&this.tokens[0][0]==="TERMINATOR";)t.push(this.tokens.shift());return t};C.prototype.removeMidExpressionNewlines=function(){return this.scanTokens(function(t,m){if(!(D(c,this.tag(m+1))&&t[0]==="TERMINATOR"))return 1;this.tokens.splice(m,1);return 0})};C.prototype.closeOpenCalls=
|
this.tokens[m+2][0]!=="TERMINATOR"&&this.tokens.splice(m+2,0,["TERMINATOR","\n",y[2]])}else this.tokens.splice(m,0,["TERMINATOR","\n",y[2]]);return 2}return 1})};C.prototype.removeLeadingNewlines=function(){var t;for(t=[];this.tokens[0]&&this.tokens[0][0]==="TERMINATOR";)t.push(this.tokens.shift());return t};C.prototype.removeMidExpressionNewlines=function(){return this.scanTokens(function(t,m){if(!(D(c,this.tag(m+1))&&t[0]==="TERMINATOR"))return 1;this.tokens.splice(m,1);return 0})};C.prototype.closeOpenCalls=
|
||||||
function(){return this.scanTokens(function(t,m){if(t[0]==="CALL_START")this.detectEnd(m+1,function(v,u){var I;return")"===(I=v[0])||"CALL_END"===I||v[0]==="OUTDENT"&&this.tokens[u-1][0]===")"},function(v,u){return this.tokens[v[0]==="OUTDENT"?u-1:u][0]="CALL_END"});return 1})};C.prototype.closeOpenIndexes=function(){return this.scanTokens(function(t,m){if(t[0]==="INDEX_START")this.detectEnd(m+1,function(v){var u;return"]"===(u=v[0])||"INDEX_END"===u},function(v){return v[0]="INDEX_END"});return 1})};
|
function(){return this.scanTokens(function(t,m){if(t[0]==="CALL_START")this.detectEnd(m+1,function(v,u){var I;return")"===(I=v[0])||"CALL_END"===I||v[0]==="OUTDENT"&&this.tokens[u-1][0]===")"},function(v,u){return this.tokens[v[0]==="OUTDENT"?u-1:u][0]="CALL_END"});return 1})};C.prototype.closeOpenIndexes=function(){return this.scanTokens(function(t,m){if(t[0]==="INDEX_START")this.detectEnd(m+1,function(v){var u;return"]"===(u=v[0])||"INDEX_END"===u},function(v){return v[0]="INDEX_END"});return 1})};
|
||||||
C.prototype.addImplicitBraces=function(){var t;t=[];return this.scanTokens(function(m,v){var u,I;if(D(h,m[0]))t.push(m[0]==="INDENT"&&this.tag(v-1)==="{"?"{":m[0]);D(j,m[0])&&t.pop();u=t[t.length-1];if(m[0]===":"&&(!u||u[0]!=="{")){t.push("{");u=this.tag(v-2)==="@"?v-2:v-1;I=["{","{",m[2]];I.generated=true;this.tokens.splice(u,0,I);this.detectEnd(v+2,function(M,y){var Q,U,S,F;Q=this.tokens.slice(y+1,y+4);U=Q[0];F=Q[1];S=Q[2];if(this.tag(y+1)==="HERECOMMENT"||this.tag(y-1)==="HERECOMMENT")return false;
|
C.prototype.addImplicitBraces=function(){var t;t=[];return this.scanTokens(function(m,v){var u,I;if(D(h,m[0]))t.push(m[0]==="INDENT"&&this.tag(v-1)==="{"?"{":m[0]);D(j,m[0])&&t.pop();u=t[t.length-1];if(m[0]===":"&&(!u||u[0]!=="{")){t.push("{");u=this.tag(v-2)==="@"?v-2:v-1;if(this.tag(u-2)==="HERECOMMENT")u-=2;I=["{","{",m[2]];I.generated=true;this.tokens.splice(u,0,I);this.detectEnd(v+2,function(M,y){var Q,U,S,F;Q=this.tokens.slice(y+1,y+4);U=Q[0];F=Q[1];S=Q[2];if(this.tag(y+1)==="HERECOMMENT"||
|
||||||
return("TERMINATOR"===(Q=M[0])||"OUTDENT"===Q)&&!(F&&F[0]===":"||U&&U[0]==="@"&&S&&S[0]===":")||M[0]===","&&U&&!("IDENTIFIER"===(Q=U[0])||"STRING"===Q||"@"===Q||"TERMINATOR"===Q||"OUTDENT"===Q)},function(M,y){return this.tokens.splice(y,0,["}","}",M[2]])});return 2}return 1})};C.prototype.addImplicitParentheses=function(){var t;t=false;return this.scanTokens(function(m,v){var u,I,M,y,Q;if(m[0]==="CLASS")t=true;y=this.tokens[v-1];I=this.tokens[v+1];M=1;if(I=!t&&m[0]==="INDENT"&&I&&I.generated&&I[0]===
|
this.tag(y-1)==="HERECOMMENT")return false;return("TERMINATOR"===(Q=M[0])||"OUTDENT"===Q)&&!(F&&F[0]===":"||U&&U[0]==="@"&&S&&S[0]===":")||M[0]===","&&U&&!("IDENTIFIER"===(Q=U[0])||"STRING"===Q||"@"===Q||"TERMINATOR"===Q||"OUTDENT"===Q)},function(M,y){return this.tokens.splice(y,0,["}","}",M[2]])});return 2}return 1})};C.prototype.addImplicitParentheses=function(){var t;t=false;return this.scanTokens(function(m,v){var u,I,M,y,Q;if(m[0]==="CLASS")t=true;y=this.tokens[v-1];I=this.tokens[v+1];M=1;if(I=
|
||||||
"{"&&y&&D(A,y[0]))M=2;Q=false;if(D(P,m[0]))t=false;if(y&&!y.spaced&&m[0]==="?")m.call=true;if(y&&y.spaced&&(D(A,y[0])||y.call)&&D(r,m[0])&&!(m[0]==="UNARY"&&("IN"===(u=this.tag(v+1))||"OF"===u||"INSTANCEOF"===u))||I){this.tokens.splice(v,0,["CALL_START","(",m[2]]);this.detectEnd(v+M,function(U,S){var F;if(!Q&&U.fromThen)return true;if("IF"===(F=U[0])||"ELSE"===F||"UNLESS"===F||"->"===F||"=>"===F)Q=true;F=this.tokens[S+1];return!U.generated&&this.tokens[S-1][0]!==","&&D(d,U[0])&&!(U[0]==="INDENT"&&
|
!t&&m[0]==="INDENT"&&I&&I.generated&&I[0]==="{"&&y&&D(A,y[0]))M=2;Q=false;if(D(P,m[0]))t=false;if(y&&!y.spaced&&m[0]==="?")m.call=true;if(y&&y.spaced&&(D(A,y[0])||y.call)&&D(r,m[0])&&!(m[0]==="UNARY"&&("IN"===(u=this.tag(v+1))||"OF"===u||"INSTANCEOF"===u))||I){this.tokens.splice(v,0,["CALL_START","(",m[2]]);this.detectEnd(v+M,function(U,S){var F;if(!Q&&U.fromThen)return true;if("IF"===(F=U[0])||"ELSE"===F||"UNLESS"===F||"->"===F||"=>"===F)Q=true;F=this.tokens[S+1];return!U.generated&&this.tokens[S-
|
||||||
(D(e,this.tag(S-1))||this.tag(S-2)==="CLASS"||F&&F.generated&&F[0]==="{"))||U[0]==="PROPERTY_ACCESS"&&this.tag(S-1)==="OUTDENT"},function(U,S){M=U[0]==="OUTDENT"?S+1:S;return this.tokens.splice(M,0,["CALL_END",")",U[2]])});if(y[0]==="?")y[0]="FUNC_EXIST";return 2}return 1})};C.prototype.addImplicitIndentation=function(){return this.scanTokens(function(t,m){var v,u,I,M;if(t[0]==="ELSE"&&this.tag(m-1)!=="OUTDENT"){this.tokens.splice.apply(this.tokens,[m,0].concat(this.indentation(t)));return 2}if(t[0]===
|
1][0]!==","&&D(d,U[0])&&!(U[0]==="INDENT"&&(D(e,this.tag(S-1))||this.tag(S-2)==="CLASS"||F&&F.generated&&F[0]==="{"))||U[0]==="PROPERTY_ACCESS"&&this.tag(S-1)==="OUTDENT"},function(U,S){M=U[0]==="OUTDENT"?S+1:S;return this.tokens.splice(M,0,["CALL_END",")",U[2]])});if(y[0]==="?")y[0]="FUNC_EXIST";return 2}return 1})};C.prototype.addImplicitIndentation=function(){return this.scanTokens(function(t,m){var v,u,I,M;if(t[0]==="ELSE"&&this.tag(m-1)!=="OUTDENT"){this.tokens.splice.apply(this.tokens,[m,0].concat(this.indentation(t)));
|
||||||
"CATCH"&&(this.tag(m+2)==="TERMINATOR"||this.tag(m+2)==="FINALLY")){this.tokens.splice.apply(this.tokens,[m+2,0].concat(this.indentation(t)));return 4}if(D($,t[0])&&this.tag(m+1)!=="INDENT"&&!(t[0]==="ELSE"&&this.tag(m+1)==="IF")){M=t[0];v=this.indentation(t);u=v[0];I=v[1];if(M==="THEN")u.fromThen=true;u.generated=I.generated=true;this.tokens.splice(m+1,0,u);this.detectEnd(m+2,function(y){return D(ca,y[0])&&y[1]!==";"&&!(y[0]==="ELSE"&&!("IF"===M||"THEN"===M))},function(y,Q){return this.tokens.splice(this.tokens[Q-
|
return 2}if(t[0]==="CATCH"&&(this.tag(m+2)==="TERMINATOR"||this.tag(m+2)==="FINALLY")){this.tokens.splice.apply(this.tokens,[m+2,0].concat(this.indentation(t)));return 4}if(D($,t[0])&&this.tag(m+1)!=="INDENT"&&!(t[0]==="ELSE"&&this.tag(m+1)==="IF")){M=t[0];v=this.indentation(t);u=v[0];I=v[1];if(M==="THEN")u.fromThen=true;u.generated=I.generated=true;this.tokens.splice(m+1,0,u);this.detectEnd(m+2,function(y){return D(ca,y[0])&&y[1]!==";"&&!(y[0]==="ELSE"&&!("IF"===M||"THEN"===M))},function(y,Q){return this.tokens.splice(this.tokens[Q-
|
||||||
1][0]===","?Q-1:Q,0,I)});t[0]==="THEN"&&this.tokens.splice(m,1);return 2}return 1})};C.prototype.tagPostfixConditionals=function(){return this.scanTokens(function(t,m){var v;if("IF"===(v=t[0])||"UNLESS"===v){this.detectEnd(m+1,function(u){var I;return"TERMINATOR"===(I=u[0])||"INDENT"===I},function(u){if(u[0]!=="INDENT")return t[0]="POST_"+t[0]});return 1}return 1})};C.prototype.ensureBalance=function(t){var m,v,u,I,M;u={};I={};this.scanTokens(function(y){var Q,U,S,F;Q=0;for(U=t.length;Q<U;Q++){S=
|
1][0]===","?Q-1:Q,0,I)});t[0]==="THEN"&&this.tokens.splice(m,1);return 2}return 1})};C.prototype.tagPostfixConditionals=function(){return this.scanTokens(function(t,m){var v;if("IF"===(v=t[0])||"UNLESS"===v){this.detectEnd(m+1,function(u){var I;return"TERMINATOR"===(I=u[0])||"INDENT"===I},function(u){if(u[0]!=="INDENT")return t[0]="POST_"+t[0]});return 1}return 1})};C.prototype.ensureBalance=function(t){var m,v,u,I,M;u={};I={};this.scanTokens(function(y){var Q,U,S,F;Q=0;for(U=t.length;Q<U;Q++){S=
|
||||||
t[Q];F=S[0];S=S[1];u[F]||(u[F]=0);if(y[0]===F){if(u[F]===0)I[F]=y[2];u[F]+=1}if(y[0]===S)u[F]-=1;if(u[F]<0)throw new Error("too many "+y[1]+" on line "+(y[2]+1));}return 1});m=[];for(v in u)if(N.call(u,v)){M=u[v];M>0&&m.push(v)}if(m.length){v=m[0];m=I[v]+1;throw new Error("unclosed "+v+" on line "+m);}};C.prototype.rewriteClosingParens=function(){var t,m,v,u,I;u=[];m={};t=K;for(v in t)if(N.call(t,v)){I=t[v];m[v]=0}return this.scanTokens(function(M,y){var Q,U,S,F;F=M[0];Q=K[M[0]];if(D(h,F)){u.push(M);
|
t[Q];F=S[0];S=S[1];u[F]||(u[F]=0);if(y[0]===F){if(u[F]===0)I[F]=y[2];u[F]+=1}if(y[0]===S)u[F]-=1;if(u[F]<0)throw new Error("too many "+y[1]+" on line "+(y[2]+1));}return 1});m=[];for(v in u)if(N.call(u,v)){M=u[v];M>0&&m.push(v)}if(m.length){v=m[0];m=I[v]+1;throw new Error("unclosed "+v+" on line "+m);}};C.prototype.rewriteClosingParens=function(){var t,m,v,u,I;u=[];m={};t=K;for(v in t)if(N.call(t,v)){I=t[v];m[v]=0}return this.scanTokens(function(M,y){var Q,U,S,F;F=M[0];Q=K[M[0]];if(D(h,F)){u.push(M);
|
||||||
return 1}else if(D(j,F))if(m[Q]>0){m[Q]-=1;this.tokens.splice(y,1);return 0}else{Q=u.pop();U=Q[0];S=K[U];if(F===S)return 1;m[U]+=1;I=[S,U==="INDENT"?Q[1]:S];if((this.tokens[y+2]==null?undefined:this.tokens[y+2][0])===U){this.tokens.splice(y+3,0,I);u.push(Q)}else this.tokens.splice(y,0,I);return 1}else return 1})};C.prototype.indentation=function(t){return[["INDENT",2,t[2]],["OUTDENT",2,t[2]]]};C.prototype.tag=function(t){return this.tokens[t]&&this.tokens[t][0]};return C}();x=[["(",")"],["[","]"],
|
return 1}else if(D(j,F))if(m[Q]>0){m[Q]-=1;this.tokens.splice(y,1);return 0}else{Q=u.pop();U=Q[0];S=K[U];if(F===S)return 1;m[U]+=1;I=[S,U==="INDENT"?Q[1]:S];if((this.tokens[y+2]==null?undefined:this.tokens[y+2][0])===U){this.tokens.splice(y+3,0,I);u.push(Q)}else this.tokens.splice(y,0,I);return 1}else return 1})};C.prototype.indentation=function(t){return[["INDENT",2,t[2]],["OUTDENT",2,t[2]]]};C.prototype.tag=function(t){return this.tokens[t]&&this.tokens[t][0]};return C}();x=[["(",")"],["[","]"],
|
||||||
|
@ -26,142 +26,142 @@ la,na,ja,ha,oa,G,da,W,ga,Z=Array.prototype.slice;G=T("./rewriter");na=G.Rewriter
|
||||||
return(new na).rewrite(this.tokens)};N.prototype.extractNextToken=function(){if(this.identifierToken())return null;if(this.commentToken())return null;if(this.whitespaceToken())return null;if(this.lineToken())return null;if(this.heredocToken())return null;if(this.stringToken())return null;if(this.numberToken())return null;if(this.regexToken())return null;if(this.jsToken())return null;return this.literalToken()};N.prototype.identifierToken=function(){var l,s,o,B;if(!(o=this.match(ca,1)))return false;
|
return(new na).rewrite(this.tokens)};N.prototype.extractNextToken=function(){if(this.identifierToken())return null;if(this.commentToken())return null;if(this.whitespaceToken())return null;if(this.lineToken())return null;if(this.heredocToken())return null;if(this.stringToken())return null;if(this.numberToken())return null;if(this.regexToken())return null;if(this.jsToken())return null;return this.literalToken()};N.prototype.identifierToken=function(){var l,s,o,B;if(!(o=this.match(ca,1)))return false;
|
||||||
this.i+=o.length;s=this.tagAccessor()||this.match(x,1);B="IDENTIFIER";if(W(aa,o)||!s&&W(e,o))B=o.toUpperCase();if(B==="WHEN"&&W(D,this.tag()))B="LEADING_WHEN";if(o==="all"&&this.tag()==="FOR")B="ALL";if(W(ha,B))B="UNARY";if(W(Y,o))if(s){B="STRING";o='"'+o+'"';if(s==="accessor"){l=true;this.tag()!=="@"&&this.tokens.pop();this.token("INDEX_START","[")}}else W(la,o)&&this.identifierError(o);if(!s){if(W(h,o))B=o=K[o];if(W(L,o))B="LOGIC";if(o==="!")B="UNARY"}this.token(B,o);l&&this.token("]","]");return true};
|
this.i+=o.length;s=this.tagAccessor()||this.match(x,1);B="IDENTIFIER";if(W(aa,o)||!s&&W(e,o))B=o.toUpperCase();if(B==="WHEN"&&W(D,this.tag()))B="LEADING_WHEN";if(o==="all"&&this.tag()==="FOR")B="ALL";if(W(ha,B))B="UNARY";if(W(Y,o))if(s){B="STRING";o='"'+o+'"';if(s==="accessor"){l=true;this.tag()!=="@"&&this.tokens.pop();this.token("INDEX_START","[")}}else W(la,o)&&this.identifierError(o);if(!s){if(W(h,o))B=o=K[o];if(W(L,o))B="LOGIC";if(o==="!")B="UNARY"}this.token(B,o);l&&this.token("]","]");return true};
|
||||||
N.prototype.numberToken=function(){var l;if(!(l=this.match(y,1)))return false;if(this.tag()==="."&&ga(l,"."))return false;this.i+=l.length;this.token("NUMBER",l);return true};N.prototype.stringToken=function(){var l;if(!(ga(this.chunk,'"')||ga(this.chunk,"'")))return false;if(!(l=this.balancedToken(['"','"'],["#{","}"])||this.balancedToken(["'","'"])))return false;this.interpolateString(l.replace(/\n/g,"\\\n"));this.line+=da(l,"\n");this.i+=l.length;return true};N.prototype.heredocToken=function(){var l,
|
N.prototype.numberToken=function(){var l;if(!(l=this.match(y,1)))return false;if(this.tag()==="."&&ga(l,"."))return false;this.i+=l.length;this.token("NUMBER",l);return true};N.prototype.stringToken=function(){var l;if(!(ga(this.chunk,'"')||ga(this.chunk,"'")))return false;if(!(l=this.balancedToken(['"','"'],["#{","}"])||this.balancedToken(["'","'"])))return false;this.interpolateString(l.replace(/\n/g,"\\\n"));this.line+=da(l,"\n");this.i+=l.length;return true};N.prototype.heredocToken=function(){var l,
|
||||||
s,o;if(!(s=this.chunk.match(P)))return false;o=s[1].substr(0,1);l=this.sanitizeHeredoc(s[2]||s[4]||"",{quote:o});this.interpolateString(o+l+o,{heredoc:true});this.line+=da(s[1],"\n");this.i+=s[1].length;return true};N.prototype.commentToken=function(){var l;if(!(l=this.chunk.match(r)))return false;this.line+=da(l[1],"\n");this.i+=l[1].length;if(l[4]){this.token("HERECOMMENT",this.sanitizeHeredoc(l[4],{herecomment:true,indent:l[3]}));this.token("TERMINATOR","\n")}return true};N.prototype.jsToken=function(){var l;
|
s,o;if(!(s=this.chunk.match(P)))return false;o=s[1].substr(0,1);l=this.sanitizeHeredoc(s[2]||s[4]||"",{quote:o});this.interpolateString(o+l+o,{heredoc:true});this.line+=da(s[1],"\n");this.i+=s[1].length;return true};N.prototype.commentToken=function(){var l;if(!(l=this.chunk.match(r)))return false;this.line+=da(l[1],"\n");this.i+=l[1].length;if(l[2]){this.token("HERECOMMENT",this.sanitizeHeredoc(l[2],{herecomment:true,indent:Array(this.indent+1).join(" ")}));this.token("TERMINATOR","\n")}return true};
|
||||||
if(!ga(this.chunk,"`"))return false;if(!(l=this.balancedToken(["`","`"])))return false;this.token("JS",l.replace($,""));this.i+=l.length;return true};N.prototype.regexToken=function(){var l,s,o;if(!(s=this.chunk.match(ia)))return false;if(s[1]===" "&&!("CALL_START"===(l=this.tag())||"="===l))return false;if(W(I,this.tag()))return false;if(!(l=this.balancedToken(["/","/"])))return false;if(!(s=this.chunk.substr(l.length).match(U)))return false;if(s[2])l+=o=s[2];if(l.match(F)){s=l.substring(1).split("/")[0];
|
N.prototype.jsToken=function(){var l;if(!ga(this.chunk,"`"))return false;if(!(l=this.balancedToken(["`","`"])))return false;this.token("JS",l.replace($,""));this.i+=l.length;return true};N.prototype.regexToken=function(){var l,s,o;if(!(s=this.chunk.match(ia)))return false;if(s[1]===" "&&!("CALL_START"===(l=this.tag())||"="===l))return false;if(W(I,this.tag()))return false;if(!(l=this.balancedToken(["/","/"])))return false;if(!(s=this.chunk.substr(l.length).match(U)))return false;if(s[2])l+=o=s[2];
|
||||||
s=s.replace(S,function(B){return"\\"+B});this.tokens=this.tokens.concat([["(","("],["NEW","new"],["IDENTIFIER","RegExp"],["CALL_START","("]]);this.interpolateString('"'+s+'"',{escapeQuotes:true});o&&this.tokens.splice(this.tokens.length,0,[",",","],["STRING",'"'+o+'"']);this.tokens.splice(this.tokens.length,0,[")",")"],[")",")"])}else this.token("REGEX",l);this.i+=l.length;return true};N.prototype.balancedToken=function(){return this.balancedString(this.chunk,Z.call(arguments,0))};N.prototype.lineToken=
|
if(l.match(F)){s=l.substring(1).split("/")[0];s=s.replace(S,function(B){return"\\"+B});this.tokens=this.tokens.concat([["(","("],["NEW","new"],["IDENTIFIER","RegExp"],["CALL_START","("]]);this.interpolateString('"'+s+'"',{escapeQuotes:true});o&&this.tokens.splice(this.tokens.length,0,[",",","],["STRING",'"'+o+'"']);this.tokens.splice(this.tokens.length,0,[")",")"],[")",")"])}else this.token("REGEX",l);this.i+=l.length;return true};N.prototype.balancedToken=function(){return this.balancedString(this.chunk,
|
||||||
function(){var l,s,o;if(!(l=this.match(v,1)))return false;this.line+=da(l,"\n");this.i+=l.length;this.prev(2);o=l.match(X).reverse()[0].match(E)[1].length;s=this.match(u,1);s=s==="."||s===","||this.unfinished();if(o-this.indebt===this.indent){if(s)return this.suppressNewlines();return this.newlineToken(l)}else if(o>this.indent){if(s){this.indebt=o-this.indent;return this.suppressNewlines()}l=o-this.indent+this.outdebt;this.token("INDENT",l);this.indents.push(l);this.outdebt=this.indebt=0}else{this.indebt=
|
Z.call(arguments,0))};N.prototype.lineToken=function(){var l,s,o;if(!(l=this.match(v,1)))return false;this.line+=da(l,"\n");this.i+=l.length;this.prev(2);o=l.match(X).reverse()[0].match(E)[1].length;s=this.match(u,1);s=s==="."||s===","||this.unfinished();if(o-this.indebt===this.indent){if(s)return this.suppressNewlines();return this.newlineToken(l)}else if(o>this.indent){if(s){this.indebt=o-this.indent;return this.suppressNewlines()}l=o-this.indent+this.outdebt;this.token("INDENT",l);this.indents.push(l);
|
||||||
0;this.outdentToken(this.indent-o,s)}this.indent=o;return true};N.prototype.outdentToken=function(l,s){for(var o,B;l>0;){B=this.indents.length-1;if(this.indents[B]===undefined)l=0;else if(this.indents[B]===this.outdebt){l-=this.outdebt;this.outdebt=0}else if(this.indents[B]<this.outdebt){this.outdebt-=this.indents[B];l-=this.indents[B]}else{o=this.indents.pop();o-=this.outdebt;l-=o;this.outdebt=0;this.token("OUTDENT",o)}}if(o)this.outdebt-=l;this.tag()==="TERMINATOR"||s||this.token("TERMINATOR","\n");
|
this.outdebt=this.indebt=0}else{this.indebt=0;this.outdentToken(this.indent-o,s)}this.indent=o;return true};N.prototype.outdentToken=function(l,s){for(var o,B;l>0;){B=this.indents.length-1;if(this.indents[B]===undefined)l=0;else if(this.indents[B]===this.outdebt){l-=this.outdebt;this.outdebt=0}else if(this.indents[B]<this.outdebt){this.outdebt-=this.indents[B];l-=this.indents[B]}else{o=this.indents.pop();o-=this.outdebt;l-=o;this.outdebt=0;this.token("OUTDENT",o)}}if(o)this.outdebt-=l;this.tag()===
|
||||||
return true};N.prototype.whitespaceToken=function(){var l,s;if(!(s=this.match(oa,1)))return false;if(l=this.prev())l.spaced=true;this.i+=s.length;return true};N.prototype.newlineToken=function(){this.tag()!=="TERMINATOR"&&this.token("TERMINATOR","\n");return true};N.prototype.suppressNewlines=function(){this.value()==="\\"&&this.tokens.pop();return true};N.prototype.literalToken=function(){var l,s,o,B,q;(q=(s=this.chunk.match(Q))&&s[1])&&q.match(j)&&this.tagParameters();q||(q=this.chunk.substr(0,
|
"TERMINATOR"||s||this.token("TERMINATOR","\n");return true};N.prototype.whitespaceToken=function(){var l,s;if(!(s=this.match(oa,1)))return false;if(l=this.prev())l.spaced=true;this.i+=s.length;return true};N.prototype.newlineToken=function(){this.tag()!=="TERMINATOR"&&this.token("TERMINATOR","\n");return true};N.prototype.suppressNewlines=function(){this.value()==="\\"&&this.tokens.pop();return true};N.prototype.literalToken=function(){var l,s,o,B,q;(q=(s=this.chunk.match(Q))&&s[1])&&q.match(j)&&
|
||||||
1));this.i+=q.length;s=(o=this.prev())&&o.spaced;B=q;if(q==="="){W(Y,this.value())&&this.assignmentError();if("or"===(l=this.value())||"and"===l){this.tokens.splice(this.tokens.length-1,1,["COMPOUND_ASSIGN",K[this.value()]+"=",o[2]]);return true}}if(q===";")B="TERMINATOR";else if(W(L,q))B="LOGIC";else if(W(t,q))B="MATH";else if(W(d,q))B="COMPARE";else if(W(A,q))B="COMPOUND_ASSIGN";else if(W(ha,q))B="UNARY";else if(W(ja,q))B="SHIFT";else if(W(c,this.tag())&&!s)if(q==="("){if(o[0]==="?")o[0]="FUNC_EXIST";
|
this.tagParameters();q||(q=this.chunk.substr(0,1));this.i+=q.length;s=(o=this.prev())&&o.spaced;B=q;if(q==="="){W(Y,this.value())&&this.assignmentError();if("or"===(l=this.value())||"and"===l){this.tokens.splice(this.tokens.length-1,1,["COMPOUND_ASSIGN",K[this.value()]+"=",o[2]]);return true}}if(q===";")B="TERMINATOR";else if(W(L,q))B="LOGIC";else if(W(t,q))B="MATH";else if(W(d,q))B="COMPARE";else if(W(A,q))B="COMPOUND_ASSIGN";else if(W(ha,q))B="UNARY";else if(W(ja,q))B="SHIFT";else if(W(c,this.tag())&&
|
||||||
B="CALL_START"}else if(q==="["){B="INDEX_START";this.tag()==="?"&&this.tag(1,"INDEX_SOAK");this.tag()==="::"&&this.tag(1,"INDEX_PROTO")}this.token(B,q);return true};N.prototype.tagAccessor=function(){var l;if(!(l=this.prev())||l&&l.spaced)return false;return function(){if(l[1]==="::")return this.tag(1,"PROTOTYPE_ACCESS");else if(l[1]==="."&&this.value(2)!==".")if(this.tag(2)==="?"){this.tag(1,"SOAK_ACCESS");return this.tokens.splice(-2,1)}else return this.tag(1,"PROPERTY_ACCESS");else return l[0]===
|
!s)if(q==="("){if(o[0]==="?")o[0]="FUNC_EXIST";B="CALL_START"}else if(q==="["){B="INDEX_START";this.tag()==="?"&&this.tag(1,"INDEX_SOAK");this.tag()==="::"&&this.tag(1,"INDEX_PROTO")}this.token(B,q);return true};N.prototype.tagAccessor=function(){var l;if(!(l=this.prev())||l&&l.spaced)return false;return function(){if(l[1]==="::")return this.tag(1,"PROTOTYPE_ACCESS");else if(l[1]==="."&&this.value(2)!==".")if(this.tag(2)==="?"){this.tag(1,"SOAK_ACCESS");return this.tokens.splice(-2,1)}else return this.tag(1,
|
||||||
"@"}.call(this)?"accessor":false};N.prototype.sanitizeHeredoc=function(l,s){var o,B,q;q=s.indent;if(s.herecomment&&!W(l,"\n"))return l;if(!s.herecomment)for(;(B=C.exec(l))!==null;){B=typeof(o=B[2])!=="undefined"&&o!==null?B[2]:B[3];if(!(typeof q!=="undefined"&&q!==null)||B.length<q.length)q=B}q||(q="");l=l.replace(new RegExp("^"+q,"gm"),"");if(s.herecomment)return l;l=l.replace(/^\n/,"");return l.replace(m,"\\n").replace(new RegExp(s.quote,"g"),"\\"+s.quote)};N.prototype.tagParameters=function(){var l,
|
"PROPERTY_ACCESS");else return l[0]==="@"}.call(this)?"accessor":false};N.prototype.sanitizeHeredoc=function(l,s){var o,B,q;q=s.indent;if(s.herecomment&&!W(l,"\n"))return l;if(!s.herecomment)for(;(B=C.exec(l))!==null;){B=typeof(o=B[2])!=="undefined"&&o!==null?B[2]:B[3];if(!(typeof q!=="undefined"&&q!==null)||B.length<q.length)q=B}q||(q="");l=l.replace(new RegExp("^"+q,"gm"),"");if(s.herecomment)return l;l=l.replace(/^\n/,"");return l.replace(m,"\\n").replace(new RegExp(s.quote,"g"),"\\"+s.quote)};
|
||||||
s;if(this.tag()!==")")return null;for(l=0;;){l+=1;s=this.prev(l);if(!s)return null;switch(s[0]){case "IDENTIFIER":s[0]="PARAM";break;case ")":s[0]="PARAM_END";break;case "(":case "CALL_START":return s[0]="PARAM_START"}}return true};N.prototype.closeIndentation=function(){return this.outdentToken(this.indent)};N.prototype.identifierError=function(l){throw new Error('SyntaxError: Reserved word "'+l+'" on line '+(this.line+1));};N.prototype.assignmentError=function(){throw new Error('SyntaxError: Reserved word "'+
|
N.prototype.tagParameters=function(){var l,s;if(this.tag()!==")")return null;for(l=0;;){l+=1;s=this.prev(l);if(!s)return null;switch(s[0]){case "IDENTIFIER":s[0]="PARAM";break;case ")":s[0]="PARAM_END";break;case "(":case "CALL_START":return s[0]="PARAM_START"}}return true};N.prototype.closeIndentation=function(){return this.outdentToken(this.indent)};N.prototype.identifierError=function(l){throw new Error('SyntaxError: Reserved word "'+l+'" on line '+(this.line+1));};N.prototype.assignmentError=
|
||||||
this.value()+'" on line '+(this.line+1)+" can't be assigned");};N.prototype.balancedString=function(l,s){var o,B,q,R,V,ea,O,a;a=s[0][0]==="/";V=[];for(R=0;R<l.length;){if(V.length&&ga(l,"\\",R))R+=1;else{o=0;for(B=s.length;o<B;o++){O=s[o];ea=O[0];q=O[1];if(V.length&&ga(l,q,R)&&V[V.length-1]===O){V.pop();R+=q.length-1;V.length||(R+=1);break}else if(ga(l,ea,R)){V.push(O);R+=ea.length-1;break}}}if(!V.length||a&&ga(l,"\n",R))break;R+=1}if(V.length){if(a)return false;throw new Error("SyntaxError: Unterminated "+
|
function(){throw new Error('SyntaxError: Reserved word "'+this.value()+'" on line '+(this.line+1)+" can't be assigned");};N.prototype.balancedString=function(l,s){var o,B,q,R,V,ea,O,a;a=s[0][0]==="/";V=[];for(R=0;R<l.length;){if(V.length&&ga(l,"\\",R))R+=1;else{o=0;for(B=s.length;o<B;o++){O=s[o];ea=O[0];q=O[1];if(V.length&&ga(l,q,R)&&V[V.length-1]===O){V.pop();R+=q.length-1;V.length||(R+=1);break}else if(ga(l,ea,R)){V.push(O);R+=ea.length-1;break}}}if(!V.length||a&&ga(l,"\n",R))break;R+=1}if(V.length){if(a)return false;
|
||||||
V.pop()[0]+" starting on line "+(this.line+1));}return!R?false:l.substring(0,R)};N.prototype.interpolateString=function(l,s){var o,B,q,R,V,ea,O,a,b,f;s||(s={});if(l.length<3||!ga(l,'"'))return this.token("STRING",l);else{O=new N;f=[];q=l.substring(0,1);B=[1,1];V=B[0];for(o=B[1];V<l.length-1;){if(ga(l,"\\",V))V+=1;else if(R=this.balancedString(l.substring(V),[["#{","}"]])){o<V&&f.push(["STRING",q+l.substring(o,V)+q]);o=R.substring(2,R.length-1);if(o.length){if(s.heredoc)o=o.replace(new RegExp("\\\\"+
|
throw new Error("SyntaxError: Unterminated "+V.pop()[0]+" starting on line "+(this.line+1));}return!R?false:l.substring(0,R)};N.prototype.interpolateString=function(l,s){var o,B,q,R,V,ea,O,a,b,f;s||(s={});if(l.length<3||!ga(l,'"'))return this.token("STRING",l);else{O=new N;f=[];q=l.substring(0,1);B=[1,1];V=B[0];for(o=B[1];V<l.length-1;){if(ga(l,"\\",V))V+=1;else if(R=this.balancedString(l.substring(V),[["#{","}"]])){o<V&&f.push(["STRING",q+l.substring(o,V)+q]);o=R.substring(2,R.length-1);if(o.length){if(s.heredoc)o=
|
||||||
q,"g"),q);B=a=O.tokenize("("+o+")",{line:this.line});ea=0;for(o=B.length;ea<o;ea++){b=B[ea];if(b[0]==="CALL_END")b[0]=")"}a.pop();f.push(["TOKENS",a])}else f.push(["STRING",q+q]);V+=R.length-1;o=V+1}V+=1}o<V&&o<l.length-1&&f.push(["STRING",q+l.substring(o,V)+q]);f[0][0]!=="STRING"&&f.unshift(["STRING",'""']);(R=f.length>1)&&this.token("(","(");B=f;V=0;for(o=B.length;V<o;V++){q=B[V];O=q[0];q=q[1];if(O==="TOKENS")this.tokens=this.tokens.concat(q);else if(O==="STRING"&&s.escapeQuotes){q=q.substring(1,
|
o.replace(new RegExp("\\\\"+q,"g"),q);B=a=O.tokenize("("+o+")",{line:this.line});ea=0;for(o=B.length;ea<o;ea++){b=B[ea];if(b[0]==="CALL_END")b[0]=")"}a.pop();f.push(["TOKENS",a])}else f.push(["STRING",q+q]);V+=R.length-1;o=V+1}V+=1}o<V&&o<l.length-1&&f.push(["STRING",q+l.substring(o,V)+q]);f[0][0]!=="STRING"&&f.unshift(["STRING",'""']);(R=f.length>1)&&this.token("(","(");B=f;V=0;for(o=B.length;V<o;V++){q=B[V];O=q[0];q=q[1];if(O==="TOKENS")this.tokens=this.tokens.concat(q);else if(O==="STRING"&&s.escapeQuotes){q=
|
||||||
q.length-1).replace(/"/g,'\\"');this.token(O,'"'+q+'"')}else this.token(O,q);V<f.length-1&&this.token("+","+")}R&&this.token(")",")");return f}};N.prototype.token=function(l,s){return this.tokens.push([l,s,this.line])};N.prototype.tag=function(l,s){var o;if(!(o=this.prev(l)))return null;if(typeof s!=="undefined"&&s!==null)return o[0]=s;return o[0]};N.prototype.value=function(l,s){var o;if(!(o=this.prev(l)))return null;if(typeof s!=="undefined"&&s!==null)return o[1]=s;return o[1]};N.prototype.prev=
|
q.substring(1,q.length-1).replace(/"/g,'\\"');this.token(O,'"'+q+'"')}else this.token(O,q);V<f.length-1&&this.token("+","+")}R&&this.token(")",")");return f}};N.prototype.token=function(l,s){return this.tokens.push([l,s,this.line])};N.prototype.tag=function(l,s){var o;if(!(o=this.prev(l)))return null;if(typeof s!=="undefined"&&s!==null)return o[0]=s;return o[0]};N.prototype.value=function(l,s){var o;if(!(o=this.prev(l)))return null;if(typeof s!=="undefined"&&s!==null)return o[1]=s;return o[1]};N.prototype.prev=
|
||||||
function(l){return this.tokens[this.tokens.length-(l||1)]};N.prototype.match=function(l,s){var o;if(!(o=this.chunk.match(l)))return false;return o?o[s]:false};N.prototype.unfinished=function(){var l;l=this.prev(2);return this.value()&&this.value().match&&this.value().match(M)&&l&&l[0]!=="."&&!this.value().match(j)&&!this.chunk.match(x)};return N}();aa=["if","else","true","false","new","return","try","catch","finally","throw","break","continue","for","in","while","delete","instanceof","typeof","switch",
|
function(l){return this.tokens[this.tokens.length-(l||1)]};N.prototype.match=function(l,s){var o;if(!(o=this.chunk.match(l)))return false;return o?o[s]:false};N.prototype.unfinished=function(){var l;l=this.prev(2);return this.value()&&this.value().match&&this.value().match(M)&&l&&l[0]!=="."&&!this.value().match(j)&&!this.chunk.match(x)};return N}();aa=["if","else","true","false","new","return","try","catch","finally","throw","break","continue","for","in","while","delete","instanceof","typeof","switch",
|
||||||
"super","extends","class","this","null","debugger"];h=["and","or","is","isnt","not"];e=h.concat(["then","unless","until","loop","yes","no","on","off","of","by","where","when"]);la=["case","default","do","function","var","void","with","const","let","enum","export","import","native","__hasProp","__extends","__slice"];Y=aa.concat(la);ca=/^([a-zA-Z\$_](\w|\$)*)/;y=/^(((\b0(x|X)[0-9a-fA-F]+)|((\b[0-9]+(\.[0-9]+)?|\.[0-9]+)(e[+\-]?[0-9]+)?)))\b/i;P=/^("{6}|'{6}|"{3}([\s\S]*?)\n?([ \t]*)"{3}|'{3}([\s\S]*?)\n?([ \t]*)'{3})/;
|
"super","extends","class","this","null","debugger"];h=["and","or","is","isnt","not"];e=h.concat(["then","unless","until","loop","yes","no","on","off","of","by","where","when"]);la=["case","default","do","function","var","void","with","const","let","enum","export","import","native","__hasProp","__extends","__slice"];Y=aa.concat(la);ca=/^([a-zA-Z\$_](\w|\$)*)/;y=/^(((\b0(x|X)[0-9a-fA-F]+)|((\b[0-9]+(\.[0-9]+)?|\.[0-9]+)(e[+\-]?[0-9]+)?)))\b/i;P=/^("{6}|'{6}|"{3}([\s\S]*?)\n?([ \t]*)"{3}|'{3}([\s\S]*?)\n?([ \t]*)'{3})/;
|
||||||
Q=/^(-[\-=>]?|\+[+=]?|[*&|\/%=<>^:!?]+)([ \t]*)/;oa=/^([ \t]+)/;r=/^(([ \t]*\n)*([ \t]*)###([^#][\s\S]*?)(###[ \t]*\n|(###)?$)|(\s*#(?!##[^#])[^\n]*)+)/;j=/^((-|=)>)/;v=/^((\n([ \t]*))+)(\.)?/;X=/\n([ \t]*)/g;E=/\n([ \t]*)/;ia=/^\/([^\/])/;F=/([^\\]#\{.*[^\\]\})/;U=/^(([imgy]{1,4})\b|\W|$)/;S=/\\[^\$]/g;$=/(^`|`$)/g;m=/\n/g;M=/^([+\*&|\/\-%=<>!.\\][<>=&|]*|and|or|is|isnt|not|delete|typeof|instanceof)$/;C=/(\n+([ \t]*)|^([ \t]+))/g;x=/^\s*(([a-zA-Z\$_@]\w*|["'][^\r\n]+?["']|\d+)[ \t]*?[:=][^:=])/;
|
Q=/^(-[\-=>]?|\+[+=]?|[*&|\/%=<>^:!?]+)([ \t]*)/;oa=/^([ \t]+)/;r=/^(###([^#][\s\S]*?)(###[ \t]*\n|(###)?$)|(\s*#(?!##[^#])[^\n]*)+)/;j=/^((-|=)>)/;v=/^((\n([ \t]*))+)(\.)?/;X=/\n([ \t]*)/g;E=/\n([ \t]*)/;ia=/^\/([^\/])/;F=/([^\\]#\{.*[^\\]\})/;U=/^(([imgy]{1,4})\b|\W|$)/;S=/\\[^\$]/g;$=/(^`|`$)/g;m=/\n/g;M=/^([+\*&|\/\-%=<>!.\\][<>=&|]*|and|or|is|isnt|not|delete|typeof|instanceof)$/;C=/(\n+([ \t]*)|^([ \t]+))/g;x=/^\s*(([a-zA-Z\$_@]\w*|["'][^\r\n]+?["']|\d+)[ \t]*?[:=][^:=])/;u=/^\s*(\S)/;A=["-=",
|
||||||
u=/^\s*(\S)/;A=["-=","+=","/=","*=","%=","||=","&&=","?=","<<=",">>=",">>>=","&=","^=","|="];ha=["UMINUS","UPLUS","!","!!","~","TYPEOF","DELETE"];L=["&","|","^","&&","||"];ja=["<<",">>",">>>"];d=["<=","<",">",">="];t=["*","/","%"];I=["NUMBER","REGEX","++","--","FALSE","NULL","TRUE","]"];c=["IDENTIFIER","SUPER",")","]","}","STRING","@","THIS","?","::"];D=["INDENT","OUTDENT","TERMINATOR"];K={and:"&&",or:"||",is:"==",isnt:"!=",not:"!","===":"=="}}).call(this)});T["./parser"]=new (function(){var z=this,
|
"+=","/=","*=","%=","||=","&&=","?=","<<=",">>=",">>>=","&=","^=","|="];ha=["UMINUS","UPLUS","!","!!","~","TYPEOF","DELETE"];L=["&","|","^","&&","||"];ja=["<<",">>",">>>"];d=["<=","<",">",">="];t=["*","/","%"];I=["NUMBER","REGEX","++","--","FALSE","NULL","TRUE","]"];c=["IDENTIFIER","SUPER",")","]","}","STRING","@","THIS","?","::"];D=["INDENT","OUTDENT","TERMINATOR"];K={and:"&&",or:"||",is:"==",isnt:"!=",not:"!","===":"=="}}).call(this)});T["./parser"]=new (function(){var z=this,x=function(){return{trace:function(){},
|
||||||
x=function(){return{trace:function(){},yy:{},symbols_:{error:2,Root:3,TERMINATOR:4,Body:5,Block:6,Line:7,Expression:8,Statement:9,Return:10,Throw:11,BREAK:12,CONTINUE:13,DEBUGGER:14,Value:15,Call:16,Code:17,Operation:18,Assign:19,If:20,Try:21,While:22,For:23,Switch:24,Extends:25,Class:26,Existence:27,Comment:28,INDENT:29,OUTDENT:30,Identifier:31,IDENTIFIER:32,AlphaNumeric:33,NUMBER:34,STRING:35,Literal:36,JS:37,REGEX:38,TRUE:39,FALSE:40,YES:41,NO:42,ON:43,OFF:44,Assignable:45,"=":46,AssignObj:47,
|
yy:{},symbols_:{error:2,Root:3,TERMINATOR:4,Body:5,Block:6,Line:7,Expression:8,Statement:9,Return:10,Throw:11,BREAK:12,CONTINUE:13,DEBUGGER:14,Value:15,Call:16,Code:17,Operation:18,Assign:19,If:20,Try:21,While:22,For:23,Switch:24,Extends:25,Class:26,Existence:27,Comment:28,INDENT:29,OUTDENT:30,Identifier:31,IDENTIFIER:32,AlphaNumeric:33,NUMBER:34,STRING:35,Literal:36,JS:37,REGEX:38,TRUE:39,FALSE:40,YES:41,NO:42,ON:43,OFF:44,Assignable:45,"=":46,AssignObj:47,":":48,RETURN:49,HERECOMMENT:50,"?":51,
|
||||||
":":48,RETURN:49,HERECOMMENT:50,"?":51,PARAM_START:52,ParamList:53,PARAM_END:54,FuncGlyph:55,"->":56,"=>":57,OptComma:58,",":59,Param:60,PARAM:61,"@":62,".":63,Splat:64,SimpleAssignable:65,Accessor:66,Invocation:67,ThisProperty:68,Array:69,Object:70,Parenthetical:71,Range:72,This:73,NULL:74,PROPERTY_ACCESS:75,PROTOTYPE_ACCESS:76,"::":77,SOAK_ACCESS:78,Index:79,Slice:80,INDEX_START:81,INDEX_END:82,INDEX_SOAK:83,INDEX_PROTO:84,"{":85,AssignList:86,"}":87,CLASS:88,EXTENDS:89,ClassBody:90,ClassAssign:91,
|
PARAM_START:52,ParamList:53,PARAM_END:54,FuncGlyph:55,"->":56,"=>":57,OptComma:58,",":59,Param:60,PARAM:61,"@":62,".":63,Splat:64,SimpleAssignable:65,Accessor:66,Invocation:67,ThisProperty:68,Array:69,Object:70,Parenthetical:71,Range:72,This:73,NULL:74,PROPERTY_ACCESS:75,PROTOTYPE_ACCESS:76,"::":77,SOAK_ACCESS:78,Index:79,Slice:80,INDEX_START:81,INDEX_END:82,INDEX_SOAK:83,INDEX_PROTO:84,"{":85,AssignList:86,"}":87,CLASS:88,EXTENDS:89,ClassBody:90,ClassAssign:91,NEW:92,OptFuncExist:93,Arguments:94,
|
||||||
NEW:92,OptFuncExist:93,Arguments:94,SUPER:95,FUNC_EXIST:96,CALL_START:97,CALL_END:98,ArgList:99,THIS:100,RangeDots:101,"[":102,"]":103,Arg:104,SimpleArgs:105,TRY:106,Catch:107,FINALLY:108,CATCH:109,THROW:110,"(":111,")":112,WhileSource:113,WHILE:114,WHEN:115,UNTIL:116,Loop:117,LOOP:118,ForBody:119,FOR:120,ForStart:121,ForSource:122,ForVariables:123,ALL:124,ForValue:125,IN:126,OF:127,BY:128,SWITCH:129,Whens:130,ELSE:131,When:132,LEADING_WHEN:133,IfBlock:134,IF:135,UNLESS:136,POST_IF:137,POST_UNLESS:138,
|
SUPER:95,FUNC_EXIST:96,CALL_START:97,CALL_END:98,ArgList:99,THIS:100,RangeDots:101,"[":102,"]":103,Arg:104,SimpleArgs:105,TRY:106,Catch:107,FINALLY:108,CATCH:109,THROW:110,"(":111,")":112,WhileSource:113,WHILE:114,WHEN:115,UNTIL:116,Loop:117,LOOP:118,ForBody:119,FOR:120,ForStart:121,ForSource:122,ForVariables:123,ALL:124,ForValue:125,IN:126,OF:127,BY:128,SWITCH:129,Whens:130,ELSE:131,When:132,LEADING_WHEN:133,IfBlock:134,IF:135,UNLESS:136,POST_IF:137,POST_UNLESS:138,UNARY:139,"-":140,"+":141,"--":142,
|
||||||
UNARY:139,"-":140,"+":141,"--":142,"++":143,"==":144,"!=":145,MATH:146,SHIFT:147,COMPARE:148,LOGIC:149,COMPOUND_ASSIGN:150,INSTANCEOF:151,$accept:0,$end:1},terminals_:{"2":"error","4":"TERMINATOR","12":"BREAK","13":"CONTINUE","14":"DEBUGGER","29":"INDENT","30":"OUTDENT","32":"IDENTIFIER","34":"NUMBER","35":"STRING","37":"JS","38":"REGEX","39":"TRUE","40":"FALSE","41":"YES","42":"NO","43":"ON","44":"OFF","46":"=","48":":","49":"RETURN","50":"HERECOMMENT","51":"?","52":"PARAM_START","54":"PARAM_END",
|
"++":143,"==":144,"!=":145,MATH:146,SHIFT:147,COMPARE:148,LOGIC:149,COMPOUND_ASSIGN:150,INSTANCEOF:151,$accept:0,$end:1},terminals_:{"2":"error","4":"TERMINATOR","12":"BREAK","13":"CONTINUE","14":"DEBUGGER","29":"INDENT","30":"OUTDENT","32":"IDENTIFIER","34":"NUMBER","35":"STRING","37":"JS","38":"REGEX","39":"TRUE","40":"FALSE","41":"YES","42":"NO","43":"ON","44":"OFF","46":"=","48":":","49":"RETURN","50":"HERECOMMENT","51":"?","52":"PARAM_START","54":"PARAM_END","56":"->","57":"=>","59":",","61":"PARAM",
|
||||||
"56":"->","57":"=>","59":",","61":"PARAM","62":"@","63":".","74":"NULL","75":"PROPERTY_ACCESS","76":"PROTOTYPE_ACCESS","77":"::","78":"SOAK_ACCESS","81":"INDEX_START","82":"INDEX_END","83":"INDEX_SOAK","84":"INDEX_PROTO","85":"{","87":"}","88":"CLASS","89":"EXTENDS","92":"NEW","95":"SUPER","96":"FUNC_EXIST","97":"CALL_START","98":"CALL_END","100":"THIS","102":"[","103":"]","106":"TRY","108":"FINALLY","109":"CATCH","110":"THROW","111":"(","112":")","114":"WHILE","115":"WHEN","116":"UNTIL","118":"LOOP",
|
"62":"@","63":".","74":"NULL","75":"PROPERTY_ACCESS","76":"PROTOTYPE_ACCESS","77":"::","78":"SOAK_ACCESS","81":"INDEX_START","82":"INDEX_END","83":"INDEX_SOAK","84":"INDEX_PROTO","85":"{","87":"}","88":"CLASS","89":"EXTENDS","92":"NEW","95":"SUPER","96":"FUNC_EXIST","97":"CALL_START","98":"CALL_END","100":"THIS","102":"[","103":"]","106":"TRY","108":"FINALLY","109":"CATCH","110":"THROW","111":"(","112":")","114":"WHILE","115":"WHEN","116":"UNTIL","118":"LOOP","120":"FOR","124":"ALL","126":"IN","127":"OF",
|
||||||
"120":"FOR","124":"ALL","126":"IN","127":"OF","128":"BY","129":"SWITCH","131":"ELSE","133":"LEADING_WHEN","135":"IF","136":"UNLESS","137":"POST_IF","138":"POST_UNLESS","139":"UNARY","140":"-","141":"+","142":"--","143":"++","144":"==","145":"!=","146":"MATH","147":"SHIFT","148":"COMPARE","149":"LOGIC","150":"COMPOUND_ASSIGN","151":"INSTANCEOF"},productions_:[0,[3,0],[3,1],[3,1],[3,2],[5,1],[5,3],[5,2],[7,1],[7,1],[9,1],[9,1],[9,1],[9,1],[9,1],[8,1],[8,1],[8,1],[8,1],[8,1],[8,1],[8,1],[8,1],[8,1],
|
"128":"BY","129":"SWITCH","131":"ELSE","133":"LEADING_WHEN","135":"IF","136":"UNLESS","137":"POST_IF","138":"POST_UNLESS","139":"UNARY","140":"-","141":"+","142":"--","143":"++","144":"==","145":"!=","146":"MATH","147":"SHIFT","148":"COMPARE","149":"LOGIC","150":"COMPOUND_ASSIGN","151":"INSTANCEOF"},productions_:[0,[3,0],[3,1],[3,1],[3,2],[5,1],[5,3],[5,2],[7,1],[7,1],[9,1],[9,1],[9,1],[9,1],[9,1],[8,1],[8,1],[8,1],[8,1],[8,1],[8,1],[8,1],[8,1],[8,1],[8,1],[8,1],[8,1],[8,1],[8,1],[6,3],[6,2],[6,2],
|
||||||
[8,1],[8,1],[8,1],[8,1],[8,1],[6,3],[6,2],[6,2],[31,1],[33,1],[33,1],[36,1],[36,1],[36,1],[36,1],[36,1],[36,1],[36,1],[36,1],[36,1],[19,3],[19,5],[47,1],[47,1],[47,3],[47,3],[47,5],[47,5],[47,1],[10,2],[10,1],[28,1],[27,2],[17,5],[17,2],[55,1],[55,1],[58,0],[58,1],[53,0],[53,1],[53,3],[60,1],[60,2],[60,4],[60,5],[64,4],[65,1],[65,2],[65,2],[65,1],[45,1],[45,1],[45,1],[15,1],[15,1],[15,1],[15,1],[15,1],[15,1],[66,2],[66,2],[66,1],[66,2],[66,1],[66,1],[79,3],[79,2],[79,2],[70,4],[86,0],[86,1],[86,3],
|
[31,1],[33,1],[33,1],[36,1],[36,1],[36,1],[36,1],[36,1],[36,1],[36,1],[36,1],[36,1],[19,3],[19,5],[47,1],[47,1],[47,3],[47,3],[47,5],[47,5],[47,1],[10,2],[10,1],[28,1],[27,2],[17,5],[17,2],[55,1],[55,1],[58,0],[58,1],[53,0],[53,1],[53,3],[60,1],[60,2],[60,4],[60,5],[64,4],[65,1],[65,2],[65,2],[65,1],[45,1],[45,1],[45,1],[15,1],[15,1],[15,1],[15,1],[15,1],[15,1],[66,2],[66,2],[66,1],[66,2],[66,1],[66,1],[79,3],[79,2],[79,2],[70,4],[86,0],[86,1],[86,3],[86,4],[86,6],[26,2],[26,4],[26,5],[26,7],[26,
|
||||||
[86,4],[86,6],[26,2],[26,4],[26,5],[26,7],[26,4],[91,1],[91,3],[91,5],[90,0],[90,1],[90,3],[90,3],[16,1],[16,2],[16,2],[25,3],[67,3],[67,3],[67,1],[67,2],[93,0],[93,1],[94,2],[94,4],[73,1],[73,1],[101,2],[101,3],[68,2],[72,5],[80,5],[80,4],[80,4],[69,2],[69,4],[99,1],[99,3],[99,4],[99,4],[99,6],[104,1],[104,1],[105,1],[105,3],[21,3],[21,4],[21,5],[107,3],[11,2],[71,3],[71,2],[113,2],[113,4],[113,2],[113,4],[22,2],[22,2],[22,2],[22,1],[117,2],[117,2],[23,2],[23,2],[23,2],[119,2],[119,2],[121,2],[121,
|
4],[91,1],[91,3],[91,5],[90,0],[90,1],[90,3],[90,3],[16,1],[16,2],[16,2],[25,3],[67,3],[67,3],[67,1],[67,2],[93,0],[93,1],[94,2],[94,4],[73,1],[73,1],[101,2],[101,3],[68,2],[72,5],[80,5],[80,4],[80,4],[69,2],[69,4],[99,1],[99,3],[99,4],[99,4],[99,6],[104,1],[104,1],[105,1],[105,3],[21,3],[21,4],[21,5],[107,3],[11,2],[71,3],[71,2],[113,2],[113,4],[113,2],[113,4],[22,2],[22,2],[22,2],[22,1],[117,2],[117,2],[23,2],[23,2],[23,2],[119,2],[119,2],[121,2],[121,3],[125,1],[125,1],[125,1],[123,1],[123,3],
|
||||||
3],[125,1],[125,1],[125,1],[123,1],[123,3],[122,2],[122,2],[122,4],[122,4],[122,4],[122,6],[122,6],[24,5],[24,7],[24,4],[24,6],[130,1],[130,2],[132,3],[132,4],[134,3],[134,3],[134,5],[134,3],[20,1],[20,3],[20,3],[20,3],[20,3],[18,2],[18,2],[18,2],[18,2],[18,2],[18,2],[18,2],[18,3],[18,3],[18,3],[18,3],[18,3],[18,3],[18,3],[18,3],[18,3],[18,3],[18,5],[18,3],[18,3],[18,3],[18,4],[18,4],[18,4]],performAction:function(c,j,h,e,r,d){c=d.length;switch(r){case 1:return this.$=new e.Expressions;case 2:return this.$=
|
[122,2],[122,2],[122,4],[122,4],[122,4],[122,6],[122,6],[24,5],[24,7],[24,4],[24,6],[130,1],[130,2],[132,3],[132,4],[134,3],[134,3],[134,5],[134,3],[20,1],[20,3],[20,3],[20,3],[20,3],[18,2],[18,2],[18,2],[18,2],[18,2],[18,2],[18,2],[18,3],[18,3],[18,3],[18,3],[18,3],[18,3],[18,3],[18,3],[18,3],[18,3],[18,5],[18,3],[18,3],[18,3],[18,4],[18,4],[18,4]],performAction:function(c,j,h,e,r,d){c=d.length;switch(r){case 1:return this.$=new e.Expressions;case 2:return this.$=new e.Expressions;case 3:return this.$=
|
||||||
new e.Expressions;case 3:return this.$=d[c-1+1-1];case 4:return this.$=d[c-2+1-1];case 5:this.$=e.Expressions.wrap([d[c-1+1-1]]);break;case 6:this.$=d[c-3+1-1].push(d[c-3+3-1]);break;case 7:this.$=d[c-2+1-1];break;case 8:this.$=d[c-1+1-1];break;case 9:this.$=d[c-1+1-1];break;case 10:this.$=d[c-1+1-1];break;case 11:this.$=d[c-1+1-1];break;case 12:this.$=new e.LiteralNode(d[c-1+1-1]);break;case 13:this.$=new e.LiteralNode(d[c-1+1-1]);break;case 14:this.$=new e.LiteralNode(d[c-1+1-1]);break;case 15:this.$=
|
d[c-1+1-1];case 4:return this.$=d[c-2+1-1];case 5:this.$=e.Expressions.wrap([d[c-1+1-1]]);break;case 6:this.$=d[c-3+1-1].push(d[c-3+3-1]);break;case 7:this.$=d[c-2+1-1];break;case 8:this.$=d[c-1+1-1];break;case 9:this.$=d[c-1+1-1];break;case 10:this.$=d[c-1+1-1];break;case 11:this.$=d[c-1+1-1];break;case 12:this.$=new e.LiteralNode(d[c-1+1-1]);break;case 13:this.$=new e.LiteralNode(d[c-1+1-1]);break;case 14:this.$=new e.LiteralNode(d[c-1+1-1]);break;case 15:this.$=d[c-1+1-1];break;case 16:this.$=
|
||||||
d[c-1+1-1];break;case 16:this.$=d[c-1+1-1];break;case 17:this.$=d[c-1+1-1];break;case 18:this.$=d[c-1+1-1];break;case 19:this.$=d[c-1+1-1];break;case 20:this.$=d[c-1+1-1];break;case 21:this.$=d[c-1+1-1];break;case 22:this.$=d[c-1+1-1];break;case 23:this.$=d[c-1+1-1];break;case 24:this.$=d[c-1+1-1];break;case 25:this.$=d[c-1+1-1];break;case 26:this.$=d[c-1+1-1];break;case 27:this.$=d[c-1+1-1];break;case 28:this.$=d[c-1+1-1];break;case 29:this.$=d[c-3+2-1];break;case 30:this.$=new e.Expressions;break;
|
d[c-1+1-1];break;case 17:this.$=d[c-1+1-1];break;case 18:this.$=d[c-1+1-1];break;case 19:this.$=d[c-1+1-1];break;case 20:this.$=d[c-1+1-1];break;case 21:this.$=d[c-1+1-1];break;case 22:this.$=d[c-1+1-1];break;case 23:this.$=d[c-1+1-1];break;case 24:this.$=d[c-1+1-1];break;case 25:this.$=d[c-1+1-1];break;case 26:this.$=d[c-1+1-1];break;case 27:this.$=d[c-1+1-1];break;case 28:this.$=d[c-1+1-1];break;case 29:this.$=d[c-3+2-1];break;case 30:this.$=new e.Expressions;break;case 31:this.$=e.Expressions.wrap([d[c-
|
||||||
case 31:this.$=e.Expressions.wrap([d[c-2+2-1]]);break;case 32:this.$=new e.LiteralNode(d[c-1+1-1]);break;case 33:this.$=new e.LiteralNode(d[c-1+1-1]);break;case 34:this.$=new e.LiteralNode(d[c-1+1-1]);break;case 35:this.$=d[c-1+1-1];break;case 36:this.$=new e.LiteralNode(d[c-1+1-1]);break;case 37:this.$=new e.LiteralNode(d[c-1+1-1]);break;case 38:this.$=new e.LiteralNode(true);break;case 39:this.$=new e.LiteralNode(false);break;case 40:this.$=new e.LiteralNode(true);break;case 41:this.$=new e.LiteralNode(false);
|
2+2-1]]);break;case 32:this.$=new e.LiteralNode(d[c-1+1-1]);break;case 33:this.$=new e.LiteralNode(d[c-1+1-1]);break;case 34:this.$=new e.LiteralNode(d[c-1+1-1]);break;case 35:this.$=d[c-1+1-1];break;case 36:this.$=new e.LiteralNode(d[c-1+1-1]);break;case 37:this.$=new e.LiteralNode(d[c-1+1-1]);break;case 38:this.$=new e.LiteralNode(true);break;case 39:this.$=new e.LiteralNode(false);break;case 40:this.$=new e.LiteralNode(true);break;case 41:this.$=new e.LiteralNode(false);break;case 42:this.$=new e.LiteralNode(true);
|
||||||
break;case 42:this.$=new e.LiteralNode(true);break;case 43:this.$=new e.LiteralNode(false);break;case 44:this.$=new e.AssignNode(d[c-3+1-1],d[c-3+3-1]);break;case 45:this.$=new e.AssignNode(d[c-5+1-1],d[c-5+4-1]);break;case 46:this.$=new e.ValueNode(d[c-1+1-1]);break;case 47:this.$=d[c-1+1-1];break;case 48:this.$=new e.AssignNode(new e.ValueNode(d[c-3+1-1]),d[c-3+3-1],"object");break;case 49:this.$=new e.AssignNode(new e.ValueNode(d[c-3+1-1]),d[c-3+3-1],"object");break;case 50:this.$=new e.AssignNode(new e.ValueNode(d[c-
|
break;case 43:this.$=new e.LiteralNode(false);break;case 44:this.$=new e.AssignNode(d[c-3+1-1],d[c-3+3-1]);break;case 45:this.$=new e.AssignNode(d[c-5+1-1],d[c-5+4-1]);break;case 46:this.$=new e.ValueNode(d[c-1+1-1]);break;case 47:this.$=d[c-1+1-1];break;case 48:this.$=new e.AssignNode(new e.ValueNode(d[c-3+1-1]),d[c-3+3-1],"object");break;case 49:this.$=new e.AssignNode(new e.ValueNode(d[c-3+1-1]),d[c-3+3-1],"object");break;case 50:this.$=new e.AssignNode(new e.ValueNode(d[c-5+1-1]),d[c-5+4-1],"object");
|
||||||
5+1-1]),d[c-5+4-1],"object");break;case 51:this.$=new e.AssignNode(new e.ValueNode(d[c-5+1-1]),d[c-5+4-1],"object");break;case 52:this.$=d[c-1+1-1];break;case 53:this.$=new e.ReturnNode(d[c-2+2-1]);break;case 54:this.$=new e.ReturnNode(new e.ValueNode(new e.LiteralNode("null")));break;case 55:this.$=new e.CommentNode(d[c-1+1-1]);break;case 56:this.$=new e.ExistenceNode(d[c-2+1-1]);break;case 57:this.$=new e.CodeNode(d[c-5+2-1],d[c-5+5-1],d[c-5+4-1]);break;case 58:this.$=new e.CodeNode([],d[c-2+2-
|
break;case 51:this.$=new e.AssignNode(new e.ValueNode(d[c-5+1-1]),d[c-5+4-1],"object");break;case 52:this.$=d[c-1+1-1];break;case 53:this.$=new e.ReturnNode(d[c-2+2-1]);break;case 54:this.$=new e.ReturnNode(new e.ValueNode(new e.LiteralNode("null")));break;case 55:this.$=new e.CommentNode(d[c-1+1-1]);break;case 56:this.$=new e.ExistenceNode(d[c-2+1-1]);break;case 57:this.$=new e.CodeNode(d[c-5+2-1],d[c-5+5-1],d[c-5+4-1]);break;case 58:this.$=new e.CodeNode([],d[c-2+2-1],d[c-2+1-1]);break;case 59:this.$=
|
||||||
1],d[c-2+1-1]);break;case 59:this.$="func";break;case 60:this.$="boundfunc";break;case 61:this.$=d[c-1+1-1];break;case 62:this.$=d[c-1+1-1];break;case 63:this.$=[];break;case 64:this.$=[d[c-1+1-1]];break;case 65:this.$=d[c-3+1-1].concat([d[c-3+3-1]]);break;case 66:this.$=new e.LiteralNode(d[c-1+1-1]);break;case 67:this.$=new e.ParamNode(d[c-2+2-1],true);break;case 68:this.$=new e.ParamNode(d[c-4+1-1],false,true);break;case 69:this.$=new e.ParamNode(d[c-5+2-1],true,true);break;case 70:this.$=new e.SplatNode(d[c-
|
"func";break;case 60:this.$="boundfunc";break;case 61:this.$=d[c-1+1-1];break;case 62:this.$=d[c-1+1-1];break;case 63:this.$=[];break;case 64:this.$=[d[c-1+1-1]];break;case 65:this.$=d[c-3+1-1].concat([d[c-3+3-1]]);break;case 66:this.$=new e.LiteralNode(d[c-1+1-1]);break;case 67:this.$=new e.ParamNode(d[c-2+2-1],true);break;case 68:this.$=new e.ParamNode(d[c-4+1-1],false,true);break;case 69:this.$=new e.ParamNode(d[c-5+2-1],true,true);break;case 70:this.$=new e.SplatNode(d[c-4+1-1]);break;case 71:this.$=
|
||||||
4+1-1]);break;case 71:this.$=new e.ValueNode(d[c-1+1-1]);break;case 72:this.$=d[c-2+1-1].push(d[c-2+2-1]);break;case 73:this.$=new e.ValueNode(d[c-2+1-1],[d[c-2+2-1]]);break;case 74:this.$=d[c-1+1-1];break;case 75:this.$=d[c-1+1-1];break;case 76:this.$=new e.ValueNode(d[c-1+1-1]);break;case 77:this.$=new e.ValueNode(d[c-1+1-1]);break;case 78:this.$=d[c-1+1-1];break;case 79:this.$=new e.ValueNode(d[c-1+1-1]);break;case 80:this.$=new e.ValueNode(d[c-1+1-1]);break;case 81:this.$=new e.ValueNode(d[c-
|
new e.ValueNode(d[c-1+1-1]);break;case 72:this.$=d[c-2+1-1].push(d[c-2+2-1]);break;case 73:this.$=new e.ValueNode(d[c-2+1-1],[d[c-2+2-1]]);break;case 74:this.$=d[c-1+1-1];break;case 75:this.$=d[c-1+1-1];break;case 76:this.$=new e.ValueNode(d[c-1+1-1]);break;case 77:this.$=new e.ValueNode(d[c-1+1-1]);break;case 78:this.$=d[c-1+1-1];break;case 79:this.$=new e.ValueNode(d[c-1+1-1]);break;case 80:this.$=new e.ValueNode(d[c-1+1-1]);break;case 81:this.$=new e.ValueNode(d[c-1+1-1]);break;case 82:this.$=
|
||||||
1+1-1]);break;case 82:this.$=d[c-1+1-1];break;case 83:this.$=new e.ValueNode(new e.LiteralNode("null"));break;case 84:this.$=new e.AccessorNode(d[c-2+2-1]);break;case 85:this.$=new e.AccessorNode(d[c-2+2-1],"prototype");break;case 86:this.$=new e.AccessorNode(new e.LiteralNode("prototype"));break;case 87:this.$=new e.AccessorNode(d[c-2+2-1],"soak");break;case 88:this.$=d[c-1+1-1];break;case 89:this.$=new e.SliceNode(d[c-1+1-1]);break;case 90:this.$=new e.IndexNode(d[c-3+2-1]);break;case 91:d[c-2+
|
d[c-1+1-1];break;case 83:this.$=new e.ValueNode(new e.LiteralNode("null"));break;case 84:this.$=new e.AccessorNode(d[c-2+2-1]);break;case 85:this.$=new e.AccessorNode(d[c-2+2-1],"prototype");break;case 86:this.$=new e.AccessorNode(new e.LiteralNode("prototype"));break;case 87:this.$=new e.AccessorNode(d[c-2+2-1],"soak");break;case 88:this.$=d[c-1+1-1];break;case 89:this.$=new e.SliceNode(d[c-1+1-1]);break;case 90:this.$=new e.IndexNode(d[c-3+2-1]);break;case 91:d[c-2+2-1].soakNode=true;this.$=d[c-
|
||||||
2-1].soakNode=true;this.$=d[c-2+2-1];break;case 92:d[c-2+2-1].proto=true;this.$=d[c-2+2-1];break;case 93:this.$=new e.ObjectNode(d[c-4+2-1]);break;case 94:this.$=[];break;case 95:this.$=[d[c-1+1-1]];break;case 96:this.$=d[c-3+1-1].concat([d[c-3+3-1]]);break;case 97:this.$=d[c-4+1-1].concat([d[c-4+4-1]]);break;case 98:this.$=d[c-6+1-1].concat(d[c-6+4-1]);break;case 99:this.$=new e.ClassNode(d[c-2+2-1]);break;case 100:this.$=new e.ClassNode(d[c-4+2-1],d[c-4+4-1]);break;case 101:this.$=new e.ClassNode(d[c-
|
2+2-1];break;case 92:d[c-2+2-1].proto=true;this.$=d[c-2+2-1];break;case 93:this.$=new e.ObjectNode(d[c-4+2-1]);break;case 94:this.$=[];break;case 95:this.$=[d[c-1+1-1]];break;case 96:this.$=d[c-3+1-1].concat([d[c-3+3-1]]);break;case 97:this.$=d[c-4+1-1].concat([d[c-4+4-1]]);break;case 98:this.$=d[c-6+1-1].concat(d[c-6+4-1]);break;case 99:this.$=new e.ClassNode(d[c-2+2-1]);break;case 100:this.$=new e.ClassNode(d[c-4+2-1],d[c-4+4-1]);break;case 101:this.$=new e.ClassNode(d[c-5+2-1],null,d[c-5+4-1]);
|
||||||
5+2-1],null,d[c-5+4-1]);break;case 102:this.$=new e.ClassNode(d[c-7+2-1],d[c-7+4-1],d[c-7+6-1]);break;case 103:this.$=new e.ClassNode("__temp__",null,d[c-4+3-1]);break;case 104:this.$=d[c-1+1-1];break;case 105:this.$=new e.AssignNode(new e.ValueNode(d[c-3+1-1]),d[c-3+3-1],"this");break;case 106:this.$=new e.AssignNode(new e.ValueNode(d[c-5+1-1]),d[c-5+4-1],"this");break;case 107:this.$=[];break;case 108:this.$=[d[c-1+1-1]];break;case 109:this.$=d[c-3+1-1].concat(d[c-3+3-1]);break;case 110:this.$=
|
break;case 102:this.$=new e.ClassNode(d[c-7+2-1],d[c-7+4-1],d[c-7+6-1]);break;case 103:this.$=new e.ClassNode("__temp__",null,d[c-4+3-1]);break;case 104:this.$=d[c-1+1-1];break;case 105:this.$=new e.AssignNode(new e.ValueNode(d[c-3+1-1]),d[c-3+3-1],"this");break;case 106:this.$=new e.AssignNode(new e.ValueNode(d[c-5+1-1]),d[c-5+4-1],"this");break;case 107:this.$=[];break;case 108:this.$=[d[c-1+1-1]];break;case 109:this.$=d[c-3+1-1].concat(d[c-3+3-1]);break;case 110:this.$=d[c-3+2-1];break;case 111:this.$=
|
||||||
d[c-3+2-1];break;case 111:this.$=d[c-1+1-1];break;case 112:this.$=d[c-2+2-1].newInstance();break;case 113:this.$=(new e.CallNode(d[c-2+2-1],[])).newInstance();break;case 114:this.$=new e.ExtendsNode(d[c-3+1-1],d[c-3+3-1]);break;case 115:this.$=new e.CallNode(d[c-3+1-1],d[c-3+3-1],d[c-3+2-1]);break;case 116:this.$=new e.CallNode(d[c-3+1-1],d[c-3+3-1],d[c-3+2-1]);break;case 117:this.$=new e.CallNode("super",[new e.SplatNode(new e.LiteralNode("arguments"))]);break;case 118:this.$=new e.CallNode("super",
|
d[c-1+1-1];break;case 112:this.$=d[c-2+2-1].newInstance();break;case 113:this.$=(new e.CallNode(d[c-2+2-1],[])).newInstance();break;case 114:this.$=new e.ExtendsNode(d[c-3+1-1],d[c-3+3-1]);break;case 115:this.$=new e.CallNode(d[c-3+1-1],d[c-3+3-1],d[c-3+2-1]);break;case 116:this.$=new e.CallNode(d[c-3+1-1],d[c-3+3-1],d[c-3+2-1]);break;case 117:this.$=new e.CallNode("super",[new e.SplatNode(new e.LiteralNode("arguments"))]);break;case 118:this.$=new e.CallNode("super",d[c-2+2-1]);break;case 119:this.$=
|
||||||
d[c-2+2-1]);break;case 119:this.$=false;break;case 120:this.$=true;break;case 121:this.$=[];break;case 122:this.$=d[c-4+2-1];break;case 123:this.$=new e.ValueNode(new e.LiteralNode("this"));break;case 124:this.$=new e.ValueNode(new e.LiteralNode("this"));break;case 125:this.$="inclusive";break;case 126:this.$="exclusive";break;case 127:this.$=new e.ValueNode(new e.LiteralNode("this"),[new e.AccessorNode(d[c-2+2-1])]);break;case 128:this.$=new e.RangeNode(d[c-5+2-1],d[c-5+4-1],d[c-5+3-1]);break;case 129:this.$=
|
false;break;case 120:this.$=true;break;case 121:this.$=[];break;case 122:this.$=d[c-4+2-1];break;case 123:this.$=new e.ValueNode(new e.LiteralNode("this"));break;case 124:this.$=new e.ValueNode(new e.LiteralNode("this"));break;case 125:this.$="inclusive";break;case 126:this.$="exclusive";break;case 127:this.$=new e.ValueNode(new e.LiteralNode("this"),[new e.AccessorNode(d[c-2+2-1])]);break;case 128:this.$=new e.RangeNode(d[c-5+2-1],d[c-5+4-1],d[c-5+3-1]);break;case 129:this.$=new e.RangeNode(d[c-
|
||||||
new e.RangeNode(d[c-5+2-1],d[c-5+4-1],d[c-5+3-1]);break;case 130:this.$=new e.RangeNode(d[c-4+2-1],null,d[c-4+3-1]);break;case 131:this.$=new e.RangeNode(null,d[c-4+3-1],d[c-4+2-1]);break;case 132:this.$=new e.ArrayNode([]);break;case 133:this.$=new e.ArrayNode(d[c-4+2-1]);break;case 134:this.$=[d[c-1+1-1]];break;case 135:this.$=d[c-3+1-1].concat([d[c-3+3-1]]);break;case 136:this.$=d[c-4+1-1].concat([d[c-4+4-1]]);break;case 137:this.$=d[c-4+2-1];break;case 138:this.$=d[c-6+1-1].concat(d[c-6+4-1]);
|
5+2-1],d[c-5+4-1],d[c-5+3-1]);break;case 130:this.$=new e.RangeNode(d[c-4+2-1],null,d[c-4+3-1]);break;case 131:this.$=new e.RangeNode(null,d[c-4+3-1],d[c-4+2-1]);break;case 132:this.$=new e.ArrayNode([]);break;case 133:this.$=new e.ArrayNode(d[c-4+2-1]);break;case 134:this.$=[d[c-1+1-1]];break;case 135:this.$=d[c-3+1-1].concat([d[c-3+3-1]]);break;case 136:this.$=d[c-4+1-1].concat([d[c-4+4-1]]);break;case 137:this.$=d[c-4+2-1];break;case 138:this.$=d[c-6+1-1].concat(d[c-6+4-1]);break;case 139:this.$=
|
||||||
break;case 139:this.$=d[c-1+1-1];break;case 140:this.$=d[c-1+1-1];break;case 141:this.$=d[c-1+1-1];break;case 142:this.$=d[c-3+1-1]instanceof Array?d[c-3+1-1].concat([d[c-3+3-1]]):[d[c-3+1-1]].concat([d[c-3+3-1]]);break;case 143:this.$=new e.TryNode(d[c-3+2-1],d[c-3+3-1][0],d[c-3+3-1][1]);break;case 144:this.$=new e.TryNode(d[c-4+2-1],null,null,d[c-4+4-1]);break;case 145:this.$=new e.TryNode(d[c-5+2-1],d[c-5+3-1][0],d[c-5+3-1][1],d[c-5+5-1]);break;case 146:this.$=[d[c-3+2-1],d[c-3+3-1]];break;case 147:this.$=
|
d[c-1+1-1];break;case 140:this.$=d[c-1+1-1];break;case 141:this.$=d[c-1+1-1];break;case 142:this.$=d[c-3+1-1]instanceof Array?d[c-3+1-1].concat([d[c-3+3-1]]):[d[c-3+1-1]].concat([d[c-3+3-1]]);break;case 143:this.$=new e.TryNode(d[c-3+2-1],d[c-3+3-1][0],d[c-3+3-1][1]);break;case 144:this.$=new e.TryNode(d[c-4+2-1],null,null,d[c-4+4-1]);break;case 145:this.$=new e.TryNode(d[c-5+2-1],d[c-5+3-1][0],d[c-5+3-1][1],d[c-5+5-1]);break;case 146:this.$=[d[c-3+2-1],d[c-3+3-1]];break;case 147:this.$=new e.ThrowNode(d[c-
|
||||||
new e.ThrowNode(d[c-2+2-1]);break;case 148:this.$=new e.ParentheticalNode(d[c-3+2-1]);break;case 149:this.$=new e.ParentheticalNode(new e.LiteralNode(""));break;case 150:this.$=new e.WhileNode(d[c-2+2-1]);break;case 151:this.$=new e.WhileNode(d[c-4+2-1],{guard:d[c-4+4-1]});break;case 152:this.$=new e.WhileNode(d[c-2+2-1],{invert:true});break;case 153:this.$=new e.WhileNode(d[c-4+2-1],{invert:true,guard:d[c-4+4-1]});break;case 154:this.$=d[c-2+1-1].addBody(d[c-2+2-1]);break;case 155:this.$=d[c-2+2-
|
2+2-1]);break;case 148:this.$=new e.ParentheticalNode(d[c-3+2-1]);break;case 149:this.$=new e.ParentheticalNode(new e.LiteralNode(""));break;case 150:this.$=new e.WhileNode(d[c-2+2-1]);break;case 151:this.$=new e.WhileNode(d[c-4+2-1],{guard:d[c-4+4-1]});break;case 152:this.$=new e.WhileNode(d[c-2+2-1],{invert:true});break;case 153:this.$=new e.WhileNode(d[c-4+2-1],{invert:true,guard:d[c-4+4-1]});break;case 154:this.$=d[c-2+1-1].addBody(d[c-2+2-1]);break;case 155:this.$=d[c-2+2-1].addBody(e.Expressions.wrap([d[c-
|
||||||
1].addBody(e.Expressions.wrap([d[c-2+1-1]]));break;case 156:this.$=d[c-2+2-1].addBody(e.Expressions.wrap([d[c-2+1-1]]));break;case 157:this.$=d[c-1+1-1];break;case 158:this.$=(new e.WhileNode(new e.LiteralNode("true"))).addBody(d[c-2+2-1]);break;case 159:this.$=(new e.WhileNode(new e.LiteralNode("true"))).addBody(e.Expressions.wrap([d[c-2+2-1]]));break;case 160:this.$=new e.ForNode(d[c-2+1-1],d[c-2+2-1],d[c-2+2-1].vars[0],d[c-2+2-1].vars[1]);break;case 161:this.$=new e.ForNode(d[c-2+1-1],d[c-2+2-
|
2+1-1]]));break;case 156:this.$=d[c-2+2-1].addBody(e.Expressions.wrap([d[c-2+1-1]]));break;case 157:this.$=d[c-1+1-1];break;case 158:this.$=(new e.WhileNode(new e.LiteralNode("true"))).addBody(d[c-2+2-1]);break;case 159:this.$=(new e.WhileNode(new e.LiteralNode("true"))).addBody(e.Expressions.wrap([d[c-2+2-1]]));break;case 160:this.$=new e.ForNode(d[c-2+1-1],d[c-2+2-1],d[c-2+2-1].vars[0],d[c-2+2-1].vars[1]);break;case 161:this.$=new e.ForNode(d[c-2+1-1],d[c-2+2-1],d[c-2+2-1].vars[0],d[c-2+2-1].vars[1]);
|
||||||
1],d[c-2+2-1].vars[0],d[c-2+2-1].vars[1]);break;case 162:this.$=new e.ForNode(d[c-2+2-1],d[c-2+1-1],d[c-2+1-1].vars[0],d[c-2+1-1].vars[1]);break;case 163:this.$={source:new e.ValueNode(d[c-2+2-1]),vars:[]};break;case 164:d[c-2+2-1].raw=d[c-2+1-1].raw;d[c-2+2-1].vars=d[c-2+1-1];this.$=d[c-2+2-1];break;case 165:this.$=d[c-2+2-1];break;case 166:d[c-3+3-1].raw=true;this.$=d[c-3+3-1];break;case 167:this.$=d[c-1+1-1];break;case 168:this.$=new e.ValueNode(d[c-1+1-1]);break;case 169:this.$=new e.ValueNode(d[c-
|
break;case 162:this.$=new e.ForNode(d[c-2+2-1],d[c-2+1-1],d[c-2+1-1].vars[0],d[c-2+1-1].vars[1]);break;case 163:this.$={source:new e.ValueNode(d[c-2+2-1]),vars:[]};break;case 164:d[c-2+2-1].raw=d[c-2+1-1].raw;d[c-2+2-1].vars=d[c-2+1-1];this.$=d[c-2+2-1];break;case 165:this.$=d[c-2+2-1];break;case 166:d[c-3+3-1].raw=true;this.$=d[c-3+3-1];break;case 167:this.$=d[c-1+1-1];break;case 168:this.$=new e.ValueNode(d[c-1+1-1]);break;case 169:this.$=new e.ValueNode(d[c-1+1-1]);break;case 170:this.$=[d[c-1+
|
||||||
1+1-1]);break;case 170:this.$=[d[c-1+1-1]];break;case 171:this.$=[d[c-3+1-1],d[c-3+3-1]];break;case 172:this.$={source:d[c-2+2-1]};break;case 173:this.$={source:d[c-2+2-1],object:true};break;case 174:this.$={source:d[c-4+2-1],guard:d[c-4+4-1]};break;case 175:this.$={source:d[c-4+2-1],guard:d[c-4+4-1],object:true};break;case 176:this.$={source:d[c-4+2-1],step:d[c-4+4-1]};break;case 177:this.$={source:d[c-6+2-1],guard:d[c-6+4-1],step:d[c-6+6-1]};break;case 178:this.$={source:d[c-6+2-1],step:d[c-6+4-
|
1-1]];break;case 171:this.$=[d[c-3+1-1],d[c-3+3-1]];break;case 172:this.$={source:d[c-2+2-1]};break;case 173:this.$={source:d[c-2+2-1],object:true};break;case 174:this.$={source:d[c-4+2-1],guard:d[c-4+4-1]};break;case 175:this.$={source:d[c-4+2-1],guard:d[c-4+4-1],object:true};break;case 176:this.$={source:d[c-4+2-1],step:d[c-4+4-1]};break;case 177:this.$={source:d[c-6+2-1],guard:d[c-6+4-1],step:d[c-6+6-1]};break;case 178:this.$={source:d[c-6+2-1],step:d[c-6+4-1],guard:d[c-6+6-1]};break;case 179:this.$=
|
||||||
1],guard:d[c-6+6-1]};break;case 179:this.$=new e.SwitchNode(d[c-5+2-1],d[c-5+4-1]);break;case 180:this.$=new e.SwitchNode(d[c-7+2-1],d[c-7+4-1],d[c-7+6-1]);break;case 181:this.$=new e.SwitchNode(null,d[c-4+3-1]);break;case 182:this.$=new e.SwitchNode(null,d[c-6+3-1],d[c-6+5-1]);break;case 183:this.$=d[c-1+1-1];break;case 184:this.$=d[c-2+1-1].concat(d[c-2+2-1]);break;case 185:this.$=[[d[c-3+2-1],d[c-3+3-1]]];break;case 186:this.$=[[d[c-4+2-1],d[c-4+3-1]]];break;case 187:this.$=new e.IfNode(d[c-3+
|
new e.SwitchNode(d[c-5+2-1],d[c-5+4-1]);break;case 180:this.$=new e.SwitchNode(d[c-7+2-1],d[c-7+4-1],d[c-7+6-1]);break;case 181:this.$=new e.SwitchNode(null,d[c-4+3-1]);break;case 182:this.$=new e.SwitchNode(null,d[c-6+3-1],d[c-6+5-1]);break;case 183:this.$=d[c-1+1-1];break;case 184:this.$=d[c-2+1-1].concat(d[c-2+2-1]);break;case 185:this.$=[[d[c-3+2-1],d[c-3+3-1]]];break;case 186:this.$=[[d[c-4+2-1],d[c-4+3-1]]];break;case 187:this.$=new e.IfNode(d[c-3+2-1],d[c-3+3-1]);break;case 188:this.$=new e.IfNode(d[c-
|
||||||
2-1],d[c-3+3-1]);break;case 188:this.$=new e.IfNode(d[c-3+2-1],d[c-3+3-1],{invert:true});break;case 189:this.$=d[c-5+1-1].addElse((new e.IfNode(d[c-5+4-1],d[c-5+5-1])).forceStatement());break;case 190:this.$=d[c-3+1-1].addElse(d[c-3+3-1]);break;case 191:this.$=d[c-1+1-1];break;case 192:this.$=new e.IfNode(d[c-3+3-1],e.Expressions.wrap([d[c-3+1-1]]),{statement:true});break;case 193:this.$=new e.IfNode(d[c-3+3-1],e.Expressions.wrap([d[c-3+1-1]]),{statement:true});break;case 194:this.$=new e.IfNode(d[c-
|
3+2-1],d[c-3+3-1],{invert:true});break;case 189:this.$=d[c-5+1-1].addElse((new e.IfNode(d[c-5+4-1],d[c-5+5-1])).forceStatement());break;case 190:this.$=d[c-3+1-1].addElse(d[c-3+3-1]);break;case 191:this.$=d[c-1+1-1];break;case 192:this.$=new e.IfNode(d[c-3+3-1],e.Expressions.wrap([d[c-3+1-1]]),{statement:true});break;case 193:this.$=new e.IfNode(d[c-3+3-1],e.Expressions.wrap([d[c-3+1-1]]),{statement:true});break;case 194:this.$=new e.IfNode(d[c-3+3-1],e.Expressions.wrap([d[c-3+1-1]]),{statement:true,
|
||||||
3+3-1],e.Expressions.wrap([d[c-3+1-1]]),{statement:true,invert:true});break;case 195:this.$=new e.IfNode(d[c-3+3-1],e.Expressions.wrap([d[c-3+1-1]]),{statement:true,invert:true});break;case 196:this.$=new e.OpNode(d[c-2+1-1],d[c-2+2-1]);break;case 197:this.$=new e.OpNode("-",d[c-2+2-1]);break;case 198:this.$=new e.OpNode("+",d[c-2+2-1]);break;case 199:this.$=new e.OpNode("--",d[c-2+2-1]);break;case 200:this.$=new e.OpNode("++",d[c-2+2-1]);break;case 201:this.$=new e.OpNode("--",d[c-2+1-1],null,true);
|
invert:true});break;case 195:this.$=new e.IfNode(d[c-3+3-1],e.Expressions.wrap([d[c-3+1-1]]),{statement:true,invert:true});break;case 196:this.$=new e.OpNode(d[c-2+1-1],d[c-2+2-1]);break;case 197:this.$=new e.OpNode("-",d[c-2+2-1]);break;case 198:this.$=new e.OpNode("+",d[c-2+2-1]);break;case 199:this.$=new e.OpNode("--",d[c-2+2-1]);break;case 200:this.$=new e.OpNode("++",d[c-2+2-1]);break;case 201:this.$=new e.OpNode("--",d[c-2+1-1],null,true);break;case 202:this.$=new e.OpNode("++",d[c-2+1-1],null,
|
||||||
break;case 202:this.$=new e.OpNode("++",d[c-2+1-1],null,true);break;case 203:this.$=new e.OpNode("?",d[c-3+1-1],d[c-3+3-1]);break;case 204:this.$=new e.OpNode("+",d[c-3+1-1],d[c-3+3-1]);break;case 205:this.$=new e.OpNode("-",d[c-3+1-1],d[c-3+3-1]);break;case 206:this.$=new e.OpNode("==",d[c-3+1-1],d[c-3+3-1]);break;case 207:this.$=new e.OpNode("!=",d[c-3+1-1],d[c-3+3-1]);break;case 208:this.$=new e.OpNode(d[c-3+2-1],d[c-3+1-1],d[c-3+3-1]);break;case 209:this.$=new e.OpNode(d[c-3+2-1],d[c-3+1-1],d[c-
|
true);break;case 203:this.$=new e.OpNode("?",d[c-3+1-1],d[c-3+3-1]);break;case 204:this.$=new e.OpNode("+",d[c-3+1-1],d[c-3+3-1]);break;case 205:this.$=new e.OpNode("-",d[c-3+1-1],d[c-3+3-1]);break;case 206:this.$=new e.OpNode("==",d[c-3+1-1],d[c-3+3-1]);break;case 207:this.$=new e.OpNode("!=",d[c-3+1-1],d[c-3+3-1]);break;case 208:this.$=new e.OpNode(d[c-3+2-1],d[c-3+1-1],d[c-3+3-1]);break;case 209:this.$=new e.OpNode(d[c-3+2-1],d[c-3+1-1],d[c-3+3-1]);break;case 210:this.$=new e.OpNode(d[c-3+2-1],
|
||||||
3+3-1]);break;case 210:this.$=new e.OpNode(d[c-3+2-1],d[c-3+1-1],d[c-3+3-1]);break;case 211:this.$=new e.OpNode(d[c-3+2-1],d[c-3+1-1],d[c-3+3-1]);break;case 212:this.$=new e.OpNode(d[c-3+2-1],d[c-3+1-1],d[c-3+3-1]);break;case 213:this.$=new e.OpNode(d[c-5+2-1],d[c-5+1-1],d[c-5+4-1]);break;case 214:this.$=new e.InNode(d[c-3+1-1],d[c-3+3-1]);break;case 215:this.$=new e.OpNode("in",d[c-3+1-1],d[c-3+3-1]);break;case 216:this.$=new e.OpNode("instanceof",d[c-3+1-1],d[c-3+3-1]);break;case 217:this.$=new e.OpNode(d[c-
|
d[c-3+1-1],d[c-3+3-1]);break;case 211:this.$=new e.OpNode(d[c-3+2-1],d[c-3+1-1],d[c-3+3-1]);break;case 212:this.$=new e.OpNode(d[c-3+2-1],d[c-3+1-1],d[c-3+3-1]);break;case 213:this.$=new e.OpNode(d[c-5+2-1],d[c-5+1-1],d[c-5+4-1]);break;case 214:this.$=new e.InNode(d[c-3+1-1],d[c-3+3-1]);break;case 215:this.$=new e.OpNode("in",d[c-3+1-1],d[c-3+3-1]);break;case 216:this.$=new e.OpNode("instanceof",d[c-3+1-1],d[c-3+3-1]);break;case 217:this.$=new e.OpNode(d[c-4+2-1],new e.InNode(d[c-4+1-1],d[c-4+4-1]));
|
||||||
4+2-1],new e.InNode(d[c-4+1-1],d[c-4+4-1]));break;case 218:this.$=new e.OpNode(d[c-4+2-1],new e.ParentheticalNode(new e.OpNode("in",d[c-4+1-1],d[c-4+4-1])));break;case 219:this.$=new e.OpNode(d[c-4+2-1],new e.ParentheticalNode(new e.OpNode("instanceof",d[c-4+1-1],d[c-4+4-1])));break}},table:[{"1":[2,1],"3":1,"4":[1,2],"5":3,"6":4,"7":5,"8":7,"9":8,"10":23,"11":24,"12":[1,25],"13":[1,26],"14":[1,27],"15":9,"16":10,"17":11,"18":12,"19":13,"20":14,"21":15,"22":16,"23":17,"24":18,"25":19,"26":20,"27":21,
|
break;case 218:this.$=new e.OpNode(d[c-4+2-1],new e.ParentheticalNode(new e.OpNode("in",d[c-4+1-1],d[c-4+4-1])));break;case 219:this.$=new e.OpNode(d[c-4+2-1],new e.ParentheticalNode(new e.OpNode("instanceof",d[c-4+1-1],d[c-4+4-1])));break}},table:[{"1":[2,1],"3":1,"4":[1,2],"5":3,"6":4,"7":5,"8":7,"9":8,"10":23,"11":24,"12":[1,25],"13":[1,26],"14":[1,27],"15":9,"16":10,"17":11,"18":12,"19":13,"20":14,"21":15,"22":16,"23":17,"24":18,"25":19,"26":20,"27":21,"28":22,"29":[1,6],"31":79,"32":[1,84],"33":56,
|
||||||
"28":22,"29":[1,6],"31":79,"32":[1,84],"33":56,"34":[1,82],"35":[1,83],"36":29,"37":[1,57],"38":[1,58],"39":[1,59],"40":[1,60],"41":[1,61],"42":[1,62],"43":[1,63],"44":[1,64],"45":28,"49":[1,52],"50":[1,51],"52":[1,36],"55":37,"56":[1,70],"57":[1,71],"62":[1,68],"65":49,"67":34,"68":80,"69":54,"70":55,"71":30,"72":31,"73":32,"74":[1,33],"85":[1,81],"88":[1,50],"92":[1,35],"95":[1,69],"100":[1,67],"102":[1,66],"106":[1,44],"110":[1,53],"111":[1,65],"113":45,"114":[1,74],"116":[1,75],"117":46,"118":[1,
|
"34":[1,82],"35":[1,83],"36":29,"37":[1,57],"38":[1,58],"39":[1,59],"40":[1,60],"41":[1,61],"42":[1,62],"43":[1,63],"44":[1,64],"45":28,"49":[1,52],"50":[1,51],"52":[1,36],"55":37,"56":[1,70],"57":[1,71],"62":[1,68],"65":49,"67":34,"68":80,"69":54,"70":55,"71":30,"72":31,"73":32,"74":[1,33],"85":[1,81],"88":[1,50],"92":[1,35],"95":[1,69],"100":[1,67],"102":[1,66],"106":[1,44],"110":[1,53],"111":[1,65],"113":45,"114":[1,74],"116":[1,75],"117":46,"118":[1,76],"119":47,"120":[1,77],"121":78,"129":[1,
|
||||||
76],"119":47,"120":[1,77],"121":78,"129":[1,48],"134":43,"135":[1,72],"136":[1,73],"139":[1,38],"140":[1,39],"141":[1,40],"142":[1,41],"143":[1,42]},{"1":[3]},{"1":[2,2],"28":85,"50":[1,51]},{"1":[2,3],"4":[1,86]},{"4":[1,87]},{"1":[2,5],"4":[2,5],"30":[2,5]},{"5":88,"7":5,"8":7,"9":8,"10":23,"11":24,"12":[1,25],"13":[1,26],"14":[1,27],"15":9,"16":10,"17":11,"18":12,"19":13,"20":14,"21":15,"22":16,"23":17,"24":18,"25":19,"26":20,"27":21,"28":22,"30":[1,89],"31":79,"32":[1,84],"33":56,"34":[1,82],
|
48],"134":43,"135":[1,72],"136":[1,73],"139":[1,38],"140":[1,39],"141":[1,40],"142":[1,41],"143":[1,42]},{"1":[3]},{"1":[2,2],"28":85,"50":[1,51]},{"1":[2,3],"4":[1,86]},{"4":[1,87]},{"1":[2,5],"4":[2,5],"30":[2,5]},{"5":88,"7":5,"8":7,"9":8,"10":23,"11":24,"12":[1,25],"13":[1,26],"14":[1,27],"15":9,"16":10,"17":11,"18":12,"19":13,"20":14,"21":15,"22":16,"23":17,"24":18,"25":19,"26":20,"27":21,"28":22,"30":[1,89],"31":79,"32":[1,84],"33":56,"34":[1,82],"35":[1,83],"36":29,"37":[1,57],"38":[1,58],
|
||||||
"35":[1,83],"36":29,"37":[1,57],"38":[1,58],"39":[1,59],"40":[1,60],"41":[1,61],"42":[1,62],"43":[1,63],"44":[1,64],"45":28,"49":[1,52],"50":[1,51],"52":[1,36],"55":37,"56":[1,70],"57":[1,71],"62":[1,68],"65":49,"67":34,"68":80,"69":54,"70":55,"71":30,"72":31,"73":32,"74":[1,33],"85":[1,81],"88":[1,50],"92":[1,35],"95":[1,69],"100":[1,67],"102":[1,66],"106":[1,44],"110":[1,53],"111":[1,65],"113":45,"114":[1,74],"116":[1,75],"117":46,"118":[1,76],"119":47,"120":[1,77],"121":78,"129":[1,48],"134":43,
|
"39":[1,59],"40":[1,60],"41":[1,61],"42":[1,62],"43":[1,63],"44":[1,64],"45":28,"49":[1,52],"50":[1,51],"52":[1,36],"55":37,"56":[1,70],"57":[1,71],"62":[1,68],"65":49,"67":34,"68":80,"69":54,"70":55,"71":30,"72":31,"73":32,"74":[1,33],"85":[1,81],"88":[1,50],"92":[1,35],"95":[1,69],"100":[1,67],"102":[1,66],"106":[1,44],"110":[1,53],"111":[1,65],"113":45,"114":[1,74],"116":[1,75],"117":46,"118":[1,76],"119":47,"120":[1,77],"121":78,"129":[1,48],"134":43,"135":[1,72],"136":[1,73],"139":[1,38],"140":[1,
|
||||||
"135":[1,72],"136":[1,73],"139":[1,38],"140":[1,39],"141":[1,40],"142":[1,41],"143":[1,42]},{"1":[2,8],"4":[2,8],"30":[2,8],"51":[1,92],"112":[2,8],"113":107,"114":[1,74],"116":[1,75],"119":108,"120":[1,77],"121":78,"126":[1,101],"127":[1,102],"137":[1,105],"138":[1,106],"139":[1,104],"140":[1,94],"141":[1,93],"142":[1,90],"143":[1,91],"144":[1,95],"145":[1,96],"146":[1,97],"147":[1,98],"148":[1,99],"149":[1,100],"151":[1,103]},{"1":[2,9],"4":[2,9],"30":[2,9],"112":[2,9],"113":111,"114":[1,74],"116":[1,
|
39],"141":[1,40],"142":[1,41],"143":[1,42]},{"1":[2,8],"4":[2,8],"30":[2,8],"51":[1,92],"112":[2,8],"113":107,"114":[1,74],"116":[1,75],"119":108,"120":[1,77],"121":78,"126":[1,101],"127":[1,102],"137":[1,105],"138":[1,106],"139":[1,104],"140":[1,94],"141":[1,93],"142":[1,90],"143":[1,91],"144":[1,95],"145":[1,96],"146":[1,97],"147":[1,98],"148":[1,99],"149":[1,100],"151":[1,103]},{"1":[2,9],"4":[2,9],"30":[2,9],"112":[2,9],"113":111,"114":[1,74],"116":[1,75],"119":112,"120":[1,77],"121":78,"137":[1,
|
||||||
75],"119":112,"120":[1,77],"121":78,"137":[1,109],"138":[1,110]},{"1":[2,15],"4":[2,15],"29":[2,15],"30":[2,15],"51":[2,15],"59":[2,15],"63":[2,15],"66":115,"75":[1,117],"76":[1,118],"77":[1,119],"78":[1,120],"79":121,"80":122,"81":[1,123],"82":[2,15],"83":[1,124],"84":[1,125],"87":[2,15],"93":114,"96":[1,116],"97":[2,119],"98":[2,15],"103":[2,15],"112":[2,15],"114":[2,15],"115":[2,15],"116":[2,15],"120":[2,15],"126":[2,15],"127":[2,15],"128":[2,15],"137":[2,15],"138":[2,15],"139":[2,15],"140":[2,
|
109],"138":[1,110]},{"1":[2,15],"4":[2,15],"29":[2,15],"30":[2,15],"51":[2,15],"59":[2,15],"63":[2,15],"66":115,"75":[1,117],"76":[1,118],"77":[1,119],"78":[1,120],"79":121,"80":122,"81":[1,123],"82":[2,15],"83":[1,124],"84":[1,125],"87":[2,15],"93":114,"96":[1,116],"97":[2,119],"98":[2,15],"103":[2,15],"112":[2,15],"114":[2,15],"115":[2,15],"116":[2,15],"120":[2,15],"126":[2,15],"127":[2,15],"128":[2,15],"137":[2,15],"138":[2,15],"139":[2,15],"140":[2,15],"141":[2,15],"142":[2,15],"143":[2,15],"144":[2,
|
||||||
15],"141":[2,15],"142":[2,15],"143":[2,15],"144":[2,15],"145":[2,15],"146":[2,15],"147":[2,15],"148":[2,15],"149":[2,15],"150":[1,113],"151":[2,15]},{"1":[2,16],"4":[2,16],"29":[2,16],"30":[2,16],"51":[2,16],"59":[2,16],"63":[2,16],"82":[2,16],"87":[2,16],"98":[2,16],"103":[2,16],"112":[2,16],"114":[2,16],"115":[2,16],"116":[2,16],"120":[2,16],"126":[2,16],"127":[2,16],"128":[2,16],"137":[2,16],"138":[2,16],"139":[2,16],"140":[2,16],"141":[2,16],"142":[2,16],"143":[2,16],"144":[2,16],"145":[2,16],
|
15],"145":[2,15],"146":[2,15],"147":[2,15],"148":[2,15],"149":[2,15],"150":[1,113],"151":[2,15]},{"1":[2,16],"4":[2,16],"29":[2,16],"30":[2,16],"51":[2,16],"59":[2,16],"63":[2,16],"82":[2,16],"87":[2,16],"98":[2,16],"103":[2,16],"112":[2,16],"114":[2,16],"115":[2,16],"116":[2,16],"120":[2,16],"126":[2,16],"127":[2,16],"128":[2,16],"137":[2,16],"138":[2,16],"139":[2,16],"140":[2,16],"141":[2,16],"142":[2,16],"143":[2,16],"144":[2,16],"145":[2,16],"146":[2,16],"147":[2,16],"148":[2,16],"149":[2,16],
|
||||||
"146":[2,16],"147":[2,16],"148":[2,16],"149":[2,16],"151":[2,16]},{"1":[2,17],"4":[2,17],"29":[2,17],"30":[2,17],"51":[2,17],"59":[2,17],"63":[2,17],"82":[2,17],"87":[2,17],"98":[2,17],"103":[2,17],"112":[2,17],"114":[2,17],"115":[2,17],"116":[2,17],"120":[2,17],"126":[2,17],"127":[2,17],"128":[2,17],"137":[2,17],"138":[2,17],"139":[2,17],"140":[2,17],"141":[2,17],"142":[2,17],"143":[2,17],"144":[2,17],"145":[2,17],"146":[2,17],"147":[2,17],"148":[2,17],"149":[2,17],"151":[2,17]},{"1":[2,18],"4":[2,
|
"151":[2,16]},{"1":[2,17],"4":[2,17],"29":[2,17],"30":[2,17],"51":[2,17],"59":[2,17],"63":[2,17],"82":[2,17],"87":[2,17],"98":[2,17],"103":[2,17],"112":[2,17],"114":[2,17],"115":[2,17],"116":[2,17],"120":[2,17],"126":[2,17],"127":[2,17],"128":[2,17],"137":[2,17],"138":[2,17],"139":[2,17],"140":[2,17],"141":[2,17],"142":[2,17],"143":[2,17],"144":[2,17],"145":[2,17],"146":[2,17],"147":[2,17],"148":[2,17],"149":[2,17],"151":[2,17]},{"1":[2,18],"4":[2,18],"29":[2,18],"30":[2,18],"51":[2,18],"59":[2,18],
|
||||||
18],"29":[2,18],"30":[2,18],"51":[2,18],"59":[2,18],"63":[2,18],"82":[2,18],"87":[2,18],"98":[2,18],"103":[2,18],"112":[2,18],"114":[2,18],"115":[2,18],"116":[2,18],"120":[2,18],"126":[2,18],"127":[2,18],"128":[2,18],"137":[2,18],"138":[2,18],"139":[2,18],"140":[2,18],"141":[2,18],"142":[2,18],"143":[2,18],"144":[2,18],"145":[2,18],"146":[2,18],"147":[2,18],"148":[2,18],"149":[2,18],"151":[2,18]},{"1":[2,19],"4":[2,19],"29":[2,19],"30":[2,19],"51":[2,19],"59":[2,19],"63":[2,19],"82":[2,19],"87":[2,
|
"63":[2,18],"82":[2,18],"87":[2,18],"98":[2,18],"103":[2,18],"112":[2,18],"114":[2,18],"115":[2,18],"116":[2,18],"120":[2,18],"126":[2,18],"127":[2,18],"128":[2,18],"137":[2,18],"138":[2,18],"139":[2,18],"140":[2,18],"141":[2,18],"142":[2,18],"143":[2,18],"144":[2,18],"145":[2,18],"146":[2,18],"147":[2,18],"148":[2,18],"149":[2,18],"151":[2,18]},{"1":[2,19],"4":[2,19],"29":[2,19],"30":[2,19],"51":[2,19],"59":[2,19],"63":[2,19],"82":[2,19],"87":[2,19],"98":[2,19],"103":[2,19],"112":[2,19],"114":[2,
|
||||||
19],"98":[2,19],"103":[2,19],"112":[2,19],"114":[2,19],"115":[2,19],"116":[2,19],"120":[2,19],"126":[2,19],"127":[2,19],"128":[2,19],"137":[2,19],"138":[2,19],"139":[2,19],"140":[2,19],"141":[2,19],"142":[2,19],"143":[2,19],"144":[2,19],"145":[2,19],"146":[2,19],"147":[2,19],"148":[2,19],"149":[2,19],"151":[2,19]},{"1":[2,20],"4":[2,20],"29":[2,20],"30":[2,20],"51":[2,20],"59":[2,20],"63":[2,20],"82":[2,20],"87":[2,20],"98":[2,20],"103":[2,20],"112":[2,20],"114":[2,20],"115":[2,20],"116":[2,20],"120":[2,
|
19],"115":[2,19],"116":[2,19],"120":[2,19],"126":[2,19],"127":[2,19],"128":[2,19],"137":[2,19],"138":[2,19],"139":[2,19],"140":[2,19],"141":[2,19],"142":[2,19],"143":[2,19],"144":[2,19],"145":[2,19],"146":[2,19],"147":[2,19],"148":[2,19],"149":[2,19],"151":[2,19]},{"1":[2,20],"4":[2,20],"29":[2,20],"30":[2,20],"51":[2,20],"59":[2,20],"63":[2,20],"82":[2,20],"87":[2,20],"98":[2,20],"103":[2,20],"112":[2,20],"114":[2,20],"115":[2,20],"116":[2,20],"120":[2,20],"126":[2,20],"127":[2,20],"128":[2,20],
|
||||||
20],"126":[2,20],"127":[2,20],"128":[2,20],"137":[2,20],"138":[2,20],"139":[2,20],"140":[2,20],"141":[2,20],"142":[2,20],"143":[2,20],"144":[2,20],"145":[2,20],"146":[2,20],"147":[2,20],"148":[2,20],"149":[2,20],"151":[2,20]},{"1":[2,21],"4":[2,21],"29":[2,21],"30":[2,21],"51":[2,21],"59":[2,21],"63":[2,21],"82":[2,21],"87":[2,21],"98":[2,21],"103":[2,21],"112":[2,21],"114":[2,21],"115":[2,21],"116":[2,21],"120":[2,21],"126":[2,21],"127":[2,21],"128":[2,21],"137":[2,21],"138":[2,21],"139":[2,21],
|
"137":[2,20],"138":[2,20],"139":[2,20],"140":[2,20],"141":[2,20],"142":[2,20],"143":[2,20],"144":[2,20],"145":[2,20],"146":[2,20],"147":[2,20],"148":[2,20],"149":[2,20],"151":[2,20]},{"1":[2,21],"4":[2,21],"29":[2,21],"30":[2,21],"51":[2,21],"59":[2,21],"63":[2,21],"82":[2,21],"87":[2,21],"98":[2,21],"103":[2,21],"112":[2,21],"114":[2,21],"115":[2,21],"116":[2,21],"120":[2,21],"126":[2,21],"127":[2,21],"128":[2,21],"137":[2,21],"138":[2,21],"139":[2,21],"140":[2,21],"141":[2,21],"142":[2,21],"143":[2,
|
||||||
"140":[2,21],"141":[2,21],"142":[2,21],"143":[2,21],"144":[2,21],"145":[2,21],"146":[2,21],"147":[2,21],"148":[2,21],"149":[2,21],"151":[2,21]},{"1":[2,22],"4":[2,22],"29":[2,22],"30":[2,22],"51":[2,22],"59":[2,22],"63":[2,22],"82":[2,22],"87":[2,22],"98":[2,22],"103":[2,22],"112":[2,22],"114":[2,22],"115":[2,22],"116":[2,22],"120":[2,22],"126":[2,22],"127":[2,22],"128":[2,22],"137":[2,22],"138":[2,22],"139":[2,22],"140":[2,22],"141":[2,22],"142":[2,22],"143":[2,22],"144":[2,22],"145":[2,22],"146":[2,
|
21],"144":[2,21],"145":[2,21],"146":[2,21],"147":[2,21],"148":[2,21],"149":[2,21],"151":[2,21]},{"1":[2,22],"4":[2,22],"29":[2,22],"30":[2,22],"51":[2,22],"59":[2,22],"63":[2,22],"82":[2,22],"87":[2,22],"98":[2,22],"103":[2,22],"112":[2,22],"114":[2,22],"115":[2,22],"116":[2,22],"120":[2,22],"126":[2,22],"127":[2,22],"128":[2,22],"137":[2,22],"138":[2,22],"139":[2,22],"140":[2,22],"141":[2,22],"142":[2,22],"143":[2,22],"144":[2,22],"145":[2,22],"146":[2,22],"147":[2,22],"148":[2,22],"149":[2,22],
|
||||||
22],"147":[2,22],"148":[2,22],"149":[2,22],"151":[2,22]},{"1":[2,23],"4":[2,23],"29":[2,23],"30":[2,23],"51":[2,23],"59":[2,23],"63":[2,23],"82":[2,23],"87":[2,23],"98":[2,23],"103":[2,23],"112":[2,23],"114":[2,23],"115":[2,23],"116":[2,23],"120":[2,23],"126":[2,23],"127":[2,23],"128":[2,23],"137":[2,23],"138":[2,23],"139":[2,23],"140":[2,23],"141":[2,23],"142":[2,23],"143":[2,23],"144":[2,23],"145":[2,23],"146":[2,23],"147":[2,23],"148":[2,23],"149":[2,23],"151":[2,23]},{"1":[2,24],"4":[2,24],"29":[2,
|
"151":[2,22]},{"1":[2,23],"4":[2,23],"29":[2,23],"30":[2,23],"51":[2,23],"59":[2,23],"63":[2,23],"82":[2,23],"87":[2,23],"98":[2,23],"103":[2,23],"112":[2,23],"114":[2,23],"115":[2,23],"116":[2,23],"120":[2,23],"126":[2,23],"127":[2,23],"128":[2,23],"137":[2,23],"138":[2,23],"139":[2,23],"140":[2,23],"141":[2,23],"142":[2,23],"143":[2,23],"144":[2,23],"145":[2,23],"146":[2,23],"147":[2,23],"148":[2,23],"149":[2,23],"151":[2,23]},{"1":[2,24],"4":[2,24],"29":[2,24],"30":[2,24],"51":[2,24],"59":[2,24],
|
||||||
24],"30":[2,24],"51":[2,24],"59":[2,24],"63":[2,24],"82":[2,24],"87":[2,24],"98":[2,24],"103":[2,24],"112":[2,24],"114":[2,24],"115":[2,24],"116":[2,24],"120":[2,24],"126":[2,24],"127":[2,24],"128":[2,24],"137":[2,24],"138":[2,24],"139":[2,24],"140":[2,24],"141":[2,24],"142":[2,24],"143":[2,24],"144":[2,24],"145":[2,24],"146":[2,24],"147":[2,24],"148":[2,24],"149":[2,24],"151":[2,24]},{"1":[2,25],"4":[2,25],"29":[2,25],"30":[2,25],"51":[2,25],"59":[2,25],"63":[2,25],"82":[2,25],"87":[2,25],"98":[2,
|
"63":[2,24],"82":[2,24],"87":[2,24],"98":[2,24],"103":[2,24],"112":[2,24],"114":[2,24],"115":[2,24],"116":[2,24],"120":[2,24],"126":[2,24],"127":[2,24],"128":[2,24],"137":[2,24],"138":[2,24],"139":[2,24],"140":[2,24],"141":[2,24],"142":[2,24],"143":[2,24],"144":[2,24],"145":[2,24],"146":[2,24],"147":[2,24],"148":[2,24],"149":[2,24],"151":[2,24]},{"1":[2,25],"4":[2,25],"29":[2,25],"30":[2,25],"51":[2,25],"59":[2,25],"63":[2,25],"82":[2,25],"87":[2,25],"98":[2,25],"103":[2,25],"112":[2,25],"114":[2,
|
||||||
25],"103":[2,25],"112":[2,25],"114":[2,25],"115":[2,25],"116":[2,25],"120":[2,25],"126":[2,25],"127":[2,25],"128":[2,25],"137":[2,25],"138":[2,25],"139":[2,25],"140":[2,25],"141":[2,25],"142":[2,25],"143":[2,25],"144":[2,25],"145":[2,25],"146":[2,25],"147":[2,25],"148":[2,25],"149":[2,25],"151":[2,25]},{"1":[2,26],"4":[2,26],"29":[2,26],"30":[2,26],"51":[2,26],"59":[2,26],"63":[2,26],"82":[2,26],"87":[2,26],"98":[2,26],"103":[2,26],"112":[2,26],"114":[2,26],"115":[2,26],"116":[2,26],"120":[2,26],
|
25],"115":[2,25],"116":[2,25],"120":[2,25],"126":[2,25],"127":[2,25],"128":[2,25],"137":[2,25],"138":[2,25],"139":[2,25],"140":[2,25],"141":[2,25],"142":[2,25],"143":[2,25],"144":[2,25],"145":[2,25],"146":[2,25],"147":[2,25],"148":[2,25],"149":[2,25],"151":[2,25]},{"1":[2,26],"4":[2,26],"29":[2,26],"30":[2,26],"51":[2,26],"59":[2,26],"63":[2,26],"82":[2,26],"87":[2,26],"98":[2,26],"103":[2,26],"112":[2,26],"114":[2,26],"115":[2,26],"116":[2,26],"120":[2,26],"126":[2,26],"127":[2,26],"128":[2,26],
|
||||||
"126":[2,26],"127":[2,26],"128":[2,26],"137":[2,26],"138":[2,26],"139":[2,26],"140":[2,26],"141":[2,26],"142":[2,26],"143":[2,26],"144":[2,26],"145":[2,26],"146":[2,26],"147":[2,26],"148":[2,26],"149":[2,26],"151":[2,26]},{"1":[2,27],"4":[2,27],"29":[2,27],"30":[2,27],"51":[2,27],"59":[2,27],"63":[2,27],"82":[2,27],"87":[2,27],"98":[2,27],"103":[2,27],"112":[2,27],"114":[2,27],"115":[2,27],"116":[2,27],"120":[2,27],"126":[2,27],"127":[2,27],"128":[2,27],"137":[2,27],"138":[2,27],"139":[2,27],"140":[2,
|
"137":[2,26],"138":[2,26],"139":[2,26],"140":[2,26],"141":[2,26],"142":[2,26],"143":[2,26],"144":[2,26],"145":[2,26],"146":[2,26],"147":[2,26],"148":[2,26],"149":[2,26],"151":[2,26]},{"1":[2,27],"4":[2,27],"29":[2,27],"30":[2,27],"51":[2,27],"59":[2,27],"63":[2,27],"82":[2,27],"87":[2,27],"98":[2,27],"103":[2,27],"112":[2,27],"114":[2,27],"115":[2,27],"116":[2,27],"120":[2,27],"126":[2,27],"127":[2,27],"128":[2,27],"137":[2,27],"138":[2,27],"139":[2,27],"140":[2,27],"141":[2,27],"142":[2,27],"143":[2,
|
||||||
27],"141":[2,27],"142":[2,27],"143":[2,27],"144":[2,27],"145":[2,27],"146":[2,27],"147":[2,27],"148":[2,27],"149":[2,27],"151":[2,27]},{"1":[2,28],"4":[2,28],"29":[2,28],"30":[2,28],"51":[2,28],"59":[2,28],"63":[2,28],"82":[2,28],"87":[2,28],"98":[2,28],"103":[2,28],"112":[2,28],"114":[2,28],"115":[2,28],"116":[2,28],"120":[2,28],"126":[2,28],"127":[2,28],"128":[2,28],"137":[2,28],"138":[2,28],"139":[2,28],"140":[2,28],"141":[2,28],"142":[2,28],"143":[2,28],"144":[2,28],"145":[2,28],"146":[2,28],
|
27],"144":[2,27],"145":[2,27],"146":[2,27],"147":[2,27],"148":[2,27],"149":[2,27],"151":[2,27]},{"1":[2,28],"4":[2,28],"29":[2,28],"30":[2,28],"51":[2,28],"59":[2,28],"63":[2,28],"82":[2,28],"87":[2,28],"98":[2,28],"103":[2,28],"112":[2,28],"114":[2,28],"115":[2,28],"116":[2,28],"120":[2,28],"126":[2,28],"127":[2,28],"128":[2,28],"137":[2,28],"138":[2,28],"139":[2,28],"140":[2,28],"141":[2,28],"142":[2,28],"143":[2,28],"144":[2,28],"145":[2,28],"146":[2,28],"147":[2,28],"148":[2,28],"149":[2,28],
|
||||||
"147":[2,28],"148":[2,28],"149":[2,28],"151":[2,28]},{"1":[2,10],"4":[2,10],"30":[2,10],"112":[2,10],"114":[2,10],"116":[2,10],"120":[2,10],"137":[2,10],"138":[2,10]},{"1":[2,11],"4":[2,11],"30":[2,11],"112":[2,11],"114":[2,11],"116":[2,11],"120":[2,11],"137":[2,11],"138":[2,11]},{"1":[2,12],"4":[2,12],"30":[2,12],"112":[2,12],"114":[2,12],"116":[2,12],"120":[2,12],"137":[2,12],"138":[2,12]},{"1":[2,13],"4":[2,13],"30":[2,13],"112":[2,13],"114":[2,13],"116":[2,13],"120":[2,13],"137":[2,13],"138":[2,
|
"151":[2,28]},{"1":[2,10],"4":[2,10],"30":[2,10],"112":[2,10],"114":[2,10],"116":[2,10],"120":[2,10],"137":[2,10],"138":[2,10]},{"1":[2,11],"4":[2,11],"30":[2,11],"112":[2,11],"114":[2,11],"116":[2,11],"120":[2,11],"137":[2,11],"138":[2,11]},{"1":[2,12],"4":[2,12],"30":[2,12],"112":[2,12],"114":[2,12],"116":[2,12],"120":[2,12],"137":[2,12],"138":[2,12]},{"1":[2,13],"4":[2,13],"30":[2,13],"112":[2,13],"114":[2,13],"116":[2,13],"120":[2,13],"137":[2,13],"138":[2,13]},{"1":[2,14],"4":[2,14],"30":[2,
|
||||||
13]},{"1":[2,14],"4":[2,14],"30":[2,14],"112":[2,14],"114":[2,14],"116":[2,14],"120":[2,14],"137":[2,14],"138":[2,14]},{"1":[2,78],"4":[2,78],"29":[2,78],"30":[2,78],"46":[1,126],"51":[2,78],"59":[2,78],"63":[2,78],"75":[2,78],"76":[2,78],"77":[2,78],"78":[2,78],"81":[2,78],"82":[2,78],"83":[2,78],"84":[2,78],"87":[2,78],"96":[2,78],"97":[2,78],"98":[2,78],"103":[2,78],"112":[2,78],"114":[2,78],"115":[2,78],"116":[2,78],"120":[2,78],"126":[2,78],"127":[2,78],"128":[2,78],"137":[2,78],"138":[2,78],
|
14],"112":[2,14],"114":[2,14],"116":[2,14],"120":[2,14],"137":[2,14],"138":[2,14]},{"1":[2,78],"4":[2,78],"29":[2,78],"30":[2,78],"46":[1,126],"51":[2,78],"59":[2,78],"63":[2,78],"75":[2,78],"76":[2,78],"77":[2,78],"78":[2,78],"81":[2,78],"82":[2,78],"83":[2,78],"84":[2,78],"87":[2,78],"96":[2,78],"97":[2,78],"98":[2,78],"103":[2,78],"112":[2,78],"114":[2,78],"115":[2,78],"116":[2,78],"120":[2,78],"126":[2,78],"127":[2,78],"128":[2,78],"137":[2,78],"138":[2,78],"139":[2,78],"140":[2,78],"141":[2,
|
||||||
"139":[2,78],"140":[2,78],"141":[2,78],"142":[2,78],"143":[2,78],"144":[2,78],"145":[2,78],"146":[2,78],"147":[2,78],"148":[2,78],"149":[2,78],"150":[2,78],"151":[2,78]},{"1":[2,79],"4":[2,79],"29":[2,79],"30":[2,79],"51":[2,79],"59":[2,79],"63":[2,79],"75":[2,79],"76":[2,79],"77":[2,79],"78":[2,79],"81":[2,79],"82":[2,79],"83":[2,79],"84":[2,79],"87":[2,79],"96":[2,79],"97":[2,79],"98":[2,79],"103":[2,79],"112":[2,79],"114":[2,79],"115":[2,79],"116":[2,79],"120":[2,79],"126":[2,79],"127":[2,79],
|
78],"142":[2,78],"143":[2,78],"144":[2,78],"145":[2,78],"146":[2,78],"147":[2,78],"148":[2,78],"149":[2,78],"150":[2,78],"151":[2,78]},{"1":[2,79],"4":[2,79],"29":[2,79],"30":[2,79],"51":[2,79],"59":[2,79],"63":[2,79],"75":[2,79],"76":[2,79],"77":[2,79],"78":[2,79],"81":[2,79],"82":[2,79],"83":[2,79],"84":[2,79],"87":[2,79],"96":[2,79],"97":[2,79],"98":[2,79],"103":[2,79],"112":[2,79],"114":[2,79],"115":[2,79],"116":[2,79],"120":[2,79],"126":[2,79],"127":[2,79],"128":[2,79],"137":[2,79],"138":[2,
|
||||||
"128":[2,79],"137":[2,79],"138":[2,79],"139":[2,79],"140":[2,79],"141":[2,79],"142":[2,79],"143":[2,79],"144":[2,79],"145":[2,79],"146":[2,79],"147":[2,79],"148":[2,79],"149":[2,79],"150":[2,79],"151":[2,79]},{"1":[2,80],"4":[2,80],"29":[2,80],"30":[2,80],"51":[2,80],"59":[2,80],"63":[2,80],"75":[2,80],"76":[2,80],"77":[2,80],"78":[2,80],"81":[2,80],"82":[2,80],"83":[2,80],"84":[2,80],"87":[2,80],"96":[2,80],"97":[2,80],"98":[2,80],"103":[2,80],"112":[2,80],"114":[2,80],"115":[2,80],"116":[2,80],
|
79],"139":[2,79],"140":[2,79],"141":[2,79],"142":[2,79],"143":[2,79],"144":[2,79],"145":[2,79],"146":[2,79],"147":[2,79],"148":[2,79],"149":[2,79],"150":[2,79],"151":[2,79]},{"1":[2,80],"4":[2,80],"29":[2,80],"30":[2,80],"51":[2,80],"59":[2,80],"63":[2,80],"75":[2,80],"76":[2,80],"77":[2,80],"78":[2,80],"81":[2,80],"82":[2,80],"83":[2,80],"84":[2,80],"87":[2,80],"96":[2,80],"97":[2,80],"98":[2,80],"103":[2,80],"112":[2,80],"114":[2,80],"115":[2,80],"116":[2,80],"120":[2,80],"126":[2,80],"127":[2,
|
||||||
"120":[2,80],"126":[2,80],"127":[2,80],"128":[2,80],"137":[2,80],"138":[2,80],"139":[2,80],"140":[2,80],"141":[2,80],"142":[2,80],"143":[2,80],"144":[2,80],"145":[2,80],"146":[2,80],"147":[2,80],"148":[2,80],"149":[2,80],"150":[2,80],"151":[2,80]},{"1":[2,81],"4":[2,81],"29":[2,81],"30":[2,81],"51":[2,81],"59":[2,81],"63":[2,81],"75":[2,81],"76":[2,81],"77":[2,81],"78":[2,81],"81":[2,81],"82":[2,81],"83":[2,81],"84":[2,81],"87":[2,81],"96":[2,81],"97":[2,81],"98":[2,81],"103":[2,81],"112":[2,81],
|
80],"128":[2,80],"137":[2,80],"138":[2,80],"139":[2,80],"140":[2,80],"141":[2,80],"142":[2,80],"143":[2,80],"144":[2,80],"145":[2,80],"146":[2,80],"147":[2,80],"148":[2,80],"149":[2,80],"150":[2,80],"151":[2,80]},{"1":[2,81],"4":[2,81],"29":[2,81],"30":[2,81],"51":[2,81],"59":[2,81],"63":[2,81],"75":[2,81],"76":[2,81],"77":[2,81],"78":[2,81],"81":[2,81],"82":[2,81],"83":[2,81],"84":[2,81],"87":[2,81],"96":[2,81],"97":[2,81],"98":[2,81],"103":[2,81],"112":[2,81],"114":[2,81],"115":[2,81],"116":[2,
|
||||||
"114":[2,81],"115":[2,81],"116":[2,81],"120":[2,81],"126":[2,81],"127":[2,81],"128":[2,81],"137":[2,81],"138":[2,81],"139":[2,81],"140":[2,81],"141":[2,81],"142":[2,81],"143":[2,81],"144":[2,81],"145":[2,81],"146":[2,81],"147":[2,81],"148":[2,81],"149":[2,81],"150":[2,81],"151":[2,81]},{"1":[2,82],"4":[2,82],"29":[2,82],"30":[2,82],"51":[2,82],"59":[2,82],"63":[2,82],"75":[2,82],"76":[2,82],"77":[2,82],"78":[2,82],"81":[2,82],"82":[2,82],"83":[2,82],"84":[2,82],"87":[2,82],"96":[2,82],"97":[2,82],
|
81],"120":[2,81],"126":[2,81],"127":[2,81],"128":[2,81],"137":[2,81],"138":[2,81],"139":[2,81],"140":[2,81],"141":[2,81],"142":[2,81],"143":[2,81],"144":[2,81],"145":[2,81],"146":[2,81],"147":[2,81],"148":[2,81],"149":[2,81],"150":[2,81],"151":[2,81]},{"1":[2,82],"4":[2,82],"29":[2,82],"30":[2,82],"51":[2,82],"59":[2,82],"63":[2,82],"75":[2,82],"76":[2,82],"77":[2,82],"78":[2,82],"81":[2,82],"82":[2,82],"83":[2,82],"84":[2,82],"87":[2,82],"96":[2,82],"97":[2,82],"98":[2,82],"103":[2,82],"112":[2,
|
||||||
"98":[2,82],"103":[2,82],"112":[2,82],"114":[2,82],"115":[2,82],"116":[2,82],"120":[2,82],"126":[2,82],"127":[2,82],"128":[2,82],"137":[2,82],"138":[2,82],"139":[2,82],"140":[2,82],"141":[2,82],"142":[2,82],"143":[2,82],"144":[2,82],"145":[2,82],"146":[2,82],"147":[2,82],"148":[2,82],"149":[2,82],"150":[2,82],"151":[2,82]},{"1":[2,83],"4":[2,83],"29":[2,83],"30":[2,83],"51":[2,83],"59":[2,83],"63":[2,83],"75":[2,83],"76":[2,83],"77":[2,83],"78":[2,83],"81":[2,83],"82":[2,83],"83":[2,83],"84":[2,83],
|
82],"114":[2,82],"115":[2,82],"116":[2,82],"120":[2,82],"126":[2,82],"127":[2,82],"128":[2,82],"137":[2,82],"138":[2,82],"139":[2,82],"140":[2,82],"141":[2,82],"142":[2,82],"143":[2,82],"144":[2,82],"145":[2,82],"146":[2,82],"147":[2,82],"148":[2,82],"149":[2,82],"150":[2,82],"151":[2,82]},{"1":[2,83],"4":[2,83],"29":[2,83],"30":[2,83],"51":[2,83],"59":[2,83],"63":[2,83],"75":[2,83],"76":[2,83],"77":[2,83],"78":[2,83],"81":[2,83],"82":[2,83],"83":[2,83],"84":[2,83],"87":[2,83],"96":[2,83],"97":[2,
|
||||||
"87":[2,83],"96":[2,83],"97":[2,83],"98":[2,83],"103":[2,83],"112":[2,83],"114":[2,83],"115":[2,83],"116":[2,83],"120":[2,83],"126":[2,83],"127":[2,83],"128":[2,83],"137":[2,83],"138":[2,83],"139":[2,83],"140":[2,83],"141":[2,83],"142":[2,83],"143":[2,83],"144":[2,83],"145":[2,83],"146":[2,83],"147":[2,83],"148":[2,83],"149":[2,83],"150":[2,83],"151":[2,83]},{"1":[2,111],"4":[2,111],"29":[2,111],"30":[2,111],"51":[2,111],"59":[2,111],"63":[2,111],"66":128,"75":[1,117],"76":[1,118],"77":[1,119],"78":[1,
|
83],"98":[2,83],"103":[2,83],"112":[2,83],"114":[2,83],"115":[2,83],"116":[2,83],"120":[2,83],"126":[2,83],"127":[2,83],"128":[2,83],"137":[2,83],"138":[2,83],"139":[2,83],"140":[2,83],"141":[2,83],"142":[2,83],"143":[2,83],"144":[2,83],"145":[2,83],"146":[2,83],"147":[2,83],"148":[2,83],"149":[2,83],"150":[2,83],"151":[2,83]},{"1":[2,111],"4":[2,111],"29":[2,111],"30":[2,111],"51":[2,111],"59":[2,111],"63":[2,111],"66":128,"75":[1,117],"76":[1,118],"77":[1,119],"78":[1,120],"79":121,"80":122,"81":[1,
|
||||||
120],"79":121,"80":122,"81":[1,123],"82":[2,111],"83":[1,124],"84":[1,125],"87":[2,111],"93":127,"96":[1,116],"97":[2,119],"98":[2,111],"103":[2,111],"112":[2,111],"114":[2,111],"115":[2,111],"116":[2,111],"120":[2,111],"126":[2,111],"127":[2,111],"128":[2,111],"137":[2,111],"138":[2,111],"139":[2,111],"140":[2,111],"141":[2,111],"142":[2,111],"143":[2,111],"144":[2,111],"145":[2,111],"146":[2,111],"147":[2,111],"148":[2,111],"149":[2,111],"151":[2,111]},{"15":130,"31":79,"32":[1,84],"33":56,"34":[1,
|
123],"82":[2,111],"83":[1,124],"84":[1,125],"87":[2,111],"93":127,"96":[1,116],"97":[2,119],"98":[2,111],"103":[2,111],"112":[2,111],"114":[2,111],"115":[2,111],"116":[2,111],"120":[2,111],"126":[2,111],"127":[2,111],"128":[2,111],"137":[2,111],"138":[2,111],"139":[2,111],"140":[2,111],"141":[2,111],"142":[2,111],"143":[2,111],"144":[2,111],"145":[2,111],"146":[2,111],"147":[2,111],"148":[2,111],"149":[2,111],"151":[2,111]},{"15":130,"31":79,"32":[1,84],"33":56,"34":[1,82],"35":[1,83],"36":29,"37":[1,
|
||||||
82],"35":[1,83],"36":29,"37":[1,57],"38":[1,58],"39":[1,59],"40":[1,60],"41":[1,61],"42":[1,62],"43":[1,63],"44":[1,64],"45":131,"62":[1,68],"65":132,"67":129,"68":80,"69":54,"70":55,"71":30,"72":31,"73":32,"74":[1,33],"85":[1,81],"95":[1,69],"100":[1,67],"102":[1,66],"111":[1,65]},{"53":133,"54":[2,63],"59":[2,63],"60":134,"61":[1,135],"62":[1,136]},{"4":[1,138],"6":137,"29":[1,6]},{"8":139,"9":140,"10":23,"11":24,"12":[1,25],"13":[1,26],"14":[1,27],"15":9,"16":10,"17":11,"18":12,"19":13,"20":14,
|
57],"38":[1,58],"39":[1,59],"40":[1,60],"41":[1,61],"42":[1,62],"43":[1,63],"44":[1,64],"45":131,"62":[1,68],"65":132,"67":129,"68":80,"69":54,"70":55,"71":30,"72":31,"73":32,"74":[1,33],"85":[1,81],"95":[1,69],"100":[1,67],"102":[1,66],"111":[1,65]},{"53":133,"54":[2,63],"59":[2,63],"60":134,"61":[1,135],"62":[1,136]},{"4":[1,138],"6":137,"29":[1,6]},{"8":139,"9":140,"10":23,"11":24,"12":[1,25],"13":[1,26],"14":[1,27],"15":9,"16":10,"17":11,"18":12,"19":13,"20":14,"21":15,"22":16,"23":17,"24":18,
|
||||||
"21":15,"22":16,"23":17,"24":18,"25":19,"26":20,"27":21,"28":22,"31":79,"32":[1,84],"33":56,"34":[1,82],"35":[1,83],"36":29,"37":[1,57],"38":[1,58],"39":[1,59],"40":[1,60],"41":[1,61],"42":[1,62],"43":[1,63],"44":[1,64],"45":28,"49":[1,52],"50":[1,51],"52":[1,36],"55":37,"56":[1,70],"57":[1,71],"62":[1,68],"65":49,"67":34,"68":80,"69":54,"70":55,"71":30,"72":31,"73":32,"74":[1,33],"85":[1,81],"88":[1,50],"92":[1,35],"95":[1,69],"100":[1,67],"102":[1,66],"106":[1,44],"110":[1,53],"111":[1,65],"113":45,
|
"25":19,"26":20,"27":21,"28":22,"31":79,"32":[1,84],"33":56,"34":[1,82],"35":[1,83],"36":29,"37":[1,57],"38":[1,58],"39":[1,59],"40":[1,60],"41":[1,61],"42":[1,62],"43":[1,63],"44":[1,64],"45":28,"49":[1,52],"50":[1,51],"52":[1,36],"55":37,"56":[1,70],"57":[1,71],"62":[1,68],"65":49,"67":34,"68":80,"69":54,"70":55,"71":30,"72":31,"73":32,"74":[1,33],"85":[1,81],"88":[1,50],"92":[1,35],"95":[1,69],"100":[1,67],"102":[1,66],"106":[1,44],"110":[1,53],"111":[1,65],"113":45,"114":[1,74],"116":[1,75],"117":46,
|
||||||
"114":[1,74],"116":[1,75],"117":46,"118":[1,76],"119":47,"120":[1,77],"121":78,"129":[1,48],"134":43,"135":[1,72],"136":[1,73],"139":[1,38],"140":[1,39],"141":[1,40],"142":[1,41],"143":[1,42]},{"8":141,"9":140,"10":23,"11":24,"12":[1,25],"13":[1,26],"14":[1,27],"15":9,"16":10,"17":11,"18":12,"19":13,"20":14,"21":15,"22":16,"23":17,"24":18,"25":19,"26":20,"27":21,"28":22,"31":79,"32":[1,84],"33":56,"34":[1,82],"35":[1,83],"36":29,"37":[1,57],"38":[1,58],"39":[1,59],"40":[1,60],"41":[1,61],"42":[1,
|
"118":[1,76],"119":47,"120":[1,77],"121":78,"129":[1,48],"134":43,"135":[1,72],"136":[1,73],"139":[1,38],"140":[1,39],"141":[1,40],"142":[1,41],"143":[1,42]},{"8":141,"9":140,"10":23,"11":24,"12":[1,25],"13":[1,26],"14":[1,27],"15":9,"16":10,"17":11,"18":12,"19":13,"20":14,"21":15,"22":16,"23":17,"24":18,"25":19,"26":20,"27":21,"28":22,"31":79,"32":[1,84],"33":56,"34":[1,82],"35":[1,83],"36":29,"37":[1,57],"38":[1,58],"39":[1,59],"40":[1,60],"41":[1,61],"42":[1,62],"43":[1,63],"44":[1,64],"45":28,
|
||||||
62],"43":[1,63],"44":[1,64],"45":28,"49":[1,52],"50":[1,51],"52":[1,36],"55":37,"56":[1,70],"57":[1,71],"62":[1,68],"65":49,"67":34,"68":80,"69":54,"70":55,"71":30,"72":31,"73":32,"74":[1,33],"85":[1,81],"88":[1,50],"92":[1,35],"95":[1,69],"100":[1,67],"102":[1,66],"106":[1,44],"110":[1,53],"111":[1,65],"113":45,"114":[1,74],"116":[1,75],"117":46,"118":[1,76],"119":47,"120":[1,77],"121":78,"129":[1,48],"134":43,"135":[1,72],"136":[1,73],"139":[1,38],"140":[1,39],"141":[1,40],"142":[1,41],"143":[1,
|
"49":[1,52],"50":[1,51],"52":[1,36],"55":37,"56":[1,70],"57":[1,71],"62":[1,68],"65":49,"67":34,"68":80,"69":54,"70":55,"71":30,"72":31,"73":32,"74":[1,33],"85":[1,81],"88":[1,50],"92":[1,35],"95":[1,69],"100":[1,67],"102":[1,66],"106":[1,44],"110":[1,53],"111":[1,65],"113":45,"114":[1,74],"116":[1,75],"117":46,"118":[1,76],"119":47,"120":[1,77],"121":78,"129":[1,48],"134":43,"135":[1,72],"136":[1,73],"139":[1,38],"140":[1,39],"141":[1,40],"142":[1,41],"143":[1,42]},{"8":142,"9":140,"10":23,"11":24,
|
||||||
42]},{"8":142,"9":140,"10":23,"11":24,"12":[1,25],"13":[1,26],"14":[1,27],"15":9,"16":10,"17":11,"18":12,"19":13,"20":14,"21":15,"22":16,"23":17,"24":18,"25":19,"26":20,"27":21,"28":22,"31":79,"32":[1,84],"33":56,"34":[1,82],"35":[1,83],"36":29,"37":[1,57],"38":[1,58],"39":[1,59],"40":[1,60],"41":[1,61],"42":[1,62],"43":[1,63],"44":[1,64],"45":28,"49":[1,52],"50":[1,51],"52":[1,36],"55":37,"56":[1,70],"57":[1,71],"62":[1,68],"65":49,"67":34,"68":80,"69":54,"70":55,"71":30,"72":31,"73":32,"74":[1,
|
"12":[1,25],"13":[1,26],"14":[1,27],"15":9,"16":10,"17":11,"18":12,"19":13,"20":14,"21":15,"22":16,"23":17,"24":18,"25":19,"26":20,"27":21,"28":22,"31":79,"32":[1,84],"33":56,"34":[1,82],"35":[1,83],"36":29,"37":[1,57],"38":[1,58],"39":[1,59],"40":[1,60],"41":[1,61],"42":[1,62],"43":[1,63],"44":[1,64],"45":28,"49":[1,52],"50":[1,51],"52":[1,36],"55":37,"56":[1,70],"57":[1,71],"62":[1,68],"65":49,"67":34,"68":80,"69":54,"70":55,"71":30,"72":31,"73":32,"74":[1,33],"85":[1,81],"88":[1,50],"92":[1,35],
|
||||||
33],"85":[1,81],"88":[1,50],"92":[1,35],"95":[1,69],"100":[1,67],"102":[1,66],"106":[1,44],"110":[1,53],"111":[1,65],"113":45,"114":[1,74],"116":[1,75],"117":46,"118":[1,76],"119":47,"120":[1,77],"121":78,"129":[1,48],"134":43,"135":[1,72],"136":[1,73],"139":[1,38],"140":[1,39],"141":[1,40],"142":[1,41],"143":[1,42]},{"8":143,"9":140,"10":23,"11":24,"12":[1,25],"13":[1,26],"14":[1,27],"15":9,"16":10,"17":11,"18":12,"19":13,"20":14,"21":15,"22":16,"23":17,"24":18,"25":19,"26":20,"27":21,"28":22,"31":79,
|
"95":[1,69],"100":[1,67],"102":[1,66],"106":[1,44],"110":[1,53],"111":[1,65],"113":45,"114":[1,74],"116":[1,75],"117":46,"118":[1,76],"119":47,"120":[1,77],"121":78,"129":[1,48],"134":43,"135":[1,72],"136":[1,73],"139":[1,38],"140":[1,39],"141":[1,40],"142":[1,41],"143":[1,42]},{"8":143,"9":140,"10":23,"11":24,"12":[1,25],"13":[1,26],"14":[1,27],"15":9,"16":10,"17":11,"18":12,"19":13,"20":14,"21":15,"22":16,"23":17,"24":18,"25":19,"26":20,"27":21,"28":22,"31":79,"32":[1,84],"33":56,"34":[1,82],"35":[1,
|
||||||
"32":[1,84],"33":56,"34":[1,82],"35":[1,83],"36":29,"37":[1,57],"38":[1,58],"39":[1,59],"40":[1,60],"41":[1,61],"42":[1,62],"43":[1,63],"44":[1,64],"45":28,"49":[1,52],"50":[1,51],"52":[1,36],"55":37,"56":[1,70],"57":[1,71],"62":[1,68],"65":49,"67":34,"68":80,"69":54,"70":55,"71":30,"72":31,"73":32,"74":[1,33],"85":[1,81],"88":[1,50],"92":[1,35],"95":[1,69],"100":[1,67],"102":[1,66],"106":[1,44],"110":[1,53],"111":[1,65],"113":45,"114":[1,74],"116":[1,75],"117":46,"118":[1,76],"119":47,"120":[1,77],
|
83],"36":29,"37":[1,57],"38":[1,58],"39":[1,59],"40":[1,60],"41":[1,61],"42":[1,62],"43":[1,63],"44":[1,64],"45":28,"49":[1,52],"50":[1,51],"52":[1,36],"55":37,"56":[1,70],"57":[1,71],"62":[1,68],"65":49,"67":34,"68":80,"69":54,"70":55,"71":30,"72":31,"73":32,"74":[1,33],"85":[1,81],"88":[1,50],"92":[1,35],"95":[1,69],"100":[1,67],"102":[1,66],"106":[1,44],"110":[1,53],"111":[1,65],"113":45,"114":[1,74],"116":[1,75],"117":46,"118":[1,76],"119":47,"120":[1,77],"121":78,"129":[1,48],"134":43,"135":[1,
|
||||||
"121":78,"129":[1,48],"134":43,"135":[1,72],"136":[1,73],"139":[1,38],"140":[1,39],"141":[1,40],"142":[1,41],"143":[1,42]},{"8":144,"9":140,"10":23,"11":24,"12":[1,25],"13":[1,26],"14":[1,27],"15":9,"16":10,"17":11,"18":12,"19":13,"20":14,"21":15,"22":16,"23":17,"24":18,"25":19,"26":20,"27":21,"28":22,"31":79,"32":[1,84],"33":56,"34":[1,82],"35":[1,83],"36":29,"37":[1,57],"38":[1,58],"39":[1,59],"40":[1,60],"41":[1,61],"42":[1,62],"43":[1,63],"44":[1,64],"45":28,"49":[1,52],"50":[1,51],"52":[1,36],
|
72],"136":[1,73],"139":[1,38],"140":[1,39],"141":[1,40],"142":[1,41],"143":[1,42]},{"8":144,"9":140,"10":23,"11":24,"12":[1,25],"13":[1,26],"14":[1,27],"15":9,"16":10,"17":11,"18":12,"19":13,"20":14,"21":15,"22":16,"23":17,"24":18,"25":19,"26":20,"27":21,"28":22,"31":79,"32":[1,84],"33":56,"34":[1,82],"35":[1,83],"36":29,"37":[1,57],"38":[1,58],"39":[1,59],"40":[1,60],"41":[1,61],"42":[1,62],"43":[1,63],"44":[1,64],"45":28,"49":[1,52],"50":[1,51],"52":[1,36],"55":37,"56":[1,70],"57":[1,71],"62":[1,
|
||||||
"55":37,"56":[1,70],"57":[1,71],"62":[1,68],"65":49,"67":34,"68":80,"69":54,"70":55,"71":30,"72":31,"73":32,"74":[1,33],"85":[1,81],"88":[1,50],"92":[1,35],"95":[1,69],"100":[1,67],"102":[1,66],"106":[1,44],"110":[1,53],"111":[1,65],"113":45,"114":[1,74],"116":[1,75],"117":46,"118":[1,76],"119":47,"120":[1,77],"121":78,"129":[1,48],"134":43,"135":[1,72],"136":[1,73],"139":[1,38],"140":[1,39],"141":[1,40],"142":[1,41],"143":[1,42]},{"1":[2,191],"4":[2,191],"29":[2,191],"30":[2,191],"51":[2,191],"59":[2,
|
68],"65":49,"67":34,"68":80,"69":54,"70":55,"71":30,"72":31,"73":32,"74":[1,33],"85":[1,81],"88":[1,50],"92":[1,35],"95":[1,69],"100":[1,67],"102":[1,66],"106":[1,44],"110":[1,53],"111":[1,65],"113":45,"114":[1,74],"116":[1,75],"117":46,"118":[1,76],"119":47,"120":[1,77],"121":78,"129":[1,48],"134":43,"135":[1,72],"136":[1,73],"139":[1,38],"140":[1,39],"141":[1,40],"142":[1,41],"143":[1,42]},{"1":[2,191],"4":[2,191],"29":[2,191],"30":[2,191],"51":[2,191],"59":[2,191],"63":[2,191],"82":[2,191],"87":[2,
|
||||||
191],"63":[2,191],"82":[2,191],"87":[2,191],"98":[2,191],"103":[2,191],"112":[2,191],"114":[2,191],"115":[2,191],"116":[2,191],"120":[2,191],"126":[2,191],"127":[2,191],"128":[2,191],"131":[1,145],"137":[2,191],"138":[2,191],"139":[2,191],"140":[2,191],"141":[2,191],"142":[2,191],"143":[2,191],"144":[2,191],"145":[2,191],"146":[2,191],"147":[2,191],"148":[2,191],"149":[2,191],"151":[2,191]},{"4":[1,138],"6":146,"29":[1,6]},{"4":[1,138],"6":147,"29":[1,6]},{"1":[2,157],"4":[2,157],"29":[2,157],"30":[2,
|
191],"98":[2,191],"103":[2,191],"112":[2,191],"114":[2,191],"115":[2,191],"116":[2,191],"120":[2,191],"126":[2,191],"127":[2,191],"128":[2,191],"131":[1,145],"137":[2,191],"138":[2,191],"139":[2,191],"140":[2,191],"141":[2,191],"142":[2,191],"143":[2,191],"144":[2,191],"145":[2,191],"146":[2,191],"147":[2,191],"148":[2,191],"149":[2,191],"151":[2,191]},{"4":[1,138],"6":146,"29":[1,6]},{"4":[1,138],"6":147,"29":[1,6]},{"1":[2,157],"4":[2,157],"29":[2,157],"30":[2,157],"51":[2,157],"59":[2,157],"63":[2,
|
||||||
157],"51":[2,157],"59":[2,157],"63":[2,157],"82":[2,157],"87":[2,157],"98":[2,157],"103":[2,157],"112":[2,157],"114":[2,157],"115":[2,157],"116":[2,157],"120":[2,157],"126":[2,157],"127":[2,157],"128":[2,157],"137":[2,157],"138":[2,157],"139":[2,157],"140":[2,157],"141":[2,157],"142":[2,157],"143":[2,157],"144":[2,157],"145":[2,157],"146":[2,157],"147":[2,157],"148":[2,157],"149":[2,157],"151":[2,157]},{"4":[1,138],"6":148,"29":[1,6]},{"8":149,"9":140,"10":23,"11":24,"12":[1,25],"13":[1,26],"14":[1,
|
157],"82":[2,157],"87":[2,157],"98":[2,157],"103":[2,157],"112":[2,157],"114":[2,157],"115":[2,157],"116":[2,157],"120":[2,157],"126":[2,157],"127":[2,157],"128":[2,157],"137":[2,157],"138":[2,157],"139":[2,157],"140":[2,157],"141":[2,157],"142":[2,157],"143":[2,157],"144":[2,157],"145":[2,157],"146":[2,157],"147":[2,157],"148":[2,157],"149":[2,157],"151":[2,157]},{"4":[1,138],"6":148,"29":[1,6]},{"8":149,"9":140,"10":23,"11":24,"12":[1,25],"13":[1,26],"14":[1,27],"15":9,"16":10,"17":11,"18":12,"19":13,
|
||||||
27],"15":9,"16":10,"17":11,"18":12,"19":13,"20":14,"21":15,"22":16,"23":17,"24":18,"25":19,"26":20,"27":21,"28":22,"29":[1,150],"31":79,"32":[1,84],"33":56,"34":[1,82],"35":[1,83],"36":29,"37":[1,57],"38":[1,58],"39":[1,59],"40":[1,60],"41":[1,61],"42":[1,62],"43":[1,63],"44":[1,64],"45":28,"49":[1,52],"50":[1,51],"52":[1,36],"55":37,"56":[1,70],"57":[1,71],"62":[1,68],"65":49,"67":34,"68":80,"69":54,"70":55,"71":30,"72":31,"73":32,"74":[1,33],"85":[1,81],"88":[1,50],"92":[1,35],"95":[1,69],"100":[1,
|
"20":14,"21":15,"22":16,"23":17,"24":18,"25":19,"26":20,"27":21,"28":22,"29":[1,150],"31":79,"32":[1,84],"33":56,"34":[1,82],"35":[1,83],"36":29,"37":[1,57],"38":[1,58],"39":[1,59],"40":[1,60],"41":[1,61],"42":[1,62],"43":[1,63],"44":[1,64],"45":28,"49":[1,52],"50":[1,51],"52":[1,36],"55":37,"56":[1,70],"57":[1,71],"62":[1,68],"65":49,"67":34,"68":80,"69":54,"70":55,"71":30,"72":31,"73":32,"74":[1,33],"85":[1,81],"88":[1,50],"92":[1,35],"95":[1,69],"100":[1,67],"102":[1,66],"106":[1,44],"110":[1,
|
||||||
67],"102":[1,66],"106":[1,44],"110":[1,53],"111":[1,65],"113":45,"114":[1,74],"116":[1,75],"117":46,"118":[1,76],"119":47,"120":[1,77],"121":78,"129":[1,48],"134":43,"135":[1,72],"136":[1,73],"139":[1,38],"140":[1,39],"141":[1,40],"142":[1,41],"143":[1,42]},{"1":[2,75],"4":[2,75],"29":[2,75],"30":[2,75],"46":[2,75],"51":[2,75],"59":[2,75],"63":[2,75],"75":[2,75],"76":[2,75],"77":[2,75],"78":[2,75],"81":[2,75],"82":[2,75],"83":[2,75],"84":[2,75],"87":[2,75],"89":[1,151],"96":[2,75],"97":[2,75],"98":[2,
|
53],"111":[1,65],"113":45,"114":[1,74],"116":[1,75],"117":46,"118":[1,76],"119":47,"120":[1,77],"121":78,"129":[1,48],"134":43,"135":[1,72],"136":[1,73],"139":[1,38],"140":[1,39],"141":[1,40],"142":[1,41],"143":[1,42]},{"1":[2,75],"4":[2,75],"29":[2,75],"30":[2,75],"46":[2,75],"51":[2,75],"59":[2,75],"63":[2,75],"75":[2,75],"76":[2,75],"77":[2,75],"78":[2,75],"81":[2,75],"82":[2,75],"83":[2,75],"84":[2,75],"87":[2,75],"89":[1,151],"96":[2,75],"97":[2,75],"98":[2,75],"103":[2,75],"112":[2,75],"114":[2,
|
||||||
75],"103":[2,75],"112":[2,75],"114":[2,75],"115":[2,75],"116":[2,75],"120":[2,75],"126":[2,75],"127":[2,75],"128":[2,75],"137":[2,75],"138":[2,75],"139":[2,75],"140":[2,75],"141":[2,75],"142":[2,75],"143":[2,75],"144":[2,75],"145":[2,75],"146":[2,75],"147":[2,75],"148":[2,75],"149":[2,75],"150":[2,75],"151":[2,75]},{"15":154,"29":[1,153],"31":79,"32":[1,84],"33":56,"34":[1,82],"35":[1,83],"36":29,"37":[1,57],"38":[1,58],"39":[1,59],"40":[1,60],"41":[1,61],"42":[1,62],"43":[1,63],"44":[1,64],"45":131,
|
75],"115":[2,75],"116":[2,75],"120":[2,75],"126":[2,75],"127":[2,75],"128":[2,75],"137":[2,75],"138":[2,75],"139":[2,75],"140":[2,75],"141":[2,75],"142":[2,75],"143":[2,75],"144":[2,75],"145":[2,75],"146":[2,75],"147":[2,75],"148":[2,75],"149":[2,75],"150":[2,75],"151":[2,75]},{"15":154,"29":[1,153],"31":79,"32":[1,84],"33":56,"34":[1,82],"35":[1,83],"36":29,"37":[1,57],"38":[1,58],"39":[1,59],"40":[1,60],"41":[1,61],"42":[1,62],"43":[1,63],"44":[1,64],"45":131,"62":[1,68],"65":152,"67":155,"68":80,
|
||||||
"62":[1,68],"65":152,"67":155,"68":80,"69":54,"70":55,"71":30,"72":31,"73":32,"74":[1,33],"85":[1,81],"95":[1,69],"100":[1,67],"102":[1,66],"111":[1,65]},{"1":[2,55],"4":[2,55],"29":[2,55],"30":[2,55],"51":[2,55],"59":[2,55],"63":[2,55],"82":[2,55],"87":[2,55],"98":[2,55],"103":[2,55],"108":[2,55],"109":[2,55],"112":[2,55],"114":[2,55],"115":[2,55],"116":[2,55],"120":[2,55],"126":[2,55],"127":[2,55],"128":[2,55],"131":[2,55],"133":[2,55],"137":[2,55],"138":[2,55],"139":[2,55],"140":[2,55],"141":[2,
|
"69":54,"70":55,"71":30,"72":31,"73":32,"74":[1,33],"85":[1,81],"95":[1,69],"100":[1,67],"102":[1,66],"111":[1,65]},{"1":[2,55],"4":[2,55],"29":[2,55],"30":[2,55],"51":[2,55],"59":[2,55],"63":[2,55],"82":[2,55],"87":[2,55],"98":[2,55],"103":[2,55],"108":[2,55],"109":[2,55],"112":[2,55],"114":[2,55],"115":[2,55],"116":[2,55],"120":[2,55],"126":[2,55],"127":[2,55],"128":[2,55],"131":[2,55],"133":[2,55],"137":[2,55],"138":[2,55],"139":[2,55],"140":[2,55],"141":[2,55],"142":[2,55],"143":[2,55],"144":[2,
|
||||||
55],"142":[2,55],"143":[2,55],"144":[2,55],"145":[2,55],"146":[2,55],"147":[2,55],"148":[2,55],"149":[2,55],"151":[2,55]},{"1":[2,54],"4":[2,54],"8":156,"9":140,"10":23,"11":24,"12":[1,25],"13":[1,26],"14":[1,27],"15":9,"16":10,"17":11,"18":12,"19":13,"20":14,"21":15,"22":16,"23":17,"24":18,"25":19,"26":20,"27":21,"28":22,"30":[2,54],"31":79,"32":[1,84],"33":56,"34":[1,82],"35":[1,83],"36":29,"37":[1,57],"38":[1,58],"39":[1,59],"40":[1,60],"41":[1,61],"42":[1,62],"43":[1,63],"44":[1,64],"45":28,"49":[1,
|
55],"145":[2,55],"146":[2,55],"147":[2,55],"148":[2,55],"149":[2,55],"151":[2,55]},{"1":[2,54],"4":[2,54],"8":156,"9":140,"10":23,"11":24,"12":[1,25],"13":[1,26],"14":[1,27],"15":9,"16":10,"17":11,"18":12,"19":13,"20":14,"21":15,"22":16,"23":17,"24":18,"25":19,"26":20,"27":21,"28":22,"30":[2,54],"31":79,"32":[1,84],"33":56,"34":[1,82],"35":[1,83],"36":29,"37":[1,57],"38":[1,58],"39":[1,59],"40":[1,60],"41":[1,61],"42":[1,62],"43":[1,63],"44":[1,64],"45":28,"49":[1,52],"50":[1,51],"52":[1,36],"55":37,
|
||||||
52],"50":[1,51],"52":[1,36],"55":37,"56":[1,70],"57":[1,71],"62":[1,68],"65":49,"67":34,"68":80,"69":54,"70":55,"71":30,"72":31,"73":32,"74":[1,33],"85":[1,81],"88":[1,50],"92":[1,35],"95":[1,69],"100":[1,67],"102":[1,66],"106":[1,44],"110":[1,53],"111":[1,65],"112":[2,54],"113":45,"114":[1,74],"116":[1,75],"117":46,"118":[1,76],"119":47,"120":[1,77],"121":78,"129":[1,48],"134":43,"135":[1,72],"136":[1,73],"137":[2,54],"138":[2,54],"139":[1,38],"140":[1,39],"141":[1,40],"142":[1,41],"143":[1,42]},
|
"56":[1,70],"57":[1,71],"62":[1,68],"65":49,"67":34,"68":80,"69":54,"70":55,"71":30,"72":31,"73":32,"74":[1,33],"85":[1,81],"88":[1,50],"92":[1,35],"95":[1,69],"100":[1,67],"102":[1,66],"106":[1,44],"110":[1,53],"111":[1,65],"112":[2,54],"113":45,"114":[1,74],"116":[1,75],"117":46,"118":[1,76],"119":47,"120":[1,77],"121":78,"129":[1,48],"134":43,"135":[1,72],"136":[1,73],"137":[2,54],"138":[2,54],"139":[1,38],"140":[1,39],"141":[1,40],"142":[1,41],"143":[1,42]},{"8":157,"9":140,"10":23,"11":24,"12":[1,
|
||||||
{"8":157,"9":140,"10":23,"11":24,"12":[1,25],"13":[1,26],"14":[1,27],"15":9,"16":10,"17":11,"18":12,"19":13,"20":14,"21":15,"22":16,"23":17,"24":18,"25":19,"26":20,"27":21,"28":22,"31":79,"32":[1,84],"33":56,"34":[1,82],"35":[1,83],"36":29,"37":[1,57],"38":[1,58],"39":[1,59],"40":[1,60],"41":[1,61],"42":[1,62],"43":[1,63],"44":[1,64],"45":28,"49":[1,52],"50":[1,51],"52":[1,36],"55":37,"56":[1,70],"57":[1,71],"62":[1,68],"65":49,"67":34,"68":80,"69":54,"70":55,"71":30,"72":31,"73":32,"74":[1,33],"85":[1,
|
25],"13":[1,26],"14":[1,27],"15":9,"16":10,"17":11,"18":12,"19":13,"20":14,"21":15,"22":16,"23":17,"24":18,"25":19,"26":20,"27":21,"28":22,"31":79,"32":[1,84],"33":56,"34":[1,82],"35":[1,83],"36":29,"37":[1,57],"38":[1,58],"39":[1,59],"40":[1,60],"41":[1,61],"42":[1,62],"43":[1,63],"44":[1,64],"45":28,"49":[1,52],"50":[1,51],"52":[1,36],"55":37,"56":[1,70],"57":[1,71],"62":[1,68],"65":49,"67":34,"68":80,"69":54,"70":55,"71":30,"72":31,"73":32,"74":[1,33],"85":[1,81],"88":[1,50],"92":[1,35],"95":[1,
|
||||||
81],"88":[1,50],"92":[1,35],"95":[1,69],"100":[1,67],"102":[1,66],"106":[1,44],"110":[1,53],"111":[1,65],"113":45,"114":[1,74],"116":[1,75],"117":46,"118":[1,76],"119":47,"120":[1,77],"121":78,"129":[1,48],"134":43,"135":[1,72],"136":[1,73],"139":[1,38],"140":[1,39],"141":[1,40],"142":[1,41],"143":[1,42]},{"1":[2,76],"4":[2,76],"29":[2,76],"30":[2,76],"46":[2,76],"51":[2,76],"59":[2,76],"63":[2,76],"75":[2,76],"76":[2,76],"77":[2,76],"78":[2,76],"81":[2,76],"82":[2,76],"83":[2,76],"84":[2,76],"87":[2,
|
69],"100":[1,67],"102":[1,66],"106":[1,44],"110":[1,53],"111":[1,65],"113":45,"114":[1,74],"116":[1,75],"117":46,"118":[1,76],"119":47,"120":[1,77],"121":78,"129":[1,48],"134":43,"135":[1,72],"136":[1,73],"139":[1,38],"140":[1,39],"141":[1,40],"142":[1,41],"143":[1,42]},{"1":[2,76],"4":[2,76],"29":[2,76],"30":[2,76],"46":[2,76],"51":[2,76],"59":[2,76],"63":[2,76],"75":[2,76],"76":[2,76],"77":[2,76],"78":[2,76],"81":[2,76],"82":[2,76],"83":[2,76],"84":[2,76],"87":[2,76],"96":[2,76],"97":[2,76],"98":[2,
|
||||||
76],"96":[2,76],"97":[2,76],"98":[2,76],"103":[2,76],"112":[2,76],"114":[2,76],"115":[2,76],"116":[2,76],"120":[2,76],"126":[2,76],"127":[2,76],"128":[2,76],"137":[2,76],"138":[2,76],"139":[2,76],"140":[2,76],"141":[2,76],"142":[2,76],"143":[2,76],"144":[2,76],"145":[2,76],"146":[2,76],"147":[2,76],"148":[2,76],"149":[2,76],"150":[2,76],"151":[2,76]},{"1":[2,77],"4":[2,77],"29":[2,77],"30":[2,77],"46":[2,77],"51":[2,77],"59":[2,77],"63":[2,77],"75":[2,77],"76":[2,77],"77":[2,77],"78":[2,77],"81":[2,
|
76],"103":[2,76],"112":[2,76],"114":[2,76],"115":[2,76],"116":[2,76],"120":[2,76],"126":[2,76],"127":[2,76],"128":[2,76],"137":[2,76],"138":[2,76],"139":[2,76],"140":[2,76],"141":[2,76],"142":[2,76],"143":[2,76],"144":[2,76],"145":[2,76],"146":[2,76],"147":[2,76],"148":[2,76],"149":[2,76],"150":[2,76],"151":[2,76]},{"1":[2,77],"4":[2,77],"29":[2,77],"30":[2,77],"46":[2,77],"51":[2,77],"59":[2,77],"63":[2,77],"75":[2,77],"76":[2,77],"77":[2,77],"78":[2,77],"81":[2,77],"82":[2,77],"83":[2,77],"84":[2,
|
||||||
77],"82":[2,77],"83":[2,77],"84":[2,77],"87":[2,77],"96":[2,77],"97":[2,77],"98":[2,77],"103":[2,77],"112":[2,77],"114":[2,77],"115":[2,77],"116":[2,77],"120":[2,77],"126":[2,77],"127":[2,77],"128":[2,77],"137":[2,77],"138":[2,77],"139":[2,77],"140":[2,77],"141":[2,77],"142":[2,77],"143":[2,77],"144":[2,77],"145":[2,77],"146":[2,77],"147":[2,77],"148":[2,77],"149":[2,77],"150":[2,77],"151":[2,77]},{"1":[2,35],"4":[2,35],"29":[2,35],"30":[2,35],"51":[2,35],"59":[2,35],"63":[2,35],"75":[2,35],"76":[2,
|
77],"87":[2,77],"96":[2,77],"97":[2,77],"98":[2,77],"103":[2,77],"112":[2,77],"114":[2,77],"115":[2,77],"116":[2,77],"120":[2,77],"126":[2,77],"127":[2,77],"128":[2,77],"137":[2,77],"138":[2,77],"139":[2,77],"140":[2,77],"141":[2,77],"142":[2,77],"143":[2,77],"144":[2,77],"145":[2,77],"146":[2,77],"147":[2,77],"148":[2,77],"149":[2,77],"150":[2,77],"151":[2,77]},{"1":[2,35],"4":[2,35],"29":[2,35],"30":[2,35],"51":[2,35],"59":[2,35],"63":[2,35],"75":[2,35],"76":[2,35],"77":[2,35],"78":[2,35],"81":[2,
|
||||||
35],"77":[2,35],"78":[2,35],"81":[2,35],"82":[2,35],"83":[2,35],"84":[2,35],"87":[2,35],"96":[2,35],"97":[2,35],"98":[2,35],"103":[2,35],"112":[2,35],"114":[2,35],"115":[2,35],"116":[2,35],"120":[2,35],"126":[2,35],"127":[2,35],"128":[2,35],"137":[2,35],"138":[2,35],"139":[2,35],"140":[2,35],"141":[2,35],"142":[2,35],"143":[2,35],"144":[2,35],"145":[2,35],"146":[2,35],"147":[2,35],"148":[2,35],"149":[2,35],"150":[2,35],"151":[2,35]},{"1":[2,36],"4":[2,36],"29":[2,36],"30":[2,36],"51":[2,36],"59":[2,
|
35],"82":[2,35],"83":[2,35],"84":[2,35],"87":[2,35],"96":[2,35],"97":[2,35],"98":[2,35],"103":[2,35],"112":[2,35],"114":[2,35],"115":[2,35],"116":[2,35],"120":[2,35],"126":[2,35],"127":[2,35],"128":[2,35],"137":[2,35],"138":[2,35],"139":[2,35],"140":[2,35],"141":[2,35],"142":[2,35],"143":[2,35],"144":[2,35],"145":[2,35],"146":[2,35],"147":[2,35],"148":[2,35],"149":[2,35],"150":[2,35],"151":[2,35]},{"1":[2,36],"4":[2,36],"29":[2,36],"30":[2,36],"51":[2,36],"59":[2,36],"63":[2,36],"75":[2,36],"76":[2,
|
||||||
36],"63":[2,36],"75":[2,36],"76":[2,36],"77":[2,36],"78":[2,36],"81":[2,36],"82":[2,36],"83":[2,36],"84":[2,36],"87":[2,36],"96":[2,36],"97":[2,36],"98":[2,36],"103":[2,36],"112":[2,36],"114":[2,36],"115":[2,36],"116":[2,36],"120":[2,36],"126":[2,36],"127":[2,36],"128":[2,36],"137":[2,36],"138":[2,36],"139":[2,36],"140":[2,36],"141":[2,36],"142":[2,36],"143":[2,36],"144":[2,36],"145":[2,36],"146":[2,36],"147":[2,36],"148":[2,36],"149":[2,36],"150":[2,36],"151":[2,36]},{"1":[2,37],"4":[2,37],"29":[2,
|
36],"77":[2,36],"78":[2,36],"81":[2,36],"82":[2,36],"83":[2,36],"84":[2,36],"87":[2,36],"96":[2,36],"97":[2,36],"98":[2,36],"103":[2,36],"112":[2,36],"114":[2,36],"115":[2,36],"116":[2,36],"120":[2,36],"126":[2,36],"127":[2,36],"128":[2,36],"137":[2,36],"138":[2,36],"139":[2,36],"140":[2,36],"141":[2,36],"142":[2,36],"143":[2,36],"144":[2,36],"145":[2,36],"146":[2,36],"147":[2,36],"148":[2,36],"149":[2,36],"150":[2,36],"151":[2,36]},{"1":[2,37],"4":[2,37],"29":[2,37],"30":[2,37],"51":[2,37],"59":[2,
|
||||||
37],"30":[2,37],"51":[2,37],"59":[2,37],"63":[2,37],"75":[2,37],"76":[2,37],"77":[2,37],"78":[2,37],"81":[2,37],"82":[2,37],"83":[2,37],"84":[2,37],"87":[2,37],"96":[2,37],"97":[2,37],"98":[2,37],"103":[2,37],"112":[2,37],"114":[2,37],"115":[2,37],"116":[2,37],"120":[2,37],"126":[2,37],"127":[2,37],"128":[2,37],"137":[2,37],"138":[2,37],"139":[2,37],"140":[2,37],"141":[2,37],"142":[2,37],"143":[2,37],"144":[2,37],"145":[2,37],"146":[2,37],"147":[2,37],"148":[2,37],"149":[2,37],"150":[2,37],"151":[2,
|
37],"63":[2,37],"75":[2,37],"76":[2,37],"77":[2,37],"78":[2,37],"81":[2,37],"82":[2,37],"83":[2,37],"84":[2,37],"87":[2,37],"96":[2,37],"97":[2,37],"98":[2,37],"103":[2,37],"112":[2,37],"114":[2,37],"115":[2,37],"116":[2,37],"120":[2,37],"126":[2,37],"127":[2,37],"128":[2,37],"137":[2,37],"138":[2,37],"139":[2,37],"140":[2,37],"141":[2,37],"142":[2,37],"143":[2,37],"144":[2,37],"145":[2,37],"146":[2,37],"147":[2,37],"148":[2,37],"149":[2,37],"150":[2,37],"151":[2,37]},{"1":[2,38],"4":[2,38],"29":[2,
|
||||||
37]},{"1":[2,38],"4":[2,38],"29":[2,38],"30":[2,38],"51":[2,38],"59":[2,38],"63":[2,38],"75":[2,38],"76":[2,38],"77":[2,38],"78":[2,38],"81":[2,38],"82":[2,38],"83":[2,38],"84":[2,38],"87":[2,38],"96":[2,38],"97":[2,38],"98":[2,38],"103":[2,38],"112":[2,38],"114":[2,38],"115":[2,38],"116":[2,38],"120":[2,38],"126":[2,38],"127":[2,38],"128":[2,38],"137":[2,38],"138":[2,38],"139":[2,38],"140":[2,38],"141":[2,38],"142":[2,38],"143":[2,38],"144":[2,38],"145":[2,38],"146":[2,38],"147":[2,38],"148":[2,
|
38],"30":[2,38],"51":[2,38],"59":[2,38],"63":[2,38],"75":[2,38],"76":[2,38],"77":[2,38],"78":[2,38],"81":[2,38],"82":[2,38],"83":[2,38],"84":[2,38],"87":[2,38],"96":[2,38],"97":[2,38],"98":[2,38],"103":[2,38],"112":[2,38],"114":[2,38],"115":[2,38],"116":[2,38],"120":[2,38],"126":[2,38],"127":[2,38],"128":[2,38],"137":[2,38],"138":[2,38],"139":[2,38],"140":[2,38],"141":[2,38],"142":[2,38],"143":[2,38],"144":[2,38],"145":[2,38],"146":[2,38],"147":[2,38],"148":[2,38],"149":[2,38],"150":[2,38],"151":[2,
|
||||||
38],"149":[2,38],"150":[2,38],"151":[2,38]},{"1":[2,39],"4":[2,39],"29":[2,39],"30":[2,39],"51":[2,39],"59":[2,39],"63":[2,39],"75":[2,39],"76":[2,39],"77":[2,39],"78":[2,39],"81":[2,39],"82":[2,39],"83":[2,39],"84":[2,39],"87":[2,39],"96":[2,39],"97":[2,39],"98":[2,39],"103":[2,39],"112":[2,39],"114":[2,39],"115":[2,39],"116":[2,39],"120":[2,39],"126":[2,39],"127":[2,39],"128":[2,39],"137":[2,39],"138":[2,39],"139":[2,39],"140":[2,39],"141":[2,39],"142":[2,39],"143":[2,39],"144":[2,39],"145":[2,
|
38]},{"1":[2,39],"4":[2,39],"29":[2,39],"30":[2,39],"51":[2,39],"59":[2,39],"63":[2,39],"75":[2,39],"76":[2,39],"77":[2,39],"78":[2,39],"81":[2,39],"82":[2,39],"83":[2,39],"84":[2,39],"87":[2,39],"96":[2,39],"97":[2,39],"98":[2,39],"103":[2,39],"112":[2,39],"114":[2,39],"115":[2,39],"116":[2,39],"120":[2,39],"126":[2,39],"127":[2,39],"128":[2,39],"137":[2,39],"138":[2,39],"139":[2,39],"140":[2,39],"141":[2,39],"142":[2,39],"143":[2,39],"144":[2,39],"145":[2,39],"146":[2,39],"147":[2,39],"148":[2,
|
||||||
39],"146":[2,39],"147":[2,39],"148":[2,39],"149":[2,39],"150":[2,39],"151":[2,39]},{"1":[2,40],"4":[2,40],"29":[2,40],"30":[2,40],"51":[2,40],"59":[2,40],"63":[2,40],"75":[2,40],"76":[2,40],"77":[2,40],"78":[2,40],"81":[2,40],"82":[2,40],"83":[2,40],"84":[2,40],"87":[2,40],"96":[2,40],"97":[2,40],"98":[2,40],"103":[2,40],"112":[2,40],"114":[2,40],"115":[2,40],"116":[2,40],"120":[2,40],"126":[2,40],"127":[2,40],"128":[2,40],"137":[2,40],"138":[2,40],"139":[2,40],"140":[2,40],"141":[2,40],"142":[2,
|
39],"149":[2,39],"150":[2,39],"151":[2,39]},{"1":[2,40],"4":[2,40],"29":[2,40],"30":[2,40],"51":[2,40],"59":[2,40],"63":[2,40],"75":[2,40],"76":[2,40],"77":[2,40],"78":[2,40],"81":[2,40],"82":[2,40],"83":[2,40],"84":[2,40],"87":[2,40],"96":[2,40],"97":[2,40],"98":[2,40],"103":[2,40],"112":[2,40],"114":[2,40],"115":[2,40],"116":[2,40],"120":[2,40],"126":[2,40],"127":[2,40],"128":[2,40],"137":[2,40],"138":[2,40],"139":[2,40],"140":[2,40],"141":[2,40],"142":[2,40],"143":[2,40],"144":[2,40],"145":[2,
|
||||||
40],"143":[2,40],"144":[2,40],"145":[2,40],"146":[2,40],"147":[2,40],"148":[2,40],"149":[2,40],"150":[2,40],"151":[2,40]},{"1":[2,41],"4":[2,41],"29":[2,41],"30":[2,41],"51":[2,41],"59":[2,41],"63":[2,41],"75":[2,41],"76":[2,41],"77":[2,41],"78":[2,41],"81":[2,41],"82":[2,41],"83":[2,41],"84":[2,41],"87":[2,41],"96":[2,41],"97":[2,41],"98":[2,41],"103":[2,41],"112":[2,41],"114":[2,41],"115":[2,41],"116":[2,41],"120":[2,41],"126":[2,41],"127":[2,41],"128":[2,41],"137":[2,41],"138":[2,41],"139":[2,
|
40],"146":[2,40],"147":[2,40],"148":[2,40],"149":[2,40],"150":[2,40],"151":[2,40]},{"1":[2,41],"4":[2,41],"29":[2,41],"30":[2,41],"51":[2,41],"59":[2,41],"63":[2,41],"75":[2,41],"76":[2,41],"77":[2,41],"78":[2,41],"81":[2,41],"82":[2,41],"83":[2,41],"84":[2,41],"87":[2,41],"96":[2,41],"97":[2,41],"98":[2,41],"103":[2,41],"112":[2,41],"114":[2,41],"115":[2,41],"116":[2,41],"120":[2,41],"126":[2,41],"127":[2,41],"128":[2,41],"137":[2,41],"138":[2,41],"139":[2,41],"140":[2,41],"141":[2,41],"142":[2,
|
||||||
41],"140":[2,41],"141":[2,41],"142":[2,41],"143":[2,41],"144":[2,41],"145":[2,41],"146":[2,41],"147":[2,41],"148":[2,41],"149":[2,41],"150":[2,41],"151":[2,41]},{"1":[2,42],"4":[2,42],"29":[2,42],"30":[2,42],"51":[2,42],"59":[2,42],"63":[2,42],"75":[2,42],"76":[2,42],"77":[2,42],"78":[2,42],"81":[2,42],"82":[2,42],"83":[2,42],"84":[2,42],"87":[2,42],"96":[2,42],"97":[2,42],"98":[2,42],"103":[2,42],"112":[2,42],"114":[2,42],"115":[2,42],"116":[2,42],"120":[2,42],"126":[2,42],"127":[2,42],"128":[2,
|
41],"143":[2,41],"144":[2,41],"145":[2,41],"146":[2,41],"147":[2,41],"148":[2,41],"149":[2,41],"150":[2,41],"151":[2,41]},{"1":[2,42],"4":[2,42],"29":[2,42],"30":[2,42],"51":[2,42],"59":[2,42],"63":[2,42],"75":[2,42],"76":[2,42],"77":[2,42],"78":[2,42],"81":[2,42],"82":[2,42],"83":[2,42],"84":[2,42],"87":[2,42],"96":[2,42],"97":[2,42],"98":[2,42],"103":[2,42],"112":[2,42],"114":[2,42],"115":[2,42],"116":[2,42],"120":[2,42],"126":[2,42],"127":[2,42],"128":[2,42],"137":[2,42],"138":[2,42],"139":[2,
|
||||||
42],"137":[2,42],"138":[2,42],"139":[2,42],"140":[2,42],"141":[2,42],"142":[2,42],"143":[2,42],"144":[2,42],"145":[2,42],"146":[2,42],"147":[2,42],"148":[2,42],"149":[2,42],"150":[2,42],"151":[2,42]},{"1":[2,43],"4":[2,43],"29":[2,43],"30":[2,43],"51":[2,43],"59":[2,43],"63":[2,43],"75":[2,43],"76":[2,43],"77":[2,43],"78":[2,43],"81":[2,43],"82":[2,43],"83":[2,43],"84":[2,43],"87":[2,43],"96":[2,43],"97":[2,43],"98":[2,43],"103":[2,43],"112":[2,43],"114":[2,43],"115":[2,43],"116":[2,43],"120":[2,
|
42],"140":[2,42],"141":[2,42],"142":[2,42],"143":[2,42],"144":[2,42],"145":[2,42],"146":[2,42],"147":[2,42],"148":[2,42],"149":[2,42],"150":[2,42],"151":[2,42]},{"1":[2,43],"4":[2,43],"29":[2,43],"30":[2,43],"51":[2,43],"59":[2,43],"63":[2,43],"75":[2,43],"76":[2,43],"77":[2,43],"78":[2,43],"81":[2,43],"82":[2,43],"83":[2,43],"84":[2,43],"87":[2,43],"96":[2,43],"97":[2,43],"98":[2,43],"103":[2,43],"112":[2,43],"114":[2,43],"115":[2,43],"116":[2,43],"120":[2,43],"126":[2,43],"127":[2,43],"128":[2,
|
||||||
43],"126":[2,43],"127":[2,43],"128":[2,43],"137":[2,43],"138":[2,43],"139":[2,43],"140":[2,43],"141":[2,43],"142":[2,43],"143":[2,43],"144":[2,43],"145":[2,43],"146":[2,43],"147":[2,43],"148":[2,43],"149":[2,43],"150":[2,43],"151":[2,43]},{"7":158,"8":7,"9":8,"10":23,"11":24,"12":[1,25],"13":[1,26],"14":[1,27],"15":9,"16":10,"17":11,"18":12,"19":13,"20":14,"21":15,"22":16,"23":17,"24":18,"25":19,"26":20,"27":21,"28":22,"31":79,"32":[1,84],"33":56,"34":[1,82],"35":[1,83],"36":29,"37":[1,57],"38":[1,
|
43],"137":[2,43],"138":[2,43],"139":[2,43],"140":[2,43],"141":[2,43],"142":[2,43],"143":[2,43],"144":[2,43],"145":[2,43],"146":[2,43],"147":[2,43],"148":[2,43],"149":[2,43],"150":[2,43],"151":[2,43]},{"7":158,"8":7,"9":8,"10":23,"11":24,"12":[1,25],"13":[1,26],"14":[1,27],"15":9,"16":10,"17":11,"18":12,"19":13,"20":14,"21":15,"22":16,"23":17,"24":18,"25":19,"26":20,"27":21,"28":22,"31":79,"32":[1,84],"33":56,"34":[1,82],"35":[1,83],"36":29,"37":[1,57],"38":[1,58],"39":[1,59],"40":[1,60],"41":[1,61],
|
||||||
58],"39":[1,59],"40":[1,60],"41":[1,61],"42":[1,62],"43":[1,63],"44":[1,64],"45":28,"49":[1,52],"50":[1,51],"52":[1,36],"55":37,"56":[1,70],"57":[1,71],"62":[1,68],"65":49,"67":34,"68":80,"69":54,"70":55,"71":30,"72":31,"73":32,"74":[1,33],"85":[1,81],"88":[1,50],"92":[1,35],"95":[1,69],"100":[1,67],"102":[1,66],"106":[1,44],"110":[1,53],"111":[1,65],"112":[1,159],"113":45,"114":[1,74],"116":[1,75],"117":46,"118":[1,76],"119":47,"120":[1,77],"121":78,"129":[1,48],"134":43,"135":[1,72],"136":[1,73],
|
"42":[1,62],"43":[1,63],"44":[1,64],"45":28,"49":[1,52],"50":[1,51],"52":[1,36],"55":37,"56":[1,70],"57":[1,71],"62":[1,68],"65":49,"67":34,"68":80,"69":54,"70":55,"71":30,"72":31,"73":32,"74":[1,33],"85":[1,81],"88":[1,50],"92":[1,35],"95":[1,69],"100":[1,67],"102":[1,66],"106":[1,44],"110":[1,53],"111":[1,65],"112":[1,159],"113":45,"114":[1,74],"116":[1,75],"117":46,"118":[1,76],"119":47,"120":[1,77],"121":78,"129":[1,48],"134":43,"135":[1,72],"136":[1,73],"139":[1,38],"140":[1,39],"141":[1,40],
|
||||||
"139":[1,38],"140":[1,39],"141":[1,40],"142":[1,41],"143":[1,42]},{"8":160,"9":140,"10":23,"11":24,"12":[1,25],"13":[1,26],"14":[1,27],"15":9,"16":10,"17":11,"18":12,"19":13,"20":14,"21":15,"22":16,"23":17,"24":18,"25":19,"26":20,"27":21,"28":22,"29":[1,164],"31":79,"32":[1,84],"33":56,"34":[1,82],"35":[1,83],"36":29,"37":[1,57],"38":[1,58],"39":[1,59],"40":[1,60],"41":[1,61],"42":[1,62],"43":[1,63],"44":[1,64],"45":28,"49":[1,52],"50":[1,51],"52":[1,36],"55":37,"56":[1,70],"57":[1,71],"62":[1,68],
|
"142":[1,41],"143":[1,42]},{"8":160,"9":140,"10":23,"11":24,"12":[1,25],"13":[1,26],"14":[1,27],"15":9,"16":10,"17":11,"18":12,"19":13,"20":14,"21":15,"22":16,"23":17,"24":18,"25":19,"26":20,"27":21,"28":22,"29":[1,164],"31":79,"32":[1,84],"33":56,"34":[1,82],"35":[1,83],"36":29,"37":[1,57],"38":[1,58],"39":[1,59],"40":[1,60],"41":[1,61],"42":[1,62],"43":[1,63],"44":[1,64],"45":28,"49":[1,52],"50":[1,51],"52":[1,36],"55":37,"56":[1,70],"57":[1,71],"62":[1,68],"64":165,"65":49,"67":34,"68":80,"69":54,
|
||||||
"64":165,"65":49,"67":34,"68":80,"69":54,"70":55,"71":30,"72":31,"73":32,"74":[1,33],"85":[1,81],"88":[1,50],"92":[1,35],"95":[1,69],"99":162,"100":[1,67],"102":[1,66],"103":[1,161],"104":163,"106":[1,44],"110":[1,53],"111":[1,65],"113":45,"114":[1,74],"116":[1,75],"117":46,"118":[1,76],"119":47,"120":[1,77],"121":78,"129":[1,48],"134":43,"135":[1,72],"136":[1,73],"139":[1,38],"140":[1,39],"141":[1,40],"142":[1,41],"143":[1,42]},{"1":[2,123],"4":[2,123],"29":[2,123],"30":[2,123],"51":[2,123],"59":[2,
|
"70":55,"71":30,"72":31,"73":32,"74":[1,33],"85":[1,81],"88":[1,50],"92":[1,35],"95":[1,69],"99":162,"100":[1,67],"102":[1,66],"103":[1,161],"104":163,"106":[1,44],"110":[1,53],"111":[1,65],"113":45,"114":[1,74],"116":[1,75],"117":46,"118":[1,76],"119":47,"120":[1,77],"121":78,"129":[1,48],"134":43,"135":[1,72],"136":[1,73],"139":[1,38],"140":[1,39],"141":[1,40],"142":[1,41],"143":[1,42]},{"1":[2,123],"4":[2,123],"29":[2,123],"30":[2,123],"51":[2,123],"59":[2,123],"63":[2,123],"75":[2,123],"76":[2,
|
||||||
123],"63":[2,123],"75":[2,123],"76":[2,123],"77":[2,123],"78":[2,123],"81":[2,123],"82":[2,123],"83":[2,123],"84":[2,123],"87":[2,123],"96":[2,123],"97":[2,123],"98":[2,123],"103":[2,123],"112":[2,123],"114":[2,123],"115":[2,123],"116":[2,123],"120":[2,123],"126":[2,123],"127":[2,123],"128":[2,123],"137":[2,123],"138":[2,123],"139":[2,123],"140":[2,123],"141":[2,123],"142":[2,123],"143":[2,123],"144":[2,123],"145":[2,123],"146":[2,123],"147":[2,123],"148":[2,123],"149":[2,123],"150":[2,123],"151":[2,
|
123],"77":[2,123],"78":[2,123],"81":[2,123],"82":[2,123],"83":[2,123],"84":[2,123],"87":[2,123],"96":[2,123],"97":[2,123],"98":[2,123],"103":[2,123],"112":[2,123],"114":[2,123],"115":[2,123],"116":[2,123],"120":[2,123],"126":[2,123],"127":[2,123],"128":[2,123],"137":[2,123],"138":[2,123],"139":[2,123],"140":[2,123],"141":[2,123],"142":[2,123],"143":[2,123],"144":[2,123],"145":[2,123],"146":[2,123],"147":[2,123],"148":[2,123],"149":[2,123],"150":[2,123],"151":[2,123]},{"1":[2,124],"4":[2,124],"29":[2,
|
||||||
123]},{"1":[2,124],"4":[2,124],"29":[2,124],"30":[2,124],"31":166,"32":[1,84],"51":[2,124],"59":[2,124],"63":[2,124],"75":[2,124],"76":[2,124],"77":[2,124],"78":[2,124],"81":[2,124],"82":[2,124],"83":[2,124],"84":[2,124],"87":[2,124],"96":[2,124],"97":[2,124],"98":[2,124],"103":[2,124],"112":[2,124],"114":[2,124],"115":[2,124],"116":[2,124],"120":[2,124],"126":[2,124],"127":[2,124],"128":[2,124],"137":[2,124],"138":[2,124],"139":[2,124],"140":[2,124],"141":[2,124],"142":[2,124],"143":[2,124],"144":[2,
|
124],"30":[2,124],"31":166,"32":[1,84],"51":[2,124],"59":[2,124],"63":[2,124],"75":[2,124],"76":[2,124],"77":[2,124],"78":[2,124],"81":[2,124],"82":[2,124],"83":[2,124],"84":[2,124],"87":[2,124],"96":[2,124],"97":[2,124],"98":[2,124],"103":[2,124],"112":[2,124],"114":[2,124],"115":[2,124],"116":[2,124],"120":[2,124],"126":[2,124],"127":[2,124],"128":[2,124],"137":[2,124],"138":[2,124],"139":[2,124],"140":[2,124],"141":[2,124],"142":[2,124],"143":[2,124],"144":[2,124],"145":[2,124],"146":[2,124],"147":[2,
|
||||||
124],"145":[2,124],"146":[2,124],"147":[2,124],"148":[2,124],"149":[2,124],"150":[2,124],"151":[2,124]},{"1":[2,117],"4":[2,117],"29":[2,117],"30":[2,117],"51":[2,117],"59":[2,117],"63":[2,117],"75":[2,117],"76":[2,117],"77":[2,117],"78":[2,117],"81":[2,117],"82":[2,117],"83":[2,117],"84":[2,117],"87":[2,117],"94":167,"96":[2,117],"97":[1,168],"98":[2,117],"103":[2,117],"112":[2,117],"114":[2,117],"115":[2,117],"116":[2,117],"120":[2,117],"126":[2,117],"127":[2,117],"128":[2,117],"137":[2,117],"138":[2,
|
124],"148":[2,124],"149":[2,124],"150":[2,124],"151":[2,124]},{"1":[2,117],"4":[2,117],"29":[2,117],"30":[2,117],"51":[2,117],"59":[2,117],"63":[2,117],"75":[2,117],"76":[2,117],"77":[2,117],"78":[2,117],"81":[2,117],"82":[2,117],"83":[2,117],"84":[2,117],"87":[2,117],"94":167,"96":[2,117],"97":[1,168],"98":[2,117],"103":[2,117],"112":[2,117],"114":[2,117],"115":[2,117],"116":[2,117],"120":[2,117],"126":[2,117],"127":[2,117],"128":[2,117],"137":[2,117],"138":[2,117],"139":[2,117],"140":[2,117],"141":[2,
|
||||||
117],"139":[2,117],"140":[2,117],"141":[2,117],"142":[2,117],"143":[2,117],"144":[2,117],"145":[2,117],"146":[2,117],"147":[2,117],"148":[2,117],"149":[2,117],"151":[2,117]},{"4":[2,59],"29":[2,59]},{"4":[2,60],"29":[2,60]},{"8":169,"9":140,"10":23,"11":24,"12":[1,25],"13":[1,26],"14":[1,27],"15":9,"16":10,"17":11,"18":12,"19":13,"20":14,"21":15,"22":16,"23":17,"24":18,"25":19,"26":20,"27":21,"28":22,"31":79,"32":[1,84],"33":56,"34":[1,82],"35":[1,83],"36":29,"37":[1,57],"38":[1,58],"39":[1,59],"40":[1,
|
117],"142":[2,117],"143":[2,117],"144":[2,117],"145":[2,117],"146":[2,117],"147":[2,117],"148":[2,117],"149":[2,117],"151":[2,117]},{"4":[2,59],"29":[2,59]},{"4":[2,60],"29":[2,60]},{"8":169,"9":140,"10":23,"11":24,"12":[1,25],"13":[1,26],"14":[1,27],"15":9,"16":10,"17":11,"18":12,"19":13,"20":14,"21":15,"22":16,"23":17,"24":18,"25":19,"26":20,"27":21,"28":22,"31":79,"32":[1,84],"33":56,"34":[1,82],"35":[1,83],"36":29,"37":[1,57],"38":[1,58],"39":[1,59],"40":[1,60],"41":[1,61],"42":[1,62],"43":[1,
|
||||||
60],"41":[1,61],"42":[1,62],"43":[1,63],"44":[1,64],"45":28,"49":[1,52],"50":[1,51],"52":[1,36],"55":37,"56":[1,70],"57":[1,71],"62":[1,68],"65":49,"67":34,"68":80,"69":54,"70":55,"71":30,"72":31,"73":32,"74":[1,33],"85":[1,81],"88":[1,50],"92":[1,35],"95":[1,69],"100":[1,67],"102":[1,66],"106":[1,44],"110":[1,53],"111":[1,65],"113":45,"114":[1,74],"116":[1,75],"117":46,"118":[1,76],"119":47,"120":[1,77],"121":78,"129":[1,48],"134":43,"135":[1,72],"136":[1,73],"139":[1,38],"140":[1,39],"141":[1,40],
|
63],"44":[1,64],"45":28,"49":[1,52],"50":[1,51],"52":[1,36],"55":37,"56":[1,70],"57":[1,71],"62":[1,68],"65":49,"67":34,"68":80,"69":54,"70":55,"71":30,"72":31,"73":32,"74":[1,33],"85":[1,81],"88":[1,50],"92":[1,35],"95":[1,69],"100":[1,67],"102":[1,66],"106":[1,44],"110":[1,53],"111":[1,65],"113":45,"114":[1,74],"116":[1,75],"117":46,"118":[1,76],"119":47,"120":[1,77],"121":78,"129":[1,48],"134":43,"135":[1,72],"136":[1,73],"139":[1,38],"140":[1,39],"141":[1,40],"142":[1,41],"143":[1,42]},{"8":170,
|
||||||
"142":[1,41],"143":[1,42]},{"8":170,"9":140,"10":23,"11":24,"12":[1,25],"13":[1,26],"14":[1,27],"15":9,"16":10,"17":11,"18":12,"19":13,"20":14,"21":15,"22":16,"23":17,"24":18,"25":19,"26":20,"27":21,"28":22,"31":79,"32":[1,84],"33":56,"34":[1,82],"35":[1,83],"36":29,"37":[1,57],"38":[1,58],"39":[1,59],"40":[1,60],"41":[1,61],"42":[1,62],"43":[1,63],"44":[1,64],"45":28,"49":[1,52],"50":[1,51],"52":[1,36],"55":37,"56":[1,70],"57":[1,71],"62":[1,68],"65":49,"67":34,"68":80,"69":54,"70":55,"71":30,"72":31,
|
"9":140,"10":23,"11":24,"12":[1,25],"13":[1,26],"14":[1,27],"15":9,"16":10,"17":11,"18":12,"19":13,"20":14,"21":15,"22":16,"23":17,"24":18,"25":19,"26":20,"27":21,"28":22,"31":79,"32":[1,84],"33":56,"34":[1,82],"35":[1,83],"36":29,"37":[1,57],"38":[1,58],"39":[1,59],"40":[1,60],"41":[1,61],"42":[1,62],"43":[1,63],"44":[1,64],"45":28,"49":[1,52],"50":[1,51],"52":[1,36],"55":37,"56":[1,70],"57":[1,71],"62":[1,68],"65":49,"67":34,"68":80,"69":54,"70":55,"71":30,"72":31,"73":32,"74":[1,33],"85":[1,81],
|
||||||
"73":32,"74":[1,33],"85":[1,81],"88":[1,50],"92":[1,35],"95":[1,69],"100":[1,67],"102":[1,66],"106":[1,44],"110":[1,53],"111":[1,65],"113":45,"114":[1,74],"116":[1,75],"117":46,"118":[1,76],"119":47,"120":[1,77],"121":78,"129":[1,48],"134":43,"135":[1,72],"136":[1,73],"139":[1,38],"140":[1,39],"141":[1,40],"142":[1,41],"143":[1,42]},{"8":171,"9":140,"10":23,"11":24,"12":[1,25],"13":[1,26],"14":[1,27],"15":9,"16":10,"17":11,"18":12,"19":13,"20":14,"21":15,"22":16,"23":17,"24":18,"25":19,"26":20,"27":21,
|
"88":[1,50],"92":[1,35],"95":[1,69],"100":[1,67],"102":[1,66],"106":[1,44],"110":[1,53],"111":[1,65],"113":45,"114":[1,74],"116":[1,75],"117":46,"118":[1,76],"119":47,"120":[1,77],"121":78,"129":[1,48],"134":43,"135":[1,72],"136":[1,73],"139":[1,38],"140":[1,39],"141":[1,40],"142":[1,41],"143":[1,42]},{"8":171,"9":140,"10":23,"11":24,"12":[1,25],"13":[1,26],"14":[1,27],"15":9,"16":10,"17":11,"18":12,"19":13,"20":14,"21":15,"22":16,"23":17,"24":18,"25":19,"26":20,"27":21,"28":22,"31":79,"32":[1,84],
|
||||||
"28":22,"31":79,"32":[1,84],"33":56,"34":[1,82],"35":[1,83],"36":29,"37":[1,57],"38":[1,58],"39":[1,59],"40":[1,60],"41":[1,61],"42":[1,62],"43":[1,63],"44":[1,64],"45":28,"49":[1,52],"50":[1,51],"52":[1,36],"55":37,"56":[1,70],"57":[1,71],"62":[1,68],"65":49,"67":34,"68":80,"69":54,"70":55,"71":30,"72":31,"73":32,"74":[1,33],"85":[1,81],"88":[1,50],"92":[1,35],"95":[1,69],"100":[1,67],"102":[1,66],"106":[1,44],"110":[1,53],"111":[1,65],"113":45,"114":[1,74],"116":[1,75],"117":46,"118":[1,76],"119":47,
|
"33":56,"34":[1,82],"35":[1,83],"36":29,"37":[1,57],"38":[1,58],"39":[1,59],"40":[1,60],"41":[1,61],"42":[1,62],"43":[1,63],"44":[1,64],"45":28,"49":[1,52],"50":[1,51],"52":[1,36],"55":37,"56":[1,70],"57":[1,71],"62":[1,68],"65":49,"67":34,"68":80,"69":54,"70":55,"71":30,"72":31,"73":32,"74":[1,33],"85":[1,81],"88":[1,50],"92":[1,35],"95":[1,69],"100":[1,67],"102":[1,66],"106":[1,44],"110":[1,53],"111":[1,65],"113":45,"114":[1,74],"116":[1,75],"117":46,"118":[1,76],"119":47,"120":[1,77],"121":78,
|
||||||
"120":[1,77],"121":78,"129":[1,48],"134":43,"135":[1,72],"136":[1,73],"139":[1,38],"140":[1,39],"141":[1,40],"142":[1,41],"143":[1,42]},{"8":172,"9":140,"10":23,"11":24,"12":[1,25],"13":[1,26],"14":[1,27],"15":9,"16":10,"17":11,"18":12,"19":13,"20":14,"21":15,"22":16,"23":17,"24":18,"25":19,"26":20,"27":21,"28":22,"31":79,"32":[1,84],"33":56,"34":[1,82],"35":[1,83],"36":29,"37":[1,57],"38":[1,58],"39":[1,59],"40":[1,60],"41":[1,61],"42":[1,62],"43":[1,63],"44":[1,64],"45":28,"49":[1,52],"50":[1,51],
|
"129":[1,48],"134":43,"135":[1,72],"136":[1,73],"139":[1,38],"140":[1,39],"141":[1,40],"142":[1,41],"143":[1,42]},{"8":172,"9":140,"10":23,"11":24,"12":[1,25],"13":[1,26],"14":[1,27],"15":9,"16":10,"17":11,"18":12,"19":13,"20":14,"21":15,"22":16,"23":17,"24":18,"25":19,"26":20,"27":21,"28":22,"31":79,"32":[1,84],"33":56,"34":[1,82],"35":[1,83],"36":29,"37":[1,57],"38":[1,58],"39":[1,59],"40":[1,60],"41":[1,61],"42":[1,62],"43":[1,63],"44":[1,64],"45":28,"49":[1,52],"50":[1,51],"52":[1,36],"55":37,
|
||||||
"52":[1,36],"55":37,"56":[1,70],"57":[1,71],"62":[1,68],"65":49,"67":34,"68":80,"69":54,"70":55,"71":30,"72":31,"73":32,"74":[1,33],"85":[1,81],"88":[1,50],"92":[1,35],"95":[1,69],"100":[1,67],"102":[1,66],"106":[1,44],"110":[1,53],"111":[1,65],"113":45,"114":[1,74],"116":[1,75],"117":46,"118":[1,76],"119":47,"120":[1,77],"121":78,"129":[1,48],"134":43,"135":[1,72],"136":[1,73],"139":[1,38],"140":[1,39],"141":[1,40],"142":[1,41],"143":[1,42]},{"4":[1,138],"6":173,"8":174,"9":140,"10":23,"11":24,"12":[1,
|
"56":[1,70],"57":[1,71],"62":[1,68],"65":49,"67":34,"68":80,"69":54,"70":55,"71":30,"72":31,"73":32,"74":[1,33],"85":[1,81],"88":[1,50],"92":[1,35],"95":[1,69],"100":[1,67],"102":[1,66],"106":[1,44],"110":[1,53],"111":[1,65],"113":45,"114":[1,74],"116":[1,75],"117":46,"118":[1,76],"119":47,"120":[1,77],"121":78,"129":[1,48],"134":43,"135":[1,72],"136":[1,73],"139":[1,38],"140":[1,39],"141":[1,40],"142":[1,41],"143":[1,42]},{"4":[1,138],"6":173,"8":174,"9":140,"10":23,"11":24,"12":[1,25],"13":[1,26],
|
||||||
25],"13":[1,26],"14":[1,27],"15":9,"16":10,"17":11,"18":12,"19":13,"20":14,"21":15,"22":16,"23":17,"24":18,"25":19,"26":20,"27":21,"28":22,"29":[1,6],"31":79,"32":[1,84],"33":56,"34":[1,82],"35":[1,83],"36":29,"37":[1,57],"38":[1,58],"39":[1,59],"40":[1,60],"41":[1,61],"42":[1,62],"43":[1,63],"44":[1,64],"45":28,"49":[1,52],"50":[1,51],"52":[1,36],"55":37,"56":[1,70],"57":[1,71],"62":[1,68],"65":49,"67":34,"68":80,"69":54,"70":55,"71":30,"72":31,"73":32,"74":[1,33],"85":[1,81],"88":[1,50],"92":[1,
|
"14":[1,27],"15":9,"16":10,"17":11,"18":12,"19":13,"20":14,"21":15,"22":16,"23":17,"24":18,"25":19,"26":20,"27":21,"28":22,"29":[1,6],"31":79,"32":[1,84],"33":56,"34":[1,82],"35":[1,83],"36":29,"37":[1,57],"38":[1,58],"39":[1,59],"40":[1,60],"41":[1,61],"42":[1,62],"43":[1,63],"44":[1,64],"45":28,"49":[1,52],"50":[1,51],"52":[1,36],"55":37,"56":[1,70],"57":[1,71],"62":[1,68],"65":49,"67":34,"68":80,"69":54,"70":55,"71":30,"72":31,"73":32,"74":[1,33],"85":[1,81],"88":[1,50],"92":[1,35],"95":[1,69],
|
||||||
35],"95":[1,69],"100":[1,67],"102":[1,66],"106":[1,44],"110":[1,53],"111":[1,65],"113":45,"114":[1,74],"116":[1,75],"117":46,"118":[1,76],"119":47,"120":[1,77],"121":78,"129":[1,48],"134":43,"135":[1,72],"136":[1,73],"139":[1,38],"140":[1,39],"141":[1,40],"142":[1,41],"143":[1,42]},{"31":179,"32":[1,84],"69":180,"70":181,"72":175,"85":[1,81],"102":[1,66],"123":176,"124":[1,177],"125":178},{"122":182,"126":[1,183],"127":[1,184]},{"1":[2,71],"4":[2,71],"29":[2,71],"30":[2,71],"46":[2,71],"51":[2,71],
|
"100":[1,67],"102":[1,66],"106":[1,44],"110":[1,53],"111":[1,65],"113":45,"114":[1,74],"116":[1,75],"117":46,"118":[1,76],"119":47,"120":[1,77],"121":78,"129":[1,48],"134":43,"135":[1,72],"136":[1,73],"139":[1,38],"140":[1,39],"141":[1,40],"142":[1,41],"143":[1,42]},{"31":179,"32":[1,84],"69":180,"70":181,"72":175,"85":[1,81],"102":[1,66],"123":176,"124":[1,177],"125":178},{"122":182,"126":[1,183],"127":[1,184]},{"1":[2,71],"4":[2,71],"29":[2,71],"30":[2,71],"46":[2,71],"51":[2,71],"59":[2,71],"63":[2,
|
||||||
"59":[2,71],"63":[2,71],"75":[2,71],"76":[2,71],"77":[2,71],"78":[2,71],"81":[2,71],"82":[2,71],"83":[2,71],"84":[2,71],"87":[2,71],"89":[2,71],"96":[2,71],"97":[2,71],"98":[2,71],"103":[2,71],"112":[2,71],"114":[2,71],"115":[2,71],"116":[2,71],"120":[2,71],"126":[2,71],"127":[2,71],"128":[2,71],"137":[2,71],"138":[2,71],"139":[2,71],"140":[2,71],"141":[2,71],"142":[2,71],"143":[2,71],"144":[2,71],"145":[2,71],"146":[2,71],"147":[2,71],"148":[2,71],"149":[2,71],"150":[2,71],"151":[2,71]},{"1":[2,
|
71],"75":[2,71],"76":[2,71],"77":[2,71],"78":[2,71],"81":[2,71],"82":[2,71],"83":[2,71],"84":[2,71],"87":[2,71],"89":[2,71],"96":[2,71],"97":[2,71],"98":[2,71],"103":[2,71],"112":[2,71],"114":[2,71],"115":[2,71],"116":[2,71],"120":[2,71],"126":[2,71],"127":[2,71],"128":[2,71],"137":[2,71],"138":[2,71],"139":[2,71],"140":[2,71],"141":[2,71],"142":[2,71],"143":[2,71],"144":[2,71],"145":[2,71],"146":[2,71],"147":[2,71],"148":[2,71],"149":[2,71],"150":[2,71],"151":[2,71]},{"1":[2,74],"4":[2,74],"29":[2,
|
||||||
74],"4":[2,74],"29":[2,74],"30":[2,74],"46":[2,74],"51":[2,74],"59":[2,74],"63":[2,74],"75":[2,74],"76":[2,74],"77":[2,74],"78":[2,74],"81":[2,74],"82":[2,74],"83":[2,74],"84":[2,74],"87":[2,74],"89":[2,74],"96":[2,74],"97":[2,74],"98":[2,74],"103":[2,74],"112":[2,74],"114":[2,74],"115":[2,74],"116":[2,74],"120":[2,74],"126":[2,74],"127":[2,74],"128":[2,74],"137":[2,74],"138":[2,74],"139":[2,74],"140":[2,74],"141":[2,74],"142":[2,74],"143":[2,74],"144":[2,74],"145":[2,74],"146":[2,74],"147":[2,74],
|
74],"30":[2,74],"46":[2,74],"51":[2,74],"59":[2,74],"63":[2,74],"75":[2,74],"76":[2,74],"77":[2,74],"78":[2,74],"81":[2,74],"82":[2,74],"83":[2,74],"84":[2,74],"87":[2,74],"89":[2,74],"96":[2,74],"97":[2,74],"98":[2,74],"103":[2,74],"112":[2,74],"114":[2,74],"115":[2,74],"116":[2,74],"120":[2,74],"126":[2,74],"127":[2,74],"128":[2,74],"137":[2,74],"138":[2,74],"139":[2,74],"140":[2,74],"141":[2,74],"142":[2,74],"143":[2,74],"144":[2,74],"145":[2,74],"146":[2,74],"147":[2,74],"148":[2,74],"149":[2,
|
||||||
"148":[2,74],"149":[2,74],"150":[2,74],"151":[2,74]},{"4":[2,94],"28":189,"29":[2,94],"31":187,"32":[1,84],"33":188,"34":[1,82],"35":[1,83],"47":186,"50":[1,51],"59":[2,94],"86":185,"87":[2,94]},{"1":[2,33],"4":[2,33],"29":[2,33],"30":[2,33],"48":[2,33],"51":[2,33],"59":[2,33],"63":[2,33],"75":[2,33],"76":[2,33],"77":[2,33],"78":[2,33],"81":[2,33],"82":[2,33],"83":[2,33],"84":[2,33],"87":[2,33],"96":[2,33],"97":[2,33],"98":[2,33],"103":[2,33],"112":[2,33],"114":[2,33],"115":[2,33],"116":[2,33],"120":[2,
|
74],"150":[2,74],"151":[2,74]},{"4":[2,94],"28":189,"29":[2,94],"31":187,"32":[1,84],"33":188,"34":[1,82],"35":[1,83],"47":186,"50":[1,51],"59":[2,94],"86":185,"87":[2,94]},{"1":[2,33],"4":[2,33],"29":[2,33],"30":[2,33],"48":[2,33],"51":[2,33],"59":[2,33],"63":[2,33],"75":[2,33],"76":[2,33],"77":[2,33],"78":[2,33],"81":[2,33],"82":[2,33],"83":[2,33],"84":[2,33],"87":[2,33],"96":[2,33],"97":[2,33],"98":[2,33],"103":[2,33],"112":[2,33],"114":[2,33],"115":[2,33],"116":[2,33],"120":[2,33],"126":[2,33],
|
||||||
33],"126":[2,33],"127":[2,33],"128":[2,33],"137":[2,33],"138":[2,33],"139":[2,33],"140":[2,33],"141":[2,33],"142":[2,33],"143":[2,33],"144":[2,33],"145":[2,33],"146":[2,33],"147":[2,33],"148":[2,33],"149":[2,33],"150":[2,33],"151":[2,33]},{"1":[2,34],"4":[2,34],"29":[2,34],"30":[2,34],"48":[2,34],"51":[2,34],"59":[2,34],"63":[2,34],"75":[2,34],"76":[2,34],"77":[2,34],"78":[2,34],"81":[2,34],"82":[2,34],"83":[2,34],"84":[2,34],"87":[2,34],"96":[2,34],"97":[2,34],"98":[2,34],"103":[2,34],"112":[2,34],
|
"127":[2,33],"128":[2,33],"137":[2,33],"138":[2,33],"139":[2,33],"140":[2,33],"141":[2,33],"142":[2,33],"143":[2,33],"144":[2,33],"145":[2,33],"146":[2,33],"147":[2,33],"148":[2,33],"149":[2,33],"150":[2,33],"151":[2,33]},{"1":[2,34],"4":[2,34],"29":[2,34],"30":[2,34],"48":[2,34],"51":[2,34],"59":[2,34],"63":[2,34],"75":[2,34],"76":[2,34],"77":[2,34],"78":[2,34],"81":[2,34],"82":[2,34],"83":[2,34],"84":[2,34],"87":[2,34],"96":[2,34],"97":[2,34],"98":[2,34],"103":[2,34],"112":[2,34],"114":[2,34],"115":[2,
|
||||||
"114":[2,34],"115":[2,34],"116":[2,34],"120":[2,34],"126":[2,34],"127":[2,34],"128":[2,34],"137":[2,34],"138":[2,34],"139":[2,34],"140":[2,34],"141":[2,34],"142":[2,34],"143":[2,34],"144":[2,34],"145":[2,34],"146":[2,34],"147":[2,34],"148":[2,34],"149":[2,34],"150":[2,34],"151":[2,34]},{"1":[2,32],"4":[2,32],"29":[2,32],"30":[2,32],"46":[2,32],"48":[2,32],"51":[2,32],"59":[2,32],"63":[2,32],"75":[2,32],"76":[2,32],"77":[2,32],"78":[2,32],"81":[2,32],"82":[2,32],"83":[2,32],"84":[2,32],"87":[2,32],
|
34],"116":[2,34],"120":[2,34],"126":[2,34],"127":[2,34],"128":[2,34],"137":[2,34],"138":[2,34],"139":[2,34],"140":[2,34],"141":[2,34],"142":[2,34],"143":[2,34],"144":[2,34],"145":[2,34],"146":[2,34],"147":[2,34],"148":[2,34],"149":[2,34],"150":[2,34],"151":[2,34]},{"1":[2,32],"4":[2,32],"29":[2,32],"30":[2,32],"46":[2,32],"48":[2,32],"51":[2,32],"59":[2,32],"63":[2,32],"75":[2,32],"76":[2,32],"77":[2,32],"78":[2,32],"81":[2,32],"82":[2,32],"83":[2,32],"84":[2,32],"87":[2,32],"89":[2,32],"96":[2,32],
|
||||||
"89":[2,32],"96":[2,32],"97":[2,32],"98":[2,32],"103":[2,32],"112":[2,32],"114":[2,32],"115":[2,32],"116":[2,32],"120":[2,32],"126":[2,32],"127":[2,32],"128":[2,32],"137":[2,32],"138":[2,32],"139":[2,32],"140":[2,32],"141":[2,32],"142":[2,32],"143":[2,32],"144":[2,32],"145":[2,32],"146":[2,32],"147":[2,32],"148":[2,32],"149":[2,32],"150":[2,32],"151":[2,32]},{"1":[2,31],"4":[2,31],"29":[2,31],"30":[2,31],"51":[2,31],"59":[2,31],"63":[2,31],"82":[2,31],"87":[2,31],"98":[2,31],"103":[2,31],"108":[2,
|
"97":[2,32],"98":[2,32],"103":[2,32],"112":[2,32],"114":[2,32],"115":[2,32],"116":[2,32],"120":[2,32],"126":[2,32],"127":[2,32],"128":[2,32],"137":[2,32],"138":[2,32],"139":[2,32],"140":[2,32],"141":[2,32],"142":[2,32],"143":[2,32],"144":[2,32],"145":[2,32],"146":[2,32],"147":[2,32],"148":[2,32],"149":[2,32],"150":[2,32],"151":[2,32]},{"1":[2,31],"4":[2,31],"29":[2,31],"30":[2,31],"51":[2,31],"59":[2,31],"63":[2,31],"82":[2,31],"87":[2,31],"98":[2,31],"103":[2,31],"108":[2,31],"109":[2,31],"112":[2,
|
||||||
31],"109":[2,31],"112":[2,31],"114":[2,31],"115":[2,31],"116":[2,31],"120":[2,31],"126":[2,31],"127":[2,31],"128":[2,31],"131":[2,31],"133":[2,31],"137":[2,31],"138":[2,31],"139":[2,31],"140":[2,31],"141":[2,31],"142":[2,31],"143":[2,31],"144":[2,31],"145":[2,31],"146":[2,31],"147":[2,31],"148":[2,31],"149":[2,31],"151":[2,31]},{"1":[2,7],"4":[2,7],"7":190,"8":7,"9":8,"10":23,"11":24,"12":[1,25],"13":[1,26],"14":[1,27],"15":9,"16":10,"17":11,"18":12,"19":13,"20":14,"21":15,"22":16,"23":17,"24":18,
|
31],"114":[2,31],"115":[2,31],"116":[2,31],"120":[2,31],"126":[2,31],"127":[2,31],"128":[2,31],"131":[2,31],"133":[2,31],"137":[2,31],"138":[2,31],"139":[2,31],"140":[2,31],"141":[2,31],"142":[2,31],"143":[2,31],"144":[2,31],"145":[2,31],"146":[2,31],"147":[2,31],"148":[2,31],"149":[2,31],"151":[2,31]},{"1":[2,7],"4":[2,7],"7":190,"8":7,"9":8,"10":23,"11":24,"12":[1,25],"13":[1,26],"14":[1,27],"15":9,"16":10,"17":11,"18":12,"19":13,"20":14,"21":15,"22":16,"23":17,"24":18,"25":19,"26":20,"27":21,"28":22,
|
||||||
"25":19,"26":20,"27":21,"28":22,"30":[2,7],"31":79,"32":[1,84],"33":56,"34":[1,82],"35":[1,83],"36":29,"37":[1,57],"38":[1,58],"39":[1,59],"40":[1,60],"41":[1,61],"42":[1,62],"43":[1,63],"44":[1,64],"45":28,"49":[1,52],"50":[1,51],"52":[1,36],"55":37,"56":[1,70],"57":[1,71],"62":[1,68],"65":49,"67":34,"68":80,"69":54,"70":55,"71":30,"72":31,"73":32,"74":[1,33],"85":[1,81],"88":[1,50],"92":[1,35],"95":[1,69],"100":[1,67],"102":[1,66],"106":[1,44],"110":[1,53],"111":[1,65],"113":45,"114":[1,74],"116":[1,
|
"30":[2,7],"31":79,"32":[1,84],"33":56,"34":[1,82],"35":[1,83],"36":29,"37":[1,57],"38":[1,58],"39":[1,59],"40":[1,60],"41":[1,61],"42":[1,62],"43":[1,63],"44":[1,64],"45":28,"49":[1,52],"50":[1,51],"52":[1,36],"55":37,"56":[1,70],"57":[1,71],"62":[1,68],"65":49,"67":34,"68":80,"69":54,"70":55,"71":30,"72":31,"73":32,"74":[1,33],"85":[1,81],"88":[1,50],"92":[1,35],"95":[1,69],"100":[1,67],"102":[1,66],"106":[1,44],"110":[1,53],"111":[1,65],"113":45,"114":[1,74],"116":[1,75],"117":46,"118":[1,76],
|
||||||
75],"117":46,"118":[1,76],"119":47,"120":[1,77],"121":78,"129":[1,48],"134":43,"135":[1,72],"136":[1,73],"139":[1,38],"140":[1,39],"141":[1,40],"142":[1,41],"143":[1,42]},{"1":[2,4]},{"4":[1,86],"30":[1,191]},{"1":[2,30],"4":[2,30],"29":[2,30],"30":[2,30],"51":[2,30],"59":[2,30],"63":[2,30],"82":[2,30],"87":[2,30],"98":[2,30],"103":[2,30],"108":[2,30],"109":[2,30],"112":[2,30],"114":[2,30],"115":[2,30],"116":[2,30],"120":[2,30],"126":[2,30],"127":[2,30],"128":[2,30],"131":[2,30],"133":[2,30],"137":[2,
|
"119":47,"120":[1,77],"121":78,"129":[1,48],"134":43,"135":[1,72],"136":[1,73],"139":[1,38],"140":[1,39],"141":[1,40],"142":[1,41],"143":[1,42]},{"1":[2,4]},{"4":[1,86],"30":[1,191]},{"1":[2,30],"4":[2,30],"29":[2,30],"30":[2,30],"51":[2,30],"59":[2,30],"63":[2,30],"82":[2,30],"87":[2,30],"98":[2,30],"103":[2,30],"108":[2,30],"109":[2,30],"112":[2,30],"114":[2,30],"115":[2,30],"116":[2,30],"120":[2,30],"126":[2,30],"127":[2,30],"128":[2,30],"131":[2,30],"133":[2,30],"137":[2,30],"138":[2,30],"139":[2,
|
||||||
30],"138":[2,30],"139":[2,30],"140":[2,30],"141":[2,30],"142":[2,30],"143":[2,30],"144":[2,30],"145":[2,30],"146":[2,30],"147":[2,30],"148":[2,30],"149":[2,30],"151":[2,30]},{"1":[2,201],"4":[2,201],"29":[2,201],"30":[2,201],"51":[2,201],"59":[2,201],"63":[2,201],"82":[2,201],"87":[2,201],"98":[2,201],"103":[2,201],"112":[2,201],"114":[2,201],"115":[2,201],"116":[2,201],"120":[2,201],"126":[2,201],"127":[2,201],"128":[2,201],"137":[2,201],"138":[2,201],"139":[2,201],"140":[2,201],"141":[2,201],"142":[2,
|
30],"140":[2,30],"141":[2,30],"142":[2,30],"143":[2,30],"144":[2,30],"145":[2,30],"146":[2,30],"147":[2,30],"148":[2,30],"149":[2,30],"151":[2,30]},{"1":[2,201],"4":[2,201],"29":[2,201],"30":[2,201],"51":[2,201],"59":[2,201],"63":[2,201],"82":[2,201],"87":[2,201],"98":[2,201],"103":[2,201],"112":[2,201],"114":[2,201],"115":[2,201],"116":[2,201],"120":[2,201],"126":[2,201],"127":[2,201],"128":[2,201],"137":[2,201],"138":[2,201],"139":[2,201],"140":[2,201],"141":[2,201],"142":[2,201],"143":[2,201],
|
||||||
201],"143":[2,201],"144":[2,201],"145":[2,201],"146":[2,201],"147":[2,201],"148":[2,201],"149":[2,201],"151":[2,201]},{"1":[2,202],"4":[2,202],"29":[2,202],"30":[2,202],"51":[2,202],"59":[2,202],"63":[2,202],"82":[2,202],"87":[2,202],"98":[2,202],"103":[2,202],"112":[2,202],"114":[2,202],"115":[2,202],"116":[2,202],"120":[2,202],"126":[2,202],"127":[2,202],"128":[2,202],"137":[2,202],"138":[2,202],"139":[2,202],"140":[2,202],"141":[2,202],"142":[2,202],"143":[2,202],"144":[2,202],"145":[2,202],"146":[2,
|
"144":[2,201],"145":[2,201],"146":[2,201],"147":[2,201],"148":[2,201],"149":[2,201],"151":[2,201]},{"1":[2,202],"4":[2,202],"29":[2,202],"30":[2,202],"51":[2,202],"59":[2,202],"63":[2,202],"82":[2,202],"87":[2,202],"98":[2,202],"103":[2,202],"112":[2,202],"114":[2,202],"115":[2,202],"116":[2,202],"120":[2,202],"126":[2,202],"127":[2,202],"128":[2,202],"137":[2,202],"138":[2,202],"139":[2,202],"140":[2,202],"141":[2,202],"142":[2,202],"143":[2,202],"144":[2,202],"145":[2,202],"146":[2,202],"147":[2,
|
||||||
202],"147":[2,202],"148":[2,202],"149":[2,202],"151":[2,202]},{"1":[2,56],"4":[2,56],"8":192,"9":140,"10":23,"11":24,"12":[1,25],"13":[1,26],"14":[1,27],"15":9,"16":10,"17":11,"18":12,"19":13,"20":14,"21":15,"22":16,"23":17,"24":18,"25":19,"26":20,"27":21,"28":22,"29":[2,56],"30":[2,56],"31":79,"32":[1,84],"33":56,"34":[1,82],"35":[1,83],"36":29,"37":[1,57],"38":[1,58],"39":[1,59],"40":[1,60],"41":[1,61],"42":[1,62],"43":[1,63],"44":[1,64],"45":28,"49":[1,52],"50":[1,51],"51":[2,56],"52":[1,36],"55":37,
|
202],"148":[2,202],"149":[2,202],"151":[2,202]},{"1":[2,56],"4":[2,56],"8":192,"9":140,"10":23,"11":24,"12":[1,25],"13":[1,26],"14":[1,27],"15":9,"16":10,"17":11,"18":12,"19":13,"20":14,"21":15,"22":16,"23":17,"24":18,"25":19,"26":20,"27":21,"28":22,"29":[2,56],"30":[2,56],"31":79,"32":[1,84],"33":56,"34":[1,82],"35":[1,83],"36":29,"37":[1,57],"38":[1,58],"39":[1,59],"40":[1,60],"41":[1,61],"42":[1,62],"43":[1,63],"44":[1,64],"45":28,"49":[1,52],"50":[1,51],"51":[2,56],"52":[1,36],"55":37,"56":[1,
|
||||||
"56":[1,70],"57":[1,71],"59":[2,56],"62":[1,68],"63":[2,56],"65":49,"67":34,"68":80,"69":54,"70":55,"71":30,"72":31,"73":32,"74":[1,33],"82":[2,56],"85":[1,81],"87":[2,56],"88":[1,50],"92":[1,35],"95":[1,69],"98":[2,56],"100":[1,67],"102":[1,66],"103":[2,56],"106":[1,44],"110":[1,53],"111":[1,65],"112":[2,56],"113":45,"114":[2,56],"115":[2,56],"116":[2,56],"117":46,"118":[1,76],"119":47,"120":[2,56],"121":78,"126":[2,56],"127":[2,56],"128":[2,56],"129":[1,48],"134":43,"135":[1,72],"136":[1,73],"137":[2,
|
70],"57":[1,71],"59":[2,56],"62":[1,68],"63":[2,56],"65":49,"67":34,"68":80,"69":54,"70":55,"71":30,"72":31,"73":32,"74":[1,33],"82":[2,56],"85":[1,81],"87":[2,56],"88":[1,50],"92":[1,35],"95":[1,69],"98":[2,56],"100":[1,67],"102":[1,66],"103":[2,56],"106":[1,44],"110":[1,53],"111":[1,65],"112":[2,56],"113":45,"114":[2,56],"115":[2,56],"116":[2,56],"117":46,"118":[1,76],"119":47,"120":[2,56],"121":78,"126":[2,56],"127":[2,56],"128":[2,56],"129":[1,48],"134":43,"135":[1,72],"136":[1,73],"137":[2,56],
|
||||||
56],"138":[2,56],"139":[2,56],"140":[2,56],"141":[2,56],"142":[2,56],"143":[2,56],"144":[2,56],"145":[2,56],"146":[2,56],"147":[2,56],"148":[2,56],"149":[2,56],"151":[2,56]},{"8":193,"9":140,"10":23,"11":24,"12":[1,25],"13":[1,26],"14":[1,27],"15":9,"16":10,"17":11,"18":12,"19":13,"20":14,"21":15,"22":16,"23":17,"24":18,"25":19,"26":20,"27":21,"28":22,"31":79,"32":[1,84],"33":56,"34":[1,82],"35":[1,83],"36":29,"37":[1,57],"38":[1,58],"39":[1,59],"40":[1,60],"41":[1,61],"42":[1,62],"43":[1,63],"44":[1,
|
"138":[2,56],"139":[2,56],"140":[2,56],"141":[2,56],"142":[2,56],"143":[2,56],"144":[2,56],"145":[2,56],"146":[2,56],"147":[2,56],"148":[2,56],"149":[2,56],"151":[2,56]},{"8":193,"9":140,"10":23,"11":24,"12":[1,25],"13":[1,26],"14":[1,27],"15":9,"16":10,"17":11,"18":12,"19":13,"20":14,"21":15,"22":16,"23":17,"24":18,"25":19,"26":20,"27":21,"28":22,"31":79,"32":[1,84],"33":56,"34":[1,82],"35":[1,83],"36":29,"37":[1,57],"38":[1,58],"39":[1,59],"40":[1,60],"41":[1,61],"42":[1,62],"43":[1,63],"44":[1,
|
||||||
64],"45":28,"49":[1,52],"50":[1,51],"52":[1,36],"55":37,"56":[1,70],"57":[1,71],"62":[1,68],"65":49,"67":34,"68":80,"69":54,"70":55,"71":30,"72":31,"73":32,"74":[1,33],"85":[1,81],"88":[1,50],"92":[1,35],"95":[1,69],"100":[1,67],"102":[1,66],"106":[1,44],"110":[1,53],"111":[1,65],"113":45,"114":[1,74],"116":[1,75],"117":46,"118":[1,76],"119":47,"120":[1,77],"121":78,"129":[1,48],"134":43,"135":[1,72],"136":[1,73],"139":[1,38],"140":[1,39],"141":[1,40],"142":[1,41],"143":[1,42]},{"8":194,"9":140,"10":23,
|
64],"45":28,"49":[1,52],"50":[1,51],"52":[1,36],"55":37,"56":[1,70],"57":[1,71],"62":[1,68],"65":49,"67":34,"68":80,"69":54,"70":55,"71":30,"72":31,"73":32,"74":[1,33],"85":[1,81],"88":[1,50],"92":[1,35],"95":[1,69],"100":[1,67],"102":[1,66],"106":[1,44],"110":[1,53],"111":[1,65],"113":45,"114":[1,74],"116":[1,75],"117":46,"118":[1,76],"119":47,"120":[1,77],"121":78,"129":[1,48],"134":43,"135":[1,72],"136":[1,73],"139":[1,38],"140":[1,39],"141":[1,40],"142":[1,41],"143":[1,42]},{"8":194,"9":140,"10":23,
|
||||||
"11":24,"12":[1,25],"13":[1,26],"14":[1,27],"15":9,"16":10,"17":11,"18":12,"19":13,"20":14,"21":15,"22":16,"23":17,"24":18,"25":19,"26":20,"27":21,"28":22,"31":79,"32":[1,84],"33":56,"34":[1,82],"35":[1,83],"36":29,"37":[1,57],"38":[1,58],"39":[1,59],"40":[1,60],"41":[1,61],"42":[1,62],"43":[1,63],"44":[1,64],"45":28,"49":[1,52],"50":[1,51],"52":[1,36],"55":37,"56":[1,70],"57":[1,71],"62":[1,68],"65":49,"67":34,"68":80,"69":54,"70":55,"71":30,"72":31,"73":32,"74":[1,33],"85":[1,81],"88":[1,50],"92":[1,
|
"11":24,"12":[1,25],"13":[1,26],"14":[1,27],"15":9,"16":10,"17":11,"18":12,"19":13,"20":14,"21":15,"22":16,"23":17,"24":18,"25":19,"26":20,"27":21,"28":22,"31":79,"32":[1,84],"33":56,"34":[1,82],"35":[1,83],"36":29,"37":[1,57],"38":[1,58],"39":[1,59],"40":[1,60],"41":[1,61],"42":[1,62],"43":[1,63],"44":[1,64],"45":28,"49":[1,52],"50":[1,51],"52":[1,36],"55":37,"56":[1,70],"57":[1,71],"62":[1,68],"65":49,"67":34,"68":80,"69":54,"70":55,"71":30,"72":31,"73":32,"74":[1,33],"85":[1,81],"88":[1,50],"92":[1,
|
||||||
35],"95":[1,69],"100":[1,67],"102":[1,66],"106":[1,44],"110":[1,53],"111":[1,65],"113":45,"114":[1,74],"116":[1,75],"117":46,"118":[1,76],"119":47,"120":[1,77],"121":78,"129":[1,48],"134":43,"135":[1,72],"136":[1,73],"139":[1,38],"140":[1,39],"141":[1,40],"142":[1,41],"143":[1,42]},{"8":195,"9":140,"10":23,"11":24,"12":[1,25],"13":[1,26],"14":[1,27],"15":9,"16":10,"17":11,"18":12,"19":13,"20":14,"21":15,"22":16,"23":17,"24":18,"25":19,"26":20,"27":21,"28":22,"31":79,"32":[1,84],"33":56,"34":[1,82],
|
35],"95":[1,69],"100":[1,67],"102":[1,66],"106":[1,44],"110":[1,53],"111":[1,65],"113":45,"114":[1,74],"116":[1,75],"117":46,"118":[1,76],"119":47,"120":[1,77],"121":78,"129":[1,48],"134":43,"135":[1,72],"136":[1,73],"139":[1,38],"140":[1,39],"141":[1,40],"142":[1,41],"143":[1,42]},{"8":195,"9":140,"10":23,"11":24,"12":[1,25],"13":[1,26],"14":[1,27],"15":9,"16":10,"17":11,"18":12,"19":13,"20":14,"21":15,"22":16,"23":17,"24":18,"25":19,"26":20,"27":21,"28":22,"31":79,"32":[1,84],"33":56,"34":[1,82],
|
||||||
|
@ -454,16 +454,16 @@ function(){return true};$.prototype.makeReturn=function(){this.returns=true;retu
|
||||||
J=a.scope;p=this.name&&this.name.compile(a)||J.freeVariable("i");n=this.index&&this.index.compile(a);if(p&&!this.pattern&&(H||!f))J.find(p,{immediate:true});n&&J.find(n,{immediate:true});pa||(ba=J.freeVariable("result"));k=f?J.freeVariable("i"):H?p:n||J.freeVariable("i");i=qa="";b=C.wrap([this.body]);if(H){fa=ka.compileVariables(a);g=ka.compile(R(a,{index:k,step:this.step}))}else{ma=J.freeVariable("ref");fa=""+ma+" = "+this.source.compile(a)+";";if(this.pattern)w=(new j(this.name,q(""+ma+"["+k+"]"))).compile(R(a,
|
J=a.scope;p=this.name&&this.name.compile(a)||J.freeVariable("i");n=this.index&&this.index.compile(a);if(p&&!this.pattern&&(H||!f))J.find(p,{immediate:true});n&&J.find(n,{immediate:true});pa||(ba=J.freeVariable("result"));k=f?J.freeVariable("i"):H?p:n||J.freeVariable("i");i=qa="";b=C.wrap([this.body]);if(H){fa=ka.compileVariables(a);g=ka.compile(R(a,{index:k,step:this.step}))}else{ma=J.freeVariable("ref");fa=""+ma+" = "+this.source.compile(a)+";";if(this.pattern)w=(new j(this.name,q(""+ma+"["+k+"]"))).compile(R(a,
|
||||||
{indent:this.idt(1),top:true,keepLevel:true}))+"\n";else if(p)w=""+p+" = "+ma+"["+k+"]";if(!this.object){g=J.freeVariable("len");J=this.step?""+k+" += "+this.step.compile(a):""+k+"++";g=""+k+" = 0, "+g+" = "+ma+".length; "+k+" < "+g+"; "+J}}fa=(fa=(ba?""+ba+" = []; ":"")+fa)?""+this.tab+fa+"\n"+this.tab:this.tab;J=this.compileReturnValue(ba,a);pa||(b=I.wrap(ba,b));if(this.guard)b=C.wrap([new E(this.guard,b)]);if(f){H&&b.unshift(q("var "+p+" = "+k));w&&b.unshift(q("var "+w));n&&b.unshift(q("var "+
|
{indent:this.idt(1),top:true,keepLevel:true}))+"\n";else if(p)w=""+p+" = "+ma+"["+k+"]";if(!this.object){g=J.freeVariable("len");J=this.step?""+k+" += "+this.step.compile(a):""+k+"++";g=""+k+" = 0, "+g+" = "+ma+".length; "+k+" < "+g+"; "+J}}fa=(fa=(ba?""+ba+" = []; ":"")+fa)?""+this.tab+fa+"\n"+this.tab:this.tab;J=this.compileReturnValue(ba,a);pa||(b=I.wrap(ba,b));if(this.guard)b=C.wrap([new E(this.guard,b)]);if(f){H&&b.unshift(q("var "+p+" = "+k));w&&b.unshift(q("var "+w));n&&b.unshift(q("var "+
|
||||||
n+" = "+k));b=d.wrap(b,true)}else qa=(w||"")&&(this.pattern?w:""+this.idt(1)+w+";\n");if(this.object){g=""+k+" in "+ma;this.raw||(i="\n"+this.idt(1)+"if (!"+ea("hasProp")+".call("+ma+", "+k+")) continue;")}b=b.compile(R(a,{indent:this.idt(1),top:true}));return""+fa+"for ("+g+") {"+i+"\n"+qa+b+"\n"+this.tab+"}"+J};return $}();z.SwitchNode=function(){ia=function(a,b,f){this.otherwise=f;this.cases=b;this.subject=a;ia.__super__.constructor.call(this);this.tags.subjectless=!this.subject;this.subject||
|
n+" = "+k));b=d.wrap(b,true)}else qa=(w||"")&&(this.pattern?w:""+this.idt(1)+w+";\n");if(this.object){g=""+k+" in "+ma;this.raw||(i="\n"+this.idt(1)+"if (!"+ea("hasProp")+".call("+ma+", "+k+")) continue;")}b=b.compile(R(a,{indent:this.idt(1),top:true}));return""+fa+"for ("+g+") {"+i+"\n"+qa+b+"\n"+this.tab+"}"+J};return $}();z.SwitchNode=function(){ia=function(a,b,f){this.otherwise=f;this.cases=b;this.subject=a;ia.__super__.constructor.call(this);this.tags.subjectless=!this.subject;this.subject||
|
||||||
(this.subject=q("true"));return this};O(ia,h);ia.prototype["class"]="SwitchNode";ia.prototype.children=["subject","cases","otherwise"];ia.prototype.isStatement=function(){return true};ia.prototype.makeReturn=function(){var a,b,f,g;f=this.cases;a=0;for(b=f.length;a<b;a++){g=f[a];g[1].makeReturn()}this.otherwise&&this.otherwise.makeReturn();return this};ia.prototype.compileNode=function(a){var b,f,g,i,n,k,p,w,H,J,ba;ba=a.indent=this.idt(1);a.top=true;w=""+this.tab+"switch ("+this.subject.compile(a)+
|
(this.subject=q("true"));return this};O(ia,h);ia.prototype["class"]="SwitchNode";ia.prototype.children=["subject","cases","otherwise"];ia.prototype.isStatement=function(){return true};ia.prototype.makeReturn=function(){var a,b,f,g;f=this.cases;a=0;for(b=f.length;a<b;a++){g=f[a];g[1].makeReturn()}this.otherwise&&this.otherwise.makeReturn();return this};ia.prototype.compileNode=function(a){var b,f,g,i,n,k,p,w,H,J,ba;ba=a.indent=this.idt(2);a.top=true;w=""+this.tab+"switch ("+this.subject.compile(a)+
|
||||||
") {";n=this.cases;b=0;for(g=n.length;b<g;b++){k=k=n[b];f=k[0];p=k[1];J=p.expressions;k=s([f]);f=0;for(i=k.length;f<i;f++){H=k[f];if(this.tags.subjectless)H=new m("!!",new u(H));w+="\n"+this.tab+"case "+H.compile(a)+":"}w+="\n"+p.compile(a);J[J.length-1]instanceof y||(w+="\n"+ba+"break;")}if(this.otherwise)w+="\n"+this.tab+"default:\n"+this.otherwise.compile(a);w+="\n"+this.tab+"}";return w};return ia}();z.IfNode=function(){E=function(a,b,f){this.tags=f;this.body=b;this.condition=a;this.tags||(this.tags=
|
") {";n=this.cases;b=0;for(g=n.length;b<g;b++){k=k=n[b];f=k[0];p=k[1];J=p.expressions;k=s([f]);f=0;for(i=k.length;f<i;f++){H=k[f];if(this.tags.subjectless)H=new m("!!",new u(H));w+="\n"+this.idt(1)+"case "+H.compile(a)+":"}w+="\n"+p.compile(a);J[J.length-1]instanceof y||(w+="\n"+ba+"break;")}if(this.otherwise)w+="\n"+this.idt(1)+"default:\n"+this.otherwise.compile(a);w+="\n"+this.tab+"}";return w};return ia}();z.IfNode=function(){E=function(a,b,f){this.tags=f;this.body=b;this.condition=a;this.tags||
|
||||||
{});if(this.tags.invert)if(this.condition instanceof m&&this.condition.isInvertible())this.condition.invert();else this.condition=new m("!",new u(this.condition));this.elseBody=null;this.isChain=false;return this};O(E,h);E.prototype["class"]="IfNode";E.prototype.children=["condition","body","elseBody","assigner"];E.prototype.topSensitive=function(){return true};E.prototype.bodyNode=function(){return this.body==null?undefined:this.body.unwrap()};E.prototype.elseBodyNode=function(){return this.elseBody==
|
(this.tags={});if(this.tags.invert)if(this.condition instanceof m&&this.condition.isInvertible())this.condition.invert();else this.condition=new m("!",new u(this.condition));this.elseBody=null;this.isChain=false;return this};O(E,h);E.prototype["class"]="IfNode";E.prototype.children=["condition","body","elseBody","assigner"];E.prototype.topSensitive=function(){return true};E.prototype.bodyNode=function(){return this.body==null?undefined:this.body.unwrap()};E.prototype.elseBodyNode=function(){return this.elseBody==
|
||||||
null?undefined:this.elseBody.unwrap()};E.prototype.forceStatement=function(){this.tags.statement=true;return this};E.prototype.addElse=function(a,b){if(this.isChain)this.elseBodyNode().addElse(a,b);else{this.isChain=a instanceof E;this.elseBody=this.ensureExpressions(a)}return this};E.prototype.isStatement=function(a){return this.statement||(this.statement=!!(a&&a.top||this.tags.statement||this.bodyNode().isStatement(a)||this.elseBody&&this.elseBodyNode().isStatement(a)))};E.prototype.compileCondition=
|
null?undefined:this.elseBody.unwrap()};E.prototype.forceStatement=function(){this.tags.statement=true;return this};E.prototype.addElse=function(a,b){if(this.isChain)this.elseBodyNode().addElse(a,b);else{this.isChain=a instanceof E;this.elseBody=this.ensureExpressions(a)}return this};E.prototype.isStatement=function(a){return this.statement||(this.statement=!!(a&&a.top||this.tags.statement||this.bodyNode().isStatement(a)||this.elseBody&&this.elseBodyNode().isStatement(a)))};E.prototype.compileCondition=
|
||||||
function(a){var b,f,g,i,n;n=s([this.condition]);if(n.length===1)n[0].parenthetical=true;g=[];b=0;for(f=n.length;b<f;b++){i=n[b];g.push(i.compile(a))}return g.join(" || ")};E.prototype.compileNode=function(a){return this.isStatement(a)?this.compileStatement(a):this.compileTernary(a)};E.prototype.makeReturn=function(){if(this.isStatement()){this.body&&(this.body=this.ensureExpressions(this.body.makeReturn()));this.elseBody&&(this.elseBody=this.ensureExpressions(this.elseBody.makeReturn()));return this}else return new y(this)};
|
function(a){var b,f,g,i,n;n=s([this.condition]);if(n.length===1)n[0].parenthetical=true;g=[];b=0;for(f=n.length;b<f;b++){i=n[b];g.push(i.compile(a))}return g.join(" || ")};E.prototype.compileNode=function(a){return this.isStatement(a)?this.compileStatement(a):this.compileTernary(a)};E.prototype.makeReturn=function(){if(this.isStatement()){this.body&&(this.body=this.ensureExpressions(this.body.makeReturn()));this.elseBody&&(this.elseBody=this.ensureExpressions(this.elseBody.makeReturn()));return this}else return new y(this)};
|
||||||
E.prototype.ensureExpressions=function(a){return a instanceof C?a:new C([a])};E.prototype.compileStatement=function(a){var b,f,g;g=Z(a,"top");b=Z(a,"chainChild");f=R(a);a.indent=this.idt(1);a.top=true;g=b||g&&!this.isStatement(a)?"":this.idt();b&&this.idt();b=this.body.compile(a);f=""+g+"if ("+this.compileCondition(f)+") {\n"+b+"\n"+this.tab+"}";if(!this.elseBody)return f;a=this.isChain?" else "+this.elseBodyNode().compile(R(a,{indent:this.idt(),chainChild:true})):" else {\n"+this.elseBody.compile(a)+
|
E.prototype.ensureExpressions=function(a){return a instanceof C?a:new C([a])};E.prototype.compileStatement=function(a){var b,f,g;g=Z(a,"top");b=Z(a,"chainChild");f=R(a);a.indent=this.idt(1);a.top=true;g=b||g&&!this.isStatement(a)?"":this.idt();b&&this.idt();b=this.body.compile(a);f=""+g+"if ("+this.compileCondition(f)+") {\n"+b+"\n"+this.tab+"}";if(!this.elseBody)return f;a=this.isChain?" else "+this.elseBodyNode().compile(R(a,{indent:this.idt(),chainChild:true})):" else {\n"+this.elseBody.compile(a)+
|
||||||
"\n"+this.tab+"}";return""+f+a};E.prototype.compileTernary=function(a){var b;this.bodyNode().tags.operation=this.condition.tags.operation=true;if(this.elseBody)this.elseBodyNode().tags.operation=true;b=this.condition.compile(a)+" ? "+this.bodyNode().compile(a);a=this.elseBody?this.elseBodyNode().compile(a):"null";b=""+b+" : "+a;return this.tags.operation?"("+b+")":b};return E}();I=z.PushNode={wrap:function(a,b){var f;f=b.unwrap();if(f.isPureStatement()||f.containsPureStatement())return b;return C.wrap([new e(new G(q(a),
|
"\n"+this.tab+"}";return""+f+a};E.prototype.compileTernary=function(a){var b;this.bodyNode().tags.operation=this.condition.tags.operation=true;if(this.elseBody)this.elseBodyNode().tags.operation=true;b=this.condition.compile(a)+" ? "+this.bodyNode().compile(a);a=this.elseBody?this.elseBodyNode().compile(a):"null";b=""+b+" : "+a;return this.tags.operation?"("+b+")":b};return E}();I=z.PushNode={wrap:function(a,b){var f;f=b.unwrap();if(f.isPureStatement()||f.containsPureStatement())return b;return C.wrap([new e(new G(q(a),
|
||||||
[new x(q("push"))]),[f])])}};d=z.ClosureNode={wrap:function(a,b){var f,g,i,n;if(a.containsPureStatement())return a;g=new u(new A([],C.wrap([a])));f=[];i=a.contains(function(k){return k instanceof L&&k.value==="arguments"});n=a.contains(function(k){return k instanceof L&&k.value==="this"||k instanceof A&&k.bound});if(i||n){n=q(i?"apply":"call");f=[q("this")];i&&f.push(q("arguments"));g=new G(g,[new x(n)])}f=new e(g,f);return b?C.wrap([f]):f}};oa={"extends":'function(child, parent) {\n var ctor = function(){};\n ctor.prototype = parent.prototype;\n child.prototype = new ctor();\n child.prototype.constructor = child;\n if (typeof parent.extended === "function") parent.extended(child);\n child.__super__ = parent.prototype;\n }',
|
[new x(q("push"))]),[f])])}};d=z.ClosureNode={wrap:function(a,b){var f,g,i,n;if(a.containsPureStatement())return a;g=new u(new A([],C.wrap([a])));f=[];i=a.contains(function(k){return k instanceof L&&k.value==="arguments"});n=a.contains(function(k){return k instanceof L&&k.value==="this"||k instanceof A&&k.bound});if(i||n){n=q(i?"apply":"call");f=[q("this")];i&&f.push(q("arguments"));g=new G(g,[new x(n)])}f=new e(g,f);return b?C.wrap([f]):f}};oa={"extends":'function(child, parent) {\n var ctor = function(){};\n ctor.prototype = parent.prototype;\n child.prototype = new ctor();\n child.prototype.constructor = child;\n if (typeof parent.extended === "function") parent.extended(child);\n child.__super__ = parent.prototype;\n }',
|
||||||
bind:"function(func, context) {\n return function(){ return func.apply(context, arguments); };\n }",hasProp:"Object.prototype.hasOwnProperty",slice:"Array.prototype.slice"};la=" ";na=/[ \t]+$/gm;Y=/^[a-zA-Z\$_](\w|\$)*$/;N=/^(((\b0(x|X)[0-9a-fA-F]+)|((\b[0-9]+(\.[0-9]+)?|\.[0-9]+)(e[+\-]?[0-9]+)?)))\b$/i;Q=/^-?\d+$/;aa=/^['"]/;q=function(a){return new L(a)};ea=function(a){var b;b="__"+a;U.root.assign(b,oa[a]);return b}}).call(this)});T["./coffee-script"]=new (function(){var z=this;(function(){var x,
|
bind:"function(func, context) {\n return function(){ return func.apply(context, arguments); };\n }",hasProp:"Object.prototype.hasOwnProperty",slice:"Array.prototype.slice"};la=" ";na=/[ \t]+$/gm;Y=/^[a-zA-Z\$_](\w|\$)*$/;N=/^(((\b0(x|X)[0-9a-fA-F]+)|((\b[0-9]+(\.[0-9]+)?|\.[0-9]+)(e[+\-]?[0-9]+)?)))\b$/i;Q=/^-?\d+$/;aa=/^['"]/;q=function(a){return new L(a)};ea=function(a){var b;b="__"+a;U.root.assign(b,oa[a]);return b}}).call(this)});T["./coffee-script"]=new (function(){var z=this;(function(){var x,
|
||||||
c,j,h,e,r,d;d=T("path");c=T("./lexer");x=c.Lexer;c=T("./parser");r=c.parser;if(T.extensions){h=T("fs");T.extensions[".coffee"]=function(A,K){var P;P=j(h.readFileSync(K,"utf8"));A.filename=""+K+" (compiled)";return A._compile(P,A.filename)}}else T.registerExtension&&T.registerExtension(".coffee",function(A){return j(A)});z.VERSION="0.9.3";z.compile=j=function(A,K){K||(K={});try{return r.parse(e.tokenize(A)).compile(K)}catch(P){if(K.fileName)P.message="In "+K.fileName+", "+P.message;throw P;}};z.tokens=
|
c,j,h,e,r,d;d=T("path");c=T("./lexer");x=c.Lexer;c=T("./parser");r=c.parser;if(T.extensions){h=T("fs");T.extensions[".coffee"]=function(A,K){var P;P=j(h.readFileSync(K,"utf8"));A.filename=""+K+" (compiled)";return A._compile(P,A.filename)}}else T.registerExtension&&T.registerExtension(".coffee",function(A){return j(A)});z.VERSION="0.9.4";z.compile=j=function(A,K){K||(K={});try{return r.parse(e.tokenize(A)).compile(K)}catch(P){if(K.fileName)P.message="In "+K.fileName+", "+P.message;throw P;}};z.tokens=
|
||||||
function(A){return e.tokenize(A)};z.nodes=function(A){return r.parse(e.tokenize(A))};z.run=function(A,K){var P;for(P=module;P.parent;)P=P.parent;P.filename=""+K.fileName+" (compiled)";if(P.moduleCache)P.moduleCache={};return P._compile(z.compile(A,K),P.filename)};z.eval=function(A,K){d.dirname(K.fileName);return eval(z.compile(A,K))};e=new x;r.lexer={lex:function(){var A;A=this.tokens[this.pos]||[""];this.pos+=1;this.yylineno=A[2];this.yytext=A[1];return A[0]},setInput:function(A){this.tokens=A;return this.pos=
|
function(A){return e.tokenize(A)};z.nodes=function(A){return r.parse(e.tokenize(A))};z.run=function(A,K){var P;for(P=module;P.parent;)P=P.parent;P.filename=""+K.fileName+" (compiled)";if(P.moduleCache)P.moduleCache={};return P._compile(z.compile(A,K),P.filename)};z.eval=function(A,K){d.dirname(K.fileName);return eval(z.compile(A,K))};e=new x;r.lexer={lex:function(){var A;A=this.tokens[this.pos]||[""];this.pos+=1;this.yylineno=A[2];this.yytext=A[1];return A[0]},setInput:function(A){this.tokens=A;return this.pos=
|
||||||
0},upcomingInput:function(){return""}};r.yy=T("./nodes")}).call(this)});T["./browser"]=new (function(){(function(){var z,x;z=T("./coffee-script");z.eval=function(c,j){return eval(z.compile(c,j))};z.run=function(c,j){return Function(z.compile(c,j))()};if(!(typeof window!=="undefined"&&window!==null))return null;z.load=function(c,j){var h;h=new (window.ActiveXObject||XMLHttpRequest)("Microsoft.XMLHTTP");h.open("GET",c,true);"overrideMimeType"in h&&h.overrideMimeType("text/plain");h.onreadystatechange=
|
0},upcomingInput:function(){return""}};r.yy=T("./nodes")}).call(this)});T["./browser"]=new (function(){(function(){var z,x;z=T("./coffee-script");z.eval=function(c,j){return eval(z.compile(c,j))};z.run=function(c,j){return Function(z.compile(c,j))()};if(!(typeof window!=="undefined"&&window!==null))return null;z.load=function(c,j){var h;h=new (window.ActiveXObject||XMLHttpRequest)("Microsoft.XMLHTTP");h.open("GET",c,true);"overrideMimeType"in h&&h.overrideMimeType("text/plain");h.onreadystatechange=
|
||||||
function(){if(h.readyState===4)return z.run(h.responseText,j)};return h.send(null)};x=function(){var c,j,h;h=document.getElementsByTagName("script");c=0;for(j=h.length;c<j;c++)(function(){var e=h[c];return e.type==="text/coffeescript"?e.src?z.load(e.src):setTimeout(function(){return z.run(e.innerHTML)}):null})();return null};window.addEventListener?addEventListener("DOMContentLoaded",x,false):attachEvent("onload",x)}).call(this)});return T["./coffee-script"]}();
|
function(){if(h.readyState===4)return z.run(h.responseText,j)};return h.send(null)};x=function(){var c,j,h;h=document.getElementsByTagName("script");c=0;for(j=h.length;c<j;c++)(function(){var e=h[c];return e.type==="text/coffeescript"?e.src?z.load(e.src):setTimeout(function(){return z.run(e.innerHTML)}):null})();return null};window.addEventListener?addEventListener("DOMContentLoaded",x,false):attachEvent("onload",x)}).call(this)});return T["./coffee-script"]}();
|
||||||
|
|
353
index.html
353
index.html
|
@ -111,7 +111,7 @@
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
<b>Latest Version:</b>
|
<b>Latest Version:</b>
|
||||||
<a href="http://github.com/jashkenas/coffee-script/tarball/0.9.3">0.9.3</a>
|
<a href="http://github.com/jashkenas/coffee-script/tarball/0.9.4">0.9.4</a>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<h2>
|
<h2>
|
||||||
|
@ -136,8 +136,8 @@ list <span class="Keyword">=</span> [<span class="Number">1</span>, <span class=
|
||||||
|
|
||||||
<span class="Comment"><span class="Comment">#</span> Objects:</span>
|
<span class="Comment"><span class="Comment">#</span> Objects:</span>
|
||||||
math <span class="Keyword">=</span>
|
math <span class="Keyword">=</span>
|
||||||
root<span class="Keyword">:</span> Math.sqrt
|
root: Math.sqrt
|
||||||
square<span class="Keyword">:</span> square
|
square: square
|
||||||
<span class="FunctionName">cube</span><span class="Keyword">:</span> <span class="FunctionArgument">(</span><span class="FunctionArgument">x</span><span class="FunctionArgument">)</span> <span class="Storage">-></span> x <span class="Keyword">*</span> square x
|
<span class="FunctionName">cube</span><span class="Keyword">:</span> <span class="FunctionArgument">(</span><span class="FunctionArgument">x</span><span class="FunctionArgument">)</span> <span class="Storage">-></span> x <span class="Keyword">*</span> square x
|
||||||
|
|
||||||
<span class="Comment"><span class="Comment">#</span> Splats:</span>
|
<span class="Comment"><span class="Comment">#</span> Splats:</span>
|
||||||
|
@ -149,7 +149,7 @@ alert <span class="String"><span class="String">"</span>I knew it!<span cla
|
||||||
|
|
||||||
<span class="Comment"><span class="Comment">#</span> Array comprehensions:</span>
|
<span class="Comment"><span class="Comment">#</span> Array comprehensions:</span>
|
||||||
cubes <span class="Keyword">=</span> math.cube num <span class="Keyword">for</span> num <span class="Keyword">in</span> list
|
cubes <span class="Keyword">=</span> math.cube num <span class="Keyword">for</span> num <span class="Keyword">in</span> list
|
||||||
</pre><pre class="idle"><span class="Storage">var</span> _a, _b, _c, _d, cubes, list, math, num, number, opposite, race, square;
|
</pre><pre class="idle"><span class="Storage">var</span> _i, _len, _ref, _result, cubes, list, math, num, number, opposite, race, square;
|
||||||
<span class="Storage">var</span> __slice <span class="Keyword">=</span> <span class="LibraryClassType">Array</span>.<span class="LibraryConstant">prototype</span>.slice;
|
<span class="Storage">var</span> __slice <span class="Keyword">=</span> <span class="LibraryClassType">Array</span>.<span class="LibraryConstant">prototype</span>.slice;
|
||||||
number <span class="Keyword">=</span> <span class="Number">42</span>;
|
number <span class="Keyword">=</span> <span class="Number">42</span>;
|
||||||
opposite <span class="Keyword">=</span> <span class="BuiltInConstant">true</span>;
|
opposite <span class="Keyword">=</span> <span class="BuiltInConstant">true</span>;
|
||||||
|
@ -176,14 +176,14 @@ math <span class="Keyword">=</span> {
|
||||||
<span class="LibraryFunction">alert</span>(<span class="String"><span class="String">"</span>I knew it!<span class="String">"</span></span>);
|
<span class="LibraryFunction">alert</span>(<span class="String"><span class="String">"</span>I knew it!<span class="String">"</span></span>);
|
||||||
}
|
}
|
||||||
cubes <span class="Keyword">=</span> (<span class="Storage">function</span>() {
|
cubes <span class="Keyword">=</span> (<span class="Storage">function</span>() {
|
||||||
_a <span class="Keyword">=</span> []; _c <span class="Keyword">=</span> list;
|
_result <span class="Keyword">=</span> []; _ref <span class="Keyword">=</span> list;
|
||||||
<span class="Keyword">for</span> (_b <span class="Keyword">=</span> <span class="Number">0</span>, _d <span class="Keyword">=</span> _c.<span class="LibraryConstant">length</span>; _b <span class="Keyword"><</span> _d; _b<span class="Keyword">++</span>) {
|
<span class="Keyword">for</span> (_i <span class="Keyword">=</span> <span class="Number">0</span>, _len <span class="Keyword">=</span> _ref.<span class="LibraryConstant">length</span>; _i <span class="Keyword"><</span> _len; _i<span class="Keyword">++</span>) {
|
||||||
num <span class="Keyword">=</span> _c[_b];
|
num <span class="Keyword">=</span> _ref[_i];
|
||||||
_a.<span class="LibraryFunction">push</span>(math.cube(num));
|
_result.<span class="LibraryFunction">push</span>(math.cube(num));
|
||||||
}
|
}
|
||||||
<span class="Keyword">return</span> _a;
|
<span class="Keyword">return</span> _result;
|
||||||
})();
|
})();
|
||||||
</pre><button onclick='javascript: var _a, _b, _c, _d, cubes, list, math, num, number, opposite, race, square;
|
</pre><button onclick='javascript: var _i, _len, _ref, _result, cubes, list, math, num, number, opposite, race, square;
|
||||||
var __slice = Array.prototype.slice;
|
var __slice = Array.prototype.slice;
|
||||||
number = 42;
|
number = 42;
|
||||||
opposite = true;
|
opposite = true;
|
||||||
|
@ -210,12 +210,12 @@ if (typeof elvis !== "undefined" && elvis !== null) {
|
||||||
alert("I knew it!");
|
alert("I knew it!");
|
||||||
}
|
}
|
||||||
cubes = (function() {
|
cubes = (function() {
|
||||||
_a = []; _c = list;
|
_result = []; _ref = list;
|
||||||
for (_b = 0, _d = _c.length; _b < _d; _b++) {
|
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
|
||||||
num = _c[_b];
|
num = _ref[_i];
|
||||||
_a.push(math.cube(num));
|
_result.push(math.cube(num));
|
||||||
}
|
}
|
||||||
return _a;
|
return _result;
|
||||||
})();;alert(cubes);'>run: cubes</button><br class='clear' /></div>
|
})();;alert(cubes);'>run: cubes</button><br class='clear' /></div>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
|
@ -251,7 +251,7 @@ cubes = (function() {
|
||||||
Then clone the CoffeeScript
|
Then clone the CoffeeScript
|
||||||
<a href="http://github.com/jashkenas/coffee-script">source repository</a>
|
<a href="http://github.com/jashkenas/coffee-script">source repository</a>
|
||||||
from GitHub, or download the latest
|
from GitHub, or download the latest
|
||||||
release: <a href="http://github.com/jashkenas/coffee-script/tarball/0.9.3">0.9.3</a>.
|
release: <a href="http://github.com/jashkenas/coffee-script/tarball/0.9.4">0.9.4</a>.
|
||||||
To install the CoffeeScript compiler system-wide
|
To install the CoffeeScript compiler system-wide
|
||||||
under <tt>/usr/local</tt>, open the directory and run:
|
under <tt>/usr/local</tt>, open the directory and run:
|
||||||
</p>
|
</p>
|
||||||
|
@ -467,7 +467,7 @@ cube = function(x) {
|
||||||
</p>
|
</p>
|
||||||
<div class='code'><pre class="idle">song <span class="Keyword">=</span> [<span class="String"><span class="String">"</span>do<span class="String">"</span></span>, <span class="String"><span class="String">"</span>re<span class="String">"</span></span>, <span class="String"><span class="String">"</span>mi<span class="String">"</span></span>, <span class="String"><span class="String">"</span>fa<span class="String">"</span></span>, <span class="String"><span class="String">"</span>so<span class="String">"</span></span>]
|
<div class='code'><pre class="idle">song <span class="Keyword">=</span> [<span class="String"><span class="String">"</span>do<span class="String">"</span></span>, <span class="String"><span class="String">"</span>re<span class="String">"</span></span>, <span class="String"><span class="String">"</span>mi<span class="String">"</span></span>, <span class="String"><span class="String">"</span>fa<span class="String">"</span></span>, <span class="String"><span class="String">"</span>so<span class="String">"</span></span>]
|
||||||
|
|
||||||
singers <span class="Keyword">=</span> {Jagger<span class="Keyword">:</span> <span class="String"><span class="String">"</span>Rock<span class="String">"</span></span>, Elvis<span class="Keyword">:</span> <span class="String"><span class="String">"</span>Roll<span class="String">"</span></span>}
|
singers <span class="Keyword">=</span> {Jagger: <span class="String"><span class="String">"</span>Rock<span class="String">"</span></span>, Elvis: <span class="String"><span class="String">"</span>Roll<span class="String">"</span></span>}
|
||||||
|
|
||||||
matrix <span class="Keyword">=</span> [
|
matrix <span class="Keyword">=</span> [
|
||||||
<span class="Number">1</span>, <span class="Number">0</span>, <span class="Number">1</span>
|
<span class="Number">1</span>, <span class="Number">0</span>, <span class="Number">1</span>
|
||||||
|
@ -476,12 +476,12 @@ matrix <span class="Keyword">=</span> [
|
||||||
]
|
]
|
||||||
|
|
||||||
kids <span class="Keyword">=</span>
|
kids <span class="Keyword">=</span>
|
||||||
brother<span class="Keyword">:</span>
|
brother:
|
||||||
name<span class="Keyword">:</span> <span class="String"><span class="String">"</span>Max<span class="String">"</span></span>
|
name: <span class="String"><span class="String">"</span>Max<span class="String">"</span></span>
|
||||||
age<span class="Keyword">:</span> <span class="Number">11</span>
|
age: <span class="Number">11</span>
|
||||||
sister<span class="Keyword">:</span>
|
sister:
|
||||||
name<span class="Keyword">:</span> <span class="String"><span class="String">"</span>Ida<span class="String">"</span></span>
|
name: <span class="String"><span class="String">"</span>Ida<span class="String">"</span></span>
|
||||||
age<span class="Keyword">:</span> <span class="Number">9</span>
|
age: <span class="Number">9</span>
|
||||||
</pre><pre class="idle"><span class="Storage">var</span> kids, matrix, singers, song;
|
</pre><pre class="idle"><span class="Storage">var</span> kids, matrix, singers, song;
|
||||||
song <span class="Keyword">=</span> [<span class="String"><span class="String">"</span>do<span class="String">"</span></span>, <span class="String"><span class="String">"</span>re<span class="String">"</span></span>, <span class="String"><span class="String">"</span>mi<span class="String">"</span></span>, <span class="String"><span class="String">"</span>fa<span class="String">"</span></span>, <span class="String"><span class="String">"</span>so<span class="String">"</span></span>];
|
song <span class="Keyword">=</span> [<span class="String"><span class="String">"</span>do<span class="String">"</span></span>, <span class="String"><span class="String">"</span>re<span class="String">"</span></span>, <span class="String"><span class="String">"</span>mi<span class="String">"</span></span>, <span class="String"><span class="String">"</span>fa<span class="String">"</span></span>, <span class="String"><span class="String">"</span>so<span class="String">"</span></span>];
|
||||||
singers <span class="Keyword">=</span> {
|
singers <span class="Keyword">=</span> {
|
||||||
|
@ -521,7 +521,7 @@ kids = {
|
||||||
of an object, without quoting them as strings. CoffeeScript notices and quotes
|
of an object, without quoting them as strings. CoffeeScript notices and quotes
|
||||||
them for you, so you don't have to worry about it (say, when using jQuery).
|
them for you, so you don't have to worry about it (say, when using jQuery).
|
||||||
</p>
|
</p>
|
||||||
<div class='code'><pre class="idle">$(<span class="String"><span class="String">'</span>.account<span class="String">'</span></span>).css class<span class="Keyword">:</span> <span class="String"><span class="String">'</span>active<span class="String">'</span></span>
|
<div class='code'><pre class="idle">$(<span class="String"><span class="String">'</span>.account<span class="String">'</span></span>).css class: <span class="String"><span class="String">'</span>active<span class="String">'</span></span>
|
||||||
</pre><pre class="idle"><span class="Keyword">$</span>(<span class="String"><span class="String">'</span>.account<span class="String">'</span></span>).css({
|
</pre><pre class="idle"><span class="Keyword">$</span>(<span class="String"><span class="String">'</span>.account<span class="String">'</span></span>).css({
|
||||||
<span class="String"><span class="String">"</span>class<span class="String">"</span></span>: <span class="String"><span class="String">'</span>active<span class="String">'</span></span>
|
<span class="String"><span class="String">"</span>class<span class="String">"</span></span>: <span class="String"><span class="String">'</span>active<span class="String">'</span></span>
|
||||||
});
|
});
|
||||||
|
@ -609,7 +609,7 @@ inner = changeNumbers();;alert(inner);'>run: inner</button><br class='clear' /><
|
||||||
|
|
||||||
date <span class="Keyword">=</span> <span class="Keyword">if</span> friday <span class="Keyword">then</span> sue <span class="Keyword">else</span> jill
|
date <span class="Keyword">=</span> <span class="Keyword">if</span> friday <span class="Keyword">then</span> sue <span class="Keyword">else</span> jill
|
||||||
|
|
||||||
options <span class="Keyword">or=</span> defaults
|
options or<span class="Keyword">=</span> defaults
|
||||||
</pre><pre class="idle"><span class="Storage">var</span> date, mood, options;
|
</pre><pre class="idle"><span class="Storage">var</span> date, mood, options;
|
||||||
<span class="Keyword">if</span> (singing) {
|
<span class="Keyword">if</span> (singing) {
|
||||||
mood <span class="Keyword">=</span> greatlyImproved;
|
mood <span class="Keyword">=</span> greatlyImproved;
|
||||||
|
@ -772,7 +772,7 @@ num <span class="Keyword">=</span> <span class="Number">6</span>
|
||||||
lyrics <span class="Keyword">=</span> <span class="Keyword">while</span> num <span class="Keyword">-</span><span class="Keyword">=</span> <span class="Number">1</span>
|
lyrics <span class="Keyword">=</span> <span class="Keyword">while</span> num <span class="Keyword">-</span><span class="Keyword">=</span> <span class="Number">1</span>
|
||||||
num <span class="Keyword">+</span> <span class="String"><span class="String">"</span> little monkeys, jumping on the bed.</span>
|
num <span class="Keyword">+</span> <span class="String"><span class="String">"</span> little monkeys, jumping on the bed.</span>
|
||||||
<span class="String"> One fell out and bumped his head.<span class="String">"</span></span>
|
<span class="String"> One fell out and bumped his head.<span class="String">"</span></span>
|
||||||
</pre><pre class="idle"><span class="Storage">var</span> _a, lyrics, num;
|
</pre><pre class="idle"><span class="Storage">var</span> _result, lyrics, num;
|
||||||
<span class="Keyword">if</span> (<span class="Variable">this</span>.studyingEconomics) {
|
<span class="Keyword">if</span> (<span class="Variable">this</span>.studyingEconomics) {
|
||||||
<span class="Keyword">while</span> (supply <span class="Keyword">></span> demand) {
|
<span class="Keyword">while</span> (supply <span class="Keyword">></span> demand) {
|
||||||
buy();
|
buy();
|
||||||
|
@ -783,14 +783,14 @@ lyrics <span class="Keyword">=</span> <span class="Keyword">while</span> num <sp
|
||||||
}
|
}
|
||||||
num <span class="Keyword">=</span> <span class="Number">6</span>;
|
num <span class="Keyword">=</span> <span class="Number">6</span>;
|
||||||
lyrics <span class="Keyword">=</span> (<span class="Storage">function</span>() {
|
lyrics <span class="Keyword">=</span> (<span class="Storage">function</span>() {
|
||||||
_a <span class="Keyword">=</span> [];
|
_result <span class="Keyword">=</span> [];
|
||||||
<span class="Keyword">while</span> (num <span class="Keyword">-</span><span class="Keyword">=</span> <span class="Number">1</span>) {
|
<span class="Keyword">while</span> (num <span class="Keyword">-</span><span class="Keyword">=</span> <span class="Number">1</span>) {
|
||||||
_a.<span class="LibraryFunction">push</span>(num <span class="Keyword">+</span> <span class="String"><span class="String">"</span> little monkeys, jumping on the bed.\</span>
|
_result.<span class="LibraryFunction">push</span>(num <span class="Keyword">+</span> <span class="String"><span class="String">"</span> little monkeys, jumping on the bed.\</span>
|
||||||
<span class="String"> One fell out and bumped his head.<span class="String">"</span></span>);
|
<span class="String"> One fell out and bumped his head.<span class="String">"</span></span>);
|
||||||
}
|
}
|
||||||
<span class="Keyword">return</span> _a;
|
<span class="Keyword">return</span> _result;
|
||||||
})();
|
})();
|
||||||
</pre><button onclick='javascript: var _a, lyrics, num;
|
</pre><button onclick='javascript: var _result, lyrics, num;
|
||||||
if (this.studyingEconomics) {
|
if (this.studyingEconomics) {
|
||||||
while (supply > demand) {
|
while (supply > demand) {
|
||||||
buy();
|
buy();
|
||||||
|
@ -801,12 +801,12 @@ if (this.studyingEconomics) {
|
||||||
}
|
}
|
||||||
num = 6;
|
num = 6;
|
||||||
lyrics = (function() {
|
lyrics = (function() {
|
||||||
_a = [];
|
_result = [];
|
||||||
while (num -= 1) {
|
while (num -= 1) {
|
||||||
_a.push(num + " little monkeys, jumping on the bed.\
|
_result.push(num + " little monkeys, jumping on the bed.\
|
||||||
One fell out and bumped his head.");
|
One fell out and bumped his head.");
|
||||||
}
|
}
|
||||||
return _a;
|
return _result;
|
||||||
})();;alert(lyrics.join("\n"));'>run: lyrics.join("\n")</button><br class='clear' /></div>
|
})();;alert(lyrics.join("\n"));'>run: lyrics.join("\n")</button><br class='clear' /></div>
|
||||||
<p>
|
<p>
|
||||||
For readability, the <b>until</b> keyword is equivalent to <tt>while not</tt>,
|
For readability, the <b>until</b> keyword is equivalent to <tt>while not</tt>,
|
||||||
|
@ -834,21 +834,21 @@ lunch <span class="Keyword">=</span> eat food <span class="Keyword">for</span> f
|
||||||
<span class="Keyword">for</span> roid <span class="Keyword">in</span> asteroids
|
<span class="Keyword">for</span> roid <span class="Keyword">in</span> asteroids
|
||||||
<span class="Keyword">for</span> roid2 <span class="Keyword">in</span> asteroids <span class="Keyword">when</span> roid <span class="Keyword">isnt</span> roid2
|
<span class="Keyword">for</span> roid2 <span class="Keyword">in</span> asteroids <span class="Keyword">when</span> roid <span class="Keyword">isnt</span> roid2
|
||||||
roid.explode() <span class="Keyword">if</span> roid.overlaps roid2
|
roid.explode() <span class="Keyword">if</span> roid.overlaps roid2
|
||||||
</pre><pre class="idle"><span class="Storage">var</span> _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, food, lunch, roid, roid2;
|
</pre><pre class="idle"><span class="Storage">var</span> _i, _j, _len, _len2, _ref, _ref2, _result, food, lunch, roid, roid2;
|
||||||
lunch <span class="Keyword">=</span> (<span class="Storage">function</span>() {
|
lunch <span class="Keyword">=</span> (<span class="Storage">function</span>() {
|
||||||
_a <span class="Keyword">=</span> []; _c <span class="Keyword">=</span> [<span class="String"><span class="String">'</span>toast<span class="String">'</span></span>, <span class="String"><span class="String">'</span>cheese<span class="String">'</span></span>, <span class="String"><span class="String">'</span>wine<span class="String">'</span></span>];
|
_result <span class="Keyword">=</span> []; _ref <span class="Keyword">=</span> [<span class="String"><span class="String">'</span>toast<span class="String">'</span></span>, <span class="String"><span class="String">'</span>cheese<span class="String">'</span></span>, <span class="String"><span class="String">'</span>wine<span class="String">'</span></span>];
|
||||||
<span class="Keyword">for</span> (_b <span class="Keyword">=</span> <span class="Number">0</span>, _d <span class="Keyword">=</span> _c.<span class="LibraryConstant">length</span>; _b <span class="Keyword"><</span> _d; _b<span class="Keyword">++</span>) {
|
<span class="Keyword">for</span> (_i <span class="Keyword">=</span> <span class="Number">0</span>, _len <span class="Keyword">=</span> _ref.<span class="LibraryConstant">length</span>; _i <span class="Keyword"><</span> _len; _i<span class="Keyword">++</span>) {
|
||||||
food <span class="Keyword">=</span> _c[_b];
|
food <span class="Keyword">=</span> _ref[_i];
|
||||||
_a.<span class="LibraryFunction">push</span>(eat(food));
|
_result.<span class="LibraryFunction">push</span>(eat(food));
|
||||||
}
|
}
|
||||||
<span class="Keyword">return</span> _a;
|
<span class="Keyword">return</span> _result;
|
||||||
})();
|
})();
|
||||||
_f <span class="Keyword">=</span> asteroids;
|
_ref <span class="Keyword">=</span> asteroids;
|
||||||
<span class="Keyword">for</span> (_e <span class="Keyword">=</span> <span class="Number">0</span>, _g <span class="Keyword">=</span> _f.<span class="LibraryConstant">length</span>; _e <span class="Keyword"><</span> _g; _e<span class="Keyword">++</span>) {
|
<span class="Keyword">for</span> (_i <span class="Keyword">=</span> <span class="Number">0</span>, _len <span class="Keyword">=</span> _ref.<span class="LibraryConstant">length</span>; _i <span class="Keyword"><</span> _len; _i<span class="Keyword">++</span>) {
|
||||||
roid <span class="Keyword">=</span> _f[_e];
|
roid <span class="Keyword">=</span> _ref[_i];
|
||||||
_i <span class="Keyword">=</span> asteroids;
|
_ref2 <span class="Keyword">=</span> asteroids;
|
||||||
<span class="Keyword">for</span> (_h <span class="Keyword">=</span> <span class="Number">0</span>, _j <span class="Keyword">=</span> _i.<span class="LibraryConstant">length</span>; _h <span class="Keyword"><</span> _j; _h<span class="Keyword">++</span>) {
|
<span class="Keyword">for</span> (_j <span class="Keyword">=</span> <span class="Number">0</span>, _len2 <span class="Keyword">=</span> _ref2.<span class="LibraryConstant">length</span>; _j <span class="Keyword"><</span> _len2; _j<span class="Keyword">++</span>) {
|
||||||
roid2 <span class="Keyword">=</span> _i[_h];
|
roid2 <span class="Keyword">=</span> _ref2[_j];
|
||||||
<span class="Keyword">if</span> (roid <span class="Keyword">!</span><span class="Keyword">==</span> roid2) {
|
<span class="Keyword">if</span> (roid <span class="Keyword">!</span><span class="Keyword">==</span> roid2) {
|
||||||
<span class="Keyword">if</span> (roid.overlaps(roid2)) {
|
<span class="Keyword">if</span> (roid.overlaps(roid2)) {
|
||||||
roid.explode();
|
roid.explode();
|
||||||
|
@ -868,54 +868,54 @@ _f <span class="Keyword">=</span> asteroids;
|
||||||
<span class="Keyword">for</span> i <span class="Keyword">in</span> [<span class="Number">0</span>...eggs.length] <span class="Keyword">by</span> <span class="Number">12</span>
|
<span class="Keyword">for</span> i <span class="Keyword">in</span> [<span class="Number">0</span>...eggs.length] <span class="Keyword">by</span> <span class="Number">12</span>
|
||||||
dozen <span class="Keyword">=</span> eggs[i...i<span class="Keyword">+</span><span class="Number">12</span>]
|
dozen <span class="Keyword">=</span> eggs[i...i<span class="Keyword">+</span><span class="Number">12</span>]
|
||||||
deliver <span class="Keyword">new</span> <span class="TypeName">eggCarton</span> dozen
|
deliver <span class="Keyword">new</span> <span class="TypeName">eggCarton</span> dozen
|
||||||
</pre><pre class="idle"><span class="Storage">var</span> _a, countdown, deliverEggs, num;
|
</pre><pre class="idle"><span class="Storage">var</span> _result, countdown, deliverEggs, num;
|
||||||
countdown <span class="Keyword">=</span> (<span class="Storage">function</span>() {
|
countdown <span class="Keyword">=</span> (<span class="Storage">function</span>() {
|
||||||
_a <span class="Keyword">=</span> [];
|
_result <span class="Keyword">=</span> [];
|
||||||
<span class="Keyword">for</span> (num <span class="Keyword">=</span> <span class="Number">10</span>; num <span class="Keyword">>=</span> <span class="Number">1</span>; num<span class="Keyword">--</span>) {
|
<span class="Keyword">for</span> (num <span class="Keyword">=</span> <span class="Number">10</span>; num <span class="Keyword">>=</span> <span class="Number">1</span>; num<span class="Keyword">--</span>) {
|
||||||
_a.<span class="LibraryFunction">push</span>(num);
|
_result.<span class="LibraryFunction">push</span>(num);
|
||||||
}
|
}
|
||||||
<span class="Keyword">return</span> _a;
|
<span class="Keyword">return</span> _result;
|
||||||
})();
|
})();
|
||||||
<span class="FunctionName">deliverEggs</span> = <span class="Storage">function</span>() {
|
<span class="FunctionName">deliverEggs</span> = <span class="Storage">function</span>() {
|
||||||
<span class="Storage">var</span> _b, _c, dozen, i;
|
<span class="Storage">var</span> _ref, _result2, dozen, i;
|
||||||
_b <span class="Keyword">=</span> []; _c <span class="Keyword">=</span> eggs.<span class="LibraryConstant">length</span>;
|
_result2 <span class="Keyword">=</span> []; _ref <span class="Keyword">=</span> eggs.<span class="LibraryConstant">length</span>;
|
||||||
<span class="Keyword">for</span> (i <span class="Keyword">=</span> <span class="Number">0</span>; (<span class="Number">0</span> <span class="Keyword"><=</span> _c ? i <span class="Keyword"><</span> _c : i <span class="Keyword">></span> _c); i <span class="Keyword">+</span><span class="Keyword">=</span> <span class="Number">12</span>) {
|
<span class="Keyword">for</span> (i <span class="Keyword">=</span> <span class="Number">0</span>; (<span class="Number">0</span> <span class="Keyword"><=</span> _ref ? i <span class="Keyword"><</span> _ref : i <span class="Keyword">></span> _ref); i <span class="Keyword">+</span><span class="Keyword">=</span> <span class="Number">12</span>) {
|
||||||
_b.<span class="LibraryFunction">push</span>((<span class="Storage">function</span>() {
|
_result2.<span class="LibraryFunction">push</span>((<span class="Storage">function</span>() {
|
||||||
dozen <span class="Keyword">=</span> eggs.<span class="LibraryFunction">slice</span>(i, i <span class="Keyword">+</span> <span class="Number">12</span>);
|
dozen <span class="Keyword">=</span> eggs.<span class="LibraryFunction">slice</span>(i, i <span class="Keyword">+</span> <span class="Number">12</span>);
|
||||||
<span class="Keyword">return</span> deliver(<span class="Keyword">new</span> <span class="TypeName">eggCarton</span>(dozen));
|
<span class="Keyword">return</span> deliver(<span class="Keyword">new</span> <span class="TypeName">eggCarton</span>(dozen));
|
||||||
})());
|
})());
|
||||||
}
|
}
|
||||||
<span class="Keyword">return</span> _b;
|
<span class="Keyword">return</span> _result2;
|
||||||
};
|
};
|
||||||
</pre><button onclick='javascript: var _a, countdown, deliverEggs, num;
|
</pre><button onclick='javascript: var _result, countdown, deliverEggs, num;
|
||||||
countdown = (function() {
|
countdown = (function() {
|
||||||
_a = [];
|
_result = [];
|
||||||
for (num = 10; num >= 1; num--) {
|
for (num = 10; num >= 1; num--) {
|
||||||
_a.push(num);
|
_result.push(num);
|
||||||
}
|
}
|
||||||
return _a;
|
return _result;
|
||||||
})();
|
})();
|
||||||
deliverEggs = function() {
|
deliverEggs = function() {
|
||||||
var _b, _c, dozen, i;
|
var _ref, _result2, dozen, i;
|
||||||
_b = []; _c = eggs.length;
|
_result2 = []; _ref = eggs.length;
|
||||||
for (i = 0; (0 <= _c ? i < _c : i > _c); i += 12) {
|
for (i = 0; (0 <= _ref ? i < _ref : i > _ref); i += 12) {
|
||||||
_b.push((function() {
|
_result2.push((function() {
|
||||||
dozen = eggs.slice(i, i + 12);
|
dozen = eggs.slice(i, i + 12);
|
||||||
return deliver(new eggCarton(dozen));
|
return deliver(new eggCarton(dozen));
|
||||||
})());
|
})());
|
||||||
}
|
}
|
||||||
return _b;
|
return _result2;
|
||||||
};;alert(countdown);'>run: countdown</button><br class='clear' /></div>
|
};;alert(countdown);'>run: countdown</button><br class='clear' /></div>
|
||||||
<p>
|
<p>
|
||||||
Comprehensions can also be used to iterate over the keys and values in
|
Comprehensions can also be used to iterate over the keys and values in
|
||||||
an object. Use <tt>of</tt> to signal comprehension over the properties of
|
an object. Use <tt>of</tt> to signal comprehension over the properties of
|
||||||
an object instead of the values in an array.
|
an object instead of the values in an array.
|
||||||
</p>
|
</p>
|
||||||
<div class='code'><pre class="idle">yearsOld <span class="Keyword">=</span> max<span class="Keyword">:</span> <span class="Number">10</span>, ida<span class="Keyword">:</span> <span class="Number">9</span>, tim<span class="Keyword">:</span> <span class="Number">11</span>
|
<div class='code'><pre class="idle">yearsOld <span class="Keyword">=</span> max: <span class="Number">10</span>, ida: <span class="Number">9</span>, tim: <span class="Number">11</span>
|
||||||
|
|
||||||
ages <span class="Keyword">=</span> <span class="Keyword">for</span> child, age <span class="Keyword">of</span> yearsOld
|
ages <span class="Keyword">=</span> <span class="Keyword">for</span> child, age <span class="Keyword">of</span> yearsOld
|
||||||
child <span class="Keyword">+</span> <span class="String"><span class="String">"</span> is <span class="String">"</span></span> <span class="Keyword">+</span> age
|
child <span class="Keyword">+</span> <span class="String"><span class="String">"</span> is <span class="String">"</span></span> <span class="Keyword">+</span> age
|
||||||
</pre><pre class="idle"><span class="Storage">var</span> _a, _b, age, ages, child, yearsOld;
|
</pre><pre class="idle"><span class="Storage">var</span> _ref, _result, age, ages, child, yearsOld;
|
||||||
<span class="Storage">var</span> __hasProp <span class="Keyword">=</span> <span class="LibraryClassType">Object</span>.<span class="LibraryConstant">prototype</span>.hasOwnProperty;
|
<span class="Storage">var</span> __hasProp <span class="Keyword">=</span> <span class="LibraryClassType">Object</span>.<span class="LibraryConstant">prototype</span>.hasOwnProperty;
|
||||||
yearsOld <span class="Keyword">=</span> {
|
yearsOld <span class="Keyword">=</span> {
|
||||||
max: <span class="Number">10</span>,
|
max: <span class="Number">10</span>,
|
||||||
|
@ -923,15 +923,15 @@ yearsOld <span class="Keyword">=</span> {
|
||||||
tim: <span class="Number">11</span>
|
tim: <span class="Number">11</span>
|
||||||
};
|
};
|
||||||
ages <span class="Keyword">=</span> (<span class="Storage">function</span>() {
|
ages <span class="Keyword">=</span> (<span class="Storage">function</span>() {
|
||||||
_a <span class="Keyword">=</span> []; _b <span class="Keyword">=</span> yearsOld;
|
_result <span class="Keyword">=</span> []; _ref <span class="Keyword">=</span> yearsOld;
|
||||||
<span class="Keyword">for</span> (child <span class="Keyword">in</span> _b) {
|
<span class="Keyword">for</span> (child <span class="Keyword">in</span> _ref) {
|
||||||
<span class="Keyword">if</span> (<span class="Keyword">!</span>__hasProp.<span class="LibraryFunction">call</span>(_b, child)) <span class="Keyword">continue</span>;
|
<span class="Keyword">if</span> (<span class="Keyword">!</span>__hasProp.<span class="LibraryFunction">call</span>(_ref, child)) <span class="Keyword">continue</span>;
|
||||||
age <span class="Keyword">=</span> _b[child];
|
age <span class="Keyword">=</span> _ref[child];
|
||||||
_a.<span class="LibraryFunction">push</span>(child <span class="Keyword">+</span> <span class="String"><span class="String">"</span> is <span class="String">"</span></span> <span class="Keyword">+</span> age);
|
_result.<span class="LibraryFunction">push</span>(child <span class="Keyword">+</span> <span class="String"><span class="String">"</span> is <span class="String">"</span></span> <span class="Keyword">+</span> age);
|
||||||
}
|
}
|
||||||
<span class="Keyword">return</span> _a;
|
<span class="Keyword">return</span> _result;
|
||||||
})();
|
})();
|
||||||
</pre><button onclick='javascript: var _a, _b, age, ages, child, yearsOld;
|
</pre><button onclick='javascript: var _ref, _result, age, ages, child, yearsOld;
|
||||||
var __hasProp = Object.prototype.hasOwnProperty;
|
var __hasProp = Object.prototype.hasOwnProperty;
|
||||||
yearsOld = {
|
yearsOld = {
|
||||||
max: 10,
|
max: 10,
|
||||||
|
@ -939,13 +939,13 @@ yearsOld = {
|
||||||
tim: 11
|
tim: 11
|
||||||
};
|
};
|
||||||
ages = (function() {
|
ages = (function() {
|
||||||
_a = []; _b = yearsOld;
|
_result = []; _ref = yearsOld;
|
||||||
for (child in _b) {
|
for (child in _ref) {
|
||||||
if (!__hasProp.call(_b, child)) continue;
|
if (!__hasProp.call(_ref, child)) continue;
|
||||||
age = _b[child];
|
age = _ref[child];
|
||||||
_a.push(child + " is " + age);
|
_result.push(child + " is " + age);
|
||||||
}
|
}
|
||||||
return _a;
|
return _result;
|
||||||
})();;alert(ages.join(", "));'>run: ages.join(", ")</button><br class='clear' /></div>
|
})();;alert(ages.join(", "));'>run: ages.join(", ")</button><br class='clear' /></div>
|
||||||
<p>
|
<p>
|
||||||
By default, object comprehensions are safe, and use a <tt>hasOwnProperty</tt>
|
By default, object comprehensions are safe, and use a <tt>hasOwnProperty</tt>
|
||||||
|
@ -1059,27 +1059,27 @@ six = (one = 1) + (two = 2) + (three = 3);;alert(six);'>run: six</button><br cla
|
||||||
<div class='code'><pre class="idle"><span class="Comment"><span class="Comment">#</span> The first ten global properties.</span>
|
<div class='code'><pre class="idle"><span class="Comment"><span class="Comment">#</span> The first ten global properties.</span>
|
||||||
|
|
||||||
globals <span class="Keyword">=</span> (name <span class="Keyword">for</span> name <span class="Keyword">of</span> window)[<span class="Number">0</span>...<span class="Number">10</span>]
|
globals <span class="Keyword">=</span> (name <span class="Keyword">for</span> name <span class="Keyword">of</span> window)[<span class="Number">0</span>...<span class="Number">10</span>]
|
||||||
</pre><pre class="idle"><span class="Storage">var</span> _a, _b, _c, globals, name;
|
</pre><pre class="idle"><span class="Storage">var</span> _i, _ref, _result, globals, name;
|
||||||
<span class="Storage">var</span> __hasProp <span class="Keyword">=</span> <span class="LibraryClassType">Object</span>.<span class="LibraryConstant">prototype</span>.hasOwnProperty;
|
<span class="Storage">var</span> __hasProp <span class="Keyword">=</span> <span class="LibraryClassType">Object</span>.<span class="LibraryConstant">prototype</span>.hasOwnProperty;
|
||||||
globals <span class="Keyword">=</span> (<span class="Storage">function</span>() {
|
globals <span class="Keyword">=</span> (<span class="Storage">function</span>() {
|
||||||
_b <span class="Keyword">=</span> []; _c <span class="Keyword">=</span> <span class="LibraryClassType">window</span>;
|
_result <span class="Keyword">=</span> []; _ref <span class="Keyword">=</span> <span class="LibraryClassType">window</span>;
|
||||||
<span class="Keyword">for</span> (name <span class="Keyword">in</span> _c) {
|
<span class="Keyword">for</span> (name <span class="Keyword">in</span> _ref) {
|
||||||
<span class="Keyword">if</span> (<span class="Keyword">!</span>__hasProp.<span class="LibraryFunction">call</span>(_c, name)) <span class="Keyword">continue</span>;
|
<span class="Keyword">if</span> (<span class="Keyword">!</span>__hasProp.<span class="LibraryFunction">call</span>(_ref, name)) <span class="Keyword">continue</span>;
|
||||||
_a <span class="Keyword">=</span> _c[name];
|
_i <span class="Keyword">=</span> _ref[name];
|
||||||
_b.<span class="LibraryFunction">push</span>(name);
|
_result.<span class="LibraryFunction">push</span>(name);
|
||||||
}
|
}
|
||||||
<span class="Keyword">return</span> _b;
|
<span class="Keyword">return</span> _result;
|
||||||
})().<span class="LibraryFunction">slice</span>(<span class="Number">0</span>, <span class="Number">10</span>);
|
})().<span class="LibraryFunction">slice</span>(<span class="Number">0</span>, <span class="Number">10</span>);
|
||||||
</pre><button onclick='javascript: var _a, _b, _c, globals, name;
|
</pre><button onclick='javascript: var _i, _ref, _result, globals, name;
|
||||||
var __hasProp = Object.prototype.hasOwnProperty;
|
var __hasProp = Object.prototype.hasOwnProperty;
|
||||||
globals = (function() {
|
globals = (function() {
|
||||||
_b = []; _c = window;
|
_result = []; _ref = window;
|
||||||
for (name in _c) {
|
for (name in _ref) {
|
||||||
if (!__hasProp.call(_c, name)) continue;
|
if (!__hasProp.call(_ref, name)) continue;
|
||||||
_a = _c[name];
|
_i = _ref[name];
|
||||||
_b.push(name);
|
_result.push(name);
|
||||||
}
|
}
|
||||||
return _b;
|
return _result;
|
||||||
})().slice(0, 10);;alert(globals);'>run: globals</button><br class='clear' /></div>
|
})().slice(0, 10);;alert(globals);'>run: globals</button><br class='clear' /></div>
|
||||||
<p>
|
<p>
|
||||||
As well as silly things, like passing a <b>try/catch</b> statement directly
|
As well as silly things, like passing a <b>try/catch</b> statement directly
|
||||||
|
@ -1152,8 +1152,8 @@ speed = (typeof speed !== "undefined" && speed !== null) ? speed : 140;;alert(sp
|
||||||
the <b>TypeError</b> that would be raised otherwise.
|
the <b>TypeError</b> that would be raised otherwise.
|
||||||
</p>
|
</p>
|
||||||
<div class='code'><pre class="idle">lottery.drawWinner()<span class="Keyword">?</span>.address<span class="Keyword">?</span>.zipcode
|
<div class='code'><pre class="idle">lottery.drawWinner()<span class="Keyword">?</span>.address<span class="Keyword">?</span>.zipcode
|
||||||
</pre><pre class="idle"><span class="Storage">var</span> _a, _b;
|
</pre><pre class="idle"><span class="Storage">var</span> _ref, _ref2;
|
||||||
(<span class="Keyword">typeof</span> (_b <span class="Keyword">=</span> ((_a <span class="Keyword">=</span> lottery.drawWinner()))) <span class="Keyword">===</span> <span class="String"><span class="String">"</span>undefined<span class="String">"</span></span> <span class="Keyword">||</span> _b <span class="Keyword">===</span> <span class="BuiltInConstant">null</span>) ? undefined : _b.address <span class="Keyword">==</span> <span class="BuiltInConstant">null</span> ? undefined : _b.address.zipcode;
|
(<span class="Keyword">typeof</span> (_ref2 <span class="Keyword">=</span> ((_ref <span class="Keyword">=</span> lottery.drawWinner()))) <span class="Keyword">===</span> <span class="String"><span class="String">"</span>undefined<span class="String">"</span></span> <span class="Keyword">||</span> _ref2 <span class="Keyword">===</span> <span class="BuiltInConstant">null</span>) ? undefined : _ref2.address <span class="Keyword">==</span> <span class="BuiltInConstant">null</span> ? undefined : _ref2.address.zipcode;
|
||||||
</pre><br class='clear' /></div>
|
</pre><br class='clear' /></div>
|
||||||
<p>
|
<p>
|
||||||
Soaking up nulls is similar to Ruby's
|
Soaking up nulls is similar to Ruby's
|
||||||
|
@ -1217,8 +1217,8 @@ tom.move()
|
||||||
<span class="Keyword">if</span> (<span class="Keyword">typeof</span> parent.extended <span class="Keyword">===</span> <span class="String"><span class="String">"</span>function<span class="String">"</span></span>) parent.extended(child);
|
<span class="Keyword">if</span> (<span class="Keyword">typeof</span> parent.extended <span class="Keyword">===</span> <span class="String"><span class="String">"</span>function<span class="String">"</span></span>) parent.extended(child);
|
||||||
child.__super__ <span class="Keyword">=</span> parent.<span class="LibraryConstant">prototype</span>;
|
child.__super__ <span class="Keyword">=</span> parent.<span class="LibraryConstant">prototype</span>;
|
||||||
};
|
};
|
||||||
<span class="FunctionName">Animal</span> = <span class="Storage">function</span>(<span class="FunctionArgument">_a</span>) {
|
<span class="FunctionName">Animal</span> = <span class="Storage">function</span>(<span class="FunctionArgument">_arg</span>) {
|
||||||
<span class="Variable">this</span>.<span class="LibraryConstant">name</span> <span class="Keyword">=</span> _a;
|
<span class="Variable">this</span>.<span class="LibraryConstant">name</span> <span class="Keyword">=</span> _arg;
|
||||||
<span class="Keyword">return</span> <span class="Variable">this</span>;
|
<span class="Keyword">return</span> <span class="Variable">this</span>;
|
||||||
};
|
};
|
||||||
<span class="LibraryClassType">Animal</span>.<span class="LibraryConstant">prototype</span>.<span class="FunctionName">move</span> = <span class="Storage">function</span>(<span class="FunctionArgument">meters</span>) {
|
<span class="LibraryClassType">Animal</span>.<span class="LibraryConstant">prototype</span>.<span class="FunctionName">move</span> = <span class="Storage">function</span>(<span class="FunctionArgument">meters</span>) {
|
||||||
|
@ -1253,8 +1253,8 @@ var __extends = function(child, parent) {
|
||||||
if (typeof parent.extended === "function") parent.extended(child);
|
if (typeof parent.extended === "function") parent.extended(child);
|
||||||
child.__super__ = parent.prototype;
|
child.__super__ = parent.prototype;
|
||||||
};
|
};
|
||||||
Animal = function(_a) {
|
Animal = function(_arg) {
|
||||||
this.name = _a;
|
this.name = _arg;
|
||||||
return this;
|
return this;
|
||||||
};
|
};
|
||||||
Animal.prototype.move = function(meters) {
|
Animal.prototype.move = function(meters) {
|
||||||
|
@ -1315,18 +1315,18 @@ tom.move();;'>run</button><br class='clear' /></div>
|
||||||
theSwitch <span class="Keyword">=</span> <span class="Number">0</span>
|
theSwitch <span class="Keyword">=</span> <span class="Number">0</span>
|
||||||
|
|
||||||
<span class="Keyword">[</span>theBait, theSwitch<span class="Keyword">] =</span> [theSwitch, theBait]
|
<span class="Keyword">[</span>theBait, theSwitch<span class="Keyword">] =</span> [theSwitch, theBait]
|
||||||
</pre><pre class="idle"><span class="Storage">var</span> _a, theBait, theSwitch;
|
</pre><pre class="idle"><span class="Storage">var</span> _ref, theBait, theSwitch;
|
||||||
theBait <span class="Keyword">=</span> <span class="Number">1000</span>;
|
theBait <span class="Keyword">=</span> <span class="Number">1000</span>;
|
||||||
theSwitch <span class="Keyword">=</span> <span class="Number">0</span>;
|
theSwitch <span class="Keyword">=</span> <span class="Number">0</span>;
|
||||||
_a <span class="Keyword">=</span> [theSwitch, theBait];
|
_ref <span class="Keyword">=</span> [theSwitch, theBait];
|
||||||
theBait <span class="Keyword">=</span> _a[<span class="Number">0</span>];
|
theBait <span class="Keyword">=</span> _ref[<span class="Number">0</span>];
|
||||||
theSwitch <span class="Keyword">=</span> _a[<span class="Number">1</span>];
|
theSwitch <span class="Keyword">=</span> _ref[<span class="Number">1</span>];
|
||||||
</pre><button onclick='javascript: var _a, theBait, theSwitch;
|
</pre><button onclick='javascript: var _ref, theBait, theSwitch;
|
||||||
theBait = 1000;
|
theBait = 1000;
|
||||||
theSwitch = 0;
|
theSwitch = 0;
|
||||||
_a = [theSwitch, theBait];
|
_ref = [theSwitch, theBait];
|
||||||
theBait = _a[0];
|
theBait = _ref[0];
|
||||||
theSwitch = _a[1];;alert(theBait);'>run: theBait</button><br class='clear' /></div>
|
theSwitch = _ref[1];;alert(theBait);'>run: theBait</button><br class='clear' /></div>
|
||||||
<p>
|
<p>
|
||||||
But it's also helpful for dealing with functions that return multiple
|
But it's also helpful for dealing with functions that return multiple
|
||||||
values.
|
values.
|
||||||
|
@ -1336,38 +1336,38 @@ theSwitch = _a[1];;alert(theBait);'>run: theBait</button><br class='clear' /></d
|
||||||
[location, <span class="Number">72</span>, <span class="String"><span class="String">"</span>Mostly Sunny<span class="String">"</span></span>]
|
[location, <span class="Number">72</span>, <span class="String"><span class="String">"</span>Mostly Sunny<span class="String">"</span></span>]
|
||||||
|
|
||||||
<span class="Keyword">[</span>city, temp, forecast<span class="Keyword">] =</span> weatherReport <span class="String"><span class="String">"</span>Berkeley, CA<span class="String">"</span></span>
|
<span class="Keyword">[</span>city, temp, forecast<span class="Keyword">] =</span> weatherReport <span class="String"><span class="String">"</span>Berkeley, CA<span class="String">"</span></span>
|
||||||
</pre><pre class="idle"><span class="Storage">var</span> _a, city, forecast, temp, weatherReport;
|
</pre><pre class="idle"><span class="Storage">var</span> _ref, city, forecast, temp, weatherReport;
|
||||||
<span class="FunctionName">weatherReport</span> = <span class="Storage">function</span>(<span class="FunctionArgument">location</span>) {
|
<span class="FunctionName">weatherReport</span> = <span class="Storage">function</span>(<span class="FunctionArgument">location</span>) {
|
||||||
<span class="Keyword">return</span> [location, <span class="Number">72</span>, <span class="String"><span class="String">"</span>Mostly Sunny<span class="String">"</span></span>];
|
<span class="Keyword">return</span> [location, <span class="Number">72</span>, <span class="String"><span class="String">"</span>Mostly Sunny<span class="String">"</span></span>];
|
||||||
};
|
};
|
||||||
_a <span class="Keyword">=</span> weatherReport(<span class="String"><span class="String">"</span>Berkeley, CA<span class="String">"</span></span>);
|
_ref <span class="Keyword">=</span> weatherReport(<span class="String"><span class="String">"</span>Berkeley, CA<span class="String">"</span></span>);
|
||||||
city <span class="Keyword">=</span> _a[<span class="Number">0</span>];
|
city <span class="Keyword">=</span> _ref[<span class="Number">0</span>];
|
||||||
temp <span class="Keyword">=</span> _a[<span class="Number">1</span>];
|
temp <span class="Keyword">=</span> _ref[<span class="Number">1</span>];
|
||||||
forecast <span class="Keyword">=</span> _a[<span class="Number">2</span>];
|
forecast <span class="Keyword">=</span> _ref[<span class="Number">2</span>];
|
||||||
</pre><button onclick='javascript: var _a, city, forecast, temp, weatherReport;
|
</pre><button onclick='javascript: var _ref, city, forecast, temp, weatherReport;
|
||||||
weatherReport = function(location) {
|
weatherReport = function(location) {
|
||||||
return [location, 72, "Mostly Sunny"];
|
return [location, 72, "Mostly Sunny"];
|
||||||
};
|
};
|
||||||
_a = weatherReport("Berkeley, CA");
|
_ref = weatherReport("Berkeley, CA");
|
||||||
city = _a[0];
|
city = _ref[0];
|
||||||
temp = _a[1];
|
temp = _ref[1];
|
||||||
forecast = _a[2];;alert(forecast);'>run: forecast</button><br class='clear' /></div>
|
forecast = _ref[2];;alert(forecast);'>run: forecast</button><br class='clear' /></div>
|
||||||
<p>
|
<p>
|
||||||
Pattern matching can be used with any depth of array and object nesting,
|
Pattern matching can be used with any depth of array and object nesting,
|
||||||
to help pull out deeply nested properties.
|
to help pull out deeply nested properties.
|
||||||
</p>
|
</p>
|
||||||
<div class='code'><pre class="idle">futurists <span class="Keyword">=</span>
|
<div class='code'><pre class="idle">futurists <span class="Keyword">=</span>
|
||||||
sculptor<span class="Keyword">:</span> <span class="String"><span class="String">"</span>Umberto Boccioni<span class="String">"</span></span>
|
sculptor: <span class="String"><span class="String">"</span>Umberto Boccioni<span class="String">"</span></span>
|
||||||
painter<span class="Keyword">:</span> <span class="String"><span class="String">"</span>Vladimir Burliuk<span class="String">"</span></span>
|
painter: <span class="String"><span class="String">"</span>Vladimir Burliuk<span class="String">"</span></span>
|
||||||
poet<span class="Keyword">:</span>
|
poet:
|
||||||
name<span class="Keyword">:</span> <span class="String"><span class="String">"</span>F.T. Marinetti<span class="String">"</span></span>
|
name: <span class="String"><span class="String">"</span>F.T. Marinetti<span class="String">"</span></span>
|
||||||
address<span class="Keyword">:</span> [
|
address: [
|
||||||
<span class="String"><span class="String">"</span>Via Roma 42R<span class="String">"</span></span>
|
<span class="String"><span class="String">"</span>Via Roma 42R<span class="String">"</span></span>
|
||||||
<span class="String"><span class="String">"</span>Bellagio, Italy 22021<span class="String">"</span></span>
|
<span class="String"><span class="String">"</span>Bellagio, Italy 22021<span class="String">"</span></span>
|
||||||
]
|
]
|
||||||
|
|
||||||
{poet<span class="Keyword">:</span> {name, address<span class="Keyword">:</span> [street, city]}} <span class="Keyword">=</span> futurists
|
{poet: {name, address: [street, city]}} <span class="Keyword">=</span> futurists
|
||||||
</pre><pre class="idle"><span class="Storage">var</span> _a, _b, _c, city, futurists, name, street;
|
</pre><pre class="idle"><span class="Storage">var</span> _ref, _ref2, _ref3, city, futurists, name, street;
|
||||||
futurists <span class="Keyword">=</span> {
|
futurists <span class="Keyword">=</span> {
|
||||||
sculptor: <span class="String"><span class="String">"</span>Umberto Boccioni<span class="String">"</span></span>,
|
sculptor: <span class="String"><span class="String">"</span>Umberto Boccioni<span class="String">"</span></span>,
|
||||||
painter: <span class="String"><span class="String">"</span>Vladimir Burliuk<span class="String">"</span></span>,
|
painter: <span class="String"><span class="String">"</span>Vladimir Burliuk<span class="String">"</span></span>,
|
||||||
|
@ -1376,13 +1376,13 @@ futurists <span class="Keyword">=</span> {
|
||||||
address: [<span class="String"><span class="String">"</span>Via Roma 42R<span class="String">"</span></span>, <span class="String"><span class="String">"</span>Bellagio, Italy 22021<span class="String">"</span></span>]
|
address: [<span class="String"><span class="String">"</span>Via Roma 42R<span class="String">"</span></span>, <span class="String"><span class="String">"</span>Bellagio, Italy 22021<span class="String">"</span></span>]
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
_a <span class="Keyword">=</span> futurists;
|
_ref <span class="Keyword">=</span> futurists;
|
||||||
_b <span class="Keyword">=</span> _a.poet;
|
_ref2 <span class="Keyword">=</span> _ref.poet;
|
||||||
name <span class="Keyword">=</span> _b.<span class="LibraryConstant">name</span>;
|
name <span class="Keyword">=</span> _ref2.<span class="LibraryConstant">name</span>;
|
||||||
_c <span class="Keyword">=</span> _b.address;
|
_ref3 <span class="Keyword">=</span> _ref2.address;
|
||||||
street <span class="Keyword">=</span> _c[<span class="Number">0</span>];
|
street <span class="Keyword">=</span> _ref3[<span class="Number">0</span>];
|
||||||
city <span class="Keyword">=</span> _c[<span class="Number">1</span>];
|
city <span class="Keyword">=</span> _ref3[<span class="Number">1</span>];
|
||||||
</pre><button onclick='javascript: var _a, _b, _c, city, futurists, name, street;
|
</pre><button onclick='javascript: var _ref, _ref2, _ref3, city, futurists, name, street;
|
||||||
futurists = {
|
futurists = {
|
||||||
sculptor: "Umberto Boccioni",
|
sculptor: "Umberto Boccioni",
|
||||||
painter: "Vladimir Burliuk",
|
painter: "Vladimir Burliuk",
|
||||||
|
@ -1391,12 +1391,12 @@ futurists = {
|
||||||
address: ["Via Roma 42R", "Bellagio, Italy 22021"]
|
address: ["Via Roma 42R", "Bellagio, Italy 22021"]
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
_a = futurists;
|
_ref = futurists;
|
||||||
_b = _a.poet;
|
_ref2 = _ref.poet;
|
||||||
name = _b.name;
|
name = _ref2.name;
|
||||||
_c = _b.address;
|
_ref3 = _ref2.address;
|
||||||
street = _c[0];
|
street = _ref3[0];
|
||||||
city = _c[1];;alert(name + " — " + street);'>run: name + " — " + street</button><br class='clear' /></div>
|
city = _ref3[1];;alert(name + " — " + street);'>run: name + " — " + street</button><br class='clear' /></div>
|
||||||
<p>
|
<p>
|
||||||
Pattern matching can even be combined with splats.
|
Pattern matching can even be combined with splats.
|
||||||
</p>
|
</p>
|
||||||
|
@ -1407,20 +1407,20 @@ city = _c[1];;alert(name + " — " + street);'>run: name + " — " + street</but
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</pre><pre class="idle"><span class="Storage">var</span> _a, close, contents, open, tag;
|
</pre><pre class="idle"><span class="Storage">var</span> _ref, close, contents, open, tag;
|
||||||
<span class="Storage">var</span> __slice <span class="Keyword">=</span> <span class="LibraryClassType">Array</span>.<span class="LibraryConstant">prototype</span>.slice;
|
<span class="Storage">var</span> __slice <span class="Keyword">=</span> <span class="LibraryClassType">Array</span>.<span class="LibraryConstant">prototype</span>.slice;
|
||||||
tag <span class="Keyword">=</span> <span class="String"><span class="String">"</span><impossible><span class="String">"</span></span>;
|
tag <span class="Keyword">=</span> <span class="String"><span class="String">"</span><impossible><span class="String">"</span></span>;
|
||||||
_a <span class="Keyword">=</span> tag.<span class="LibraryFunction">split</span>(<span class="String"><span class="String">"</span><span class="String">"</span></span>);
|
_ref <span class="Keyword">=</span> tag.<span class="LibraryFunction">split</span>(<span class="String"><span class="String">"</span><span class="String">"</span></span>);
|
||||||
open <span class="Keyword">=</span> _a[<span class="Number">0</span>];
|
open <span class="Keyword">=</span> _ref[<span class="Number">0</span>];
|
||||||
contents <span class="Keyword">=</span> __slice.<span class="LibraryFunction">call</span>(_a, <span class="Number">1</span>, _a.<span class="LibraryConstant">length</span> <span class="Keyword">-</span> <span class="Number">1</span>);
|
contents <span class="Keyword">=</span> __slice.<span class="LibraryFunction">call</span>(_ref, <span class="Number">1</span>, _ref.<span class="LibraryConstant">length</span> <span class="Keyword">-</span> <span class="Number">1</span>);
|
||||||
close <span class="Keyword">=</span> _a[_a.<span class="LibraryConstant">length</span> <span class="Keyword">-</span> <span class="Number">1</span>];
|
close <span class="Keyword">=</span> _ref[_ref.<span class="LibraryConstant">length</span> <span class="Keyword">-</span> <span class="Number">1</span>];
|
||||||
</pre><button onclick='javascript: var _a, close, contents, open, tag;
|
</pre><button onclick='javascript: var _ref, close, contents, open, tag;
|
||||||
var __slice = Array.prototype.slice;
|
var __slice = Array.prototype.slice;
|
||||||
tag = "<impossible>";
|
tag = "<impossible>";
|
||||||
_a = tag.split("");
|
_ref = tag.split("");
|
||||||
open = _a[0];
|
open = _ref[0];
|
||||||
contents = __slice.call(_a, 1, _a.length - 1);
|
contents = __slice.call(_ref, 1, _ref.length - 1);
|
||||||
close = _a[_a.length - 1];;alert(contents.join(""));'>run: contents.join("")</button><br class='clear' /></div>
|
close = _ref[_ref.length - 1];;alert(contents.join(""));'>run: contents.join("")</button><br class='clear' /></div>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
<span id="fat_arrow" class="bookmark"></span>
|
<span id="fat_arrow" class="bookmark"></span>
|
||||||
|
@ -1511,27 +1511,27 @@ hi = function() {
|
||||||
<span class="Keyword">when</span> <span class="String"><span class="String">"</span>Sun<span class="String">"</span></span> <span class="Keyword">then</span> go church
|
<span class="Keyword">when</span> <span class="String"><span class="String">"</span>Sun<span class="String">"</span></span> <span class="Keyword">then</span> go church
|
||||||
<span class="Keyword">else</span> go work
|
<span class="Keyword">else</span> go work
|
||||||
</pre><pre class="idle"><span class="Keyword">switch</span> (day) {
|
</pre><pre class="idle"><span class="Keyword">switch</span> (day) {
|
||||||
<span class="Keyword">case</span> <span class="String"><span class="String">"</span>Mon<span class="String">"</span></span>:
|
<span class="Keyword">case</span> <span class="String"><span class="String">"</span>Mon<span class="String">"</span></span>:
|
||||||
<span class="LibraryFunction">go</span>(work);
|
<span class="LibraryFunction">go</span>(work);
|
||||||
<span class="Keyword">break</span>;
|
<span class="Keyword">break</span>;
|
||||||
<span class="Keyword">case</span> <span class="String"><span class="String">"</span>Tue<span class="String">"</span></span>:
|
<span class="Keyword">case</span> <span class="String"><span class="String">"</span>Tue<span class="String">"</span></span>:
|
||||||
<span class="LibraryFunction">go</span>(relax);
|
<span class="LibraryFunction">go</span>(relax);
|
||||||
<span class="Keyword">break</span>;
|
<span class="Keyword">break</span>;
|
||||||
<span class="Keyword">case</span> <span class="String"><span class="String">"</span>Thu<span class="String">"</span></span>:
|
<span class="Keyword">case</span> <span class="String"><span class="String">"</span>Thu<span class="String">"</span></span>:
|
||||||
<span class="LibraryFunction">go</span>(iceFishing);
|
<span class="LibraryFunction">go</span>(iceFishing);
|
||||||
<span class="Keyword">break</span>;
|
<span class="Keyword">break</span>;
|
||||||
<span class="Keyword">case</span> <span class="String"><span class="String">"</span>Fri<span class="String">"</span></span>:
|
<span class="Keyword">case</span> <span class="String"><span class="String">"</span>Fri<span class="String">"</span></span>:
|
||||||
<span class="Keyword">case</span> <span class="String"><span class="String">"</span>Sat<span class="String">"</span></span>:
|
<span class="Keyword">case</span> <span class="String"><span class="String">"</span>Sat<span class="String">"</span></span>:
|
||||||
<span class="Keyword">if</span> (day <span class="Keyword">===</span> bingoDay) {
|
<span class="Keyword">if</span> (day <span class="Keyword">===</span> bingoDay) {
|
||||||
<span class="LibraryFunction">go</span>(bingo);
|
<span class="LibraryFunction">go</span>(bingo);
|
||||||
<span class="LibraryFunction">go</span>(dancing);
|
<span class="LibraryFunction">go</span>(dancing);
|
||||||
}
|
}
|
||||||
<span class="Keyword">break</span>;
|
<span class="Keyword">break</span>;
|
||||||
<span class="Keyword">case</span> <span class="String"><span class="String">"</span>Sun<span class="String">"</span></span>:
|
<span class="Keyword">case</span> <span class="String"><span class="String">"</span>Sun<span class="String">"</span></span>:
|
||||||
<span class="LibraryFunction">go</span>(church);
|
<span class="LibraryFunction">go</span>(church);
|
||||||
<span class="Keyword">break</span>;
|
<span class="Keyword">break</span>;
|
||||||
<span class="Keyword">default</span>:
|
<span class="Keyword">default</span>:
|
||||||
<span class="LibraryFunction">go</span>(work);
|
<span class="LibraryFunction">go</span>(work);
|
||||||
}
|
}
|
||||||
</pre><br class='clear' /></div>
|
</pre><br class='clear' /></div>
|
||||||
|
|
||||||
|
@ -1662,10 +1662,11 @@ html <span class="Keyword">=</span> <span class="String"><span class="String">'<
|
||||||
are preserved in the generated code.
|
are preserved in the generated code.
|
||||||
</p>
|
</p>
|
||||||
<div class='code'><pre class="idle"><span class="Comment"><span class="Comment">###</span></span>
|
<div class='code'><pre class="idle"><span class="Comment"><span class="Comment">###</span></span>
|
||||||
<span class="Comment">CoffeeScript Compiler v0.9.3</span>
|
<span class="Comment">CoffeeScript Compiler v0.9.4</span>
|
||||||
<span class="Comment">Released under the MIT License</span>
|
<span class="Comment">Released under the MIT License</span>
|
||||||
<span class="Comment">###</span>
|
<span class="Comment">###</span>
|
||||||
</pre><pre class="idle"><span class="Comment"><span class="Comment">/*</span>CoffeeScript Compiler v0.9.3</span>
|
</pre><pre class="idle"><span class="Comment"><span class="Comment">/*</span></span>
|
||||||
|
<span class="Comment">CoffeeScript Compiler v0.9.4</span>
|
||||||
<span class="Comment">Released under the MIT License</span>
|
<span class="Comment">Released under the MIT License</span>
|
||||||
<span class="Comment"><span class="Comment">*/</span></span>
|
<span class="Comment"><span class="Comment">*/</span></span>
|
||||||
</pre><br class='clear' /></div>
|
</pre><br class='clear' /></div>
|
||||||
|
@ -1832,6 +1833,11 @@ task(<span class="String"><span class="String">'</span>build:parser<span class="
|
||||||
— a CoffeeScript compiler plug-in that allows you to include external
|
— a CoffeeScript compiler plug-in that allows you to include external
|
||||||
source files.
|
source files.
|
||||||
</li>
|
</li>
|
||||||
|
<li>
|
||||||
|
<b>mauricemach</b>'s <a href="http://github.com/mauricemach/coffeekup">CoffeeKup</a>
|
||||||
|
— Markup as CoffeeScript. After _why's
|
||||||
|
<a href="http://markaby.github.com/">Markaby</a>.
|
||||||
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<b>jashkenas</b>'s <a href="http://jashkenas.github.com/docco/">Docco</a>
|
<b>jashkenas</b>'s <a href="http://jashkenas.github.com/docco/">Docco</a>
|
||||||
— a quick-and-dirty literate-programming-style documentation generator
|
— a quick-and-dirty literate-programming-style documentation generator
|
||||||
|
@ -1859,6 +1865,15 @@ task(<span class="String"><span class="String">'</span>build:parser<span class="
|
||||||
Change Log
|
Change Log
|
||||||
</h2>
|
</h2>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
<b class="header" style="margin-top: 20px;">0.9.4</b>
|
||||||
|
CoffeeScript now uses appropriately-named temporary variables, and recycles
|
||||||
|
their references after use. Added <tt>require.extensions</tt> support for
|
||||||
|
<b>Node.js 0.3</b>. Loading CoffeeScript in the browser now adds just a
|
||||||
|
single <tt>CoffeeScript</tt> object to global scope.
|
||||||
|
Fixes for implicit object and block comment edge cases.
|
||||||
|
</p>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
<b class="header" style="margin-top: 20px;">0.9.3</b>
|
<b class="header" style="margin-top: 20px;">0.9.3</b>
|
||||||
CoffeeScript <tt>switch</tt> statements now compile into JS <tt>switch</tt>
|
CoffeeScript <tt>switch</tt> statements now compile into JS <tt>switch</tt>
|
||||||
|
|
|
@ -18,7 +18,7 @@
|
||||||
return compile(content);
|
return compile(content);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
exports.VERSION = '0.9.3';
|
exports.VERSION = '0.9.4';
|
||||||
exports.compile = (compile = function(code, options) {
|
exports.compile = (compile = function(code, options) {
|
||||||
options || (options = {});
|
options || (options = {});
|
||||||
try {
|
try {
|
||||||
|
|
18
lib/lexer.js
18
lib/lexer.js
|
@ -421,15 +421,15 @@
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
switch (tok[0]) {
|
switch (tok[0]) {
|
||||||
case 'IDENTIFIER':
|
case 'IDENTIFIER':
|
||||||
tok[0] = 'PARAM';
|
tok[0] = 'PARAM';
|
||||||
break;
|
break;
|
||||||
case ')':
|
case ')':
|
||||||
tok[0] = 'PARAM_END';
|
tok[0] = 'PARAM_END';
|
||||||
break;
|
break;
|
||||||
case '(':
|
case '(':
|
||||||
case 'CALL_START':
|
case 'CALL_START':
|
||||||
return (tok[0] = 'PARAM_START');
|
return (tok[0] = 'PARAM_START');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
|
|
|
@ -1769,7 +1769,7 @@
|
||||||
};
|
};
|
||||||
SwitchNode.prototype.compileNode = function(o) {
|
SwitchNode.prototype.compileNode = function(o) {
|
||||||
var _i, _j, _len, _len2, _ref2, _ref3, block, code, condition, conditions, exprs, idt, pair;
|
var _i, _j, _len, _len2, _ref2, _ref3, block, code, condition, conditions, exprs, idt, pair;
|
||||||
idt = (o.indent = this.idt(1));
|
idt = (o.indent = this.idt(2));
|
||||||
o.top = true;
|
o.top = true;
|
||||||
code = ("" + (this.tab) + "switch (" + (this.subject.compile(o)) + ") {");
|
code = ("" + (this.tab) + "switch (" + (this.subject.compile(o)) + ") {");
|
||||||
_ref2 = this.cases;
|
_ref2 = this.cases;
|
||||||
|
@ -1785,7 +1785,7 @@
|
||||||
if (this.tags.subjectless) {
|
if (this.tags.subjectless) {
|
||||||
condition = new OpNode('!!', new ParentheticalNode(condition));
|
condition = new OpNode('!!', new ParentheticalNode(condition));
|
||||||
}
|
}
|
||||||
code += ("\n" + (this.tab) + "case " + (condition.compile(o)) + ":");
|
code += ("\n" + (this.idt(1)) + "case " + (condition.compile(o)) + ":");
|
||||||
}
|
}
|
||||||
code += ("\n" + (block.compile(o)));
|
code += ("\n" + (block.compile(o)));
|
||||||
if (!(exprs[exprs.length - 1] instanceof ReturnNode)) {
|
if (!(exprs[exprs.length - 1] instanceof ReturnNode)) {
|
||||||
|
@ -1793,7 +1793,7 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (this.otherwise) {
|
if (this.otherwise) {
|
||||||
code += ("\n" + (this.tab) + "default:\n" + (this.otherwise.compile(o)));
|
code += ("\n" + (this.idt(1)) + "default:\n" + (this.otherwise.compile(o)));
|
||||||
}
|
}
|
||||||
code += ("\n" + (this.tab) + "}");
|
code += ("\n" + (this.tab) + "}");
|
||||||
return code;
|
return code;
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
"description": "Unfancy JavaScript",
|
"description": "Unfancy JavaScript",
|
||||||
"keywords": ["javascript", "language", "coffeescript", "compiler"],
|
"keywords": ["javascript", "language", "coffeescript", "compiler"],
|
||||||
"author": "Jeremy Ashkenas",
|
"author": "Jeremy Ashkenas",
|
||||||
"version": "0.9.3",
|
"version": "0.9.4",
|
||||||
"licenses": [{
|
"licenses": [{
|
||||||
"type": "MIT",
|
"type": "MIT",
|
||||||
"url": "http://github.com/jashkenas/coffee-script/raw/master/LICENSE"
|
"url": "http://github.com/jashkenas/coffee-script/raw/master/LICENSE"
|
||||||
|
|
|
@ -21,7 +21,7 @@ else if require.registerExtension
|
||||||
require.registerExtension '.coffee', (content) -> compile content
|
require.registerExtension '.coffee', (content) -> compile content
|
||||||
|
|
||||||
# The current CoffeeScript version number.
|
# The current CoffeeScript version number.
|
||||||
exports.VERSION = '0.9.3'
|
exports.VERSION = '0.9.4'
|
||||||
|
|
||||||
# Compile a string of CoffeeScript code to JavaScript, using the Coffee/Jison
|
# Compile a string of CoffeeScript code to JavaScript, using the Coffee/Jison
|
||||||
# compiler.
|
# compiler.
|
||||||
|
|
|
@ -1445,7 +1445,7 @@ exports.SwitchNode = class SwitchNode extends BaseNode
|
||||||
this
|
this
|
||||||
|
|
||||||
compileNode: (o) ->
|
compileNode: (o) ->
|
||||||
idt = o.indent = @idt 1
|
idt = o.indent = @idt 2
|
||||||
o.top = yes
|
o.top = yes
|
||||||
code = "#{ @tab }switch (#{ @subject.compile o }) {"
|
code = "#{ @tab }switch (#{ @subject.compile o }) {"
|
||||||
for pair in @cases
|
for pair in @cases
|
||||||
|
@ -1453,11 +1453,11 @@ exports.SwitchNode = class SwitchNode extends BaseNode
|
||||||
exprs = block.expressions
|
exprs = block.expressions
|
||||||
for condition in flatten [conditions]
|
for condition in flatten [conditions]
|
||||||
condition = new OpNode '!!', new ParentheticalNode condition if @tags.subjectless
|
condition = new OpNode '!!', new ParentheticalNode condition if @tags.subjectless
|
||||||
code += "\n#{ @tab }case #{ condition.compile o }:"
|
code += "\n#{ @idt(1) }case #{ condition.compile o }:"
|
||||||
code += "\n#{ block.compile o }"
|
code += "\n#{ block.compile o }"
|
||||||
code += "\n#{ idt }break;" unless exprs[exprs.length - 1] instanceof ReturnNode
|
code += "\n#{ idt }break;" unless exprs[exprs.length - 1] instanceof ReturnNode
|
||||||
if @otherwise
|
if @otherwise
|
||||||
code += "\n#{ @tab }default:\n#{ @otherwise.compile o }"
|
code += "\n#{ @idt(1) }default:\n#{ @otherwise.compile o }"
|
||||||
code += "\n#{ @tab }}"
|
code += "\n#{ @tab }}"
|
||||||
code
|
code
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue