1
0
Fork 0
mirror of https://github.com/jashkenas/coffeescript.git synced 2022-11-09 12:23:24 -05:00

Adding an existential infix operator example.

This commit is contained in:
Jeremy Ashkenas 2010-12-11 19:44:11 -05:00
parent 9f56c92497
commit 2ac5ee4062
4 changed files with 101 additions and 94 deletions

View file

@ -1,6 +1,8 @@
solipsism = true if mind? and not world? solipsism = true if mind? and not world?
speed ?= 140 speed ?= 75
footprints = yeti ? "bear"

View file

@ -518,12 +518,12 @@ coffee --bare --print --stdio</pre>
</p> </p>
<%= code_for('range_comprehensions', 'countdown') %> <%= code_for('range_comprehensions', 'countdown') %>
<p> <p>
Note how because we are assigning the value of the comprehensions to a Note how because we are assigning the value of the comprehensions to a
variable in the example above, CoffeeScript is collecting the result of variable in the example above, CoffeeScript is collecting the result of
each iteration into an array. Sometimes functions end with loops that are each iteration into an array. Sometimes functions end with loops that are
intended to run only for their side-effects. Be careful that you're not intended to run only for their side-effects. Be careful that you're not
accidentally returning the results of the comprehension in these cases, accidentally returning the results of the comprehension in these cases,
by adding a meaningful return value, like <tt>true</tt>, or <tt>null</tt>, by adding a meaningful return value, like <tt>true</tt>, or <tt>null</tt>,
to the bottom of your function. to the bottom of your function.
</p> </p>
<p> <p>
@ -608,7 +608,7 @@ coffee --bare --print --stdio</pre>
It can also be used for safer conditional assignment than <tt>||=</tt> It can also be used for safer conditional assignment than <tt>||=</tt>
provides, for cases where you may be handling numbers or strings. provides, for cases where you may be handling numbers or strings.
</p> </p>
<%= code_for('existence', 'speed') %> <%= code_for('existence', 'footprints') %>
<p> <p>
The accessor variant of the existential operator <tt>?.</tt> can be used to soak The accessor variant of the existential operator <tt>?.</tt> can be used to soak
up null references in a chain of properties. Use it instead up null references in a chain of properties. Use it instead
@ -1034,23 +1034,23 @@ coffee --bare --print --stdio</pre>
<span id="change_log" class="bookmark"></span> <span id="change_log" class="bookmark"></span>
Change Log Change Log
</h2> </h2>
<p> <p>
<b class="header" style="margin-top: 20px;">0.9.6 <b class="header" style="margin-top: 20px;">0.9.6
<span class="timestamp"> &ndash; <small>Dec 6, 2010</small></span> <span class="timestamp"> &ndash; <small>Dec 6, 2010</small></span>
</b> </b>
The REPL now properly formats stacktraces, and stays alive through The REPL now properly formats stacktraces, and stays alive through
asynchronous exceptions. Using <tt>--watch</tt> now prints timestamps as asynchronous exceptions. Using <tt>--watch</tt> now prints timestamps as
files are compiled. Fixed some accidentally-leaking variables within files are compiled. Fixed some accidentally-leaking variables within
plucked closure-loops. Constructors now maintain their declaration plucked closure-loops. Constructors now maintain their declaration
location within a class body. Dynamic object keys were removed. location within a class body. Dynamic object keys were removed.
Nested classes are now supported. Fixes execution context for naked Nested classes are now supported. Fixes execution context for naked
splatted functions. Bugfix for inversion of chained comparisons. splatted functions. Bugfix for inversion of chained comparisons.
Chained class instantiation now works properly with splats. Chained class instantiation now works properly with splats.
</p> </p>
<p> <p>
<b class="header" style="margin-top: 20px;">0.9.5 <b class="header" style="margin-top: 20px;">0.9.5
<span class="timestamp"> &ndash; <small>Nov 21, 2010</small></span> <span class="timestamp"> &ndash; <small>Nov 21, 2010</small></span>
</b> </b>
0.9.5 should be considered the first release candidate for CoffeeScript 1.0. 0.9.5 should be considered the first release candidate for CoffeeScript 1.0.
@ -1066,7 +1066,7 @@ coffee --bare --print --stdio</pre>
</p> </p>
<p> <p>
<b class="header" style="margin-top: 20px;">0.9.4 <b class="header" style="margin-top: 20px;">0.9.4
<span class="timestamp"> &ndash; <small>Sep 21, 2010</small></span> <span class="timestamp"> &ndash; <small>Sep 21, 2010</small></span>
</b> </b>
CoffeeScript now uses appropriately-named temporary variables, and recycles CoffeeScript now uses appropriately-named temporary variables, and recycles
@ -1077,7 +1077,7 @@ coffee --bare --print --stdio</pre>
</p> </p>
<p> <p>
<b class="header" style="margin-top: 20px;">0.9.3 <b class="header" style="margin-top: 20px;">0.9.3
<span class="timestamp"> &ndash; <small>Sep 16, 2010</small></span> <span class="timestamp"> &ndash; <small>Sep 16, 2010</small></span>
</b> </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>
@ -1088,7 +1088,7 @@ coffee --bare --print --stdio</pre>
</p> </p>
<p> <p>
<b class="header" style="margin-top: 20px;">0.9.2 <b class="header" style="margin-top: 20px;">0.9.2
<span class="timestamp"> &ndash; <small>Aug 23, 2010</small></span> <span class="timestamp"> &ndash; <small>Aug 23, 2010</small></span>
</b> </b>
Specifying the start and end of a range literal is now optional, eg. <tt>array[3..]</tt>. Specifying the start and end of a range literal is now optional, eg. <tt>array[3..]</tt>.
@ -1104,7 +1104,7 @@ coffee --bare --print --stdio</pre>
</p> </p>
<p> <p>
<b class="header" style="margin-top: 20px;">0.9.1 <b class="header" style="margin-top: 20px;">0.9.1
<span class="timestamp"> &ndash; <small>Aug 11, 2010</small></span> <span class="timestamp"> &ndash; <small>Aug 11, 2010</small></span>
</b> </b>
Bugfix release for <b>0.9.1</b>. Greatly improves the handling of mixed Bugfix release for <b>0.9.1</b>. Greatly improves the handling of mixed
@ -1115,7 +1115,7 @@ coffee --bare --print --stdio</pre>
</p> </p>
<p> <p>
<b class="header" style="margin-top: 20px;">0.9.0 <b class="header" style="margin-top: 20px;">0.9.0
<span class="timestamp"> &ndash; <small>Aug 4, 2010</small></span> <span class="timestamp"> &ndash; <small>Aug 4, 2010</small></span>
</b> </b>
The CoffeeScript <b>0.9</b> series is considered to be a release candidate The CoffeeScript <b>0.9</b> series is considered to be a release candidate
@ -1141,7 +1141,7 @@ coffee --bare --print --stdio</pre>
</p> </p>
<p> <p>
<b class="header" style="margin-top: 20px;">0.7.2 <b class="header" style="margin-top: 20px;">0.7.2
<span class="timestamp"> &ndash; <small>Jul 12, 2010</small></span> <span class="timestamp"> &ndash; <small>Jul 12, 2010</small></span>
</b> </b>
Quick bugfix (right after 0.7.1) for a problem that prevented <tt>coffee</tt> Quick bugfix (right after 0.7.1) for a problem that prevented <tt>coffee</tt>
@ -1149,7 +1149,7 @@ coffee --bare --print --stdio</pre>
</p> </p>
<p> <p>
<b class="header" style="margin-top: 20px;">0.7.1 <b class="header" style="margin-top: 20px;">0.7.1
<span class="timestamp"> &ndash; <small>Jul 11, 2010</small></span> <span class="timestamp"> &ndash; <small>Jul 11, 2010</small></span>
</b> </b>
Block-style comments are now passed through and printed as JavaScript block Block-style comments are now passed through and printed as JavaScript block
@ -1159,7 +1159,7 @@ coffee --bare --print --stdio</pre>
</p> </p>
<p> <p>
<b class="header" style="margin-top: 20px;">0.7.0 <b class="header" style="margin-top: 20px;">0.7.0
<span class="timestamp"> &ndash; <small>Jun 28, 2010</small></span> <span class="timestamp"> &ndash; <small>Jun 28, 2010</small></span>
</b> </b>
Official CoffeeScript variable style is now camelCase, as in JavaScript. Official CoffeeScript variable style is now camelCase, as in JavaScript.
@ -1178,7 +1178,7 @@ coffee --bare --print --stdio</pre>
</p> </p>
<p> <p>
<b class="header" style="margin-top: 20px;">0.6.2 <b class="header" style="margin-top: 20px;">0.6.2
<span class="timestamp"> &ndash; <small>May 15, 2010</small></span> <span class="timestamp"> &ndash; <small>May 15, 2010</small></span>
</b> </b>
The <tt>coffee</tt> command will now preserve directory structure when The <tt>coffee</tt> command will now preserve directory structure when
@ -1195,7 +1195,7 @@ coffee --bare --print --stdio</pre>
</p> </p>
<p> <p>
<b class="header" style="margin-top: 20px;">0.6.1 <b class="header" style="margin-top: 20px;">0.6.1
<span class="timestamp"> &ndash; <small>Apr 12, 2010</small></span> <span class="timestamp"> &ndash; <small>Apr 12, 2010</small></span>
</b> </b>
Upgraded CoffeeScript for compatibility with the new Node.js <b>v0.1.90</b> Upgraded CoffeeScript for compatibility with the new Node.js <b>v0.1.90</b>
@ -1203,7 +1203,7 @@ coffee --bare --print --stdio</pre>
</p> </p>
<p> <p>
<b class="header" style="margin-top: 20px;">0.6.0 <b class="header" style="margin-top: 20px;">0.6.0
<span class="timestamp"> &ndash; <small>Apr 3, 2010</small></span> <span class="timestamp"> &ndash; <small>Apr 3, 2010</small></span>
</b> </b>
Trailing commas are now allowed, a-la Python. Static Trailing commas are now allowed, a-la Python. Static
@ -1212,7 +1212,7 @@ coffee --bare --print --stdio</pre>
</p> </p>
<p> <p>
<b class="header" style="margin-top: 20px;">0.5.6 <b class="header" style="margin-top: 20px;">0.5.6
<span class="timestamp"> &ndash; <small>Mar 23, 2010</small></span> <span class="timestamp"> &ndash; <small>Mar 23, 2010</small></span>
</b> </b>
Interpolation can now be used within regular expressions and heredocs, as well as Interpolation can now be used within regular expressions and heredocs, as well as
@ -1225,7 +1225,7 @@ coffee --bare --print --stdio</pre>
</p> </p>
<p> <p>
<b class="header" style="margin-top: 20px;">0.5.5 <b class="header" style="margin-top: 20px;">0.5.5
<span class="timestamp"> &ndash; <small>Mar 8, 2010</small></span> <span class="timestamp"> &ndash; <small>Mar 8, 2010</small></span>
</b> </b>
String interpolation, contributed by String interpolation, contributed by
@ -1236,7 +1236,7 @@ coffee --bare --print --stdio</pre>
</p> </p>
<p> <p>
<b class="header" style="margin-top: 20px;">0.5.4 <b class="header" style="margin-top: 20px;">0.5.4
<span class="timestamp"> &ndash; <small>Mar 3, 2010</small></span> <span class="timestamp"> &ndash; <small>Mar 3, 2010</small></span>
</b> </b>
Bugfix that corrects the Node.js global constants <tt>__filename</tt> and Bugfix that corrects the Node.js global constants <tt>__filename</tt> and
@ -1245,7 +1245,7 @@ coffee --bare --print --stdio</pre>
</p> </p>
<p> <p>
<b class="header" style="margin-top: 20px;">0.5.3 <b class="header" style="margin-top: 20px;">0.5.3
<span class="timestamp"> &ndash; <small>Feb 27, 2010</small></span> <span class="timestamp"> &ndash; <small>Feb 27, 2010</small></span>
</b> </b>
CoffeeScript now has a syntax for defining classes. Many of the core CoffeeScript now has a syntax for defining classes. Many of the core
@ -1257,7 +1257,7 @@ coffee --bare --print --stdio</pre>
</p> </p>
<p> <p>
<b class="header" style="margin-top: 20px;">0.5.2 <b class="header" style="margin-top: 20px;">0.5.2
<span class="timestamp"> &ndash; <small>Feb 25, 2010</small></span> <span class="timestamp"> &ndash; <small>Feb 25, 2010</small></span>
</b> </b>
Added a compressed version of the compiler for inclusion in web pages as Added a compressed version of the compiler for inclusion in web pages as
@ -1268,7 +1268,7 @@ coffee --bare --print --stdio</pre>
<p> <p>
<b class="header" style="margin-top: 20px;">0.5.1 <b class="header" style="margin-top: 20px;">0.5.1
<span class="timestamp"> &ndash; <small>Feb 24, 2010</small></span> <span class="timestamp"> &ndash; <small>Feb 24, 2010</small></span>
</b> </b>
Improvements to null soaking with the existential operator, including Improvements to null soaking with the existential operator, including
@ -1278,7 +1278,7 @@ coffee --bare --print --stdio</pre>
</p> </p>
<p> <p>
<b class="header" style="margin-top: 20px;">0.5.0 <b class="header" style="margin-top: 20px;">0.5.0
<span class="timestamp"> &ndash; <small>Feb 21, 2010</small></span> <span class="timestamp"> &ndash; <small>Feb 21, 2010</small></span>
</b> </b>
CoffeeScript 0.5.0 is a major release, While there are no language changes, CoffeeScript 0.5.0 is a major release, While there are no language changes,
@ -1287,7 +1287,7 @@ coffee --bare --print --stdio</pre>
</p> </p>
<p> <p>
<b class="header" style="margin-top: 20px;">0.3.2 <b class="header" style="margin-top: 20px;">0.3.2
<span class="timestamp"> &ndash; <small>Feb 8, 2010</small></span> <span class="timestamp"> &ndash; <small>Feb 8, 2010</small></span>
</b> </b>
<tt>@property</tt> is now a shorthand for <tt>this.property</tt>.<br /> <tt>@property</tt> is now a shorthand for <tt>this.property</tt>.<br />
@ -1296,7 +1296,7 @@ coffee --bare --print --stdio</pre>
</p> </p>
<p> <p>
<b class="header" style="margin-top: 20px;">0.3.0 <b class="header" style="margin-top: 20px;">0.3.0
<span class="timestamp"> &ndash; <small>Jan 26, 2010</small></span> <span class="timestamp"> &ndash; <small>Jan 26, 2010</small></span>
</b> </b>
CoffeeScript 0.3 includes major syntax changes: CoffeeScript 0.3 includes major syntax changes:
@ -1314,7 +1314,7 @@ coffee --bare --print --stdio</pre>
</p> </p>
<p> <p>
<b class="header" style="margin-top: 20px;">0.2.6 <b class="header" style="margin-top: 20px;">0.2.6
<span class="timestamp"> &ndash; <small>Jan 17, 2010</small></span> <span class="timestamp"> &ndash; <small>Jan 17, 2010</small></span>
</b> </b>
Added Python-style chained comparisons, the conditional existence Added Python-style chained comparisons, the conditional existence
@ -1324,7 +1324,7 @@ coffee --bare --print --stdio</pre>
</p> </p>
<p> <p>
<b class="header" style="margin-top: 20px;">0.2.5 <b class="header" style="margin-top: 20px;">0.2.5
<span class="timestamp"> &ndash; <small>Jan 13, 2010</small></span> <span class="timestamp"> &ndash; <small>Jan 13, 2010</small></span>
</b> </b>
The conditions in switch statements can now take multiple values at once &mdash; The conditions in switch statements can now take multiple values at once &mdash;
@ -1335,7 +1335,7 @@ coffee --bare --print --stdio</pre>
</p> </p>
<p> <p>
<b class="header" style="margin-top: 20px;">0.2.4 <b class="header" style="margin-top: 20px;">0.2.4
<span class="timestamp"> &ndash; <small>Jan 12, 2010</small></span> <span class="timestamp"> &ndash; <small>Jan 12, 2010</small></span>
</b> </b>
Added ECMAScript Harmony style destructuring assignment, for dealing with Added ECMAScript Harmony style destructuring assignment, for dealing with
@ -1344,7 +1344,7 @@ coffee --bare --print --stdio</pre>
</p> </p>
<p> <p>
<b class="header" style="margin-top: 20px;">0.2.3 <b class="header" style="margin-top: 20px;">0.2.3
<span class="timestamp"> &ndash; <small>Jan 11, 2010</small></span> <span class="timestamp"> &ndash; <small>Jan 11, 2010</small></span>
</b> </b>
Axed the unsatisfactory <tt>ino</tt> keyword, replacing it with <tt>of</tt> for Axed the unsatisfactory <tt>ino</tt> keyword, replacing it with <tt>of</tt> for
@ -1352,7 +1352,7 @@ coffee --bare --print --stdio</pre>
</p> </p>
<p> <p>
<b class="header" style="margin-top: 20px;">0.2.2 <b class="header" style="margin-top: 20px;">0.2.2
<span class="timestamp"> &ndash; <small>Jan 10, 2010</small></span> <span class="timestamp"> &ndash; <small>Jan 10, 2010</small></span>
</b> </b>
When performing a comprehension over an object, use <tt>ino</tt>, instead When performing a comprehension over an object, use <tt>ino</tt>, instead
@ -1375,14 +1375,14 @@ coffee --bare --print --stdio</pre>
</p> </p>
<p> <p>
<b class="header" style="margin-top: 20px;">0.2.1 <b class="header" style="margin-top: 20px;">0.2.1
<span class="timestamp"> &ndash; <small>Jan 5, 2010</small></span> <span class="timestamp"> &ndash; <small>Jan 5, 2010</small></span>
</b> </b>
Arguments objects are now converted into real arrays when referenced. Arguments objects are now converted into real arrays when referenced.
</p> </p>
<p> <p>
<b class="header" style="margin-top: 20px;">0.2.0 <b class="header" style="margin-top: 20px;">0.2.0
<span class="timestamp"> &ndash; <small>Jan 5, 2010</small></span> <span class="timestamp"> &ndash; <small>Jan 5, 2010</small></span>
</b> </b>
Major release. Significant whitespace. Better statement-to-expression Major release. Significant whitespace. Better statement-to-expression
@ -1394,7 +1394,7 @@ coffee --bare --print --stdio</pre>
</p> </p>
<p> <p>
<b class="header" style="margin-top: 20px;">0.1.6 <b class="header" style="margin-top: 20px;">0.1.6
<span class="timestamp"> &ndash; <small>Dec 27, 2009</small></span> <span class="timestamp"> &ndash; <small>Dec 27, 2009</small></span>
</b> </b>
Bugfix for running <tt>coffee --interactive</tt> and <tt>--run</tt> Bugfix for running <tt>coffee --interactive</tt> and <tt>--run</tt>
@ -1403,7 +1403,7 @@ coffee --bare --print --stdio</pre>
</p> </p>
<p> <p>
<b class="header" style="margin-top: 20px;">0.1.5 <b class="header" style="margin-top: 20px;">0.1.5
<span class="timestamp"> &ndash; <small>Dec 26, 2009</small></span> <span class="timestamp"> &ndash; <small>Dec 26, 2009</small></span>
</b> </b>
Array slice literals and array comprehensions can now both take Ruby-style Array slice literals and array comprehensions can now both take Ruby-style
@ -1414,7 +1414,7 @@ coffee --bare --print --stdio</pre>
</p> </p>
<p> <p>
<b class="header" style="margin-top: 20px;">0.1.4 <b class="header" style="margin-top: 20px;">0.1.4
<span class="timestamp"> &ndash; <small>Dec 25, 2009</small></span> <span class="timestamp"> &ndash; <small>Dec 25, 2009</small></span>
</b> </b>
The official CoffeeScript extension is now <tt>.coffee</tt> instead of The official CoffeeScript extension is now <tt>.coffee</tt> instead of
@ -1428,7 +1428,7 @@ coffee --bare --print --stdio</pre>
</p> </p>
<p> <p>
<b class="header" style="margin-top: 20px;">0.1.3 <b class="header" style="margin-top: 20px;">0.1.3
<span class="timestamp"> &ndash; <small>Dec 25, 2009</small></span> <span class="timestamp"> &ndash; <small>Dec 25, 2009</small></span>
</b> </b>
The <tt>coffee</tt> command now includes <tt>--interactive</tt>, The <tt>coffee</tt> command now includes <tt>--interactive</tt>,
@ -1444,7 +1444,7 @@ coffee --bare --print --stdio</pre>
</p> </p>
<p> <p>
<b class="header" style="margin-top: 20px;">0.1.2 <b class="header" style="margin-top: 20px;">0.1.2
<span class="timestamp"> &ndash; <small>Dec 24, 2009</small></span> <span class="timestamp"> &ndash; <small>Dec 24, 2009</small></span>
</b> </b>
Fixed a bug with calling <tt>super()</tt> through more than one level of Fixed a bug with calling <tt>super()</tt> through more than one level of
@ -1458,14 +1458,14 @@ coffee --bare --print --stdio</pre>
</p> </p>
<p> <p>
<b class="header" style="margin-top: 20px;">0.1.1 <b class="header" style="margin-top: 20px;">0.1.1
<span class="timestamp"> &ndash; <small>Dec 24, 2009</small></span> <span class="timestamp"> &ndash; <small>Dec 24, 2009</small></span>
</b> </b>
Added <tt>instanceof</tt> and <tt>typeof</tt> as operators. Added <tt>instanceof</tt> and <tt>typeof</tt> as operators.
</p> </p>
<p> <p>
<b class="header" style="margin-top: 20px;">0.1.0 <b class="header" style="margin-top: 20px;">0.1.0
<span class="timestamp"> &ndash; <small>Dec 24, 2009</small></span> <span class="timestamp"> &ndash; <small>Dec 24, 2009</small></span>
</b> </b>
Initial CoffeeScript release. Initial CoffeeScript release.

View file

@ -1,5 +1,6 @@
var solipsism; var footprints, solipsism;
if ((typeof mind != "undefined" && mind !== null) && !(typeof world != "undefined" && world !== null)) { if ((typeof mind != "undefined" && mind !== null) && !(typeof world != "undefined" && world !== null)) {
solipsism = true; solipsism = true;
} }
typeof speed != "undefined" && speed !== null ? speed : speed = 140; typeof speed != "undefined" && speed !== null ? speed : speed = 75;
footprints = typeof yeti != "undefined" && yeti !== null ? yeti : "bear";

View file

@ -886,12 +886,12 @@ countdown = (function() {
return _results; return _results;
}());;alert(countdown);'>run: countdown</button><br class='clear' /></div> }());;alert(countdown);'>run: countdown</button><br class='clear' /></div>
<p> <p>
Note how because we are assigning the value of the comprehensions to a Note how because we are assigning the value of the comprehensions to a
variable in the example above, CoffeeScript is collecting the result of variable in the example above, CoffeeScript is collecting the result of
each iteration into an array. Sometimes functions end with loops that are each iteration into an array. Sometimes functions end with loops that are
intended to run only for their side-effects. Be careful that you're not intended to run only for their side-effects. Be careful that you're not
accidentally returning the results of the comprehension in these cases, accidentally returning the results of the comprehension in these cases,
by adding a meaningful return value, like <tt>true</tt>, or <tt>null</tt>, by adding a meaningful return value, like <tt>true</tt>, or <tt>null</tt>,
to the bottom of your function. to the bottom of your function.
</p> </p>
<p> <p>
@ -1111,22 +1111,26 @@ globals = (function() {
</p> </p>
<div class='code'><pre class="idle">solipsism <span class="Keyword">=</span> <span class="BuiltInConstant">true</span> <span class="Keyword">if</span> mind<span class="Keyword">?</span> <span class="Keyword">and</span> <span class="Keyword">not</span> world<span class="Keyword">?</span> <div class='code'><pre class="idle">solipsism <span class="Keyword">=</span> <span class="BuiltInConstant">true</span> <span class="Keyword">if</span> mind<span class="Keyword">?</span> <span class="Keyword">and</span> <span class="Keyword">not</span> world<span class="Keyword">?</span>
speed <span class="Keyword">?</span><span class="Keyword">=</span> <span class="Number">140</span> speed <span class="Keyword">?</span><span class="Keyword">=</span> <span class="Number">75</span>
footprints <span class="Keyword">=</span> yeti <span class="Keyword">?</span> <span class="String"><span class="String">&quot;</span>bear<span class="String">&quot;</span></span>
</pre><pre class="idle"><span class="Storage">var</span> solipsism; </pre><pre class="idle"><span class="Storage">var</span> footprints, solipsism;
<span class="Keyword">if</span> ((<span class="Keyword">typeof</span> mind <span class="Keyword">!</span><span class="Keyword">=</span> <span class="String"><span class="String">&quot;</span>undefined<span class="String">&quot;</span></span> <span class="Keyword">&amp;</span><span class="Keyword">&amp;</span> mind <span class="Keyword">!</span><span class="Keyword">==</span> <span class="BuiltInConstant">null</span>) <span class="Keyword">&amp;</span><span class="Keyword">&amp;</span> <span class="Keyword">!</span>(<span class="Keyword">typeof</span> world <span class="Keyword">!</span><span class="Keyword">=</span> <span class="String"><span class="String">&quot;</span>undefined<span class="String">&quot;</span></span> <span class="Keyword">&amp;</span><span class="Keyword">&amp;</span> world <span class="Keyword">!</span><span class="Keyword">==</span> <span class="BuiltInConstant">null</span>)) { <span class="Keyword">if</span> ((<span class="Keyword">typeof</span> mind <span class="Keyword">!</span><span class="Keyword">=</span> <span class="String"><span class="String">&quot;</span>undefined<span class="String">&quot;</span></span> <span class="Keyword">&amp;</span><span class="Keyword">&amp;</span> mind <span class="Keyword">!</span><span class="Keyword">==</span> <span class="BuiltInConstant">null</span>) <span class="Keyword">&amp;</span><span class="Keyword">&amp;</span> <span class="Keyword">!</span>(<span class="Keyword">typeof</span> world <span class="Keyword">!</span><span class="Keyword">=</span> <span class="String"><span class="String">&quot;</span>undefined<span class="String">&quot;</span></span> <span class="Keyword">&amp;</span><span class="Keyword">&amp;</span> world <span class="Keyword">!</span><span class="Keyword">==</span> <span class="BuiltInConstant">null</span>)) {
solipsism <span class="Keyword">=</span> <span class="BuiltInConstant">true</span>; solipsism <span class="Keyword">=</span> <span class="BuiltInConstant">true</span>;
} }
<span class="Keyword">typeof</span> speed <span class="Keyword">!</span><span class="Keyword">=</span> <span class="String"><span class="String">&quot;</span>undefined<span class="String">&quot;</span></span> <span class="Keyword">&amp;</span><span class="Keyword">&amp;</span> speed <span class="Keyword">!</span><span class="Keyword">==</span> <span class="BuiltInConstant">null</span> ? speed : speed <span class="Keyword">=</span> <span class="Number">140</span>; <span class="Keyword">typeof</span> speed <span class="Keyword">!</span><span class="Keyword">=</span> <span class="String"><span class="String">&quot;</span>undefined<span class="String">&quot;</span></span> <span class="Keyword">&amp;</span><span class="Keyword">&amp;</span> speed <span class="Keyword">!</span><span class="Keyword">==</span> <span class="BuiltInConstant">null</span> ? speed : speed <span class="Keyword">=</span> <span class="Number">75</span>;
</pre><button onclick='javascript: var solipsism; footprints <span class="Keyword">=</span> <span class="Keyword">typeof</span> yeti <span class="Keyword">!</span><span class="Keyword">=</span> <span class="String"><span class="String">&quot;</span>undefined<span class="String">&quot;</span></span> <span class="Keyword">&amp;</span><span class="Keyword">&amp;</span> yeti <span class="Keyword">!</span><span class="Keyword">==</span> <span class="BuiltInConstant">null</span> ? yeti : <span class="String"><span class="String">&quot;</span>bear<span class="String">&quot;</span></span>;
</pre><button onclick='javascript: var footprints, solipsism;
if ((typeof mind != "undefined" && mind !== null) && !(typeof world != "undefined" && world !== null)) { if ((typeof mind != "undefined" && mind !== null) && !(typeof world != "undefined" && world !== null)) {
solipsism = true; solipsism = true;
} }
typeof speed != "undefined" && speed !== null ? speed : speed = 140;;alert(speed);'>run: speed</button><br class='clear' /></div> typeof speed != "undefined" && speed !== null ? speed : speed = 75;
footprints = typeof yeti != "undefined" && yeti !== null ? yeti : "bear";;alert(footprints);'>run: footprints</button><br class='clear' /></div>
<p> <p>
The accessor variant of the existential operator <tt>?.</tt> can be used to soak The accessor variant of the existential operator <tt>?.</tt> can be used to soak
up null references in a chain of properties. Use it instead up null references in a chain of properties. Use it instead
@ -1901,23 +1905,23 @@ task(<span class="String"><span class="String">'</span>build:parser<span class="
<span id="change_log" class="bookmark"></span> <span id="change_log" class="bookmark"></span>
Change Log Change Log
</h2> </h2>
<p> <p>
<b class="header" style="margin-top: 20px;">0.9.6 <b class="header" style="margin-top: 20px;">0.9.6
<span class="timestamp"> &ndash; <small>Dec 6, 2010</small></span> <span class="timestamp"> &ndash; <small>Dec 6, 2010</small></span>
</b> </b>
The REPL now properly formats stacktraces, and stays alive through The REPL now properly formats stacktraces, and stays alive through
asynchronous exceptions. Using <tt>--watch</tt> now prints timestamps as asynchronous exceptions. Using <tt>--watch</tt> now prints timestamps as
files are compiled. Fixed some accidentally-leaking variables within files are compiled. Fixed some accidentally-leaking variables within
plucked closure-loops. Constructors now maintain their declaration plucked closure-loops. Constructors now maintain their declaration
location within a class body. location within a class body. Dynamic object keys were removed.
Nested classes are now supported. Fixes execution context for naked Nested classes are now supported. Fixes execution context for naked
splatted functions. Bugfix for inversion of chained comparisons. splatted functions. Bugfix for inversion of chained comparisons.
Chained class instantiation now works properly with splats. Chained class instantiation now works properly with splats.
</p> </p>
<p> <p>
<b class="header" style="margin-top: 20px;">0.9.5 <b class="header" style="margin-top: 20px;">0.9.5
<span class="timestamp"> &ndash; <small>Nov 21, 2010</small></span> <span class="timestamp"> &ndash; <small>Nov 21, 2010</small></span>
</b> </b>
0.9.5 should be considered the first release candidate for CoffeeScript 1.0. 0.9.5 should be considered the first release candidate for CoffeeScript 1.0.
@ -1933,7 +1937,7 @@ task(<span class="String"><span class="String">'</span>build:parser<span class="
</p> </p>
<p> <p>
<b class="header" style="margin-top: 20px;">0.9.4 <b class="header" style="margin-top: 20px;">0.9.4
<span class="timestamp"> &ndash; <small>Sep 21, 2010</small></span> <span class="timestamp"> &ndash; <small>Sep 21, 2010</small></span>
</b> </b>
CoffeeScript now uses appropriately-named temporary variables, and recycles CoffeeScript now uses appropriately-named temporary variables, and recycles
@ -1944,7 +1948,7 @@ task(<span class="String"><span class="String">'</span>build:parser<span class="
</p> </p>
<p> <p>
<b class="header" style="margin-top: 20px;">0.9.3 <b class="header" style="margin-top: 20px;">0.9.3
<span class="timestamp"> &ndash; <small>Sep 16, 2010</small></span> <span class="timestamp"> &ndash; <small>Sep 16, 2010</small></span>
</b> </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>
@ -1955,7 +1959,7 @@ task(<span class="String"><span class="String">'</span>build:parser<span class="
</p> </p>
<p> <p>
<b class="header" style="margin-top: 20px;">0.9.2 <b class="header" style="margin-top: 20px;">0.9.2
<span class="timestamp"> &ndash; <small>Aug 23, 2010</small></span> <span class="timestamp"> &ndash; <small>Aug 23, 2010</small></span>
</b> </b>
Specifying the start and end of a range literal is now optional, eg. <tt>array[3..]</tt>. Specifying the start and end of a range literal is now optional, eg. <tt>array[3..]</tt>.
@ -1971,7 +1975,7 @@ task(<span class="String"><span class="String">'</span>build:parser<span class="
</p> </p>
<p> <p>
<b class="header" style="margin-top: 20px;">0.9.1 <b class="header" style="margin-top: 20px;">0.9.1
<span class="timestamp"> &ndash; <small>Aug 11, 2010</small></span> <span class="timestamp"> &ndash; <small>Aug 11, 2010</small></span>
</b> </b>
Bugfix release for <b>0.9.1</b>. Greatly improves the handling of mixed Bugfix release for <b>0.9.1</b>. Greatly improves the handling of mixed
@ -1982,7 +1986,7 @@ task(<span class="String"><span class="String">'</span>build:parser<span class="
</p> </p>
<p> <p>
<b class="header" style="margin-top: 20px;">0.9.0 <b class="header" style="margin-top: 20px;">0.9.0
<span class="timestamp"> &ndash; <small>Aug 4, 2010</small></span> <span class="timestamp"> &ndash; <small>Aug 4, 2010</small></span>
</b> </b>
The CoffeeScript <b>0.9</b> series is considered to be a release candidate The CoffeeScript <b>0.9</b> series is considered to be a release candidate
@ -2008,7 +2012,7 @@ task(<span class="String"><span class="String">'</span>build:parser<span class="
</p> </p>
<p> <p>
<b class="header" style="margin-top: 20px;">0.7.2 <b class="header" style="margin-top: 20px;">0.7.2
<span class="timestamp"> &ndash; <small>Jul 12, 2010</small></span> <span class="timestamp"> &ndash; <small>Jul 12, 2010</small></span>
</b> </b>
Quick bugfix (right after 0.7.1) for a problem that prevented <tt>coffee</tt> Quick bugfix (right after 0.7.1) for a problem that prevented <tt>coffee</tt>
@ -2016,7 +2020,7 @@ task(<span class="String"><span class="String">'</span>build:parser<span class="
</p> </p>
<p> <p>
<b class="header" style="margin-top: 20px;">0.7.1 <b class="header" style="margin-top: 20px;">0.7.1
<span class="timestamp"> &ndash; <small>Jul 11, 2010</small></span> <span class="timestamp"> &ndash; <small>Jul 11, 2010</small></span>
</b> </b>
Block-style comments are now passed through and printed as JavaScript block Block-style comments are now passed through and printed as JavaScript block
@ -2026,7 +2030,7 @@ task(<span class="String"><span class="String">'</span>build:parser<span class="
</p> </p>
<p> <p>
<b class="header" style="margin-top: 20px;">0.7.0 <b class="header" style="margin-top: 20px;">0.7.0
<span class="timestamp"> &ndash; <small>Jun 28, 2010</small></span> <span class="timestamp"> &ndash; <small>Jun 28, 2010</small></span>
</b> </b>
Official CoffeeScript variable style is now camelCase, as in JavaScript. Official CoffeeScript variable style is now camelCase, as in JavaScript.
@ -2045,7 +2049,7 @@ task(<span class="String"><span class="String">'</span>build:parser<span class="
</p> </p>
<p> <p>
<b class="header" style="margin-top: 20px;">0.6.2 <b class="header" style="margin-top: 20px;">0.6.2
<span class="timestamp"> &ndash; <small>May 15, 2010</small></span> <span class="timestamp"> &ndash; <small>May 15, 2010</small></span>
</b> </b>
The <tt>coffee</tt> command will now preserve directory structure when The <tt>coffee</tt> command will now preserve directory structure when
@ -2062,7 +2066,7 @@ task(<span class="String"><span class="String">'</span>build:parser<span class="
</p> </p>
<p> <p>
<b class="header" style="margin-top: 20px;">0.6.1 <b class="header" style="margin-top: 20px;">0.6.1
<span class="timestamp"> &ndash; <small>Apr 12, 2010</small></span> <span class="timestamp"> &ndash; <small>Apr 12, 2010</small></span>
</b> </b>
Upgraded CoffeeScript for compatibility with the new Node.js <b>v0.1.90</b> Upgraded CoffeeScript for compatibility with the new Node.js <b>v0.1.90</b>
@ -2070,7 +2074,7 @@ task(<span class="String"><span class="String">'</span>build:parser<span class="
</p> </p>
<p> <p>
<b class="header" style="margin-top: 20px;">0.6.0 <b class="header" style="margin-top: 20px;">0.6.0
<span class="timestamp"> &ndash; <small>Apr 3, 2010</small></span> <span class="timestamp"> &ndash; <small>Apr 3, 2010</small></span>
</b> </b>
Trailing commas are now allowed, a-la Python. Static Trailing commas are now allowed, a-la Python. Static
@ -2079,7 +2083,7 @@ task(<span class="String"><span class="String">'</span>build:parser<span class="
</p> </p>
<p> <p>
<b class="header" style="margin-top: 20px;">0.5.6 <b class="header" style="margin-top: 20px;">0.5.6
<span class="timestamp"> &ndash; <small>Mar 23, 2010</small></span> <span class="timestamp"> &ndash; <small>Mar 23, 2010</small></span>
</b> </b>
Interpolation can now be used within regular expressions and heredocs, as well as Interpolation can now be used within regular expressions and heredocs, as well as
@ -2092,7 +2096,7 @@ task(<span class="String"><span class="String">'</span>build:parser<span class="
</p> </p>
<p> <p>
<b class="header" style="margin-top: 20px;">0.5.5 <b class="header" style="margin-top: 20px;">0.5.5
<span class="timestamp"> &ndash; <small>Mar 8, 2010</small></span> <span class="timestamp"> &ndash; <small>Mar 8, 2010</small></span>
</b> </b>
String interpolation, contributed by String interpolation, contributed by
@ -2103,7 +2107,7 @@ task(<span class="String"><span class="String">'</span>build:parser<span class="
</p> </p>
<p> <p>
<b class="header" style="margin-top: 20px;">0.5.4 <b class="header" style="margin-top: 20px;">0.5.4
<span class="timestamp"> &ndash; <small>Mar 3, 2010</small></span> <span class="timestamp"> &ndash; <small>Mar 3, 2010</small></span>
</b> </b>
Bugfix that corrects the Node.js global constants <tt>__filename</tt> and Bugfix that corrects the Node.js global constants <tt>__filename</tt> and
@ -2112,7 +2116,7 @@ task(<span class="String"><span class="String">'</span>build:parser<span class="
</p> </p>
<p> <p>
<b class="header" style="margin-top: 20px;">0.5.3 <b class="header" style="margin-top: 20px;">0.5.3
<span class="timestamp"> &ndash; <small>Feb 27, 2010</small></span> <span class="timestamp"> &ndash; <small>Feb 27, 2010</small></span>
</b> </b>
CoffeeScript now has a syntax for defining classes. Many of the core CoffeeScript now has a syntax for defining classes. Many of the core
@ -2124,7 +2128,7 @@ task(<span class="String"><span class="String">'</span>build:parser<span class="
</p> </p>
<p> <p>
<b class="header" style="margin-top: 20px;">0.5.2 <b class="header" style="margin-top: 20px;">0.5.2
<span class="timestamp"> &ndash; <small>Feb 25, 2010</small></span> <span class="timestamp"> &ndash; <small>Feb 25, 2010</small></span>
</b> </b>
Added a compressed version of the compiler for inclusion in web pages as Added a compressed version of the compiler for inclusion in web pages as
@ -2135,7 +2139,7 @@ task(<span class="String"><span class="String">'</span>build:parser<span class="
<p> <p>
<b class="header" style="margin-top: 20px;">0.5.1 <b class="header" style="margin-top: 20px;">0.5.1
<span class="timestamp"> &ndash; <small>Feb 24, 2010</small></span> <span class="timestamp"> &ndash; <small>Feb 24, 2010</small></span>
</b> </b>
Improvements to null soaking with the existential operator, including Improvements to null soaking with the existential operator, including
@ -2145,7 +2149,7 @@ task(<span class="String"><span class="String">'</span>build:parser<span class="
</p> </p>
<p> <p>
<b class="header" style="margin-top: 20px;">0.5.0 <b class="header" style="margin-top: 20px;">0.5.0
<span class="timestamp"> &ndash; <small>Feb 21, 2010</small></span> <span class="timestamp"> &ndash; <small>Feb 21, 2010</small></span>
</b> </b>
CoffeeScript 0.5.0 is a major release, While there are no language changes, CoffeeScript 0.5.0 is a major release, While there are no language changes,
@ -2154,7 +2158,7 @@ task(<span class="String"><span class="String">'</span>build:parser<span class="
</p> </p>
<p> <p>
<b class="header" style="margin-top: 20px;">0.3.2 <b class="header" style="margin-top: 20px;">0.3.2
<span class="timestamp"> &ndash; <small>Feb 8, 2010</small></span> <span class="timestamp"> &ndash; <small>Feb 8, 2010</small></span>
</b> </b>
<tt>@property</tt> is now a shorthand for <tt>this.property</tt>.<br /> <tt>@property</tt> is now a shorthand for <tt>this.property</tt>.<br />
@ -2163,7 +2167,7 @@ task(<span class="String"><span class="String">'</span>build:parser<span class="
</p> </p>
<p> <p>
<b class="header" style="margin-top: 20px;">0.3.0 <b class="header" style="margin-top: 20px;">0.3.0
<span class="timestamp"> &ndash; <small>Jan 26, 2010</small></span> <span class="timestamp"> &ndash; <small>Jan 26, 2010</small></span>
</b> </b>
CoffeeScript 0.3 includes major syntax changes: CoffeeScript 0.3 includes major syntax changes:
@ -2181,7 +2185,7 @@ task(<span class="String"><span class="String">'</span>build:parser<span class="
</p> </p>
<p> <p>
<b class="header" style="margin-top: 20px;">0.2.6 <b class="header" style="margin-top: 20px;">0.2.6
<span class="timestamp"> &ndash; <small>Jan 17, 2010</small></span> <span class="timestamp"> &ndash; <small>Jan 17, 2010</small></span>
</b> </b>
Added Python-style chained comparisons, the conditional existence Added Python-style chained comparisons, the conditional existence
@ -2191,7 +2195,7 @@ task(<span class="String"><span class="String">'</span>build:parser<span class="
</p> </p>
<p> <p>
<b class="header" style="margin-top: 20px;">0.2.5 <b class="header" style="margin-top: 20px;">0.2.5
<span class="timestamp"> &ndash; <small>Jan 13, 2010</small></span> <span class="timestamp"> &ndash; <small>Jan 13, 2010</small></span>
</b> </b>
The conditions in switch statements can now take multiple values at once &mdash; The conditions in switch statements can now take multiple values at once &mdash;
@ -2202,7 +2206,7 @@ task(<span class="String"><span class="String">'</span>build:parser<span class="
</p> </p>
<p> <p>
<b class="header" style="margin-top: 20px;">0.2.4 <b class="header" style="margin-top: 20px;">0.2.4
<span class="timestamp"> &ndash; <small>Jan 12, 2010</small></span> <span class="timestamp"> &ndash; <small>Jan 12, 2010</small></span>
</b> </b>
Added ECMAScript Harmony style destructuring assignment, for dealing with Added ECMAScript Harmony style destructuring assignment, for dealing with
@ -2211,7 +2215,7 @@ task(<span class="String"><span class="String">'</span>build:parser<span class="
</p> </p>
<p> <p>
<b class="header" style="margin-top: 20px;">0.2.3 <b class="header" style="margin-top: 20px;">0.2.3
<span class="timestamp"> &ndash; <small>Jan 11, 2010</small></span> <span class="timestamp"> &ndash; <small>Jan 11, 2010</small></span>
</b> </b>
Axed the unsatisfactory <tt>ino</tt> keyword, replacing it with <tt>of</tt> for Axed the unsatisfactory <tt>ino</tt> keyword, replacing it with <tt>of</tt> for
@ -2219,7 +2223,7 @@ task(<span class="String"><span class="String">'</span>build:parser<span class="
</p> </p>
<p> <p>
<b class="header" style="margin-top: 20px;">0.2.2 <b class="header" style="margin-top: 20px;">0.2.2
<span class="timestamp"> &ndash; <small>Jan 10, 2010</small></span> <span class="timestamp"> &ndash; <small>Jan 10, 2010</small></span>
</b> </b>
When performing a comprehension over an object, use <tt>ino</tt>, instead When performing a comprehension over an object, use <tt>ino</tt>, instead
@ -2242,14 +2246,14 @@ task(<span class="String"><span class="String">'</span>build:parser<span class="
</p> </p>
<p> <p>
<b class="header" style="margin-top: 20px;">0.2.1 <b class="header" style="margin-top: 20px;">0.2.1
<span class="timestamp"> &ndash; <small>Jan 5, 2010</small></span> <span class="timestamp"> &ndash; <small>Jan 5, 2010</small></span>
</b> </b>
Arguments objects are now converted into real arrays when referenced. Arguments objects are now converted into real arrays when referenced.
</p> </p>
<p> <p>
<b class="header" style="margin-top: 20px;">0.2.0 <b class="header" style="margin-top: 20px;">0.2.0
<span class="timestamp"> &ndash; <small>Jan 5, 2010</small></span> <span class="timestamp"> &ndash; <small>Jan 5, 2010</small></span>
</b> </b>
Major release. Significant whitespace. Better statement-to-expression Major release. Significant whitespace. Better statement-to-expression
@ -2261,7 +2265,7 @@ task(<span class="String"><span class="String">'</span>build:parser<span class="
</p> </p>
<p> <p>
<b class="header" style="margin-top: 20px;">0.1.6 <b class="header" style="margin-top: 20px;">0.1.6
<span class="timestamp"> &ndash; <small>Dec 27, 2009</small></span> <span class="timestamp"> &ndash; <small>Dec 27, 2009</small></span>
</b> </b>
Bugfix for running <tt>coffee --interactive</tt> and <tt>--run</tt> Bugfix for running <tt>coffee --interactive</tt> and <tt>--run</tt>
@ -2270,7 +2274,7 @@ task(<span class="String"><span class="String">'</span>build:parser<span class="
</p> </p>
<p> <p>
<b class="header" style="margin-top: 20px;">0.1.5 <b class="header" style="margin-top: 20px;">0.1.5
<span class="timestamp"> &ndash; <small>Dec 26, 2009</small></span> <span class="timestamp"> &ndash; <small>Dec 26, 2009</small></span>
</b> </b>
Array slice literals and array comprehensions can now both take Ruby-style Array slice literals and array comprehensions can now both take Ruby-style
@ -2281,7 +2285,7 @@ task(<span class="String"><span class="String">'</span>build:parser<span class="
</p> </p>
<p> <p>
<b class="header" style="margin-top: 20px;">0.1.4 <b class="header" style="margin-top: 20px;">0.1.4
<span class="timestamp"> &ndash; <small>Dec 25, 2009</small></span> <span class="timestamp"> &ndash; <small>Dec 25, 2009</small></span>
</b> </b>
The official CoffeeScript extension is now <tt>.coffee</tt> instead of The official CoffeeScript extension is now <tt>.coffee</tt> instead of
@ -2295,7 +2299,7 @@ task(<span class="String"><span class="String">'</span>build:parser<span class="
</p> </p>
<p> <p>
<b class="header" style="margin-top: 20px;">0.1.3 <b class="header" style="margin-top: 20px;">0.1.3
<span class="timestamp"> &ndash; <small>Dec 25, 2009</small></span> <span class="timestamp"> &ndash; <small>Dec 25, 2009</small></span>
</b> </b>
The <tt>coffee</tt> command now includes <tt>--interactive</tt>, The <tt>coffee</tt> command now includes <tt>--interactive</tt>,
@ -2311,7 +2315,7 @@ task(<span class="String"><span class="String">'</span>build:parser<span class="
</p> </p>
<p> <p>
<b class="header" style="margin-top: 20px;">0.1.2 <b class="header" style="margin-top: 20px;">0.1.2
<span class="timestamp"> &ndash; <small>Dec 24, 2009</small></span> <span class="timestamp"> &ndash; <small>Dec 24, 2009</small></span>
</b> </b>
Fixed a bug with calling <tt>super()</tt> through more than one level of Fixed a bug with calling <tt>super()</tt> through more than one level of
@ -2325,14 +2329,14 @@ task(<span class="String"><span class="String">'</span>build:parser<span class="
</p> </p>
<p> <p>
<b class="header" style="margin-top: 20px;">0.1.1 <b class="header" style="margin-top: 20px;">0.1.1
<span class="timestamp"> &ndash; <small>Dec 24, 2009</small></span> <span class="timestamp"> &ndash; <small>Dec 24, 2009</small></span>
</b> </b>
Added <tt>instanceof</tt> and <tt>typeof</tt> as operators. Added <tt>instanceof</tt> and <tt>typeof</tt> as operators.
</p> </p>
<p> <p>
<b class="header" style="margin-top: 20px;">0.1.0 <b class="header" style="margin-top: 20px;">0.1.0
<span class="timestamp"> &ndash; <small>Dec 24, 2009</small></span> <span class="timestamp"> &ndash; <small>Dec 24, 2009</small></span>
</b> </b>
Initial CoffeeScript release. Initial CoffeeScript release.