@@ -1000,13 +1000,8 @@ namespace Sass {
10001000 List_Obj map = SASS_MEMORY_NEW (List, pstate, 0 , SASS_HASH);
10011001
10021002 // it's not a map so return the lexed value as a list value
1003- if (!lex_css< exactly<' :' > >()) {
1004- List_Obj list = SASS_MEMORY_CAST (List, key);
1005- if (list && list->delimiter () == SASS_NO_DELIMITER) {
1006- list->delimiter (SASS_PARENTHESIS);
1007- }
1008- return key;
1009- }
1003+ if (!lex_css< exactly<' :' > >())
1004+ { return key; }
10101005
10111006 Expression_Obj value = parse_space_list ();
10121007
@@ -1037,6 +1032,62 @@ namespace Sass {
10371032 return ↦
10381033 }
10391034
1035+ Expression_Obj Parser::parse_bracket_list ()
1036+ {
1037+ // check if we have an empty list
1038+ // return the empty list as such
1039+ if (peek_css<
1040+ exactly<' ]' >
1041+ >(position))
1042+ {
1043+ // return an empty list (nothing to delay)
1044+ return SASS_MEMORY_NEW (List, pstate, 0 , SASS_SPACE, false , true );
1045+ }
1046+
1047+ bool has_paren = peek_css< exactly<' (' > >();
1048+
1049+ // now try to parse a space list
1050+ Expression_Obj list = parse_space_list ();
1051+ // if it's a singleton, return it (don't wrap it)
1052+ if (!peek_css< exactly<' ,' > >(position)) {
1053+ List_Obj l = SASS_MEMORY_CAST (List, list);
1054+ if (!l || l->is_bracketed () || has_paren) {
1055+ List_Obj bracketed_list = SASS_MEMORY_NEW (List, pstate, 1 , SASS_SPACE, false , true );
1056+ bracketed_list->append (&list);
1057+ return &bracketed_list;
1058+ }
1059+ l->is_bracketed (&list);
1060+ return &l;
1061+ }
1062+
1063+ // if we got so far, we actually do have a comma list
1064+ List_Obj bracketed_list = SASS_MEMORY_NEW (List, pstate, 2 , SASS_COMMA, false , true );
1065+ // wrap the first expression
1066+ bracketed_list->append (list);
1067+
1068+ while (lex_css< exactly<' ,' > >())
1069+ {
1070+ // check for abort condition
1071+ if (peek_css< alternatives <
1072+ exactly<' ;' >,
1073+ exactly<' }' >,
1074+ exactly<' {' >,
1075+ exactly<' )' >,
1076+ exactly<' ]' >,
1077+ exactly<' :' >,
1078+ end_of_file,
1079+ exactly<ellipsis>,
1080+ default_flag,
1081+ global_flag
1082+ > >(position)
1083+ ) { break ; }
1084+ // otherwise add another expression
1085+ bracketed_list->append (parse_space_list ());
1086+ }
1087+ // return the list
1088+ return &bracketed_list;
1089+ }
1090+
10401091 // parse list returns either a space separated list,
10411092 // a comma separated list or any bare expression found.
10421093 // so to speak: we unwrap items from lists if possible here!
@@ -1339,18 +1390,10 @@ namespace Sass {
13391390 }
13401391 else if (lex_css< exactly<' [' > >()) {
13411392 // explicit bracketed
1342- Expression_Obj value = parse_list ();
1393+ Expression_Obj value = parse_bracket_list ();
13431394 // lex the expected closing square bracket
13441395 if (!lex_css< exactly<' ]' > >()) error (" unclosed squared bracket" , pstate);
1345- // fix delimiter
1346- List_Obj list = SASS_MEMORY_CAST (List, value);
1347- if (!list || list->delimiter () != SASS_NO_DELIMITER) {
1348- List_Ptr outer_list = SASS_MEMORY_NEW (List, pstate, 1 , SASS_SPACE, false , SASS_BRACKETS);
1349- outer_list->append (&value);
1350- return outer_list;
1351- }
1352- list->delimiter (SASS_BRACKETS);
1353- return value;
1396+ return &value;
13541397 }
13551398 // string may be interpolated
13561399 // if (lex< quoted_string >()) {
0 commit comments