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
@@ -90,7 +90,7 @@ struct Sass_Context : Sass_Options
90
90
  char* error_file;
91
91
  size_t error_line;
92
92
  size_t error_column;
93
- const char* error_src;
93
+ char* error_src;
94
94
 
95
95
  // report imported files
96
96
  char** included_files;
@@ -126,4 +126,4 @@ struct Sass_Compiler {
126
126
  Sass::Block_Obj root;
127
127
  };
128
128
 
129
- #endif
129
+ #endif
@@ -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 <cstring>
3
6
  #include "util.hpp"
4
7
  #include "context.hpp"
@@ -98,7 +101,7 @@ extern "C" {
98
101
  }
99
102
 
100
103
  // Creator for a single import entry returned by the custom importer inside the list
101
- // We take ownership of the memory for source and srcmap (freed when context is destroyd)
104
+ // We take ownership of the memory for source and srcmap (freed when context is destroyed)
102
105
  Sass_Import_Entry ADDCALL sass_make_import(const char* imp_path, const char* abs_path, char* source, char* srcmap)
103
106
  {
104
107
  Sass_Import* v = (Sass_Import*) calloc(1, sizeof(Sass_Import));
@@ -167,21 +170,21 @@ extern "C" {
167
170
 
168
171
  // Getters and Setters for environments (lexical, local and global)
169
172
  union Sass_Value* ADDCALL sass_env_get_lexical (Sass_Env_Frame env, const char* name) {
170
- Expression_Ptr ex = Cast<Expression>((*env->frame)[name]);
173
+ Expression* ex = Cast<Expression>((*env->frame)[name]);
171
174
  return ex != NULL ? ast_node_to_sass_value(ex) : NULL;
172
175
  }
173
176
  void ADDCALL sass_env_set_lexical (Sass_Env_Frame env, const char* name, union Sass_Value* val) {
174
177
  (*env->frame)[name] = sass_value_to_ast_node(val);
175
178
  }
176
179
  union Sass_Value* ADDCALL sass_env_get_local (Sass_Env_Frame env, const char* name) {
177
- Expression_Ptr ex = Cast<Expression>(env->frame->get_local(name));
180
+ Expression* ex = Cast<Expression>(env->frame->get_local(name));
178
181
  return ex != NULL ? ast_node_to_sass_value(ex) : NULL;
179
182
  }
180
183
  void ADDCALL sass_env_set_local (Sass_Env_Frame env, const char* name, union Sass_Value* val) {
181
184
  env->frame->set_local(name, sass_value_to_ast_node(val));
182
185
  }
183
186
  union Sass_Value* ADDCALL sass_env_get_global (Sass_Env_Frame env, const char* name) {
184
- Expression_Ptr ex = Cast<Expression>(env->frame->get_global(name));
187
+ Expression* ex = Cast<Expression>(env->frame->get_global(name));
185
188
  return ex != NULL ? ast_node_to_sass_value(ex) : NULL;
186
189
  }
187
190
  void ADDCALL sass_env_set_global (Sass_Env_Frame env, const char* name, union Sass_Value* val) {
@@ -3,7 +3,7 @@
3
3
 
4
4
  #include "sass.h"
5
5
  #include "environment.hpp"
6
- #include "functions.hpp"
6
+ #include "fn_utils.hpp"
7
7
 
8
8
  // Struct to hold custom function callback
9
9
  struct Sass_Function {
@@ -1,9 +1,11 @@
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 <cstdlib>
3
6
  #include <cstring>
4
7
  #include "util.hpp"
5
8
  #include "eval.hpp"
6
- #include "values.hpp"
7
9
  #include "operators.hpp"
8
10
  #include "sass/values.h"
9
11
  #include "sass_values.hpp"
@@ -281,21 +283,21 @@ extern "C" {
281
283
 
282
284
  union Sass_Value* ADDCALL sass_value_stringify (const union Sass_Value* v, bool compressed, int precision)
283
285
  {
284
- Value_Obj val = sass_value_to_ast_node(v);
286
+ ValueObj val = sass_value_to_ast_node(v);
285
287
  Sass_Inspect_Options options(compressed ? COMPRESSED : NESTED, precision);
286
- std::string str(val->to_string(options));
288
+ sass::string str(val->to_string(options));
287
289
  return sass_make_qstring(str.c_str());
288
290
  }
289
291
 
290
292
  union Sass_Value* ADDCALL sass_value_op (enum Sass_OP op, const union Sass_Value* a, const union Sass_Value* b)
291
293
  {
292
294
 
293
- Sass::Value_Ptr rv;
295
+ Sass::ValueObj rv;
294
296
 
295
297
  try {
296
298
 
297
- Value_Obj lhs = sass_value_to_ast_node(a);
298
- Value_Obj rhs = sass_value_to_ast_node(b);
299
+ ValueObj lhs = sass_value_to_ast_node(a);
300
+ ValueObj rhs = sass_value_to_ast_node(b);
299
301
  struct Sass_Inspect_Options options(NESTED, 5);
300
302
 
301
303
  // see if it's a relational expression
@@ -312,44 +314,47 @@ extern "C" {
312
314
  }
313
315
 
314
316
  if (sass_value_is_number(a) && sass_value_is_number(b)) {
315
- Number_Ptr_Const l_n = Cast<Number>(lhs);
316
- Number_Ptr_Const r_n = Cast<Number>(rhs);
317
+ const Number* l_n = Cast<Number>(lhs);
318
+ const Number* r_n = Cast<Number>(rhs);
317
319
  rv = Operators::op_numbers(op, *l_n, *r_n, options, l_n->pstate());
318
320
  }
319
321
  else if (sass_value_is_number(a) && sass_value_is_color(a)) {
320
- Number_Ptr_Const l_n = Cast<Number>(lhs);
321
- Color_Ptr_Const r_c = Cast<Color>(rhs);
322
+ const Number* l_n = Cast<Number>(lhs);
323
+ // Direct HSLA operations are not supported
324
+ // All color maths will be deprecated anyway
325
+ Color_RGBA_Obj r_c = Cast<Color>(rhs)->toRGBA();
322
326
  rv = Operators::op_number_color(op, *l_n, *r_c, options, l_n->pstate());
323
327
  }
324
328
  else if (sass_value_is_color(a) && sass_value_is_number(b)) {
325
- Color_Ptr_Const l_c = Cast<Color>(lhs);
326
- Number_Ptr_Const r_n = Cast<Number>(rhs);
329
+ // Direct HSLA operations are not supported
330
+ // All color maths will be deprecated anyway
331
+ Color_RGBA_Obj l_c = Cast<Color>(lhs)->toRGBA();
332
+ const Number* r_n = Cast<Number>(rhs);
327
333
  rv = Operators::op_color_number(op, *l_c, *r_n, options, l_c->pstate());
328
334
  }
329
335
  else if (sass_value_is_color(a) && sass_value_is_color(b)) {
330
- Color_Ptr_Const l_c = Cast<Color>(lhs);
331
- Color_Ptr_Const r_c = Cast<Color>(rhs);
336
+ // Direct HSLA operations are not supported
337
+ // All color maths will be deprecated anyway
338
+ Color_RGBA_Obj l_c = Cast<Color>(lhs)->toRGBA();
339
+ Color_RGBA_Obj r_c = Cast<Color>(rhs)->toRGBA();
332
340
  rv = Operators::op_colors(op, *l_c, *r_c, options, l_c->pstate());
333
341
  }
334
342
  else /* convert other stuff to string and apply operation */ {
335
- Value_Ptr l_v = Cast<Value>(lhs);
336
- Value_Ptr r_v = Cast<Value>(rhs);
337
- rv = Operators::op_strings(op, *l_v, *r_v, options, l_v->pstate());
343
+ rv = Operators::op_strings(op, *lhs, *rhs, options, lhs->pstate());
338
344
  }
339
345
 
340
- // ToDo: maybe we should should return null value?
346
+ // ToDo: maybe we should return null value?
341
347
  if (!rv) return sass_make_error("invalid return value");
342
348
 
343
349
  // convert result back to ast node
344
- return ast_node_to_sass_value(rv);
345
-
350
+ return ast_node_to_sass_value(rv.ptr());
346
351
  }
347
352
 
348
353
  // simply pass the error message back to the caller for now
349
354
  catch (Exception::InvalidSass& e) { return sass_make_error(e.what()); }
350
355
  catch (std::bad_alloc&) { return sass_make_error("memory exhausted"); }
351
356
  catch (std::exception& e) { return sass_make_error(e.what()); }
352
- catch (std::string& e) { return sass_make_error(e.c_str()); }
357
+ catch (sass::string& e) { return sass_make_error(e.c_str()); }
353
358
  catch (const char* e) { return sass_make_error(e); }
354
359
  catch (...) { return sass_make_error("unknown"); }
355
360
  }
@@ -0,0 +1,19 @@
1
+ #ifndef SASS_SETTINGS_H
2
+ #define SASS_SETTINGS_H
3
+
4
+ // Global compile time settings should go here
5
+
6
+ // When enabled we use our custom memory pool allocator
7
+ // With intense workloads this can double the performance
8
+ // Max memory usage mostly only grows by a slight amount
9
+ // #define SASS_CUSTOM_ALLOCATOR
10
+
11
+ // How many buckets should we have for the free-list
12
+ // Determines when allocations go directly to malloc/free
13
+ // For maximum size of managed items multiply by alignment
14
+ #define SassAllocatorBuckets 512
15
+
16
+ // The size of the memory pool arenas in bytes.
17
+ #define SassAllocatorArenaSize (1024 * 256)
18
+
19
+ #endif
@@ -0,0 +1,69 @@
1
+ #include <stdio.h>
2
+ #include <string.h>
3
+ #include "source.hpp"
4
+ #include "utf8/checked.h"
5
+ #include "position.hpp"
6
+
7
+ namespace Sass {
8
+
9
+ SourceData::SourceData()
10
+ : SharedObj()
11
+ {
12
+ }
13
+
14
+ SourceFile::SourceFile(
15
+ const char* path,
16
+ const char* data,
17
+ size_t srcid) :
18
+ SourceData(),
19
+ path(sass_copy_c_string(path)),
20
+ data(sass_copy_c_string(data)),
21
+ length(0),
22
+ srcid(srcid)
23
+ {
24
+ length = strlen(data);
25
+ }
26
+
27
+ SourceFile::~SourceFile() {
28
+ sass_free_memory(path);
29
+ sass_free_memory(data);
30
+ }
31
+
32
+ const char* SourceFile::end() const
33
+ {
34
+ return data + length;
35
+ }
36
+
37
+ const char* SourceFile::begin() const
38
+ {
39
+ return data;
40
+ }
41
+
42
+ const char* SourceFile::getRawData() const
43
+ {
44
+ return data;
45
+ }
46
+
47
+ SourceSpan SourceFile::getSourceSpan()
48
+ {
49
+ return SourceSpan(this);
50
+ }
51
+
52
+ ItplFile::ItplFile(const char* data, const SourceSpan& pstate) :
53
+ SourceFile(pstate.getPath(),
54
+ data, pstate.getSrcId()),
55
+ pstate(pstate)
56
+ {}
57
+
58
+ const char* ItplFile::getRawData() const
59
+ {
60
+ return pstate.getRawData();
61
+ }
62
+
63
+ SourceSpan ItplFile::getSourceSpan()
64
+ {
65
+ return SourceSpan(pstate);
66
+ }
67
+
68
+ }
69
+
@@ -0,0 +1,95 @@
1
+ #ifndef SASS_SOURCE_H
2
+ #define SASS_SOURCE_H
3
+
4
+ #include "sass.hpp"
5
+ #include "memory.hpp"
6
+ #include "position.hpp"
7
+ #include "source_data.hpp"
8
+
9
+ namespace Sass {
10
+
11
+ class SourceFile :
12
+ public SourceData {
13
+ protected:
14
+ char* path;
15
+ char* data;
16
+ size_t length;
17
+ size_t srcid;
18
+ public:
19
+
20
+ SourceFile(
21
+ const char* path,
22
+ const char* data,
23
+ size_t srcid);
24
+
25
+ ~SourceFile();
26
+
27
+ const char* end() const override final;
28
+ const char* begin() const override final;
29
+ virtual const char* getRawData() const override;
30
+ virtual SourceSpan getSourceSpan() override;
31
+
32
+ size_t size() const override final {
33
+ return length;
34
+ }
35
+
36
+ virtual const char* getPath() const override {
37
+ return path;
38
+ }
39
+
40
+ virtual size_t getSrcId() const override {
41
+ return srcid;
42
+ }
43
+
44
+ };
45
+
46
+ class SynthFile :
47
+ public SourceData {
48
+ protected:
49
+ const char* path;
50
+ public:
51
+
52
+ SynthFile(
53
+ const char* path) :
54
+ path(path)
55
+ {}
56
+
57
+ ~SynthFile() {}
58
+
59
+ const char* end() const override final { return nullptr; }
60
+ const char* begin() const override final { return nullptr; };
61
+ virtual const char* getRawData() const override { return nullptr; };
62
+ virtual SourceSpan getSourceSpan() override { return SourceSpan(path); };
63
+
64
+ size_t size() const override final {
65
+ return 0;
66
+ }
67
+
68
+ virtual const char* getPath() const override {
69
+ return path;
70
+ }
71
+
72
+ virtual size_t getSrcId() const override {
73
+ return std::string::npos;
74
+ }
75
+
76
+ };
77
+
78
+
79
+ class ItplFile :
80
+ public SourceFile {
81
+ private:
82
+ SourceSpan pstate;
83
+ public:
84
+
85
+ ItplFile(const char* data,
86
+ const SourceSpan& pstate);
87
+
88
+ // Offset getPosition() const override final;
89
+ const char* getRawData() const override final;
90
+ SourceSpan getSourceSpan() override final;
91
+ };
92
+
93
+ }
94
+
95
+ #endif
@@ -0,0 +1,32 @@
1
+ #ifndef SASS_SOURCE_DATA_H
2
+ #define SASS_SOURCE_DATA_H
3
+
4
+ #include "sass.hpp"
5
+ #include "memory.hpp"
6
+
7
+ namespace Sass {
8
+
9
+ class SourceSpan;
10
+
11
+ class SourceData :
12
+ public SharedObj {
13
+ public:
14
+ SourceData();
15
+ virtual size_t size() const = 0;
16
+ virtual size_t getSrcId() const = 0;
17
+ virtual const char* end() const = 0;
18
+ virtual const char* begin() const = 0;
19
+ virtual const char* getPath() const = 0;
20
+ // virtual Offset getPosition() const = 0;
21
+ virtual const char* getRawData() const = 0;
22
+ virtual SourceSpan getSourceSpan() = 0;
23
+
24
+ sass::string to_string() const override {
25
+ return sass::string{ begin(), end() };
26
+ }
27
+ ~SourceData() {}
28
+ };
29
+
30
+ }
31
+
32
+ #endif
@@ -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 <string>
3
6
  #include <sstream>
4
7
  #include <iostream>
@@ -12,13 +15,13 @@
12
15
 
13
16
  namespace Sass {
14
17
  SourceMap::SourceMap() : current_position(0, 0, 0), file("stdin") { }
15
- SourceMap::SourceMap(const std::string& file) : current_position(0, 0, 0), file(file) { }
18
+ SourceMap::SourceMap(const sass::string& file) : current_position(0, 0, 0), file(file) { }
16
19
 
17
- std::string SourceMap::render_srcmap(Context &ctx) {
20
+ sass::string SourceMap::render_srcmap(Context &ctx) {
18
21
 
19
22
  const bool include_sources = ctx.c_options.source_map_contents;
20
- const std::vector<std::string> links = ctx.srcmap_links;
21
- const std::vector<Resource>& sources(ctx.resources);
23
+ const sass::vector<sass::string> links = ctx.srcmap_links;
24
+ const sass::vector<Resource>& sources(ctx.resources);
22
25
 
23
26
  JsonNode* json_srcmap = json_mkobject();
24
27
 
@@ -36,7 +39,7 @@ namespace Sass {
36
39
 
37
40
  JsonNode *json_sources = json_mkarray();
38
41
  for (size_t i = 0; i < source_index.size(); ++i) {
39
- std::string source(links[source_index[i]]);
42
+ sass::string source(links[source_index[i]]);
40
43
  if (ctx.c_options.source_map_file_urls) {
41
44
  source = File::rel2abs(source);
42
45
  // check for windows abs path
@@ -69,19 +72,19 @@ namespace Sass {
69
72
  // no problem as we do not alter any identifiers
70
73
  json_append_member(json_srcmap, "names", json_names);
71
74
 
72
- std::string mappings = serialize_mappings();
75
+ sass::string mappings = serialize_mappings();
73
76
  JsonNode *json_mappings = json_mkstring(mappings.c_str());
74
77
  json_append_member(json_srcmap, "mappings", json_mappings);
75
78
 
76
79
  char *str = json_stringify(json_srcmap, "\t");
77
- std::string result = std::string(str);
80
+ sass::string result = sass::string(str);
78
81
  free(str);
79
82
  json_delete(json_srcmap);
80
83
  return result;
81
84
  }
82
85
 
83
- std::string SourceMap::serialize_mappings() {
84
- std::string result = "";
86
+ sass::string SourceMap::serialize_mappings() {
87
+ sass::string result = "";
85
88
 
86
89
  size_t previous_generated_line = 0;
87
90
  size_t previous_generated_column = 0;
@@ -98,7 +101,7 @@ namespace Sass {
98
101
  if (generated_line != previous_generated_line) {
99
102
  previous_generated_column = 0;
100
103
  if (generated_line > previous_generated_line) {
101
- result += std::string(generated_line - previous_generated_line, ';');
104
+ result += sass::string(generated_line - previous_generated_line, ';');
102
105
  previous_generated_line = generated_line;
103
106
  }
104
107
  }
@@ -170,25 +173,29 @@ namespace Sass {
170
173
  current_position += offset;
171
174
  }
172
175
 
173
- void SourceMap::add_open_mapping(const AST_Node_Ptr node)
176
+ void SourceMap::add_open_mapping(const AST_Node* node)
174
177
  {
175
- mappings.push_back(Mapping(node->pstate(), current_position));
178
+ const SourceSpan& span(node->pstate());
179
+ Position from(span.getSrcId(), span.position);
180
+ mappings.push_back(Mapping(from, current_position));
176
181
  }
177
182
 
178
- void SourceMap::add_close_mapping(const AST_Node_Ptr node)
183
+ void SourceMap::add_close_mapping(const AST_Node* node)
179
184
  {
180
- mappings.push_back(Mapping(node->pstate() + node->pstate().offset, current_position));
185
+ const SourceSpan& span(node->pstate());
186
+ Position to(span.getSrcId(), span.position + span.offset);
187
+ mappings.push_back(Mapping(to, current_position));
181
188
  }
182
189
 
183
- ParserState SourceMap::remap(const ParserState& pstate) {
190
+ SourceSpan SourceMap::remap(const SourceSpan& pstate) {
184
191
  for (size_t i = 0; i < mappings.size(); ++i) {
185
192
  if (
186
- mappings[i].generated_position.file == pstate.file &&
187
- mappings[i].generated_position.line == pstate.line &&
188
- mappings[i].generated_position.column == pstate.column
189
- ) return ParserState(pstate.path, pstate.src, mappings[i].original_position, pstate.offset);
193
+ mappings[i].generated_position.file == pstate.getSrcId() &&
194
+ mappings[i].generated_position.line == pstate.position.line &&
195
+ mappings[i].generated_position.column == pstate.position.column
196
+ ) return SourceSpan(pstate.source, mappings[i].original_position, pstate.offset);
190
197
  }
191
- return ParserState(pstate.path, pstate.src, Position(-1, -1, -1), Offset(0, 0));
198
+ return SourceSpan(pstate.source, Position(-1, -1, -1), Offset(0, 0));
192
199
 
193
200
  }
194
201