Skip to content

Commit c2e1e70

Browse files
delapuentexzyfer
authored andcommitted
Change list definitions to explicitely include delimiters
1 parent f5c8d35 commit c2e1e70

File tree

3 files changed

+17
-3
lines changed

3 files changed

+17
-3
lines changed

include/sass/values.h

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,13 @@ enum Sass_Separator {
3535
SASS_HASH
3636
};
3737

38+
// Tags for denoting Sass list delimiters
39+
enum Sass_List_Delimiter {
40+
SASS_NO_DELIMITER,
41+
SASS_PARENTHESIS,
42+
SASS_BRACKETS
43+
};
44+
3845
// Value Operators
3946
enum Sass_OP {
4047
AND, OR, // logical connectives

src/ast.hpp

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1047,21 +1047,25 @@ namespace Sass {
10471047
private:
10481048
ADD_PROPERTY(enum Sass_Separator, separator)
10491049
ADD_PROPERTY(bool, is_arglist)
1050+
ADD_PROPERTY(enum Sass_List_Delimiter, delimiter)
10501051
ADD_PROPERTY(bool, from_selector)
10511052
public:
10521053
List(ParserState pstate,
1053-
size_t size = 0, enum Sass_Separator sep = SASS_SPACE, bool argl = false)
1054+
size_t size = 0, enum Sass_Separator sep = SASS_SPACE, bool argl = false,
1055+
enum Sass_List_Delimiter delimiter = SASS_NO_DELIMITER)
10541056
: Value(pstate),
10551057
Vectorized<Expression_Obj>(size),
10561058
separator_(sep),
10571059
is_arglist_(argl),
1060+
delimiter_(delimiter),
10581061
from_selector_(false)
10591062
{ concrete_type(LIST); }
10601063
List(const List* ptr)
10611064
: Value(ptr),
10621065
Vectorized<Expression_Obj>(*ptr),
10631066
separator_(ptr->separator_),
10641067
is_arglist_(ptr->is_arglist_),
1068+
delimiter_(ptr->delimiter_),
10651069
from_selector_(ptr->from_selector_)
10661070
{ concrete_type(LIST); }
10671071
std::string type() { return is_arglist_ ? "arglist" : "list"; }
@@ -1070,7 +1074,8 @@ namespace Sass {
10701074
return separator() == SASS_SPACE ?
10711075
" " : (compressed ? "," : ", ");
10721076
}
1073-
bool is_invisible() const { return empty(); }
1077+
bool is_bracketed() const { return delimiter() == SASS_BRACKETS; }
1078+
bool is_invisible() const { return empty() && !is_bracketed(); }
10741079
Expression_Obj value_at_index(size_t i);
10751080

10761081
virtual size_t size() const;

src/debugger.hpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -594,11 +594,13 @@ inline void debug_ast(AST_Node_Ptr node, std::string ind, Env* env)
594594
std::cerr << ind << "List " << expression;
595595
std::cerr << " (" << pstate_source_position(node) << ")";
596596
std::cerr << " (" << expression->length() << ") " <<
597-
(expression->separator() == SASS_COMMA ? "Comma " : expression->separator() == SASS_HASH ? "Map" : "Space ") <<
597+
(expression->separator() == SASS_COMMA ? "Comma " : expression->separator() == SASS_HASH ? "Map " : "Space ") <<
598+
(expression->delimiter() == SASS_PARENTHESIS ? "Parenthesis " : expression->delimiter() == SASS_BRACKETS ? "Bracket " : "None ") <<
598599
" [delayed: " << expression->is_delayed() << "] " <<
599600
" [interpolant: " << expression->is_interpolant() << "] " <<
600601
" [listized: " << expression->from_selector() << "] " <<
601602
" [arglist: " << expression->is_arglist() << "] " <<
603+
" [expanded: " << expression->is_expanded() << "] " <<
602604
" [hash: " << expression->hash() << "] " <<
603605
std::endl;
604606
for(const auto& i : expression->elements()) { debug_ast(&i, ind + " ", env); }

0 commit comments

Comments
 (0)