1
0
Fork 0
mirror of https://github.com/jashkenas/coffeescript.git synced 2022-11-09 12:23:24 -05:00

started raising syntax errors for parens wrapped around expressions (they used to silently be ignored)

This commit is contained in:
Jeremy Ashkenas 2009-12-25 20:36:22 -08:00
parent b58102c514
commit 7c132d65dc
4 changed files with 17 additions and 8 deletions

View file

@ -125,13 +125,13 @@ Usage:
end
# Compile a single source file to JavaScript.
def compile(script, source='')
def compile(script, source='error')
begin
options = {}
options[:no_wrap] = true if @options[:no_wrap]
CoffeeScript.compile(script, options)
rescue CoffeeScript::ParseError => e
STDERR.puts e.message(source)
rescue CoffeeScript::ParseError, SyntaxError => e
STDERR.puts "#{source}: #{e.message}"
exit(1) unless @options[:watch]
nil
end

View file

@ -608,7 +608,9 @@ module CoffeeScript
end
end
# An extra set of parenthesis, supplied by the script source.
# An extra set of parentheses, supplied by the script source.
# You can't wrap parentheses around bits that get compiled into JS statements,
# unfortunately.
class ParentheticalNode < Node
attr_reader :expressions
@ -617,7 +619,7 @@ module CoffeeScript
end
def statement?
@expressions.statement?
@expressions.unwrap.statement?
end
def custom_assign?
@ -629,10 +631,11 @@ module CoffeeScript
end
def compile(o={})
raise SyntaxError, "parentheses can't be wrapped around a statement" if statement?
o = super(o)
compiled = @expressions.compile(o)
compiled = compiled[0...-1] if compiled[-1..-1] == ';'
write(o[:no_paren] || statement? ? compiled : "(#{compiled})")
write(o[:no_paren] ? compiled : "(#{compiled})")
end
end

View file

@ -9,9 +9,9 @@ module CoffeeScript
@token_id, @value, @stack = token_id, value, stack
end
def message(source_file=nil)
def message
line = @value.respond_to?(:line) ? @value.line : "END"
line_part = source_file ? "#{source_file}:#{line}:" : "line #{line}:"
line_part = "line #{line}:"
id_part = @token_id != @value.inspect ? ", unexpected #{@token_id.downcase}" : ""
"#{line_part} syntax error for '#{@value.to_s}'#{id_part}"
end

View file

@ -77,4 +77,10 @@ class ParserTest < Test::Unit::TestCase
assert nodes.compile(:no_wrap => true) == File.read('test/fixtures/generation/each_no_wrap.js')
end
def test_no_wrapping_parens_around_statements
assert_raises(SyntaxError) do
@par.parse("(a: 1)").compile
end
end
end