sassc 2.0.0 → 2.4.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (260) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +2 -0
  3. data/.gitmodules +1 -1
  4. data/.travis.yml +9 -3
  5. data/CHANGELOG.md +36 -0
  6. data/CODE_OF_CONDUCT.md +1 -1
  7. data/README.md +1 -1
  8. data/Rakefile +43 -7
  9. data/ext/depend +4 -0
  10. data/ext/extconf.rb +92 -0
  11. data/ext/libsass/VERSION +1 -0
  12. data/ext/libsass/include/sass/base.h +9 -1
  13. data/ext/libsass/include/sass/context.h +5 -1
  14. data/ext/libsass/src/MurmurHash2.hpp +91 -0
  15. data/ext/libsass/src/ast.cpp +755 -2028
  16. data/ext/libsass/src/ast.hpp +492 -2477
  17. data/ext/libsass/src/{to_c.cpp → ast2c.cpp} +22 -16
  18. data/ext/libsass/src/ast2c.hpp +39 -0
  19. data/ext/libsass/src/ast_def_macros.hpp +70 -10
  20. data/ext/libsass/src/ast_fwd_decl.cpp +5 -3
  21. data/ext/libsass/src/ast_fwd_decl.hpp +107 -296
  22. data/ext/libsass/src/ast_helpers.hpp +292 -0
  23. data/ext/libsass/src/ast_sel_cmp.cpp +396 -0
  24. data/ext/libsass/src/ast_sel_super.cpp +539 -0
  25. data/ext/libsass/src/ast_sel_unify.cpp +275 -0
  26. data/ext/libsass/src/ast_sel_weave.cpp +616 -0
  27. data/ext/libsass/src/ast_selectors.cpp +1043 -0
  28. data/ext/libsass/src/ast_selectors.hpp +522 -0
  29. data/ext/libsass/src/ast_supports.cpp +114 -0
  30. data/ext/libsass/src/ast_supports.hpp +121 -0
  31. data/ext/libsass/src/ast_values.cpp +1154 -0
  32. data/ext/libsass/src/ast_values.hpp +498 -0
  33. data/ext/libsass/src/backtrace.cpp +11 -7
  34. data/ext/libsass/src/backtrace.hpp +5 -5
  35. data/ext/libsass/src/base64vlq.cpp +5 -2
  36. data/ext/libsass/src/base64vlq.hpp +1 -1
  37. data/ext/libsass/src/bind.cpp +35 -34
  38. data/ext/libsass/src/bind.hpp +3 -1
  39. data/ext/libsass/src/c2ast.cpp +64 -0
  40. data/ext/libsass/src/c2ast.hpp +14 -0
  41. data/ext/libsass/src/cencode.c +4 -6
  42. data/ext/libsass/src/check_nesting.cpp +83 -88
  43. data/ext/libsass/src/check_nesting.hpp +39 -34
  44. data/ext/libsass/src/color_maps.cpp +168 -164
  45. data/ext/libsass/src/color_maps.hpp +152 -160
  46. data/ext/libsass/src/constants.cpp +20 -0
  47. data/ext/libsass/src/constants.hpp +19 -0
  48. data/ext/libsass/src/context.cpp +104 -121
  49. data/ext/libsass/src/context.hpp +43 -55
  50. data/ext/libsass/src/cssize.cpp +103 -188
  51. data/ext/libsass/src/cssize.hpp +45 -51
  52. data/ext/libsass/src/dart_helpers.hpp +199 -0
  53. data/ext/libsass/src/debugger.hpp +524 -361
  54. data/ext/libsass/src/emitter.cpp +26 -26
  55. data/ext/libsass/src/emitter.hpp +20 -18
  56. data/ext/libsass/src/environment.cpp +41 -27
  57. data/ext/libsass/src/environment.hpp +33 -22
  58. data/ext/libsass/src/error_handling.cpp +92 -94
  59. data/ext/libsass/src/error_handling.hpp +73 -50
  60. data/ext/libsass/src/eval.cpp +380 -515
  61. data/ext/libsass/src/eval.hpp +64 -57
  62. data/ext/libsass/src/eval_selectors.cpp +75 -0
  63. data/ext/libsass/src/expand.cpp +322 -263
  64. data/ext/libsass/src/expand.hpp +55 -39
  65. data/ext/libsass/src/extender.cpp +1188 -0
  66. data/ext/libsass/src/extender.hpp +399 -0
  67. data/ext/libsass/src/extension.cpp +43 -0
  68. data/ext/libsass/src/extension.hpp +89 -0
  69. data/ext/libsass/src/file.cpp +134 -88
  70. data/ext/libsass/src/file.hpp +28 -37
  71. data/ext/libsass/src/fn_colors.cpp +596 -0
  72. data/ext/libsass/src/fn_colors.hpp +85 -0
  73. data/ext/libsass/src/fn_lists.cpp +285 -0
  74. data/ext/libsass/src/fn_lists.hpp +34 -0
  75. data/ext/libsass/src/fn_maps.cpp +94 -0
  76. data/ext/libsass/src/fn_maps.hpp +30 -0
  77. data/ext/libsass/src/fn_miscs.cpp +244 -0
  78. data/ext/libsass/src/fn_miscs.hpp +40 -0
  79. data/ext/libsass/src/fn_numbers.cpp +227 -0
  80. data/ext/libsass/src/fn_numbers.hpp +45 -0
  81. data/ext/libsass/src/fn_selectors.cpp +205 -0
  82. data/ext/libsass/src/fn_selectors.hpp +35 -0
  83. data/ext/libsass/src/fn_strings.cpp +268 -0
  84. data/ext/libsass/src/fn_strings.hpp +34 -0
  85. data/ext/libsass/src/fn_utils.cpp +158 -0
  86. data/ext/libsass/src/fn_utils.hpp +62 -0
  87. data/ext/libsass/src/inspect.cpp +253 -266
  88. data/ext/libsass/src/inspect.hpp +72 -74
  89. data/ext/libsass/src/json.cpp +2 -2
  90. data/ext/libsass/src/lexer.cpp +25 -84
  91. data/ext/libsass/src/lexer.hpp +5 -16
  92. data/ext/libsass/src/listize.cpp +27 -43
  93. data/ext/libsass/src/listize.hpp +14 -11
  94. data/ext/libsass/src/mapping.hpp +1 -0
  95. data/ext/libsass/src/memory.hpp +12 -0
  96. data/ext/libsass/src/memory/allocator.cpp +48 -0
  97. data/ext/libsass/src/memory/allocator.hpp +138 -0
  98. data/ext/libsass/src/memory/config.hpp +20 -0
  99. data/ext/libsass/src/memory/memory_pool.hpp +186 -0
  100. data/ext/libsass/src/memory/shared_ptr.cpp +33 -0
  101. data/ext/libsass/src/memory/shared_ptr.hpp +332 -0
  102. data/ext/libsass/src/operation.hpp +193 -143
  103. data/ext/libsass/src/operators.cpp +56 -29
  104. data/ext/libsass/src/operators.hpp +11 -11
  105. data/ext/libsass/src/ordered_map.hpp +112 -0
  106. data/ext/libsass/src/output.cpp +59 -75
  107. data/ext/libsass/src/output.hpp +15 -22
  108. data/ext/libsass/src/parser.cpp +662 -818
  109. data/ext/libsass/src/parser.hpp +96 -100
  110. data/ext/libsass/src/parser_selectors.cpp +189 -0
  111. data/ext/libsass/src/permutate.hpp +164 -0
  112. data/ext/libsass/src/plugins.cpp +12 -8
  113. data/ext/libsass/src/plugins.hpp +8 -8
  114. data/ext/libsass/src/position.cpp +10 -26
  115. data/ext/libsass/src/position.hpp +44 -21
  116. data/ext/libsass/src/prelexer.cpp +14 -8
  117. data/ext/libsass/src/prelexer.hpp +9 -9
  118. data/ext/libsass/src/remove_placeholders.cpp +59 -57
  119. data/ext/libsass/src/remove_placeholders.hpp +20 -18
  120. data/ext/libsass/src/sass.cpp +25 -18
  121. data/ext/libsass/src/sass.hpp +22 -14
  122. data/ext/libsass/src/sass2scss.cpp +49 -18
  123. data/ext/libsass/src/sass_context.cpp +104 -132
  124. data/ext/libsass/src/sass_context.hpp +2 -2
  125. data/ext/libsass/src/sass_functions.cpp +7 -4
  126. data/ext/libsass/src/sass_functions.hpp +1 -1
  127. data/ext/libsass/src/sass_values.cpp +26 -21
  128. data/ext/libsass/src/settings.hpp +19 -0
  129. data/ext/libsass/src/source.cpp +69 -0
  130. data/ext/libsass/src/source.hpp +95 -0
  131. data/ext/libsass/src/source_data.hpp +32 -0
  132. data/ext/libsass/src/source_map.cpp +27 -20
  133. data/ext/libsass/src/source_map.hpp +14 -11
  134. data/ext/libsass/src/stylesheet.cpp +22 -0
  135. data/ext/libsass/src/stylesheet.hpp +57 -0
  136. data/ext/libsass/src/to_value.cpp +24 -22
  137. data/ext/libsass/src/to_value.hpp +18 -22
  138. data/ext/libsass/src/units.cpp +28 -22
  139. data/ext/libsass/src/units.hpp +9 -8
  140. data/ext/libsass/src/utf8/checked.h +12 -10
  141. data/ext/libsass/src/utf8/core.h +3 -0
  142. data/ext/libsass/src/utf8_string.cpp +12 -10
  143. data/ext/libsass/src/utf8_string.hpp +7 -6
  144. data/ext/libsass/src/util.cpp +97 -107
  145. data/ext/libsass/src/util.hpp +74 -30
  146. data/ext/libsass/src/util_string.cpp +125 -0
  147. data/ext/libsass/src/util_string.hpp +73 -0
  148. data/ext/libsass/src/values.cpp +33 -24
  149. data/ext/libsass/src/values.hpp +2 -2
  150. data/lib/sassc.rb +24 -0
  151. data/lib/sassc/engine.rb +7 -5
  152. data/lib/sassc/functions_handler.rb +11 -13
  153. data/lib/sassc/native.rb +10 -9
  154. data/lib/sassc/native/native_functions_api.rb +0 -5
  155. data/lib/sassc/script.rb +4 -6
  156. data/lib/sassc/version.rb +1 -1
  157. data/sassc.gemspec +32 -12
  158. data/test/engine_test.rb +32 -2
  159. data/test/functions_test.rb +38 -1
  160. data/test/native_test.rb +4 -4
  161. metadata +95 -109
  162. data/ext/Rakefile +0 -3
  163. data/ext/libsass/.editorconfig +0 -15
  164. data/ext/libsass/.gitattributes +0 -2
  165. data/ext/libsass/.github/CONTRIBUTING.md +0 -65
  166. data/ext/libsass/.github/ISSUE_TEMPLATE.md +0 -54
  167. data/ext/libsass/.gitignore +0 -85
  168. data/ext/libsass/.travis.yml +0 -64
  169. data/ext/libsass/COPYING +0 -25
  170. data/ext/libsass/GNUmakefile.am +0 -88
  171. data/ext/libsass/INSTALL +0 -1
  172. data/ext/libsass/LICENSE +0 -25
  173. data/ext/libsass/Makefile +0 -351
  174. data/ext/libsass/Makefile.conf +0 -55
  175. data/ext/libsass/Readme.md +0 -104
  176. data/ext/libsass/SECURITY.md +0 -10
  177. data/ext/libsass/appveyor.yml +0 -91
  178. data/ext/libsass/configure.ac +0 -138
  179. data/ext/libsass/contrib/libsass.spec +0 -66
  180. data/ext/libsass/docs/README.md +0 -20
  181. data/ext/libsass/docs/api-context-example.md +0 -45
  182. data/ext/libsass/docs/api-context-internal.md +0 -163
  183. data/ext/libsass/docs/api-context.md +0 -295
  184. data/ext/libsass/docs/api-doc.md +0 -215
  185. data/ext/libsass/docs/api-function-example.md +0 -67
  186. data/ext/libsass/docs/api-function-internal.md +0 -8
  187. data/ext/libsass/docs/api-function.md +0 -74
  188. data/ext/libsass/docs/api-importer-example.md +0 -112
  189. data/ext/libsass/docs/api-importer-internal.md +0 -20
  190. data/ext/libsass/docs/api-importer.md +0 -86
  191. data/ext/libsass/docs/api-value-example.md +0 -55
  192. data/ext/libsass/docs/api-value-internal.md +0 -76
  193. data/ext/libsass/docs/api-value.md +0 -154
  194. data/ext/libsass/docs/build-on-darwin.md +0 -27
  195. data/ext/libsass/docs/build-on-gentoo.md +0 -55
  196. data/ext/libsass/docs/build-on-windows.md +0 -139
  197. data/ext/libsass/docs/build-shared-library.md +0 -35
  198. data/ext/libsass/docs/build-with-autotools.md +0 -78
  199. data/ext/libsass/docs/build-with-makefiles.md +0 -68
  200. data/ext/libsass/docs/build-with-mingw.md +0 -107
  201. data/ext/libsass/docs/build-with-visual-studio.md +0 -90
  202. data/ext/libsass/docs/build.md +0 -97
  203. data/ext/libsass/docs/compatibility-plan.md +0 -48
  204. data/ext/libsass/docs/contributing.md +0 -17
  205. data/ext/libsass/docs/custom-functions-internal.md +0 -122
  206. data/ext/libsass/docs/dev-ast-memory.md +0 -223
  207. data/ext/libsass/docs/implementations.md +0 -56
  208. data/ext/libsass/docs/plugins.md +0 -47
  209. data/ext/libsass/docs/setup-environment.md +0 -68
  210. data/ext/libsass/docs/source-map-internals.md +0 -51
  211. data/ext/libsass/docs/trace.md +0 -26
  212. data/ext/libsass/docs/triage.md +0 -17
  213. data/ext/libsass/docs/unicode.md +0 -39
  214. data/ext/libsass/extconf.rb +0 -6
  215. data/ext/libsass/include/sass/version.h.in +0 -12
  216. data/ext/libsass/m4/.gitkeep +0 -0
  217. data/ext/libsass/m4/m4-ax_cxx_compile_stdcxx_11.m4 +0 -167
  218. data/ext/libsass/res/resource.rc +0 -35
  219. data/ext/libsass/script/bootstrap +0 -13
  220. data/ext/libsass/script/branding +0 -10
  221. data/ext/libsass/script/ci-build-libsass +0 -134
  222. data/ext/libsass/script/ci-build-plugin +0 -62
  223. data/ext/libsass/script/ci-install-compiler +0 -6
  224. data/ext/libsass/script/ci-install-deps +0 -20
  225. data/ext/libsass/script/ci-report-coverage +0 -42
  226. data/ext/libsass/script/spec +0 -5
  227. data/ext/libsass/script/tap-driver +0 -652
  228. data/ext/libsass/script/tap-runner +0 -1
  229. data/ext/libsass/script/test-leaks.pl +0 -103
  230. data/ext/libsass/src/GNUmakefile.am +0 -54
  231. data/ext/libsass/src/extend.cpp +0 -2130
  232. data/ext/libsass/src/extend.hpp +0 -86
  233. data/ext/libsass/src/functions.cpp +0 -2234
  234. data/ext/libsass/src/functions.hpp +0 -198
  235. data/ext/libsass/src/memory/SharedPtr.cpp +0 -114
  236. data/ext/libsass/src/memory/SharedPtr.hpp +0 -206
  237. data/ext/libsass/src/node.cpp +0 -319
  238. data/ext/libsass/src/node.hpp +0 -118
  239. data/ext/libsass/src/paths.hpp +0 -71
  240. data/ext/libsass/src/sass_util.cpp +0 -149
  241. data/ext/libsass/src/sass_util.hpp +0 -256
  242. data/ext/libsass/src/subset_map.cpp +0 -55
  243. data/ext/libsass/src/subset_map.hpp +0 -76
  244. data/ext/libsass/src/support/libsass.pc.in +0 -11
  245. data/ext/libsass/src/to_c.hpp +0 -39
  246. data/ext/libsass/test/test_node.cpp +0 -94
  247. data/ext/libsass/test/test_paths.cpp +0 -28
  248. data/ext/libsass/test/test_selector_difference.cpp +0 -25
  249. data/ext/libsass/test/test_specificity.cpp +0 -25
  250. data/ext/libsass/test/test_subset_map.cpp +0 -472
  251. data/ext/libsass/test/test_superselector.cpp +0 -69
  252. data/ext/libsass/test/test_unification.cpp +0 -31
  253. data/ext/libsass/version.sh +0 -10
  254. data/ext/libsass/win/libsass.sln +0 -39
  255. data/ext/libsass/win/libsass.sln.DotSettings +0 -9
  256. data/ext/libsass/win/libsass.targets +0 -118
  257. data/ext/libsass/win/libsass.vcxproj +0 -188
  258. data/ext/libsass/win/libsass.vcxproj.filters +0 -357
  259. data/lib/sassc/native/lib_c.rb +0 -21
  260. data/lib/tasks/libsass.rb +0 -33
@@ -2,20 +2,20 @@
2
2
 
3
3
  namespace Sass {
4
4
 
5
- const std::string traces_to_string(Backtraces traces, std::string indent) {
5
+ const sass::string traces_to_string(Backtraces traces, sass::string indent) {
6
6
 
7
- std::stringstream ss;
8
- std::string cwd(File::get_cwd());
7
+ sass::ostream ss;
8
+ sass::string cwd(File::get_cwd());
9
9
 
10
10
  bool first = true;
11
11
  size_t i_beg = traces.size() - 1;
12
- size_t i_end = std::string::npos;
12
+ size_t i_end = sass::string::npos;
13
13
  for (size_t i = i_beg; i != i_end; i --) {
14
14
 
15
15
  const Backtrace& trace = traces[i];
16
16
 
17
17
  // make path relative to the current directory
18
- std::string rel_path(File::abs2rel(trace.pstate.path, cwd, cwd));
18
+ sass::string rel_path(File::abs2rel(trace.pstate.getPath(), cwd, cwd));
19
19
 
20
20
  // skip functions on error cases (unsure why ruby sass does this)
21
21
  // if (trace.caller.substr(0, 6) == ", in f") continue;
@@ -23,7 +23,9 @@ namespace Sass {
23
23
  if (first) {
24
24
  ss << indent;
25
25
  ss << "on line ";
26
- ss << trace.pstate.line + 1;
26
+ ss << trace.pstate.getLine();
27
+ ss << ":";
28
+ ss << trace.pstate.getColumn();
27
29
  ss << " of " << rel_path;
28
30
  // ss << trace.caller;
29
31
  first = false;
@@ -32,7 +34,9 @@ namespace Sass {
32
34
  ss << std::endl;
33
35
  ss << indent;
34
36
  ss << "from line ";
35
- ss << trace.pstate.line + 1;
37
+ ss << trace.pstate.getLine();
38
+ ss << ":";
39
+ ss << trace.pstate.getColumn();
36
40
  ss << " of " << rel_path;
37
41
  }
38
42
 
@@ -10,19 +10,19 @@ namespace Sass {
10
10
 
11
11
  struct Backtrace {
12
12
 
13
- ParserState pstate;
14
- std::string caller;
13
+ SourceSpan pstate;
14
+ sass::string caller;
15
15
 
16
- Backtrace(ParserState pstate, std::string c = "")
16
+ Backtrace(SourceSpan pstate, sass::string c = "")
17
17
  : pstate(pstate),
18
18
  caller(c)
19
19
  { }
20
20
 
21
21
  };
22
22
 
23
- typedef std::vector<Backtrace> Backtraces;
23
+ typedef sass::vector<Backtrace> Backtraces;
24
24
 
25
- const std::string traces_to_string(Backtraces traces, std::string indent = "\t");
25
+ const sass::string traces_to_string(Backtraces traces, sass::string indent = "\t");
26
26
 
27
27
  }
28
28
 
@@ -1,11 +1,14 @@
1
+ // sass.hpp must go before all system headers to get the
2
+ // __EXTENSIONS__ fix on Solaris.
1
3
  #include "sass.hpp"
4
+
2
5
  #include "base64vlq.hpp"
3
6
 
4
7
  namespace Sass {
5
8
 
6
- std::string Base64VLQ::encode(const int number) const
9
+ sass::string Base64VLQ::encode(const int number) const
7
10
  {
8
- std::string encoded = "";
11
+ sass::string encoded = "";
9
12
 
10
13
  int vlq = to_vlq_signed(number);
11
14
 
@@ -9,7 +9,7 @@ namespace Sass {
9
9
 
10
10
  public:
11
11
 
12
- std::string encode(const int number) const;
12
+ sass::string encode(const int number) const;
13
13
 
14
14
  private:
15
15
 
@@ -1,6 +1,7 @@
1
1
  #include "sass.hpp"
2
2
  #include "bind.hpp"
3
3
  #include "ast.hpp"
4
+ #include "backtrace.hpp"
4
5
  #include "context.hpp"
5
6
  #include "expand.hpp"
6
7
  #include "eval.hpp"
@@ -10,11 +11,11 @@
10
11
 
11
12
  namespace Sass {
12
13
 
13
- void bind(std::string type, std::string name, Parameters_Obj ps, Arguments_Obj as, Context* ctx, Env* env, Eval* eval)
14
+ void bind(sass::string type, sass::string name, Parameters_Obj ps, Arguments_Obj as, Env* env, Eval* eval, Backtraces& traces)
14
15
  {
15
- std::string callee(type + " " + name);
16
+ sass::string callee(type + " " + name);
16
17
 
17
- std::map<std::string, Parameter_Obj> param_map;
18
+ std::map<sass::string, Parameter_Obj> param_map;
18
19
  List_Obj varargs = SASS_MEMORY_NEW(List, as->pstate());
19
20
  varargs->is_arglist(true); // enable keyword size handling
20
21
 
@@ -51,10 +52,10 @@ namespace Sass {
51
52
  }
52
53
  }
53
54
  }
54
- std::stringstream msg;
55
+ sass::ostream msg;
55
56
  msg << "wrong number of arguments (" << LA << " for " << LP << ")";
56
57
  msg << " for `" << name << "'";
57
- return error(msg.str(), as->pstate(), eval->exp.traces);
58
+ return error(msg.str(), as->pstate(), traces);
58
59
  }
59
60
  Parameter_Obj p = ps->at(ip);
60
61
 
@@ -66,13 +67,13 @@ namespace Sass {
66
67
  // We should always get a list for rest arguments
67
68
  if (List_Obj rest = Cast<List>(a->value())) {
68
69
  // create a new list object for wrapped items
69
- List_Ptr arglist = SASS_MEMORY_NEW(List,
70
+ List* arglist = SASS_MEMORY_NEW(List,
70
71
  p->pstate(),
71
72
  0,
72
73
  rest->separator(),
73
74
  true);
74
75
  // wrap each item from list as an argument
75
- for (Expression_Obj item : rest->elements()) {
76
+ for (ExpressionObj item : rest->elements()) {
76
77
  if (Argument_Obj arg = Cast<Argument>(item)) {
77
78
  arglist->append(SASS_MEMORY_COPY(arg)); // copy
78
79
  } else {
@@ -94,12 +95,12 @@ namespace Sass {
94
95
  } else if (a->is_keyword_argument()) {
95
96
 
96
97
  // expand keyword arguments into their parameters
97
- List_Ptr arglist = SASS_MEMORY_NEW(List, p->pstate(), 0, SASS_COMMA, true);
98
+ List* arglist = SASS_MEMORY_NEW(List, p->pstate(), 0, SASS_COMMA, true);
98
99
  env->local_frame()[p->name()] = arglist;
99
100
  Map_Obj argmap = Cast<Map>(a->value());
100
101
  for (auto key : argmap->keys()) {
101
102
  if (String_Constant_Obj str = Cast<String_Constant>(key)) {
102
- std::string param = unquote(str->value());
103
+ sass::string param = unquote(str->value());
103
104
  arglist->append(SASS_MEMORY_NEW(Argument,
104
105
  key->pstate(),
105
106
  argmap->at(key),
@@ -107,8 +108,8 @@ namespace Sass {
107
108
  false,
108
109
  false));
109
110
  } else {
110
- eval->exp.traces.push_back(Backtrace(key->pstate()));
111
- throw Exception::InvalidVarKwdType(key->pstate(), eval->exp.traces, key->inspect(), a);
111
+ traces.push_back(Backtrace(key->pstate()));
112
+ throw Exception::InvalidVarKwdType(key->pstate(), traces, key->inspect(), a);
112
113
  }
113
114
  }
114
115
 
@@ -129,7 +130,7 @@ namespace Sass {
129
130
  // skip any list completely if empty
130
131
  if (ls && ls->empty() && a->is_rest_argument()) continue;
131
132
 
132
- Expression_Obj value = a->value();
133
+ ExpressionObj value = a->value();
133
134
  if (Argument_Obj arg = Cast<Argument>(value)) {
134
135
  arglist->append(arg);
135
136
  }
@@ -140,7 +141,7 @@ namespace Sass {
140
141
  arglist->separator(rest->separator());
141
142
 
142
143
  for (size_t i = 0, L = rest->length(); i < L; ++i) {
143
- Expression_Obj obj = rest->value_at_index(i);
144
+ ExpressionObj obj = rest->value_at_index(i);
144
145
  arglist->append(SASS_MEMORY_NEW(Argument,
145
146
  obj->pstate(),
146
147
  obj,
@@ -167,7 +168,7 @@ namespace Sass {
167
168
  }
168
169
  // consumed parameter
169
170
  ++ip;
170
- // no more paramaters
171
+ // no more parameters
171
172
  break;
172
173
  }
173
174
 
@@ -176,7 +177,7 @@ namespace Sass {
176
177
  // normal param and rest arg
177
178
  List_Obj arglist = Cast<List>(a->value());
178
179
  if (!arglist) {
179
- if (Expression_Obj arg = Cast<Expression>(a->value())) {
180
+ if (ExpressionObj arg = Cast<Expression>(a->value())) {
180
181
  arglist = SASS_MEMORY_NEW(List, a->pstate(), 1);
181
182
  arglist->append(arg);
182
183
  }
@@ -188,7 +189,7 @@ namespace Sass {
188
189
  } else {
189
190
  if (arglist->length() > LP - ip && !ps->has_rest_parameter()) {
190
191
  size_t arg_count = (arglist->length() + LA - 1);
191
- std::stringstream msg;
192
+ sass::ostream msg;
192
193
  msg << callee << " takes " << LP;
193
194
  msg << (LP == 1 ? " argument" : " arguments");
194
195
  msg << " but " << arg_count;
@@ -201,9 +202,9 @@ namespace Sass {
201
202
  }
202
203
  }
203
204
  // otherwise move one of the rest args into the param, converting to argument if necessary
204
- Expression_Obj obj = arglist->at(0);
205
+ ExpressionObj obj = arglist->at(0);
205
206
  if (!(a = Cast<Argument>(obj))) {
206
- Expression_Ptr a_to_convert = obj;
207
+ Expression* a_to_convert = obj;
207
208
  a = SASS_MEMORY_NEW(Argument,
208
209
  a_to_convert->pstate(),
209
210
  a_to_convert,
@@ -220,17 +221,17 @@ namespace Sass {
220
221
  Map_Obj argmap = Cast<Map>(a->value());
221
222
 
222
223
  for (auto key : argmap->keys()) {
223
- String_Constant_Ptr val = Cast<String_Constant>(key);
224
+ String_Constant* val = Cast<String_Constant>(key);
224
225
  if (val == NULL) {
225
- eval->exp.traces.push_back(Backtrace(key->pstate()));
226
- throw Exception::InvalidVarKwdType(key->pstate(), eval->exp.traces, key->inspect(), a);
226
+ traces.push_back(Backtrace(key->pstate()));
227
+ throw Exception::InvalidVarKwdType(key->pstate(), traces, key->inspect(), a);
227
228
  }
228
- std::string param = "$" + unquote(val->value());
229
+ sass::string param = "$" + unquote(val->value());
229
230
 
230
231
  if (!param_map.count(param)) {
231
- std::stringstream msg;
232
+ sass::ostream msg;
232
233
  msg << callee << " has no parameter named " << param;
233
- error(msg.str(), a->pstate(), eval->exp.traces);
234
+ error(msg.str(), a->pstate(), traces);
234
235
  }
235
236
  env->local_frame()[param] = argmap->at(key);
236
237
  }
@@ -242,10 +243,10 @@ namespace Sass {
242
243
 
243
244
  if (a->name().empty()) {
244
245
  if (env->has_local(p->name())) {
245
- std::stringstream msg;
246
+ sass::ostream msg;
246
247
  msg << "parameter " << p->name()
247
248
  << " provided more than once in call to " << callee;
248
- error(msg.str(), a->pstate(), eval->exp.traces);
249
+ error(msg.str(), a->pstate(), traces);
249
250
  }
250
251
  // ordinal arg -- bind it to the next param
251
252
  env->local_frame()[p->name()] = a->value();
@@ -257,24 +258,24 @@ namespace Sass {
257
258
  if (ps->has_rest_parameter()) {
258
259
  varargs->append(a);
259
260
  } else {
260
- std::stringstream msg;
261
+ sass::ostream msg;
261
262
  msg << callee << " has no parameter named " << a->name();
262
- error(msg.str(), a->pstate(), eval->exp.traces);
263
+ error(msg.str(), a->pstate(), traces);
263
264
  }
264
265
  }
265
266
  if (param_map[a->name()]) {
266
267
  if (param_map[a->name()]->is_rest_parameter()) {
267
- std::stringstream msg;
268
+ sass::ostream msg;
268
269
  msg << "argument " << a->name() << " of " << callee
269
270
  << "cannot be used as named argument";
270
- error(msg.str(), a->pstate(), eval->exp.traces);
271
+ error(msg.str(), a->pstate(), traces);
271
272
  }
272
273
  }
273
274
  if (env->has_local(a->name())) {
274
- std::stringstream msg;
275
+ sass::ostream msg;
275
276
  msg << "parameter " << p->name()
276
277
  << "provided more than once in call to " << callee;
277
- error(msg.str(), a->pstate(), eval->exp.traces);
278
+ error(msg.str(), a->pstate(), traces);
278
279
  }
279
280
  env->local_frame()[a->name()] = a->value();
280
281
  }
@@ -294,12 +295,12 @@ namespace Sass {
294
295
  env->local_frame()[leftover->name()] = varargs;
295
296
  }
296
297
  else if (leftover->default_value()) {
297
- Expression_Ptr dv = leftover->default_value()->perform(eval);
298
+ Expression* dv = leftover->default_value()->perform(eval);
298
299
  env->local_frame()[leftover->name()] = dv;
299
300
  }
300
301
  else {
301
302
  // param is unbound and has no default value -- error
302
- throw Exception::MissingArgument(as->pstate(), eval->exp.traces, name, leftover->name(), type);
303
+ throw Exception::MissingArgument(as->pstate(), traces, name, leftover->name(), type);
303
304
  }
304
305
  }
305
306
  }
@@ -2,12 +2,14 @@
2
2
  #define SASS_BIND_H
3
3
 
4
4
  #include <string>
5
+ #include "backtrace.hpp"
5
6
  #include "environment.hpp"
6
7
  #include "ast_fwd_decl.hpp"
7
8
 
8
9
  namespace Sass {
9
10
 
10
- void bind(std::string type, std::string name, Parameters_Obj, Arguments_Obj, Context*, Env*, Eval*);
11
+ void bind(sass::string type, sass::string name, Parameters_Obj, Arguments_Obj, Env*, Eval*, Backtraces& traces);
12
+
11
13
  }
12
14
 
13
15
  #endif
@@ -0,0 +1,64 @@
1
+ #include "ast.hpp"
2
+ #include "units.hpp"
3
+ #include "position.hpp"
4
+ #include "backtrace.hpp"
5
+ #include "sass/values.h"
6
+ #include "ast_fwd_decl.hpp"
7
+ #include "error_handling.hpp"
8
+
9
+ namespace Sass {
10
+
11
+ Value* c2ast(union Sass_Value* v, Backtraces traces, SourceSpan pstate)
12
+ {
13
+ using std::strlen;
14
+ using std::strcpy;
15
+ Value* e = NULL;
16
+ switch (sass_value_get_tag(v)) {
17
+ case SASS_BOOLEAN: {
18
+ e = SASS_MEMORY_NEW(Boolean, pstate, !!sass_boolean_get_value(v));
19
+ } break;
20
+ case SASS_NUMBER: {
21
+ e = SASS_MEMORY_NEW(Number, pstate, sass_number_get_value(v), sass_number_get_unit(v));
22
+ } break;
23
+ case SASS_COLOR: {
24
+ e = SASS_MEMORY_NEW(Color_RGBA, pstate, sass_color_get_r(v), sass_color_get_g(v), sass_color_get_b(v), sass_color_get_a(v));
25
+ } break;
26
+ case SASS_STRING: {
27
+ if (sass_string_is_quoted(v))
28
+ e = SASS_MEMORY_NEW(String_Quoted, pstate, sass_string_get_value(v));
29
+ else {
30
+ e = SASS_MEMORY_NEW(String_Constant, pstate, sass_string_get_value(v));
31
+ }
32
+ } break;
33
+ case SASS_LIST: {
34
+ List* l = SASS_MEMORY_NEW(List, pstate, sass_list_get_length(v), sass_list_get_separator(v));
35
+ for (size_t i = 0, L = sass_list_get_length(v); i < L; ++i) {
36
+ l->append(c2ast(sass_list_get_value(v, i), traces, pstate));
37
+ }
38
+ l->is_bracketed(sass_list_get_is_bracketed(v));
39
+ e = l;
40
+ } break;
41
+ case SASS_MAP: {
42
+ Map* m = SASS_MEMORY_NEW(Map, pstate);
43
+ for (size_t i = 0, L = sass_map_get_length(v); i < L; ++i) {
44
+ *m << std::make_pair(
45
+ c2ast(sass_map_get_key(v, i), traces, pstate),
46
+ c2ast(sass_map_get_value(v, i), traces, pstate));
47
+ }
48
+ e = m;
49
+ } break;
50
+ case SASS_NULL: {
51
+ e = SASS_MEMORY_NEW(Null, pstate);
52
+ } break;
53
+ case SASS_ERROR: {
54
+ error("Error in C function: " + sass::string(sass_error_get_message(v)), pstate, traces);
55
+ } break;
56
+ case SASS_WARNING: {
57
+ error("Warning in C function: " + sass::string(sass_warning_get_message(v)), pstate, traces);
58
+ } break;
59
+ default: break;
60
+ }
61
+ return e;
62
+ }
63
+
64
+ }
@@ -0,0 +1,14 @@
1
+ #ifndef SASS_C2AST_H
2
+ #define SASS_C2AST_H
3
+
4
+ #include "position.hpp"
5
+ #include "backtrace.hpp"
6
+ #include "ast_fwd_decl.hpp"
7
+
8
+ namespace Sass {
9
+
10
+ Value* c2ast(union Sass_Value* v, Backtraces traces, SourceSpan pstate);
11
+
12
+ }
13
+
14
+ #endif
@@ -46,9 +46,8 @@ int base64_encode_block(const char* plaintext_in, int length_in, char* code_out,
46
46
  result = (fragment & 0x0fc) >> 2;
47
47
  *codechar++ = base64_encode_value(result);
48
48
  result = (fragment & 0x003) << 4;
49
- #ifndef _MSC_VER
50
- __attribute__ ((fallthrough));
51
- #endif
49
+ /* fall through */
50
+
52
51
  case step_B:
53
52
  if (plainchar == plaintextend)
54
53
  {
@@ -60,9 +59,8 @@ int base64_encode_block(const char* plaintext_in, int length_in, char* code_out,
60
59
  result |= (fragment & 0x0f0) >> 4;
61
60
  *codechar++ = base64_encode_value(result);
62
61
  result = (fragment & 0x00f) << 2;
63
- #ifndef _MSC_VER
64
- __attribute__ ((fallthrough));
65
- #endif
62
+ /* fall through */
63
+
66
64
  case step_C:
67
65
  if (plainchar == plaintextend)
68
66
  {
@@ -1,31 +1,32 @@
1
+ // sass.hpp must go before all system headers to get the
2
+ // __EXTENSIONS__ fix on Solaris.
1
3
  #include "sass.hpp"
2
- #include <vector>
3
-
4
+ #include "ast.hpp"
4
5
  #include "check_nesting.hpp"
5
6
 
6
7
  namespace Sass {
7
8
 
8
9
  CheckNesting::CheckNesting()
9
- : parents(std::vector<Statement_Ptr>()),
10
- traces(std::vector<Backtrace>()),
10
+ : parents(sass::vector<Statement*>()),
11
+ traces(sass::vector<Backtrace>()),
11
12
  parent(0), current_mixin_definition(0)
12
13
  { }
13
14
 
14
- void error(AST_Node_Ptr node, Backtraces traces, std::string msg) {
15
+ void error(AST_Node* node, Backtraces traces, sass::string msg) {
15
16
  traces.push_back(Backtrace(node->pstate()));
16
17
  throw Exception::InvalidSass(node->pstate(), traces, msg);
17
18
  }
18
19
 
19
- Statement_Ptr CheckNesting::visit_children(Statement_Ptr parent)
20
+ Statement* CheckNesting::visit_children(Statement* parent)
20
21
  {
21
- Statement_Ptr old_parent = this->parent;
22
+ Statement* old_parent = this->parent;
22
23
 
23
- if (At_Root_Block_Ptr root = Cast<At_Root_Block>(parent)) {
24
- std::vector<Statement_Ptr> old_parents = this->parents;
25
- std::vector<Statement_Ptr> new_parents;
24
+ if (AtRootRule* root = Cast<AtRootRule>(parent)) {
25
+ sass::vector<Statement*> old_parents = this->parents;
26
+ sass::vector<Statement*> new_parents;
26
27
 
27
28
  for (size_t i = 0, L = this->parents.size(); i < L; i++) {
28
- Statement_Ptr p = this->parents.at(i);
29
+ Statement* p = this->parents.at(i);
29
30
  if (!root->exclude_node(p)) {
30
31
  new_parents.push_back(p);
31
32
  }
@@ -33,8 +34,8 @@ namespace Sass {
33
34
  this->parents = new_parents;
34
35
 
35
36
  for (size_t i = this->parents.size(); i > 0; i--) {
36
- Statement_Ptr p = 0;
37
- Statement_Ptr gp = 0;
37
+ Statement* p = 0;
38
+ Statement* gp = 0;
38
39
  if (i > 0) p = this->parents.at(i - 1);
39
40
  if (i > 1) gp = this->parents.at(i - 2);
40
41
 
@@ -44,8 +45,8 @@ namespace Sass {
44
45
  }
45
46
  }
46
47
 
47
- At_Root_Block_Ptr ar = Cast<At_Root_Block>(parent);
48
- Block_Ptr ret = ar->block();
48
+ AtRootRule* ar = Cast<AtRootRule>(parent);
49
+ Block* ret = ar->block();
49
50
 
50
51
  if (ret != NULL) {
51
52
  for (auto n : ret->elements()) {
@@ -65,16 +66,16 @@ namespace Sass {
65
66
 
66
67
  this->parents.push_back(parent);
67
68
 
68
- Block_Ptr b = Cast<Block>(parent);
69
+ Block* b = Cast<Block>(parent);
69
70
 
70
- if (Trace_Ptr trace = Cast<Trace>(parent)) {
71
+ if (Trace* trace = Cast<Trace>(parent)) {
71
72
  if (trace->type() == 'i') {
72
73
  this->traces.push_back(Backtrace(trace->pstate()));
73
74
  }
74
75
  }
75
76
 
76
77
  if (!b) {
77
- if (Has_Block_Ptr bb = Cast<Has_Block>(parent)) {
78
+ if (ParentStatement* bb = Cast<ParentStatement>(parent)) {
78
79
  b = bb->block();
79
80
  }
80
81
  }
@@ -88,7 +89,7 @@ namespace Sass {
88
89
  this->parent = old_parent;
89
90
  this->parents.pop_back();
90
91
 
91
- if (Trace_Ptr trace = Cast<Trace>(parent)) {
92
+ if (Trace* trace = Cast<Trace>(parent)) {
92
93
  if (trace->type() == 'i') {
93
94
  this->traces.pop_back();
94
95
  }
@@ -98,12 +99,12 @@ namespace Sass {
98
99
  }
99
100
 
100
101
 
101
- Statement_Ptr CheckNesting::operator()(Block_Ptr b)
102
+ Statement* CheckNesting::operator()(Block* b)
102
103
  {
103
104
  return this->visit_children(b);
104
105
  }
105
106
 
106
- Statement_Ptr CheckNesting::operator()(Definition_Ptr n)
107
+ Statement* CheckNesting::operator()(Definition* n)
107
108
  {
108
109
  if (!this->should_visit(n)) return NULL;
109
110
  if (!is_mixin(n)) {
@@ -111,7 +112,7 @@ namespace Sass {
111
112
  return n;
112
113
  }
113
114
 
114
- Definition_Ptr old_mixin_definition = this->current_mixin_definition;
115
+ Definition* old_mixin_definition = this->current_mixin_definition;
115
116
  this->current_mixin_definition = n;
116
117
 
117
118
  visit_children(n);
@@ -121,25 +122,18 @@ namespace Sass {
121
122
  return n;
122
123
  }
123
124
 
124
- Statement_Ptr CheckNesting::operator()(If_Ptr i)
125
+ Statement* CheckNesting::operator()(If* i)
125
126
  {
126
127
  this->visit_children(i);
127
128
 
128
- if (Block_Ptr b = Cast<Block>(i->alternative())) {
129
+ if (Block* b = Cast<Block>(i->alternative())) {
129
130
  for (auto n : b->elements()) n->perform(this);
130
131
  }
131
132
 
132
133
  return i;
133
134
  }
134
135
 
135
- Statement_Ptr CheckNesting::fallback_impl(Statement_Ptr s)
136
- {
137
- Block_Ptr b1 = Cast<Block>(s);
138
- Has_Block_Ptr b2 = Cast<Has_Block>(s);
139
- return b1 || b2 ? visit_children(s) : s;
140
- }
141
-
142
- bool CheckNesting::should_visit(Statement_Ptr node)
136
+ bool CheckNesting::should_visit(Statement* node)
143
137
  {
144
138
  if (!this->parent) return true;
145
139
 
@@ -149,7 +143,7 @@ namespace Sass {
149
143
  if (is_charset(node))
150
144
  { this->invalid_charset_parent(this->parent, node); }
151
145
 
152
- if (Cast<Extension>(node))
146
+ if (Cast<ExtendRule>(node))
153
147
  { this->invalid_extend_parent(this->parent, node); }
154
148
 
155
149
  // if (Cast<Import>(node))
@@ -164,7 +158,7 @@ namespace Sass {
164
158
  if (this->is_function(this->parent))
165
159
  { this->invalid_function_child(node); }
166
160
 
167
- if (Declaration_Ptr d = Cast<Declaration>(node))
161
+ if (Declaration* d = Cast<Declaration>(node))
168
162
  {
169
163
  this->invalid_prop_parent(this->parent, node);
170
164
  this->invalid_value_child(d->value());
@@ -179,14 +173,14 @@ namespace Sass {
179
173
  return true;
180
174
  }
181
175
 
182
- void CheckNesting::invalid_content_parent(Statement_Ptr parent, AST_Node_Ptr node)
176
+ void CheckNesting::invalid_content_parent(Statement* parent, AST_Node* node)
183
177
  {
184
178
  if (!this->current_mixin_definition) {
185
179
  error(node, traces, "@content may only be used within a mixin.");
186
180
  }
187
181
  }
188
182
 
189
- void CheckNesting::invalid_charset_parent(Statement_Ptr parent, AST_Node_Ptr node)
183
+ void CheckNesting::invalid_charset_parent(Statement* parent, AST_Node* node)
190
184
  {
191
185
  if (!(
192
186
  is_root_node(parent)
@@ -195,10 +189,10 @@ namespace Sass {
195
189
  }
196
190
  }
197
191
 
198
- void CheckNesting::invalid_extend_parent(Statement_Ptr parent, AST_Node_Ptr node)
192
+ void CheckNesting::invalid_extend_parent(Statement* parent, AST_Node* node)
199
193
  {
200
194
  if (!(
201
- Cast<Ruleset>(parent) ||
195
+ Cast<StyleRule>(parent) ||
202
196
  Cast<Mixin_Call>(parent) ||
203
197
  is_mixin(parent)
204
198
  )) {
@@ -206,14 +200,14 @@ namespace Sass {
206
200
  }
207
201
  }
208
202
 
209
- // void CheckNesting::invalid_import_parent(Statement_Ptr parent, AST_Node_Ptr node)
203
+ // void CheckNesting::invalid_import_parent(Statement* parent, AST_Node* node)
210
204
  // {
211
205
  // for (auto pp : this->parents) {
212
206
  // if (
213
- // Cast<Each>(pp) ||
214
- // Cast<For>(pp) ||
207
+ // Cast<EachRule>(pp) ||
208
+ // Cast<ForRule>(pp) ||
215
209
  // Cast<If>(pp) ||
216
- // Cast<While>(pp) ||
210
+ // Cast<WhileRule>(pp) ||
217
211
  // Cast<Trace>(pp) ||
218
212
  // Cast<Mixin_Call>(pp) ||
219
213
  // is_mixin(pp)
@@ -231,14 +225,14 @@ namespace Sass {
231
225
  // }
232
226
  // }
233
227
 
234
- void CheckNesting::invalid_mixin_definition_parent(Statement_Ptr parent, AST_Node_Ptr node)
228
+ void CheckNesting::invalid_mixin_definition_parent(Statement* parent, AST_Node* node)
235
229
  {
236
- for (Statement_Ptr pp : this->parents) {
230
+ for (Statement* pp : this->parents) {
237
231
  if (
238
- Cast<Each>(pp) ||
239
- Cast<For>(pp) ||
232
+ Cast<EachRule>(pp) ||
233
+ Cast<ForRule>(pp) ||
240
234
  Cast<If>(pp) ||
241
- Cast<While>(pp) ||
235
+ Cast<WhileRule>(pp) ||
242
236
  Cast<Trace>(pp) ||
243
237
  Cast<Mixin_Call>(pp) ||
244
238
  is_mixin(pp)
@@ -248,14 +242,14 @@ namespace Sass {
248
242
  }
249
243
  }
250
244
 
251
- void CheckNesting::invalid_function_parent(Statement_Ptr parent, AST_Node_Ptr node)
245
+ void CheckNesting::invalid_function_parent(Statement* parent, AST_Node* node)
252
246
  {
253
- for (Statement_Ptr pp : this->parents) {
247
+ for (Statement* pp : this->parents) {
254
248
  if (
255
- Cast<Each>(pp) ||
256
- Cast<For>(pp) ||
249
+ Cast<EachRule>(pp) ||
250
+ Cast<ForRule>(pp) ||
257
251
  Cast<If>(pp) ||
258
- Cast<While>(pp) ||
252
+ Cast<WhileRule>(pp) ||
259
253
  Cast<Trace>(pp) ||
260
254
  Cast<Mixin_Call>(pp) ||
261
255
  is_mixin(pp)
@@ -265,34 +259,34 @@ namespace Sass {
265
259
  }
266
260
  }
267
261
 
268
- void CheckNesting::invalid_function_child(Statement_Ptr child)
262
+ void CheckNesting::invalid_function_child(Statement* child)
269
263
  {
270
264
  if (!(
271
- Cast<Each>(child) ||
272
- Cast<For>(child) ||
265
+ Cast<EachRule>(child) ||
266
+ Cast<ForRule>(child) ||
273
267
  Cast<If>(child) ||
274
- Cast<While>(child) ||
268
+ Cast<WhileRule>(child) ||
275
269
  Cast<Trace>(child) ||
276
270
  Cast<Comment>(child) ||
277
- Cast<Debug>(child) ||
271
+ Cast<DebugRule>(child) ||
278
272
  Cast<Return>(child) ||
279
273
  Cast<Variable>(child) ||
280
274
  // Ruby Sass doesn't distinguish variables and assignments
281
275
  Cast<Assignment>(child) ||
282
- Cast<Warning>(child) ||
283
- Cast<Error>(child)
276
+ Cast<WarningRule>(child) ||
277
+ Cast<ErrorRule>(child)
284
278
  )) {
285
279
  error(child, traces, "Functions can only contain variable declarations and control directives.");
286
280
  }
287
281
  }
288
282
 
289
- void CheckNesting::invalid_prop_child(Statement_Ptr child)
283
+ void CheckNesting::invalid_prop_child(Statement* child)
290
284
  {
291
285
  if (!(
292
- Cast<Each>(child) ||
293
- Cast<For>(child) ||
286
+ Cast<EachRule>(child) ||
287
+ Cast<ForRule>(child) ||
294
288
  Cast<If>(child) ||
295
- Cast<While>(child) ||
289
+ Cast<WhileRule>(child) ||
296
290
  Cast<Trace>(child) ||
297
291
  Cast<Comment>(child) ||
298
292
  Cast<Declaration>(child) ||
@@ -302,12 +296,12 @@ namespace Sass {
302
296
  }
303
297
  }
304
298
 
305
- void CheckNesting::invalid_prop_parent(Statement_Ptr parent, AST_Node_Ptr node)
299
+ void CheckNesting::invalid_prop_parent(Statement* parent, AST_Node* node)
306
300
  {
307
301
  if (!(
308
302
  is_mixin(parent) ||
309
303
  is_directive_node(parent) ||
310
- Cast<Ruleset>(parent) ||
304
+ Cast<StyleRule>(parent) ||
311
305
  Cast<Keyframe_Rule>(parent) ||
312
306
  Cast<Declaration>(parent) ||
313
307
  Cast<Mixin_Call>(parent)
@@ -316,13 +310,13 @@ namespace Sass {
316
310
  }
317
311
  }
318
312
 
319
- void CheckNesting::invalid_value_child(AST_Node_Ptr d)
313
+ void CheckNesting::invalid_value_child(AST_Node* d)
320
314
  {
321
- if (Map_Ptr m = Cast<Map>(d)) {
315
+ if (Map* m = Cast<Map>(d)) {
322
316
  traces.push_back(Backtrace(m->pstate()));
323
317
  throw Exception::InvalidValue(traces, *m);
324
318
  }
325
- if (Number_Ptr n = Cast<Number>(d)) {
319
+ if (Number* n = Cast<Number>(d)) {
326
320
  if (!n->is_valid_css_unit()) {
327
321
  traces.push_back(Backtrace(n->pstate()));
328
322
  throw Exception::InvalidValue(traces, *n);
@@ -333,14 +327,14 @@ namespace Sass {
333
327
 
334
328
  }
335
329
 
336
- void CheckNesting::invalid_return_parent(Statement_Ptr parent, AST_Node_Ptr node)
330
+ void CheckNesting::invalid_return_parent(Statement* parent, AST_Node* node)
337
331
  {
338
332
  if (!this->is_function(parent)) {
339
333
  error(node, traces, "@return may only be used within a function.");
340
334
  }
341
335
  }
342
336
 
343
- bool CheckNesting::is_transparent_parent(Statement_Ptr parent, Statement_Ptr grandparent)
337
+ bool CheckNesting::is_transparent_parent(Statement* parent, Statement* grandparent)
344
338
  {
345
339
  bool parent_bubbles = parent && parent->bubbles();
346
340
 
@@ -349,50 +343,51 @@ namespace Sass {
349
343
  !is_at_root_node(grandparent);
350
344
 
351
345
  return Cast<Import>(parent) ||
352
- Cast<Each>(parent) ||
353
- Cast<For>(parent) ||
346
+ Cast<EachRule>(parent) ||
347
+ Cast<ForRule>(parent) ||
354
348
  Cast<If>(parent) ||
355
- Cast<While>(parent) ||
349
+ Cast<WhileRule>(parent) ||
356
350
  Cast<Trace>(parent) ||
357
351
  valid_bubble_node;
358
352
  }
359
353
 
360
- bool CheckNesting::is_charset(Statement_Ptr n)
354
+ bool CheckNesting::is_charset(Statement* n)
361
355
  {
362
- Directive_Ptr d = Cast<Directive>(n);
356
+ AtRule* d = Cast<AtRule>(n);
363
357
  return d && d->keyword() == "charset";
364
358
  }
365
359
 
366
- bool CheckNesting::is_mixin(Statement_Ptr n)
360
+ bool CheckNesting::is_mixin(Statement* n)
367
361
  {
368
- Definition_Ptr def = Cast<Definition>(n);
362
+ Definition* def = Cast<Definition>(n);
369
363
  return def && def->type() == Definition::MIXIN;
370
364
  }
371
365
 
372
- bool CheckNesting::is_function(Statement_Ptr n)
366
+ bool CheckNesting::is_function(Statement* n)
373
367
  {
374
- Definition_Ptr def = Cast<Definition>(n);
368
+ Definition* def = Cast<Definition>(n);
375
369
  return def && def->type() == Definition::FUNCTION;
376
370
  }
377
371
 
378
- bool CheckNesting::is_root_node(Statement_Ptr n)
372
+ bool CheckNesting::is_root_node(Statement* n)
379
373
  {
380
- if (Cast<Ruleset>(n)) return false;
374
+ if (Cast<StyleRule>(n)) return false;
381
375
 
382
- Block_Ptr b = Cast<Block>(n);
376
+ Block* b = Cast<Block>(n);
383
377
  return b && b->is_root();
384
378
  }
385
379
 
386
- bool CheckNesting::is_at_root_node(Statement_Ptr n)
380
+ bool CheckNesting::is_at_root_node(Statement* n)
387
381
  {
388
- return Cast<At_Root_Block>(n) != NULL;
382
+ return Cast<AtRootRule>(n) != NULL;
389
383
  }
390
384
 
391
- bool CheckNesting::is_directive_node(Statement_Ptr n)
385
+ bool CheckNesting::is_directive_node(Statement* n)
392
386
  {
393
- return Cast<Directive>(n) ||
387
+ return Cast<AtRule>(n) ||
394
388
  Cast<Import>(n) ||
395
- Cast<Media_Block>(n) ||
396
- Cast<Supports_Block>(n);
389
+ Cast<MediaRule>(n) ||
390
+ Cast<CssMediaRule>(n) ||
391
+ Cast<SupportsRule>(n);
397
392
  }
398
393
  }