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
@@ -1,28 +1,34 @@
1
+ // sass.hpp must go before all system headers to get the
2
+ // __EXTENSIONS__ fix on Solaris.
1
3
  #include "sass.hpp"
2
- #include "to_c.hpp"
4
+
5
+ #include "ast2c.hpp"
3
6
  #include "ast.hpp"
4
7
 
5
8
  namespace Sass {
6
9
 
7
- union Sass_Value* To_C::fallback_impl(AST_Node_Ptr n)
8
- { return sass_make_error("unknown type for C-API"); }
9
-
10
- union Sass_Value* To_C::operator()(Boolean_Ptr b)
10
+ union Sass_Value* AST2C::operator()(Boolean* b)
11
11
  { return sass_make_boolean(b->value()); }
12
12
 
13
- union Sass_Value* To_C::operator()(Number_Ptr n)
13
+ union Sass_Value* AST2C::operator()(Number* n)
14
14
  { return sass_make_number(n->value(), n->unit().c_str()); }
15
15
 
16
- union Sass_Value* To_C::operator()(Custom_Warning_Ptr w)
16
+ union Sass_Value* AST2C::operator()(Custom_Warning* w)
17
17
  { return sass_make_warning(w->message().c_str()); }
18
18
 
19
- union Sass_Value* To_C::operator()(Custom_Error_Ptr e)
19
+ union Sass_Value* AST2C::operator()(Custom_Error* e)
20
20
  { return sass_make_error(e->message().c_str()); }
21
21
 
22
- union Sass_Value* To_C::operator()(Color_Ptr c)
22
+ union Sass_Value* AST2C::operator()(Color_RGBA* c)
23
23
  { return sass_make_color(c->r(), c->g(), c->b(), c->a()); }
24
24
 
25
- union Sass_Value* To_C::operator()(String_Constant_Ptr s)
25
+ union Sass_Value* AST2C::operator()(Color_HSLA* c)
26
+ {
27
+ Color_RGBA_Obj rgba = c->copyAsRGBA();
28
+ return operator()(rgba.ptr());
29
+ }
30
+
31
+ union Sass_Value* AST2C::operator()(String_Constant* s)
26
32
  {
27
33
  if (s->quote_mark()) {
28
34
  return sass_make_qstring(s->value().c_str());
@@ -31,10 +37,10 @@ namespace Sass {
31
37
  }
32
38
  }
33
39
 
34
- union Sass_Value* To_C::operator()(String_Quoted_Ptr s)
40
+ union Sass_Value* AST2C::operator()(String_Quoted* s)
35
41
  { return sass_make_qstring(s->value().c_str()); }
36
42
 
37
- union Sass_Value* To_C::operator()(List_Ptr l)
43
+ union Sass_Value* AST2C::operator()(List* l)
38
44
  {
39
45
  union Sass_Value* v = sass_make_list(l->length(), l->separator(), l->is_bracketed());
40
46
  for (size_t i = 0, L = l->length(); i < L; ++i) {
@@ -43,7 +49,7 @@ namespace Sass {
43
49
  return v;
44
50
  }
45
51
 
46
- union Sass_Value* To_C::operator()(Map_Ptr m)
52
+ union Sass_Value* AST2C::operator()(Map* m)
47
53
  {
48
54
  union Sass_Value* v = sass_make_map(m->length());
49
55
  int i = 0;
@@ -55,7 +61,7 @@ namespace Sass {
55
61
  return v;
56
62
  }
57
63
 
58
- union Sass_Value* To_C::operator()(Arguments_Ptr a)
64
+ union Sass_Value* AST2C::operator()(Arguments* a)
59
65
  {
60
66
  union Sass_Value* v = sass_make_list(a->length(), SASS_COMMA, false);
61
67
  for (size_t i = 0, L = a->length(); i < L; ++i) {
@@ -64,11 +70,11 @@ namespace Sass {
64
70
  return v;
65
71
  }
66
72
 
67
- union Sass_Value* To_C::operator()(Argument_Ptr a)
73
+ union Sass_Value* AST2C::operator()(Argument* a)
68
74
  { return a->value()->perform(this); }
69
75
 
70
76
  // not strictly necessary because of the fallback
71
- union Sass_Value* To_C::operator()(Null_Ptr n)
77
+ union Sass_Value* AST2C::operator()(Null* n)
72
78
  { return sass_make_null(); }
73
79
 
74
80
  };
@@ -0,0 +1,39 @@
1
+ #ifndef SASS_AST2C_H
2
+ #define SASS_AST2C_H
3
+
4
+ #include "ast_fwd_decl.hpp"
5
+ #include "operation.hpp"
6
+ #include "sass/values.h"
7
+
8
+ namespace Sass {
9
+
10
+ class AST2C : public Operation_CRTP<union Sass_Value*, AST2C> {
11
+
12
+ public:
13
+
14
+ AST2C() { }
15
+ ~AST2C() { }
16
+
17
+ union Sass_Value* operator()(Boolean*);
18
+ union Sass_Value* operator()(Number*);
19
+ union Sass_Value* operator()(Color_RGBA*);
20
+ union Sass_Value* operator()(Color_HSLA*);
21
+ union Sass_Value* operator()(String_Constant*);
22
+ union Sass_Value* operator()(String_Quoted*);
23
+ union Sass_Value* operator()(Custom_Warning*);
24
+ union Sass_Value* operator()(Custom_Error*);
25
+ union Sass_Value* operator()(List*);
26
+ union Sass_Value* operator()(Map*);
27
+ union Sass_Value* operator()(Null*);
28
+ union Sass_Value* operator()(Arguments*);
29
+ union Sass_Value* operator()(Argument*);
30
+
31
+ // return sass error if type is not supported
32
+ union Sass_Value* fallback(AST_Node* x)
33
+ { return sass_make_error("unknown type for C-API"); }
34
+
35
+ };
36
+
37
+ }
38
+
39
+ #endif
@@ -35,16 +35,6 @@ class LocalOption {
35
35
  LocalOption<size_t> cnt_##name(name, name + 1); \
36
36
  if (name > MAX_NESTING) throw Exception::NestingLimitError(pstate, traces); \
37
37
 
38
- #define ATTACH_OPERATIONS()\
39
- virtual void perform(Operation<void>* op) { (*op)(this); }\
40
- virtual AST_Node_Ptr perform(Operation<AST_Node_Ptr>* op) { return (*op)(this); }\
41
- virtual Statement_Ptr perform(Operation<Statement_Ptr>* op) { return (*op)(this); }\
42
- virtual Expression_Ptr perform(Operation<Expression_Ptr>* op) { return (*op)(this); }\
43
- virtual Selector_Ptr perform(Operation<Selector_Ptr>* op) { return (*op)(this); }\
44
- virtual std::string perform(Operation<std::string>* op) { return (*op)(this); }\
45
- virtual union Sass_Value* perform(Operation<union Sass_Value*>* op) { return (*op)(this); }\
46
- virtual Value_Ptr perform(Operation<Value_Ptr>* op) { return (*op)(this); }
47
-
48
38
  #define ADD_PROPERTY(type, name)\
49
39
  protected:\
50
40
  type name##_;\
@@ -77,4 +67,66 @@ public: \
77
67
  void name(type name##__) { hash_ = 0; name##_ = name##__; } \
78
68
  private:
79
69
 
70
+ #ifdef DEBUG_SHARED_PTR
71
+
72
+ #define ATTACH_ABSTRACT_AST_OPERATIONS(klass) \
73
+ virtual klass* copy(std::string, size_t) const = 0; \
74
+ virtual klass* clone(std::string, size_t) const = 0; \
75
+
76
+ #define ATTACH_VIRTUAL_AST_OPERATIONS(klass) \
77
+ klass(const klass* ptr); \
78
+ virtual klass* copy(std::string, size_t) const override = 0; \
79
+ virtual klass* clone(std::string, size_t) const override = 0; \
80
+
81
+ #define ATTACH_AST_OPERATIONS(klass) \
82
+ klass(const klass* ptr); \
83
+ virtual klass* copy(std::string, size_t) const override; \
84
+ virtual klass* clone(std::string, size_t) const override; \
85
+
86
+ #else
87
+
88
+ #define ATTACH_ABSTRACT_AST_OPERATIONS(klass) \
89
+ virtual klass* copy() const = 0; \
90
+ virtual klass* clone() const = 0; \
91
+
92
+ #define ATTACH_VIRTUAL_AST_OPERATIONS(klass) \
93
+ klass(const klass* ptr); \
94
+ virtual klass* copy() const override = 0; \
95
+ virtual klass* clone() const override = 0; \
96
+
97
+ #define ATTACH_AST_OPERATIONS(klass) \
98
+ klass(const klass* ptr); \
99
+ virtual klass* copy() const override; \
100
+ virtual klass* clone() const override; \
101
+
102
+ #endif
103
+
104
+ #ifdef DEBUG_SHARED_PTR
105
+
106
+ #define IMPLEMENT_AST_OPERATORS(klass) \
107
+ klass* klass::copy(std::string file, size_t line) const { \
108
+ klass* cpy = new klass(this); \
109
+ cpy->trace(file, line); \
110
+ return cpy; \
111
+ } \
112
+ klass* klass::clone(std::string file, size_t line) const { \
113
+ klass* cpy = copy(file, line); \
114
+ cpy->cloneChildren(); \
115
+ return cpy; \
116
+ } \
117
+
118
+ #else
119
+
120
+ #define IMPLEMENT_AST_OPERATORS(klass) \
121
+ klass* klass::copy() const { \
122
+ return new klass(this); \
123
+ } \
124
+ klass* klass::clone() const { \
125
+ klass* cpy = copy(); \
126
+ cpy->cloneChildren(); \
127
+ return cpy; \
128
+ } \
129
+
130
+ #endif
131
+
80
132
  #endif
@@ -19,6 +19,7 @@ namespace Sass {
19
19
  IMPLEMENT_BASE_CAST(Has_Block)
20
20
  IMPLEMENT_BASE_CAST(PreValue)
21
21
  IMPLEMENT_BASE_CAST(Value)
22
+ IMPLEMENT_BASE_CAST(Color)
22
23
  IMPLEMENT_BASE_CAST(List)
23
24
  IMPLEMENT_BASE_CAST(String)
24
25
  IMPLEMENT_BASE_CAST(String_Constant)
@@ -19,256 +19,104 @@
19
19
  namespace Sass {
20
20
 
21
21
  class AST_Node;
22
- typedef AST_Node* AST_Node_Ptr;
23
- typedef AST_Node const* AST_Node_Ptr_Const;
24
22
 
25
23
  class Has_Block;
26
- typedef Has_Block* Has_Block_Ptr;
27
- typedef Has_Block const* Has_Block_Ptr_Const;
28
24
 
29
25
  class Simple_Selector;
30
- typedef Simple_Selector* Simple_Selector_Ptr;
31
- typedef Simple_Selector const* Simple_Selector_Ptr_Const;
26
+
27
+ class Parent_Reference;
32
28
 
33
29
  class PreValue;
34
- typedef PreValue* PreValue_Ptr;
35
- typedef PreValue const* PreValue_Ptr_Const;
36
- class Thunk;
37
- typedef Thunk* Thunk_Ptr;
38
- typedef Thunk const* Thunk_Ptr_Const;
39
30
  class Block;
40
- typedef Block* Block_Ptr;
41
- typedef Block const* Block_Ptr_Const;
42
31
  class Expression;
43
- typedef Expression* Expression_Ptr;
44
- typedef Expression const* Expression_Ptr_Const;
45
32
  class Statement;
46
- typedef Statement* Statement_Ptr;
47
- typedef Statement const* Statement_Ptr_Const;
48
33
  class Value;
49
- typedef Value* Value_Ptr;
50
- typedef Value const* Value_Ptr_Const;
51
34
  class Declaration;
52
- typedef Declaration* Declaration_Ptr;
53
- typedef Declaration const* Declaration_Ptr_Const;
54
35
  class Ruleset;
55
- typedef Ruleset* Ruleset_Ptr;
56
- typedef Ruleset const* Ruleset_Ptr_Const;
57
36
  class Bubble;
58
- typedef Bubble* Bubble_Ptr;
59
- typedef Bubble const* Bubble_Ptr_Const;
60
37
  class Trace;
61
- typedef Trace* Trace_Ptr;
62
- typedef Trace const* Trace_Ptr_Const;
63
38
 
64
39
  class Media_Block;
65
- typedef Media_Block* Media_Block_Ptr;
66
- typedef Media_Block const* Media_Block_Ptr_Const;
67
40
  class Supports_Block;
68
- typedef Supports_Block* Supports_Block_Ptr;
69
- typedef Supports_Block const* Supports_Block_Ptr_Const;
70
41
  class Directive;
71
- typedef Directive* Directive_Ptr;
72
- typedef Directive const* Directive_Ptr_Const;
73
42
 
74
43
 
75
44
  class Keyframe_Rule;
76
- typedef Keyframe_Rule* Keyframe_Rule_Ptr;
77
- typedef Keyframe_Rule const* Keyframe_Rule_Ptr_Const;
78
45
  class At_Root_Block;
79
- typedef At_Root_Block* At_Root_Block_Ptr;
80
- typedef At_Root_Block const* At_Root_Block_Ptr_Const;
81
46
  class Assignment;
82
- typedef Assignment* Assignment_Ptr;
83
- typedef Assignment const* Assignment_Ptr_Const;
84
47
 
85
48
  class Import;
86
- typedef Import* Import_Ptr;
87
- typedef Import const* Import_Ptr_Const;
88
49
  class Import_Stub;
89
- typedef Import_Stub* Import_Stub_Ptr;
90
- typedef Import_Stub const* Import_Stub_Ptr_Const;
91
50
  class Warning;
92
- typedef Warning* Warning_Ptr;
93
- typedef Warning const* Warning_Ptr_Const;
94
51
 
95
52
  class Error;
96
- typedef Error* Error_Ptr;
97
- typedef Error const* Error_Ptr_Const;
98
53
  class Debug;
99
- typedef Debug* Debug_Ptr;
100
- typedef Debug const* Debug_Ptr_Const;
101
54
  class Comment;
102
- typedef Comment* Comment_Ptr;
103
- typedef Comment const* Comment_Ptr_Const;
104
55
 
105
56
  class If;
106
- typedef If* If_Ptr;
107
- typedef If const* If_Ptr_Const;
108
57
  class For;
109
- typedef For* For_Ptr;
110
- typedef For const* For_Ptr_Const;
111
58
  class Each;
112
- typedef Each* Each_Ptr;
113
- typedef Each const* Each_Ptr_Const;
114
59
  class While;
115
- typedef While* While_Ptr;
116
- typedef While const* While_Ptr_Const;
117
60
  class Return;
118
- typedef Return* Return_Ptr;
119
- typedef Return const* Return_Ptr_Const;
120
61
  class Content;
121
- typedef Content* Content_Ptr;
122
- typedef Content const* Content_Ptr_Const;
123
62
  class Extension;
124
- typedef Extension* Extension_Ptr;
125
- typedef Extension const* Extension_Ptr_Const;
126
63
  class Definition;
127
- typedef Definition* Definition_Ptr;
128
- typedef Definition const* Definition_Ptr_Const;
129
64
 
130
65
  class List;
131
- typedef List* List_Ptr;
132
- typedef List const* List_Ptr_Const;
133
66
  class Map;
134
- typedef Map* Map_Ptr;
135
- typedef Map const* Map_Ptr_Const;
136
67
  class Function;
137
- typedef Function* Function_Ptr;
138
- typedef Function const* Function_Ptr_Const;
139
68
 
140
69
  class Mixin_Call;
141
- typedef Mixin_Call* Mixin_Call_Ptr;
142
- typedef Mixin_Call const* Mixin_Call_Ptr_Const;
143
70
  class Binary_Expression;
144
- typedef Binary_Expression* Binary_Expression_Ptr;
145
- typedef Binary_Expression const* Binary_Expression_Ptr_Const;
146
71
  class Unary_Expression;
147
- typedef Unary_Expression* Unary_Expression_Ptr;
148
- typedef Unary_Expression const* Unary_Expression_Ptr_Const;
149
72
  class Function_Call;
150
- typedef Function_Call* Function_Call_Ptr;
151
- typedef Function_Call const* Function_Call_Ptr_Const;
152
- class Function_Call_Schema;
153
- typedef Function_Call_Schema* Function_Call_Schema_Ptr;
154
- typedef Function_Call_Schema const* Function_Call_Schema_Ptr_Const;
155
73
  class Custom_Warning;
156
- typedef Custom_Warning* Custom_Warning_Ptr;
157
- typedef Custom_Warning const* Custom_Warning_Ptr_Const;
158
74
  class Custom_Error;
159
- typedef Custom_Error* Custom_Error_Ptr;
160
- typedef Custom_Error const* Custom_Error_Ptr_Const;
161
75
 
162
76
  class Variable;
163
- typedef Variable* Variable_Ptr;
164
- typedef Variable const* Variable_Ptr_Const;
165
77
  class Number;
166
- typedef Number* Number_Ptr;
167
- typedef Number const* Number_Ptr_Const;
168
78
  class Color;
169
- typedef Color* Color_Ptr;
170
- typedef Color const* Color_Ptr_Const;
79
+ class Color_RGBA;
80
+ class Color_HSLA;
171
81
  class Boolean;
172
- typedef Boolean* Boolean_Ptr;
173
- typedef Boolean const* Boolean_Ptr_Const;
174
82
  class String;
175
- typedef String* String_Ptr;
176
- typedef String const* String_Ptr_Const;
177
83
 
178
84
  class String_Schema;
179
- typedef String_Schema* String_Schema_Ptr;
180
- typedef String_Schema const* String_Schema_Ptr_Const;
181
85
  class String_Constant;
182
- typedef String_Constant* String_Constant_Ptr;
183
- typedef String_Constant const* String_Constant_Ptr_Const;
184
86
  class String_Quoted;
185
- typedef String_Quoted* String_Quoted_Ptr;
186
- typedef String_Quoted const* String_Quoted_Ptr_Const;
187
87
 
188
88
  class Media_Query;
189
- typedef Media_Query* Media_Query_Ptr;
190
- typedef Media_Query const* Media_Query_Ptr_Const;
191
89
  class Media_Query_Expression;
192
- typedef Media_Query_Expression* Media_Query_Expression_Ptr;
193
- typedef Media_Query_Expression const* Media_Query_Expression_Ptr_Const;
194
90
  class Supports_Condition;
195
- typedef Supports_Condition* Supports_Condition_Ptr;
196
- typedef Supports_Condition const* Supports_Condition_Ptr_Const;
197
91
  class Supports_Operator;
198
- typedef Supports_Operator* Supports_Operator_Ptr;
199
- typedef Supports_Operator const* Supports_Operator_Ptr_Const;
200
92
  class Supports_Negation;
201
- typedef Supports_Negation* Supports_Negation_Ptr;
202
- typedef Supports_Negation const* Supports_Negation_Ptr_Const;
203
93
  class Supports_Declaration;
204
- typedef Supports_Declaration* Supports_Declaration_Ptr;
205
- typedef Supports_Declaration const* Supports_Declaration_Ptr_Const;
206
94
  class Supports_Interpolation;
207
- typedef Supports_Interpolation* Supports_Interpolation_Ptr;
208
- typedef Supports_Interpolation const* Supports_Interpolation_Ptr_Const;
209
95
 
210
96
 
211
97
  class Null;
212
- typedef Null* Null_Ptr;
213
- typedef Null const* Null_Ptr_Const;
214
98
 
215
99
  class At_Root_Query;
216
- typedef At_Root_Query* At_Root_Query_Ptr;
217
- typedef At_Root_Query const* At_Root_Query_Ptr_Const;
218
100
  class Parent_Selector;
219
- typedef Parent_Selector* Parent_Selector_Ptr;
220
- typedef Parent_Selector const* Parent_Selector_Ptr_Const;
221
101
  class Parameter;
222
- typedef Parameter* Parameter_Ptr;
223
- typedef Parameter const* Parameter_Ptr_Const;
224
102
  class Parameters;
225
- typedef Parameters* Parameters_Ptr;
226
- typedef Parameters const* Parameters_Ptr_Const;
227
103
  class Argument;
228
- typedef Argument* Argument_Ptr;
229
- typedef Argument const* Argument_Ptr_Const;
230
104
  class Arguments;
231
- typedef Arguments* Arguments_Ptr;
232
- typedef Arguments const* Arguments_Ptr_Const;
233
105
  class Selector;
234
- typedef Selector* Selector_Ptr;
235
- typedef Selector const* Selector_Ptr_Const;
236
106
 
237
107
 
238
108
  class Selector_Schema;
239
- typedef Selector_Schema* Selector_Schema_Ptr;
240
- typedef Selector_Schema const* Selector_Schema_Ptr_Const;
241
109
  class Placeholder_Selector;
242
- typedef Placeholder_Selector* Placeholder_Selector_Ptr;
243
- typedef Placeholder_Selector const* Placeholder_Selector_Ptr_Const;
244
- class Element_Selector;
245
- typedef Element_Selector* Element_Selector_Ptr;
246
- typedef Element_Selector const* Element_Selector_Ptr_Const;
110
+ class Type_Selector;
247
111
  class Class_Selector;
248
- typedef Class_Selector* Class_Selector_Ptr;
249
- typedef Class_Selector const* Class_Selector_Ptr_Const;
250
112
  class Id_Selector;
251
- typedef Id_Selector* Id_Selector_Ptr;
252
- typedef Id_Selector const* Id_Selector_Ptr_Const;
253
113
  class Attribute_Selector;
254
- typedef Attribute_Selector* Attribute_Selector_Ptr;
255
- typedef Attribute_Selector const* Attribute_Selector_Ptr_Const;
256
114
 
257
115
  class Pseudo_Selector;
258
- typedef Pseudo_Selector* Pseudo_Selector_Ptr;
259
- typedef Pseudo_Selector const * Pseudo_Selector_Ptr_Const;
260
116
  class Wrapped_Selector;
261
- typedef Wrapped_Selector* Wrapped_Selector_Ptr;
262
- typedef Wrapped_Selector const * Wrapped_Selector_Ptr_Const;
263
117
  class Compound_Selector;
264
- typedef Compound_Selector* Compound_Selector_Ptr;
265
- typedef Compound_Selector const * Compound_Selector_Ptr_Const;
266
118
  class Complex_Selector;
267
- typedef Complex_Selector* Complex_Selector_Ptr;
268
- typedef Complex_Selector const * Complex_Selector_Ptr_Const;
269
119
  class Selector_List;
270
- typedef Selector_List* Selector_List_Ptr;
271
- typedef Selector_List const * Selector_List_Ptr_Const;
272
120
 
273
121
 
274
122
  // common classes
@@ -301,7 +149,6 @@ namespace Sass {
301
149
  IMPL_MEM_OBJ(Comment);
302
150
  IMPL_MEM_OBJ(PreValue);
303
151
  IMPL_MEM_OBJ(Has_Block);
304
- IMPL_MEM_OBJ(Thunk);
305
152
  IMPL_MEM_OBJ(If);
306
153
  IMPL_MEM_OBJ(For);
307
154
  IMPL_MEM_OBJ(Each);
@@ -319,12 +166,13 @@ namespace Sass {
319
166
  IMPL_MEM_OBJ(Binary_Expression);
320
167
  IMPL_MEM_OBJ(Unary_Expression);
321
168
  IMPL_MEM_OBJ(Function_Call);
322
- IMPL_MEM_OBJ(Function_Call_Schema);
323
169
  IMPL_MEM_OBJ(Custom_Warning);
324
170
  IMPL_MEM_OBJ(Custom_Error);
325
171
  IMPL_MEM_OBJ(Variable);
326
172
  IMPL_MEM_OBJ(Number);
327
173
  IMPL_MEM_OBJ(Color);
174
+ IMPL_MEM_OBJ(Color_RGBA);
175
+ IMPL_MEM_OBJ(Color_HSLA);
328
176
  IMPL_MEM_OBJ(Boolean);
329
177
  IMPL_MEM_OBJ(String_Schema);
330
178
  IMPL_MEM_OBJ(String);
@@ -340,6 +188,7 @@ namespace Sass {
340
188
  IMPL_MEM_OBJ(At_Root_Query);
341
189
  IMPL_MEM_OBJ(Null);
342
190
  IMPL_MEM_OBJ(Parent_Selector);
191
+ IMPL_MEM_OBJ(Parent_Reference);
343
192
  IMPL_MEM_OBJ(Parameter);
344
193
  IMPL_MEM_OBJ(Parameters);
345
194
  IMPL_MEM_OBJ(Argument);
@@ -348,7 +197,7 @@ namespace Sass {
348
197
  IMPL_MEM_OBJ(Selector_Schema);
349
198
  IMPL_MEM_OBJ(Simple_Selector);
350
199
  IMPL_MEM_OBJ(Placeholder_Selector);
351
- IMPL_MEM_OBJ(Element_Selector);
200
+ IMPL_MEM_OBJ(Type_Selector);
352
201
  IMPL_MEM_OBJ(Class_Selector);
353
202
  IMPL_MEM_OBJ(Id_Selector);
354
203
  IMPL_MEM_OBJ(Attribute_Selector);
@@ -368,21 +217,42 @@ namespace Sass {
368
217
  return ex.isNull() ? 0 : ex->hash();
369
218
  }
370
219
  };
220
+ template <class T>
221
+ bool OrderFunction(const T& lhs, const T& rhs) {
222
+ return !lhs.isNull() && !rhs.isNull() && *lhs < *rhs;
223
+ };
371
224
  struct OrderNodes {
372
225
  template <class T>
373
226
  bool operator() (const T& lhs, const T& rhs) const {
374
- return !lhs.isNull() && !rhs.isNull() && *lhs < *rhs;
227
+ return OrderFunction<T>(lhs, rhs);
375
228
  }
376
229
  };
377
- struct CompareNodes {
378
- template <class T>
379
- bool operator() (const T& lhs, const T& rhs) const {
230
+ template <class T>
231
+ bool CompareFunction(const T& lhs, const T& rhs) {
380
232
  // code around sass logic issue. 1px == 1 is true
381
233
  // but both items are still different keys in maps
382
234
  if (dynamic_cast<Number*>(lhs.ptr()))
383
235
  if (dynamic_cast<Number*>(rhs.ptr()))
384
236
  return lhs->hash() == rhs->hash();
385
237
  return !lhs.isNull() && !rhs.isNull() && *lhs == *rhs;
238
+ }
239
+ struct CompareNodes {
240
+ template <class T>
241
+ bool operator() (const T& lhs, const T& rhs) const {
242
+ return CompareFunction<T>(lhs, rhs);
243
+ }
244
+ };
245
+
246
+ struct HashPtr {
247
+ template <class T>
248
+ size_t operator() (const T *ref) const {
249
+ return ref->hash();
250
+ }
251
+ };
252
+ struct ComparePtrs {
253
+ template <class T>
254
+ bool operator() (const T *lhs, const T *rhs) const {
255
+ return *lhs == *rhs;
386
256
  }
387
257
  };
388
258
 
@@ -413,13 +283,20 @@ namespace Sass {
413
283
  typedef std::pair<Complex_Selector_Obj, SubSetMapPairs> SubSetMapResult;
414
284
  typedef std::vector<SubSetMapResult> SubSetMapResults;
415
285
 
286
+ typedef std::set<Selector_Obj, OrderNodes> SelectorSet;
287
+
416
288
  typedef std::deque<Complex_Selector_Obj> ComplexSelectorDeque;
417
289
  typedef std::set<Simple_Selector_Obj, OrderNodes> SimpleSelectorSet;
418
290
  typedef std::set<Complex_Selector_Obj, OrderNodes> ComplexSelectorSet;
419
291
  typedef std::set<Compound_Selector_Obj, OrderNodes> CompoundSelectorSet;
420
292
  typedef std::unordered_set<Simple_Selector_Obj, HashNodes, CompareNodes> SimpleSelectorDict;
421
293
 
422
- typedef std::vector<Sass_Import_Entry>* ImporterStack;
294
+ typedef std::vector<Block*> BlockStack;
295
+ typedef std::vector<Sass_Callee> CalleeStack;
296
+ typedef std::vector<AST_Node_Obj> CallStack;
297
+ typedef std::vector<Media_Block*> MediaStack;
298
+ typedef std::vector<Selector_List_Obj> SelectorStack;
299
+ typedef std::vector<Sass_Import_Entry> ImporterStack;
423
300
 
424
301
  // only to switch implementations for testing
425
302
  #define environment_map std::map
@@ -452,6 +329,7 @@ namespace Sass {
452
329
  DECLARE_BASE_CAST(PreValue)
453
330
  DECLARE_BASE_CAST(Value)
454
331
  DECLARE_BASE_CAST(List)
332
+ DECLARE_BASE_CAST(Color)
455
333
  DECLARE_BASE_CAST(String)
456
334
  DECLARE_BASE_CAST(String_Constant)
457
335
  DECLARE_BASE_CAST(Supports_Condition)