sassc 2.0.1 → 2.1.0.pre1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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
@@ -24,6 +24,8 @@ namespace Sass {
24
24
  ss << indent;
25
25
  ss << "on line ";
26
26
  ss << trace.pstate.line + 1;
27
+ ss << ":";
28
+ ss << trace.pstate.column + 1;
27
29
  ss << " of " << rel_path;
28
30
  // ss << trace.caller;
29
31
  first = false;
@@ -33,6 +35,8 @@ namespace Sass {
33
35
  ss << indent;
34
36
  ss << "from line ";
35
37
  ss << trace.pstate.line + 1;
38
+ ss << ":";
39
+ ss << trace.pstate.column + 1;
36
40
  ss << " of " << rel_path;
37
41
  }
38
42
 
@@ -1,4 +1,7 @@
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 {
@@ -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,7 +11,7 @@
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(std::string type, std::string name, Parameters_Obj ps, Arguments_Obj as, Env* env, Eval* eval, Backtraces& traces)
14
15
  {
15
16
  std::string callee(type + " " + name);
16
17
 
@@ -54,7 +55,7 @@ namespace Sass {
54
55
  std::stringstream 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,7 +67,7 @@ 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(),
@@ -94,7 +95,7 @@ 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()) {
@@ -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
 
@@ -203,7 +204,7 @@ namespace Sass {
203
204
  // otherwise move one of the rest args into the param, converting to argument if necessary
204
205
  Expression_Obj 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
229
  std::string param = "$" + unquote(val->value());
229
230
 
230
231
  if (!param_map.count(param)) {
231
232
  std::stringstream 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
  }
@@ -245,7 +246,7 @@ namespace Sass {
245
246
  std::stringstream 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();
@@ -259,7 +260,7 @@ namespace Sass {
259
260
  } else {
260
261
  std::stringstream 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()]) {
@@ -267,14 +268,14 @@ namespace Sass {
267
268
  std::stringstream 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
275
  std::stringstream 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(std::string type, std::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, ParserState 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: " + std::string(sass_error_get_message(v)), pstate, traces);
55
+ } break;
56
+ case SASS_WARNING: {
57
+ error("Warning in C function: " + std::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, ParserState pstate);
11
+
12
+ }
13
+
14
+ #endif
@@ -47,7 +47,7 @@ int base64_encode_block(const char* plaintext_in, int length_in, char* code_out,
47
47
  *codechar++ = base64_encode_value(result);
48
48
  result = (fragment & 0x003) << 4;
49
49
  #ifndef _MSC_VER
50
- __attribute__ ((fallthrough));
50
+ /* fall through */
51
51
  #endif
52
52
  case step_B:
53
53
  if (plainchar == plaintextend)
@@ -61,7 +61,7 @@ int base64_encode_block(const char* plaintext_in, int length_in, char* code_out,
61
61
  *codechar++ = base64_encode_value(result);
62
62
  result = (fragment & 0x00f) << 2;
63
63
  #ifndef _MSC_VER
64
- __attribute__ ((fallthrough));
64
+ /* fall through */
65
65
  #endif
66
66
  case step_C:
67
67
  if (plainchar == plaintextend)
@@ -1,4 +1,7 @@
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 <vector>
3
6
 
4
7
  #include "check_nesting.hpp"
@@ -6,26 +9,26 @@
6
9
  namespace Sass {
7
10
 
8
11
  CheckNesting::CheckNesting()
9
- : parents(std::vector<Statement_Ptr>()),
12
+ : parents(std::vector<Statement*>()),
10
13
  traces(std::vector<Backtrace>()),
11
14
  parent(0), current_mixin_definition(0)
12
15
  { }
13
16
 
14
- void error(AST_Node_Ptr node, Backtraces traces, std::string msg) {
17
+ void error(AST_Node* node, Backtraces traces, std::string msg) {
15
18
  traces.push_back(Backtrace(node->pstate()));
16
19
  throw Exception::InvalidSass(node->pstate(), traces, msg);
17
20
  }
18
21
 
19
- Statement_Ptr CheckNesting::visit_children(Statement_Ptr parent)
22
+ Statement* CheckNesting::visit_children(Statement* parent)
20
23
  {
21
- Statement_Ptr old_parent = this->parent;
24
+ Statement* old_parent = this->parent;
22
25
 
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;
26
+ if (At_Root_Block* root = Cast<At_Root_Block>(parent)) {
27
+ std::vector<Statement*> old_parents = this->parents;
28
+ std::vector<Statement*> new_parents;
26
29
 
27
30
  for (size_t i = 0, L = this->parents.size(); i < L; i++) {
28
- Statement_Ptr p = this->parents.at(i);
31
+ Statement* p = this->parents.at(i);
29
32
  if (!root->exclude_node(p)) {
30
33
  new_parents.push_back(p);
31
34
  }
@@ -33,8 +36,8 @@ namespace Sass {
33
36
  this->parents = new_parents;
34
37
 
35
38
  for (size_t i = this->parents.size(); i > 0; i--) {
36
- Statement_Ptr p = 0;
37
- Statement_Ptr gp = 0;
39
+ Statement* p = 0;
40
+ Statement* gp = 0;
38
41
  if (i > 0) p = this->parents.at(i - 1);
39
42
  if (i > 1) gp = this->parents.at(i - 2);
40
43
 
@@ -44,8 +47,8 @@ namespace Sass {
44
47
  }
45
48
  }
46
49
 
47
- At_Root_Block_Ptr ar = Cast<At_Root_Block>(parent);
48
- Block_Ptr ret = ar->block();
50
+ At_Root_Block* ar = Cast<At_Root_Block>(parent);
51
+ Block* ret = ar->block();
49
52
 
50
53
  if (ret != NULL) {
51
54
  for (auto n : ret->elements()) {
@@ -65,16 +68,16 @@ namespace Sass {
65
68
 
66
69
  this->parents.push_back(parent);
67
70
 
68
- Block_Ptr b = Cast<Block>(parent);
71
+ Block* b = Cast<Block>(parent);
69
72
 
70
- if (Trace_Ptr trace = Cast<Trace>(parent)) {
73
+ if (Trace* trace = Cast<Trace>(parent)) {
71
74
  if (trace->type() == 'i') {
72
75
  this->traces.push_back(Backtrace(trace->pstate()));
73
76
  }
74
77
  }
75
78
 
76
79
  if (!b) {
77
- if (Has_Block_Ptr bb = Cast<Has_Block>(parent)) {
80
+ if (Has_Block* bb = Cast<Has_Block>(parent)) {
78
81
  b = bb->block();
79
82
  }
80
83
  }
@@ -88,7 +91,7 @@ namespace Sass {
88
91
  this->parent = old_parent;
89
92
  this->parents.pop_back();
90
93
 
91
- if (Trace_Ptr trace = Cast<Trace>(parent)) {
94
+ if (Trace* trace = Cast<Trace>(parent)) {
92
95
  if (trace->type() == 'i') {
93
96
  this->traces.pop_back();
94
97
  }
@@ -98,12 +101,12 @@ namespace Sass {
98
101
  }
99
102
 
100
103
 
101
- Statement_Ptr CheckNesting::operator()(Block_Ptr b)
104
+ Statement* CheckNesting::operator()(Block* b)
102
105
  {
103
106
  return this->visit_children(b);
104
107
  }
105
108
 
106
- Statement_Ptr CheckNesting::operator()(Definition_Ptr n)
109
+ Statement* CheckNesting::operator()(Definition* n)
107
110
  {
108
111
  if (!this->should_visit(n)) return NULL;
109
112
  if (!is_mixin(n)) {
@@ -111,7 +114,7 @@ namespace Sass {
111
114
  return n;
112
115
  }
113
116
 
114
- Definition_Ptr old_mixin_definition = this->current_mixin_definition;
117
+ Definition* old_mixin_definition = this->current_mixin_definition;
115
118
  this->current_mixin_definition = n;
116
119
 
117
120
  visit_children(n);
@@ -121,25 +124,18 @@ namespace Sass {
121
124
  return n;
122
125
  }
123
126
 
124
- Statement_Ptr CheckNesting::operator()(If_Ptr i)
127
+ Statement* CheckNesting::operator()(If* i)
125
128
  {
126
129
  this->visit_children(i);
127
130
 
128
- if (Block_Ptr b = Cast<Block>(i->alternative())) {
131
+ if (Block* b = Cast<Block>(i->alternative())) {
129
132
  for (auto n : b->elements()) n->perform(this);
130
133
  }
131
134
 
132
135
  return i;
133
136
  }
134
137
 
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)
138
+ bool CheckNesting::should_visit(Statement* node)
143
139
  {
144
140
  if (!this->parent) return true;
145
141
 
@@ -164,7 +160,7 @@ namespace Sass {
164
160
  if (this->is_function(this->parent))
165
161
  { this->invalid_function_child(node); }
166
162
 
167
- if (Declaration_Ptr d = Cast<Declaration>(node))
163
+ if (Declaration* d = Cast<Declaration>(node))
168
164
  {
169
165
  this->invalid_prop_parent(this->parent, node);
170
166
  this->invalid_value_child(d->value());
@@ -179,14 +175,14 @@ namespace Sass {
179
175
  return true;
180
176
  }
181
177
 
182
- void CheckNesting::invalid_content_parent(Statement_Ptr parent, AST_Node_Ptr node)
178
+ void CheckNesting::invalid_content_parent(Statement* parent, AST_Node* node)
183
179
  {
184
180
  if (!this->current_mixin_definition) {
185
181
  error(node, traces, "@content may only be used within a mixin.");
186
182
  }
187
183
  }
188
184
 
189
- void CheckNesting::invalid_charset_parent(Statement_Ptr parent, AST_Node_Ptr node)
185
+ void CheckNesting::invalid_charset_parent(Statement* parent, AST_Node* node)
190
186
  {
191
187
  if (!(
192
188
  is_root_node(parent)
@@ -195,7 +191,7 @@ namespace Sass {
195
191
  }
196
192
  }
197
193
 
198
- void CheckNesting::invalid_extend_parent(Statement_Ptr parent, AST_Node_Ptr node)
194
+ void CheckNesting::invalid_extend_parent(Statement* parent, AST_Node* node)
199
195
  {
200
196
  if (!(
201
197
  Cast<Ruleset>(parent) ||
@@ -206,7 +202,7 @@ namespace Sass {
206
202
  }
207
203
  }
208
204
 
209
- // void CheckNesting::invalid_import_parent(Statement_Ptr parent, AST_Node_Ptr node)
205
+ // void CheckNesting::invalid_import_parent(Statement* parent, AST_Node* node)
210
206
  // {
211
207
  // for (auto pp : this->parents) {
212
208
  // if (
@@ -231,9 +227,9 @@ namespace Sass {
231
227
  // }
232
228
  // }
233
229
 
234
- void CheckNesting::invalid_mixin_definition_parent(Statement_Ptr parent, AST_Node_Ptr node)
230
+ void CheckNesting::invalid_mixin_definition_parent(Statement* parent, AST_Node* node)
235
231
  {
236
- for (Statement_Ptr pp : this->parents) {
232
+ for (Statement* pp : this->parents) {
237
233
  if (
238
234
  Cast<Each>(pp) ||
239
235
  Cast<For>(pp) ||
@@ -248,9 +244,9 @@ namespace Sass {
248
244
  }
249
245
  }
250
246
 
251
- void CheckNesting::invalid_function_parent(Statement_Ptr parent, AST_Node_Ptr node)
247
+ void CheckNesting::invalid_function_parent(Statement* parent, AST_Node* node)
252
248
  {
253
- for (Statement_Ptr pp : this->parents) {
249
+ for (Statement* pp : this->parents) {
254
250
  if (
255
251
  Cast<Each>(pp) ||
256
252
  Cast<For>(pp) ||
@@ -265,7 +261,7 @@ namespace Sass {
265
261
  }
266
262
  }
267
263
 
268
- void CheckNesting::invalid_function_child(Statement_Ptr child)
264
+ void CheckNesting::invalid_function_child(Statement* child)
269
265
  {
270
266
  if (!(
271
267
  Cast<Each>(child) ||
@@ -286,7 +282,7 @@ namespace Sass {
286
282
  }
287
283
  }
288
284
 
289
- void CheckNesting::invalid_prop_child(Statement_Ptr child)
285
+ void CheckNesting::invalid_prop_child(Statement* child)
290
286
  {
291
287
  if (!(
292
288
  Cast<Each>(child) ||
@@ -302,7 +298,7 @@ namespace Sass {
302
298
  }
303
299
  }
304
300
 
305
- void CheckNesting::invalid_prop_parent(Statement_Ptr parent, AST_Node_Ptr node)
301
+ void CheckNesting::invalid_prop_parent(Statement* parent, AST_Node* node)
306
302
  {
307
303
  if (!(
308
304
  is_mixin(parent) ||
@@ -316,13 +312,13 @@ namespace Sass {
316
312
  }
317
313
  }
318
314
 
319
- void CheckNesting::invalid_value_child(AST_Node_Ptr d)
315
+ void CheckNesting::invalid_value_child(AST_Node* d)
320
316
  {
321
- if (Map_Ptr m = Cast<Map>(d)) {
317
+ if (Map* m = Cast<Map>(d)) {
322
318
  traces.push_back(Backtrace(m->pstate()));
323
319
  throw Exception::InvalidValue(traces, *m);
324
320
  }
325
- if (Number_Ptr n = Cast<Number>(d)) {
321
+ if (Number* n = Cast<Number>(d)) {
326
322
  if (!n->is_valid_css_unit()) {
327
323
  traces.push_back(Backtrace(n->pstate()));
328
324
  throw Exception::InvalidValue(traces, *n);
@@ -333,14 +329,14 @@ namespace Sass {
333
329
 
334
330
  }
335
331
 
336
- void CheckNesting::invalid_return_parent(Statement_Ptr parent, AST_Node_Ptr node)
332
+ void CheckNesting::invalid_return_parent(Statement* parent, AST_Node* node)
337
333
  {
338
334
  if (!this->is_function(parent)) {
339
335
  error(node, traces, "@return may only be used within a function.");
340
336
  }
341
337
  }
342
338
 
343
- bool CheckNesting::is_transparent_parent(Statement_Ptr parent, Statement_Ptr grandparent)
339
+ bool CheckNesting::is_transparent_parent(Statement* parent, Statement* grandparent)
344
340
  {
345
341
  bool parent_bubbles = parent && parent->bubbles();
346
342
 
@@ -357,38 +353,38 @@ namespace Sass {
357
353
  valid_bubble_node;
358
354
  }
359
355
 
360
- bool CheckNesting::is_charset(Statement_Ptr n)
356
+ bool CheckNesting::is_charset(Statement* n)
361
357
  {
362
- Directive_Ptr d = Cast<Directive>(n);
358
+ Directive* d = Cast<Directive>(n);
363
359
  return d && d->keyword() == "charset";
364
360
  }
365
361
 
366
- bool CheckNesting::is_mixin(Statement_Ptr n)
362
+ bool CheckNesting::is_mixin(Statement* n)
367
363
  {
368
- Definition_Ptr def = Cast<Definition>(n);
364
+ Definition* def = Cast<Definition>(n);
369
365
  return def && def->type() == Definition::MIXIN;
370
366
  }
371
367
 
372
- bool CheckNesting::is_function(Statement_Ptr n)
368
+ bool CheckNesting::is_function(Statement* n)
373
369
  {
374
- Definition_Ptr def = Cast<Definition>(n);
370
+ Definition* def = Cast<Definition>(n);
375
371
  return def && def->type() == Definition::FUNCTION;
376
372
  }
377
373
 
378
- bool CheckNesting::is_root_node(Statement_Ptr n)
374
+ bool CheckNesting::is_root_node(Statement* n)
379
375
  {
380
376
  if (Cast<Ruleset>(n)) return false;
381
377
 
382
- Block_Ptr b = Cast<Block>(n);
378
+ Block* b = Cast<Block>(n);
383
379
  return b && b->is_root();
384
380
  }
385
381
 
386
- bool CheckNesting::is_at_root_node(Statement_Ptr n)
382
+ bool CheckNesting::is_at_root_node(Statement* n)
387
383
  {
388
384
  return Cast<At_Root_Block>(n) != NULL;
389
385
  }
390
386
 
391
- bool CheckNesting::is_directive_node(Statement_Ptr n)
387
+ bool CheckNesting::is_directive_node(Statement* n)
392
388
  {
393
389
  return Cast<Directive>(n) ||
394
390
  Cast<Import>(n) ||