sassc 2.0.1 → 2.1.0.pre1
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/.gitignore +1 -0
- data/.gitmodules +1 -1
- data/.travis.yml +7 -3
- data/CHANGELOG.md +3 -0
- data/CODE_OF_CONDUCT.md +1 -1
- data/README.md +1 -1
- data/Rakefile +23 -8
- data/ext/extconf.rb +39 -0
- data/ext/libsass/.gitignore +1 -0
- data/ext/libsass/GNUmakefile.am +23 -39
- data/ext/libsass/Makefile +56 -91
- data/ext/libsass/Makefile.conf +16 -2
- data/ext/libsass/configure.ac +8 -12
- data/ext/libsass/include/sass/base.h +1 -0
- data/ext/libsass/include/sass/context.h +1 -1
- data/ext/libsass/src/GNUmakefile.am +1 -5
- data/ext/libsass/src/ast.cpp +747 -2010
- data/ext/libsass/src/ast.hpp +239 -2383
- data/ext/libsass/src/{to_c.cpp → ast2c.cpp} +22 -16
- data/ext/libsass/src/ast2c.hpp +39 -0
- data/ext/libsass/src/ast_def_macros.hpp +62 -10
- data/ext/libsass/src/ast_fwd_decl.cpp +1 -0
- data/ext/libsass/src/ast_fwd_decl.hpp +43 -165
- data/ext/libsass/src/ast_sel_cmp.cpp +909 -0
- data/ext/libsass/src/ast_sel_unify.cpp +280 -0
- data/ext/libsass/src/ast_selectors.cpp +1475 -0
- data/ext/libsass/src/ast_selectors.hpp +568 -0
- data/ext/libsass/src/ast_supports.cpp +130 -0
- data/ext/libsass/src/ast_supports.hpp +121 -0
- data/ext/libsass/src/ast_values.cpp +967 -0
- data/ext/libsass/src/ast_values.hpp +489 -0
- data/ext/libsass/src/backtrace.cpp +4 -0
- data/ext/libsass/src/base64vlq.cpp +3 -0
- data/ext/libsass/src/bind.cpp +18 -17
- data/ext/libsass/src/bind.hpp +3 -1
- data/ext/libsass/src/c2ast.cpp +64 -0
- data/ext/libsass/src/c2ast.hpp +14 -0
- data/ext/libsass/src/cencode.c +2 -2
- data/ext/libsass/src/check_nesting.cpp +52 -56
- data/ext/libsass/src/check_nesting.hpp +35 -34
- data/ext/libsass/src/color_maps.cpp +156 -153
- data/ext/libsass/src/color_maps.hpp +152 -152
- data/ext/libsass/src/constants.cpp +15 -0
- data/ext/libsass/src/constants.hpp +13 -0
- data/ext/libsass/src/context.cpp +24 -14
- data/ext/libsass/src/context.hpp +6 -6
- data/ext/libsass/src/cssize.cpp +69 -71
- data/ext/libsass/src/cssize.hpp +50 -50
- data/ext/libsass/src/debugger.hpp +117 -110
- data/ext/libsass/src/emitter.cpp +13 -12
- data/ext/libsass/src/emitter.hpp +13 -9
- data/ext/libsass/src/environment.cpp +15 -1
- data/ext/libsass/src/environment.hpp +6 -0
- data/ext/libsass/src/error_handling.cpp +36 -59
- data/ext/libsass/src/error_handling.hpp +29 -16
- data/ext/libsass/src/eval.cpp +302 -323
- data/ext/libsass/src/eval.hpp +64 -55
- data/ext/libsass/src/expand.cpp +94 -88
- data/ext/libsass/src/expand.hpp +33 -37
- data/ext/libsass/src/extend.cpp +38 -36
- data/ext/libsass/src/extend.hpp +15 -15
- data/ext/libsass/src/file.cpp +34 -2
- data/ext/libsass/src/fn_colors.cpp +594 -0
- data/ext/libsass/src/fn_colors.hpp +85 -0
- data/ext/libsass/src/fn_lists.cpp +284 -0
- data/ext/libsass/src/fn_lists.hpp +34 -0
- data/ext/libsass/src/fn_maps.cpp +94 -0
- data/ext/libsass/src/fn_maps.hpp +30 -0
- data/ext/libsass/src/fn_miscs.cpp +256 -0
- data/ext/libsass/src/fn_miscs.hpp +40 -0
- data/ext/libsass/src/fn_numbers.cpp +220 -0
- data/ext/libsass/src/fn_numbers.hpp +45 -0
- data/ext/libsass/src/fn_selectors.cpp +235 -0
- data/ext/libsass/src/fn_selectors.hpp +35 -0
- data/ext/libsass/src/fn_strings.cpp +254 -0
- data/ext/libsass/src/fn_strings.hpp +34 -0
- data/ext/libsass/src/fn_utils.cpp +156 -0
- data/ext/libsass/src/fn_utils.hpp +56 -0
- data/ext/libsass/src/inspect.cpp +101 -152
- data/ext/libsass/src/inspect.hpp +69 -73
- data/ext/libsass/src/json.cpp +2 -2
- data/ext/libsass/src/lexer.cpp +6 -3
- data/ext/libsass/src/listize.cpp +9 -11
- data/ext/libsass/src/listize.hpp +11 -7
- data/ext/libsass/src/memory/SharedPtr.cpp +2 -83
- data/ext/libsass/src/memory/SharedPtr.hpp +127 -143
- data/ext/libsass/src/node.cpp +13 -10
- data/ext/libsass/src/node.hpp +3 -3
- data/ext/libsass/src/operation.hpp +184 -144
- data/ext/libsass/src/operators.cpp +43 -17
- data/ext/libsass/src/operators.hpp +5 -5
- data/ext/libsass/src/output.cpp +21 -18
- data/ext/libsass/src/output.hpp +14 -21
- data/ext/libsass/src/parser.cpp +215 -183
- data/ext/libsass/src/parser.hpp +28 -24
- data/ext/libsass/src/plugins.cpp +5 -1
- data/ext/libsass/src/position.cpp +3 -0
- data/ext/libsass/src/prelexer.cpp +9 -3
- data/ext/libsass/src/prelexer.hpp +9 -9
- data/ext/libsass/src/remove_placeholders.cpp +14 -11
- data/ext/libsass/src/remove_placeholders.hpp +8 -9
- data/ext/libsass/src/sass.cpp +9 -3
- data/ext/libsass/src/sass.hpp +12 -9
- data/ext/libsass/src/sass2scss.cpp +45 -14
- data/ext/libsass/src/sass_context.cpp +18 -15
- data/ext/libsass/src/sass_functions.cpp +6 -3
- data/ext/libsass/src/sass_functions.hpp +1 -1
- data/ext/libsass/src/sass_util.cpp +3 -0
- data/ext/libsass/src/sass_values.cpp +21 -13
- data/ext/libsass/src/source_map.cpp +5 -2
- data/ext/libsass/src/source_map.hpp +2 -2
- data/ext/libsass/src/subset_map.cpp +4 -1
- data/ext/libsass/src/to_value.cpp +23 -21
- data/ext/libsass/src/to_value.hpp +18 -22
- data/ext/libsass/src/units.cpp +4 -0
- data/ext/libsass/src/units.hpp +1 -0
- data/ext/libsass/src/utf8/checked.h +12 -10
- data/ext/libsass/src/utf8/core.h +3 -0
- data/ext/libsass/src/utf8_string.cpp +3 -0
- data/ext/libsass/src/util.cpp +67 -75
- data/ext/libsass/src/util.hpp +64 -19
- data/ext/libsass/src/util_string.cpp +75 -0
- data/ext/libsass/src/util_string.hpp +19 -0
- data/ext/libsass/src/values.cpp +22 -13
- data/ext/libsass/src/values.hpp +2 -2
- data/ext/libsass/win/libsass.targets +30 -4
- data/ext/libsass/win/libsass.vcxproj.filters +82 -4
- data/lib/sassc.rb +24 -0
- data/lib/sassc/engine.rb +2 -2
- data/lib/sassc/native.rb +8 -1
- data/lib/sassc/version.rb +1 -1
- data/sassc.gemspec +19 -11
- data/test/engine_test.rb +26 -1
- data/test/native_test.rb +1 -1
- metadata +66 -72
- data/ext/Rakefile +0 -3
- data/ext/libsass/.github/CONTRIBUTING.md +0 -65
- data/ext/libsass/.github/ISSUE_TEMPLATE.md +0 -54
- data/ext/libsass/.travis.yml +0 -64
- data/ext/libsass/Readme.md +0 -104
- data/ext/libsass/SECURITY.md +0 -10
- data/ext/libsass/appveyor.yml +0 -91
- data/ext/libsass/docs/README.md +0 -20
- data/ext/libsass/docs/api-context-example.md +0 -45
- data/ext/libsass/docs/api-context-internal.md +0 -163
- data/ext/libsass/docs/api-context.md +0 -295
- data/ext/libsass/docs/api-doc.md +0 -215
- data/ext/libsass/docs/api-function-example.md +0 -67
- data/ext/libsass/docs/api-function-internal.md +0 -8
- data/ext/libsass/docs/api-function.md +0 -74
- data/ext/libsass/docs/api-importer-example.md +0 -112
- data/ext/libsass/docs/api-importer-internal.md +0 -20
- data/ext/libsass/docs/api-importer.md +0 -86
- data/ext/libsass/docs/api-value-example.md +0 -55
- data/ext/libsass/docs/api-value-internal.md +0 -76
- data/ext/libsass/docs/api-value.md +0 -154
- data/ext/libsass/docs/build-on-darwin.md +0 -27
- data/ext/libsass/docs/build-on-gentoo.md +0 -55
- data/ext/libsass/docs/build-on-windows.md +0 -139
- data/ext/libsass/docs/build-shared-library.md +0 -35
- data/ext/libsass/docs/build-with-autotools.md +0 -78
- data/ext/libsass/docs/build-with-makefiles.md +0 -68
- data/ext/libsass/docs/build-with-mingw.md +0 -107
- data/ext/libsass/docs/build-with-visual-studio.md +0 -90
- data/ext/libsass/docs/build.md +0 -97
- data/ext/libsass/docs/compatibility-plan.md +0 -48
- data/ext/libsass/docs/contributing.md +0 -17
- data/ext/libsass/docs/custom-functions-internal.md +0 -122
- data/ext/libsass/docs/dev-ast-memory.md +0 -223
- data/ext/libsass/docs/implementations.md +0 -56
- data/ext/libsass/docs/plugins.md +0 -47
- data/ext/libsass/docs/setup-environment.md +0 -68
- data/ext/libsass/docs/source-map-internals.md +0 -51
- data/ext/libsass/docs/trace.md +0 -26
- data/ext/libsass/docs/triage.md +0 -17
- data/ext/libsass/docs/unicode.md +0 -39
- data/ext/libsass/extconf.rb +0 -6
- data/ext/libsass/script/bootstrap +0 -13
- data/ext/libsass/script/branding +0 -10
- data/ext/libsass/script/ci-build-libsass +0 -134
- data/ext/libsass/script/ci-build-plugin +0 -62
- data/ext/libsass/script/ci-install-compiler +0 -6
- data/ext/libsass/script/ci-install-deps +0 -20
- data/ext/libsass/script/ci-report-coverage +0 -42
- data/ext/libsass/script/spec +0 -5
- data/ext/libsass/script/tap-driver +0 -652
- data/ext/libsass/script/tap-runner +0 -1
- data/ext/libsass/script/test-leaks.pl +0 -103
- data/ext/libsass/src/functions.cpp +0 -2234
- data/ext/libsass/src/functions.hpp +0 -198
- data/ext/libsass/src/to_c.hpp +0 -39
- data/ext/libsass/test/test_node.cpp +0 -94
- data/ext/libsass/test/test_paths.cpp +0 -28
- data/ext/libsass/test/test_selector_difference.cpp +0 -25
- data/ext/libsass/test/test_specificity.cpp +0 -25
- data/ext/libsass/test/test_subset_map.cpp +0 -472
- data/ext/libsass/test/test_superselector.cpp +0 -69
- data/ext/libsass/test/test_unification.cpp +0 -31
- data/lib/tasks/libsass.rb +0 -33
data/ext/libsass/src/cssize.hpp
CHANGED
@@ -10,66 +10,66 @@ namespace Sass {
|
|
10
10
|
|
11
11
|
struct Backtrace;
|
12
12
|
|
13
|
-
class Cssize : public Operation_CRTP<
|
13
|
+
class Cssize : public Operation_CRTP<Statement*, Cssize> {
|
14
14
|
|
15
15
|
Context& ctx;
|
16
16
|
Backtraces& traces;
|
17
|
-
|
18
|
-
std::vector<
|
19
|
-
|
20
|
-
Statement_Ptr fallback_impl(AST_Node_Ptr n);
|
17
|
+
BlockStack block_stack;
|
18
|
+
std::vector<Statement*> p_stack;
|
21
19
|
|
22
20
|
public:
|
23
21
|
Cssize(Context&);
|
24
22
|
~Cssize() { }
|
25
23
|
|
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
|
-
std::vector<std::pair<bool, Block_Obj>> slice_by_bubble(
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
bool bubblable(
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
24
|
+
Selector_List* selector();
|
25
|
+
|
26
|
+
Block* operator()(Block*);
|
27
|
+
Statement* operator()(Ruleset*);
|
28
|
+
// Statement* operator()(Bubble*);
|
29
|
+
Statement* operator()(Media_Block*);
|
30
|
+
Statement* operator()(Supports_Block*);
|
31
|
+
Statement* operator()(At_Root_Block*);
|
32
|
+
Statement* operator()(Directive*);
|
33
|
+
Statement* operator()(Keyframe_Rule*);
|
34
|
+
Statement* operator()(Trace*);
|
35
|
+
Statement* operator()(Declaration*);
|
36
|
+
// Statement* operator()(Assignment*);
|
37
|
+
// Statement* operator()(Import*);
|
38
|
+
// Statement* operator()(Import_Stub*);
|
39
|
+
// Statement* operator()(Warning*);
|
40
|
+
// Statement* operator()(Error*);
|
41
|
+
// Statement* operator()(Comment*);
|
42
|
+
// Statement* operator()(If*);
|
43
|
+
// Statement* operator()(For*);
|
44
|
+
// Statement* operator()(Each*);
|
45
|
+
// Statement* operator()(While*);
|
46
|
+
// Statement* operator()(Return*);
|
47
|
+
// Statement* operator()(Extension*);
|
48
|
+
// Statement* operator()(Definition*);
|
49
|
+
// Statement* operator()(Mixin_Call*);
|
50
|
+
// Statement* operator()(Content*);
|
51
|
+
Statement* operator()(Null*);
|
52
|
+
|
53
|
+
Statement* parent();
|
54
|
+
std::vector<std::pair<bool, Block_Obj>> slice_by_bubble(Block*);
|
55
|
+
Statement* bubble(Directive*);
|
56
|
+
Statement* bubble(At_Root_Block*);
|
57
|
+
Statement* bubble(Media_Block*);
|
58
|
+
Statement* bubble(Supports_Block*);
|
59
|
+
|
60
|
+
Block* debubble(Block* children, Statement* parent = 0);
|
61
|
+
Block* flatten(Block*);
|
62
|
+
bool bubblable(Statement*);
|
63
|
+
|
64
|
+
List* merge_media_queries(Media_Block*, Media_Block*);
|
65
|
+
Media_Query* merge_media_query(Media_Query*, Media_Query*);
|
66
|
+
|
67
|
+
// generic fallback
|
69
68
|
template <typename U>
|
70
|
-
|
69
|
+
Statement* fallback(U x)
|
70
|
+
{ return Cast<Statement>(x); }
|
71
71
|
|
72
|
-
void append_block(
|
72
|
+
void append_block(Block*, Block*);
|
73
73
|
};
|
74
74
|
|
75
75
|
}
|
@@ -8,7 +8,7 @@
|
|
8
8
|
|
9
9
|
using namespace Sass;
|
10
10
|
|
11
|
-
inline void debug_ast(
|
11
|
+
inline void debug_ast(AST_Node* node, std::string ind = "", Env* env = 0);
|
12
12
|
|
13
13
|
inline void debug_ast(const AST_Node* node, std::string ind = "", Env* env = 0) {
|
14
14
|
debug_ast(const_cast<AST_Node*>(node), ind, env);
|
@@ -48,7 +48,7 @@ inline std::string longToHex(long long t) {
|
|
48
48
|
return is.str();
|
49
49
|
}
|
50
50
|
|
51
|
-
inline std::string pstate_source_position(
|
51
|
+
inline std::string pstate_source_position(AST_Node* node)
|
52
52
|
{
|
53
53
|
std::stringstream str;
|
54
54
|
Position start(node->pstate());
|
@@ -64,26 +64,26 @@ inline std::string pstate_source_position(AST_Node_Ptr node)
|
|
64
64
|
return str.str();
|
65
65
|
}
|
66
66
|
|
67
|
-
inline void debug_ast(
|
67
|
+
inline void debug_ast(AST_Node* node, std::string ind, Env* env)
|
68
68
|
{
|
69
69
|
if (node == 0) return;
|
70
70
|
if (ind == "") std::cerr << "####################################################################\n";
|
71
71
|
if (Cast<Bubble>(node)) {
|
72
|
-
|
72
|
+
Bubble* bubble = Cast<Bubble>(node);
|
73
73
|
std::cerr << ind << "Bubble " << bubble;
|
74
74
|
std::cerr << " (" << pstate_source_position(node) << ")";
|
75
75
|
std::cerr << " " << bubble->tabs();
|
76
76
|
std::cerr << std::endl;
|
77
77
|
debug_ast(bubble->node(), ind + " ", env);
|
78
78
|
} else if (Cast<Trace>(node)) {
|
79
|
-
|
79
|
+
Trace* trace = Cast<Trace>(node);
|
80
80
|
std::cerr << ind << "Trace " << trace;
|
81
81
|
std::cerr << " (" << pstate_source_position(node) << ")"
|
82
82
|
<< " [name:" << trace->name() << ", type: " << trace->type() << "]"
|
83
83
|
<< std::endl;
|
84
84
|
debug_ast(trace->block(), ind + " ", env);
|
85
85
|
} else if (Cast<At_Root_Block>(node)) {
|
86
|
-
|
86
|
+
At_Root_Block* root_block = Cast<At_Root_Block>(node);
|
87
87
|
std::cerr << ind << "At_Root_Block " << root_block;
|
88
88
|
std::cerr << " (" << pstate_source_position(node) << ")";
|
89
89
|
std::cerr << " " << root_block->tabs();
|
@@ -91,7 +91,7 @@ inline void debug_ast(AST_Node_Ptr node, std::string ind, Env* env)
|
|
91
91
|
debug_ast(root_block->expression(), ind + ":", env);
|
92
92
|
debug_ast(root_block->block(), ind + " ", env);
|
93
93
|
} else if (Cast<Selector_List>(node)) {
|
94
|
-
|
94
|
+
Selector_List* selector = Cast<Selector_List>(node);
|
95
95
|
std::cerr << ind << "Selector_List " << selector;
|
96
96
|
std::cerr << " (" << pstate_source_position(node) << ")";
|
97
97
|
std::cerr << " <" << selector->hash() << ">";
|
@@ -108,21 +108,30 @@ inline void debug_ast(AST_Node_Ptr node, std::string ind, Env* env)
|
|
108
108
|
for(const Complex_Selector_Obj& i : selector->elements()) { debug_ast(i, ind + " ", env); }
|
109
109
|
|
110
110
|
// } else if (Cast<Expression>(node)) {
|
111
|
-
//
|
111
|
+
// Expression* expression = Cast<Expression>(node);
|
112
112
|
// std::cerr << ind << "Expression " << expression << " " << expression->concrete_type() << std::endl;
|
113
113
|
|
114
|
+
} else if (Cast<Parent_Reference>(node)) {
|
115
|
+
Parent_Reference* selector = Cast<Parent_Reference>(node);
|
116
|
+
std::cerr << ind << "Parent_Reference " << selector;
|
117
|
+
// if (selector->not_selector()) cerr << " [in_declaration]";
|
118
|
+
std::cerr << " (" << pstate_source_position(node) << ")";
|
119
|
+
std::cerr << " <" << selector->hash() << ">";
|
120
|
+
std::cerr << " <" << prettyprint(selector->pstate().token.ws_before()) << ">" << std::endl;
|
121
|
+
// debug_ast(selector->selector(), ind + "->", env);
|
122
|
+
|
114
123
|
} else if (Cast<Parent_Selector>(node)) {
|
115
|
-
|
124
|
+
Parent_Selector* selector = Cast<Parent_Selector>(node);
|
116
125
|
std::cerr << ind << "Parent_Selector " << selector;
|
117
126
|
// if (selector->not_selector()) cerr << " [in_declaration]";
|
118
127
|
std::cerr << " (" << pstate_source_position(node) << ")";
|
119
128
|
std::cerr << " <" << selector->hash() << ">";
|
120
|
-
std::cerr << " [" << (selector->
|
129
|
+
std::cerr << " [" << (selector->real() ? "REAL" : "FAKE") << "]";
|
121
130
|
std::cerr << " <" << prettyprint(selector->pstate().token.ws_before()) << ">" << std::endl;
|
122
131
|
// debug_ast(selector->selector(), ind + "->", env);
|
123
132
|
|
124
133
|
} else if (Cast<Complex_Selector>(node)) {
|
125
|
-
|
134
|
+
Complex_Selector* selector = Cast<Complex_Selector>(node);
|
126
135
|
std::cerr << ind << "Complex_Selector " << selector
|
127
136
|
<< " (" << pstate_source_position(node) << ")"
|
128
137
|
<< " <" << selector->hash() << ">"
|
@@ -155,7 +164,7 @@ inline void debug_ast(AST_Node_Ptr node, std::string ind, Env* env)
|
|
155
164
|
ComplexSelectorSet set = selector->sources();
|
156
165
|
// debug_sources_set(set, ind + " @--> ");
|
157
166
|
} else if (Cast<Compound_Selector>(node)) {
|
158
|
-
|
167
|
+
Compound_Selector* selector = Cast<Compound_Selector>(node);
|
159
168
|
std::cerr << ind << "Compound_Selector " << selector;
|
160
169
|
std::cerr << " (" << pstate_source_position(node) << ")";
|
161
170
|
std::cerr << " <" << selector->hash() << ">";
|
@@ -169,7 +178,7 @@ inline void debug_ast(AST_Node_Ptr node, std::string ind, Env* env)
|
|
169
178
|
std::cerr << " <" << prettyprint(selector->pstate().token.ws_before()) << ">" << std::endl;
|
170
179
|
for(const Simple_Selector_Obj& i : selector->elements()) { debug_ast(i, ind + " ", env); }
|
171
180
|
} else if (Cast<Wrapped_Selector>(node)) {
|
172
|
-
|
181
|
+
Wrapped_Selector* selector = Cast<Wrapped_Selector>(node);
|
173
182
|
std::cerr << ind << "Wrapped_Selector " << selector;
|
174
183
|
std::cerr << " (" << pstate_source_position(node) << ")";
|
175
184
|
std::cerr << " <" << selector->hash() << ">";
|
@@ -181,7 +190,7 @@ inline void debug_ast(AST_Node_Ptr node, std::string ind, Env* env)
|
|
181
190
|
std::cerr << std::endl;
|
182
191
|
debug_ast(selector->selector(), ind + " () ", env);
|
183
192
|
} else if (Cast<Pseudo_Selector>(node)) {
|
184
|
-
|
193
|
+
Pseudo_Selector* selector = Cast<Pseudo_Selector>(node);
|
185
194
|
std::cerr << ind << "Pseudo_Selector " << selector;
|
186
195
|
std::cerr << " (" << pstate_source_position(node) << ")";
|
187
196
|
std::cerr << " <" << selector->hash() << ">";
|
@@ -193,7 +202,7 @@ inline void debug_ast(AST_Node_Ptr node, std::string ind, Env* env)
|
|
193
202
|
std::cerr << std::endl;
|
194
203
|
debug_ast(selector->expression(), ind + " <= ", env);
|
195
204
|
} else if (Cast<Attribute_Selector>(node)) {
|
196
|
-
|
205
|
+
Attribute_Selector* selector = Cast<Attribute_Selector>(node);
|
197
206
|
std::cerr << ind << "Attribute_Selector " << selector;
|
198
207
|
std::cerr << " (" << pstate_source_position(node) << ")";
|
199
208
|
std::cerr << " <" << selector->hash() << ">";
|
@@ -205,7 +214,7 @@ inline void debug_ast(AST_Node_Ptr node, std::string ind, Env* env)
|
|
205
214
|
std::cerr << std::endl;
|
206
215
|
debug_ast(selector->value(), ind + "[" + selector->matcher() + "] ", env);
|
207
216
|
} else if (Cast<Class_Selector>(node)) {
|
208
|
-
|
217
|
+
Class_Selector* selector = Cast<Class_Selector>(node);
|
209
218
|
std::cerr << ind << "Class_Selector " << selector;
|
210
219
|
std::cerr << " (" << pstate_source_position(node) << ")";
|
211
220
|
std::cerr << " <" << selector->hash() << ">";
|
@@ -216,7 +225,7 @@ inline void debug_ast(AST_Node_Ptr node, std::string ind, Env* env)
|
|
216
225
|
std::cerr << (selector->has_line_feed() ? " [line-feed]": " -");
|
217
226
|
std::cerr << std::endl;
|
218
227
|
} else if (Cast<Id_Selector>(node)) {
|
219
|
-
|
228
|
+
Id_Selector* selector = Cast<Id_Selector>(node);
|
220
229
|
std::cerr << ind << "Id_Selector " << selector;
|
221
230
|
std::cerr << " (" << pstate_source_position(node) << ")";
|
222
231
|
std::cerr << " <" << selector->hash() << ">";
|
@@ -226,9 +235,9 @@ inline void debug_ast(AST_Node_Ptr node, std::string ind, Env* env)
|
|
226
235
|
std::cerr << (selector->has_line_break() ? " [line-break]": " -");
|
227
236
|
std::cerr << (selector->has_line_feed() ? " [line-feed]": " -");
|
228
237
|
std::cerr << std::endl;
|
229
|
-
} else if (Cast<
|
230
|
-
|
231
|
-
std::cerr << ind << "
|
238
|
+
} else if (Cast<Type_Selector>(node)) {
|
239
|
+
Type_Selector* selector = Cast<Type_Selector>(node);
|
240
|
+
std::cerr << ind << "Type_Selector " << selector;
|
232
241
|
std::cerr << " (" << pstate_source_position(node) << ")";
|
233
242
|
std::cerr << " <" << selector->hash() << ">";
|
234
243
|
std::cerr << " <<" << selector->ns_name() << ">>";
|
@@ -240,7 +249,7 @@ inline void debug_ast(AST_Node_Ptr node, std::string ind, Env* env)
|
|
240
249
|
std::cerr << std::endl;
|
241
250
|
} else if (Cast<Placeholder_Selector>(node)) {
|
242
251
|
|
243
|
-
|
252
|
+
Placeholder_Selector* selector = Cast<Placeholder_Selector>(node);
|
244
253
|
std::cerr << ind << "Placeholder_Selector [" << selector->ns_name() << "] " << selector;
|
245
254
|
std::cerr << " (" << pstate_source_position(selector) << ")"
|
246
255
|
<< " <" << selector->hash() << ">"
|
@@ -257,7 +266,7 @@ inline void debug_ast(AST_Node_Ptr node, std::string ind, Env* env)
|
|
257
266
|
std::cerr << (selector->has_line_break() ? " [line-break]": " -") << (selector->has_line_feed() ? " [line-feed]": " -") << std::endl;
|
258
267
|
|
259
268
|
} else if (Cast<Selector_Schema>(node)) {
|
260
|
-
|
269
|
+
Selector_Schema* selector = Cast<Selector_Schema>(node);
|
261
270
|
std::cerr << ind << "Selector_Schema " << selector;
|
262
271
|
std::cerr << " (" << pstate_source_position(node) << ")"
|
263
272
|
<< " [@media:" << selector->media_block() << "]"
|
@@ -268,7 +277,7 @@ inline void debug_ast(AST_Node_Ptr node, std::string ind, Env* env)
|
|
268
277
|
// for(auto i : selector->elements()) { debug_ast(i, ind + " ", env); }
|
269
278
|
|
270
279
|
} else if (Cast<Selector>(node)) {
|
271
|
-
|
280
|
+
Selector* selector = Cast<Selector>(node);
|
272
281
|
std::cerr << ind << "Selector " << selector;
|
273
282
|
std::cerr << " (" << pstate_source_position(node) << ")";
|
274
283
|
std::cerr << (selector->has_line_break() ? " [line-break]": " -")
|
@@ -276,7 +285,7 @@ inline void debug_ast(AST_Node_Ptr node, std::string ind, Env* env)
|
|
276
285
|
<< std::endl;
|
277
286
|
|
278
287
|
} else if (Cast<Media_Query_Expression>(node)) {
|
279
|
-
|
288
|
+
Media_Query_Expression* block = Cast<Media_Query_Expression>(node);
|
280
289
|
std::cerr << ind << "Media_Query_Expression " << block;
|
281
290
|
std::cerr << " (" << pstate_source_position(node) << ")";
|
282
291
|
std::cerr << (block->is_interpolated() ? " [is_interpolated]": " -")
|
@@ -285,7 +294,7 @@ inline void debug_ast(AST_Node_Ptr node, std::string ind, Env* env)
|
|
285
294
|
debug_ast(block->value(), ind + " value) ");
|
286
295
|
|
287
296
|
} else if (Cast<Media_Query>(node)) {
|
288
|
-
|
297
|
+
Media_Query* block = Cast<Media_Query>(node);
|
289
298
|
std::cerr << ind << "Media_Query " << block;
|
290
299
|
std::cerr << " (" << pstate_source_position(node) << ")";
|
291
300
|
std::cerr << (block->is_negated() ? " [is_negated]": " -")
|
@@ -295,79 +304,79 @@ inline void debug_ast(AST_Node_Ptr node, std::string ind, Env* env)
|
|
295
304
|
for(const auto& i : block->elements()) { debug_ast(i, ind + " ", env); }
|
296
305
|
|
297
306
|
} else if (Cast<Media_Block>(node)) {
|
298
|
-
|
307
|
+
Media_Block* block = Cast<Media_Block>(node);
|
299
308
|
std::cerr << ind << "Media_Block " << block;
|
300
309
|
std::cerr << " (" << pstate_source_position(node) << ")";
|
301
310
|
std::cerr << " " << block->tabs() << std::endl;
|
302
311
|
debug_ast(block->media_queries(), ind + " =@ ");
|
303
312
|
if (block->block()) for(const Statement_Obj& i : block->block()->elements()) { debug_ast(i, ind + " ", env); }
|
304
313
|
} else if (Cast<Supports_Block>(node)) {
|
305
|
-
|
314
|
+
Supports_Block* block = Cast<Supports_Block>(node);
|
306
315
|
std::cerr << ind << "Supports_Block " << block;
|
307
316
|
std::cerr << " (" << pstate_source_position(node) << ")";
|
308
317
|
std::cerr << " " << block->tabs() << std::endl;
|
309
318
|
debug_ast(block->condition(), ind + " =@ ");
|
310
319
|
debug_ast(block->block(), ind + " <>");
|
311
320
|
} else if (Cast<Supports_Operator>(node)) {
|
312
|
-
|
321
|
+
Supports_Operator* block = Cast<Supports_Operator>(node);
|
313
322
|
std::cerr << ind << "Supports_Operator " << block;
|
314
323
|
std::cerr << " (" << pstate_source_position(node) << ")"
|
315
324
|
<< std::endl;
|
316
325
|
debug_ast(block->left(), ind + " left) ");
|
317
326
|
debug_ast(block->right(), ind + " right) ");
|
318
327
|
} else if (Cast<Supports_Negation>(node)) {
|
319
|
-
|
328
|
+
Supports_Negation* block = Cast<Supports_Negation>(node);
|
320
329
|
std::cerr << ind << "Supports_Negation " << block;
|
321
330
|
std::cerr << " (" << pstate_source_position(node) << ")"
|
322
331
|
<< std::endl;
|
323
332
|
debug_ast(block->condition(), ind + " condition) ");
|
324
333
|
} else if (Cast<At_Root_Query>(node)) {
|
325
|
-
|
334
|
+
At_Root_Query* block = Cast<At_Root_Query>(node);
|
326
335
|
std::cerr << ind << "At_Root_Query " << block;
|
327
336
|
std::cerr << " (" << pstate_source_position(node) << ")"
|
328
337
|
<< std::endl;
|
329
338
|
debug_ast(block->feature(), ind + " feature) ");
|
330
339
|
debug_ast(block->value(), ind + " value) ");
|
331
340
|
} else if (Cast<Supports_Declaration>(node)) {
|
332
|
-
|
341
|
+
Supports_Declaration* block = Cast<Supports_Declaration>(node);
|
333
342
|
std::cerr << ind << "Supports_Declaration " << block;
|
334
343
|
std::cerr << " (" << pstate_source_position(node) << ")"
|
335
344
|
<< std::endl;
|
336
345
|
debug_ast(block->feature(), ind + " feature) ");
|
337
346
|
debug_ast(block->value(), ind + " value) ");
|
338
347
|
} else if (Cast<Block>(node)) {
|
339
|
-
|
348
|
+
Block* root_block = Cast<Block>(node);
|
340
349
|
std::cerr << ind << "Block " << root_block;
|
341
350
|
std::cerr << " (" << pstate_source_position(node) << ")";
|
342
351
|
if (root_block->is_root()) std::cerr << " [root]";
|
343
352
|
std::cerr << " " << root_block->tabs() << std::endl;
|
344
353
|
for(const Statement_Obj& i : root_block->elements()) { debug_ast(i, ind + " ", env); }
|
345
354
|
} else if (Cast<Warning>(node)) {
|
346
|
-
|
355
|
+
Warning* block = Cast<Warning>(node);
|
347
356
|
std::cerr << ind << "Warning " << block;
|
348
357
|
std::cerr << " (" << pstate_source_position(node) << ")";
|
349
358
|
std::cerr << " " << block->tabs() << std::endl;
|
350
359
|
debug_ast(block->message(), ind + " : ");
|
351
360
|
} else if (Cast<Error>(node)) {
|
352
|
-
|
361
|
+
Error* block = Cast<Error>(node);
|
353
362
|
std::cerr << ind << "Error " << block;
|
354
363
|
std::cerr << " (" << pstate_source_position(node) << ")";
|
355
364
|
std::cerr << " " << block->tabs() << std::endl;
|
356
365
|
} else if (Cast<Debug>(node)) {
|
357
|
-
|
366
|
+
Debug* block = Cast<Debug>(node);
|
358
367
|
std::cerr << ind << "Debug " << block;
|
359
368
|
std::cerr << " (" << pstate_source_position(node) << ")";
|
360
369
|
std::cerr << " " << block->tabs() << std::endl;
|
361
370
|
debug_ast(block->value(), ind + " ");
|
362
371
|
} else if (Cast<Comment>(node)) {
|
363
|
-
|
372
|
+
Comment* block = Cast<Comment>(node);
|
364
373
|
std::cerr << ind << "Comment " << block;
|
365
374
|
std::cerr << " (" << pstate_source_position(node) << ")";
|
366
375
|
std::cerr << " " << block->tabs() <<
|
367
376
|
" <" << prettyprint(block->pstate().token.ws_before()) << ">" << std::endl;
|
368
377
|
debug_ast(block->text(), ind + "// ", env);
|
369
378
|
} else if (Cast<If>(node)) {
|
370
|
-
|
379
|
+
If* block = Cast<If>(node);
|
371
380
|
std::cerr << ind << "If " << block;
|
372
381
|
std::cerr << " (" << pstate_source_position(node) << ")";
|
373
382
|
std::cerr << " " << block->tabs() << std::endl;
|
@@ -375,30 +384,30 @@ inline void debug_ast(AST_Node_Ptr node, std::string ind, Env* env)
|
|
375
384
|
debug_ast(block->block(), ind + " <>");
|
376
385
|
debug_ast(block->alternative(), ind + " ><");
|
377
386
|
} else if (Cast<Return>(node)) {
|
378
|
-
|
387
|
+
Return* block = Cast<Return>(node);
|
379
388
|
std::cerr << ind << "Return " << block;
|
380
389
|
std::cerr << " (" << pstate_source_position(node) << ")";
|
381
390
|
std::cerr << " " << block->tabs() << std::endl;
|
382
391
|
} else if (Cast<Extension>(node)) {
|
383
|
-
|
392
|
+
Extension* block = Cast<Extension>(node);
|
384
393
|
std::cerr << ind << "Extension " << block;
|
385
394
|
std::cerr << " (" << pstate_source_position(node) << ")";
|
386
395
|
std::cerr << " " << block->tabs() << std::endl;
|
387
396
|
debug_ast(block->selector(), ind + "-> ", env);
|
388
397
|
} else if (Cast<Content>(node)) {
|
389
|
-
|
398
|
+
Content* block = Cast<Content>(node);
|
390
399
|
std::cerr << ind << "Content " << block;
|
391
400
|
std::cerr << " (" << pstate_source_position(node) << ")";
|
392
|
-
std::cerr << " [@media:" << block->media_block() << "]";
|
393
401
|
std::cerr << " " << block->tabs() << std::endl;
|
402
|
+
debug_ast(block->arguments(), ind + " args: ", env);
|
394
403
|
} else if (Cast<Import_Stub>(node)) {
|
395
|
-
|
404
|
+
Import_Stub* block = Cast<Import_Stub>(node);
|
396
405
|
std::cerr << ind << "Import_Stub " << block;
|
397
406
|
std::cerr << " (" << pstate_source_position(node) << ")";
|
398
407
|
std::cerr << " [" << block->imp_path() << "] ";
|
399
408
|
std::cerr << " " << block->tabs() << std::endl;
|
400
409
|
} else if (Cast<Import>(node)) {
|
401
|
-
|
410
|
+
Import* block = Cast<Import>(node);
|
402
411
|
std::cerr << ind << "Import " << block;
|
403
412
|
std::cerr << " (" << pstate_source_position(node) << ")";
|
404
413
|
std::cerr << " " << block->tabs() << std::endl;
|
@@ -406,13 +415,13 @@ inline void debug_ast(AST_Node_Ptr node, std::string ind, Env* env)
|
|
406
415
|
for (auto imp : block->urls()) debug_ast(imp, ind + "@: ", env);
|
407
416
|
debug_ast(block->import_queries(), ind + "@@ ");
|
408
417
|
} else if (Cast<Assignment>(node)) {
|
409
|
-
|
418
|
+
Assignment* block = Cast<Assignment>(node);
|
410
419
|
std::cerr << ind << "Assignment " << block;
|
411
420
|
std::cerr << " (" << pstate_source_position(node) << ")";
|
412
421
|
std::cerr << " <<" << block->variable() << ">> " << block->tabs() << std::endl;
|
413
422
|
debug_ast(block->value(), ind + "=", env);
|
414
423
|
} else if (Cast<Declaration>(node)) {
|
415
|
-
|
424
|
+
Declaration* block = Cast<Declaration>(node);
|
416
425
|
std::cerr << ind << "Declaration " << block;
|
417
426
|
std::cerr << " (" << pstate_source_position(node) << ")";
|
418
427
|
std::cerr << " [is_custom_property: " << block->is_custom_property() << "] ";
|
@@ -421,14 +430,14 @@ inline void debug_ast(AST_Node_Ptr node, std::string ind, Env* env)
|
|
421
430
|
debug_ast(block->value(), ind + " value: ", env);
|
422
431
|
debug_ast(block->block(), ind + " ", env);
|
423
432
|
} else if (Cast<Keyframe_Rule>(node)) {
|
424
|
-
|
433
|
+
Keyframe_Rule* has_block = Cast<Keyframe_Rule>(node);
|
425
434
|
std::cerr << ind << "Keyframe_Rule " << has_block;
|
426
435
|
std::cerr << " (" << pstate_source_position(node) << ")";
|
427
436
|
std::cerr << " " << has_block->tabs() << std::endl;
|
428
437
|
if (has_block->name()) debug_ast(has_block->name(), ind + "@");
|
429
438
|
if (has_block->block()) for(const Statement_Obj& i : has_block->block()->elements()) { debug_ast(i, ind + " ", env); }
|
430
439
|
} else if (Cast<Directive>(node)) {
|
431
|
-
|
440
|
+
Directive* block = Cast<Directive>(node);
|
432
441
|
std::cerr << ind << "Directive " << block;
|
433
442
|
std::cerr << " (" << pstate_source_position(node) << ")";
|
434
443
|
std::cerr << " [" << block->keyword() << "] " << block->tabs() << std::endl;
|
@@ -436,25 +445,25 @@ inline void debug_ast(AST_Node_Ptr node, std::string ind, Env* env)
|
|
436
445
|
debug_ast(block->value(), ind + "+", env);
|
437
446
|
if (block->block()) for(const Statement_Obj& i : block->block()->elements()) { debug_ast(i, ind + " ", env); }
|
438
447
|
} else if (Cast<Each>(node)) {
|
439
|
-
|
448
|
+
Each* block = Cast<Each>(node);
|
440
449
|
std::cerr << ind << "Each " << block;
|
441
450
|
std::cerr << " (" << pstate_source_position(node) << ")";
|
442
451
|
std::cerr << " " << block->tabs() << std::endl;
|
443
452
|
if (block->block()) for(const Statement_Obj& i : block->block()->elements()) { debug_ast(i, ind + " ", env); }
|
444
453
|
} else if (Cast<For>(node)) {
|
445
|
-
|
454
|
+
For* block = Cast<For>(node);
|
446
455
|
std::cerr << ind << "For " << block;
|
447
456
|
std::cerr << " (" << pstate_source_position(node) << ")";
|
448
457
|
std::cerr << " " << block->tabs() << std::endl;
|
449
458
|
if (block->block()) for(const Statement_Obj& i : block->block()->elements()) { debug_ast(i, ind + " ", env); }
|
450
459
|
} else if (Cast<While>(node)) {
|
451
|
-
|
460
|
+
While* block = Cast<While>(node);
|
452
461
|
std::cerr << ind << "While " << block;
|
453
462
|
std::cerr << " (" << pstate_source_position(node) << ")";
|
454
463
|
std::cerr << " " << block->tabs() << std::endl;
|
455
464
|
if (block->block()) for(const Statement_Obj& i : block->block()->elements()) { debug_ast(i, ind + " ", env); }
|
456
465
|
} else if (Cast<Definition>(node)) {
|
457
|
-
|
466
|
+
Definition* block = Cast<Definition>(node);
|
458
467
|
std::cerr << ind << "Definition " << block;
|
459
468
|
std::cerr << " (" << pstate_source_position(node) << ")";
|
460
469
|
std::cerr << " [name: " << block->name() << "] ";
|
@@ -466,14 +475,15 @@ inline void debug_ast(AST_Node_Ptr node, std::string ind, Env* env)
|
|
466
475
|
debug_ast(block->parameters(), ind + " params: ", env);
|
467
476
|
if (block->block()) debug_ast(block->block(), ind + " ", env);
|
468
477
|
} else if (Cast<Mixin_Call>(node)) {
|
469
|
-
|
478
|
+
Mixin_Call* block = Cast<Mixin_Call>(node);
|
470
479
|
std::cerr << ind << "Mixin_Call " << block << " " << block->tabs();
|
471
480
|
std::cerr << " (" << pstate_source_position(block) << ")";
|
472
481
|
std::cerr << " [" << block->name() << "]";
|
473
482
|
std::cerr << " [has_content: " << block->has_content() << "] " << std::endl;
|
474
|
-
debug_ast(block->arguments(), ind + " args: ");
|
483
|
+
debug_ast(block->arguments(), ind + " args: ", env);
|
484
|
+
debug_ast(block->block_parameters(), ind + " block_params: ", env);
|
475
485
|
if (block->block()) debug_ast(block->block(), ind + " ", env);
|
476
|
-
} else if (
|
486
|
+
} else if (Ruleset* ruleset = Cast<Ruleset>(node)) {
|
477
487
|
std::cerr << ind << "Ruleset " << ruleset;
|
478
488
|
std::cerr << " (" << pstate_source_position(node) << ")";
|
479
489
|
std::cerr << " [indent: " << ruleset->tabs() << "]";
|
@@ -483,30 +493,22 @@ inline void debug_ast(AST_Node_Ptr node, std::string ind, Env* env)
|
|
483
493
|
debug_ast(ruleset->selector(), ind + ">");
|
484
494
|
debug_ast(ruleset->block(), ind + " ");
|
485
495
|
} else if (Cast<Block>(node)) {
|
486
|
-
|
496
|
+
Block* block = Cast<Block>(node);
|
487
497
|
std::cerr << ind << "Block " << block;
|
488
498
|
std::cerr << " (" << pstate_source_position(node) << ")";
|
489
499
|
std::cerr << (block->is_invisible() ? " [INVISIBLE]" : "");
|
490
500
|
std::cerr << " [indent: " << block->tabs() << "]" << std::endl;
|
491
501
|
for(const Statement_Obj& i : block->elements()) { debug_ast(i, ind + " ", env); }
|
492
502
|
} else if (Cast<Variable>(node)) {
|
493
|
-
|
503
|
+
Variable* expression = Cast<Variable>(node);
|
494
504
|
std::cerr << ind << "Variable " << expression;
|
495
505
|
std::cerr << " [interpolant: " << expression->is_interpolant() << "] ";
|
496
506
|
std::cerr << " (" << pstate_source_position(node) << ")";
|
497
507
|
std::cerr << " [" << expression->name() << "]" << std::endl;
|
498
508
|
std::string name(expression->name());
|
499
509
|
if (env && env->has(name)) debug_ast(Cast<Expression>((*env)[name]), ind + " -> ", env);
|
500
|
-
} else if (Cast<Function_Call_Schema>(node)) {
|
501
|
-
Function_Call_Schema_Ptr expression = Cast<Function_Call_Schema>(node);
|
502
|
-
std::cerr << ind << "Function_Call_Schema " << expression;
|
503
|
-
std::cerr << " [interpolant: " << expression->is_interpolant() << "] ";
|
504
|
-
std::cerr << " (" << pstate_source_position(node) << ")";
|
505
|
-
std::cerr << "" << std::endl;
|
506
|
-
debug_ast(expression->name(), ind + "name: ", env);
|
507
|
-
debug_ast(expression->arguments(), ind + " args: ", env);
|
508
510
|
} else if (Cast<Function_Call>(node)) {
|
509
|
-
|
511
|
+
Function_Call* expression = Cast<Function_Call>(node);
|
510
512
|
std::cerr << ind << "Function_Call " << expression;
|
511
513
|
std::cerr << " [interpolant: " << expression->is_interpolant() << "] ";
|
512
514
|
std::cerr << " (" << pstate_source_position(node) << ")";
|
@@ -518,14 +520,14 @@ inline void debug_ast(AST_Node_Ptr node, std::string ind, Env* env)
|
|
518
520
|
debug_ast(expression->arguments(), ind + " args: ", env);
|
519
521
|
debug_ast(expression->func(), ind + " func: ", env);
|
520
522
|
} else if (Cast<Function>(node)) {
|
521
|
-
|
523
|
+
Function* expression = Cast<Function>(node);
|
522
524
|
std::cerr << ind << "Function " << expression;
|
523
525
|
std::cerr << " (" << pstate_source_position(node) << ")";
|
524
526
|
if (expression->is_css()) std::cerr << " [css]";
|
525
527
|
std::cerr << std::endl;
|
526
528
|
debug_ast(expression->definition(), ind + " definition: ", env);
|
527
529
|
} else if (Cast<Arguments>(node)) {
|
528
|
-
|
530
|
+
Arguments* expression = Cast<Arguments>(node);
|
529
531
|
std::cerr << ind << "Arguments " << expression;
|
530
532
|
if (expression->is_delayed()) std::cerr << " [delayed]";
|
531
533
|
std::cerr << " (" << pstate_source_position(node) << ")";
|
@@ -535,7 +537,7 @@ inline void debug_ast(AST_Node_Ptr node, std::string ind, Env* env)
|
|
535
537
|
std::cerr << std::endl;
|
536
538
|
for(const Argument_Obj& i : expression->elements()) { debug_ast(i, ind + " ", env); }
|
537
539
|
} else if (Cast<Argument>(node)) {
|
538
|
-
|
540
|
+
Argument* expression = Cast<Argument>(node);
|
539
541
|
std::cerr << ind << "Argument " << expression;
|
540
542
|
std::cerr << " (" << pstate_source_position(node) << ")";
|
541
543
|
std::cerr << " [" << expression->value().ptr() << "]";
|
@@ -544,7 +546,7 @@ inline void debug_ast(AST_Node_Ptr node, std::string ind, Env* env)
|
|
544
546
|
std::cerr << " [keyword: " << expression->is_keyword_argument() << "] " << std::endl;
|
545
547
|
debug_ast(expression->value(), ind + " value: ", env);
|
546
548
|
} else if (Cast<Parameters>(node)) {
|
547
|
-
|
549
|
+
Parameters* expression = Cast<Parameters>(node);
|
548
550
|
std::cerr << ind << "Parameters " << expression;
|
549
551
|
std::cerr << " (" << pstate_source_position(node) << ")";
|
550
552
|
std::cerr << " [has_optional: " << expression->has_optional_parameters() << "] ";
|
@@ -552,14 +554,14 @@ inline void debug_ast(AST_Node_Ptr node, std::string ind, Env* env)
|
|
552
554
|
std::cerr << std::endl;
|
553
555
|
for(const Parameter_Obj& i : expression->elements()) { debug_ast(i, ind + " ", env); }
|
554
556
|
} else if (Cast<Parameter>(node)) {
|
555
|
-
|
557
|
+
Parameter* expression = Cast<Parameter>(node);
|
556
558
|
std::cerr << ind << "Parameter " << expression;
|
557
559
|
std::cerr << " (" << pstate_source_position(node) << ")";
|
558
560
|
std::cerr << " [name: " << expression->name() << "] ";
|
559
561
|
std::cerr << " [default: " << expression->default_value().ptr() << "] ";
|
560
562
|
std::cerr << " [rest: " << expression->is_rest_parameter() << "] " << std::endl;
|
561
563
|
} else if (Cast<Unary_Expression>(node)) {
|
562
|
-
|
564
|
+
Unary_Expression* expression = Cast<Unary_Expression>(node);
|
563
565
|
std::cerr << ind << "Unary_Expression " << expression;
|
564
566
|
std::cerr << " [interpolant: " << expression->is_interpolant() << "] ";
|
565
567
|
std::cerr << " [delayed: " << expression->is_delayed() << "] ";
|
@@ -567,7 +569,7 @@ inline void debug_ast(AST_Node_Ptr node, std::string ind, Env* env)
|
|
567
569
|
std::cerr << " [" << expression->type() << "]" << std::endl;
|
568
570
|
debug_ast(expression->operand(), ind + " operand: ", env);
|
569
571
|
} else if (Cast<Binary_Expression>(node)) {
|
570
|
-
|
572
|
+
Binary_Expression* expression = Cast<Binary_Expression>(node);
|
571
573
|
std::cerr << ind << "Binary_Expression " << expression;
|
572
574
|
if (expression->is_interpolant()) std::cerr << " [is interpolant] ";
|
573
575
|
if (expression->is_left_interpolant()) std::cerr << " [left interpolant] ";
|
@@ -580,7 +582,7 @@ inline void debug_ast(AST_Node_Ptr node, std::string ind, Env* env)
|
|
580
582
|
debug_ast(expression->left(), ind + " left: ", env);
|
581
583
|
debug_ast(expression->right(), ind + " right: ", env);
|
582
584
|
} else if (Cast<Map>(node)) {
|
583
|
-
|
585
|
+
Map* expression = Cast<Map>(node);
|
584
586
|
std::cerr << ind << "Map " << expression;
|
585
587
|
std::cerr << " [interpolant: " << expression->is_interpolant() << "] ";
|
586
588
|
std::cerr << " (" << pstate_source_position(node) << ")";
|
@@ -590,7 +592,7 @@ inline void debug_ast(AST_Node_Ptr node, std::string ind, Env* env)
|
|
590
592
|
debug_ast(i.second, ind + " val: ");
|
591
593
|
}
|
592
594
|
} else if (Cast<List>(node)) {
|
593
|
-
|
595
|
+
List* expression = Cast<List>(node);
|
594
596
|
std::cerr << ind << "List " << expression;
|
595
597
|
std::cerr << " (" << pstate_source_position(node) << ")";
|
596
598
|
std::cerr << " (" << expression->length() << ") " <<
|
@@ -604,42 +606,46 @@ inline void debug_ast(AST_Node_Ptr node, std::string ind, Env* env)
|
|
604
606
|
" [hash: " << expression->hash() << "] " <<
|
605
607
|
std::endl;
|
606
608
|
for(const auto& i : expression->elements()) { debug_ast(i, ind + " ", env); }
|
607
|
-
} else if (Cast<Content>(node)) {
|
608
|
-
Content_Ptr expression = Cast<Content>(node);
|
609
|
-
std::cerr << ind << "Content " << expression;
|
610
|
-
std::cerr << " (" << pstate_source_position(node) << ")";
|
611
|
-
std::cerr << " [@media:" << expression->media_block() << "]";
|
612
|
-
std::cerr << " [Statement]" << std::endl;
|
613
609
|
} else if (Cast<Boolean>(node)) {
|
614
|
-
|
610
|
+
Boolean* expression = Cast<Boolean>(node);
|
615
611
|
std::cerr << ind << "Boolean " << expression;
|
616
612
|
std::cerr << " (" << pstate_source_position(node) << ")";
|
617
613
|
std::cerr << " [interpolant: " << expression->is_interpolant() << "] ";
|
618
614
|
std::cerr << " [" << expression->value() << "]" << std::endl;
|
619
|
-
} else if (Cast<
|
620
|
-
|
615
|
+
} else if (Cast<Color_RGBA>(node)) {
|
616
|
+
Color_RGBA* expression = Cast<Color_RGBA>(node);
|
617
|
+
std::cerr << ind << "Color " << expression;
|
618
|
+
std::cerr << " (" << pstate_source_position(node) << ")";
|
619
|
+
std::cerr << " [name: " << expression->disp() << "] ";
|
620
|
+
std::cerr << " [delayed: " << expression->is_delayed() << "] ";
|
621
|
+
std::cerr << " [interpolant: " << expression->is_interpolant() << "] ";
|
622
|
+
std::cerr << " rgba[" << expression->r() << ":" << expression->g() << ":" << expression->b() << "@" << expression->a() << "]" << std::endl;
|
623
|
+
} else if (Cast<Color_HSLA>(node)) {
|
624
|
+
Color_HSLA* expression = Cast<Color_HSLA>(node);
|
621
625
|
std::cerr << ind << "Color " << expression;
|
622
626
|
std::cerr << " (" << pstate_source_position(node) << ")";
|
627
|
+
std::cerr << " [name: " << expression->disp() << "] ";
|
623
628
|
std::cerr << " [delayed: " << expression->is_delayed() << "] ";
|
624
629
|
std::cerr << " [interpolant: " << expression->is_interpolant() << "] ";
|
625
|
-
std::cerr << " [" << expression->
|
630
|
+
std::cerr << " hsla[" << expression->h() << ":" << expression->s() << ":" << expression->l() << "@" << expression->a() << "]" << std::endl;
|
626
631
|
} else if (Cast<Number>(node)) {
|
627
|
-
|
632
|
+
Number* expression = Cast<Number>(node);
|
628
633
|
std::cerr << ind << "Number " << expression;
|
629
634
|
std::cerr << " (" << pstate_source_position(node) << ")";
|
635
|
+
std::cerr << " [delayed: " << expression->is_delayed() << "] ";
|
630
636
|
std::cerr << " [interpolant: " << expression->is_interpolant() << "] ";
|
631
637
|
std::cerr << " [" << expression->value() << expression->unit() << "]" <<
|
632
638
|
" [hash: " << expression->hash() << "] " <<
|
633
639
|
std::endl;
|
634
640
|
} else if (Cast<Null>(node)) {
|
635
|
-
|
641
|
+
Null* expression = Cast<Null>(node);
|
636
642
|
std::cerr << ind << "Null " << expression;
|
637
643
|
std::cerr << " (" << pstate_source_position(node) << ")";
|
638
644
|
std::cerr << " [interpolant: " << expression->is_interpolant() << "] "
|
639
645
|
// " [hash: " << expression->hash() << "] "
|
640
646
|
<< std::endl;
|
641
647
|
} else if (Cast<String_Quoted>(node)) {
|
642
|
-
|
648
|
+
String_Quoted* expression = Cast<String_Quoted>(node);
|
643
649
|
std::cerr << ind << "String_Quoted " << expression;
|
644
650
|
std::cerr << " (" << pstate_source_position(node) << ")";
|
645
651
|
std::cerr << " [" << prettyprint(expression->value()) << "]";
|
@@ -648,7 +654,7 @@ inline void debug_ast(AST_Node_Ptr node, std::string ind, Env* env)
|
|
648
654
|
if (expression->quote_mark()) std::cerr << " [quote_mark: " << expression->quote_mark() << "]";
|
649
655
|
std::cerr << " <" << prettyprint(expression->pstate().token.ws_before()) << ">" << std::endl;
|
650
656
|
} else if (Cast<String_Constant>(node)) {
|
651
|
-
|
657
|
+
String_Constant* expression = Cast<String_Constant>(node);
|
652
658
|
std::cerr << ind << "String_Constant " << expression;
|
653
659
|
if (expression->concrete_type()) {
|
654
660
|
std::cerr << " " << expression->concrete_type();
|
@@ -659,7 +665,7 @@ inline void debug_ast(AST_Node_Ptr node, std::string ind, Env* env)
|
|
659
665
|
if (expression->is_interpolant()) std::cerr << " [interpolant]";
|
660
666
|
std::cerr << " <" << prettyprint(expression->pstate().token.ws_before()) << ">" << std::endl;
|
661
667
|
} else if (Cast<String_Schema>(node)) {
|
662
|
-
|
668
|
+
String_Schema* expression = Cast<String_Schema>(node);
|
663
669
|
std::cerr << ind << "String_Schema " << expression;
|
664
670
|
std::cerr << " (" << pstate_source_position(expression) << ")";
|
665
671
|
std::cerr << " " << expression->concrete_type();
|
@@ -673,42 +679,43 @@ inline void debug_ast(AST_Node_Ptr node, std::string ind, Env* env)
|
|
673
679
|
std::cerr << " <" << prettyprint(expression->pstate().token.ws_before()) << ">" << std::endl;
|
674
680
|
for(const auto& i : expression->elements()) { debug_ast(i, ind + " ", env); }
|
675
681
|
} else if (Cast<String>(node)) {
|
676
|
-
|
682
|
+
String* expression = Cast<String>(node);
|
677
683
|
std::cerr << ind << "String " << expression;
|
678
684
|
std::cerr << " " << expression->concrete_type();
|
679
685
|
std::cerr << " (" << pstate_source_position(node) << ")";
|
680
686
|
if (expression->is_interpolant()) std::cerr << " [interpolant]";
|
681
687
|
std::cerr << " <" << prettyprint(expression->pstate().token.ws_before()) << ">" << std::endl;
|
682
688
|
} else if (Cast<Expression>(node)) {
|
683
|
-
|
689
|
+
Expression* expression = Cast<Expression>(node);
|
684
690
|
std::cerr << ind << "Expression " << expression;
|
685
691
|
std::cerr << " (" << pstate_source_position(node) << ")";
|
686
692
|
switch (expression->concrete_type()) {
|
687
|
-
case Expression::
|
688
|
-
case Expression::
|
689
|
-
case Expression::
|
690
|
-
case Expression::
|
691
|
-
case Expression::
|
692
|
-
case Expression::
|
693
|
-
case Expression::
|
694
|
-
case Expression::
|
695
|
-
case Expression::
|
696
|
-
case Expression::
|
697
|
-
case Expression::
|
698
|
-
case Expression::
|
699
|
-
case Expression::
|
700
|
-
case Expression::
|
701
|
-
case Expression::
|
693
|
+
case Expression::Type::NONE: std::cerr << " [NONE]"; break;
|
694
|
+
case Expression::Type::BOOLEAN: std::cerr << " [BOOLEAN]"; break;
|
695
|
+
case Expression::Type::NUMBER: std::cerr << " [NUMBER]"; break;
|
696
|
+
case Expression::Type::COLOR: std::cerr << " [COLOR]"; break;
|
697
|
+
case Expression::Type::STRING: std::cerr << " [STRING]"; break;
|
698
|
+
case Expression::Type::LIST: std::cerr << " [LIST]"; break;
|
699
|
+
case Expression::Type::MAP: std::cerr << " [MAP]"; break;
|
700
|
+
case Expression::Type::SELECTOR: std::cerr << " [SELECTOR]"; break;
|
701
|
+
case Expression::Type::NULL_VAL: std::cerr << " [NULL_VAL]"; break;
|
702
|
+
case Expression::Type::C_WARNING: std::cerr << " [C_WARNING]"; break;
|
703
|
+
case Expression::Type::C_ERROR: std::cerr << " [C_ERROR]"; break;
|
704
|
+
case Expression::Type::FUNCTION: std::cerr << " [FUNCTION]"; break;
|
705
|
+
case Expression::Type::NUM_TYPES: std::cerr << " [NUM_TYPES]"; break;
|
706
|
+
case Expression::Type::VARIABLE: std::cerr << " [VARIABLE]"; break;
|
707
|
+
case Expression::Type::FUNCTION_VAL: std::cerr << " [FUNCTION_VAL]"; break;
|
708
|
+
case Expression::Type::PARENT: std::cerr << " [PARENT]"; break;
|
702
709
|
}
|
703
710
|
std::cerr << std::endl;
|
704
711
|
} else if (Cast<Has_Block>(node)) {
|
705
|
-
|
712
|
+
Has_Block* has_block = Cast<Has_Block>(node);
|
706
713
|
std::cerr << ind << "Has_Block " << has_block;
|
707
714
|
std::cerr << " (" << pstate_source_position(node) << ")";
|
708
715
|
std::cerr << " " << has_block->tabs() << std::endl;
|
709
716
|
if (has_block->block()) for(const Statement_Obj& i : has_block->block()->elements()) { debug_ast(i, ind + " ", env); }
|
710
717
|
} else if (Cast<Statement>(node)) {
|
711
|
-
|
718
|
+
Statement* statement = Cast<Statement>(node);
|
712
719
|
std::cerr << ind << "Statement " << statement;
|
713
720
|
std::cerr << " (" << pstate_source_position(node) << ")";
|
714
721
|
std::cerr << " " << statement->tabs() << std::endl;
|
@@ -767,9 +774,9 @@ inline void debug_node(Node* node, std::string ind = "")
|
|
767
774
|
}
|
768
775
|
|
769
776
|
/*
|
770
|
-
inline void debug_ast(const
|
777
|
+
inline void debug_ast(const AST_Node* node, std::string ind = "", Env* env = 0)
|
771
778
|
{
|
772
|
-
debug_ast(const_cast<
|
779
|
+
debug_ast(const_cast<AST_Node*>(node), ind, env);
|
773
780
|
}
|
774
781
|
*/
|
775
782
|
inline void debug_node(const Node* node, std::string ind = "")
|