mirror of
https://github.com/jashkenas/coffeescript.git
synced 2026-02-18 11:31:20 -05:00
adding automatic 'return this' for constructors: functions that start with a Capital Letter
This commit is contained in:
@@ -6,7 +6,9 @@
|
|||||||
return alert(this.name + " moved " + meters + "m.");
|
return alert(this.name + " moved " + meters + "m.");
|
||||||
};
|
};
|
||||||
Snake = function Snake(name) {
|
Snake = function Snake(name) {
|
||||||
return this.name = name;
|
var __a;
|
||||||
|
__a = this.name = name;
|
||||||
|
return Snake === this.constructor ? this : __a;
|
||||||
};
|
};
|
||||||
Snake.__superClass__ = Animal.prototype;
|
Snake.__superClass__ = Animal.prototype;
|
||||||
Snake.prototype = new Animal();
|
Snake.prototype = new Animal();
|
||||||
@@ -16,7 +18,9 @@
|
|||||||
return Snake.__superClass__.move.call(this, 5);
|
return Snake.__superClass__.move.call(this, 5);
|
||||||
};
|
};
|
||||||
Horse = function Horse(name) {
|
Horse = function Horse(name) {
|
||||||
return this.name = name;
|
var __a;
|
||||||
|
__a = this.name = name;
|
||||||
|
return Horse === this.constructor ? this : __a;
|
||||||
};
|
};
|
||||||
Horse.__superClass__ = Animal.prototype;
|
Horse.__superClass__ = Animal.prototype;
|
||||||
Horse.prototype = new Animal();
|
Horse.prototype = new Animal();
|
||||||
|
|||||||
16
index.html
16
index.html
@@ -1001,7 +1001,9 @@ Animal <span class="Keyword">=</span> <span class="Storage">function</span> <spa
|
|||||||
<span class="Keyword">return</span> <span class="LibraryFunction">alert</span>(<span class="Variable">this</span>.<span class="LibraryConstant">name</span> <span class="Keyword">+</span> <span class="String"><span class="String">"</span> moved <span class="String">"</span></span> <span class="Keyword">+</span> meters <span class="Keyword">+</span> <span class="String"><span class="String">"</span>m.<span class="String">"</span></span>);
|
<span class="Keyword">return</span> <span class="LibraryFunction">alert</span>(<span class="Variable">this</span>.<span class="LibraryConstant">name</span> <span class="Keyword">+</span> <span class="String"><span class="String">"</span> moved <span class="String">"</span></span> <span class="Keyword">+</span> meters <span class="Keyword">+</span> <span class="String"><span class="String">"</span>m.<span class="String">"</span></span>);
|
||||||
};
|
};
|
||||||
Snake <span class="Keyword">=</span> <span class="Storage">function</span> <span class="FunctionName">Snake</span>(<span class="FunctionArgument">name</span>) {
|
Snake <span class="Keyword">=</span> <span class="Storage">function</span> <span class="FunctionName">Snake</span>(<span class="FunctionArgument">name</span>) {
|
||||||
<span class="Keyword">return</span> <span class="Variable">this</span>.<span class="LibraryConstant">name</span> <span class="Keyword">=</span> name;
|
<span class="Storage">var</span> __a;
|
||||||
|
__a <span class="Keyword">=</span> <span class="Variable">this</span>.<span class="LibraryConstant">name</span> <span class="Keyword">=</span> name;
|
||||||
|
<span class="Keyword">return</span> Snake <span class="Keyword">===</span> <span class="Variable">this</span>.<span class="LibraryConstant">constructor</span> ? <span class="Variable">this</span> : __a;
|
||||||
};
|
};
|
||||||
Snake.__superClass__ <span class="Keyword">=</span> Animal.<span class="LibraryConstant">prototype</span>;
|
Snake.__superClass__ <span class="Keyword">=</span> Animal.<span class="LibraryConstant">prototype</span>;
|
||||||
<span class="LibraryClassType">Snake</span>.<span class="LibraryConstant">prototype</span> = <span class="Keyword">new</span> <span class="TypeName">Animal</span>();
|
<span class="LibraryClassType">Snake</span>.<span class="LibraryConstant">prototype</span> = <span class="Keyword">new</span> <span class="TypeName">Animal</span>();
|
||||||
@@ -1011,7 +1013,9 @@ Snake.__superClass__ <span class="Keyword">=</span> Animal.<span class="LibraryC
|
|||||||
<span class="Keyword">return</span> Snake.__superClass__.move.<span class="LibraryFunction">call</span>(<span class="Variable">this</span>, <span class="Number">5</span>);
|
<span class="Keyword">return</span> Snake.__superClass__.move.<span class="LibraryFunction">call</span>(<span class="Variable">this</span>, <span class="Number">5</span>);
|
||||||
};
|
};
|
||||||
Horse <span class="Keyword">=</span> <span class="Storage">function</span> <span class="FunctionName">Horse</span>(<span class="FunctionArgument">name</span>) {
|
Horse <span class="Keyword">=</span> <span class="Storage">function</span> <span class="FunctionName">Horse</span>(<span class="FunctionArgument">name</span>) {
|
||||||
<span class="Keyword">return</span> <span class="Variable">this</span>.<span class="LibraryConstant">name</span> <span class="Keyword">=</span> name;
|
<span class="Storage">var</span> __a;
|
||||||
|
__a <span class="Keyword">=</span> <span class="Variable">this</span>.<span class="LibraryConstant">name</span> <span class="Keyword">=</span> name;
|
||||||
|
<span class="Keyword">return</span> Horse <span class="Keyword">===</span> <span class="Variable">this</span>.<span class="LibraryConstant">constructor</span> ? <span class="Variable">this</span> : __a;
|
||||||
};
|
};
|
||||||
Horse.__superClass__ <span class="Keyword">=</span> Animal.<span class="LibraryConstant">prototype</span>;
|
Horse.__superClass__ <span class="Keyword">=</span> Animal.<span class="LibraryConstant">prototype</span>;
|
||||||
<span class="LibraryClassType">Horse</span>.<span class="LibraryConstant">prototype</span> = <span class="Keyword">new</span> <span class="TypeName">Animal</span>();
|
<span class="LibraryClassType">Horse</span>.<span class="LibraryConstant">prototype</span> = <span class="Keyword">new</span> <span class="TypeName">Animal</span>();
|
||||||
@@ -1031,7 +1035,9 @@ Animal.prototype.move = function move(meters) {
|
|||||||
return alert(this.name + " moved " + meters + "m.");
|
return alert(this.name + " moved " + meters + "m.");
|
||||||
};
|
};
|
||||||
Snake = function Snake(name) {
|
Snake = function Snake(name) {
|
||||||
return this.name = name;
|
var __a;
|
||||||
|
__a = this.name = name;
|
||||||
|
return Snake === this.constructor ? this : __a;
|
||||||
};
|
};
|
||||||
Snake.__superClass__ = Animal.prototype;
|
Snake.__superClass__ = Animal.prototype;
|
||||||
Snake.prototype = new Animal();
|
Snake.prototype = new Animal();
|
||||||
@@ -1041,7 +1047,9 @@ Snake.prototype.move = function move() {
|
|||||||
return Snake.__superClass__.move.call(this, 5);
|
return Snake.__superClass__.move.call(this, 5);
|
||||||
};
|
};
|
||||||
Horse = function Horse(name) {
|
Horse = function Horse(name) {
|
||||||
return this.name = name;
|
var __a;
|
||||||
|
__a = this.name = name;
|
||||||
|
return Horse === this.constructor ? this : __a;
|
||||||
};
|
};
|
||||||
Horse.__superClass__ = Animal.prototype;
|
Horse.__superClass__ = Animal.prototype;
|
||||||
Horse.prototype = new Animal();
|
Horse.prototype = new Animal();
|
||||||
|
|||||||
@@ -100,9 +100,12 @@ module CoffeeScript
|
|||||||
if node.statement?
|
if node.statement?
|
||||||
node.compile(o.merge(:return => true))
|
node.compile(o.merge(:return => true))
|
||||||
else
|
else
|
||||||
constructor = o[:top] && o[:last_assign] && o[:last_assign][0..0][/[A-Z]/]
|
if o[:top] && o[:last_assign] && o[:last_assign][0..0][/[A-Z]/]
|
||||||
prefix = constructor ? "if (#{o[:last_assign]} !== this.constructor) " : ''
|
temp = o[:scope].free_variable
|
||||||
"#{o[:indent]}#{prefix}return #{node.compile(o)};"
|
"#{o[:indent]}#{temp} = #{node.compile(o)};\n#{o[:indent]}return #{o[:last_assign]} === this.constructor ? this : #{temp};"
|
||||||
|
else
|
||||||
|
"#{o[:indent]}return #{node.compile(o)};"
|
||||||
|
end
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
ending = node.statement? ? '' : ';'
|
ending = node.statement? ? '' : ';'
|
||||||
|
|||||||
Reference in New Issue
Block a user