sassc 2.0.1 → 2.1.0.pre1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (200) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/.gitmodules +1 -1
  4. data/.travis.yml +7 -3
  5. data/CHANGELOG.md +3 -0
  6. data/CODE_OF_CONDUCT.md +1 -1
  7. data/README.md +1 -1
  8. data/Rakefile +23 -8
  9. data/ext/extconf.rb +39 -0
  10. data/ext/libsass/.gitignore +1 -0
  11. data/ext/libsass/GNUmakefile.am +23 -39
  12. data/ext/libsass/Makefile +56 -91
  13. data/ext/libsass/Makefile.conf +16 -2
  14. data/ext/libsass/configure.ac +8 -12
  15. data/ext/libsass/include/sass/base.h +1 -0
  16. data/ext/libsass/include/sass/context.h +1 -1
  17. data/ext/libsass/src/GNUmakefile.am +1 -5
  18. data/ext/libsass/src/ast.cpp +747 -2010
  19. data/ext/libsass/src/ast.hpp +239 -2383
  20. data/ext/libsass/src/{to_c.cpp → ast2c.cpp} +22 -16
  21. data/ext/libsass/src/ast2c.hpp +39 -0
  22. data/ext/libsass/src/ast_def_macros.hpp +62 -10
  23. data/ext/libsass/src/ast_fwd_decl.cpp +1 -0
  24. data/ext/libsass/src/ast_fwd_decl.hpp +43 -165
  25. data/ext/libsass/src/ast_sel_cmp.cpp +909 -0
  26. data/ext/libsass/src/ast_sel_unify.cpp +280 -0
  27. data/ext/libsass/src/ast_selectors.cpp +1475 -0
  28. data/ext/libsass/src/ast_selectors.hpp +568 -0
  29. data/ext/libsass/src/ast_supports.cpp +130 -0
  30. data/ext/libsass/src/ast_supports.hpp +121 -0
  31. data/ext/libsass/src/ast_values.cpp +967 -0
  32. data/ext/libsass/src/ast_values.hpp +489 -0
  33. data/ext/libsass/src/backtrace.cpp +4 -0
  34. data/ext/libsass/src/base64vlq.cpp +3 -0
  35. data/ext/libsass/src/bind.cpp +18 -17
  36. data/ext/libsass/src/bind.hpp +3 -1
  37. data/ext/libsass/src/c2ast.cpp +64 -0
  38. data/ext/libsass/src/c2ast.hpp +14 -0
  39. data/ext/libsass/src/cencode.c +2 -2
  40. data/ext/libsass/src/check_nesting.cpp +52 -56
  41. data/ext/libsass/src/check_nesting.hpp +35 -34
  42. data/ext/libsass/src/color_maps.cpp +156 -153
  43. data/ext/libsass/src/color_maps.hpp +152 -152
  44. data/ext/libsass/src/constants.cpp +15 -0
  45. data/ext/libsass/src/constants.hpp +13 -0
  46. data/ext/libsass/src/context.cpp +24 -14
  47. data/ext/libsass/src/context.hpp +6 -6
  48. data/ext/libsass/src/cssize.cpp +69 -71
  49. data/ext/libsass/src/cssize.hpp +50 -50
  50. data/ext/libsass/src/debugger.hpp +117 -110
  51. data/ext/libsass/src/emitter.cpp +13 -12
  52. data/ext/libsass/src/emitter.hpp +13 -9
  53. data/ext/libsass/src/environment.cpp +15 -1
  54. data/ext/libsass/src/environment.hpp +6 -0
  55. data/ext/libsass/src/error_handling.cpp +36 -59
  56. data/ext/libsass/src/error_handling.hpp +29 -16
  57. data/ext/libsass/src/eval.cpp +302 -323
  58. data/ext/libsass/src/eval.hpp +64 -55
  59. data/ext/libsass/src/expand.cpp +94 -88
  60. data/ext/libsass/src/expand.hpp +33 -37
  61. data/ext/libsass/src/extend.cpp +38 -36
  62. data/ext/libsass/src/extend.hpp +15 -15
  63. data/ext/libsass/src/file.cpp +34 -2
  64. data/ext/libsass/src/fn_colors.cpp +594 -0
  65. data/ext/libsass/src/fn_colors.hpp +85 -0
  66. data/ext/libsass/src/fn_lists.cpp +284 -0
  67. data/ext/libsass/src/fn_lists.hpp +34 -0
  68. data/ext/libsass/src/fn_maps.cpp +94 -0
  69. data/ext/libsass/src/fn_maps.hpp +30 -0
  70. data/ext/libsass/src/fn_miscs.cpp +256 -0
  71. data/ext/libsass/src/fn_miscs.hpp +40 -0
  72. data/ext/libsass/src/fn_numbers.cpp +220 -0
  73. data/ext/libsass/src/fn_numbers.hpp +45 -0
  74. data/ext/libsass/src/fn_selectors.cpp +235 -0
  75. data/ext/libsass/src/fn_selectors.hpp +35 -0
  76. data/ext/libsass/src/fn_strings.cpp +254 -0
  77. data/ext/libsass/src/fn_strings.hpp +34 -0
  78. data/ext/libsass/src/fn_utils.cpp +156 -0
  79. data/ext/libsass/src/fn_utils.hpp +56 -0
  80. data/ext/libsass/src/inspect.cpp +101 -152
  81. data/ext/libsass/src/inspect.hpp +69 -73
  82. data/ext/libsass/src/json.cpp +2 -2
  83. data/ext/libsass/src/lexer.cpp +6 -3
  84. data/ext/libsass/src/listize.cpp +9 -11
  85. data/ext/libsass/src/listize.hpp +11 -7
  86. data/ext/libsass/src/memory/SharedPtr.cpp +2 -83
  87. data/ext/libsass/src/memory/SharedPtr.hpp +127 -143
  88. data/ext/libsass/src/node.cpp +13 -10
  89. data/ext/libsass/src/node.hpp +3 -3
  90. data/ext/libsass/src/operation.hpp +184 -144
  91. data/ext/libsass/src/operators.cpp +43 -17
  92. data/ext/libsass/src/operators.hpp +5 -5
  93. data/ext/libsass/src/output.cpp +21 -18
  94. data/ext/libsass/src/output.hpp +14 -21
  95. data/ext/libsass/src/parser.cpp +215 -183
  96. data/ext/libsass/src/parser.hpp +28 -24
  97. data/ext/libsass/src/plugins.cpp +5 -1
  98. data/ext/libsass/src/position.cpp +3 -0
  99. data/ext/libsass/src/prelexer.cpp +9 -3
  100. data/ext/libsass/src/prelexer.hpp +9 -9
  101. data/ext/libsass/src/remove_placeholders.cpp +14 -11
  102. data/ext/libsass/src/remove_placeholders.hpp +8 -9
  103. data/ext/libsass/src/sass.cpp +9 -3
  104. data/ext/libsass/src/sass.hpp +12 -9
  105. data/ext/libsass/src/sass2scss.cpp +45 -14
  106. data/ext/libsass/src/sass_context.cpp +18 -15
  107. data/ext/libsass/src/sass_functions.cpp +6 -3
  108. data/ext/libsass/src/sass_functions.hpp +1 -1
  109. data/ext/libsass/src/sass_util.cpp +3 -0
  110. data/ext/libsass/src/sass_values.cpp +21 -13
  111. data/ext/libsass/src/source_map.cpp +5 -2
  112. data/ext/libsass/src/source_map.hpp +2 -2
  113. data/ext/libsass/src/subset_map.cpp +4 -1
  114. data/ext/libsass/src/to_value.cpp +23 -21
  115. data/ext/libsass/src/to_value.hpp +18 -22
  116. data/ext/libsass/src/units.cpp +4 -0
  117. data/ext/libsass/src/units.hpp +1 -0
  118. data/ext/libsass/src/utf8/checked.h +12 -10
  119. data/ext/libsass/src/utf8/core.h +3 -0
  120. data/ext/libsass/src/utf8_string.cpp +3 -0
  121. data/ext/libsass/src/util.cpp +67 -75
  122. data/ext/libsass/src/util.hpp +64 -19
  123. data/ext/libsass/src/util_string.cpp +75 -0
  124. data/ext/libsass/src/util_string.hpp +19 -0
  125. data/ext/libsass/src/values.cpp +22 -13
  126. data/ext/libsass/src/values.hpp +2 -2
  127. data/ext/libsass/win/libsass.targets +30 -4
  128. data/ext/libsass/win/libsass.vcxproj.filters +82 -4
  129. data/lib/sassc.rb +24 -0
  130. data/lib/sassc/engine.rb +2 -2
  131. data/lib/sassc/native.rb +8 -1
  132. data/lib/sassc/version.rb +1 -1
  133. data/sassc.gemspec +19 -11
  134. data/test/engine_test.rb +26 -1
  135. data/test/native_test.rb +1 -1
  136. metadata +66 -72
  137. data/ext/Rakefile +0 -3
  138. data/ext/libsass/.github/CONTRIBUTING.md +0 -65
  139. data/ext/libsass/.github/ISSUE_TEMPLATE.md +0 -54
  140. data/ext/libsass/.travis.yml +0 -64
  141. data/ext/libsass/Readme.md +0 -104
  142. data/ext/libsass/SECURITY.md +0 -10
  143. data/ext/libsass/appveyor.yml +0 -91
  144. data/ext/libsass/docs/README.md +0 -20
  145. data/ext/libsass/docs/api-context-example.md +0 -45
  146. data/ext/libsass/docs/api-context-internal.md +0 -163
  147. data/ext/libsass/docs/api-context.md +0 -295
  148. data/ext/libsass/docs/api-doc.md +0 -215
  149. data/ext/libsass/docs/api-function-example.md +0 -67
  150. data/ext/libsass/docs/api-function-internal.md +0 -8
  151. data/ext/libsass/docs/api-function.md +0 -74
  152. data/ext/libsass/docs/api-importer-example.md +0 -112
  153. data/ext/libsass/docs/api-importer-internal.md +0 -20
  154. data/ext/libsass/docs/api-importer.md +0 -86
  155. data/ext/libsass/docs/api-value-example.md +0 -55
  156. data/ext/libsass/docs/api-value-internal.md +0 -76
  157. data/ext/libsass/docs/api-value.md +0 -154
  158. data/ext/libsass/docs/build-on-darwin.md +0 -27
  159. data/ext/libsass/docs/build-on-gentoo.md +0 -55
  160. data/ext/libsass/docs/build-on-windows.md +0 -139
  161. data/ext/libsass/docs/build-shared-library.md +0 -35
  162. data/ext/libsass/docs/build-with-autotools.md +0 -78
  163. data/ext/libsass/docs/build-with-makefiles.md +0 -68
  164. data/ext/libsass/docs/build-with-mingw.md +0 -107
  165. data/ext/libsass/docs/build-with-visual-studio.md +0 -90
  166. data/ext/libsass/docs/build.md +0 -97
  167. data/ext/libsass/docs/compatibility-plan.md +0 -48
  168. data/ext/libsass/docs/contributing.md +0 -17
  169. data/ext/libsass/docs/custom-functions-internal.md +0 -122
  170. data/ext/libsass/docs/dev-ast-memory.md +0 -223
  171. data/ext/libsass/docs/implementations.md +0 -56
  172. data/ext/libsass/docs/plugins.md +0 -47
  173. data/ext/libsass/docs/setup-environment.md +0 -68
  174. data/ext/libsass/docs/source-map-internals.md +0 -51
  175. data/ext/libsass/docs/trace.md +0 -26
  176. data/ext/libsass/docs/triage.md +0 -17
  177. data/ext/libsass/docs/unicode.md +0 -39
  178. data/ext/libsass/extconf.rb +0 -6
  179. data/ext/libsass/script/bootstrap +0 -13
  180. data/ext/libsass/script/branding +0 -10
  181. data/ext/libsass/script/ci-build-libsass +0 -134
  182. data/ext/libsass/script/ci-build-plugin +0 -62
  183. data/ext/libsass/script/ci-install-compiler +0 -6
  184. data/ext/libsass/script/ci-install-deps +0 -20
  185. data/ext/libsass/script/ci-report-coverage +0 -42
  186. data/ext/libsass/script/spec +0 -5
  187. data/ext/libsass/script/tap-driver +0 -652
  188. data/ext/libsass/script/tap-runner +0 -1
  189. data/ext/libsass/script/test-leaks.pl +0 -103
  190. data/ext/libsass/src/functions.cpp +0 -2234
  191. data/ext/libsass/src/functions.hpp +0 -198
  192. data/ext/libsass/src/to_c.hpp +0 -39
  193. data/ext/libsass/test/test_node.cpp +0 -94
  194. data/ext/libsass/test/test_paths.cpp +0 -28
  195. data/ext/libsass/test/test_selector_difference.cpp +0 -25
  196. data/ext/libsass/test/test_specificity.cpp +0 -25
  197. data/ext/libsass/test/test_subset_map.cpp +0 -472
  198. data/ext/libsass/test/test_superselector.cpp +0 -69
  199. data/ext/libsass/test/test_unification.cpp +0 -31
  200. data/lib/tasks/libsass.rb +0 -33
@@ -10,66 +10,66 @@ namespace Sass {
10
10
 
11
11
  struct Backtrace;
12
12
 
13
- class Cssize : public Operation_CRTP<Statement_Ptr, Cssize> {
13
+ class Cssize : public Operation_CRTP<Statement*, Cssize> {
14
14
 
15
15
  Context& ctx;
16
16
  Backtraces& traces;
17
- std::vector<Block_Ptr> block_stack;
18
- std::vector<Statement_Ptr> p_stack;
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
- Selector_List_Ptr selector();
27
-
28
- Block_Ptr operator()(Block_Ptr);
29
- Statement_Ptr operator()(Ruleset_Ptr);
30
- // Statement_Ptr operator()(Bubble_Ptr);
31
- Statement_Ptr operator()(Media_Block_Ptr);
32
- Statement_Ptr operator()(Supports_Block_Ptr);
33
- Statement_Ptr operator()(At_Root_Block_Ptr);
34
- Statement_Ptr operator()(Directive_Ptr);
35
- Statement_Ptr operator()(Keyframe_Rule_Ptr);
36
- Statement_Ptr operator()(Trace_Ptr);
37
- Statement_Ptr operator()(Declaration_Ptr);
38
- // Statement_Ptr operator()(Assignment_Ptr);
39
- // Statement_Ptr operator()(Import_Ptr);
40
- // Statement_Ptr operator()(Import_Stub_Ptr);
41
- // Statement_Ptr operator()(Warning_Ptr);
42
- // Statement_Ptr operator()(Error_Ptr);
43
- // Statement_Ptr operator()(Comment_Ptr);
44
- // Statement_Ptr operator()(If_Ptr);
45
- // Statement_Ptr operator()(For_Ptr);
46
- // Statement_Ptr operator()(Each_Ptr);
47
- // Statement_Ptr operator()(While_Ptr);
48
- // Statement_Ptr operator()(Return_Ptr);
49
- // Statement_Ptr operator()(Extension_Ptr);
50
- // Statement_Ptr operator()(Definition_Ptr);
51
- // Statement_Ptr operator()(Mixin_Call_Ptr);
52
- // Statement_Ptr operator()(Content_Ptr);
53
- Statement_Ptr operator()(Null_Ptr);
54
-
55
- Statement_Ptr parent();
56
- std::vector<std::pair<bool, Block_Obj>> slice_by_bubble(Block_Ptr);
57
- Statement_Ptr bubble(Directive_Ptr);
58
- Statement_Ptr bubble(At_Root_Block_Ptr);
59
- Statement_Ptr bubble(Media_Block_Ptr);
60
- Statement_Ptr bubble(Supports_Block_Ptr);
61
-
62
- Block_Ptr debubble(Block_Ptr children, Statement_Ptr parent = 0);
63
- Block_Ptr flatten(Block_Ptr);
64
- bool bubblable(Statement_Ptr);
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
-
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
- Statement_Ptr fallback(U x) { return fallback_impl(x); }
69
+ Statement* fallback(U x)
70
+ { return Cast<Statement>(x); }
71
71
 
72
- void append_block(Block_Ptr, Block_Ptr);
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(AST_Node_Ptr node, std::string ind = "", Env* env = 0);
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(AST_Node_Ptr node)
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(AST_Node_Ptr node, std::string ind, Env* env)
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
- Bubble_Ptr bubble = Cast<Bubble>(node);
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
- Trace_Ptr trace = Cast<Trace>(node);
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
- At_Root_Block_Ptr root_block = Cast<At_Root_Block>(node);
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
- Selector_List_Ptr selector = Cast<Selector_List>(node);
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
- // Expression_Ptr expression = Cast<Expression>(node);
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
- Parent_Selector_Ptr selector = Cast<Parent_Selector>(node);
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->is_real_parent_ref() ? "REAL" : "FAKE") << "]";
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
- Complex_Selector_Ptr selector = Cast<Complex_Selector>(node);
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
- Compound_Selector_Ptr selector = Cast<Compound_Selector>(node);
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
- Wrapped_Selector_Ptr selector = Cast<Wrapped_Selector>(node);
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
- Pseudo_Selector_Ptr selector = Cast<Pseudo_Selector>(node);
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
- Attribute_Selector_Ptr selector = Cast<Attribute_Selector>(node);
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
- Class_Selector_Ptr selector = Cast<Class_Selector>(node);
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
- Id_Selector_Ptr selector = Cast<Id_Selector>(node);
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<Element_Selector>(node)) {
230
- Element_Selector_Ptr selector = Cast<Element_Selector>(node);
231
- std::cerr << ind << "Element_Selector " << selector;
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
- Placeholder_Selector_Ptr selector = Cast<Placeholder_Selector>(node);
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
- Selector_Schema_Ptr selector = Cast<Selector_Schema>(node);
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
- Selector_Ptr selector = Cast<Selector>(node);
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
- Media_Query_Expression_Ptr block = Cast<Media_Query_Expression>(node);
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
- Media_Query_Ptr block = Cast<Media_Query>(node);
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
- Media_Block_Ptr block = Cast<Media_Block>(node);
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
- Supports_Block_Ptr block = Cast<Supports_Block>(node);
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
- Supports_Operator_Ptr block = Cast<Supports_Operator>(node);
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
- Supports_Negation_Ptr block = Cast<Supports_Negation>(node);
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
- At_Root_Query_Ptr block = Cast<At_Root_Query>(node);
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
- Supports_Declaration_Ptr block = Cast<Supports_Declaration>(node);
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
- Block_Ptr root_block = Cast<Block>(node);
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
- Warning_Ptr block = Cast<Warning>(node);
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
- Error_Ptr block = Cast<Error>(node);
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
- Debug_Ptr block = Cast<Debug>(node);
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
- Comment_Ptr block = Cast<Comment>(node);
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
- If_Ptr block = Cast<If>(node);
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
- Return_Ptr block = Cast<Return>(node);
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
- Extension_Ptr block = Cast<Extension>(node);
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
- Content_Ptr block = Cast<Content>(node);
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
- Import_Stub_Ptr block = Cast<Import_Stub>(node);
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
- Import_Ptr block = Cast<Import>(node);
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
- Assignment_Ptr block = Cast<Assignment>(node);
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
- Declaration_Ptr block = Cast<Declaration>(node);
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
- Keyframe_Rule_Ptr has_block = Cast<Keyframe_Rule>(node);
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
- Directive_Ptr block = Cast<Directive>(node);
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
- Each_Ptr block = Cast<Each>(node);
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
- For_Ptr block = Cast<For>(node);
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
- While_Ptr block = Cast<While>(node);
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
- Definition_Ptr block = Cast<Definition>(node);
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
- Mixin_Call_Ptr block = Cast<Mixin_Call>(node);
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 (Ruleset_Ptr ruleset = Cast<Ruleset>(node)) {
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
- Block_Ptr block = Cast<Block>(node);
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
- Variable_Ptr expression = Cast<Variable>(node);
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
- Function_Call_Ptr expression = Cast<Function_Call>(node);
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
- Function_Ptr expression = Cast<Function>(node);
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
- Arguments_Ptr expression = Cast<Arguments>(node);
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
- Argument_Ptr expression = Cast<Argument>(node);
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
- Parameters_Ptr expression = Cast<Parameters>(node);
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
- Parameter_Ptr expression = Cast<Parameter>(node);
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
- Unary_Expression_Ptr expression = Cast<Unary_Expression>(node);
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
- Binary_Expression_Ptr expression = Cast<Binary_Expression>(node);
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
- Map_Ptr expression = Cast<Map>(node);
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
- List_Ptr expression = Cast<List>(node);
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
- Boolean_Ptr expression = Cast<Boolean>(node);
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<Color>(node)) {
620
- Color_Ptr expression = Cast<Color>(node);
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->r() << ":" << expression->g() << ":" << expression->b() << "@" << expression->a() << "]" << std::endl;
630
+ std::cerr << " hsla[" << expression->h() << ":" << expression->s() << ":" << expression->l() << "@" << expression->a() << "]" << std::endl;
626
631
  } else if (Cast<Number>(node)) {
627
- Number_Ptr expression = Cast<Number>(node);
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
- Null_Ptr expression = Cast<Null>(node);
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
- String_Quoted_Ptr expression = Cast<String_Quoted>(node);
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
- String_Constant_Ptr expression = Cast<String_Constant>(node);
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
- String_Schema_Ptr expression = Cast<String_Schema>(node);
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
- String_Ptr expression = Cast<String>(node);
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
- Expression_Ptr expression = Cast<Expression>(node);
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::Concrete_Type::NONE: std::cerr << " [NONE]"; break;
688
- case Expression::Concrete_Type::BOOLEAN: std::cerr << " [BOOLEAN]"; break;
689
- case Expression::Concrete_Type::NUMBER: std::cerr << " [NUMBER]"; break;
690
- case Expression::Concrete_Type::COLOR: std::cerr << " [COLOR]"; break;
691
- case Expression::Concrete_Type::STRING: std::cerr << " [STRING]"; break;
692
- case Expression::Concrete_Type::LIST: std::cerr << " [LIST]"; break;
693
- case Expression::Concrete_Type::MAP: std::cerr << " [MAP]"; break;
694
- case Expression::Concrete_Type::SELECTOR: std::cerr << " [SELECTOR]"; break;
695
- case Expression::Concrete_Type::NULL_VAL: std::cerr << " [NULL_VAL]"; break;
696
- case Expression::Concrete_Type::C_WARNING: std::cerr << " [C_WARNING]"; break;
697
- case Expression::Concrete_Type::C_ERROR: std::cerr << " [C_ERROR]"; break;
698
- case Expression::Concrete_Type::FUNCTION: std::cerr << " [FUNCTION]"; break;
699
- case Expression::Concrete_Type::NUM_TYPES: std::cerr << " [NUM_TYPES]"; break;
700
- case Expression::Concrete_Type::VARIABLE: std::cerr << " [VARIABLE]"; break;
701
- case Expression::Concrete_Type::FUNCTION_VAL: std::cerr << " [FUNCTION_VAL]"; break;
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
- Has_Block_Ptr has_block = Cast<Has_Block>(node);
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
- Statement_Ptr statement = Cast<Statement>(node);
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 AST_Node_Ptr node, std::string ind = "", Env* env = 0)
777
+ inline void debug_ast(const AST_Node* node, std::string ind = "", Env* env = 0)
771
778
  {
772
- debug_ast(const_cast<AST_Node_Ptr>(node), ind, env);
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 = "")