1#ifndef SASS_EXPAND_H
2#define SASS_EXPAND_H
3
4#include <vector>
5
6#include "ast.hpp"
7#include "eval.hpp"
8#include "operation.hpp"
9#include "environment.hpp"
10
11namespace Sass {
12
13 class Listize;
14 class Context;
15 class Eval;
16 struct Backtrace;
17
18 class Expand : public Operation_CRTP<Statement*, Expand> {
19 public:
20
21 Env* environment();
22 SelectorListObj& selector();
23 SelectorListObj& original();
24 SelectorListObj popFromSelectorStack();
25 SelectorStack getOriginalStack();
26 SelectorStack getSelectorStack();
27 void pushNullSelector();
28 void popNullSelector();
29 void pushToSelectorStack(SelectorListObj selector);
30
31 SelectorListObj popFromOriginalStack();
32
33 void pushToOriginalStack(SelectorListObj selector);
34
35 Context& ctx;
36 Backtraces& traces;
37 Eval eval;
38 size_t recursions;
39 bool in_keyframes;
40 bool at_root_without_rule;
41 bool old_at_root_without_rule;
42
43 // it's easier to work with vectors
44 EnvStack env_stack;
45 BlockStack block_stack;
46 CallStack call_stack;
47 private:
48 SelectorStack selector_stack;
49 public:
50 SelectorStack originalStack;
51 MediaStack mediaStack;
52
53 Boolean_Obj bool_true;
54
55 private:
56
57 sass::vector<CssMediaQuery_Obj> mergeMediaQueries(const sass::vector<CssMediaQuery_Obj>& lhs, const sass::vector<CssMediaQuery_Obj>& rhs);
58
59 public:
60 Expand(Context&, Env*, SelectorStack* stack = nullptr, SelectorStack* original = nullptr);
61 ~Expand() { }
62
63 Block* operator()(Block*);
64 Statement* operator()(StyleRule*);
65
66 Statement* operator()(MediaRule*);
67
68 // Css StyleRule is already static
69 // Statement* operator()(CssMediaRule*);
70
71 Statement* operator()(SupportsRule*);
72 Statement* operator()(AtRootRule*);
73 Statement* operator()(AtRule*);
74 Statement* operator()(Declaration*);
75 Statement* operator()(Assignment*);
76 Statement* operator()(Import*);
77 Statement* operator()(Import_Stub*);
78 Statement* operator()(WarningRule*);
79 Statement* operator()(ErrorRule*);
80 Statement* operator()(DebugRule*);
81 Statement* operator()(Comment*);
82 Statement* operator()(If*);
83 Statement* operator()(ForRule*);
84 Statement* operator()(EachRule*);
85 Statement* operator()(WhileRule*);
86 Statement* operator()(Return*);
87 Statement* operator()(ExtendRule*);
88 Statement* operator()(Definition*);
89 Statement* operator()(Mixin_Call*);
90 Statement* operator()(Content*);
91
92 void append_block(Block*);
93
94 };
95
96}
97
98#endif
99

source code of gtk/subprojects/libsass/src/expand.hpp