8 #include "backtrace.hpp"
9 #include "error_handling.hpp"
16 Expression_Ptr Listize::operator()(Selector_List_Ptr sel)
18 List_Obj l = SASS_MEMORY_NEW(List, sel->pstate(), sel->length(), SASS_COMMA);
19 l->from_selector(true);
20 for (size_t i = 0, L = sel->length(); i < L; ++i) {
21 if (!sel->at(i)) continue;
22 l->append(sel->at(i)->perform(this));
24 if (l->length()) return l.detach();
25 return SASS_MEMORY_NEW(Null, l->pstate());
28 Expression_Ptr Listize::operator()(Compound_Selector_Ptr sel)
31 for (size_t i = 0, L = sel->length(); i < L; ++i) {
32 Expression_Ptr e = (*sel)[i]->perform(this);
33 if (e) str += e->to_string();
35 return SASS_MEMORY_NEW(String_Quoted, sel->pstate(), str);
38 Expression_Ptr Listize::operator()(Complex_Selector_Ptr sel)
40 List_Obj l = SASS_MEMORY_NEW(List, sel->pstate(), 2);
41 l->from_selector(true);
42 Compound_Selector_Obj head = sel->head();
43 if (head && !head->is_empty_reference())
45 Expression_Ptr hh = head->perform(this);
46 if (hh) l->append(hh);
49 std::string reference = ! sel->reference() ? ""
50 : sel->reference()->to_string();
51 switch(sel->combinator())
53 case Complex_Selector::PARENT_OF:
54 l->append(SASS_MEMORY_NEW(String_Quoted, sel->pstate(), ">"));
56 case Complex_Selector::ADJACENT_TO:
57 l->append(SASS_MEMORY_NEW(String_Quoted, sel->pstate(), "+"));
59 case Complex_Selector::REFERENCE:
60 l->append(SASS_MEMORY_NEW(String_Quoted, sel->pstate(), "/" + reference + "/"));
62 case Complex_Selector::PRECEDES:
63 l->append(SASS_MEMORY_NEW(String_Quoted, sel->pstate(), "~"));
65 case Complex_Selector::ANCESTOR_OF:
69 Complex_Selector_Obj tail = sel->tail();
72 Expression_Obj tt = tail->perform(this);
73 if (List_Ptr ls = Cast<List>(tt))
76 if (l->length() == 0) return 0;
80 Expression_Ptr Listize::fallback_impl(AST_Node_Ptr n)
82 return Cast<Expression>(n);