mirror of
https://github.com/jashkenas/coffeescript.git
synced 2026-02-18 03:21:20 -05:00
CoffeeScript-in-CoffeeScript can compile @property references.
This commit is contained in:
@@ -1,5 +1,5 @@
|
|||||||
(function(){
|
(function(){
|
||||||
var AccessorNode, CallNode, CommentNode, Expressions, ExtendsNode, IndexNode, LiteralNode, Node, ReturnNode, TAB, TRAILING_WHITESPACE, ValueNode, any, compact, del, dup, flatten, inherit, merge, statement;
|
var AccessorNode, CallNode, CommentNode, Expressions, ExtendsNode, IndexNode, LiteralNode, Node, ReturnNode, TAB, TRAILING_WHITESPACE, ThisNode, ValueNode, any, compact, del, dup, flatten, inherit, merge, statement;
|
||||||
var __hasProp = Object.prototype.hasOwnProperty;
|
var __hasProp = Object.prototype.hasOwnProperty;
|
||||||
process.mixin(require('./scope'));
|
process.mixin(require('./scope'));
|
||||||
// The abstract base class for all CoffeeScript nodes.
|
// The abstract base class for all CoffeeScript nodes.
|
||||||
@@ -744,4 +744,13 @@
|
|||||||
return '[' + this.index.compile(o) + ']';
|
return '[' + this.index.compile(o) + ']';
|
||||||
}
|
}
|
||||||
}));
|
}));
|
||||||
|
// A this-reference, using '@'.
|
||||||
|
ThisNode = (exports.ThisNode = inherit(Node, {
|
||||||
|
constructor: function constructor(property) {
|
||||||
|
return this.property = property || null;
|
||||||
|
},
|
||||||
|
compile_node: function compile_node(o) {
|
||||||
|
return 'this' + (this.property ? '.' + this.property : '');
|
||||||
|
}
|
||||||
|
}));
|
||||||
})();
|
})();
|
||||||
@@ -212,6 +212,8 @@
|
|||||||
return new ValueNode($1);
|
return new ValueNode($1);
|
||||||
}), o("Range", function() {
|
}), o("Range", function() {
|
||||||
return new ValueNode($1);
|
return new ValueNode($1);
|
||||||
|
}), o("This", function() {
|
||||||
|
return new ValueNode($1);
|
||||||
}), o("Value Accessor", function() {
|
}), o("Value Accessor", function() {
|
||||||
return $1.push($2);
|
return $1.push($2);
|
||||||
}), o("Invocation Accessor", function() {
|
}), o("Invocation Accessor", function() {
|
||||||
@@ -285,6 +287,13 @@
|
|||||||
return new CallNode('super', $3);
|
return new CallNode('super', $3);
|
||||||
})
|
})
|
||||||
],
|
],
|
||||||
|
// This references, either naked or to a property.
|
||||||
|
This: [o("@", function() {
|
||||||
|
return new ThisNode();
|
||||||
|
}), o("@ IDENTIFIER", function() {
|
||||||
|
return new ThisNode(yytext);
|
||||||
|
})
|
||||||
|
],
|
||||||
// The range literal.
|
// The range literal.
|
||||||
Range: [o("[ Expression . . Expression ]", function() {
|
Range: [o("[ Expression . . Expression ]", function() {
|
||||||
return new RangeNode($2, $5);
|
return new RangeNode($2, $5);
|
||||||
|
|||||||
@@ -473,6 +473,18 @@ IndexNode: exports.IndexNode: inherit Node, {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
# A this-reference, using '@'.
|
||||||
|
ThisNode: exports.ThisNode: inherit Node, {
|
||||||
|
|
||||||
|
constructor: (property) ->
|
||||||
|
@property: property or null
|
||||||
|
|
||||||
|
compile_node: (o) ->
|
||||||
|
'this' + (if @property then '.' + @property else '')
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -230,6 +230,7 @@ grammar: {
|
|||||||
o "Object", -> new ValueNode($1)
|
o "Object", -> new ValueNode($1)
|
||||||
o "Parenthetical", -> new ValueNode($1)
|
o "Parenthetical", -> new ValueNode($1)
|
||||||
o "Range", -> new ValueNode($1)
|
o "Range", -> new ValueNode($1)
|
||||||
|
o "This", -> new ValueNode($1)
|
||||||
o "Value Accessor", -> $1.push($2)
|
o "Value Accessor", -> $1.push($2)
|
||||||
o "Invocation Accessor", -> new ValueNode($1, [$2])
|
o "Invocation Accessor", -> new ValueNode($1, [$2])
|
||||||
]
|
]
|
||||||
@@ -291,6 +292,12 @@ grammar: {
|
|||||||
o "SUPER CALL_START ArgList CALL_END", -> new CallNode('super', $3)
|
o "SUPER CALL_START ArgList CALL_END", -> new CallNode('super', $3)
|
||||||
]
|
]
|
||||||
|
|
||||||
|
# This references, either naked or to a property.
|
||||||
|
This: [
|
||||||
|
o "@", -> new ThisNode()
|
||||||
|
o "@ IDENTIFIER", -> new ThisNode(yytext)
|
||||||
|
]
|
||||||
|
|
||||||
# The range literal.
|
# The range literal.
|
||||||
Range: [
|
Range: [
|
||||||
o "[ Expression . . Expression ]", -> new RangeNode($2, $5)
|
o "[ Expression . . Expression ]", -> new RangeNode($2, $5)
|
||||||
|
|||||||
Reference in New Issue
Block a user