mirror of
https://github.com/less/less.js.git
synced 2026-05-01 03:00:22 -04:00
add ability to bind varargs
This commit is contained in:
@@ -807,6 +807,10 @@ less.Parser = function Parser(env) {
|
||||
if ($(':')) {
|
||||
value = expect(this.expression, 'expected expression');
|
||||
params.push({ name: param.name, value: value });
|
||||
} else if ($(/^\.{3}/)) {
|
||||
params.push({ name: param.name, variadic: true });
|
||||
variadic = true;
|
||||
break;
|
||||
} else {
|
||||
params.push({ name: param.name });
|
||||
}
|
||||
|
||||
@@ -69,12 +69,18 @@ tree.mixin.Definition.prototype = {
|
||||
rulesets: function () { return this.parent.rulesets.apply(this) },
|
||||
|
||||
evalParams: function (env, args) {
|
||||
var frame = new(tree.Ruleset)(null, []);
|
||||
var frame = new(tree.Ruleset)(null, []), varargs;
|
||||
|
||||
for (var i = 0, val; i < this.params.length; i++) {
|
||||
if (this.params[i].name) {
|
||||
if (val = (args && args[i]) || this.params[i].value) {
|
||||
frame.rules.unshift(new(tree.Rule)(this.params[i].name, val.eval(env)));
|
||||
for (var i = 0, val, name; i < this.params.length; i++) {
|
||||
if (name = this.params[i].name) {
|
||||
if (this.params[i].variadic && args) {
|
||||
varargs = [];
|
||||
for (var j = i; j < args.length; j++) {
|
||||
varargs.push(args[j].eval(env));
|
||||
}
|
||||
frame.rules.unshift(new(tree.Rule)(name, new(tree.Expression)(varargs).eval(env)));
|
||||
} else if (val = (args && args[i]) || this.params[i].value) {
|
||||
frame.rules.unshift(new(tree.Rule)(name, val.eval(env)));
|
||||
} else {
|
||||
throw { type: 'Runtime', message: "wrong number of arguments for " + this.name +
|
||||
' (' + args.length + ' for ' + this.arity + ')' };
|
||||
@@ -84,7 +90,7 @@ tree.mixin.Definition.prototype = {
|
||||
return frame;
|
||||
},
|
||||
eval: function (env, args, important) {
|
||||
var frame = this.evalParams(env, args), context, _arguments = [], rules;
|
||||
var frame = this.evalParams(env, args), context, _arguments = [], rules, start;
|
||||
|
||||
for (var i = 0; i < Math.max(this.params.length, args && args.length); i++) {
|
||||
_arguments.push(args[i] || this.params[i].value);
|
||||
|
||||
Reference in New Issue
Block a user