sassc 1.11.1 → 1.11.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.travis.yml +2 -2
- data/README.md +3 -2
- data/ext/libsass/Makefile.conf +2 -1
- data/ext/libsass/appveyor.yml +10 -5
- data/ext/libsass/docs/dev-ast-memory.md +223 -0
- data/ext/libsass/include/sass/base.h +2 -0
- data/ext/libsass/script/bootstrap +7 -4
- data/ext/libsass/script/ci-build-libsass +3 -3
- data/ext/libsass/script/ci-install-compiler +2 -0
- data/ext/libsass/script/ci-report-coverage +2 -1
- data/ext/libsass/script/test-leaks.pl +103 -0
- data/ext/libsass/src/ast.cpp +621 -495
- data/ext/libsass/src/ast.hpp +801 -367
- data/ext/libsass/src/ast_def_macros.hpp +5 -5
- data/ext/libsass/src/ast_fwd_decl.hpp +312 -14
- data/ext/libsass/src/bind.cpp +54 -51
- data/ext/libsass/src/bind.hpp +3 -7
- data/ext/libsass/src/check_nesting.cpp +117 -120
- data/ext/libsass/src/check_nesting.hpp +38 -34
- data/ext/libsass/src/color_maps.cpp +3 -3
- data/ext/libsass/src/color_maps.hpp +3 -3
- data/ext/libsass/src/context.cpp +33 -34
- data/ext/libsass/src/context.hpp +12 -14
- data/ext/libsass/src/cssize.cpp +200 -228
- data/ext/libsass/src/cssize.hpp +49 -49
- data/ext/libsass/src/debugger.hpp +260 -241
- data/ext/libsass/src/emitter.cpp +6 -6
- data/ext/libsass/src/emitter.hpp +7 -7
- data/ext/libsass/src/environment.cpp +2 -2
- data/ext/libsass/src/environment.hpp +0 -2
- data/ext/libsass/src/error_handling.cpp +5 -5
- data/ext/libsass/src/error_handling.hpp +12 -12
- data/ext/libsass/src/eval.cpp +412 -401
- data/ext/libsass/src/eval.hpp +61 -62
- data/ext/libsass/src/expand.cpp +223 -204
- data/ext/libsass/src/expand.hpp +42 -42
- data/ext/libsass/src/extend.cpp +198 -201
- data/ext/libsass/src/extend.hpp +12 -14
- data/ext/libsass/src/file.hpp +4 -5
- data/ext/libsass/src/functions.cpp +413 -418
- data/ext/libsass/src/functions.hpp +7 -10
- data/ext/libsass/src/inspect.cpp +115 -109
- data/ext/libsass/src/inspect.hpp +69 -69
- data/ext/libsass/src/listize.cpp +31 -33
- data/ext/libsass/src/listize.hpp +8 -10
- data/ext/libsass/src/memory/SharedPtr.cpp +116 -0
- data/ext/libsass/src/memory/SharedPtr.hpp +202 -0
- data/ext/libsass/src/node.cpp +45 -43
- data/ext/libsass/src/node.hpp +15 -15
- data/ext/libsass/src/operation.hpp +136 -136
- data/ext/libsass/src/output.cpp +48 -49
- data/ext/libsass/src/output.hpp +14 -14
- data/ext/libsass/src/parser.cpp +530 -554
- data/ext/libsass/src/parser.hpp +91 -96
- data/ext/libsass/src/prelexer.cpp +13 -10
- data/ext/libsass/src/remove_placeholders.cpp +25 -21
- data/ext/libsass/src/remove_placeholders.hpp +7 -7
- data/ext/libsass/src/sass2scss.cpp +2 -1
- data/ext/libsass/src/sass_context.cpp +125 -107
- data/ext/libsass/src/sass_context.hpp +1 -1
- data/ext/libsass/src/sass_util.hpp +5 -5
- data/ext/libsass/src/sass_values.cpp +27 -27
- data/ext/libsass/src/source_map.cpp +2 -2
- data/ext/libsass/src/source_map.hpp +2 -2
- data/ext/libsass/src/subset_map.cpp +57 -0
- data/ext/libsass/src/subset_map.hpp +8 -76
- data/ext/libsass/src/to_c.cpp +13 -13
- data/ext/libsass/src/to_c.hpp +14 -14
- data/ext/libsass/src/to_value.cpp +20 -20
- data/ext/libsass/src/to_value.hpp +20 -21
- data/ext/libsass/src/util.cpp +55 -88
- data/ext/libsass/src/util.hpp +9 -13
- data/ext/libsass/src/values.cpp +27 -26
- data/ext/libsass/src/values.hpp +2 -2
- data/ext/libsass/test/test_subset_map.cpp +69 -69
- data/ext/libsass/win/libsass.targets +3 -2
- data/ext/libsass/win/libsass.vcxproj.filters +9 -6
- data/lib/sassc/version.rb +1 -1
- data/sassc.gemspec +0 -1
- data/test/native_test.rb +1 -1
- metadata +7 -5
- data/ext/libsass/src/ast_factory.hpp +0 -92
- data/ext/libsass/src/memory_manager.cpp +0 -77
- data/ext/libsass/src/memory_manager.hpp +0 -48
data/ext/libsass/src/cssize.hpp
CHANGED
@@ -8,69 +8,69 @@
|
|
8
8
|
|
9
9
|
namespace Sass {
|
10
10
|
|
11
|
-
typedef Environment<
|
11
|
+
typedef Environment<AST_Node_Obj> Env;
|
12
12
|
struct Backtrace;
|
13
13
|
|
14
|
-
class Cssize : public Operation_CRTP<
|
14
|
+
class Cssize : public Operation_CRTP<Statement_Ptr, Cssize> {
|
15
15
|
|
16
16
|
Context& ctx;
|
17
|
-
std::vector<
|
18
|
-
std::vector<
|
17
|
+
std::vector<Block_Ptr> block_stack;
|
18
|
+
std::vector<Statement_Ptr> p_stack;
|
19
19
|
Backtrace* backtrace;
|
20
20
|
|
21
|
-
|
21
|
+
Statement_Ptr fallback_impl(AST_Node_Ptr n);
|
22
22
|
|
23
23
|
public:
|
24
24
|
Cssize(Context&, Backtrace*);
|
25
25
|
~Cssize() { }
|
26
26
|
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
//
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
//
|
40
|
-
//
|
41
|
-
//
|
42
|
-
//
|
43
|
-
//
|
44
|
-
//
|
45
|
-
//
|
46
|
-
//
|
47
|
-
//
|
48
|
-
//
|
49
|
-
//
|
50
|
-
//
|
51
|
-
//
|
52
|
-
//
|
53
|
-
//
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
std::vector<std::pair<bool,
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
bool bubblable(
|
66
|
-
|
67
|
-
|
68
|
-
|
27
|
+
Selector_List_Ptr selector();
|
28
|
+
|
29
|
+
Block_Ptr operator()(Block_Ptr);
|
30
|
+
Statement_Ptr operator()(Ruleset_Ptr);
|
31
|
+
// Statement_Ptr operator()(Bubble_Ptr);
|
32
|
+
Statement_Ptr operator()(Media_Block_Ptr);
|
33
|
+
Statement_Ptr operator()(Supports_Block_Ptr);
|
34
|
+
Statement_Ptr operator()(At_Root_Block_Ptr);
|
35
|
+
Statement_Ptr operator()(Directive_Ptr);
|
36
|
+
Statement_Ptr operator()(Keyframe_Rule_Ptr);
|
37
|
+
Statement_Ptr operator()(Trace_Ptr);
|
38
|
+
Statement_Ptr operator()(Declaration_Ptr);
|
39
|
+
// Statement_Ptr operator()(Assignment_Ptr);
|
40
|
+
// Statement_Ptr operator()(Import_Ptr);
|
41
|
+
// Statement_Ptr operator()(Import_Stub_Ptr);
|
42
|
+
// Statement_Ptr operator()(Warning_Ptr);
|
43
|
+
// Statement_Ptr operator()(Error_Ptr);
|
44
|
+
// Statement_Ptr operator()(Comment_Ptr);
|
45
|
+
// Statement_Ptr operator()(If_Ptr);
|
46
|
+
// Statement_Ptr operator()(For_Ptr);
|
47
|
+
// Statement_Ptr operator()(Each_Ptr);
|
48
|
+
// Statement_Ptr operator()(While_Ptr);
|
49
|
+
// Statement_Ptr operator()(Return_Ptr);
|
50
|
+
// Statement_Ptr operator()(Extension_Ptr);
|
51
|
+
// Statement_Ptr operator()(Definition_Ptr);
|
52
|
+
// Statement_Ptr operator()(Mixin_Call_Ptr);
|
53
|
+
// Statement_Ptr operator()(Content_Ptr);
|
54
|
+
Statement_Ptr operator()(Null_Ptr);
|
55
|
+
|
56
|
+
Statement_Ptr parent();
|
57
|
+
std::vector<std::pair<bool, Block_Obj>> slice_by_bubble(Block_Ptr);
|
58
|
+
Statement_Ptr bubble(Directive_Ptr);
|
59
|
+
Statement_Ptr bubble(At_Root_Block_Ptr);
|
60
|
+
Statement_Ptr bubble(Media_Block_Ptr);
|
61
|
+
Statement_Ptr bubble(Supports_Block_Ptr);
|
62
|
+
|
63
|
+
Block_Ptr debubble(Block_Ptr children, Statement_Ptr parent = 0);
|
64
|
+
Block_Ptr flatten(Block_Ptr);
|
65
|
+
bool bubblable(Statement_Ptr);
|
66
|
+
|
67
|
+
List_Ptr merge_media_queries(Media_Block_Ptr, Media_Block_Ptr);
|
68
|
+
Media_Query_Ptr merge_media_query(Media_Query_Ptr, Media_Query_Ptr);
|
69
69
|
|
70
70
|
template <typename U>
|
71
|
-
|
71
|
+
Statement_Ptr fallback(U x) { return fallback_impl(x); }
|
72
72
|
|
73
|
-
void append_block(
|
73
|
+
void append_block(Block_Ptr, Block_Ptr);
|
74
74
|
};
|
75
75
|
|
76
76
|
}
|
@@ -8,13 +8,13 @@
|
|
8
8
|
|
9
9
|
using namespace Sass;
|
10
10
|
|
11
|
-
inline void debug_ast(
|
11
|
+
inline void debug_ast(AST_Node_Ptr node, std::string ind = "", Env* env = 0);
|
12
12
|
|
13
13
|
inline void debug_sources_set(SourcesSet& set, std::string ind = "")
|
14
14
|
{
|
15
15
|
if (ind == "") std::cerr << "#%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n";
|
16
16
|
for(auto const &pair : set) {
|
17
|
-
debug_ast(pair, ind + "");
|
17
|
+
debug_ast(&pair, ind + "");
|
18
18
|
// debug_ast(set[pair], ind + "first: ");
|
19
19
|
}
|
20
20
|
if (ind == "") std::cerr << "#%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n";
|
@@ -44,7 +44,7 @@ inline std::string longToHex(long long t) {
|
|
44
44
|
return is.str();
|
45
45
|
}
|
46
46
|
|
47
|
-
inline std::string pstate_source_position(
|
47
|
+
inline std::string pstate_source_position(AST_Node_Ptr node)
|
48
48
|
{
|
49
49
|
std::stringstream str;
|
50
50
|
Position start(node->pstate());
|
@@ -52,38 +52,43 @@ inline std::string pstate_source_position(AST_Node* node)
|
|
52
52
|
str << (start.file == std::string::npos ? -1 : start.file)
|
53
53
|
<< "@[" << start.line << ":" << start.column << "]"
|
54
54
|
<< "-[" << end.line << ":" << end.column << "]";
|
55
|
+
#ifdef DEBUG_SHARED_PTR
|
56
|
+
str << "x" << node->getRefCount() << ""
|
57
|
+
<< " " << node->getDbgFile()
|
58
|
+
<< "@" << node->getDbgLine();
|
59
|
+
#endif
|
55
60
|
return str.str();
|
56
61
|
}
|
57
62
|
|
58
|
-
inline void debug_ast(
|
63
|
+
inline void debug_ast(AST_Node_Ptr node, std::string ind, Env* env)
|
59
64
|
{
|
60
65
|
if (node == 0) return;
|
61
66
|
if (ind == "") std::cerr << "####################################################################\n";
|
62
|
-
if (dynamic_cast<
|
63
|
-
|
67
|
+
if (dynamic_cast<Bubble_Ptr>(node)) {
|
68
|
+
Bubble_Ptr bubble = dynamic_cast<Bubble_Ptr>(node);
|
64
69
|
std::cerr << ind << "Bubble " << bubble;
|
65
70
|
std::cerr << " (" << pstate_source_position(node) << ")";
|
66
71
|
std::cerr << " " << bubble->tabs();
|
67
72
|
std::cerr << std::endl;
|
68
|
-
debug_ast(bubble->node(), ind + " ", env);
|
69
|
-
} else if (dynamic_cast<
|
70
|
-
|
73
|
+
debug_ast(&bubble->node(), ind + " ", env);
|
74
|
+
} else if (dynamic_cast<Trace_Ptr>(node)) {
|
75
|
+
Trace_Ptr trace = dynamic_cast<Trace_Ptr>(node);
|
71
76
|
std::cerr << ind << "Trace " << trace;
|
72
77
|
std::cerr << " (" << pstate_source_position(node) << ")"
|
73
78
|
<< " [name:" << trace->name() << "]"
|
74
79
|
<< std::endl;
|
75
|
-
debug_ast(trace->block(), ind + " ", env);
|
76
|
-
} else if (dynamic_cast<
|
77
|
-
|
80
|
+
debug_ast(&trace->block(), ind + " ", env);
|
81
|
+
} else if (dynamic_cast<At_Root_Block_Ptr>(node)) {
|
82
|
+
At_Root_Block_Ptr root_block = dynamic_cast<At_Root_Block_Ptr>(node);
|
78
83
|
std::cerr << ind << "At_Root_Block " << root_block;
|
79
84
|
std::cerr << " (" << pstate_source_position(node) << ")";
|
80
85
|
std::cerr << " " << root_block->tabs();
|
81
86
|
std::cerr << std::endl;
|
82
|
-
debug_ast(root_block->expression(), ind + ":", env);
|
83
|
-
debug_ast(root_block->block(), ind + " ", env);
|
84
|
-
} else if (dynamic_cast<
|
85
|
-
|
86
|
-
std::cerr << ind << "
|
87
|
+
debug_ast(&root_block->expression(), ind + ":", env);
|
88
|
+
debug_ast(&root_block->block(), ind + " ", env);
|
89
|
+
} else if (dynamic_cast<Selector_List_Ptr>(node)) {
|
90
|
+
Selector_List_Ptr selector = dynamic_cast<Selector_List_Ptr>(node);
|
91
|
+
std::cerr << ind << "Selector_List " << selector;
|
87
92
|
std::cerr << " (" << pstate_source_position(node) << ")";
|
88
93
|
std::cerr << " <" << selector->hash() << ">";
|
89
94
|
std::cerr << " [@media:" << selector->media_block() << "]";
|
@@ -95,14 +100,14 @@ inline void debug_ast(AST_Node* node, std::string ind, Env* env)
|
|
95
100
|
std::cerr << (selector->has_line_feed() ? " [line-feed]": " -");
|
96
101
|
std::cerr << std::endl;
|
97
102
|
|
98
|
-
for(
|
103
|
+
for(const Complex_Selector_Obj& i : selector->elements()) { debug_ast(&i, ind + " ", env); }
|
99
104
|
|
100
|
-
// } else if (dynamic_cast<
|
101
|
-
//
|
105
|
+
// } else if (dynamic_cast<Expression_Ptr>(node)) {
|
106
|
+
// Expression_Ptr expression = dynamic_cast<Expression_Ptr>(node);
|
102
107
|
// std::cerr << ind << "Expression " << expression << " " << expression->concrete_type() << std::endl;
|
103
108
|
|
104
|
-
} else if (dynamic_cast<
|
105
|
-
|
109
|
+
} else if (dynamic_cast<Parent_Selector_Ptr>(node)) {
|
110
|
+
Parent_Selector_Ptr selector = dynamic_cast<Parent_Selector_Ptr>(node);
|
106
111
|
std::cerr << ind << "Parent_Selector " << selector;
|
107
112
|
// if (selector->not_selector()) cerr << " [in_declaration]";
|
108
113
|
std::cerr << " (" << pstate_source_position(node) << ")";
|
@@ -111,9 +116,9 @@ inline void debug_ast(AST_Node* node, std::string ind, Env* env)
|
|
111
116
|
std::cerr << " <" << prettyprint(selector->pstate().token.ws_before()) << ">" << std::endl;
|
112
117
|
// debug_ast(selector->selector(), ind + "->", env);
|
113
118
|
|
114
|
-
} else if (dynamic_cast<
|
115
|
-
|
116
|
-
std::cerr << ind << "
|
119
|
+
} else if (dynamic_cast<Complex_Selector_Ptr>(node)) {
|
120
|
+
Complex_Selector_Ptr selector = dynamic_cast<Complex_Selector_Ptr>(node);
|
121
|
+
std::cerr << ind << "Complex_Selector " << selector
|
117
122
|
<< " (" << pstate_source_position(node) << ")"
|
118
123
|
<< " <" << selector->hash() << ">"
|
119
124
|
<< " [length:" << longToHex(selector->length()) << "]"
|
@@ -128,25 +133,25 @@ inline void debug_ast(AST_Node* node, std::string ind, Env* env)
|
|
128
133
|
<< " -- ";
|
129
134
|
std::string del;
|
130
135
|
switch (selector->combinator()) {
|
131
|
-
case
|
132
|
-
case
|
133
|
-
case
|
134
|
-
case
|
135
|
-
case
|
136
|
+
case Complex_Selector::PARENT_OF: del = ">"; break;
|
137
|
+
case Complex_Selector::PRECEDES: del = "~"; break;
|
138
|
+
case Complex_Selector::ADJACENT_TO: del = "+"; break;
|
139
|
+
case Complex_Selector::ANCESTOR_OF: del = " "; break;
|
140
|
+
case Complex_Selector::REFERENCE: del = "//"; break;
|
136
141
|
}
|
137
142
|
// if (del = "/") del += selector->reference()->perform(&to_string) + "/";
|
138
143
|
std::cerr << " <" << prettyprint(selector->pstate().token.ws_before()) << ">" << std::endl;
|
139
|
-
debug_ast(selector->head(), ind + " " /* + "[" + del + "]" */, env);
|
144
|
+
debug_ast(&selector->head(), ind + " " /* + "[" + del + "]" */, env);
|
140
145
|
if (selector->tail()) {
|
141
|
-
debug_ast(selector->tail(), ind + "{" + del + "}", env);
|
146
|
+
debug_ast(&selector->tail(), ind + "{" + del + "}", env);
|
142
147
|
} else if(del != " ") {
|
143
148
|
std::cerr << ind << " |" << del << "| {trailing op}" << std::endl;
|
144
149
|
}
|
145
150
|
SourcesSet set = selector->sources();
|
146
151
|
// debug_sources_set(set, ind + " @--> ");
|
147
|
-
} else if (dynamic_cast<
|
148
|
-
|
149
|
-
std::cerr << ind << "
|
152
|
+
} else if (dynamic_cast<Compound_Selector_Ptr>(node)) {
|
153
|
+
Compound_Selector_Ptr selector = dynamic_cast<Compound_Selector_Ptr>(node);
|
154
|
+
std::cerr << ind << "Compound_Selector " << selector;
|
150
155
|
std::cerr << " (" << pstate_source_position(node) << ")";
|
151
156
|
std::cerr << " <" << selector->hash() << ">";
|
152
157
|
std::cerr << " [weight:" << longToHex(selector->specificity()) << "]";
|
@@ -157,9 +162,9 @@ inline void debug_ast(AST_Node* node, std::string ind, Env* env)
|
|
157
162
|
std::cerr << (selector->has_line_break() ? " [line-break]": " -");
|
158
163
|
std::cerr << (selector->has_line_feed() ? " [line-feed]": " -");
|
159
164
|
std::cerr << " <" << prettyprint(selector->pstate().token.ws_before()) << ">" << std::endl;
|
160
|
-
for(
|
161
|
-
} else if (dynamic_cast<
|
162
|
-
|
165
|
+
for(const Simple_Selector_Obj& i : selector->elements()) { debug_ast(&i, ind + " ", env); }
|
166
|
+
} else if (dynamic_cast<Wrapped_Selector_Ptr>(node)) {
|
167
|
+
Wrapped_Selector_Ptr selector = dynamic_cast<Wrapped_Selector_Ptr>(node);
|
163
168
|
std::cerr << ind << "Wrapped_Selector " << selector;
|
164
169
|
std::cerr << " (" << pstate_source_position(node) << ")";
|
165
170
|
std::cerr << " <" << selector->hash() << ">";
|
@@ -169,9 +174,9 @@ inline void debug_ast(AST_Node* node, std::string ind, Env* env)
|
|
169
174
|
std::cerr << (selector->has_line_break() ? " [line-break]": " -");
|
170
175
|
std::cerr << (selector->has_line_feed() ? " [line-feed]": " -");
|
171
176
|
std::cerr << std::endl;
|
172
|
-
debug_ast(selector->selector(), ind + " () ", env);
|
173
|
-
} else if (dynamic_cast<
|
174
|
-
|
177
|
+
debug_ast(&selector->selector(), ind + " () ", env);
|
178
|
+
} else if (dynamic_cast<Pseudo_Selector_Ptr>(node)) {
|
179
|
+
Pseudo_Selector_Ptr selector = dynamic_cast<Pseudo_Selector_Ptr>(node);
|
175
180
|
std::cerr << ind << "Pseudo_Selector " << selector;
|
176
181
|
std::cerr << " (" << pstate_source_position(node) << ")";
|
177
182
|
std::cerr << " <" << selector->hash() << ">";
|
@@ -181,9 +186,9 @@ inline void debug_ast(AST_Node* node, std::string ind, Env* env)
|
|
181
186
|
std::cerr << (selector->has_line_break() ? " [line-break]": " -");
|
182
187
|
std::cerr << (selector->has_line_feed() ? " [line-feed]": " -");
|
183
188
|
std::cerr << std::endl;
|
184
|
-
debug_ast(selector->expression(), ind + " <= ", env);
|
185
|
-
} else if (dynamic_cast<
|
186
|
-
|
189
|
+
debug_ast(&selector->expression(), ind + " <= ", env);
|
190
|
+
} else if (dynamic_cast<Attribute_Selector_Ptr>(node)) {
|
191
|
+
Attribute_Selector_Ptr selector = dynamic_cast<Attribute_Selector_Ptr>(node);
|
187
192
|
std::cerr << ind << "Attribute_Selector " << selector;
|
188
193
|
std::cerr << " (" << pstate_source_position(node) << ")";
|
189
194
|
std::cerr << " <" << selector->hash() << ">";
|
@@ -193,9 +198,9 @@ inline void debug_ast(AST_Node* node, std::string ind, Env* env)
|
|
193
198
|
std::cerr << (selector->has_line_break() ? " [line-break]": " -");
|
194
199
|
std::cerr << (selector->has_line_feed() ? " [line-feed]": " -");
|
195
200
|
std::cerr << std::endl;
|
196
|
-
debug_ast(selector->value(), ind + "[" + selector->matcher() + "] ", env);
|
197
|
-
} else if (dynamic_cast<
|
198
|
-
|
201
|
+
debug_ast(&selector->value(), ind + "[" + selector->matcher() + "] ", env);
|
202
|
+
} else if (dynamic_cast<Class_Selector_Ptr>(node)) {
|
203
|
+
Class_Selector_Ptr selector = dynamic_cast<Class_Selector_Ptr>(node);
|
199
204
|
std::cerr << ind << "Class_Selector " << selector;
|
200
205
|
std::cerr << " (" << pstate_source_position(node) << ")";
|
201
206
|
std::cerr << " <" << selector->hash() << ">";
|
@@ -205,8 +210,8 @@ inline void debug_ast(AST_Node* node, std::string ind, Env* env)
|
|
205
210
|
std::cerr << (selector->has_line_break() ? " [line-break]": " -");
|
206
211
|
std::cerr << (selector->has_line_feed() ? " [line-feed]": " -");
|
207
212
|
std::cerr << std::endl;
|
208
|
-
} else if (dynamic_cast<
|
209
|
-
|
213
|
+
} else if (dynamic_cast<Id_Selector_Ptr>(node)) {
|
214
|
+
Id_Selector_Ptr selector = dynamic_cast<Id_Selector_Ptr>(node);
|
210
215
|
std::cerr << ind << "Id_Selector " << selector;
|
211
216
|
std::cerr << " (" << pstate_source_position(node) << ")";
|
212
217
|
std::cerr << " <" << selector->hash() << ">";
|
@@ -216,8 +221,8 @@ inline void debug_ast(AST_Node* node, std::string ind, Env* env)
|
|
216
221
|
std::cerr << (selector->has_line_break() ? " [line-break]": " -");
|
217
222
|
std::cerr << (selector->has_line_feed() ? " [line-feed]": " -");
|
218
223
|
std::cerr << std::endl;
|
219
|
-
} else if (dynamic_cast<
|
220
|
-
|
224
|
+
} else if (dynamic_cast<Element_Selector_Ptr>(node)) {
|
225
|
+
Element_Selector_Ptr selector = dynamic_cast<Element_Selector_Ptr>(node);
|
221
226
|
std::cerr << ind << "Element_Selector " << selector;
|
222
227
|
std::cerr << " (" << pstate_source_position(node) << ")";
|
223
228
|
std::cerr << " <" << selector->hash() << ">";
|
@@ -228,10 +233,11 @@ inline void debug_ast(AST_Node* node, std::string ind, Env* env)
|
|
228
233
|
std::cerr << (selector->has_line_feed() ? " [line-feed]": " -");
|
229
234
|
std::cerr << " <" << prettyprint(selector->pstate().token.ws_before()) << ">";
|
230
235
|
std::cerr << std::endl;
|
231
|
-
} else if (dynamic_cast<
|
236
|
+
} else if (dynamic_cast<Placeholder_Selector_Ptr>(node)) {
|
232
237
|
|
233
|
-
|
234
|
-
std::cerr << ind << "Placeholder_Selector [" << selector->ns_name() << "] " << selector
|
238
|
+
Placeholder_Selector_Ptr selector = dynamic_cast<Placeholder_Selector_Ptr>(node);
|
239
|
+
std::cerr << ind << "Placeholder_Selector [" << selector->ns_name() << "] " << selector;
|
240
|
+
std::cerr << " (" << pstate_source_position(selector) << ")"
|
235
241
|
<< " <" << selector->hash() << ">"
|
236
242
|
<< " [@media:" << selector->media_block() << "]"
|
237
243
|
<< (selector->is_optional() ? " [is_optional]": " -")
|
@@ -245,8 +251,8 @@ inline void debug_ast(AST_Node* node, std::string ind, Env* env)
|
|
245
251
|
std::cerr << " (" << pstate_source_position(node) << ")";
|
246
252
|
std::cerr << (selector->has_line_break() ? " [line-break]": " -") << (selector->has_line_feed() ? " [line-feed]": " -") << std::endl;
|
247
253
|
|
248
|
-
} else if (dynamic_cast<
|
249
|
-
|
254
|
+
} else if (dynamic_cast<Selector_Schema_Ptr>(node)) {
|
255
|
+
Selector_Schema_Ptr selector = dynamic_cast<Selector_Schema_Ptr>(node);
|
250
256
|
std::cerr << ind << "Selector_Schema " << selector;
|
251
257
|
std::cerr << " (" << pstate_source_position(node) << ")"
|
252
258
|
<< (selector->at_root() && selector->at_root() ? " [@ROOT]" : "")
|
@@ -255,196 +261,196 @@ inline void debug_ast(AST_Node* node, std::string ind, Env* env)
|
|
255
261
|
<< (selector->has_line_feed() ? " [line-feed]": " -")
|
256
262
|
<< std::endl;
|
257
263
|
|
258
|
-
debug_ast(selector->contents(), ind + " ");
|
264
|
+
debug_ast(&selector->contents(), ind + " ");
|
259
265
|
// for(auto i : selector->elements()) { debug_ast(i, ind + " ", env); }
|
260
266
|
|
261
|
-
} else if (dynamic_cast<
|
262
|
-
|
267
|
+
} else if (dynamic_cast<Selector_Ptr>(node)) {
|
268
|
+
Selector_Ptr selector = dynamic_cast<Selector_Ptr>(node);
|
263
269
|
std::cerr << ind << "Selector " << selector;
|
264
270
|
std::cerr << " (" << pstate_source_position(node) << ")";
|
265
271
|
std::cerr << (selector->has_line_break() ? " [line-break]": " -")
|
266
272
|
<< (selector->has_line_feed() ? " [line-feed]": " -")
|
267
273
|
<< std::endl;
|
268
274
|
|
269
|
-
} else if (dynamic_cast<
|
270
|
-
|
275
|
+
} else if (dynamic_cast<Media_Query_Expression_Ptr>(node)) {
|
276
|
+
Media_Query_Expression_Ptr block = dynamic_cast<Media_Query_Expression_Ptr>(node);
|
271
277
|
std::cerr << ind << "Media_Query_Expression " << block;
|
272
278
|
std::cerr << " (" << pstate_source_position(node) << ")";
|
273
279
|
std::cerr << (block->is_interpolated() ? " [is_interpolated]": " -")
|
274
280
|
<< std::endl;
|
275
|
-
debug_ast(block->feature(), ind + " feature) ");
|
276
|
-
debug_ast(block->value(), ind + " value) ");
|
281
|
+
debug_ast(&block->feature(), ind + " feature) ");
|
282
|
+
debug_ast(&block->value(), ind + " value) ");
|
277
283
|
|
278
|
-
} else if (dynamic_cast<
|
279
|
-
|
284
|
+
} else if (dynamic_cast<Media_Query_Ptr>(node)) {
|
285
|
+
Media_Query_Ptr block = dynamic_cast<Media_Query_Ptr>(node);
|
280
286
|
std::cerr << ind << "Media_Query " << block;
|
281
287
|
std::cerr << " (" << pstate_source_position(node) << ")";
|
282
288
|
std::cerr << (block->is_negated() ? " [is_negated]": " -")
|
283
289
|
<< (block->is_restricted() ? " [is_restricted]": " -")
|
284
290
|
<< std::endl;
|
285
|
-
debug_ast(block->media_type(), ind + " ");
|
286
|
-
for(auto i : block->elements()) { debug_ast(i, ind + " ", env); }
|
291
|
+
debug_ast(&block->media_type(), ind + " ");
|
292
|
+
for(const auto& i : block->elements()) { debug_ast(&i, ind + " ", env); }
|
287
293
|
|
288
|
-
} else if (dynamic_cast<
|
289
|
-
|
294
|
+
} else if (dynamic_cast<Media_Block_Ptr>(node)) {
|
295
|
+
Media_Block_Ptr block = dynamic_cast<Media_Block_Ptr>(node);
|
290
296
|
std::cerr << ind << "Media_Block " << block;
|
291
297
|
std::cerr << " (" << pstate_source_position(node) << ")";
|
292
298
|
std::cerr << " " << block->tabs() << std::endl;
|
293
|
-
debug_ast(block->media_queries(), ind + " =@ ");
|
294
|
-
if (block->block()) for(
|
295
|
-
} else if (dynamic_cast<
|
296
|
-
|
299
|
+
debug_ast(&block->media_queries(), ind + " =@ ");
|
300
|
+
if (block->block()) for(const Statement_Obj& i : block->block()->elements()) { debug_ast(&i, ind + " ", env); }
|
301
|
+
} else if (dynamic_cast<Supports_Block_Ptr>(node)) {
|
302
|
+
Supports_Block_Ptr block = dynamic_cast<Supports_Block_Ptr>(node);
|
297
303
|
std::cerr << ind << "Supports_Block " << block;
|
298
304
|
std::cerr << " (" << pstate_source_position(node) << ")";
|
299
305
|
std::cerr << " " << block->tabs() << std::endl;
|
300
|
-
debug_ast(block->condition(), ind + " =@ ");
|
301
|
-
debug_ast(block->block(), ind + " <>");
|
302
|
-
} else if (dynamic_cast<
|
303
|
-
|
306
|
+
debug_ast(&block->condition(), ind + " =@ ");
|
307
|
+
debug_ast(&block->block(), ind + " <>");
|
308
|
+
} else if (dynamic_cast<Supports_Operator_Ptr>(node)) {
|
309
|
+
Supports_Operator_Ptr block = dynamic_cast<Supports_Operator_Ptr>(node);
|
304
310
|
std::cerr << ind << "Supports_Operator " << block;
|
305
311
|
std::cerr << " (" << pstate_source_position(node) << ")"
|
306
312
|
<< std::endl;
|
307
|
-
debug_ast(block->left(), ind + " left) ");
|
308
|
-
debug_ast(block->right(), ind + " right) ");
|
309
|
-
} else if (dynamic_cast<
|
310
|
-
|
313
|
+
debug_ast(&block->left(), ind + " left) ");
|
314
|
+
debug_ast(&block->right(), ind + " right) ");
|
315
|
+
} else if (dynamic_cast<Supports_Negation_Ptr>(node)) {
|
316
|
+
Supports_Negation_Ptr block = dynamic_cast<Supports_Negation_Ptr>(node);
|
311
317
|
std::cerr << ind << "Supports_Negation " << block;
|
312
318
|
std::cerr << " (" << pstate_source_position(node) << ")"
|
313
319
|
<< std::endl;
|
314
|
-
debug_ast(block->condition(), ind + " condition) ");
|
315
|
-
} else if (dynamic_cast<
|
316
|
-
|
320
|
+
debug_ast(&block->condition(), ind + " condition) ");
|
321
|
+
} else if (dynamic_cast<At_Root_Query_Ptr>(node)) {
|
322
|
+
At_Root_Query_Ptr block = dynamic_cast<At_Root_Query_Ptr>(node);
|
317
323
|
std::cerr << ind << "At_Root_Query " << block;
|
318
324
|
std::cerr << " (" << pstate_source_position(node) << ")"
|
319
325
|
<< std::endl;
|
320
|
-
debug_ast(block->feature(), ind + " feature) ");
|
321
|
-
debug_ast(block->value(), ind + " value) ");
|
322
|
-
} else if (dynamic_cast<
|
323
|
-
|
326
|
+
debug_ast(&block->feature(), ind + " feature) ");
|
327
|
+
debug_ast(&block->value(), ind + " value) ");
|
328
|
+
} else if (dynamic_cast<Supports_Declaration_Ptr>(node)) {
|
329
|
+
Supports_Declaration_Ptr block = dynamic_cast<Supports_Declaration_Ptr>(node);
|
324
330
|
std::cerr << ind << "Supports_Declaration " << block;
|
325
331
|
std::cerr << " (" << pstate_source_position(node) << ")"
|
326
332
|
<< std::endl;
|
327
|
-
debug_ast(block->feature(), ind + " feature) ");
|
328
|
-
debug_ast(block->value(), ind + " value) ");
|
329
|
-
} else if (dynamic_cast<
|
330
|
-
|
333
|
+
debug_ast(&block->feature(), ind + " feature) ");
|
334
|
+
debug_ast(&block->value(), ind + " value) ");
|
335
|
+
} else if (dynamic_cast<Block_Ptr>(node)) {
|
336
|
+
Block_Ptr root_block = dynamic_cast<Block_Ptr>(node);
|
331
337
|
std::cerr << ind << "Block " << root_block;
|
332
338
|
std::cerr << " (" << pstate_source_position(node) << ")";
|
333
339
|
if (root_block->is_root()) std::cerr << " [root]";
|
334
340
|
std::cerr << " " << root_block->tabs() << std::endl;
|
335
|
-
|
336
|
-
} else if (dynamic_cast<
|
337
|
-
|
341
|
+
for(const Statement_Obj& i : root_block->elements()) { debug_ast(&i, ind + " ", env); }
|
342
|
+
} else if (dynamic_cast<Warning_Ptr>(node)) {
|
343
|
+
Warning_Ptr block = dynamic_cast<Warning_Ptr>(node);
|
338
344
|
std::cerr << ind << "Warning " << block;
|
339
345
|
std::cerr << " (" << pstate_source_position(node) << ")";
|
340
346
|
std::cerr << " " << block->tabs() << std::endl;
|
341
|
-
debug_ast(block->message(), ind + " : ");
|
342
|
-
} else if (dynamic_cast<
|
343
|
-
|
347
|
+
debug_ast(&block->message(), ind + " : ");
|
348
|
+
} else if (dynamic_cast<Error_Ptr>(node)) {
|
349
|
+
Error_Ptr block = dynamic_cast<Error_Ptr>(node);
|
344
350
|
std::cerr << ind << "Error " << block;
|
345
351
|
std::cerr << " (" << pstate_source_position(node) << ")";
|
346
352
|
std::cerr << " " << block->tabs() << std::endl;
|
347
|
-
} else if (dynamic_cast<
|
348
|
-
|
353
|
+
} else if (dynamic_cast<Debug_Ptr>(node)) {
|
354
|
+
Debug_Ptr block = dynamic_cast<Debug_Ptr>(node);
|
349
355
|
std::cerr << ind << "Debug " << block;
|
350
356
|
std::cerr << " (" << pstate_source_position(node) << ")";
|
351
357
|
std::cerr << " " << block->tabs() << std::endl;
|
352
|
-
debug_ast(block->value(), ind + " ");
|
353
|
-
} else if (dynamic_cast<
|
354
|
-
|
358
|
+
debug_ast(&block->value(), ind + " ");
|
359
|
+
} else if (dynamic_cast<Comment_Ptr>(node)) {
|
360
|
+
Comment_Ptr block = dynamic_cast<Comment_Ptr>(node);
|
355
361
|
std::cerr << ind << "Comment " << block;
|
356
362
|
std::cerr << " (" << pstate_source_position(node) << ")";
|
357
363
|
std::cerr << " " << block->tabs() <<
|
358
364
|
" <" << prettyprint(block->pstate().token.ws_before()) << ">" << std::endl;
|
359
|
-
debug_ast(block->text(), ind + "// ", env);
|
360
|
-
} else if (dynamic_cast<
|
361
|
-
|
365
|
+
debug_ast(&block->text(), ind + "// ", env);
|
366
|
+
} else if (dynamic_cast<If_Ptr>(node)) {
|
367
|
+
If_Ptr block = dynamic_cast<If_Ptr>(node);
|
362
368
|
std::cerr << ind << "If " << block;
|
363
369
|
std::cerr << " (" << pstate_source_position(node) << ")";
|
364
370
|
std::cerr << " " << block->tabs() << std::endl;
|
365
|
-
debug_ast(block->predicate(), ind + " = ");
|
366
|
-
debug_ast(block->block(), ind + " <>");
|
367
|
-
debug_ast(block->alternative(), ind + " ><");
|
368
|
-
} else if (dynamic_cast<
|
369
|
-
|
371
|
+
debug_ast(&block->predicate(), ind + " = ");
|
372
|
+
debug_ast(&block->block(), ind + " <>");
|
373
|
+
debug_ast(&block->alternative(), ind + " ><");
|
374
|
+
} else if (dynamic_cast<Return_Ptr>(node)) {
|
375
|
+
Return_Ptr block = dynamic_cast<Return_Ptr>(node);
|
370
376
|
std::cerr << ind << "Return " << block;
|
371
377
|
std::cerr << " (" << pstate_source_position(node) << ")";
|
372
378
|
std::cerr << " " << block->tabs() << std::endl;
|
373
|
-
} else if (dynamic_cast<
|
374
|
-
|
379
|
+
} else if (dynamic_cast<Extension_Ptr>(node)) {
|
380
|
+
Extension_Ptr block = dynamic_cast<Extension_Ptr>(node);
|
375
381
|
std::cerr << ind << "Extension " << block;
|
376
382
|
std::cerr << " (" << pstate_source_position(node) << ")";
|
377
383
|
std::cerr << " " << block->tabs() << std::endl;
|
378
|
-
debug_ast(block->selector(), ind + "-> ", env);
|
379
|
-
} else if (dynamic_cast<
|
380
|
-
|
384
|
+
debug_ast(&block->selector(), ind + "-> ", env);
|
385
|
+
} else if (dynamic_cast<Content_Ptr>(node)) {
|
386
|
+
Content_Ptr block = dynamic_cast<Content_Ptr>(node);
|
381
387
|
std::cerr << ind << "Content " << block;
|
382
388
|
std::cerr << " (" << pstate_source_position(node) << ")";
|
383
389
|
std::cerr << " [@media:" << block->media_block() << "]";
|
384
390
|
std::cerr << " " << block->tabs() << std::endl;
|
385
|
-
} else if (dynamic_cast<
|
386
|
-
|
391
|
+
} else if (dynamic_cast<Import_Stub_Ptr>(node)) {
|
392
|
+
Import_Stub_Ptr block = dynamic_cast<Import_Stub_Ptr>(node);
|
387
393
|
std::cerr << ind << "Import_Stub " << block;
|
388
394
|
std::cerr << " (" << pstate_source_position(node) << ")";
|
389
395
|
std::cerr << " [" << block->imp_path() << "] ";
|
390
396
|
std::cerr << " " << block->tabs() << std::endl;
|
391
|
-
} else if (dynamic_cast<
|
392
|
-
|
397
|
+
} else if (dynamic_cast<Import_Ptr>(node)) {
|
398
|
+
Import_Ptr block = dynamic_cast<Import_Ptr>(node);
|
393
399
|
std::cerr << ind << "Import " << block;
|
394
400
|
std::cerr << " (" << pstate_source_position(node) << ")";
|
395
401
|
std::cerr << " " << block->tabs() << std::endl;
|
396
402
|
// std::vector<std::string> files_;
|
397
|
-
for (auto imp : block->urls()) debug_ast(imp, ind + "@: ", env);
|
398
|
-
debug_ast(block->
|
399
|
-
} else if (dynamic_cast<
|
400
|
-
|
403
|
+
for (auto imp : block->urls()) debug_ast(&imp, ind + "@: ", env);
|
404
|
+
debug_ast(&block->import_queries(), ind + "@@ ");
|
405
|
+
} else if (dynamic_cast<Assignment_Ptr>(node)) {
|
406
|
+
Assignment_Ptr block = dynamic_cast<Assignment_Ptr>(node);
|
401
407
|
std::cerr << ind << "Assignment " << block;
|
402
408
|
std::cerr << " (" << pstate_source_position(node) << ")";
|
403
409
|
std::cerr << " <<" << block->variable() << ">> " << block->tabs() << std::endl;
|
404
|
-
debug_ast(block->value(), ind + "=", env);
|
405
|
-
} else if (dynamic_cast<
|
406
|
-
|
410
|
+
debug_ast(&block->value(), ind + "=", env);
|
411
|
+
} else if (dynamic_cast<Declaration_Ptr>(node)) {
|
412
|
+
Declaration_Ptr block = dynamic_cast<Declaration_Ptr>(node);
|
407
413
|
std::cerr << ind << "Declaration " << block;
|
408
414
|
std::cerr << " (" << pstate_source_position(node) << ")";
|
409
415
|
std::cerr << " " << block->tabs() << std::endl;
|
410
|
-
debug_ast(block->property(), ind + " prop: ", env);
|
411
|
-
debug_ast(block->value(), ind + " value: ", env);
|
412
|
-
debug_ast(block->block(), ind + " ", env);
|
413
|
-
} else if (dynamic_cast<
|
414
|
-
|
416
|
+
debug_ast(&block->property(), ind + " prop: ", env);
|
417
|
+
debug_ast(&block->value(), ind + " value: ", env);
|
418
|
+
debug_ast(&block->block(), ind + " ", env);
|
419
|
+
} else if (dynamic_cast<Keyframe_Rule_Ptr>(node)) {
|
420
|
+
Keyframe_Rule_Ptr has_block = dynamic_cast<Keyframe_Rule_Ptr>(node);
|
415
421
|
std::cerr << ind << "Keyframe_Rule " << has_block;
|
416
422
|
std::cerr << " (" << pstate_source_position(node) << ")";
|
417
423
|
std::cerr << " " << has_block->tabs() << std::endl;
|
418
|
-
if (has_block->
|
419
|
-
if (has_block->block()) for(
|
420
|
-
} else if (dynamic_cast<
|
421
|
-
|
424
|
+
if (has_block->name()) debug_ast(&has_block->name(), ind + "@");
|
425
|
+
if (has_block->block()) for(const Statement_Obj& i : has_block->block()->elements()) { debug_ast(&i, ind + " ", env); }
|
426
|
+
} else if (dynamic_cast<Directive_Ptr>(node)) {
|
427
|
+
Directive_Ptr block = dynamic_cast<Directive_Ptr>(node);
|
422
428
|
std::cerr << ind << "Directive " << block;
|
423
429
|
std::cerr << " (" << pstate_source_position(node) << ")";
|
424
430
|
std::cerr << " [" << block->keyword() << "] " << block->tabs() << std::endl;
|
425
|
-
debug_ast(block->selector(), ind + "~", env);
|
426
|
-
debug_ast(block->value(), ind + "+", env);
|
427
|
-
if (block->block()) for(
|
428
|
-
} else if (dynamic_cast<
|
429
|
-
|
431
|
+
debug_ast(&block->selector(), ind + "~", env);
|
432
|
+
debug_ast(&block->value(), ind + "+", env);
|
433
|
+
if (block->block()) for(const Statement_Obj& i : block->block()->elements()) { debug_ast(&i, ind + " ", env); }
|
434
|
+
} else if (dynamic_cast<Each_Ptr>(node)) {
|
435
|
+
Each_Ptr block = dynamic_cast<Each_Ptr>(node);
|
430
436
|
std::cerr << ind << "Each " << block;
|
431
437
|
std::cerr << " (" << pstate_source_position(node) << ")";
|
432
438
|
std::cerr << " " << block->tabs() << std::endl;
|
433
|
-
if (block->block()) for(
|
434
|
-
} else if (dynamic_cast<
|
435
|
-
|
439
|
+
if (block->block()) for(const Statement_Obj& i : block->block()->elements()) { debug_ast(&i, ind + " ", env); }
|
440
|
+
} else if (dynamic_cast<For_Ptr>(node)) {
|
441
|
+
For_Ptr block = dynamic_cast<For_Ptr>(node);
|
436
442
|
std::cerr << ind << "For " << block;
|
437
443
|
std::cerr << " (" << pstate_source_position(node) << ")";
|
438
444
|
std::cerr << " " << block->tabs() << std::endl;
|
439
|
-
if (block->block()) for(
|
440
|
-
} else if (dynamic_cast<
|
441
|
-
|
445
|
+
if (block->block()) for(const Statement_Obj& i : block->block()->elements()) { debug_ast(&i, ind + " ", env); }
|
446
|
+
} else if (dynamic_cast<While_Ptr>(node)) {
|
447
|
+
While_Ptr block = dynamic_cast<While_Ptr>(node);
|
442
448
|
std::cerr << ind << "While " << block;
|
443
449
|
std::cerr << " (" << pstate_source_position(node) << ")";
|
444
450
|
std::cerr << " " << block->tabs() << std::endl;
|
445
|
-
if (block->block()) for(
|
446
|
-
} else if (dynamic_cast<
|
447
|
-
|
451
|
+
if (block->block()) for(const Statement_Obj& i : block->block()->elements()) { debug_ast(&i, ind + " ", env); }
|
452
|
+
} else if (dynamic_cast<Definition_Ptr>(node)) {
|
453
|
+
Definition_Ptr block = dynamic_cast<Definition_Ptr>(node);
|
448
454
|
std::cerr << ind << "Definition " << block;
|
449
455
|
std::cerr << " (" << pstate_source_position(node) << ")";
|
450
456
|
std::cerr << " [name: " << block->name() << "] ";
|
@@ -453,16 +459,17 @@ inline void debug_ast(AST_Node* node, std::string ind, Env* env)
|
|
453
459
|
// std::cerr << " [signature: " << block->signature() << "] ";
|
454
460
|
std::cerr << " [native: " << block->native_function() << "] ";
|
455
461
|
std::cerr << " " << block->tabs() << std::endl;
|
456
|
-
debug_ast(block->parameters(), ind + " params: ", env);
|
457
|
-
if (block->block()) debug_ast(block->block(), ind + " ", env);
|
458
|
-
} else if (dynamic_cast<
|
459
|
-
|
462
|
+
debug_ast(&block->parameters(), ind + " params: ", env);
|
463
|
+
if (block->block()) debug_ast(&block->block(), ind + " ", env);
|
464
|
+
} else if (dynamic_cast<Mixin_Call_Ptr>(node)) {
|
465
|
+
Mixin_Call_Ptr block = dynamic_cast<Mixin_Call_Ptr>(node);
|
460
466
|
std::cerr << ind << "Mixin_Call " << block << " " << block->tabs();
|
467
|
+
std::cerr << " (" << pstate_source_position(block) << ")";
|
461
468
|
std::cerr << " [" << block->name() << "]";
|
462
469
|
std::cerr << " [has_content: " << block->has_content() << "] " << std::endl;
|
463
|
-
debug_ast(block->arguments(), ind + " args: ");
|
464
|
-
if (block->block()) debug_ast(block->block(), ind + " ", env);
|
465
|
-
} else if (
|
470
|
+
debug_ast(&block->arguments(), ind + " args: ");
|
471
|
+
if (block->block()) debug_ast(&block->block(), ind + " ", env);
|
472
|
+
} else if (Ruleset_Ptr ruleset = dynamic_cast<Ruleset_Ptr>(node)) {
|
466
473
|
std::cerr << ind << "Ruleset " << ruleset;
|
467
474
|
std::cerr << " (" << pstate_source_position(node) << ")";
|
468
475
|
std::cerr << " [indent: " << ruleset->tabs() << "]";
|
@@ -470,44 +477,45 @@ inline void debug_ast(AST_Node* node, std::string ind, Env* env)
|
|
470
477
|
std::cerr << (ruleset->at_root() ? " [@ROOT]" : "");
|
471
478
|
std::cerr << (ruleset->is_root() ? " [root]" : "");
|
472
479
|
std::cerr << std::endl;
|
473
|
-
debug_ast(ruleset->selector(), ind + ">");
|
474
|
-
debug_ast(ruleset->block(), ind + " ");
|
475
|
-
} else if (dynamic_cast<
|
476
|
-
|
480
|
+
debug_ast(&ruleset->selector(), ind + ">");
|
481
|
+
debug_ast(&ruleset->block(), ind + " ");
|
482
|
+
} else if (dynamic_cast<Block_Ptr>(node)) {
|
483
|
+
Block_Ptr block = dynamic_cast<Block_Ptr>(node);
|
477
484
|
std::cerr << ind << "Block " << block;
|
478
485
|
std::cerr << " (" << pstate_source_position(node) << ")";
|
479
486
|
std::cerr << (block->is_invisible() ? " [INVISIBLE]" : "");
|
480
487
|
std::cerr << " [indent: " << block->tabs() << "]" << std::endl;
|
481
|
-
for(
|
482
|
-
} else if (dynamic_cast<
|
483
|
-
|
484
|
-
std::cerr << ind << "Textual ";
|
488
|
+
for(const Statement_Obj& i : block->elements()) { debug_ast(&i, ind + " ", env); }
|
489
|
+
} else if (dynamic_cast<Textual_Ptr>(node)) {
|
490
|
+
Textual_Ptr expression = dynamic_cast<Textual_Ptr>(node);
|
491
|
+
std::cerr << ind << "Textual " << expression;
|
492
|
+
std::cerr << " (" << pstate_source_position(node) << ")";
|
485
493
|
if (expression->type() == Textual::NUMBER) std::cerr << " [NUMBER]";
|
486
494
|
else if (expression->type() == Textual::PERCENTAGE) std::cerr << " [PERCENTAGE]";
|
487
495
|
else if (expression->type() == Textual::DIMENSION) std::cerr << " [DIMENSION]";
|
488
496
|
else if (expression->type() == Textual::HEX) std::cerr << " [HEX]";
|
489
|
-
std::cerr <<
|
497
|
+
std::cerr << " [" << expression->value() << "]";
|
490
498
|
std::cerr << " [interpolant: " << expression->is_interpolant() << "] ";
|
491
499
|
if (expression->is_delayed()) std::cerr << " [delayed]";
|
492
500
|
std::cerr << std::endl;
|
493
|
-
} else if (dynamic_cast<
|
494
|
-
|
501
|
+
} else if (dynamic_cast<Variable_Ptr>(node)) {
|
502
|
+
Variable_Ptr expression = dynamic_cast<Variable_Ptr>(node);
|
495
503
|
std::cerr << ind << "Variable " << expression;
|
496
504
|
std::cerr << " [interpolant: " << expression->is_interpolant() << "] ";
|
497
505
|
std::cerr << " (" << pstate_source_position(node) << ")";
|
498
506
|
std::cerr << " [" << expression->name() << "]" << std::endl;
|
499
507
|
std::string name(expression->name());
|
500
|
-
if (env && env->has(name)) debug_ast(
|
501
|
-
} else if (dynamic_cast<
|
502
|
-
|
508
|
+
if (env && env->has(name)) debug_ast(SASS_MEMORY_CAST(Expression, (*env)[name]), ind + " -> ", env);
|
509
|
+
} else if (dynamic_cast<Function_Call_Schema_Ptr>(node)) {
|
510
|
+
Function_Call_Schema_Ptr expression = dynamic_cast<Function_Call_Schema_Ptr>(node);
|
503
511
|
std::cerr << ind << "Function_Call_Schema " << expression;
|
504
512
|
std::cerr << " [interpolant: " << expression->is_interpolant() << "] ";
|
505
513
|
std::cerr << " (" << pstate_source_position(node) << ")";
|
506
514
|
std::cerr << "" << std::endl;
|
507
|
-
debug_ast(expression->name(), ind + "name: ", env);
|
508
|
-
debug_ast(expression->arguments(), ind + " args: ", env);
|
509
|
-
} else if (dynamic_cast<
|
510
|
-
|
515
|
+
debug_ast(&expression->name(), ind + "name: ", env);
|
516
|
+
debug_ast(&expression->arguments(), ind + " args: ", env);
|
517
|
+
} else if (dynamic_cast<Function_Call_Ptr>(node)) {
|
518
|
+
Function_Call_Ptr expression = dynamic_cast<Function_Call_Ptr>(node);
|
511
519
|
std::cerr << ind << "Function_Call " << expression;
|
512
520
|
std::cerr << " [interpolant: " << expression->is_interpolant() << "] ";
|
513
521
|
std::cerr << " (" << pstate_source_position(node) << ")";
|
@@ -515,9 +523,9 @@ inline void debug_ast(AST_Node* node, std::string ind, Env* env)
|
|
515
523
|
if (expression->is_delayed()) std::cerr << " [delayed]";
|
516
524
|
if (expression->is_interpolant()) std::cerr << " [interpolant]";
|
517
525
|
std::cerr << std::endl;
|
518
|
-
debug_ast(expression->arguments(), ind + " args: ", env);
|
519
|
-
} else if (dynamic_cast<
|
520
|
-
|
526
|
+
debug_ast(&expression->arguments(), ind + " args: ", env);
|
527
|
+
} else if (dynamic_cast<Arguments_Ptr>(node)) {
|
528
|
+
Arguments_Ptr expression = dynamic_cast<Arguments_Ptr>(node);
|
521
529
|
std::cerr << ind << "Arguments " << expression;
|
522
530
|
if (expression->is_delayed()) std::cerr << " [delayed]";
|
523
531
|
std::cerr << " (" << pstate_source_position(node) << ")";
|
@@ -525,41 +533,41 @@ inline void debug_ast(AST_Node* node, std::string ind, Env* env)
|
|
525
533
|
if (expression->has_rest_argument()) std::cerr << " [has_rest_argument]";
|
526
534
|
if (expression->has_keyword_argument()) std::cerr << " [has_keyword_argument]";
|
527
535
|
std::cerr << std::endl;
|
528
|
-
for(
|
529
|
-
} else if (dynamic_cast<
|
530
|
-
|
536
|
+
for(const Argument_Obj& i : expression->elements()) { debug_ast(&i, ind + " ", env); }
|
537
|
+
} else if (dynamic_cast<Argument_Ptr>(node)) {
|
538
|
+
Argument_Ptr expression = dynamic_cast<Argument_Ptr>(node);
|
531
539
|
std::cerr << ind << "Argument " << expression;
|
532
540
|
std::cerr << " (" << pstate_source_position(node) << ")";
|
533
541
|
std::cerr << " [" << expression->value() << "]";
|
534
542
|
std::cerr << " [name: " << expression->name() << "] ";
|
535
543
|
std::cerr << " [rest: " << expression->is_rest_argument() << "] ";
|
536
544
|
std::cerr << " [keyword: " << expression->is_keyword_argument() << "] " << std::endl;
|
537
|
-
debug_ast(expression->value(), ind + " value: ", env);
|
538
|
-
} else if (dynamic_cast<
|
539
|
-
|
545
|
+
debug_ast(&expression->value(), ind + " value: ", env);
|
546
|
+
} else if (dynamic_cast<Parameters_Ptr>(node)) {
|
547
|
+
Parameters_Ptr expression = dynamic_cast<Parameters_Ptr>(node);
|
540
548
|
std::cerr << ind << "Parameters " << expression;
|
541
549
|
std::cerr << " (" << pstate_source_position(node) << ")";
|
542
550
|
std::cerr << " [has_optional: " << expression->has_optional_parameters() << "] ";
|
543
551
|
std::cerr << " [has_rest: " << expression->has_rest_parameter() << "] ";
|
544
552
|
std::cerr << std::endl;
|
545
|
-
for(
|
546
|
-
} else if (dynamic_cast<
|
547
|
-
|
553
|
+
for(const Parameter_Obj& i : expression->elements()) { debug_ast(&i, ind + " ", env); }
|
554
|
+
} else if (dynamic_cast<Parameter_Ptr>(node)) {
|
555
|
+
Parameter_Ptr expression = dynamic_cast<Parameter_Ptr>(node);
|
548
556
|
std::cerr << ind << "Parameter " << expression;
|
549
557
|
std::cerr << " (" << pstate_source_position(node) << ")";
|
550
558
|
std::cerr << " [name: " << expression->name() << "] ";
|
551
559
|
std::cerr << " [default: " << expression->default_value() << "] ";
|
552
560
|
std::cerr << " [rest: " << expression->is_rest_parameter() << "] " << std::endl;
|
553
|
-
} else if (dynamic_cast<
|
554
|
-
|
561
|
+
} else if (dynamic_cast<Unary_Expression_Ptr>(node)) {
|
562
|
+
Unary_Expression_Ptr expression = dynamic_cast<Unary_Expression_Ptr>(node);
|
555
563
|
std::cerr << ind << "Unary_Expression " << expression;
|
556
564
|
std::cerr << " [interpolant: " << expression->is_interpolant() << "] ";
|
557
565
|
std::cerr << " [delayed: " << expression->is_delayed() << "] ";
|
558
566
|
std::cerr << " (" << pstate_source_position(node) << ")";
|
559
567
|
std::cerr << " [" << expression->type() << "]" << std::endl;
|
560
|
-
debug_ast(expression->operand(), ind + " operand: ", env);
|
561
|
-
} else if (dynamic_cast<
|
562
|
-
|
568
|
+
debug_ast(&expression->operand(), ind + " operand: ", env);
|
569
|
+
} else if (dynamic_cast<Binary_Expression_Ptr>(node)) {
|
570
|
+
Binary_Expression_Ptr expression = dynamic_cast<Binary_Expression_Ptr>(node);
|
563
571
|
std::cerr << ind << "Binary_Expression " << expression;
|
564
572
|
if (expression->is_interpolant()) std::cerr << " [is interpolant] ";
|
565
573
|
if (expression->is_left_interpolant()) std::cerr << " [left interpolant] ";
|
@@ -569,20 +577,20 @@ inline void debug_ast(AST_Node* node, std::string ind, Env* env)
|
|
569
577
|
std::cerr << " [ws_after: " << expression->op().ws_after << "] ";
|
570
578
|
std::cerr << " (" << pstate_source_position(node) << ")";
|
571
579
|
std::cerr << " [" << expression->type_name() << "]" << std::endl;
|
572
|
-
debug_ast(expression->left(), ind + " left: ", env);
|
573
|
-
debug_ast(expression->right(), ind + " right: ", env);
|
574
|
-
} else if (dynamic_cast<
|
575
|
-
|
580
|
+
debug_ast(&expression->left(), ind + " left: ", env);
|
581
|
+
debug_ast(&expression->right(), ind + " right: ", env);
|
582
|
+
} else if (dynamic_cast<Map_Ptr>(node)) {
|
583
|
+
Map_Ptr expression = dynamic_cast<Map_Ptr>(node);
|
576
584
|
std::cerr << ind << "Map " << expression;
|
577
585
|
std::cerr << " [interpolant: " << expression->is_interpolant() << "] ";
|
578
586
|
std::cerr << " (" << pstate_source_position(node) << ")";
|
579
587
|
std::cerr << " [Hashed]" << std::endl;
|
580
|
-
for (auto i : expression->elements()) {
|
581
|
-
debug_ast(i.first, ind + " key: ");
|
582
|
-
debug_ast(i.second, ind + " val: ");
|
588
|
+
for (const auto& i : expression->elements()) {
|
589
|
+
debug_ast(&i.first, ind + " key: ");
|
590
|
+
debug_ast(&i.second, ind + " val: ");
|
583
591
|
}
|
584
|
-
} else if (dynamic_cast<
|
585
|
-
|
592
|
+
} else if (dynamic_cast<List_Ptr>(node)) {
|
593
|
+
List_Ptr expression = dynamic_cast<List_Ptr>(node);
|
586
594
|
std::cerr << ind << "List " << expression;
|
587
595
|
std::cerr << " (" << pstate_source_position(node) << ")";
|
588
596
|
std::cerr << " (" << expression->length() << ") " <<
|
@@ -593,36 +601,43 @@ inline void debug_ast(AST_Node* node, std::string ind, Env* env)
|
|
593
601
|
" [arglist: " << expression->is_arglist() << "] " <<
|
594
602
|
" [hash: " << expression->hash() << "] " <<
|
595
603
|
std::endl;
|
596
|
-
for(auto i : expression->elements()) { debug_ast(i, ind + " ", env); }
|
597
|
-
} else if (dynamic_cast<
|
598
|
-
|
604
|
+
for(const auto& i : expression->elements()) { debug_ast(&i, ind + " ", env); }
|
605
|
+
} else if (dynamic_cast<Content_Ptr>(node)) {
|
606
|
+
Content_Ptr expression = dynamic_cast<Content_Ptr>(node);
|
599
607
|
std::cerr << ind << "Content " << expression;
|
600
608
|
std::cerr << " (" << pstate_source_position(node) << ")";
|
601
609
|
std::cerr << " [@media:" << expression->media_block() << "]";
|
602
610
|
std::cerr << " [Statement]" << std::endl;
|
603
|
-
} else if (dynamic_cast<
|
604
|
-
|
611
|
+
} else if (dynamic_cast<Boolean_Ptr>(node)) {
|
612
|
+
Boolean_Ptr expression = dynamic_cast<Boolean_Ptr>(node);
|
605
613
|
std::cerr << ind << "Boolean " << expression;
|
606
614
|
std::cerr << " (" << pstate_source_position(node) << ")";
|
607
615
|
std::cerr << " [interpolant: " << expression->is_interpolant() << "] ";
|
608
616
|
std::cerr << " [" << expression->value() << "]" << std::endl;
|
609
|
-
} else if (dynamic_cast<
|
610
|
-
|
617
|
+
} else if (dynamic_cast<Color_Ptr>(node)) {
|
618
|
+
Color_Ptr expression = dynamic_cast<Color_Ptr>(node);
|
611
619
|
std::cerr << ind << "Color " << expression;
|
612
620
|
std::cerr << " (" << pstate_source_position(node) << ")";
|
613
621
|
std::cerr << " [delayed: " << expression->is_delayed() << "] ";
|
614
622
|
std::cerr << " [interpolant: " << expression->is_interpolant() << "] ";
|
615
623
|
std::cerr << " [" << expression->r() << ":" << expression->g() << ":" << expression->b() << "@" << expression->a() << "]" << std::endl;
|
616
|
-
} else if (dynamic_cast<
|
617
|
-
|
624
|
+
} else if (dynamic_cast<Number_Ptr>(node)) {
|
625
|
+
Number_Ptr expression = dynamic_cast<Number_Ptr>(node);
|
618
626
|
std::cerr << ind << "Number " << expression;
|
619
627
|
std::cerr << " (" << pstate_source_position(node) << ")";
|
620
628
|
std::cerr << " [interpolant: " << expression->is_interpolant() << "] ";
|
621
629
|
std::cerr << " [" << expression->value() << expression->unit() << "]" <<
|
622
630
|
" [hash: " << expression->hash() << "] " <<
|
623
631
|
std::endl;
|
624
|
-
} else if (dynamic_cast<
|
625
|
-
|
632
|
+
} else if (dynamic_cast<Null_Ptr>(node)) {
|
633
|
+
Null_Ptr expression = dynamic_cast<Null_Ptr>(node);
|
634
|
+
std::cerr << ind << "Null " << expression;
|
635
|
+
std::cerr << " (" << pstate_source_position(node) << ")";
|
636
|
+
std::cerr << " [interpolant: " << expression->is_interpolant() << "] "
|
637
|
+
// " [hash: " << expression->hash() << "] "
|
638
|
+
<< std::endl;
|
639
|
+
} else if (dynamic_cast<String_Quoted_Ptr>(node)) {
|
640
|
+
String_Quoted_Ptr expression = dynamic_cast<String_Quoted_Ptr>(node);
|
626
641
|
std::cerr << ind << "String_Quoted " << expression;
|
627
642
|
std::cerr << " (" << pstate_source_position(node) << ")";
|
628
643
|
std::cerr << " [" << prettyprint(expression->value()) << "]";
|
@@ -630,8 +645,8 @@ inline void debug_ast(AST_Node* node, std::string ind, Env* env)
|
|
630
645
|
if (expression->is_interpolant()) std::cerr << " [interpolant]";
|
631
646
|
if (expression->quote_mark()) std::cerr << " [quote_mark: " << expression->quote_mark() << "]";
|
632
647
|
std::cerr << " <" << prettyprint(expression->pstate().token.ws_before()) << ">" << std::endl;
|
633
|
-
} else if (dynamic_cast<
|
634
|
-
|
648
|
+
} else if (dynamic_cast<String_Constant_Ptr>(node)) {
|
649
|
+
String_Constant_Ptr expression = dynamic_cast<String_Constant_Ptr>(node);
|
635
650
|
std::cerr << ind << "String_Constant " << expression;
|
636
651
|
if (expression->concrete_type()) {
|
637
652
|
std::cerr << " " << expression->concrete_type();
|
@@ -641,26 +656,28 @@ inline void debug_ast(AST_Node* node, std::string ind, Env* env)
|
|
641
656
|
if (expression->is_delayed()) std::cerr << " [delayed]";
|
642
657
|
if (expression->is_interpolant()) std::cerr << " [interpolant]";
|
643
658
|
std::cerr << " <" << prettyprint(expression->pstate().token.ws_before()) << ">" << std::endl;
|
644
|
-
} else if (dynamic_cast<
|
645
|
-
|
659
|
+
} else if (dynamic_cast<String_Schema_Ptr>(node)) {
|
660
|
+
String_Schema_Ptr expression = dynamic_cast<String_Schema_Ptr>(node);
|
646
661
|
std::cerr << ind << "String_Schema " << expression;
|
662
|
+
std::cerr << " (" << pstate_source_position(expression) << ")";
|
647
663
|
std::cerr << " " << expression->concrete_type();
|
664
|
+
std::cerr << " (" << pstate_source_position(node) << ")";
|
648
665
|
if (expression->is_delayed()) std::cerr << " [delayed]";
|
649
666
|
if (expression->is_interpolant()) std::cerr << " [is interpolant]";
|
650
667
|
if (expression->has_interpolant()) std::cerr << " [has interpolant]";
|
651
668
|
if (expression->is_left_interpolant()) std::cerr << " [left interpolant] ";
|
652
669
|
if (expression->is_right_interpolant()) std::cerr << " [right interpolant] ";
|
653
670
|
std::cerr << " <" << prettyprint(expression->pstate().token.ws_before()) << ">" << std::endl;
|
654
|
-
for(auto i : expression->elements()) { debug_ast(i, ind + " ", env); }
|
655
|
-
} else if (dynamic_cast<
|
656
|
-
|
671
|
+
for(const auto& i : expression->elements()) { debug_ast(&i, ind + " ", env); }
|
672
|
+
} else if (dynamic_cast<String_Ptr>(node)) {
|
673
|
+
String_Ptr expression = dynamic_cast<String_Ptr>(node);
|
657
674
|
std::cerr << ind << "String " << expression;
|
658
675
|
std::cerr << " " << expression->concrete_type();
|
659
676
|
std::cerr << " (" << pstate_source_position(node) << ")";
|
660
677
|
if (expression->is_interpolant()) std::cerr << " [interpolant]";
|
661
678
|
std::cerr << " <" << prettyprint(expression->pstate().token.ws_before()) << ">" << std::endl;
|
662
|
-
} else if (dynamic_cast<
|
663
|
-
|
679
|
+
} else if (dynamic_cast<Expression_Ptr>(node)) {
|
680
|
+
Expression_Ptr expression = dynamic_cast<Expression_Ptr>(node);
|
664
681
|
std::cerr << ind << "Expression " << expression;
|
665
682
|
std::cerr << " (" << pstate_source_position(node) << ")";
|
666
683
|
switch (expression->concrete_type()) {
|
@@ -675,17 +692,18 @@ inline void debug_ast(AST_Node* node, std::string ind, Env* env)
|
|
675
692
|
case Expression::Concrete_Type::NULL_VAL: std::cerr << " [NULL_VAL]"; break;
|
676
693
|
case Expression::Concrete_Type::C_WARNING: std::cerr << " [C_WARNING]"; break;
|
677
694
|
case Expression::Concrete_Type::C_ERROR: std::cerr << " [C_ERROR]"; break;
|
695
|
+
case Expression::Concrete_Type::FUNCTION: std::cerr << " [FUNCTION]"; break;
|
678
696
|
case Expression::Concrete_Type::NUM_TYPES: std::cerr << " [NUM_TYPES]"; break;
|
679
697
|
}
|
680
698
|
std::cerr << std::endl;
|
681
|
-
} else if (dynamic_cast<
|
682
|
-
|
699
|
+
} else if (dynamic_cast<Has_Block_Ptr>(node)) {
|
700
|
+
Has_Block_Ptr has_block = dynamic_cast<Has_Block_Ptr>(node);
|
683
701
|
std::cerr << ind << "Has_Block " << has_block;
|
684
702
|
std::cerr << " (" << pstate_source_position(node) << ")";
|
685
703
|
std::cerr << " " << has_block->tabs() << std::endl;
|
686
|
-
if (has_block->block()) for(
|
687
|
-
} else if (dynamic_cast<
|
688
|
-
|
704
|
+
if (has_block->block()) for(const Statement_Obj& i : has_block->block()->elements()) { debug_ast(&i, ind + " ", env); }
|
705
|
+
} else if (dynamic_cast<Statement_Ptr>(node)) {
|
706
|
+
Statement_Ptr statement = dynamic_cast<Statement_Ptr>(node);
|
689
707
|
std::cerr << ind << "Statement " << statement;
|
690
708
|
std::cerr << " (" << pstate_source_position(node) << ")";
|
691
709
|
std::cerr << " " << statement->tabs() << std::endl;
|
@@ -703,11 +721,11 @@ inline void debug_node(Node* node, std::string ind = "")
|
|
703
721
|
std::cerr << node << " ";
|
704
722
|
if (node->got_line_feed) std::cerr << "[LF] ";
|
705
723
|
switch (node->combinator()) {
|
706
|
-
case
|
707
|
-
case
|
708
|
-
case
|
709
|
-
case
|
710
|
-
case
|
724
|
+
case Complex_Selector::ADJACENT_TO: std::cerr << "{+} "; break;
|
725
|
+
case Complex_Selector::PARENT_OF: std::cerr << "{>} "; break;
|
726
|
+
case Complex_Selector::PRECEDES: std::cerr << "{~} "; break;
|
727
|
+
case Complex_Selector::REFERENCE: std::cerr << "{@} "; break;
|
728
|
+
case Complex_Selector::ANCESTOR_OF: std::cerr << "{ } "; break;
|
711
729
|
}
|
712
730
|
std::cerr << std::endl;
|
713
731
|
// debug_ast(node->combinator(), ind + " ");
|
@@ -717,7 +735,7 @@ inline void debug_node(Node* node, std::string ind = "")
|
|
717
735
|
std::cerr << node << " ";
|
718
736
|
if (node->got_line_feed) std::cerr << "[LF] ";
|
719
737
|
std::cerr << std::endl;
|
720
|
-
debug_ast(node->selector(), ind + " ");
|
738
|
+
debug_ast(&node->selector(), ind + " ");
|
721
739
|
} else if (node->isCollection()) {
|
722
740
|
std::cerr << ind;
|
723
741
|
std::cerr << "Collection ";
|
@@ -743,35 +761,36 @@ inline void debug_node(Node* node, std::string ind = "")
|
|
743
761
|
if (ind == "") std::cerr << "#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\n";
|
744
762
|
}
|
745
763
|
|
746
|
-
|
764
|
+
/*
|
765
|
+
inline void debug_ast(const AST_Node_Ptr node, std::string ind = "", Env* env = 0)
|
747
766
|
{
|
748
|
-
debug_ast(const_cast<
|
767
|
+
debug_ast(const_cast<AST_Node_Ptr>(node), ind, env);
|
749
768
|
}
|
750
|
-
|
769
|
+
*/
|
751
770
|
inline void debug_node(const Node* node, std::string ind = "")
|
752
771
|
{
|
753
772
|
debug_node(const_cast<Node*>(node), ind);
|
754
773
|
}
|
755
774
|
|
756
|
-
inline void debug_subset_map(Sass::
|
775
|
+
inline void debug_subset_map(Sass::Subset_Map& map, std::string ind = "")
|
757
776
|
{
|
758
777
|
if (ind == "") std::cerr << "#%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n";
|
759
778
|
for(auto const &it : map.values()) {
|
760
|
-
debug_ast(it.first, ind + "first: ");
|
761
|
-
debug_ast(it.second, ind + "second: ");
|
779
|
+
debug_ast(&it.first, ind + "first: ");
|
780
|
+
debug_ast(&it.second, ind + "second: ");
|
762
781
|
}
|
763
782
|
if (ind == "") std::cerr << "#%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n";
|
764
783
|
}
|
765
784
|
|
766
|
-
typedef std::pair<
|
785
|
+
typedef std::pair<Complex_Selector_Obj, Compound_Selector_Obj> ExtensionPair;
|
767
786
|
typedef std::vector<ExtensionPair> SubsetMapEntries;
|
768
787
|
|
769
788
|
inline void debug_subset_entries(SubsetMapEntries* entries, std::string ind = "")
|
770
789
|
{
|
771
790
|
if (ind == "") std::cerr << "#%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n";
|
772
791
|
for(auto const &pair : *entries) {
|
773
|
-
debug_ast(pair.first, ind + "first: ");
|
774
|
-
debug_ast(pair.second, ind + "second: ");
|
792
|
+
debug_ast(&pair.first, ind + "first: ");
|
793
|
+
debug_ast(&pair.second, ind + "second: ");
|
775
794
|
}
|
776
795
|
if (ind == "") std::cerr << "#%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n";
|
777
796
|
}
|