diff --git a/lib/sass/engine.rb b/lib/sass/engine.rb index 113d3127..e5181183 100644 --- a/lib/sass/engine.rb +++ b/lib/sass/engine.rb @@ -68,7 +68,9 @@ module Sass begin render_to_tree.to_s rescue SyntaxError => err - err.add_backtrace_entry(@options[:filename]) + unless err.sass_filename + err.add_backtrace_entry(@options[:filename]) + end raise err end end @@ -273,11 +275,21 @@ module Sass nodes << Tree::ValueNode.new("@import #{filename}", @options[:style]) else File.open(filename) do |file| + new_options = @options.dup + new_options[:filename] = filename engine = Sass::Engine.new(file.read, @options) end - root = engine.render_to_tree - nodes += root.children + begin + root = engine.render_to_tree + rescue Sass::SyntaxError => err + err.add_backtrace_entry(filename) + raise err + end + root.children.each do |child| + child.filename = filename + nodes << child + end @constants.merge! engine.constants end end diff --git a/lib/sass/error.rb b/lib/sass/error.rb index 66b0c2e8..8d3ae5dd 100644 --- a/lib/sass/error.rb +++ b/lib/sass/error.rb @@ -23,9 +23,9 @@ module Sass # +filename+ should be the file in which the error occurred, # if applicable (defaults to "(sass)"). def add_backtrace_entry(filename) # :nodoc: - @sass_filename = filename + @sass_filename ||= filename self.backtrace ||= [] - self.backtrace.unshift "#{filename || '(sass)'}:#{@sass_line}" + self.backtrace.unshift "#{@sass_filename || '(sass)'}:#{@sass_line}" end def to_s # :nodoc: diff --git a/lib/sass/tree/node.rb b/lib/sass/tree/node.rb index 82739efb..188763f1 100644 --- a/lib/sass/tree/node.rb +++ b/lib/sass/tree/node.rb @@ -3,6 +3,7 @@ module Sass class Node attr_accessor :children attr_accessor :line + attr_accessor :filename def initialize(style) @style = style @@ -23,7 +24,14 @@ module Sass raise SyntaxError.new('Attributes aren\'t allowed at the root of a document.', child.line) end - result += "#{child.to_s(1)}\n" + begin + result += "#{child.to_s(1)}\n" + rescue SyntaxError => e + if child.filename + e.add_backtrace_entry(child.filename) + end + raise e + end end result[0...-1] end diff --git a/lib/sass/tree/value_node.rb b/lib/sass/tree/value_node.rb index 1c3fa771..e7b43d90 100644 --- a/lib/sass/tree/value_node.rb +++ b/lib/sass/tree/value_node.rb @@ -9,7 +9,7 @@ module Sass::Tree super(style) end - def to_s(parent = nil) + def to_s(tabs = 0) value end end