diff --git a/lib/coffee_script/lexer.rb b/lib/coffee_script/lexer.rb index 60a206f0..f1a99e5f 100644 --- a/lib/coffee_script/lexer.rb +++ b/lib/coffee_script/lexer.rb @@ -139,11 +139,11 @@ module CoffeeScript return newline_token(indent) if size == @indent if size > @indent token(:INDENT, size - @indent) - @indents << size - @indent - @indent = size + @indents << (size - @indent) else outdent_token(@indent - size) end + @indent = size @line += 1 @i += (size + 1) end @@ -154,6 +154,8 @@ module CoffeeScript token(:OUTDENT, last_indent) move_out -= last_indent end + # TODO: Figure out what to do about blocks that close, ending the expression + # versus blocks that occur mid-expression. # token("\n", "\n") @indent = @indents.last || 0 end @@ -245,7 +247,7 @@ module CoffeeScript # To that end, remove redundant outdent/indents from the token stream. def remove_empty_outdents scan_tokens do |prev, token, post, i| - if prev[0] == :OUTDENT && token[1] == "\n" && post[0] == :INDENT && prev[1] == post[1] + if prev && post && prev[0] == :OUTDENT && token[1] == "\n" && post[0] == :INDENT && prev[1] == post[1] @tokens.delete_at(i + 1) @tokens.delete_at(i - 1) end diff --git a/test/fixtures/generation/each.coffee b/test/fixtures/generation/each.coffee index f783302f..89bade61 100644 --- a/test/fixtures/generation/each.coffee +++ b/test/fixtures/generation/each.coffee @@ -6,9 +6,9 @@ _.each: obj, iterator, context => if obj.forEach obj.forEach(iterator, context) else if _.isArray(obj) or _.isArguments(obj) - iterator.call(context, item, i, obj) for item, i in obj. + iterator.call(context, item, i, obj) for item, i in obj else - iterator.call(context, obj[key], key, obj) for key in _.keys(obj).. + iterator.call(context, obj[key], key, obj) for key in _.keys(obj) catch e - throw e if e isnt breaker. - obj. \ No newline at end of file + throw e if e isnt breaker + obj \ No newline at end of file