Resolve variable references in mixin defaults to other args first, then globals.

This commit is contained in:
Nathan Weizenbaum 2008-10-15 01:09:11 -07:00
parent 538e5e9519
commit f541899530
3 changed files with 6 additions and 6 deletions

View File

@ -396,7 +396,7 @@ END
default_arg_found ||= default
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 = Script.parse(default, @line).perform(@environment) if default
default = Script.parse(default, @line) if default
{ :name => arg[1..-1], :default_value => default }
end
mixin = @mixins[name] = Mixin.new(name, args, [])

View File

@ -15,8 +15,8 @@ module Sass::Tree
perform_children(@mixin.args.zip(@args).inject(environment.dup) do |env, (arg, value)|
env[arg[:name]] = if value
value.perform(environment)
else
arg[:default_value]
elsif arg[:default_value]
arg[:default_value].perform(env)
end
raise Sass::SyntaxError.new("Mixin #{@mixin.name} is missing parameter !#{arg[:name]}.") unless env[arg[:name]]
env

View File

@ -387,12 +387,12 @@ SASS
one {
color: #ffffff;
padding: 1px;
margin: 8px; }
margin: 4px; }
two {
color: #ffffff;
padding: 2px;
margin: 8px; }
margin: 5px; }
three {
color: #ffffff;
@ -400,7 +400,7 @@ three {
margin: 3px; }
CSS
!a = 5px
=foo(!a, !b = 1px, !c = 3px + !a)
=foo(!a, !b = 1px, !c = 3px + !b)
:color= !a
:padding= !b
:margin= !c