diff --git a/examples/code.cs b/examples/code.cs index b458dc3d..d976b55d 100644 --- a/examples/code.cs +++ b/examples/code.cs @@ -147,4 +147,7 @@ a_googol: 1e100 hex: 0xff0000 -negative: -1.0 \ No newline at end of file +negative: -1.0 + +# Deleting. +delete secret.identity \ No newline at end of file diff --git a/lib/coffee_script/grammar.y b/lib/coffee_script/grammar.y index 539a494c..ef8bc8a6 100644 --- a/lib/coffee_script/grammar.y +++ b/lib/coffee_script/grammar.y @@ -11,6 +11,7 @@ token BREAK CONTINUE token FOR IN WHILE token SWITCH CASE token SUPER +token DELETE token NEWLINE token JS @@ -24,6 +25,7 @@ prechigh left '&&' '||' AND OR left ':' right '-=' '+=' '/=' '*=' '||=' '&&=' + right DELETE right RETURN THROW FOR WHILE left UNLESS nonassoc IF @@ -116,7 +118,6 @@ rule | '-' Expression = UMINUS { result = OpNode.new(val[0], val[1]) } | NOT Expression { result = OpNode.new(val[0], val[1]) } - | Expression '*' Expression { result = OpNode.new(val[1], val[0], val[2]) } | Expression '/' Expression { result = OpNode.new(val[1], val[0], val[2]) } | Expression '%' Expression { result = OpNode.new(val[1], val[0], val[2]) } @@ -145,6 +146,8 @@ rule | Expression '*=' Expression { result = OpNode.new(val[1], val[0], val[2]) } | Expression '||=' Expression { result = OpNode.new(val[1], val[0], val[2]) } | Expression '&&=' Expression { result = OpNode.new(val[1], val[0], val[2]) } + + | DELETE Expression { result = OpNode.new(val[0], val[1]) } ; diff --git a/lib/coffee_script/lexer.rb b/lib/coffee_script/lexer.rb index 9d611420..dcf82bc1 100644 --- a/lib/coffee_script/lexer.rb +++ b/lib/coffee_script/lexer.rb @@ -8,7 +8,8 @@ class Lexer "break", "continue", "for", "in", "while", "switch", "case", - "super"] + "super", + "delete"] IDENTIFIER = /\A([a-zA-Z$_]\w*)/ NUMBER = /\A\b((0(x|X)[0-9a-fA-F]+)|([0-9]+(\.[0-9]+)?(e[+\-]?[0-9]+)?))\b/i diff --git a/lib/coffee_script/nodes.rb b/lib/coffee_script/nodes.rb index 9103b3b8..6eb80900 100644 --- a/lib/coffee_script/nodes.rb +++ b/lib/coffee_script/nodes.rb @@ -252,7 +252,8 @@ class OpNode < Node end def compile_unary(indent, scope) - "#{@operator}#{@first.compile(indent, scope)}" + space = @operator == 'delete' ? ' ' : '' + "#{@operator}#{space}#{@first.compile(indent, scope)}" end end