unary-new: built parser and `new =>` now works

This commit is contained in:
satyr 2010-09-27 02:11:47 +09:00
parent db531495b8
commit e188b9ff41
6 changed files with 127 additions and 130 deletions

View File

@ -37,7 +37,7 @@
return new LiteralNode($1);
})
],
Expression: [o("Value"), o("Code"), o("Operation"), o("Assign"), o("If"), o("Try"), o("While"), o("For"), o("Switch"), o("Extends"), o("Class"), o("Existence"), o("Comment")],
Expression: [o("Value"), o("Invocation"), o("Code"), o("Operation"), o("Assign"), o("If"), o("Try"), o("While"), o("For"), o("Switch"), o("Extends"), o("Class"), o("Existence"), o("Comment")],
Block: [
o("INDENT Body OUTDENT", function() {
return $2;

View File

@ -1125,7 +1125,7 @@
code = this.body.expressions.length ? ("\n" + (this.body.compileWithDeclarations(o)) + "\n") : '';
func = ("function(" + (params.join(', ')) + ") {" + (code) + (code && this.tab) + "}");
if (this.bound) {
return ("" + (utility('bind')) + "(" + (func) + ", " + (this.context) + ")");
return ("(" + (utility('bind')) + "(" + (func) + ", " + (this.context) + "))");
}
return top ? ("(" + (func) + ")") : func;
};

File diff suppressed because one or more lines are too long

View File

@ -88,6 +88,7 @@ grammar =
# them somewhat circular.
Expression: [
o "Value"
o "Invocation"
o "Code"
o "Operation"
o "Assign"

View File

@ -947,7 +947,7 @@ exports.CodeNode = class CodeNode extends BaseNode
(o.scope.parameter(param)) for param in params
code = if @body.expressions.length then "\n#{ @body.compileWithDeclarations(o) }\n" else ''
func = "function(#{ params.join(', ') }) {#{code}#{ code and @tab }}"
return "#{utility('bind')}(#{func}, #{@context})" if @bound
return "(#{utility 'bind'}(#{func}, #{@context}))" if @bound
if top then "(#{func})" else func
topSensitive: ->

View File

@ -257,4 +257,6 @@ new get() args...
ok new Date().constructor is Date
#717: `new` works against bare function
new -> ok @
me = this
new -> ok this isnt me
new => ok this is me