@@ -14,6 +14,8 @@ namespace Sass {
14
14
std::string callee (type + " " + name);
15
15
16
16
std::map<std::string, Parameter_Obj> param_map;
17
+ List_Obj varargs = SASS_MEMORY_NEW (List, as->pstate ());
18
+ varargs->is_arglist (true ); // enable keyword size handling
17
19
18
20
for (size_t i = 0 , L = as->length (); i < L; ++i) {
19
21
if (auto str = Cast<String_Quoted>((*as)[i]->value ())) {
@@ -245,15 +247,21 @@ namespace Sass {
245
247
else {
246
248
// named arg -- bind it to the appropriately named param
247
249
if (!param_map.count (a->name ())) {
248
- std::stringstream msg;
249
- msg << callee << " has no parameter named " << a->name ();
250
- error (msg.str (), a->pstate ());
250
+ if (ps->has_rest_parameter ()) {
251
+ varargs->append (a);
252
+ } else {
253
+ std::stringstream msg;
254
+ msg << callee << " has no parameter named " << a->name ();
255
+ error (msg.str (), a->pstate ());
256
+ }
251
257
}
252
- if (param_map[a->name ()]->is_rest_parameter ()) {
253
- std::stringstream msg;
254
- msg << " argument " << a->name () << " of " << callee
255
- << " cannot be used as named argument" ;
256
- error (msg.str (), a->pstate ());
258
+ if (param_map[a->name ()]) {
259
+ if (param_map[a->name ()]->is_rest_parameter ()) {
260
+ std::stringstream msg;
261
+ msg << " argument " << a->name () << " of " << callee
262
+ << " cannot be used as named argument" ;
263
+ error (msg.str (), a->pstate ());
264
+ }
257
265
}
258
266
if (env->has_local (a->name ())) {
259
267
std::stringstream msg;
@@ -276,11 +284,7 @@ namespace Sass {
276
284
// cerr << "********" << endl;
277
285
if (!env->has_local (leftover->name ())) {
278
286
if (leftover->is_rest_parameter ()) {
279
- env->local_frame ()[leftover->name ()] = SASS_MEMORY_NEW (List,
280
- leftover->pstate (),
281
- 0 ,
282
- SASS_COMMA,
283
- true );
287
+ env->local_frame ()[leftover->name ()] = varargs;
284
288
}
285
289
else if (leftover->default_value ()) {
286
290
Expression_Ptr dv = leftover->default_value ()->perform (eval);
0 commit comments