8 #include "operation.hpp"
9 #include "environment.hpp"
18 class Expand : public Operation_CRTP<Statement_Ptr, Expand> {
22 Selector_List_Obj selector();
23 Backtrace* backtrace();
29 bool at_root_without_rule;
30 bool old_at_root_without_rule;
32 // it's easier to work with vectors
33 std::vector<Env*> env_stack;
34 std::vector<Block_Ptr> block_stack;
35 std::vector<AST_Node_Obj> call_stack;
36 std::vector<Selector_List_Obj> selector_stack;
37 std::vector<Media_Block_Ptr> media_block_stack;
38 std::vector<Backtrace*> backtrace_stack;
40 Statement_Ptr fallback_impl(AST_Node_Ptr n);
43 void expand_selector_list(Selector_Obj, Selector_List_Obj extender);
46 Expand(Context&, Env*, Backtrace*, std::vector<Selector_List_Obj>* stack = NULL);
49 Block_Ptr operator()(Block_Ptr);
50 Statement_Ptr operator()(Ruleset_Ptr);
51 Statement_Ptr operator()(Media_Block_Ptr);
52 Statement_Ptr operator()(Supports_Block_Ptr);
53 Statement_Ptr operator()(At_Root_Block_Ptr);
54 Statement_Ptr operator()(Directive_Ptr);
55 Statement_Ptr operator()(Declaration_Ptr);
56 Statement_Ptr operator()(Assignment_Ptr);
57 Statement_Ptr operator()(Import_Ptr);
58 Statement_Ptr operator()(Import_Stub_Ptr);
59 Statement_Ptr operator()(Warning_Ptr);
60 Statement_Ptr operator()(Error_Ptr);
61 Statement_Ptr operator()(Debug_Ptr);
62 Statement_Ptr operator()(Comment_Ptr);
63 Statement_Ptr operator()(If_Ptr);
64 Statement_Ptr operator()(For_Ptr);
65 Statement_Ptr operator()(Each_Ptr);
66 Statement_Ptr operator()(While_Ptr);
67 Statement_Ptr operator()(Return_Ptr);
68 Statement_Ptr operator()(Extension_Ptr);
69 Statement_Ptr operator()(Definition_Ptr);
70 Statement_Ptr operator()(Mixin_Call_Ptr);
71 Statement_Ptr operator()(Content_Ptr);
74 Statement_Ptr fallback(U x) { return fallback_impl(x); }
76 void append_block(Block_Ptr);