mirror of
https://github.com/jashkenas/coffeescript.git
synced 2026-02-19 03:44:23 -05:00
empty returns no longer return null
This commit is contained in:
@@ -8,7 +8,7 @@
|
|||||||
return (Function(CoffeeScript.compile(code, options)))();
|
return (Function(CoffeeScript.compile(code, options)))();
|
||||||
};
|
};
|
||||||
if (!(typeof window !== "undefined" && window !== null)) {
|
if (!(typeof window !== "undefined" && window !== null)) {
|
||||||
return null;
|
return;
|
||||||
}
|
}
|
||||||
CoffeeScript.load = function(url, options) {
|
CoffeeScript.load = function(url, options) {
|
||||||
var xhr;
|
var xhr;
|
||||||
|
|||||||
@@ -120,7 +120,7 @@
|
|||||||
} catch (err) {
|
} catch (err) {
|
||||||
CoffeeScript.emit('failure', err, task);
|
CoffeeScript.emit('failure', err, task);
|
||||||
if (CoffeeScript.listeners('failure').length) {
|
if (CoffeeScript.listeners('failure').length) {
|
||||||
return null;
|
return;
|
||||||
}
|
}
|
||||||
if (o.watch) {
|
if (o.watch) {
|
||||||
return puts(err.message);
|
return puts(err.message);
|
||||||
@@ -146,7 +146,7 @@
|
|||||||
interval: 500
|
interval: 500
|
||||||
}, function(curr, prev) {
|
}, function(curr, prev) {
|
||||||
if (curr.size === prev.size && curr.mtime.getTime() === prev.mtime.getTime()) {
|
if (curr.size === prev.size && curr.mtime.getTime() === prev.mtime.getTime()) {
|
||||||
return null;
|
return;
|
||||||
}
|
}
|
||||||
return fs.readFile(source, function(err, code) {
|
return fs.readFile(source, function(err, code) {
|
||||||
if (err) {
|
if (err) {
|
||||||
|
|||||||
@@ -102,7 +102,7 @@
|
|||||||
o("RETURN Expression", function() {
|
o("RETURN Expression", function() {
|
||||||
return new ReturnNode($2);
|
return new ReturnNode($2);
|
||||||
}), o("RETURN", function() {
|
}), o("RETURN", function() {
|
||||||
return new ReturnNode(new ValueNode(new LiteralNode('null')));
|
return new ReturnNode;
|
||||||
})
|
})
|
||||||
],
|
],
|
||||||
Comment: [
|
Comment: [
|
||||||
|
|||||||
@@ -418,12 +418,12 @@
|
|||||||
Lexer.prototype.tagParameters = function() {
|
Lexer.prototype.tagParameters = function() {
|
||||||
var i, tok;
|
var i, tok;
|
||||||
if (this.tag() !== ')') {
|
if (this.tag() !== ')') {
|
||||||
return null;
|
return;
|
||||||
}
|
}
|
||||||
i = this.tokens.length;
|
i = this.tokens.length;
|
||||||
while (true) {
|
while (true) {
|
||||||
if (!(tok = this.tokens[--i])) {
|
if (!(tok = this.tokens[--i])) {
|
||||||
return null;
|
return;
|
||||||
}
|
}
|
||||||
switch (tok[0]) {
|
switch (tok[0]) {
|
||||||
case 'IDENTIFIER':
|
case 'IDENTIFIER':
|
||||||
|
|||||||
23
lib/nodes.js
23
lib/nodes.js
@@ -112,7 +112,7 @@
|
|||||||
BaseNode.prototype.eachChild = function(func) {
|
BaseNode.prototype.eachChild = function(func) {
|
||||||
var _i, _j, _len, _len2, _ref2, _ref3, _result, attr, child;
|
var _i, _j, _len, _len2, _ref2, _ref3, _result, attr, child;
|
||||||
if (!(this.children)) {
|
if (!(this.children)) {
|
||||||
return null;
|
return;
|
||||||
}
|
}
|
||||||
_result = []; _ref2 = this.children;
|
_result = []; _ref2 = this.children;
|
||||||
for (_i = 0, _len = _ref2.length; _i < _len; _i++) {
|
for (_i = 0, _len = _ref2.length; _i < _len; _i++) {
|
||||||
@@ -122,7 +122,7 @@
|
|||||||
for (_j = 0, _len2 = _ref3.length; _j < _len2; _j++) {
|
for (_j = 0, _len2 = _ref3.length; _j < _len2; _j++) {
|
||||||
child = _ref3[_j];
|
child = _ref3[_j];
|
||||||
if (func(child) === false) {
|
if (func(child) === false) {
|
||||||
return null;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -286,18 +286,23 @@
|
|||||||
ReturnNode.prototype.children = ['expression'];
|
ReturnNode.prototype.children = ['expression'];
|
||||||
ReturnNode.prototype.makeReturn = THIS;
|
ReturnNode.prototype.makeReturn = THIS;
|
||||||
ReturnNode.prototype.compile = function(o) {
|
ReturnNode.prototype.compile = function(o) {
|
||||||
var expr;
|
var _ref2, expr;
|
||||||
expr = this.expression.makeReturn();
|
expr = (((_ref2 = this.expression) != null) ? _ref2.makeReturn() : undefined);
|
||||||
if (!(expr instanceof ReturnNode)) {
|
if (expr && (!(expr instanceof ReturnNode))) {
|
||||||
return expr.compile(o);
|
return expr.compile(o);
|
||||||
}
|
}
|
||||||
return ReturnNode.__super__.compile.call(this, o);
|
return ReturnNode.__super__.compile.call(this, o);
|
||||||
};
|
};
|
||||||
ReturnNode.prototype.compileNode = function(o) {
|
ReturnNode.prototype.compileNode = function(o) {
|
||||||
if (this.expression.isStatement(o)) {
|
var expr;
|
||||||
o.asStatement = true;
|
expr = '';
|
||||||
|
if (this.expression) {
|
||||||
|
if (this.expression.isStatement(o)) {
|
||||||
|
o.asStatement = true;
|
||||||
|
}
|
||||||
|
expr = ' ' + this.expression.compile(o);
|
||||||
}
|
}
|
||||||
return "" + (this.tab) + "return " + (this.expression.compile(o)) + ";";
|
return "" + (this.tab) + "return" + expr + ";";
|
||||||
};
|
};
|
||||||
return ReturnNode;
|
return ReturnNode;
|
||||||
})();
|
})();
|
||||||
@@ -426,7 +431,7 @@
|
|||||||
ifnode = node.unfoldSoak(o);
|
ifnode = node.unfoldSoak(o);
|
||||||
}
|
}
|
||||||
if (!(ifnode)) {
|
if (!(ifnode)) {
|
||||||
return null;
|
return;
|
||||||
}
|
}
|
||||||
parent[name] = ifnode.body;
|
parent[name] = ifnode.body;
|
||||||
ifnode.body = new ValueNode(parent);
|
ifnode.body = new ValueNode(parent);
|
||||||
|
|||||||
@@ -117,7 +117,7 @@ case 53:this.$ = $$[$0-1+1-1];
|
|||||||
break;
|
break;
|
||||||
case 54:this.$ = new yy.ReturnNode($$[$0-2+2-1]);
|
case 54:this.$ = new yy.ReturnNode($$[$0-2+2-1]);
|
||||||
break;
|
break;
|
||||||
case 55:this.$ = new yy.ReturnNode(new yy.ValueNode(new yy.LiteralNode('null')));
|
case 55:this.$ = new yy.ReturnNode;
|
||||||
break;
|
break;
|
||||||
case 56:this.$ = new yy.CommentNode($$[$0-1+1-1]);
|
case 56:this.$ = new yy.CommentNode($$[$0-1+1-1]);
|
||||||
break;
|
break;
|
||||||
|
|||||||
@@ -160,7 +160,7 @@ grammar =
|
|||||||
# A return statement from a function body.
|
# A return statement from a function body.
|
||||||
Return: [
|
Return: [
|
||||||
o "RETURN Expression", -> new ReturnNode $2
|
o "RETURN Expression", -> new ReturnNode $2
|
||||||
o "RETURN", -> new ReturnNode new ValueNode new LiteralNode 'null'
|
o "RETURN", -> new ReturnNode
|
||||||
]
|
]
|
||||||
|
|
||||||
# A block comment.
|
# A block comment.
|
||||||
|
|||||||
@@ -279,13 +279,16 @@ exports.ReturnNode = class ReturnNode extends BaseNode
|
|||||||
makeReturn: THIS
|
makeReturn: THIS
|
||||||
|
|
||||||
compile: (o) ->
|
compile: (o) ->
|
||||||
expr = @expression.makeReturn()
|
expr = @expression?.makeReturn()
|
||||||
return expr.compile o unless expr instanceof ReturnNode
|
return expr.compile o if expr and (expr not instanceof ReturnNode)
|
||||||
super o
|
super o
|
||||||
|
|
||||||
compileNode: (o) ->
|
compileNode: (o) ->
|
||||||
o.asStatement = true if @expression.isStatement(o)
|
expr = ''
|
||||||
"#{@tab}return #{@expression.compile(o)};"
|
if @expression
|
||||||
|
o.asStatement = true if @expression.isStatement(o)
|
||||||
|
expr = ' ' + @expression.compile(o)
|
||||||
|
"#{@tab}return#{expr};"
|
||||||
|
|
||||||
#### ValueNode
|
#### ValueNode
|
||||||
|
|
||||||
|
|||||||
@@ -32,7 +32,7 @@ ok [0...10].join(' ') is '0 1 2 3 4 5 6 7 8 9'
|
|||||||
func = ->
|
func = ->
|
||||||
return if true
|
return if true
|
||||||
|
|
||||||
ok func() is null
|
ok func() is undefined
|
||||||
|
|
||||||
eq /\\/.source, "\\\\"
|
eq /\\/.source, "\\\\"
|
||||||
eq '(((dollars)))', '\(\(\(dollars\)\)\)'
|
eq '(((dollars)))', '\(\(\(dollars\)\)\)'
|
||||||
|
|||||||
Reference in New Issue
Block a user