diff --git a/lib/less/tree/mixin.js b/lib/less/tree/mixin.js index 17a4e672..868d3859 100644 --- a/lib/less/tree/mixin.js +++ b/lib/less/tree/mixin.js @@ -97,7 +97,7 @@ tree.mixin.Definition.prototype = { rulesets: function () { return this.parent.rulesets.apply(this) }, evalParams: function (env, args, evaldArguments) { - var frame = new(tree.Ruleset)(null, []), varargs, arg, params = this.params.slice(0), i, j, val, name, isNamedFound; + var frame = new(tree.Ruleset)(null, []), varargs, arg, params = this.params.slice(0), i, j, val, name, isNamedFound, argIndex; if (args) { args = args.slice(0); @@ -125,16 +125,16 @@ tree.mixin.Definition.prototype = { } } } - + argIndex = 0; for (i = 0; i < params.length; i++) { if (evaldArguments[i]) continue; - arg = args && args[i] - + arg = args && args[argIndex]; + if (name = params[i].name) { if (params[i].variadic && args) { varargs = []; - for (j = i; j < args.length; j++) { + for (j = argIndex; j < args.length; j++) { varargs.push(args[j].value.eval(env)); } frame.rules.unshift(new(tree.Rule)(name, new(tree.Expression)(varargs).eval(env))); @@ -148,10 +148,11 @@ tree.mixin.Definition.prototype = { } if (params[i].variadic && args) { - for (j = i; j < args.length; j++) { + for (j = argIndex; j < args.length; j++) { evaldArguments[j] = args[j].value.eval(env); } } + argIndex++; } return frame; diff --git a/test/css/mixins-args.css b/test/css/mixins-args.css index 365d5fc9..91104aca 100644 --- a/test/css/mixins-args.css +++ b/test/css/mixins-args.css @@ -89,3 +89,7 @@ body { one: r, s; two: t; } +#named-conflict { + four: a, 11, 12, 13; + four: a, 21, 22, 23; +} diff --git a/test/less/mixins-args.less b/test/less/mixins-args.less index 76ba2623..f71bdce1 100644 --- a/test/less/mixins-args.less +++ b/test/less/mixins-args.less @@ -137,18 +137,31 @@ body { .mixin-takes-two(@a; @b) { one: @a; - two: @b; + two: @b; } .comma-vs-semi-colon { .mixin-takes-two(@a : a; @b : b, c); - .mixin-takes-two(@a : d, e; @b : f); - .mixin-takes-one(@a: g); - .mixin-takes-one(@a : h;); - .mixin-takes-one(i); - .mixin-takes-one(j;); - .mixin-takes-two(k, l); - .mixin-takes-one(m, n;); - .mixin-takes-two(o, p; q); - .mixin-takes-two(r, s; t;); + .mixin-takes-two(@a : d, e; @b : f); + .mixin-takes-one(@a: g); + .mixin-takes-one(@a : h;); + .mixin-takes-one(i); + .mixin-takes-one(j;); + .mixin-takes-two(k, l); + .mixin-takes-one(m, n;); + .mixin-takes-two(o, p; q); + .mixin-takes-two(r, s; t;); } + +.mixin-conflict(@a:defA, @b:defB, @c:defC) { + three: @a, @b, @c; +} + +.mixin-conflict(@a:defA, @b:defB, @c:defC, @d:defD) { + four: @a, @b, @c, @d; +} + +#named-conflict { + .mixin-conflict(11, 12, 13, @a:a); + .mixin-conflict(@a:a, 21, 22, 23); +} \ No newline at end of file