@@ -14,6 +14,8 @@ namespace Sass {
1414 std::string callee (type + " " + name);
1515
1616 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
1719
1820 for (size_t i = 0 , L = as->length (); i < L; ++i) {
1921 if (auto str = Cast<String_Quoted>((*as)[i]->value ())) {
@@ -245,15 +247,21 @@ namespace Sass {
245247 else {
246248 // named arg -- bind it to the appropriately named param
247249 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+ }
251257 }
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+ }
257265 }
258266 if (env->has_local (a->name ())) {
259267 std::stringstream msg;
@@ -276,11 +284,7 @@ namespace Sass {
276284 // cerr << "********" << endl;
277285 if (!env->has_local (leftover->name ())) {
278286 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;
284288 }
285289 else if (leftover->default_value ()) {
286290 Expression_Ptr dv = leftover->default_value ()->perform (eval);
0 commit comments