diff --git a/lib/sass/engine.rb b/lib/sass/engine.rb index 2b2417a4..1f5a4cbd 100644 --- a/lib/sass/engine.rb +++ b/lib/sass/engine.rb @@ -408,7 +408,7 @@ END raise SyntaxError.new("Invalid variable \"#{arg}\".", @line) unless arg =~ Script::VALIDATE raise SyntaxError.new("Required arguments must not follow optional arguments \"#{arg}\".", @line) if default_arg_found && !default default = parse_script(default, :offset => line.offset + line.text.index(default)) if default - { :name => arg[1..-1], :default_value => default } + [arg[1..-1], default] end Tree::MixinDefNode.new(name, args, @options) end diff --git a/lib/sass/tree/mixin_node.rb b/lib/sass/tree/mixin_node.rb index 921183fa..fe6c3f68 100644 --- a/lib/sass/tree/mixin_node.rb +++ b/lib/sass/tree/mixin_node.rb @@ -18,14 +18,15 @@ Mixin #{@name} takes #{mixin.args.size} argument#{'s' if mixin.args.size != 1} but #{@args.size} #{@args.size == 1 ? 'was' : 'were'} passed. END - environment = mixin.args.zip(@args).inject(Sass::Environment.new(mixin.environment)) do |env, (arg, value)| - env.set_local_var(arg[:name], + environment = mixin.args.zip(@args). + inject(Sass::Environment.new(mixin.environment)) do |env, ((name, default), value)| + env.set_local_var(name, if value value.perform(environment) - elsif arg[:default_value] - arg[:default_value].perform(env) + elsif default + default.perform(env) end) - raise Sass::SyntaxError.new("Mixin #{@name} is missing parameter !#{arg[:name]}.") unless env.var(arg[:name]) + raise Sass::SyntaxError.new("Mixin #{@name} is missing parameter !#{name}.") unless env.var(name) env end mixin.tree.map {|c| c.perform(environment)}.flatten