adding @property for this.property

This commit is contained in:
Jeremy Ashkenas 2010-02-02 20:36:46 -05:00
parent c5c841f2fc
commit cb7a1033fa
5 changed files with 1307 additions and 1178 deletions

View File

@ -72,6 +72,12 @@
<key>name</key>
<string>constant.numeric.coffee</string>
</dict>
<dict>
<key>match</key>
<string>(@)[a-zA-Z_$]\w*</string>
<key>name</key>
<string>variable.other.readwrite.instance.coffee</string>
</dict>
<dict>
<key>name</key>
<string>string.quoted.heredoc.coffee</string>

View File

@ -238,6 +238,7 @@ rule
| Object { result = ValueNode.new(val[0]) }
| Parenthetical { result = ValueNode.new(val[0]) }
| Range { result = ValueNode.new(val[0]) }
| This { result = ValueNode.new(val[0]) }
| Value Accessor { result = val[0] << val[1] }
| Invocation Accessor { result = ValueNode.new(val[0], [val[1]]) }
;
@ -300,6 +301,12 @@ rule
SUPER CALL_START ArgList CALL_END { result = CallNode.new(Value.new('super'), val[2]) }
;
# This references, either naked or to a property.
This:
'@' { result = ThisNode.new }
| '@' IDENTIFIER { result = ThisNode.new(val[1]) }
;
# The range literal.
Range:
"[" Expression

View File

@ -429,6 +429,18 @@ module CoffeeScript
end
end
# A this-reference, using '@'.
class ThisNode < Node
def initialize(property=nil)
@property = property
end
def compile_node(o)
prop = @property ? ".#{@property}" : ''
write("this#{prop}")
end
end
# A range literal. Ranges can be used to extract portions (slices) of arrays,
# or to specify a range for array comprehensions.
class RangeNode < Node

File diff suppressed because it is too large Load Diff

View File

@ -34,4 +34,15 @@ print i is 0
money$: 'dollars'
print money$ is 'dollars'
print money$ is 'dollars'
bob: {
name: 'Bob'
greet: (salutation) ->
salutation + " " + @name
hello: ->
@greet("Hello")
}
print bob.hello() is "Hello Bob"