sassc 2.0.0 → 2.4.0
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 +2 -0
- data/.gitmodules +1 -1
- data/.travis.yml +9 -3
- data/CHANGELOG.md +36 -0
- data/CODE_OF_CONDUCT.md +1 -1
- data/README.md +1 -1
- data/Rakefile +43 -7
- data/ext/depend +4 -0
- data/ext/extconf.rb +92 -0
- data/ext/libsass/VERSION +1 -0
- data/ext/libsass/include/sass/base.h +9 -1
- data/ext/libsass/include/sass/context.h +5 -1
- data/ext/libsass/src/MurmurHash2.hpp +91 -0
- data/ext/libsass/src/ast.cpp +755 -2028
- data/ext/libsass/src/ast.hpp +492 -2477
- 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 +70 -10
- data/ext/libsass/src/ast_fwd_decl.cpp +5 -3
- data/ext/libsass/src/ast_fwd_decl.hpp +107 -296
- data/ext/libsass/src/ast_helpers.hpp +292 -0
- data/ext/libsass/src/ast_sel_cmp.cpp +396 -0
- data/ext/libsass/src/ast_sel_super.cpp +539 -0
- data/ext/libsass/src/ast_sel_unify.cpp +275 -0
- data/ext/libsass/src/ast_sel_weave.cpp +616 -0
- data/ext/libsass/src/ast_selectors.cpp +1043 -0
- data/ext/libsass/src/ast_selectors.hpp +522 -0
- data/ext/libsass/src/ast_supports.cpp +114 -0
- data/ext/libsass/src/ast_supports.hpp +121 -0
- data/ext/libsass/src/ast_values.cpp +1154 -0
- data/ext/libsass/src/ast_values.hpp +498 -0
- data/ext/libsass/src/backtrace.cpp +11 -7
- data/ext/libsass/src/backtrace.hpp +5 -5
- data/ext/libsass/src/base64vlq.cpp +5 -2
- data/ext/libsass/src/base64vlq.hpp +1 -1
- data/ext/libsass/src/bind.cpp +35 -34
- 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 +4 -6
- data/ext/libsass/src/check_nesting.cpp +83 -88
- data/ext/libsass/src/check_nesting.hpp +39 -34
- data/ext/libsass/src/color_maps.cpp +168 -164
- data/ext/libsass/src/color_maps.hpp +152 -160
- data/ext/libsass/src/constants.cpp +20 -0
- data/ext/libsass/src/constants.hpp +19 -0
- data/ext/libsass/src/context.cpp +104 -121
- data/ext/libsass/src/context.hpp +43 -55
- data/ext/libsass/src/cssize.cpp +103 -188
- data/ext/libsass/src/cssize.hpp +45 -51
- data/ext/libsass/src/dart_helpers.hpp +199 -0
- data/ext/libsass/src/debugger.hpp +524 -361
- data/ext/libsass/src/emitter.cpp +26 -26
- data/ext/libsass/src/emitter.hpp +20 -18
- data/ext/libsass/src/environment.cpp +41 -27
- data/ext/libsass/src/environment.hpp +33 -22
- data/ext/libsass/src/error_handling.cpp +92 -94
- data/ext/libsass/src/error_handling.hpp +73 -50
- data/ext/libsass/src/eval.cpp +380 -515
- data/ext/libsass/src/eval.hpp +64 -57
- data/ext/libsass/src/eval_selectors.cpp +75 -0
- data/ext/libsass/src/expand.cpp +322 -263
- data/ext/libsass/src/expand.hpp +55 -39
- data/ext/libsass/src/extender.cpp +1188 -0
- data/ext/libsass/src/extender.hpp +399 -0
- data/ext/libsass/src/extension.cpp +43 -0
- data/ext/libsass/src/extension.hpp +89 -0
- data/ext/libsass/src/file.cpp +134 -88
- data/ext/libsass/src/file.hpp +28 -37
- data/ext/libsass/src/fn_colors.cpp +596 -0
- data/ext/libsass/src/fn_colors.hpp +85 -0
- data/ext/libsass/src/fn_lists.cpp +285 -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 +244 -0
- data/ext/libsass/src/fn_miscs.hpp +40 -0
- data/ext/libsass/src/fn_numbers.cpp +227 -0
- data/ext/libsass/src/fn_numbers.hpp +45 -0
- data/ext/libsass/src/fn_selectors.cpp +205 -0
- data/ext/libsass/src/fn_selectors.hpp +35 -0
- data/ext/libsass/src/fn_strings.cpp +268 -0
- data/ext/libsass/src/fn_strings.hpp +34 -0
- data/ext/libsass/src/fn_utils.cpp +158 -0
- data/ext/libsass/src/fn_utils.hpp +62 -0
- data/ext/libsass/src/inspect.cpp +253 -266
- data/ext/libsass/src/inspect.hpp +72 -74
- data/ext/libsass/src/json.cpp +2 -2
- data/ext/libsass/src/lexer.cpp +25 -84
- data/ext/libsass/src/lexer.hpp +5 -16
- data/ext/libsass/src/listize.cpp +27 -43
- data/ext/libsass/src/listize.hpp +14 -11
- data/ext/libsass/src/mapping.hpp +1 -0
- data/ext/libsass/src/memory.hpp +12 -0
- data/ext/libsass/src/memory/allocator.cpp +48 -0
- data/ext/libsass/src/memory/allocator.hpp +138 -0
- data/ext/libsass/src/memory/config.hpp +20 -0
- data/ext/libsass/src/memory/memory_pool.hpp +186 -0
- data/ext/libsass/src/memory/shared_ptr.cpp +33 -0
- data/ext/libsass/src/memory/shared_ptr.hpp +332 -0
- data/ext/libsass/src/operation.hpp +193 -143
- data/ext/libsass/src/operators.cpp +56 -29
- data/ext/libsass/src/operators.hpp +11 -11
- data/ext/libsass/src/ordered_map.hpp +112 -0
- data/ext/libsass/src/output.cpp +59 -75
- data/ext/libsass/src/output.hpp +15 -22
- data/ext/libsass/src/parser.cpp +662 -818
- data/ext/libsass/src/parser.hpp +96 -100
- data/ext/libsass/src/parser_selectors.cpp +189 -0
- data/ext/libsass/src/permutate.hpp +164 -0
- data/ext/libsass/src/plugins.cpp +12 -8
- data/ext/libsass/src/plugins.hpp +8 -8
- data/ext/libsass/src/position.cpp +10 -26
- data/ext/libsass/src/position.hpp +44 -21
- data/ext/libsass/src/prelexer.cpp +14 -8
- data/ext/libsass/src/prelexer.hpp +9 -9
- data/ext/libsass/src/remove_placeholders.cpp +59 -57
- data/ext/libsass/src/remove_placeholders.hpp +20 -18
- data/ext/libsass/src/sass.cpp +25 -18
- data/ext/libsass/src/sass.hpp +22 -14
- data/ext/libsass/src/sass2scss.cpp +49 -18
- data/ext/libsass/src/sass_context.cpp +104 -132
- data/ext/libsass/src/sass_context.hpp +2 -2
- data/ext/libsass/src/sass_functions.cpp +7 -4
- data/ext/libsass/src/sass_functions.hpp +1 -1
- data/ext/libsass/src/sass_values.cpp +26 -21
- data/ext/libsass/src/settings.hpp +19 -0
- data/ext/libsass/src/source.cpp +69 -0
- data/ext/libsass/src/source.hpp +95 -0
- data/ext/libsass/src/source_data.hpp +32 -0
- data/ext/libsass/src/source_map.cpp +27 -20
- data/ext/libsass/src/source_map.hpp +14 -11
- data/ext/libsass/src/stylesheet.cpp +22 -0
- data/ext/libsass/src/stylesheet.hpp +57 -0
- data/ext/libsass/src/to_value.cpp +24 -22
- data/ext/libsass/src/to_value.hpp +18 -22
- data/ext/libsass/src/units.cpp +28 -22
- data/ext/libsass/src/units.hpp +9 -8
- 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 +12 -10
- data/ext/libsass/src/utf8_string.hpp +7 -6
- data/ext/libsass/src/util.cpp +97 -107
- data/ext/libsass/src/util.hpp +74 -30
- data/ext/libsass/src/util_string.cpp +125 -0
- data/ext/libsass/src/util_string.hpp +73 -0
- data/ext/libsass/src/values.cpp +33 -24
- data/ext/libsass/src/values.hpp +2 -2
- data/lib/sassc.rb +24 -0
- data/lib/sassc/engine.rb +7 -5
- data/lib/sassc/functions_handler.rb +11 -13
- data/lib/sassc/native.rb +10 -9
- data/lib/sassc/native/native_functions_api.rb +0 -5
- data/lib/sassc/script.rb +4 -6
- data/lib/sassc/version.rb +1 -1
- data/sassc.gemspec +32 -12
- data/test/engine_test.rb +32 -2
- data/test/functions_test.rb +38 -1
- data/test/native_test.rb +4 -4
- metadata +95 -109
- data/ext/Rakefile +0 -3
- data/ext/libsass/.editorconfig +0 -15
- data/ext/libsass/.gitattributes +0 -2
- data/ext/libsass/.github/CONTRIBUTING.md +0 -65
- data/ext/libsass/.github/ISSUE_TEMPLATE.md +0 -54
- data/ext/libsass/.gitignore +0 -85
- data/ext/libsass/.travis.yml +0 -64
- data/ext/libsass/COPYING +0 -25
- data/ext/libsass/GNUmakefile.am +0 -88
- data/ext/libsass/INSTALL +0 -1
- data/ext/libsass/LICENSE +0 -25
- data/ext/libsass/Makefile +0 -351
- data/ext/libsass/Makefile.conf +0 -55
- data/ext/libsass/Readme.md +0 -104
- data/ext/libsass/SECURITY.md +0 -10
- data/ext/libsass/appveyor.yml +0 -91
- data/ext/libsass/configure.ac +0 -138
- data/ext/libsass/contrib/libsass.spec +0 -66
- 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/include/sass/version.h.in +0 -12
- data/ext/libsass/m4/.gitkeep +0 -0
- data/ext/libsass/m4/m4-ax_cxx_compile_stdcxx_11.m4 +0 -167
- data/ext/libsass/res/resource.rc +0 -35
- 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/GNUmakefile.am +0 -54
- data/ext/libsass/src/extend.cpp +0 -2130
- data/ext/libsass/src/extend.hpp +0 -86
- data/ext/libsass/src/functions.cpp +0 -2234
- data/ext/libsass/src/functions.hpp +0 -198
- data/ext/libsass/src/memory/SharedPtr.cpp +0 -114
- data/ext/libsass/src/memory/SharedPtr.hpp +0 -206
- data/ext/libsass/src/node.cpp +0 -319
- data/ext/libsass/src/node.hpp +0 -118
- data/ext/libsass/src/paths.hpp +0 -71
- data/ext/libsass/src/sass_util.cpp +0 -149
- data/ext/libsass/src/sass_util.hpp +0 -256
- data/ext/libsass/src/subset_map.cpp +0 -55
- data/ext/libsass/src/subset_map.hpp +0 -76
- data/ext/libsass/src/support/libsass.pc.in +0 -11
- 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/ext/libsass/version.sh +0 -10
- data/ext/libsass/win/libsass.sln +0 -39
- data/ext/libsass/win/libsass.sln.DotSettings +0 -9
- data/ext/libsass/win/libsass.targets +0 -118
- data/ext/libsass/win/libsass.vcxproj +0 -188
- data/ext/libsass/win/libsass.vcxproj.filters +0 -357
- data/lib/sassc/native/lib_c.rb +0 -21
- data/lib/tasks/libsass.rb +0 -33
data/ext/libsass/src/cssize.hpp
CHANGED
|
@@ -10,66 +10,60 @@ 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
|
-
Context& ctx;
|
|
16
15
|
Backtraces& traces;
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
Statement_Ptr fallback_impl(AST_Node_Ptr n);
|
|
16
|
+
BlockStack block_stack;
|
|
17
|
+
sass::vector<Statement*> p_stack;
|
|
21
18
|
|
|
22
19
|
public:
|
|
23
20
|
Cssize(Context&);
|
|
24
21
|
~Cssize() { }
|
|
25
22
|
|
|
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
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
List_Ptr merge_media_queries(Media_Block_Ptr, Media_Block_Ptr);
|
|
67
|
-
Media_Query_Ptr merge_media_query(Media_Query_Ptr, Media_Query_Ptr);
|
|
68
|
-
|
|
23
|
+
Block* operator()(Block*);
|
|
24
|
+
Statement* operator()(StyleRule*);
|
|
25
|
+
// Statement* operator()(Bubble*);
|
|
26
|
+
Statement* operator()(CssMediaRule*);
|
|
27
|
+
Statement* operator()(SupportsRule*);
|
|
28
|
+
Statement* operator()(AtRootRule*);
|
|
29
|
+
Statement* operator()(AtRule*);
|
|
30
|
+
Statement* operator()(Keyframe_Rule*);
|
|
31
|
+
Statement* operator()(Trace*);
|
|
32
|
+
Statement* operator()(Declaration*);
|
|
33
|
+
// Statement* operator()(Assignment*);
|
|
34
|
+
// Statement* operator()(Import*);
|
|
35
|
+
// Statement* operator()(Import_Stub*);
|
|
36
|
+
// Statement* operator()(WarningRule*);
|
|
37
|
+
// Statement* operator()(Error*);
|
|
38
|
+
// Statement* operator()(Comment*);
|
|
39
|
+
// Statement* operator()(If*);
|
|
40
|
+
// Statement* operator()(ForRule*);
|
|
41
|
+
// Statement* operator()(EachRule*);
|
|
42
|
+
// Statement* operator()(WhileRule*);
|
|
43
|
+
// Statement* operator()(Return*);
|
|
44
|
+
// Statement* operator()(ExtendRule*);
|
|
45
|
+
// Statement* operator()(Definition*);
|
|
46
|
+
// Statement* operator()(Mixin_Call*);
|
|
47
|
+
// Statement* operator()(Content*);
|
|
48
|
+
Statement* operator()(Null*);
|
|
49
|
+
|
|
50
|
+
Statement* parent();
|
|
51
|
+
sass::vector<std::pair<bool, Block_Obj>> slice_by_bubble(Block*);
|
|
52
|
+
Statement* bubble(AtRule*);
|
|
53
|
+
Statement* bubble(AtRootRule*);
|
|
54
|
+
Statement* bubble(CssMediaRule*);
|
|
55
|
+
Statement* bubble(SupportsRule*);
|
|
56
|
+
|
|
57
|
+
Block* debubble(Block* children, Statement* parent = 0);
|
|
58
|
+
Block* flatten(const Block*);
|
|
59
|
+
bool bubblable(Statement*);
|
|
60
|
+
|
|
61
|
+
// generic fallback
|
|
69
62
|
template <typename U>
|
|
70
|
-
|
|
63
|
+
Statement* fallback(U x)
|
|
64
|
+
{ return Cast<Statement>(x); }
|
|
71
65
|
|
|
72
|
-
void append_block(
|
|
66
|
+
void append_block(Block*, Block*);
|
|
73
67
|
};
|
|
74
68
|
|
|
75
69
|
}
|
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
#ifndef SASS_DART_HELPERS_H
|
|
2
|
+
#define SASS_DART_HELPERS_H
|
|
3
|
+
|
|
4
|
+
#include <vector>
|
|
5
|
+
#include <utility>
|
|
6
|
+
#include <iterator>
|
|
7
|
+
#include <functional>
|
|
8
|
+
|
|
9
|
+
namespace Sass {
|
|
10
|
+
|
|
11
|
+
// ##########################################################################
|
|
12
|
+
// Flatten `vector<vector<T>>` to `vector<T>`
|
|
13
|
+
// ##########################################################################
|
|
14
|
+
template <class T>
|
|
15
|
+
T flatten(const sass::vector<T>& all)
|
|
16
|
+
{
|
|
17
|
+
T flattened;
|
|
18
|
+
for (const auto& sub : all) {
|
|
19
|
+
std::copy(std::begin(sub), std::end(sub),
|
|
20
|
+
std::back_inserter(flattened));
|
|
21
|
+
}
|
|
22
|
+
return flattened;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
// ##########################################################################
|
|
26
|
+
// Expands each element of this Iterable into zero or more elements.
|
|
27
|
+
// Calls a function on every element and ads all results to flat array
|
|
28
|
+
// ##########################################################################
|
|
29
|
+
// Equivalent to dart `cnt.any`
|
|
30
|
+
// Pass additional closure variables to `fn`
|
|
31
|
+
template <class T, class U, typename ...Args>
|
|
32
|
+
T expand(const T& cnt, U fn, Args... args) {
|
|
33
|
+
T flattened;
|
|
34
|
+
for (const auto& sub : cnt) {
|
|
35
|
+
auto rv = fn(sub, args...);
|
|
36
|
+
flattened.insert(flattened.end(),
|
|
37
|
+
rv.begin(), rv.end());
|
|
38
|
+
}
|
|
39
|
+
return flattened;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
// ##########################################################################
|
|
43
|
+
// ##########################################################################
|
|
44
|
+
template <class T>
|
|
45
|
+
T flattenInner(const sass::vector<T>& vec)
|
|
46
|
+
{
|
|
47
|
+
T outer;
|
|
48
|
+
for (const auto& sub : vec) {
|
|
49
|
+
outer.emplace_back(std::move(flatten(sub)));
|
|
50
|
+
}
|
|
51
|
+
return outer;
|
|
52
|
+
}
|
|
53
|
+
// EO flattenInner
|
|
54
|
+
|
|
55
|
+
// ##########################################################################
|
|
56
|
+
// Equivalent to dart `cnt.any`
|
|
57
|
+
// Pass additional closure variables to `fn`
|
|
58
|
+
// ##########################################################################
|
|
59
|
+
template <class T, class U, typename ...Args>
|
|
60
|
+
bool hasAny(const T& cnt, U fn, Args... args) {
|
|
61
|
+
for (const auto& sub : cnt) {
|
|
62
|
+
if (fn(sub, args...)) {
|
|
63
|
+
return true;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
return false;
|
|
67
|
+
}
|
|
68
|
+
// EO hasAny
|
|
69
|
+
|
|
70
|
+
// ##########################################################################
|
|
71
|
+
// Equivalent to dart `cnt.take(len).any`
|
|
72
|
+
// Pass additional closure variables to `fn`
|
|
73
|
+
// ##########################################################################
|
|
74
|
+
template <class T, class U, typename ...Args>
|
|
75
|
+
bool hasSubAny(const T& cnt, size_t len, U fn, Args... args) {
|
|
76
|
+
for (size_t i = 0; i < len; i++) {
|
|
77
|
+
if (fn(cnt[i], args...)) {
|
|
78
|
+
return true;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
return false;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
// ##########################################################################
|
|
85
|
+
// Default predicate for lcs algorithm
|
|
86
|
+
// ##########################################################################
|
|
87
|
+
template <class T>
|
|
88
|
+
inline bool lcsIdentityCmp(const T& X, const T& Y, T& result)
|
|
89
|
+
{
|
|
90
|
+
// Assert equality
|
|
91
|
+
if (!ObjEqualityFn(X, Y)) {
|
|
92
|
+
return false;
|
|
93
|
+
}
|
|
94
|
+
// Store in reference
|
|
95
|
+
result = X;
|
|
96
|
+
// Return success
|
|
97
|
+
return true;
|
|
98
|
+
}
|
|
99
|
+
// EO lcsIdentityCmp
|
|
100
|
+
|
|
101
|
+
// ##########################################################################
|
|
102
|
+
// Longest common subsequence with predicate
|
|
103
|
+
// ##########################################################################
|
|
104
|
+
template <class T>
|
|
105
|
+
sass::vector<T> lcs(
|
|
106
|
+
const sass::vector<T>& X, const sass::vector<T>& Y,
|
|
107
|
+
bool(*select)(const T&, const T&, T&) = lcsIdentityCmp<T>)
|
|
108
|
+
{
|
|
109
|
+
|
|
110
|
+
std::size_t m = X.size(), mm = X.size() + 1;
|
|
111
|
+
std::size_t n = Y.size(), nn = Y.size() + 1;
|
|
112
|
+
|
|
113
|
+
if (m == 0) return {};
|
|
114
|
+
if (n == 0) return {};
|
|
115
|
+
|
|
116
|
+
// MSVC does not support variable-length arrays
|
|
117
|
+
// To circumvent, allocate one array on the heap
|
|
118
|
+
// Then use a macro to access via double index
|
|
119
|
+
// e.g. `size_t L[m][n]` is supported by gcc
|
|
120
|
+
size_t* len = new size_t[mm * nn + 1];
|
|
121
|
+
bool* acc = new bool[mm * nn + 1];
|
|
122
|
+
T* res = new T[mm * nn + 1];
|
|
123
|
+
|
|
124
|
+
#define LEN(x, y) len[(x) * nn + (y)]
|
|
125
|
+
#define ACC(x, y) acc[(x) * nn + (y)]
|
|
126
|
+
#define RES(x, y) res[(x) * nn + (y)]
|
|
127
|
+
|
|
128
|
+
/* Following steps build L[m+1][n+1] in bottom up fashion. Note
|
|
129
|
+
that L[i][j] contains length of LCS of X[0..i-1] and Y[0..j-1] */
|
|
130
|
+
for (size_t i = 0; i <= m; i++) {
|
|
131
|
+
for (size_t j = 0; j <= n; j++) {
|
|
132
|
+
if (i == 0 || j == 0)
|
|
133
|
+
LEN(i, j) = 0;
|
|
134
|
+
else {
|
|
135
|
+
ACC(i - 1, j - 1) = select(X[i - 1], Y[j - 1], RES(i - 1, j - 1));
|
|
136
|
+
if (ACC(i - 1, j - 1))
|
|
137
|
+
LEN(i, j) = LEN(i - 1, j - 1) + 1;
|
|
138
|
+
else
|
|
139
|
+
LEN(i, j) = std::max(LEN(i - 1, j), LEN(i, j - 1));
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
// Following code is used to print LCS
|
|
145
|
+
sass::vector<T> lcs;
|
|
146
|
+
std::size_t index = LEN(m, n);
|
|
147
|
+
lcs.reserve(index);
|
|
148
|
+
|
|
149
|
+
// Start from the right-most-bottom-most corner
|
|
150
|
+
// and one by one store objects in lcs[]
|
|
151
|
+
std::size_t i = m, j = n;
|
|
152
|
+
while (i > 0 && j > 0) {
|
|
153
|
+
|
|
154
|
+
// If current objects in X[] and Y are same,
|
|
155
|
+
// then current object is part of LCS
|
|
156
|
+
if (ACC(i - 1, j - 1))
|
|
157
|
+
{
|
|
158
|
+
// Put the stored object in result
|
|
159
|
+
// Note: we push instead of unshift
|
|
160
|
+
// Note: reverse the vector later
|
|
161
|
+
// ToDo: is deque more performant?
|
|
162
|
+
lcs.push_back(RES(i - 1, j - 1));
|
|
163
|
+
// reduce values of i, j and index
|
|
164
|
+
i -= 1; j -= 1; index -= 1;
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
// If not same, then find the larger of two and
|
|
168
|
+
// go in the direction of larger value
|
|
169
|
+
else if (LEN(i - 1, j) > LEN(i, j - 1)) {
|
|
170
|
+
i--;
|
|
171
|
+
}
|
|
172
|
+
else {
|
|
173
|
+
j--;
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
// reverse now as we used push_back
|
|
179
|
+
std::reverse(lcs.begin(), lcs.end());
|
|
180
|
+
|
|
181
|
+
// Delete temp memory on heap
|
|
182
|
+
delete[] len;
|
|
183
|
+
delete[] acc;
|
|
184
|
+
delete[] res;
|
|
185
|
+
|
|
186
|
+
#undef LEN
|
|
187
|
+
#undef ACC
|
|
188
|
+
#undef RES
|
|
189
|
+
|
|
190
|
+
return lcs;
|
|
191
|
+
}
|
|
192
|
+
// EO lcs
|
|
193
|
+
|
|
194
|
+
// ##########################################################################
|
|
195
|
+
// ##########################################################################
|
|
196
|
+
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
#endif
|
|
@@ -1,33 +1,292 @@
|
|
|
1
1
|
#ifndef SASS_DEBUGGER_H
|
|
2
2
|
#define SASS_DEBUGGER_H
|
|
3
3
|
|
|
4
|
+
// sass.hpp must go before all system headers to get the
|
|
5
|
+
// __EXTENSIONS__ fix on Solaris.
|
|
6
|
+
#include "sass.hpp"
|
|
7
|
+
|
|
8
|
+
#include <queue>
|
|
9
|
+
#include <vector>
|
|
4
10
|
#include <string>
|
|
5
11
|
#include <sstream>
|
|
6
|
-
#include "
|
|
12
|
+
#include "ast.hpp"
|
|
7
13
|
#include "ast_fwd_decl.hpp"
|
|
14
|
+
#include "extension.hpp"
|
|
15
|
+
|
|
16
|
+
#include "ordered_map.hpp"
|
|
8
17
|
|
|
9
18
|
using namespace Sass;
|
|
10
19
|
|
|
11
|
-
inline void debug_ast(
|
|
20
|
+
inline void debug_ast(AST_Node* node, sass::string ind = "", Env* env = 0);
|
|
12
21
|
|
|
13
|
-
inline
|
|
14
|
-
|
|
22
|
+
inline sass::string debug_vec(const AST_Node* node) {
|
|
23
|
+
if (node == NULL) return "null";
|
|
24
|
+
else return node->to_string();
|
|
15
25
|
}
|
|
16
26
|
|
|
17
|
-
inline
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
27
|
+
inline sass::string debug_dude(sass::vector<sass::vector<int>> vec) {
|
|
28
|
+
sass::sstream out;
|
|
29
|
+
out << "{";
|
|
30
|
+
bool joinOut = false;
|
|
31
|
+
for (auto ct : vec) {
|
|
32
|
+
if (joinOut) out << ", ";
|
|
33
|
+
joinOut = true;
|
|
34
|
+
out << "{";
|
|
35
|
+
bool joinIn = false;
|
|
36
|
+
for (auto nr : ct) {
|
|
37
|
+
if (joinIn) out << ", ";
|
|
38
|
+
joinIn = true;
|
|
39
|
+
out << nr;
|
|
40
|
+
}
|
|
41
|
+
out << "}";
|
|
42
|
+
}
|
|
43
|
+
out << "}";
|
|
44
|
+
return out.str();
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
inline sass::string debug_vec(sass::string& str) {
|
|
48
|
+
return str;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
inline sass::string debug_vec(Extension& ext) {
|
|
52
|
+
sass::sstream out;
|
|
53
|
+
out << debug_vec(ext.extender);
|
|
54
|
+
out << " {@extend ";
|
|
55
|
+
out << debug_vec(ext.target);
|
|
56
|
+
if (ext.isOptional) {
|
|
57
|
+
out << " !optional";
|
|
58
|
+
}
|
|
59
|
+
out << "}";
|
|
60
|
+
return out.str();
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
template <class T>
|
|
64
|
+
inline sass::string debug_vec(sass::vector<T> vec) {
|
|
65
|
+
sass::sstream out;
|
|
66
|
+
out << "[";
|
|
67
|
+
for (size_t i = 0; i < vec.size(); i += 1) {
|
|
68
|
+
if (i > 0) out << ", ";
|
|
69
|
+
out << debug_vec(vec[i]);
|
|
70
|
+
}
|
|
71
|
+
out << "]";
|
|
72
|
+
return out.str();
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
template <class T>
|
|
76
|
+
inline sass::string debug_vec(std::queue<T> vec) {
|
|
77
|
+
sass::sstream out;
|
|
78
|
+
out << "{";
|
|
79
|
+
for (size_t i = 0; i < vec.size(); i += 1) {
|
|
80
|
+
if (i > 0) out << ", ";
|
|
81
|
+
out << debug_vec(vec[i]);
|
|
23
82
|
}
|
|
24
|
-
|
|
83
|
+
out << "}";
|
|
84
|
+
return out.str();
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
template <class T, class U, class O>
|
|
88
|
+
inline sass::string debug_vec(std::map<T, U, O> vec) {
|
|
89
|
+
sass::sstream out;
|
|
90
|
+
out << "{";
|
|
91
|
+
bool joinit = false;
|
|
92
|
+
for (auto it = vec.begin(); it != vec.end(); it++)
|
|
93
|
+
{
|
|
94
|
+
if (joinit) out << ", ";
|
|
95
|
+
out << debug_vec(it->first) // string (key)
|
|
96
|
+
<< ": "
|
|
97
|
+
<< debug_vec(it->second); // string's value
|
|
98
|
+
joinit = true;
|
|
99
|
+
}
|
|
100
|
+
out << "}";
|
|
101
|
+
return out.str();
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
template <class T, class U, class O, class V>
|
|
105
|
+
inline sass::string debug_vec(const ordered_map<T, U, O, V>& vec) {
|
|
106
|
+
sass::sstream out;
|
|
107
|
+
out << "{";
|
|
108
|
+
bool joinit = false;
|
|
109
|
+
for (auto it = vec.begin(); it != vec.end(); it++)
|
|
110
|
+
{
|
|
111
|
+
if (joinit) out << ", ";
|
|
112
|
+
out << debug_vec(*it); // string (key)
|
|
113
|
+
// << debug_vec(it->second); // string's value
|
|
114
|
+
joinit = true;
|
|
115
|
+
}
|
|
116
|
+
out << "}";
|
|
117
|
+
return out.str();
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
template <class T, class U, class O, class V>
|
|
121
|
+
inline sass::string debug_vec(std::unordered_map<T, U, O, V> vec) {
|
|
122
|
+
sass::sstream out;
|
|
123
|
+
out << "{";
|
|
124
|
+
bool joinit = false;
|
|
125
|
+
for (auto it = vec.begin(); it != vec.end(); it++)
|
|
126
|
+
{
|
|
127
|
+
if (joinit) out << ", ";
|
|
128
|
+
out << debug_vec(it->first) // string (key)
|
|
129
|
+
<< ": "
|
|
130
|
+
<< debug_vec(it->second); // string's value
|
|
131
|
+
joinit = true;
|
|
132
|
+
}
|
|
133
|
+
out << "}";
|
|
134
|
+
return out.str();
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
template <class T, class U, class O, class V>
|
|
138
|
+
inline sass::string debug_keys(std::unordered_map<T, U, O, V> vec) {
|
|
139
|
+
sass::sstream out;
|
|
140
|
+
out << "{";
|
|
141
|
+
bool joinit = false;
|
|
142
|
+
for (auto it = vec.begin(); it != vec.end(); it++)
|
|
143
|
+
{
|
|
144
|
+
if (joinit) out << ", ";
|
|
145
|
+
out << debug_vec(it->first); // string (key)
|
|
146
|
+
joinit = true;
|
|
147
|
+
}
|
|
148
|
+
out << "}";
|
|
149
|
+
return out.str();
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
inline sass::string debug_vec(ExtListSelSet& vec) {
|
|
153
|
+
sass::sstream out;
|
|
154
|
+
out << "{";
|
|
155
|
+
bool joinit = false;
|
|
156
|
+
for (auto it = vec.begin(); it != vec.end(); it++)
|
|
157
|
+
{
|
|
158
|
+
if (joinit) out << ", ";
|
|
159
|
+
out << debug_vec(*it); // string (key)
|
|
160
|
+
joinit = true;
|
|
161
|
+
}
|
|
162
|
+
out << "}";
|
|
163
|
+
return out.str();
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
/*
|
|
167
|
+
template <class T, class U, class O, class V>
|
|
168
|
+
inline sass::string debug_values(tsl::ordered_map<T, U, O, V> vec) {
|
|
169
|
+
sass::sstream out;
|
|
170
|
+
out << "{";
|
|
171
|
+
bool joinit = false;
|
|
172
|
+
for (auto it = vec.begin(); it != vec.end(); it++)
|
|
173
|
+
{
|
|
174
|
+
if (joinit) out << ", ";
|
|
175
|
+
out << debug_vec(const_cast<U&>(it->second)); // string's value
|
|
176
|
+
joinit = true;
|
|
177
|
+
}
|
|
178
|
+
out << "}";
|
|
179
|
+
return out.str();
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
template <class T, class U, class O, class V>
|
|
183
|
+
inline sass::string debug_vec(tsl::ordered_map<T, U, O, V> vec) {
|
|
184
|
+
sass::sstream out;
|
|
185
|
+
out << "{";
|
|
186
|
+
bool joinit = false;
|
|
187
|
+
for (auto it = vec.begin(); it != vec.end(); it++)
|
|
188
|
+
{
|
|
189
|
+
if (joinit) out << ", ";
|
|
190
|
+
out << debug_vec(it->first) // string (key)
|
|
191
|
+
<< ": "
|
|
192
|
+
<< debug_vec(const_cast<U&>(it->second)); // string's value
|
|
193
|
+
joinit = true;
|
|
194
|
+
}
|
|
195
|
+
out << "}";
|
|
196
|
+
return out.str();
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
template <class T, class U, class O, class V>
|
|
200
|
+
inline sass::string debug_vals(tsl::ordered_map<T, U, O, V> vec) {
|
|
201
|
+
sass::sstream out;
|
|
202
|
+
out << "{";
|
|
203
|
+
bool joinit = false;
|
|
204
|
+
for (auto it = vec.begin(); it != vec.end(); it++)
|
|
205
|
+
{
|
|
206
|
+
if (joinit) out << ", ";
|
|
207
|
+
out << debug_vec(const_cast<U&>(it->second)); // string's value
|
|
208
|
+
joinit = true;
|
|
209
|
+
}
|
|
210
|
+
out << "}";
|
|
211
|
+
return out.str();
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
template <class T, class U, class O, class V>
|
|
215
|
+
inline sass::string debug_keys(tsl::ordered_map<T, U, O, V> vec) {
|
|
216
|
+
sass::sstream out;
|
|
217
|
+
out << "{";
|
|
218
|
+
bool joinit = false;
|
|
219
|
+
for (auto it = vec.begin(); it != vec.end(); it++)
|
|
220
|
+
{
|
|
221
|
+
if (joinit) out << ", ";
|
|
222
|
+
out << debug_vec(it->first);
|
|
223
|
+
joinit = true;
|
|
224
|
+
}
|
|
225
|
+
out << "}";
|
|
226
|
+
return out.str();
|
|
227
|
+
}
|
|
228
|
+
*/
|
|
229
|
+
|
|
230
|
+
template <class T, class U>
|
|
231
|
+
inline sass::string debug_vec(std::set<T, U> vec) {
|
|
232
|
+
sass::sstream out;
|
|
233
|
+
out << "{";
|
|
234
|
+
bool joinit = false;
|
|
235
|
+
for (auto item : vec) {
|
|
236
|
+
if (joinit) out << ", ";
|
|
237
|
+
out << debug_vec(item);
|
|
238
|
+
joinit = true;
|
|
239
|
+
}
|
|
240
|
+
out << "}";
|
|
241
|
+
return out.str();
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
/*
|
|
245
|
+
template <class T, class U, class O, class V>
|
|
246
|
+
inline sass::string debug_vec(tsl::ordered_set<T, U, O, V> vec) {
|
|
247
|
+
sass::sstream out;
|
|
248
|
+
out << "{";
|
|
249
|
+
bool joinit = false;
|
|
250
|
+
for (auto item : vec) {
|
|
251
|
+
if (joinit) out << ", ";
|
|
252
|
+
out << debug_vec(item);
|
|
253
|
+
joinit = true;
|
|
254
|
+
}
|
|
255
|
+
out << "}";
|
|
256
|
+
return out.str();
|
|
257
|
+
}
|
|
258
|
+
*/
|
|
259
|
+
|
|
260
|
+
template <class T, class U, class O, class V>
|
|
261
|
+
inline sass::string debug_vec(std::unordered_set<T, U, O, V> vec) {
|
|
262
|
+
sass::sstream out;
|
|
263
|
+
out << "{";
|
|
264
|
+
bool joinit = false;
|
|
265
|
+
for (auto item : vec) {
|
|
266
|
+
if (joinit) out << ", ";
|
|
267
|
+
out << debug_vec(item);
|
|
268
|
+
joinit = true;
|
|
269
|
+
}
|
|
270
|
+
out << "}";
|
|
271
|
+
return out.str();
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
inline sass::string debug_bool(bool val) {
|
|
275
|
+
return val ? "true" : "false";
|
|
276
|
+
}
|
|
277
|
+
inline sass::string debug_vec(ExtSmplSelSet* node) {
|
|
278
|
+
if (node == NULL) return "null";
|
|
279
|
+
else return debug_vec(*node);
|
|
25
280
|
}
|
|
26
281
|
|
|
27
|
-
inline
|
|
282
|
+
inline void debug_ast(const AST_Node* node, sass::string ind = "", Env* env = 0) {
|
|
283
|
+
debug_ast(const_cast<AST_Node*>(node), ind, env);
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
inline sass::string str_replace(sass::string str, const sass::string& oldStr, const sass::string& newStr)
|
|
28
287
|
{
|
|
29
288
|
size_t pos = 0;
|
|
30
|
-
while((pos = str.find(oldStr, pos)) !=
|
|
289
|
+
while((pos = str.find(oldStr, pos)) != sass::string::npos)
|
|
31
290
|
{
|
|
32
291
|
str.replace(pos, oldStr.length(), newStr);
|
|
33
292
|
pos += newStr.length();
|
|
@@ -35,25 +294,26 @@ inline std::string str_replace(std::string str, const std::string& oldStr, const
|
|
|
35
294
|
return str;
|
|
36
295
|
}
|
|
37
296
|
|
|
38
|
-
inline
|
|
39
|
-
|
|
297
|
+
inline sass::string prettyprint(const sass::string& str) {
|
|
298
|
+
sass::string clean = str_replace(str, "\n", "\\n");
|
|
40
299
|
clean = str_replace(clean, " ", "\\t");
|
|
41
300
|
clean = str_replace(clean, "\r", "\\r");
|
|
42
301
|
return clean;
|
|
43
302
|
}
|
|
44
303
|
|
|
45
|
-
inline
|
|
46
|
-
|
|
304
|
+
inline sass::string longToHex(long long t) {
|
|
305
|
+
sass::sstream is;
|
|
47
306
|
is << std::hex << t;
|
|
48
307
|
return is.str();
|
|
49
308
|
}
|
|
50
309
|
|
|
51
|
-
inline
|
|
310
|
+
inline sass::string pstate_source_position(AST_Node* node)
|
|
52
311
|
{
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
312
|
+
sass::sstream str;
|
|
313
|
+
Offset start(node->pstate().position);
|
|
314
|
+
Offset end(start + node->pstate().offset);
|
|
315
|
+
size_t file = node->pstate().getSrcId();
|
|
316
|
+
str << (file == sass::string::npos ? 99999999 : file)
|
|
57
317
|
<< "@[" << start.line << ":" << start.column << "]"
|
|
58
318
|
<< "-[" << end.line << ":" << end.column << "]";
|
|
59
319
|
#ifdef DEBUG_SHARED_PTR
|
|
@@ -64,203 +324,162 @@ inline std::string pstate_source_position(AST_Node_Ptr node)
|
|
|
64
324
|
return str.str();
|
|
65
325
|
}
|
|
66
326
|
|
|
67
|
-
inline void debug_ast(
|
|
327
|
+
inline void debug_ast(AST_Node* node, sass::string ind, Env* env)
|
|
68
328
|
{
|
|
69
329
|
if (node == 0) return;
|
|
70
330
|
if (ind == "") std::cerr << "####################################################################\n";
|
|
71
331
|
if (Cast<Bubble>(node)) {
|
|
72
|
-
|
|
332
|
+
Bubble* bubble = Cast<Bubble>(node);
|
|
73
333
|
std::cerr << ind << "Bubble " << bubble;
|
|
74
334
|
std::cerr << " (" << pstate_source_position(node) << ")";
|
|
75
335
|
std::cerr << " " << bubble->tabs();
|
|
76
336
|
std::cerr << std::endl;
|
|
77
337
|
debug_ast(bubble->node(), ind + " ", env);
|
|
78
338
|
} else if (Cast<Trace>(node)) {
|
|
79
|
-
|
|
339
|
+
Trace* trace = Cast<Trace>(node);
|
|
80
340
|
std::cerr << ind << "Trace " << trace;
|
|
81
341
|
std::cerr << " (" << pstate_source_position(node) << ")"
|
|
82
342
|
<< " [name:" << trace->name() << ", type: " << trace->type() << "]"
|
|
83
343
|
<< std::endl;
|
|
84
344
|
debug_ast(trace->block(), ind + " ", env);
|
|
85
|
-
} else if (Cast<
|
|
86
|
-
|
|
87
|
-
std::cerr << ind << "
|
|
345
|
+
} else if (Cast<AtRootRule>(node)) {
|
|
346
|
+
AtRootRule* root_block = Cast<AtRootRule>(node);
|
|
347
|
+
std::cerr << ind << "AtRootRule " << root_block;
|
|
88
348
|
std::cerr << " (" << pstate_source_position(node) << ")";
|
|
89
349
|
std::cerr << " " << root_block->tabs();
|
|
90
350
|
std::cerr << std::endl;
|
|
91
351
|
debug_ast(root_block->expression(), ind + ":", env);
|
|
92
352
|
debug_ast(root_block->block(), ind + " ", env);
|
|
93
|
-
} else if (Cast<
|
|
94
|
-
|
|
95
|
-
std::cerr << ind << "
|
|
353
|
+
} else if (Cast<SelectorList>(node)) {
|
|
354
|
+
SelectorList* selector = Cast<SelectorList>(node);
|
|
355
|
+
std::cerr << ind << "SelectorList " << selector;
|
|
96
356
|
std::cerr << " (" << pstate_source_position(node) << ")";
|
|
97
357
|
std::cerr << " <" << selector->hash() << ">";
|
|
98
|
-
std::cerr <<
|
|
99
|
-
std::cerr << (selector->
|
|
100
|
-
std::cerr << (selector->
|
|
101
|
-
std::cerr << (selector->is_optional() ? " [is_optional]": " -");
|
|
102
|
-
std::cerr << (selector->has_parent_ref() ? " [has-parent]": " -");
|
|
103
|
-
std::cerr << (selector->has_line_break() ? " [line-break]": " -");
|
|
104
|
-
std::cerr << (selector->has_line_feed() ? " [line-feed]": " -");
|
|
358
|
+
std::cerr << (selector->is_invisible() ? " [is_invisible]" : " -");
|
|
359
|
+
std::cerr << (selector->isInvisible() ? " [isInvisible]" : " -");
|
|
360
|
+
std::cerr << (selector->has_real_parent_ref() ? " [real-parent]": " -");
|
|
105
361
|
std::cerr << std::endl;
|
|
106
|
-
debug_ast(selector->schema(), ind + "#{} ");
|
|
107
362
|
|
|
108
|
-
for(const
|
|
363
|
+
for(const ComplexSelector_Obj& i : selector->elements()) { debug_ast(i, ind + " ", env); }
|
|
109
364
|
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
365
|
+
} else if (Cast<ComplexSelector>(node)) {
|
|
366
|
+
ComplexSelector* selector = Cast<ComplexSelector>(node);
|
|
367
|
+
std::cerr << ind << "ComplexSelector " << selector
|
|
368
|
+
<< " (" << pstate_source_position(node) << ")"
|
|
369
|
+
<< " <" << selector->hash() << ">"
|
|
370
|
+
<< " [" << (selector->chroots() ? "CHROOT" : "CONNECT") << "]"
|
|
371
|
+
<< " [length:" << longToHex(selector->length()) << "]"
|
|
372
|
+
<< " [weight:" << longToHex(selector->specificity()) << "]"
|
|
373
|
+
<< (selector->is_invisible() ? " [is_invisible]" : " -")
|
|
374
|
+
<< (selector->isInvisible() ? " [isInvisible]" : " -")
|
|
375
|
+
<< (selector->hasPreLineFeed() ? " [hasPreLineFeed]" : " -")
|
|
113
376
|
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
377
|
+
// << (selector->is_invisible() ? " [INVISIBLE]": " -")
|
|
378
|
+
// << (selector->has_placeholder() ? " [PLACEHOLDER]": " -")
|
|
379
|
+
// << (selector->is_optional() ? " [is_optional]": " -")
|
|
380
|
+
<< (selector->has_real_parent_ref() ? " [real parent]": " -")
|
|
381
|
+
// << (selector->has_line_feed() ? " [line-feed]": " -")
|
|
382
|
+
// << (selector->has_line_break() ? " [line-break]": " -")
|
|
383
|
+
<< " -- \n";
|
|
384
|
+
|
|
385
|
+
for(const SelectorComponentObj& i : selector->elements()) { debug_ast(i, ind + " ", env); }
|
|
123
386
|
|
|
124
|
-
} else if (Cast<
|
|
125
|
-
|
|
126
|
-
std::cerr << ind << "
|
|
387
|
+
} else if (Cast<SelectorCombinator>(node)) {
|
|
388
|
+
SelectorCombinator* selector = Cast<SelectorCombinator>(node);
|
|
389
|
+
std::cerr << ind << "SelectorCombinator " << selector
|
|
127
390
|
<< " (" << pstate_source_position(node) << ")"
|
|
128
391
|
<< " <" << selector->hash() << ">"
|
|
129
|
-
<< " [length:" << longToHex(selector->length()) << "]"
|
|
130
392
|
<< " [weight:" << longToHex(selector->specificity()) << "]"
|
|
131
|
-
<<
|
|
132
|
-
<< (selector->is_invisible() ? " [INVISIBLE]": " -")
|
|
133
|
-
<< (selector->has_placeholder() ? " [PLACEHOLDER]": " -")
|
|
134
|
-
<< (selector->is_optional() ? " [is_optional]": " -")
|
|
135
|
-
<< (selector->has_parent_ref() ? " [has parent]": " -")
|
|
136
|
-
<< (selector->has_line_feed() ? " [line-feed]": " -")
|
|
137
|
-
<< (selector->has_line_break() ? " [line-break]": " -")
|
|
393
|
+
<< (selector->has_real_parent_ref() ? " [real parent]": " -")
|
|
138
394
|
<< " -- ";
|
|
139
|
-
|
|
395
|
+
|
|
396
|
+
sass::string del;
|
|
140
397
|
switch (selector->combinator()) {
|
|
141
|
-
case
|
|
142
|
-
case
|
|
143
|
-
case
|
|
144
|
-
case Complex_Selector::ANCESTOR_OF: del = " "; break;
|
|
145
|
-
case Complex_Selector::REFERENCE: del = "//"; break;
|
|
398
|
+
case SelectorCombinator::CHILD: del = ">"; break;
|
|
399
|
+
case SelectorCombinator::GENERAL: del = "~"; break;
|
|
400
|
+
case SelectorCombinator::ADJACENT: del = "+"; break;
|
|
146
401
|
}
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
std::cerr << ind << " |" << del << "| {trailing op}" << std::endl;
|
|
154
|
-
}
|
|
155
|
-
ComplexSelectorSet set = selector->sources();
|
|
156
|
-
// debug_sources_set(set, ind + " @--> ");
|
|
157
|
-
} else if (Cast<Compound_Selector>(node)) {
|
|
158
|
-
Compound_Selector_Ptr selector = Cast<Compound_Selector>(node);
|
|
159
|
-
std::cerr << ind << "Compound_Selector " << selector;
|
|
402
|
+
|
|
403
|
+
std::cerr << "[" << del << "]" << "\n";
|
|
404
|
+
|
|
405
|
+
} else if (Cast<CompoundSelector>(node)) {
|
|
406
|
+
CompoundSelector* selector = Cast<CompoundSelector>(node);
|
|
407
|
+
std::cerr << ind << "CompoundSelector " << selector;
|
|
160
408
|
std::cerr << " (" << pstate_source_position(node) << ")";
|
|
161
409
|
std::cerr << " <" << selector->hash() << ">";
|
|
410
|
+
std::cerr << (selector->hasRealParent() ? " [REAL PARENT]" : "") << ">";
|
|
162
411
|
std::cerr << " [weight:" << longToHex(selector->specificity()) << "]";
|
|
163
|
-
std::cerr <<
|
|
164
|
-
std::cerr << (selector->
|
|
165
|
-
std::cerr << (selector->
|
|
166
|
-
std::cerr <<
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
Wrapped_Selector_Ptr selector = Cast<Wrapped_Selector>(node);
|
|
173
|
-
std::cerr << ind << "Wrapped_Selector " << selector;
|
|
412
|
+
std::cerr << (selector->hasPostLineBreak() ? " [hasPostLineBreak]" : " -");
|
|
413
|
+
std::cerr << (selector->is_invisible() ? " [is_invisible]" : " -");
|
|
414
|
+
std::cerr << (selector->isInvisible() ? " [isInvisible]" : " -");
|
|
415
|
+
std::cerr << "\n";
|
|
416
|
+
for(const SimpleSelector_Obj& i : selector->elements()) { debug_ast(i, ind + " ", env); }
|
|
417
|
+
|
|
418
|
+
} else if (Cast<Parent_Reference>(node)) {
|
|
419
|
+
Parent_Reference* selector = Cast<Parent_Reference>(node);
|
|
420
|
+
std::cerr << ind << "Parent_Reference " << selector;
|
|
174
421
|
std::cerr << " (" << pstate_source_position(node) << ")";
|
|
175
422
|
std::cerr << " <" << selector->hash() << ">";
|
|
176
|
-
std::cerr << " <<" << selector->ns_name() << ">>";
|
|
177
|
-
std::cerr << (selector->is_optional() ? " [is_optional]": " -");
|
|
178
|
-
std::cerr << (selector->has_parent_ref() ? " [has-parent]": " -");
|
|
179
|
-
std::cerr << (selector->has_line_break() ? " [line-break]": " -");
|
|
180
|
-
std::cerr << (selector->has_line_feed() ? " [line-feed]": " -");
|
|
181
423
|
std::cerr << std::endl;
|
|
182
|
-
|
|
183
|
-
} else if (Cast<
|
|
184
|
-
|
|
185
|
-
std::cerr << ind << "
|
|
424
|
+
|
|
425
|
+
} else if (Cast<PseudoSelector>(node)) {
|
|
426
|
+
PseudoSelector* selector = Cast<PseudoSelector>(node);
|
|
427
|
+
std::cerr << ind << "PseudoSelector " << selector;
|
|
186
428
|
std::cerr << " (" << pstate_source_position(node) << ")";
|
|
187
429
|
std::cerr << " <" << selector->hash() << ">";
|
|
188
430
|
std::cerr << " <<" << selector->ns_name() << ">>";
|
|
189
|
-
std::cerr << (selector->
|
|
190
|
-
std::cerr << (selector->
|
|
191
|
-
std::cerr << (selector->has_line_break() ? " [line-break]": " -");
|
|
192
|
-
std::cerr << (selector->has_line_feed() ? " [line-feed]": " -");
|
|
431
|
+
std::cerr << (selector->isClass() ? " [isClass]": " -");
|
|
432
|
+
std::cerr << (selector->isSyntacticClass() ? " [isSyntacticClass]": " -");
|
|
193
433
|
std::cerr << std::endl;
|
|
194
|
-
debug_ast(selector->
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
434
|
+
debug_ast(selector->argument(), ind + " <= ", env);
|
|
435
|
+
debug_ast(selector->selector(), ind + " || ", env);
|
|
436
|
+
} else if (Cast<AttributeSelector>(node)) {
|
|
437
|
+
AttributeSelector* selector = Cast<AttributeSelector>(node);
|
|
438
|
+
std::cerr << ind << "AttributeSelector " << selector;
|
|
198
439
|
std::cerr << " (" << pstate_source_position(node) << ")";
|
|
199
440
|
std::cerr << " <" << selector->hash() << ">";
|
|
200
441
|
std::cerr << " <<" << selector->ns_name() << ">>";
|
|
201
|
-
std::cerr << (selector->is_optional() ? " [is_optional]": " -");
|
|
202
|
-
std::cerr << (selector->has_parent_ref() ? " [has-parent]": " -");
|
|
203
|
-
std::cerr << (selector->has_line_break() ? " [line-break]": " -");
|
|
204
|
-
std::cerr << (selector->has_line_feed() ? " [line-feed]": " -");
|
|
205
442
|
std::cerr << std::endl;
|
|
206
443
|
debug_ast(selector->value(), ind + "[" + selector->matcher() + "] ", env);
|
|
207
|
-
} else if (Cast<
|
|
208
|
-
|
|
209
|
-
std::cerr << ind << "
|
|
444
|
+
} else if (Cast<ClassSelector>(node)) {
|
|
445
|
+
ClassSelector* selector = Cast<ClassSelector>(node);
|
|
446
|
+
std::cerr << ind << "ClassSelector " << selector;
|
|
210
447
|
std::cerr << " (" << pstate_source_position(node) << ")";
|
|
211
448
|
std::cerr << " <" << selector->hash() << ">";
|
|
212
449
|
std::cerr << " <<" << selector->ns_name() << ">>";
|
|
213
|
-
std::cerr << (selector->is_optional() ? " [is_optional]": " -");
|
|
214
|
-
std::cerr << (selector->has_parent_ref() ? " [has-parent]": " -");
|
|
215
|
-
std::cerr << (selector->has_line_break() ? " [line-break]": " -");
|
|
216
|
-
std::cerr << (selector->has_line_feed() ? " [line-feed]": " -");
|
|
217
450
|
std::cerr << std::endl;
|
|
218
|
-
} else if (Cast<
|
|
219
|
-
|
|
220
|
-
std::cerr << ind << "
|
|
451
|
+
} else if (Cast<IDSelector>(node)) {
|
|
452
|
+
IDSelector* selector = Cast<IDSelector>(node);
|
|
453
|
+
std::cerr << ind << "IDSelector " << selector;
|
|
221
454
|
std::cerr << " (" << pstate_source_position(node) << ")";
|
|
222
455
|
std::cerr << " <" << selector->hash() << ">";
|
|
223
456
|
std::cerr << " <<" << selector->ns_name() << ">>";
|
|
224
|
-
std::cerr << (selector->is_optional() ? " [is_optional]": " -");
|
|
225
|
-
std::cerr << (selector->has_parent_ref() ? " [has-parent]": " -");
|
|
226
|
-
std::cerr << (selector->has_line_break() ? " [line-break]": " -");
|
|
227
|
-
std::cerr << (selector->has_line_feed() ? " [line-feed]": " -");
|
|
228
457
|
std::cerr << std::endl;
|
|
229
|
-
} else if (Cast<
|
|
230
|
-
|
|
231
|
-
std::cerr << ind << "
|
|
458
|
+
} else if (Cast<TypeSelector>(node)) {
|
|
459
|
+
TypeSelector* selector = Cast<TypeSelector>(node);
|
|
460
|
+
std::cerr << ind << "TypeSelector " << selector;
|
|
232
461
|
std::cerr << " (" << pstate_source_position(node) << ")";
|
|
233
462
|
std::cerr << " <" << selector->hash() << ">";
|
|
234
463
|
std::cerr << " <<" << selector->ns_name() << ">>";
|
|
235
|
-
std::cerr << (selector->is_optional() ? " [is_optional]": " -");
|
|
236
|
-
std::cerr << (selector->has_parent_ref() ? " [has-parent]": " -");
|
|
237
|
-
std::cerr << (selector->has_line_break() ? " [line-break]": " -");
|
|
238
|
-
std::cerr << (selector->has_line_feed() ? " [line-feed]": " -");
|
|
239
|
-
std::cerr << " <" << prettyprint(selector->pstate().token.ws_before()) << ">";
|
|
240
464
|
std::cerr << std::endl;
|
|
241
|
-
} else if (Cast<
|
|
465
|
+
} else if (Cast<PlaceholderSelector>(node)) {
|
|
242
466
|
|
|
243
|
-
|
|
244
|
-
std::cerr << ind << "
|
|
467
|
+
PlaceholderSelector* selector = Cast<PlaceholderSelector>(node);
|
|
468
|
+
std::cerr << ind << "PlaceholderSelector [" << selector->ns_name() << "] " << selector;
|
|
245
469
|
std::cerr << " (" << pstate_source_position(selector) << ")"
|
|
246
470
|
<< " <" << selector->hash() << ">"
|
|
247
|
-
<<
|
|
248
|
-
<< (selector->is_optional() ? " [is_optional]": " -")
|
|
249
|
-
<< (selector->has_line_break() ? " [line-break]": " -")
|
|
250
|
-
<< (selector->has_line_feed() ? " [line-feed]": " -")
|
|
471
|
+
<< (selector->isInvisible() ? " [isInvisible]" : " -")
|
|
251
472
|
<< std::endl;
|
|
252
473
|
|
|
253
|
-
} else if (Cast<
|
|
254
|
-
|
|
255
|
-
std::cerr << ind << "
|
|
474
|
+
} else if (Cast<SimpleSelector>(node)) {
|
|
475
|
+
SimpleSelector* selector = Cast<SimpleSelector>(node);
|
|
476
|
+
std::cerr << ind << "SimpleSelector " << selector;
|
|
256
477
|
std::cerr << " (" << pstate_source_position(node) << ")";
|
|
257
|
-
std::cerr << (selector->has_line_break() ? " [line-break]": " -") << (selector->has_line_feed() ? " [line-feed]": " -") << std::endl;
|
|
258
478
|
|
|
259
479
|
} else if (Cast<Selector_Schema>(node)) {
|
|
260
|
-
|
|
480
|
+
Selector_Schema* selector = Cast<Selector_Schema>(node);
|
|
261
481
|
std::cerr << ind << "Selector_Schema " << selector;
|
|
262
482
|
std::cerr << " (" << pstate_source_position(node) << ")"
|
|
263
|
-
<< " [@media:" << selector->media_block() << "]"
|
|
264
483
|
<< (selector->connect_parent() ? " [connect-parent]": " -")
|
|
265
484
|
<< std::endl;
|
|
266
485
|
|
|
@@ -268,15 +487,13 @@ inline void debug_ast(AST_Node_Ptr node, std::string ind, Env* env)
|
|
|
268
487
|
// for(auto i : selector->elements()) { debug_ast(i, ind + " ", env); }
|
|
269
488
|
|
|
270
489
|
} else if (Cast<Selector>(node)) {
|
|
271
|
-
|
|
490
|
+
Selector* selector = Cast<Selector>(node);
|
|
272
491
|
std::cerr << ind << "Selector " << selector;
|
|
273
|
-
std::cerr << " (" << pstate_source_position(node) << ")"
|
|
274
|
-
std::cerr << (selector->has_line_break() ? " [line-break]": " -")
|
|
275
|
-
<< (selector->has_line_feed() ? " [line-feed]": " -")
|
|
492
|
+
std::cerr << " (" << pstate_source_position(node) << ")"
|
|
276
493
|
<< std::endl;
|
|
277
494
|
|
|
278
495
|
} else if (Cast<Media_Query_Expression>(node)) {
|
|
279
|
-
|
|
496
|
+
Media_Query_Expression* block = Cast<Media_Query_Expression>(node);
|
|
280
497
|
std::cerr << ind << "Media_Query_Expression " << block;
|
|
281
498
|
std::cerr << " (" << pstate_source_position(node) << ")";
|
|
282
499
|
std::cerr << (block->is_interpolated() ? " [is_interpolated]": " -")
|
|
@@ -285,7 +502,7 @@ inline void debug_ast(AST_Node_Ptr node, std::string ind, Env* env)
|
|
|
285
502
|
debug_ast(block->value(), ind + " value) ");
|
|
286
503
|
|
|
287
504
|
} else if (Cast<Media_Query>(node)) {
|
|
288
|
-
|
|
505
|
+
Media_Query* block = Cast<Media_Query>(node);
|
|
289
506
|
std::cerr << ind << "Media_Query " << block;
|
|
290
507
|
std::cerr << " (" << pstate_source_position(node) << ")";
|
|
291
508
|
std::cerr << (block->is_negated() ? " [is_negated]": " -")
|
|
@@ -293,81 +510,100 @@ inline void debug_ast(AST_Node_Ptr node, std::string ind, Env* env)
|
|
|
293
510
|
<< std::endl;
|
|
294
511
|
debug_ast(block->media_type(), ind + " ");
|
|
295
512
|
for(const auto& i : block->elements()) { debug_ast(i, ind + " ", env); }
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
std::cerr << ind << "
|
|
300
|
-
std::cerr << " (" << pstate_source_position(
|
|
301
|
-
std::cerr << " " <<
|
|
302
|
-
debug_ast(
|
|
303
|
-
|
|
304
|
-
}
|
|
305
|
-
|
|
306
|
-
|
|
513
|
+
}
|
|
514
|
+
else if (Cast<MediaRule>(node)) {
|
|
515
|
+
MediaRule* rule = Cast<MediaRule>(node);
|
|
516
|
+
std::cerr << ind << "MediaRule " << rule;
|
|
517
|
+
std::cerr << " (" << pstate_source_position(rule) << ")";
|
|
518
|
+
std::cerr << " " << rule->tabs() << std::endl;
|
|
519
|
+
debug_ast(rule->schema(), ind + " =@ ");
|
|
520
|
+
debug_ast(rule->block(), ind + " ");
|
|
521
|
+
}
|
|
522
|
+
else if (Cast<CssMediaRule>(node)) {
|
|
523
|
+
CssMediaRule* rule = Cast<CssMediaRule>(node);
|
|
524
|
+
std::cerr << ind << "CssMediaRule " << rule;
|
|
525
|
+
std::cerr << " (" << pstate_source_position(rule) << ")";
|
|
526
|
+
std::cerr << " " << rule->tabs() << std::endl;
|
|
527
|
+
for (auto item : rule->elements()) {
|
|
528
|
+
debug_ast(item, ind + " == ");
|
|
529
|
+
}
|
|
530
|
+
debug_ast(rule->block(), ind + " ");
|
|
531
|
+
}
|
|
532
|
+
else if (Cast<CssMediaQuery>(node)) {
|
|
533
|
+
CssMediaQuery* query = Cast<CssMediaQuery>(node);
|
|
534
|
+
std::cerr << ind << "CssMediaQuery " << query;
|
|
535
|
+
std::cerr << " (" << pstate_source_position(query) << ")";
|
|
536
|
+
std::cerr << " [" << (query->modifier()) << "] ";
|
|
537
|
+
std::cerr << " [" << (query->type()) << "] ";
|
|
538
|
+
std::cerr << " " << debug_vec(query->features());
|
|
539
|
+
std::cerr << std::endl;
|
|
540
|
+
} else if (Cast<SupportsRule>(node)) {
|
|
541
|
+
SupportsRule* block = Cast<SupportsRule>(node);
|
|
542
|
+
std::cerr << ind << "SupportsRule " << block;
|
|
307
543
|
std::cerr << " (" << pstate_source_position(node) << ")";
|
|
308
544
|
std::cerr << " " << block->tabs() << std::endl;
|
|
309
545
|
debug_ast(block->condition(), ind + " =@ ");
|
|
310
546
|
debug_ast(block->block(), ind + " <>");
|
|
311
|
-
} else if (Cast<
|
|
312
|
-
|
|
313
|
-
std::cerr << ind << "
|
|
547
|
+
} else if (Cast<SupportsOperation>(node)) {
|
|
548
|
+
SupportsOperation* block = Cast<SupportsOperation>(node);
|
|
549
|
+
std::cerr << ind << "SupportsOperation " << block;
|
|
314
550
|
std::cerr << " (" << pstate_source_position(node) << ")"
|
|
315
551
|
<< std::endl;
|
|
316
552
|
debug_ast(block->left(), ind + " left) ");
|
|
317
553
|
debug_ast(block->right(), ind + " right) ");
|
|
318
|
-
} else if (Cast<
|
|
319
|
-
|
|
320
|
-
std::cerr << ind << "
|
|
554
|
+
} else if (Cast<SupportsNegation>(node)) {
|
|
555
|
+
SupportsNegation* block = Cast<SupportsNegation>(node);
|
|
556
|
+
std::cerr << ind << "SupportsNegation " << block;
|
|
321
557
|
std::cerr << " (" << pstate_source_position(node) << ")"
|
|
322
558
|
<< std::endl;
|
|
323
559
|
debug_ast(block->condition(), ind + " condition) ");
|
|
324
560
|
} else if (Cast<At_Root_Query>(node)) {
|
|
325
|
-
|
|
561
|
+
At_Root_Query* block = Cast<At_Root_Query>(node);
|
|
326
562
|
std::cerr << ind << "At_Root_Query " << block;
|
|
327
563
|
std::cerr << " (" << pstate_source_position(node) << ")"
|
|
328
564
|
<< std::endl;
|
|
329
565
|
debug_ast(block->feature(), ind + " feature) ");
|
|
330
566
|
debug_ast(block->value(), ind + " value) ");
|
|
331
|
-
} else if (Cast<
|
|
332
|
-
|
|
333
|
-
std::cerr << ind << "
|
|
567
|
+
} else if (Cast<SupportsDeclaration>(node)) {
|
|
568
|
+
SupportsDeclaration* block = Cast<SupportsDeclaration>(node);
|
|
569
|
+
std::cerr << ind << "SupportsDeclaration " << block;
|
|
334
570
|
std::cerr << " (" << pstate_source_position(node) << ")"
|
|
335
571
|
<< std::endl;
|
|
336
572
|
debug_ast(block->feature(), ind + " feature) ");
|
|
337
573
|
debug_ast(block->value(), ind + " value) ");
|
|
338
574
|
} else if (Cast<Block>(node)) {
|
|
339
|
-
|
|
575
|
+
Block* root_block = Cast<Block>(node);
|
|
340
576
|
std::cerr << ind << "Block " << root_block;
|
|
341
577
|
std::cerr << " (" << pstate_source_position(node) << ")";
|
|
342
578
|
if (root_block->is_root()) std::cerr << " [root]";
|
|
579
|
+
if (root_block->isInvisible()) std::cerr << " [isInvisible]";
|
|
343
580
|
std::cerr << " " << root_block->tabs() << std::endl;
|
|
344
581
|
for(const Statement_Obj& i : root_block->elements()) { debug_ast(i, ind + " ", env); }
|
|
345
|
-
} else if (Cast<
|
|
346
|
-
|
|
347
|
-
std::cerr << ind << "
|
|
582
|
+
} else if (Cast<WarningRule>(node)) {
|
|
583
|
+
WarningRule* block = Cast<WarningRule>(node);
|
|
584
|
+
std::cerr << ind << "WarningRule " << block;
|
|
348
585
|
std::cerr << " (" << pstate_source_position(node) << ")";
|
|
349
586
|
std::cerr << " " << block->tabs() << std::endl;
|
|
350
587
|
debug_ast(block->message(), ind + " : ");
|
|
351
|
-
} else if (Cast<
|
|
352
|
-
|
|
353
|
-
std::cerr << ind << "
|
|
588
|
+
} else if (Cast<ErrorRule>(node)) {
|
|
589
|
+
ErrorRule* block = Cast<ErrorRule>(node);
|
|
590
|
+
std::cerr << ind << "ErrorRule " << block;
|
|
354
591
|
std::cerr << " (" << pstate_source_position(node) << ")";
|
|
355
592
|
std::cerr << " " << block->tabs() << std::endl;
|
|
356
|
-
} else if (Cast<
|
|
357
|
-
|
|
358
|
-
std::cerr << ind << "
|
|
593
|
+
} else if (Cast<DebugRule>(node)) {
|
|
594
|
+
DebugRule* block = Cast<DebugRule>(node);
|
|
595
|
+
std::cerr << ind << "DebugRule " << block;
|
|
359
596
|
std::cerr << " (" << pstate_source_position(node) << ")";
|
|
360
597
|
std::cerr << " " << block->tabs() << std::endl;
|
|
361
598
|
debug_ast(block->value(), ind + " ");
|
|
362
599
|
} else if (Cast<Comment>(node)) {
|
|
363
|
-
|
|
600
|
+
Comment* block = Cast<Comment>(node);
|
|
364
601
|
std::cerr << ind << "Comment " << block;
|
|
365
602
|
std::cerr << " (" << pstate_source_position(node) << ")";
|
|
366
|
-
std::cerr << " " << block->tabs() <<
|
|
367
|
-
" <" << prettyprint(block->pstate().token.ws_before()) << ">" << std::endl;
|
|
603
|
+
std::cerr << " " << block->tabs() << std::endl;
|
|
368
604
|
debug_ast(block->text(), ind + "// ", env);
|
|
369
605
|
} else if (Cast<If>(node)) {
|
|
370
|
-
|
|
606
|
+
If* block = Cast<If>(node);
|
|
371
607
|
std::cerr << ind << "If " << block;
|
|
372
608
|
std::cerr << " (" << pstate_source_position(node) << ")";
|
|
373
609
|
std::cerr << " " << block->tabs() << std::endl;
|
|
@@ -375,44 +611,45 @@ inline void debug_ast(AST_Node_Ptr node, std::string ind, Env* env)
|
|
|
375
611
|
debug_ast(block->block(), ind + " <>");
|
|
376
612
|
debug_ast(block->alternative(), ind + " ><");
|
|
377
613
|
} else if (Cast<Return>(node)) {
|
|
378
|
-
|
|
614
|
+
Return* block = Cast<Return>(node);
|
|
379
615
|
std::cerr << ind << "Return " << block;
|
|
380
616
|
std::cerr << " (" << pstate_source_position(node) << ")";
|
|
381
|
-
std::cerr << " " << block->tabs()
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
617
|
+
std::cerr << " " << block->tabs();
|
|
618
|
+
std::cerr << " [" << block->value()->to_string() << "]" << std::endl;
|
|
619
|
+
} else if (Cast<ExtendRule>(node)) {
|
|
620
|
+
ExtendRule* block = Cast<ExtendRule>(node);
|
|
621
|
+
std::cerr << ind << "ExtendRule " << block;
|
|
385
622
|
std::cerr << " (" << pstate_source_position(node) << ")";
|
|
386
623
|
std::cerr << " " << block->tabs() << std::endl;
|
|
387
624
|
debug_ast(block->selector(), ind + "-> ", env);
|
|
388
625
|
} else if (Cast<Content>(node)) {
|
|
389
|
-
|
|
626
|
+
Content* block = Cast<Content>(node);
|
|
390
627
|
std::cerr << ind << "Content " << block;
|
|
391
628
|
std::cerr << " (" << pstate_source_position(node) << ")";
|
|
392
|
-
std::cerr << " [@media:" << block->media_block() << "]";
|
|
393
629
|
std::cerr << " " << block->tabs() << std::endl;
|
|
630
|
+
debug_ast(block->arguments(), ind + " args: ", env);
|
|
394
631
|
} else if (Cast<Import_Stub>(node)) {
|
|
395
|
-
|
|
632
|
+
Import_Stub* block = Cast<Import_Stub>(node);
|
|
396
633
|
std::cerr << ind << "Import_Stub " << block;
|
|
397
634
|
std::cerr << " (" << pstate_source_position(node) << ")";
|
|
398
635
|
std::cerr << " [" << block->imp_path() << "] ";
|
|
399
636
|
std::cerr << " " << block->tabs() << std::endl;
|
|
400
637
|
} else if (Cast<Import>(node)) {
|
|
401
|
-
|
|
638
|
+
Import* block = Cast<Import>(node);
|
|
402
639
|
std::cerr << ind << "Import " << block;
|
|
403
640
|
std::cerr << " (" << pstate_source_position(node) << ")";
|
|
404
641
|
std::cerr << " " << block->tabs() << std::endl;
|
|
405
|
-
//
|
|
642
|
+
// sass::vector<sass::string> files_;
|
|
406
643
|
for (auto imp : block->urls()) debug_ast(imp, ind + "@: ", env);
|
|
407
644
|
debug_ast(block->import_queries(), ind + "@@ ");
|
|
408
645
|
} else if (Cast<Assignment>(node)) {
|
|
409
|
-
|
|
646
|
+
Assignment* block = Cast<Assignment>(node);
|
|
410
647
|
std::cerr << ind << "Assignment " << block;
|
|
411
648
|
std::cerr << " (" << pstate_source_position(node) << ")";
|
|
412
649
|
std::cerr << " <<" << block->variable() << ">> " << block->tabs() << std::endl;
|
|
413
650
|
debug_ast(block->value(), ind + "=", env);
|
|
414
651
|
} else if (Cast<Declaration>(node)) {
|
|
415
|
-
|
|
652
|
+
Declaration* block = Cast<Declaration>(node);
|
|
416
653
|
std::cerr << ind << "Declaration " << block;
|
|
417
654
|
std::cerr << " (" << pstate_source_position(node) << ")";
|
|
418
655
|
std::cerr << " [is_custom_property: " << block->is_custom_property() << "] ";
|
|
@@ -421,40 +658,40 @@ inline void debug_ast(AST_Node_Ptr node, std::string ind, Env* env)
|
|
|
421
658
|
debug_ast(block->value(), ind + " value: ", env);
|
|
422
659
|
debug_ast(block->block(), ind + " ", env);
|
|
423
660
|
} else if (Cast<Keyframe_Rule>(node)) {
|
|
424
|
-
|
|
425
|
-
std::cerr << ind << "Keyframe_Rule " <<
|
|
661
|
+
Keyframe_Rule* ParentStatement = Cast<Keyframe_Rule>(node);
|
|
662
|
+
std::cerr << ind << "Keyframe_Rule " << ParentStatement;
|
|
426
663
|
std::cerr << " (" << pstate_source_position(node) << ")";
|
|
427
|
-
std::cerr << " " <<
|
|
428
|
-
if (
|
|
429
|
-
if (
|
|
430
|
-
} else if (Cast<
|
|
431
|
-
|
|
432
|
-
std::cerr << ind << "
|
|
664
|
+
std::cerr << " " << ParentStatement->tabs() << std::endl;
|
|
665
|
+
if (ParentStatement->name()) debug_ast(ParentStatement->name(), ind + "@");
|
|
666
|
+
if (ParentStatement->block()) for(const Statement_Obj& i : ParentStatement->block()->elements()) { debug_ast(i, ind + " ", env); }
|
|
667
|
+
} else if (Cast<AtRule>(node)) {
|
|
668
|
+
AtRule* block = Cast<AtRule>(node);
|
|
669
|
+
std::cerr << ind << "AtRule " << block;
|
|
433
670
|
std::cerr << " (" << pstate_source_position(node) << ")";
|
|
434
671
|
std::cerr << " [" << block->keyword() << "] " << block->tabs() << std::endl;
|
|
435
672
|
debug_ast(block->selector(), ind + "~", env);
|
|
436
673
|
debug_ast(block->value(), ind + "+", env);
|
|
437
674
|
if (block->block()) for(const Statement_Obj& i : block->block()->elements()) { debug_ast(i, ind + " ", env); }
|
|
438
|
-
} else if (Cast<
|
|
439
|
-
|
|
440
|
-
std::cerr << ind << "
|
|
675
|
+
} else if (Cast<EachRule>(node)) {
|
|
676
|
+
EachRule* block = Cast<EachRule>(node);
|
|
677
|
+
std::cerr << ind << "EachRule " << block;
|
|
441
678
|
std::cerr << " (" << pstate_source_position(node) << ")";
|
|
442
679
|
std::cerr << " " << block->tabs() << std::endl;
|
|
443
680
|
if (block->block()) for(const Statement_Obj& i : block->block()->elements()) { debug_ast(i, ind + " ", env); }
|
|
444
|
-
} else if (Cast<
|
|
445
|
-
|
|
446
|
-
std::cerr << ind << "
|
|
681
|
+
} else if (Cast<ForRule>(node)) {
|
|
682
|
+
ForRule* block = Cast<ForRule>(node);
|
|
683
|
+
std::cerr << ind << "ForRule " << block;
|
|
447
684
|
std::cerr << " (" << pstate_source_position(node) << ")";
|
|
448
685
|
std::cerr << " " << block->tabs() << std::endl;
|
|
449
686
|
if (block->block()) for(const Statement_Obj& i : block->block()->elements()) { debug_ast(i, ind + " ", env); }
|
|
450
|
-
} else if (Cast<
|
|
451
|
-
|
|
452
|
-
std::cerr << ind << "
|
|
687
|
+
} else if (Cast<WhileRule>(node)) {
|
|
688
|
+
WhileRule* block = Cast<WhileRule>(node);
|
|
689
|
+
std::cerr << ind << "WhileRule " << block;
|
|
453
690
|
std::cerr << " (" << pstate_source_position(node) << ")";
|
|
454
691
|
std::cerr << " " << block->tabs() << std::endl;
|
|
455
692
|
if (block->block()) for(const Statement_Obj& i : block->block()->elements()) { debug_ast(i, ind + " ", env); }
|
|
456
693
|
} else if (Cast<Definition>(node)) {
|
|
457
|
-
|
|
694
|
+
Definition* block = Cast<Definition>(node);
|
|
458
695
|
std::cerr << ind << "Definition " << block;
|
|
459
696
|
std::cerr << " (" << pstate_source_position(node) << ")";
|
|
460
697
|
std::cerr << " [name: " << block->name() << "] ";
|
|
@@ -466,15 +703,16 @@ inline void debug_ast(AST_Node_Ptr node, std::string ind, Env* env)
|
|
|
466
703
|
debug_ast(block->parameters(), ind + " params: ", env);
|
|
467
704
|
if (block->block()) debug_ast(block->block(), ind + " ", env);
|
|
468
705
|
} else if (Cast<Mixin_Call>(node)) {
|
|
469
|
-
|
|
706
|
+
Mixin_Call* block = Cast<Mixin_Call>(node);
|
|
470
707
|
std::cerr << ind << "Mixin_Call " << block << " " << block->tabs();
|
|
471
708
|
std::cerr << " (" << pstate_source_position(block) << ")";
|
|
472
709
|
std::cerr << " [" << block->name() << "]";
|
|
473
710
|
std::cerr << " [has_content: " << block->has_content() << "] " << std::endl;
|
|
474
|
-
debug_ast(block->arguments(), ind + " args: ");
|
|
711
|
+
debug_ast(block->arguments(), ind + " args: ", env);
|
|
712
|
+
debug_ast(block->block_parameters(), ind + " block_params: ", env);
|
|
475
713
|
if (block->block()) debug_ast(block->block(), ind + " ", env);
|
|
476
|
-
} else if (
|
|
477
|
-
std::cerr << ind << "
|
|
714
|
+
} else if (StyleRule* ruleset = Cast<StyleRule>(node)) {
|
|
715
|
+
std::cerr << ind << "StyleRule " << ruleset;
|
|
478
716
|
std::cerr << " (" << pstate_source_position(node) << ")";
|
|
479
717
|
std::cerr << " [indent: " << ruleset->tabs() << "]";
|
|
480
718
|
std::cerr << (ruleset->is_invisible() ? " [INVISIBLE]" : "");
|
|
@@ -483,30 +721,22 @@ inline void debug_ast(AST_Node_Ptr node, std::string ind, Env* env)
|
|
|
483
721
|
debug_ast(ruleset->selector(), ind + ">");
|
|
484
722
|
debug_ast(ruleset->block(), ind + " ");
|
|
485
723
|
} else if (Cast<Block>(node)) {
|
|
486
|
-
|
|
724
|
+
Block* block = Cast<Block>(node);
|
|
487
725
|
std::cerr << ind << "Block " << block;
|
|
488
726
|
std::cerr << " (" << pstate_source_position(node) << ")";
|
|
489
727
|
std::cerr << (block->is_invisible() ? " [INVISIBLE]" : "");
|
|
490
728
|
std::cerr << " [indent: " << block->tabs() << "]" << std::endl;
|
|
491
729
|
for(const Statement_Obj& i : block->elements()) { debug_ast(i, ind + " ", env); }
|
|
492
730
|
} else if (Cast<Variable>(node)) {
|
|
493
|
-
|
|
731
|
+
Variable* expression = Cast<Variable>(node);
|
|
494
732
|
std::cerr << ind << "Variable " << expression;
|
|
495
733
|
std::cerr << " [interpolant: " << expression->is_interpolant() << "] ";
|
|
496
734
|
std::cerr << " (" << pstate_source_position(node) << ")";
|
|
497
735
|
std::cerr << " [" << expression->name() << "]" << std::endl;
|
|
498
|
-
|
|
736
|
+
sass::string name(expression->name());
|
|
499
737
|
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
738
|
} else if (Cast<Function_Call>(node)) {
|
|
509
|
-
|
|
739
|
+
Function_Call* expression = Cast<Function_Call>(node);
|
|
510
740
|
std::cerr << ind << "Function_Call " << expression;
|
|
511
741
|
std::cerr << " [interpolant: " << expression->is_interpolant() << "] ";
|
|
512
742
|
std::cerr << " (" << pstate_source_position(node) << ")";
|
|
@@ -518,14 +748,14 @@ inline void debug_ast(AST_Node_Ptr node, std::string ind, Env* env)
|
|
|
518
748
|
debug_ast(expression->arguments(), ind + " args: ", env);
|
|
519
749
|
debug_ast(expression->func(), ind + " func: ", env);
|
|
520
750
|
} else if (Cast<Function>(node)) {
|
|
521
|
-
|
|
751
|
+
Function* expression = Cast<Function>(node);
|
|
522
752
|
std::cerr << ind << "Function " << expression;
|
|
523
753
|
std::cerr << " (" << pstate_source_position(node) << ")";
|
|
524
754
|
if (expression->is_css()) std::cerr << " [css]";
|
|
525
755
|
std::cerr << std::endl;
|
|
526
756
|
debug_ast(expression->definition(), ind + " definition: ", env);
|
|
527
757
|
} else if (Cast<Arguments>(node)) {
|
|
528
|
-
|
|
758
|
+
Arguments* expression = Cast<Arguments>(node);
|
|
529
759
|
std::cerr << ind << "Arguments " << expression;
|
|
530
760
|
if (expression->is_delayed()) std::cerr << " [delayed]";
|
|
531
761
|
std::cerr << " (" << pstate_source_position(node) << ")";
|
|
@@ -535,7 +765,7 @@ inline void debug_ast(AST_Node_Ptr node, std::string ind, Env* env)
|
|
|
535
765
|
std::cerr << std::endl;
|
|
536
766
|
for(const Argument_Obj& i : expression->elements()) { debug_ast(i, ind + " ", env); }
|
|
537
767
|
} else if (Cast<Argument>(node)) {
|
|
538
|
-
|
|
768
|
+
Argument* expression = Cast<Argument>(node);
|
|
539
769
|
std::cerr << ind << "Argument " << expression;
|
|
540
770
|
std::cerr << " (" << pstate_source_position(node) << ")";
|
|
541
771
|
std::cerr << " [" << expression->value().ptr() << "]";
|
|
@@ -544,7 +774,7 @@ inline void debug_ast(AST_Node_Ptr node, std::string ind, Env* env)
|
|
|
544
774
|
std::cerr << " [keyword: " << expression->is_keyword_argument() << "] " << std::endl;
|
|
545
775
|
debug_ast(expression->value(), ind + " value: ", env);
|
|
546
776
|
} else if (Cast<Parameters>(node)) {
|
|
547
|
-
|
|
777
|
+
Parameters* expression = Cast<Parameters>(node);
|
|
548
778
|
std::cerr << ind << "Parameters " << expression;
|
|
549
779
|
std::cerr << " (" << pstate_source_position(node) << ")";
|
|
550
780
|
std::cerr << " [has_optional: " << expression->has_optional_parameters() << "] ";
|
|
@@ -552,14 +782,14 @@ inline void debug_ast(AST_Node_Ptr node, std::string ind, Env* env)
|
|
|
552
782
|
std::cerr << std::endl;
|
|
553
783
|
for(const Parameter_Obj& i : expression->elements()) { debug_ast(i, ind + " ", env); }
|
|
554
784
|
} else if (Cast<Parameter>(node)) {
|
|
555
|
-
|
|
785
|
+
Parameter* expression = Cast<Parameter>(node);
|
|
556
786
|
std::cerr << ind << "Parameter " << expression;
|
|
557
787
|
std::cerr << " (" << pstate_source_position(node) << ")";
|
|
558
788
|
std::cerr << " [name: " << expression->name() << "] ";
|
|
559
789
|
std::cerr << " [default: " << expression->default_value().ptr() << "] ";
|
|
560
790
|
std::cerr << " [rest: " << expression->is_rest_parameter() << "] " << std::endl;
|
|
561
791
|
} else if (Cast<Unary_Expression>(node)) {
|
|
562
|
-
|
|
792
|
+
Unary_Expression* expression = Cast<Unary_Expression>(node);
|
|
563
793
|
std::cerr << ind << "Unary_Expression " << expression;
|
|
564
794
|
std::cerr << " [interpolant: " << expression->is_interpolant() << "] ";
|
|
565
795
|
std::cerr << " [delayed: " << expression->is_delayed() << "] ";
|
|
@@ -567,7 +797,7 @@ inline void debug_ast(AST_Node_Ptr node, std::string ind, Env* env)
|
|
|
567
797
|
std::cerr << " [" << expression->type() << "]" << std::endl;
|
|
568
798
|
debug_ast(expression->operand(), ind + " operand: ", env);
|
|
569
799
|
} else if (Cast<Binary_Expression>(node)) {
|
|
570
|
-
|
|
800
|
+
Binary_Expression* expression = Cast<Binary_Expression>(node);
|
|
571
801
|
std::cerr << ind << "Binary_Expression " << expression;
|
|
572
802
|
if (expression->is_interpolant()) std::cerr << " [is interpolant] ";
|
|
573
803
|
if (expression->is_left_interpolant()) std::cerr << " [left interpolant] ";
|
|
@@ -580,7 +810,7 @@ inline void debug_ast(AST_Node_Ptr node, std::string ind, Env* env)
|
|
|
580
810
|
debug_ast(expression->left(), ind + " left: ", env);
|
|
581
811
|
debug_ast(expression->right(), ind + " right: ", env);
|
|
582
812
|
} else if (Cast<Map>(node)) {
|
|
583
|
-
|
|
813
|
+
Map* expression = Cast<Map>(node);
|
|
584
814
|
std::cerr << ind << "Map " << expression;
|
|
585
815
|
std::cerr << " [interpolant: " << expression->is_interpolant() << "] ";
|
|
586
816
|
std::cerr << " (" << pstate_source_position(node) << ")";
|
|
@@ -590,7 +820,7 @@ inline void debug_ast(AST_Node_Ptr node, std::string ind, Env* env)
|
|
|
590
820
|
debug_ast(i.second, ind + " val: ");
|
|
591
821
|
}
|
|
592
822
|
} else if (Cast<List>(node)) {
|
|
593
|
-
|
|
823
|
+
List* expression = Cast<List>(node);
|
|
594
824
|
std::cerr << ind << "List " << expression;
|
|
595
825
|
std::cerr << " (" << pstate_source_position(node) << ")";
|
|
596
826
|
std::cerr << " (" << expression->length() << ") " <<
|
|
@@ -604,51 +834,55 @@ inline void debug_ast(AST_Node_Ptr node, std::string ind, Env* env)
|
|
|
604
834
|
" [hash: " << expression->hash() << "] " <<
|
|
605
835
|
std::endl;
|
|
606
836
|
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
837
|
} else if (Cast<Boolean>(node)) {
|
|
614
|
-
|
|
838
|
+
Boolean* expression = Cast<Boolean>(node);
|
|
615
839
|
std::cerr << ind << "Boolean " << expression;
|
|
616
840
|
std::cerr << " (" << pstate_source_position(node) << ")";
|
|
617
841
|
std::cerr << " [interpolant: " << expression->is_interpolant() << "] ";
|
|
618
842
|
std::cerr << " [" << expression->value() << "]" << std::endl;
|
|
619
|
-
} else if (Cast<
|
|
620
|
-
|
|
843
|
+
} else if (Cast<Color_RGBA>(node)) {
|
|
844
|
+
Color_RGBA* expression = Cast<Color_RGBA>(node);
|
|
621
845
|
std::cerr << ind << "Color " << expression;
|
|
622
846
|
std::cerr << " (" << pstate_source_position(node) << ")";
|
|
847
|
+
std::cerr << " [name: " << expression->disp() << "] ";
|
|
623
848
|
std::cerr << " [delayed: " << expression->is_delayed() << "] ";
|
|
624
849
|
std::cerr << " [interpolant: " << expression->is_interpolant() << "] ";
|
|
625
|
-
std::cerr << " [" << expression->r() << ":" << expression->g() << ":" << expression->b() << "@" << expression->a() << "]" << std::endl;
|
|
850
|
+
std::cerr << " rgba[" << expression->r() << ":" << expression->g() << ":" << expression->b() << "@" << expression->a() << "]" << std::endl;
|
|
851
|
+
} else if (Cast<Color_HSLA>(node)) {
|
|
852
|
+
Color_HSLA* expression = Cast<Color_HSLA>(node);
|
|
853
|
+
std::cerr << ind << "Color " << expression;
|
|
854
|
+
std::cerr << " (" << pstate_source_position(node) << ")";
|
|
855
|
+
std::cerr << " [name: " << expression->disp() << "] ";
|
|
856
|
+
std::cerr << " [delayed: " << expression->is_delayed() << "] ";
|
|
857
|
+
std::cerr << " [interpolant: " << expression->is_interpolant() << "] ";
|
|
858
|
+
std::cerr << " hsla[" << expression->h() << ":" << expression->s() << ":" << expression->l() << "@" << expression->a() << "]" << std::endl;
|
|
626
859
|
} else if (Cast<Number>(node)) {
|
|
627
|
-
|
|
860
|
+
Number* expression = Cast<Number>(node);
|
|
628
861
|
std::cerr << ind << "Number " << expression;
|
|
629
862
|
std::cerr << " (" << pstate_source_position(node) << ")";
|
|
863
|
+
std::cerr << " [delayed: " << expression->is_delayed() << "] ";
|
|
630
864
|
std::cerr << " [interpolant: " << expression->is_interpolant() << "] ";
|
|
631
865
|
std::cerr << " [" << expression->value() << expression->unit() << "]" <<
|
|
632
866
|
" [hash: " << expression->hash() << "] " <<
|
|
633
867
|
std::endl;
|
|
634
868
|
} else if (Cast<Null>(node)) {
|
|
635
|
-
|
|
869
|
+
Null* expression = Cast<Null>(node);
|
|
636
870
|
std::cerr << ind << "Null " << expression;
|
|
637
871
|
std::cerr << " (" << pstate_source_position(node) << ")";
|
|
638
872
|
std::cerr << " [interpolant: " << expression->is_interpolant() << "] "
|
|
639
873
|
// " [hash: " << expression->hash() << "] "
|
|
640
874
|
<< std::endl;
|
|
641
875
|
} else if (Cast<String_Quoted>(node)) {
|
|
642
|
-
|
|
876
|
+
String_Quoted* expression = Cast<String_Quoted>(node);
|
|
643
877
|
std::cerr << ind << "String_Quoted " << expression;
|
|
644
878
|
std::cerr << " (" << pstate_source_position(node) << ")";
|
|
645
879
|
std::cerr << " [" << prettyprint(expression->value()) << "]";
|
|
646
880
|
if (expression->is_delayed()) std::cerr << " [delayed]";
|
|
647
881
|
if (expression->is_interpolant()) std::cerr << " [interpolant]";
|
|
648
882
|
if (expression->quote_mark()) std::cerr << " [quote_mark: " << expression->quote_mark() << "]";
|
|
649
|
-
std::cerr <<
|
|
883
|
+
std::cerr << std::endl;
|
|
650
884
|
} else if (Cast<String_Constant>(node)) {
|
|
651
|
-
|
|
885
|
+
String_Constant* expression = Cast<String_Constant>(node);
|
|
652
886
|
std::cerr << ind << "String_Constant " << expression;
|
|
653
887
|
if (expression->concrete_type()) {
|
|
654
888
|
std::cerr << " " << expression->concrete_type();
|
|
@@ -657,9 +891,9 @@ inline void debug_ast(AST_Node_Ptr node, std::string ind, Env* env)
|
|
|
657
891
|
std::cerr << " [" << prettyprint(expression->value()) << "]";
|
|
658
892
|
if (expression->is_delayed()) std::cerr << " [delayed]";
|
|
659
893
|
if (expression->is_interpolant()) std::cerr << " [interpolant]";
|
|
660
|
-
std::cerr <<
|
|
894
|
+
std::cerr << std::endl;
|
|
661
895
|
} else if (Cast<String_Schema>(node)) {
|
|
662
|
-
|
|
896
|
+
String_Schema* expression = Cast<String_Schema>(node);
|
|
663
897
|
std::cerr << ind << "String_Schema " << expression;
|
|
664
898
|
std::cerr << " (" << pstate_source_position(expression) << ")";
|
|
665
899
|
std::cerr << " " << expression->concrete_type();
|
|
@@ -670,45 +904,46 @@ inline void debug_ast(AST_Node_Ptr node, std::string ind, Env* env)
|
|
|
670
904
|
if (expression->has_interpolant()) std::cerr << " [has interpolant]";
|
|
671
905
|
if (expression->is_left_interpolant()) std::cerr << " [left interpolant] ";
|
|
672
906
|
if (expression->is_right_interpolant()) std::cerr << " [right interpolant] ";
|
|
673
|
-
std::cerr <<
|
|
907
|
+
std::cerr << std::endl;
|
|
674
908
|
for(const auto& i : expression->elements()) { debug_ast(i, ind + " ", env); }
|
|
675
909
|
} else if (Cast<String>(node)) {
|
|
676
|
-
|
|
910
|
+
String* expression = Cast<String>(node);
|
|
677
911
|
std::cerr << ind << "String " << expression;
|
|
678
912
|
std::cerr << " " << expression->concrete_type();
|
|
679
913
|
std::cerr << " (" << pstate_source_position(node) << ")";
|
|
680
914
|
if (expression->is_interpolant()) std::cerr << " [interpolant]";
|
|
681
|
-
std::cerr <<
|
|
915
|
+
std::cerr << std::endl;
|
|
682
916
|
} else if (Cast<Expression>(node)) {
|
|
683
|
-
|
|
917
|
+
Expression* expression = Cast<Expression>(node);
|
|
684
918
|
std::cerr << ind << "Expression " << expression;
|
|
685
919
|
std::cerr << " (" << pstate_source_position(node) << ")";
|
|
686
920
|
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::
|
|
921
|
+
case Expression::Type::NONE: std::cerr << " [NONE]"; break;
|
|
922
|
+
case Expression::Type::BOOLEAN: std::cerr << " [BOOLEAN]"; break;
|
|
923
|
+
case Expression::Type::NUMBER: std::cerr << " [NUMBER]"; break;
|
|
924
|
+
case Expression::Type::COLOR: std::cerr << " [COLOR]"; break;
|
|
925
|
+
case Expression::Type::STRING: std::cerr << " [STRING]"; break;
|
|
926
|
+
case Expression::Type::LIST: std::cerr << " [LIST]"; break;
|
|
927
|
+
case Expression::Type::MAP: std::cerr << " [MAP]"; break;
|
|
928
|
+
case Expression::Type::SELECTOR: std::cerr << " [SELECTOR]"; break;
|
|
929
|
+
case Expression::Type::NULL_VAL: std::cerr << " [NULL_VAL]"; break;
|
|
930
|
+
case Expression::Type::C_WARNING: std::cerr << " [C_WARNING]"; break;
|
|
931
|
+
case Expression::Type::C_ERROR: std::cerr << " [C_ERROR]"; break;
|
|
932
|
+
case Expression::Type::FUNCTION: std::cerr << " [FUNCTION]"; break;
|
|
933
|
+
case Expression::Type::NUM_TYPES: std::cerr << " [NUM_TYPES]"; break;
|
|
934
|
+
case Expression::Type::VARIABLE: std::cerr << " [VARIABLE]"; break;
|
|
935
|
+
case Expression::Type::FUNCTION_VAL: std::cerr << " [FUNCTION_VAL]"; break;
|
|
936
|
+
case Expression::Type::PARENT: std::cerr << " [PARENT]"; break;
|
|
702
937
|
}
|
|
703
938
|
std::cerr << std::endl;
|
|
704
|
-
} else if (Cast<
|
|
705
|
-
|
|
706
|
-
std::cerr << ind << "
|
|
939
|
+
} else if (Cast<ParentStatement>(node)) {
|
|
940
|
+
ParentStatement* parent = Cast<ParentStatement>(node);
|
|
941
|
+
std::cerr << ind << "ParentStatement " << parent;
|
|
707
942
|
std::cerr << " (" << pstate_source_position(node) << ")";
|
|
708
|
-
std::cerr << " " <<
|
|
709
|
-
if (
|
|
943
|
+
std::cerr << " " << parent->tabs() << std::endl;
|
|
944
|
+
if (parent->block()) for(const Statement_Obj& i : parent->block()->elements()) { debug_ast(i, ind + " ", env); }
|
|
710
945
|
} else if (Cast<Statement>(node)) {
|
|
711
|
-
|
|
946
|
+
Statement* statement = Cast<Statement>(node);
|
|
712
947
|
std::cerr << ind << "Statement " << statement;
|
|
713
948
|
std::cerr << " (" << pstate_source_position(node) << ")";
|
|
714
949
|
std::cerr << " " << statement->tabs() << std::endl;
|
|
@@ -717,84 +952,12 @@ inline void debug_ast(AST_Node_Ptr node, std::string ind, Env* env)
|
|
|
717
952
|
if (ind == "") std::cerr << "####################################################################\n";
|
|
718
953
|
}
|
|
719
954
|
|
|
720
|
-
inline void debug_node(Node* node, std::string ind = "")
|
|
721
|
-
{
|
|
722
|
-
if (ind == "") std::cerr << "#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\n";
|
|
723
|
-
if (node->isCombinator()) {
|
|
724
|
-
std::cerr << ind;
|
|
725
|
-
std::cerr << "Combinator ";
|
|
726
|
-
std::cerr << node << " ";
|
|
727
|
-
if (node->got_line_feed) std::cerr << "[LF] ";
|
|
728
|
-
switch (node->combinator()) {
|
|
729
|
-
case Complex_Selector::ADJACENT_TO: std::cerr << "{+} "; break;
|
|
730
|
-
case Complex_Selector::PARENT_OF: std::cerr << "{>} "; break;
|
|
731
|
-
case Complex_Selector::PRECEDES: std::cerr << "{~} "; break;
|
|
732
|
-
case Complex_Selector::REFERENCE: std::cerr << "{@} "; break;
|
|
733
|
-
case Complex_Selector::ANCESTOR_OF: std::cerr << "{ } "; break;
|
|
734
|
-
}
|
|
735
|
-
std::cerr << std::endl;
|
|
736
|
-
// debug_ast(node->combinator(), ind + " ");
|
|
737
|
-
} else if (node->isSelector()) {
|
|
738
|
-
std::cerr << ind;
|
|
739
|
-
std::cerr << "Selector ";
|
|
740
|
-
std::cerr << node << " ";
|
|
741
|
-
if (node->got_line_feed) std::cerr << "[LF] ";
|
|
742
|
-
std::cerr << std::endl;
|
|
743
|
-
debug_ast(node->selector(), ind + " ");
|
|
744
|
-
} else if (node->isCollection()) {
|
|
745
|
-
std::cerr << ind;
|
|
746
|
-
std::cerr << "Collection ";
|
|
747
|
-
std::cerr << node << " ";
|
|
748
|
-
if (node->got_line_feed) std::cerr << "[LF] ";
|
|
749
|
-
std::cerr << std::endl;
|
|
750
|
-
for(auto n : (*node->collection())) {
|
|
751
|
-
debug_node(&n, ind + " ");
|
|
752
|
-
}
|
|
753
|
-
} else if (node->isNil()) {
|
|
754
|
-
std::cerr << ind;
|
|
755
|
-
std::cerr << "Nil ";
|
|
756
|
-
std::cerr << node << " ";
|
|
757
|
-
if (node->got_line_feed) std::cerr << "[LF] ";
|
|
758
|
-
std::cerr << std::endl;
|
|
759
|
-
} else {
|
|
760
|
-
std::cerr << ind;
|
|
761
|
-
std::cerr << "OTHER ";
|
|
762
|
-
std::cerr << node << " ";
|
|
763
|
-
if (node->got_line_feed) std::cerr << "[LF] ";
|
|
764
|
-
std::cerr << std::endl;
|
|
765
|
-
}
|
|
766
|
-
if (ind == "") std::cerr << "#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\n";
|
|
767
|
-
}
|
|
768
955
|
|
|
769
956
|
/*
|
|
770
|
-
inline void debug_ast(const
|
|
957
|
+
inline void debug_ast(const AST_Node* node, sass::string ind = "", Env* env = 0)
|
|
771
958
|
{
|
|
772
|
-
debug_ast(const_cast<
|
|
959
|
+
debug_ast(const_cast<AST_Node*>(node), ind, env);
|
|
773
960
|
}
|
|
774
961
|
*/
|
|
775
|
-
inline void debug_node(const Node* node, std::string ind = "")
|
|
776
|
-
{
|
|
777
|
-
debug_node(const_cast<Node*>(node), ind);
|
|
778
|
-
}
|
|
779
|
-
|
|
780
|
-
inline void debug_subset_map(Sass::Subset_Map& map, std::string ind = "")
|
|
781
|
-
{
|
|
782
|
-
if (ind == "") std::cerr << "#%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n";
|
|
783
|
-
for(auto const &it : map.values()) {
|
|
784
|
-
debug_ast(it.first, ind + "first: ");
|
|
785
|
-
debug_ast(it.second, ind + "second: ");
|
|
786
|
-
}
|
|
787
|
-
if (ind == "") std::cerr << "#%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n";
|
|
788
|
-
}
|
|
789
|
-
|
|
790
|
-
inline void debug_subset_entries(SubSetMapPairs* entries, std::string ind = "")
|
|
791
|
-
{
|
|
792
|
-
if (ind == "") std::cerr << "#%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n";
|
|
793
|
-
for(auto const &pair : *entries) {
|
|
794
|
-
debug_ast(pair.first, ind + "first: ");
|
|
795
|
-
debug_ast(pair.second, ind + "second: ");
|
|
796
|
-
}
|
|
797
|
-
if (ind == "") std::cerr << "#%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n";
|
|
798
|
-
}
|
|
799
962
|
|
|
800
963
|
#endif // SASS_DEBUGGER
|