added the 'delete' operator

This commit is contained in:
Jeremy Ashkenas 2009-12-17 21:21:07 -05:00
parent 0dc445138b
commit 9976de76f5
4 changed files with 12 additions and 4 deletions

View File

@ -147,4 +147,7 @@ a_googol: 1e100
hex: 0xff0000
negative: -1.0
negative: -1.0
# Deleting.
delete secret.identity

View File

@ -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]) }
;

View File

@ -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

View File

@ -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