sassc 2.0.1 → 2.1.0.pre1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (200) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/.gitmodules +1 -1
  4. data/.travis.yml +7 -3
  5. data/CHANGELOG.md +3 -0
  6. data/CODE_OF_CONDUCT.md +1 -1
  7. data/README.md +1 -1
  8. data/Rakefile +23 -8
  9. data/ext/extconf.rb +39 -0
  10. data/ext/libsass/.gitignore +1 -0
  11. data/ext/libsass/GNUmakefile.am +23 -39
  12. data/ext/libsass/Makefile +56 -91
  13. data/ext/libsass/Makefile.conf +16 -2
  14. data/ext/libsass/configure.ac +8 -12
  15. data/ext/libsass/include/sass/base.h +1 -0
  16. data/ext/libsass/include/sass/context.h +1 -1
  17. data/ext/libsass/src/GNUmakefile.am +1 -5
  18. data/ext/libsass/src/ast.cpp +747 -2010
  19. data/ext/libsass/src/ast.hpp +239 -2383
  20. data/ext/libsass/src/{to_c.cpp → ast2c.cpp} +22 -16
  21. data/ext/libsass/src/ast2c.hpp +39 -0
  22. data/ext/libsass/src/ast_def_macros.hpp +62 -10
  23. data/ext/libsass/src/ast_fwd_decl.cpp +1 -0
  24. data/ext/libsass/src/ast_fwd_decl.hpp +43 -165
  25. data/ext/libsass/src/ast_sel_cmp.cpp +909 -0
  26. data/ext/libsass/src/ast_sel_unify.cpp +280 -0
  27. data/ext/libsass/src/ast_selectors.cpp +1475 -0
  28. data/ext/libsass/src/ast_selectors.hpp +568 -0
  29. data/ext/libsass/src/ast_supports.cpp +130 -0
  30. data/ext/libsass/src/ast_supports.hpp +121 -0
  31. data/ext/libsass/src/ast_values.cpp +967 -0
  32. data/ext/libsass/src/ast_values.hpp +489 -0
  33. data/ext/libsass/src/backtrace.cpp +4 -0
  34. data/ext/libsass/src/base64vlq.cpp +3 -0
  35. data/ext/libsass/src/bind.cpp +18 -17
  36. data/ext/libsass/src/bind.hpp +3 -1
  37. data/ext/libsass/src/c2ast.cpp +64 -0
  38. data/ext/libsass/src/c2ast.hpp +14 -0
  39. data/ext/libsass/src/cencode.c +2 -2
  40. data/ext/libsass/src/check_nesting.cpp +52 -56
  41. data/ext/libsass/src/check_nesting.hpp +35 -34
  42. data/ext/libsass/src/color_maps.cpp +156 -153
  43. data/ext/libsass/src/color_maps.hpp +152 -152
  44. data/ext/libsass/src/constants.cpp +15 -0
  45. data/ext/libsass/src/constants.hpp +13 -0
  46. data/ext/libsass/src/context.cpp +24 -14
  47. data/ext/libsass/src/context.hpp +6 -6
  48. data/ext/libsass/src/cssize.cpp +69 -71
  49. data/ext/libsass/src/cssize.hpp +50 -50
  50. data/ext/libsass/src/debugger.hpp +117 -110
  51. data/ext/libsass/src/emitter.cpp +13 -12
  52. data/ext/libsass/src/emitter.hpp +13 -9
  53. data/ext/libsass/src/environment.cpp +15 -1
  54. data/ext/libsass/src/environment.hpp +6 -0
  55. data/ext/libsass/src/error_handling.cpp +36 -59
  56. data/ext/libsass/src/error_handling.hpp +29 -16
  57. data/ext/libsass/src/eval.cpp +302 -323
  58. data/ext/libsass/src/eval.hpp +64 -55
  59. data/ext/libsass/src/expand.cpp +94 -88
  60. data/ext/libsass/src/expand.hpp +33 -37
  61. data/ext/libsass/src/extend.cpp +38 -36
  62. data/ext/libsass/src/extend.hpp +15 -15
  63. data/ext/libsass/src/file.cpp +34 -2
  64. data/ext/libsass/src/fn_colors.cpp +594 -0
  65. data/ext/libsass/src/fn_colors.hpp +85 -0
  66. data/ext/libsass/src/fn_lists.cpp +284 -0
  67. data/ext/libsass/src/fn_lists.hpp +34 -0
  68. data/ext/libsass/src/fn_maps.cpp +94 -0
  69. data/ext/libsass/src/fn_maps.hpp +30 -0
  70. data/ext/libsass/src/fn_miscs.cpp +256 -0
  71. data/ext/libsass/src/fn_miscs.hpp +40 -0
  72. data/ext/libsass/src/fn_numbers.cpp +220 -0
  73. data/ext/libsass/src/fn_numbers.hpp +45 -0
  74. data/ext/libsass/src/fn_selectors.cpp +235 -0
  75. data/ext/libsass/src/fn_selectors.hpp +35 -0
  76. data/ext/libsass/src/fn_strings.cpp +254 -0
  77. data/ext/libsass/src/fn_strings.hpp +34 -0
  78. data/ext/libsass/src/fn_utils.cpp +156 -0
  79. data/ext/libsass/src/fn_utils.hpp +56 -0
  80. data/ext/libsass/src/inspect.cpp +101 -152
  81. data/ext/libsass/src/inspect.hpp +69 -73
  82. data/ext/libsass/src/json.cpp +2 -2
  83. data/ext/libsass/src/lexer.cpp +6 -3
  84. data/ext/libsass/src/listize.cpp +9 -11
  85. data/ext/libsass/src/listize.hpp +11 -7
  86. data/ext/libsass/src/memory/SharedPtr.cpp +2 -83
  87. data/ext/libsass/src/memory/SharedPtr.hpp +127 -143
  88. data/ext/libsass/src/node.cpp +13 -10
  89. data/ext/libsass/src/node.hpp +3 -3
  90. data/ext/libsass/src/operation.hpp +184 -144
  91. data/ext/libsass/src/operators.cpp +43 -17
  92. data/ext/libsass/src/operators.hpp +5 -5
  93. data/ext/libsass/src/output.cpp +21 -18
  94. data/ext/libsass/src/output.hpp +14 -21
  95. data/ext/libsass/src/parser.cpp +215 -183
  96. data/ext/libsass/src/parser.hpp +28 -24
  97. data/ext/libsass/src/plugins.cpp +5 -1
  98. data/ext/libsass/src/position.cpp +3 -0
  99. data/ext/libsass/src/prelexer.cpp +9 -3
  100. data/ext/libsass/src/prelexer.hpp +9 -9
  101. data/ext/libsass/src/remove_placeholders.cpp +14 -11
  102. data/ext/libsass/src/remove_placeholders.hpp +8 -9
  103. data/ext/libsass/src/sass.cpp +9 -3
  104. data/ext/libsass/src/sass.hpp +12 -9
  105. data/ext/libsass/src/sass2scss.cpp +45 -14
  106. data/ext/libsass/src/sass_context.cpp +18 -15
  107. data/ext/libsass/src/sass_functions.cpp +6 -3
  108. data/ext/libsass/src/sass_functions.hpp +1 -1
  109. data/ext/libsass/src/sass_util.cpp +3 -0
  110. data/ext/libsass/src/sass_values.cpp +21 -13
  111. data/ext/libsass/src/source_map.cpp +5 -2
  112. data/ext/libsass/src/source_map.hpp +2 -2
  113. data/ext/libsass/src/subset_map.cpp +4 -1
  114. data/ext/libsass/src/to_value.cpp +23 -21
  115. data/ext/libsass/src/to_value.hpp +18 -22
  116. data/ext/libsass/src/units.cpp +4 -0
  117. data/ext/libsass/src/units.hpp +1 -0
  118. data/ext/libsass/src/utf8/checked.h +12 -10
  119. data/ext/libsass/src/utf8/core.h +3 -0
  120. data/ext/libsass/src/utf8_string.cpp +3 -0
  121. data/ext/libsass/src/util.cpp +67 -75
  122. data/ext/libsass/src/util.hpp +64 -19
  123. data/ext/libsass/src/util_string.cpp +75 -0
  124. data/ext/libsass/src/util_string.hpp +19 -0
  125. data/ext/libsass/src/values.cpp +22 -13
  126. data/ext/libsass/src/values.hpp +2 -2
  127. data/ext/libsass/win/libsass.targets +30 -4
  128. data/ext/libsass/win/libsass.vcxproj.filters +82 -4
  129. data/lib/sassc.rb +24 -0
  130. data/lib/sassc/engine.rb +2 -2
  131. data/lib/sassc/native.rb +8 -1
  132. data/lib/sassc/version.rb +1 -1
  133. data/sassc.gemspec +19 -11
  134. data/test/engine_test.rb +26 -1
  135. data/test/native_test.rb +1 -1
  136. metadata +66 -72
  137. data/ext/Rakefile +0 -3
  138. data/ext/libsass/.github/CONTRIBUTING.md +0 -65
  139. data/ext/libsass/.github/ISSUE_TEMPLATE.md +0 -54
  140. data/ext/libsass/.travis.yml +0 -64
  141. data/ext/libsass/Readme.md +0 -104
  142. data/ext/libsass/SECURITY.md +0 -10
  143. data/ext/libsass/appveyor.yml +0 -91
  144. data/ext/libsass/docs/README.md +0 -20
  145. data/ext/libsass/docs/api-context-example.md +0 -45
  146. data/ext/libsass/docs/api-context-internal.md +0 -163
  147. data/ext/libsass/docs/api-context.md +0 -295
  148. data/ext/libsass/docs/api-doc.md +0 -215
  149. data/ext/libsass/docs/api-function-example.md +0 -67
  150. data/ext/libsass/docs/api-function-internal.md +0 -8
  151. data/ext/libsass/docs/api-function.md +0 -74
  152. data/ext/libsass/docs/api-importer-example.md +0 -112
  153. data/ext/libsass/docs/api-importer-internal.md +0 -20
  154. data/ext/libsass/docs/api-importer.md +0 -86
  155. data/ext/libsass/docs/api-value-example.md +0 -55
  156. data/ext/libsass/docs/api-value-internal.md +0 -76
  157. data/ext/libsass/docs/api-value.md +0 -154
  158. data/ext/libsass/docs/build-on-darwin.md +0 -27
  159. data/ext/libsass/docs/build-on-gentoo.md +0 -55
  160. data/ext/libsass/docs/build-on-windows.md +0 -139
  161. data/ext/libsass/docs/build-shared-library.md +0 -35
  162. data/ext/libsass/docs/build-with-autotools.md +0 -78
  163. data/ext/libsass/docs/build-with-makefiles.md +0 -68
  164. data/ext/libsass/docs/build-with-mingw.md +0 -107
  165. data/ext/libsass/docs/build-with-visual-studio.md +0 -90
  166. data/ext/libsass/docs/build.md +0 -97
  167. data/ext/libsass/docs/compatibility-plan.md +0 -48
  168. data/ext/libsass/docs/contributing.md +0 -17
  169. data/ext/libsass/docs/custom-functions-internal.md +0 -122
  170. data/ext/libsass/docs/dev-ast-memory.md +0 -223
  171. data/ext/libsass/docs/implementations.md +0 -56
  172. data/ext/libsass/docs/plugins.md +0 -47
  173. data/ext/libsass/docs/setup-environment.md +0 -68
  174. data/ext/libsass/docs/source-map-internals.md +0 -51
  175. data/ext/libsass/docs/trace.md +0 -26
  176. data/ext/libsass/docs/triage.md +0 -17
  177. data/ext/libsass/docs/unicode.md +0 -39
  178. data/ext/libsass/extconf.rb +0 -6
  179. data/ext/libsass/script/bootstrap +0 -13
  180. data/ext/libsass/script/branding +0 -10
  181. data/ext/libsass/script/ci-build-libsass +0 -134
  182. data/ext/libsass/script/ci-build-plugin +0 -62
  183. data/ext/libsass/script/ci-install-compiler +0 -6
  184. data/ext/libsass/script/ci-install-deps +0 -20
  185. data/ext/libsass/script/ci-report-coverage +0 -42
  186. data/ext/libsass/script/spec +0 -5
  187. data/ext/libsass/script/tap-driver +0 -652
  188. data/ext/libsass/script/tap-runner +0 -1
  189. data/ext/libsass/script/test-leaks.pl +0 -103
  190. data/ext/libsass/src/functions.cpp +0 -2234
  191. data/ext/libsass/src/functions.hpp +0 -198
  192. data/ext/libsass/src/to_c.hpp +0 -39
  193. data/ext/libsass/test/test_node.cpp +0 -94
  194. data/ext/libsass/test/test_paths.cpp +0 -28
  195. data/ext/libsass/test/test_selector_difference.cpp +0 -25
  196. data/ext/libsass/test/test_specificity.cpp +0 -25
  197. data/ext/libsass/test/test_subset_map.cpp +0 -472
  198. data/ext/libsass/test/test_superselector.cpp +0 -69
  199. data/ext/libsass/test/test_unification.cpp +0 -31
  200. data/lib/tasks/libsass.rb +0 -33
@@ -0,0 +1,34 @@
1
+ #ifndef SASS_FN_STRINGS_H
2
+ #define SASS_FN_STRINGS_H
3
+
4
+ #include "fn_utils.hpp"
5
+
6
+ namespace Sass {
7
+
8
+ namespace Functions {
9
+
10
+ extern Signature unquote_sig;
11
+ extern Signature quote_sig;
12
+ extern Signature str_length_sig;
13
+ extern Signature str_insert_sig;
14
+ extern Signature str_index_sig;
15
+ extern Signature str_slice_sig;
16
+ extern Signature to_upper_case_sig;
17
+ extern Signature to_lower_case_sig;
18
+ extern Signature length_sig;
19
+
20
+ BUILT_IN(sass_unquote);
21
+ BUILT_IN(sass_quote);
22
+ BUILT_IN(str_length);
23
+ BUILT_IN(str_insert);
24
+ BUILT_IN(str_index);
25
+ BUILT_IN(str_slice);
26
+ BUILT_IN(to_upper_case);
27
+ BUILT_IN(to_lower_case);
28
+ BUILT_IN(length);
29
+
30
+ }
31
+
32
+ }
33
+
34
+ #endif
@@ -0,0 +1,156 @@
1
+ // sass.hpp must go before all system headers to get the
2
+ // __EXTENSIONS__ fix on Solaris.
3
+ #include "sass.hpp"
4
+
5
+ #include "parser.hpp"
6
+ #include "fn_utils.hpp"
7
+ #include "util_string.hpp"
8
+
9
+ namespace Sass {
10
+
11
+ Definition* make_native_function(Signature sig, Native_Function func, Context& ctx)
12
+ {
13
+ Parser sig_parser = Parser::from_c_str(sig, ctx, ctx.traces, ParserState("[built-in function]"));
14
+ sig_parser.lex<Prelexer::identifier>();
15
+ std::string name(Util::normalize_underscores(sig_parser.lexed));
16
+ Parameters_Obj params = sig_parser.parse_parameters();
17
+ return SASS_MEMORY_NEW(Definition,
18
+ ParserState("[built-in function]"),
19
+ sig,
20
+ name,
21
+ params,
22
+ func,
23
+ false);
24
+ }
25
+
26
+ Definition* make_c_function(Sass_Function_Entry c_func, Context& ctx)
27
+ {
28
+ using namespace Prelexer;
29
+
30
+ const char* sig = sass_function_get_signature(c_func);
31
+ Parser sig_parser = Parser::from_c_str(sig, ctx, ctx.traces, ParserState("[c function]"));
32
+ // allow to overload generic callback plus @warn, @error and @debug with custom functions
33
+ sig_parser.lex < alternatives < identifier, exactly <'*'>,
34
+ exactly < Constants::warn_kwd >,
35
+ exactly < Constants::error_kwd >,
36
+ exactly < Constants::debug_kwd >
37
+ > >();
38
+ std::string name(Util::normalize_underscores(sig_parser.lexed));
39
+ Parameters_Obj params = sig_parser.parse_parameters();
40
+ return SASS_MEMORY_NEW(Definition,
41
+ ParserState("[c function]"),
42
+ sig,
43
+ name,
44
+ params,
45
+ c_func);
46
+ }
47
+
48
+ namespace Functions {
49
+
50
+ std::string function_name(Signature sig)
51
+ {
52
+ std::string str(sig);
53
+ return str.substr(0, str.find('('));
54
+ }
55
+
56
+ Map* get_arg_m(const std::string& argname, Env& env, Signature sig, ParserState pstate, Backtraces traces)
57
+ {
58
+ AST_Node* value = env[argname];
59
+ if (Map* map = Cast<Map>(value)) return map;
60
+ List* list = Cast<List>(value);
61
+ if (list && list->length() == 0) {
62
+ return SASS_MEMORY_NEW(Map, pstate, 0);
63
+ }
64
+ return get_arg<Map>(argname, env, sig, pstate, traces);
65
+ }
66
+
67
+ double get_arg_r(const std::string& argname, Env& env, Signature sig, ParserState pstate, Backtraces traces, double lo, double hi)
68
+ {
69
+ Number* val = get_arg<Number>(argname, env, sig, pstate, traces);
70
+ Number tmpnr(val);
71
+ tmpnr.reduce();
72
+ double v = tmpnr.value();
73
+ if (!(lo <= v && v <= hi)) {
74
+ std::stringstream msg;
75
+ msg << "argument `" << argname << "` of `" << sig << "` must be between ";
76
+ msg << lo << " and " << hi;
77
+ error(msg.str(), pstate, traces);
78
+ }
79
+ return v;
80
+ }
81
+
82
+ Number* get_arg_n(const std::string& argname, Env& env, Signature sig, ParserState pstate, Backtraces traces)
83
+ {
84
+ Number* val = get_arg<Number>(argname, env, sig, pstate, traces);
85
+ val = SASS_MEMORY_COPY(val);
86
+ val->reduce();
87
+ return val;
88
+ }
89
+
90
+ double get_arg_val(const std::string& argname, Env& env, Signature sig, ParserState pstate, Backtraces traces)
91
+ {
92
+ Number* val = get_arg<Number>(argname, env, sig, pstate, traces);
93
+ Number tmpnr(val);
94
+ tmpnr.reduce();
95
+ return tmpnr.value();
96
+ }
97
+
98
+ double color_num(const std::string& argname, Env& env, Signature sig, ParserState pstate, Backtraces traces)
99
+ {
100
+ Number* val = get_arg<Number>(argname, env, sig, pstate, traces);
101
+ Number tmpnr(val);
102
+ tmpnr.reduce();
103
+ if (tmpnr.unit() == "%") {
104
+ return std::min(std::max(tmpnr.value() * 255 / 100.0, 0.0), 255.0);
105
+ } else {
106
+ return std::min(std::max(tmpnr.value(), 0.0), 255.0);
107
+ }
108
+ }
109
+
110
+ double alpha_num(const std::string& argname, Env& env, Signature sig, ParserState pstate, Backtraces traces) {
111
+ Number* val = get_arg<Number>(argname, env, sig, pstate, traces);
112
+ Number tmpnr(val);
113
+ tmpnr.reduce();
114
+ if (tmpnr.unit() == "%") {
115
+ return std::min(std::max(tmpnr.value(), 0.0), 100.0);
116
+ } else {
117
+ return std::min(std::max(tmpnr.value(), 0.0), 1.0);
118
+ }
119
+ }
120
+
121
+ Selector_List_Obj get_arg_sels(const std::string& argname, Env& env, Signature sig, ParserState pstate, Backtraces traces, Context& ctx) {
122
+ Expression_Obj exp = ARG(argname, Expression);
123
+ if (exp->concrete_type() == Expression::NULL_VAL) {
124
+ std::stringstream msg;
125
+ msg << argname << ": null is not a valid selector: it must be a string,\n";
126
+ msg << "a list of strings, or a list of lists of strings for `" << function_name(sig) << "'";
127
+ error(msg.str(), exp->pstate(), traces);
128
+ }
129
+ if (String_Constant* str = Cast<String_Constant>(exp)) {
130
+ str->quote_mark(0);
131
+ }
132
+ std::string exp_src = exp->to_string(ctx.c_options);
133
+ return Parser::parse_selector(exp_src.c_str(), ctx, traces, exp->pstate(), pstate.src, /*allow_parent=*/false);
134
+ }
135
+
136
+ Compound_Selector_Obj get_arg_sel(const std::string& argname, Env& env, Signature sig, ParserState pstate, Backtraces traces, Context& ctx) {
137
+ Expression_Obj exp = ARG(argname, Expression);
138
+ if (exp->concrete_type() == Expression::NULL_VAL) {
139
+ std::stringstream msg;
140
+ msg << argname << ": null is not a string for `" << function_name(sig) << "'";
141
+ error(msg.str(), exp->pstate(), traces);
142
+ }
143
+ if (String_Constant* str = Cast<String_Constant>(exp)) {
144
+ str->quote_mark(0);
145
+ }
146
+ std::string exp_src = exp->to_string(ctx.c_options);
147
+ Selector_List_Obj sel_list = Parser::parse_selector(exp_src.c_str(), ctx, traces, exp->pstate(), pstate.src, /*allow_parent=*/false);
148
+ if (sel_list->length() == 0) return {};
149
+ Complex_Selector_Obj first = sel_list->first();
150
+ if (!first->tail()) return first->head();
151
+ return first->tail()->head();
152
+ }
153
+
154
+ }
155
+
156
+ }
@@ -0,0 +1,56 @@
1
+ #ifndef SASS_FN_UTILS_H
2
+ #define SASS_FN_UTILS_H
3
+ #include "units.hpp"
4
+ #include "backtrace.hpp"
5
+ #include "environment.hpp"
6
+ #include "ast_fwd_decl.hpp"
7
+ #include "error_handling.hpp"
8
+
9
+ namespace Sass {
10
+
11
+ #define FN_PROTOTYPE \
12
+ Env& env, \
13
+ Env& d_env, \
14
+ Context& ctx, \
15
+ Signature sig, \
16
+ ParserState pstate, \
17
+ Backtraces& traces, \
18
+ SelectorStack& selector_stack
19
+
20
+ typedef const char* Signature;
21
+ typedef PreValue* (*Native_Function)(FN_PROTOTYPE);
22
+ #define BUILT_IN(name) PreValue* name(FN_PROTOTYPE)
23
+
24
+ #define ARG(argname, argtype) get_arg<argtype>(argname, env, sig, pstate, traces)
25
+ // special function for weird hsla percent (10px == 10% == 10 != 0.1)
26
+ #define ARGVAL(argname) get_arg_val(argname, env, sig, pstate, traces) // double
27
+
28
+ Definition* make_native_function(Signature, Native_Function, Context& ctx);
29
+ Definition* make_c_function(Sass_Function_Entry c_func, Context& ctx);
30
+
31
+ namespace Functions {
32
+
33
+ template <typename T>
34
+ T* get_arg(const std::string& argname, Env& env, Signature sig, ParserState pstate, Backtraces traces)
35
+ {
36
+ T* val = Cast<T>(env[argname]);
37
+ if (!val) {
38
+ error("argument `" + argname + "` of `" + sig + "` must be a " + T::type_name(), pstate, traces);
39
+ }
40
+ return val;
41
+ }
42
+
43
+ Map* get_arg_m(const std::string& argname, Env& env, Signature sig, ParserState pstate, Backtraces traces); // maps only
44
+ Number* get_arg_n(const std::string& argname, Env& env, Signature sig, ParserState pstate, Backtraces traces); // numbers only
45
+ double alpha_num(const std::string& argname, Env& env, Signature sig, ParserState pstate, Backtraces traces); // colors only
46
+ double color_num(const std::string& argname, Env& env, Signature sig, ParserState pstate, Backtraces traces); // colors only
47
+ double get_arg_r(const std::string& argname, Env& env, Signature sig, ParserState pstate, Backtraces traces, double lo, double hi); // colors only
48
+ double get_arg_val(const std::string& argname, Env& env, Signature sig, ParserState pstate, Backtraces traces); // shared
49
+ Selector_List_Obj get_arg_sels(const std::string& argname, Env& env, Signature sig, ParserState pstate, Backtraces traces, Context& ctx); // selectors only
50
+ Compound_Selector_Obj get_arg_sel(const std::string& argname, Env& env, Signature sig, ParserState pstate, Backtraces traces, Context& ctx); // selectors only
51
+
52
+ }
53
+
54
+ }
55
+
56
+ #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 <cmath>
3
6
  #include <string>
4
7
  #include <iostream>
@@ -21,7 +24,7 @@ namespace Sass {
21
24
  Inspect::~Inspect() { }
22
25
 
23
26
  // statements
24
- void Inspect::operator()(Block_Ptr block)
27
+ void Inspect::operator()(Block* block)
25
28
  {
26
29
  if (!block->is_root()) {
27
30
  add_open_mapping(block);
@@ -39,25 +42,23 @@ namespace Sass {
39
42
 
40
43
  }
41
44
 
42
- void Inspect::operator()(Ruleset_Ptr ruleset)
45
+ void Inspect::operator()(Ruleset* ruleset)
43
46
  {
44
47
  if (ruleset->selector()) {
45
- opt.in_selector = true;
46
48
  ruleset->selector()->perform(this);
47
- opt.in_selector = false;
48
49
  }
49
50
  if (ruleset->block()) {
50
51
  ruleset->block()->perform(this);
51
52
  }
52
53
  }
53
54
 
54
- void Inspect::operator()(Keyframe_Rule_Ptr rule)
55
+ void Inspect::operator()(Keyframe_Rule* rule)
55
56
  {
56
57
  if (rule->name()) rule->name()->perform(this);
57
58
  if (rule->block()) rule->block()->perform(this);
58
59
  }
59
60
 
60
- void Inspect::operator()(Bubble_Ptr bubble)
61
+ void Inspect::operator()(Bubble* bubble)
61
62
  {
62
63
  append_indentation();
63
64
  append_token("::BUBBLE", bubble);
@@ -66,7 +67,7 @@ namespace Sass {
66
67
  append_scope_closer();
67
68
  }
68
69
 
69
- void Inspect::operator()(Media_Block_Ptr media_block)
70
+ void Inspect::operator()(Media_Block* media_block)
70
71
  {
71
72
  append_indentation();
72
73
  append_token("@media", media_block);
@@ -77,7 +78,7 @@ namespace Sass {
77
78
  media_block->block()->perform(this);
78
79
  }
79
80
 
80
- void Inspect::operator()(Supports_Block_Ptr feature_block)
81
+ void Inspect::operator()(Supports_Block* feature_block)
81
82
  {
82
83
  append_indentation();
83
84
  append_token("@supports", feature_block);
@@ -86,7 +87,7 @@ namespace Sass {
86
87
  feature_block->block()->perform(this);
87
88
  }
88
89
 
89
- void Inspect::operator()(At_Root_Block_Ptr at_root_block)
90
+ void Inspect::operator()(At_Root_Block* at_root_block)
90
91
  {
91
92
  append_indentation();
92
93
  append_token("@at-root ", at_root_block);
@@ -95,7 +96,7 @@ namespace Sass {
95
96
  if(at_root_block->block()) at_root_block->block()->perform(this);
96
97
  }
97
98
 
98
- void Inspect::operator()(Directive_Ptr at_rule)
99
+ void Inspect::operator()(Directive* at_rule)
99
100
  {
100
101
  append_indentation();
101
102
  append_token(at_rule->keyword(), at_rule);
@@ -118,7 +119,7 @@ namespace Sass {
118
119
  }
119
120
  }
120
121
 
121
- void Inspect::operator()(Declaration_Ptr dec)
122
+ void Inspect::operator()(Declaration* dec)
122
123
  {
123
124
  if (dec->value()->concrete_type() == Expression::NULL_VAL) return;
124
125
  bool was_decl = in_declaration;
@@ -150,7 +151,7 @@ namespace Sass {
150
151
  in_declaration = was_decl;
151
152
  }
152
153
 
153
- void Inspect::operator()(Assignment_Ptr assn)
154
+ void Inspect::operator()(Assignment* assn)
154
155
  {
155
156
  append_token(assn->variable(), assn);
156
157
  append_colon_separator();
@@ -162,7 +163,7 @@ namespace Sass {
162
163
  append_delimiter();
163
164
  }
164
165
 
165
- void Inspect::operator()(Import_Ptr import)
166
+ void Inspect::operator()(Import* import)
166
167
  {
167
168
  if (!import->urls().empty()) {
168
169
  append_token("@import", import);
@@ -193,7 +194,7 @@ namespace Sass {
193
194
  }
194
195
  }
195
196
 
196
- void Inspect::operator()(Import_Stub_Ptr import)
197
+ void Inspect::operator()(Import_Stub* import)
197
198
  {
198
199
  append_indentation();
199
200
  append_token("@import", import);
@@ -202,7 +203,7 @@ namespace Sass {
202
203
  append_delimiter();
203
204
  }
204
205
 
205
- void Inspect::operator()(Warning_Ptr warning)
206
+ void Inspect::operator()(Warning* warning)
206
207
  {
207
208
  append_indentation();
208
209
  append_token("@warn", warning);
@@ -211,7 +212,7 @@ namespace Sass {
211
212
  append_delimiter();
212
213
  }
213
214
 
214
- void Inspect::operator()(Error_Ptr error)
215
+ void Inspect::operator()(Error* error)
215
216
  {
216
217
  append_indentation();
217
218
  append_token("@error", error);
@@ -220,7 +221,7 @@ namespace Sass {
220
221
  append_delimiter();
221
222
  }
222
223
 
223
- void Inspect::operator()(Debug_Ptr debug)
224
+ void Inspect::operator()(Debug* debug)
224
225
  {
225
226
  append_indentation();
226
227
  append_token("@debug", debug);
@@ -229,14 +230,14 @@ namespace Sass {
229
230
  append_delimiter();
230
231
  }
231
232
 
232
- void Inspect::operator()(Comment_Ptr comment)
233
+ void Inspect::operator()(Comment* comment)
233
234
  {
234
235
  in_comment = true;
235
236
  comment->text()->perform(this);
236
237
  in_comment = false;
237
238
  }
238
239
 
239
- void Inspect::operator()(If_Ptr cond)
240
+ void Inspect::operator()(If* cond)
240
241
  {
241
242
  append_indentation();
242
243
  append_token("@if", cond);
@@ -251,7 +252,7 @@ namespace Sass {
251
252
  }
252
253
  }
253
254
 
254
- void Inspect::operator()(For_Ptr loop)
255
+ void Inspect::operator()(For* loop)
255
256
  {
256
257
  append_indentation();
257
258
  append_token("@for", loop);
@@ -264,7 +265,7 @@ namespace Sass {
264
265
  loop->block()->perform(this);
265
266
  }
266
267
 
267
- void Inspect::operator()(Each_Ptr loop)
268
+ void Inspect::operator()(Each* loop)
268
269
  {
269
270
  append_indentation();
270
271
  append_token("@each", loop);
@@ -279,7 +280,7 @@ namespace Sass {
279
280
  loop->block()->perform(this);
280
281
  }
281
282
 
282
- void Inspect::operator()(While_Ptr loop)
283
+ void Inspect::operator()(While* loop)
283
284
  {
284
285
  append_indentation();
285
286
  append_token("@while", loop);
@@ -288,7 +289,7 @@ namespace Sass {
288
289
  loop->block()->perform(this);
289
290
  }
290
291
 
291
- void Inspect::operator()(Return_Ptr ret)
292
+ void Inspect::operator()(Return* ret)
292
293
  {
293
294
  append_indentation();
294
295
  append_token("@return", ret);
@@ -297,7 +298,7 @@ namespace Sass {
297
298
  append_delimiter();
298
299
  }
299
300
 
300
- void Inspect::operator()(Extension_Ptr extend)
301
+ void Inspect::operator()(Extension* extend)
301
302
  {
302
303
  append_indentation();
303
304
  append_token("@extend", extend);
@@ -306,7 +307,7 @@ namespace Sass {
306
307
  append_delimiter();
307
308
  }
308
309
 
309
- void Inspect::operator()(Definition_Ptr def)
310
+ void Inspect::operator()(Definition* def)
310
311
  {
311
312
  append_indentation();
312
313
  if (def->type() == Definition::MIXIN) {
@@ -321,7 +322,7 @@ namespace Sass {
321
322
  def->block()->perform(this);
322
323
  }
323
324
 
324
- void Inspect::operator()(Mixin_Call_Ptr call)
325
+ void Inspect::operator()(Mixin_Call* call)
325
326
  {
326
327
  append_indentation();
327
328
  append_token("@include", call);
@@ -337,14 +338,14 @@ namespace Sass {
337
338
  if (!call->block()) append_delimiter();
338
339
  }
339
340
 
340
- void Inspect::operator()(Content_Ptr content)
341
+ void Inspect::operator()(Content* content)
341
342
  {
342
343
  append_indentation();
343
344
  append_token("@content", content);
344
345
  append_delimiter();
345
346
  }
346
347
 
347
- void Inspect::operator()(Map_Ptr map)
348
+ void Inspect::operator()(Map* map)
348
349
  {
349
350
  if (output_style() == TO_SASS && map->empty()) {
350
351
  append_string("()");
@@ -366,15 +367,15 @@ namespace Sass {
366
367
  append_string(")");
367
368
  }
368
369
 
369
- std::string Inspect::lbracket(List_Ptr list) {
370
+ std::string Inspect::lbracket(List* list) {
370
371
  return list->is_bracketed() ? "[" : "(";
371
372
  }
372
373
 
373
- std::string Inspect::rbracket(List_Ptr list) {
374
+ std::string Inspect::rbracket(List* list) {
374
375
  return list->is_bracketed() ? "]" : ")";
375
376
  }
376
377
 
377
- void Inspect::operator()(List_Ptr list)
378
+ void Inspect::operator()(List* list)
378
379
  {
379
380
  if (list->empty() && (output_style() == TO_SASS || list->is_bracketed())) {
380
381
  append_string(lbracket(list));
@@ -462,7 +463,7 @@ namespace Sass {
462
463
 
463
464
  }
464
465
 
465
- void Inspect::operator()(Binary_Expression_Ptr expr)
466
+ void Inspect::operator()(Binary_Expression* expr)
466
467
  {
467
468
  expr->left()->perform(this);
468
469
  if ( in_media_block ||
@@ -499,7 +500,7 @@ namespace Sass {
499
500
  expr->right()->perform(this);
500
501
  }
501
502
 
502
- void Inspect::operator()(Unary_Expression_Ptr expr)
503
+ void Inspect::operator()(Unary_Expression* expr)
503
504
  {
504
505
  if (expr->optype() == Unary_Expression::PLUS) append_string("+");
505
506
  else if (expr->optype() == Unary_Expression::SLASH) append_string("/");
@@ -507,91 +508,42 @@ namespace Sass {
507
508
  expr->operand()->perform(this);
508
509
  }
509
510
 
510
- void Inspect::operator()(Function_Call_Ptr call)
511
+ void Inspect::operator()(Function_Call* call)
511
512
  {
512
513
  append_token(call->name(), call);
513
514
  call->arguments()->perform(this);
514
515
  }
515
516
 
516
- void Inspect::operator()(Function_Call_Schema_Ptr call)
517
- {
518
- call->name()->perform(this);
519
- call->arguments()->perform(this);
520
- }
521
-
522
- void Inspect::operator()(Variable_Ptr var)
517
+ void Inspect::operator()(Variable* var)
523
518
  {
524
519
  append_token(var->name(), var);
525
520
  }
526
521
 
527
- void Inspect::operator()(Number_Ptr n)
522
+ void Inspect::operator()(Number* n)
528
523
  {
529
524
 
530
- std::string res;
531
-
532
525
  // reduce units
533
526
  n->reduce();
534
527
 
535
- // check if the fractional part of the value equals to zero
536
- // neat trick from http://stackoverflow.com/a/1521682/1550314
537
- // double int_part; bool is_int = modf(value, &int_part) == 0.0;
538
-
539
- // this all cannot be done with one run only, since fixed
540
- // output differs from normal output and regular output
541
- // can contain scientific notation which we do not want!
542
-
543
- // first sample
544
528
  std::stringstream ss;
545
- ss.precision(12);
546
- ss << n->value();
547
-
548
- // check if we got scientific notation in result
549
- if (ss.str().find_first_of("e") != std::string::npos) {
550
- ss.clear(); ss.str(std::string());
551
- ss.precision(std::max(12, opt.precision));
552
- ss << std::fixed << n->value();
553
- }
554
-
555
- std::string tmp = ss.str();
556
- size_t pos_point = tmp.find_first_of(".,");
557
- size_t pos_fract = tmp.find_last_not_of("0");
558
- bool is_int = pos_point == pos_fract ||
559
- pos_point == std::string::npos;
529
+ ss.precision(opt.precision);
530
+ ss << std::fixed << n->value();
560
531
 
561
- // reset stream for another run
562
- ss.clear(); ss.str(std::string());
532
+ std::string res = ss.str();
533
+ int s = res.length();
563
534
 
564
- // take a shortcut for integers
565
- if (is_int)
535
+ // delete trailing zeros
536
+ for(s = s - 1; s > 0; --s)
566
537
  {
567
- ss.precision(0);
568
- ss << std::fixed << n->value();
569
- res = std::string(ss.str());
570
- }
571
- // process floats
572
- else
573
- {
574
- // do we have have too much precision?
575
- if (pos_fract < opt.precision + pos_point)
576
- { ss.precision((int)(pos_fract - pos_point)); }
577
- else { ss.precision(opt.precision); }
578
- // round value again
579
- ss << std::fixed << n->value();
580
- res = std::string(ss.str());
581
- // maybe we truncated up to decimal point
582
- size_t pos = res.find_last_not_of("0");
583
- // handle case where we have a "0"
584
- if (pos == std::string::npos) {
585
- res = "0.0";
586
- } else {
587
- bool at_dec_point = res[pos] == '.' ||
588
- res[pos] == ',';
589
- // don't leave a blank point
590
- if (at_dec_point) ++ pos;
591
- res.resize (pos + 1);
592
- }
538
+ if(res[s] == '0') {
539
+ res.erase(s, 1);
540
+ }
541
+ else break;
593
542
  }
594
543
 
544
+ // delete trailing decimal separator
545
+ if(res[s] == '.') res.erase(s, 1);
546
+
595
547
  // some final cosmetics
596
548
  if (res == "0.0") res = "0";
597
549
  else if (res == "") res = "0";
@@ -599,10 +551,12 @@ namespace Sass {
599
551
  else if (res == "-0.0") res = "0";
600
552
  else if (opt.output_style == COMPRESSED)
601
553
  {
602
- // check if handling negative nr
603
- size_t off = res[0] == '-' ? 1 : 0;
604
- // remove leading zero from floating point in compressed mode
605
- if (n->zero() && res[off] == '0' && res[off+1] == '.') res.erase(off, 1);
554
+ if (n->zero()) {
555
+ // check if handling negative nr
556
+ size_t off = res[0] == '-' ? 1 : 0;
557
+ // remove leading zero from floating point in compressed mode
558
+ if (res[off] == '0' && res[off+1] == '.') res.erase(off, 1);
559
+ }
606
560
  }
607
561
 
608
562
  // add unit now
@@ -620,7 +574,7 @@ namespace Sass {
620
574
  else return c;
621
575
  }
622
576
 
623
- void Inspect::operator()(Color_Ptr c)
577
+ void Inspect::operator()(Color_RGBA* c)
624
578
  {
625
579
  // output the final token
626
580
  std::stringstream ss;
@@ -629,11 +583,6 @@ namespace Sass {
629
583
  // maybe an unknown token
630
584
  std::string name = c->disp();
631
585
 
632
- if (opt.in_selector && name != "") {
633
- append_token(name, c);
634
- return;
635
- }
636
-
637
586
  // resolved color
638
587
  std::string res_name = name;
639
588
 
@@ -644,7 +593,7 @@ namespace Sass {
644
593
 
645
594
  // get color from given name (if one was given at all)
646
595
  if (name != "" && name_to_color(name)) {
647
- Color_Ptr_Const n = name_to_color(name);
596
+ const Color_RGBA* n = name_to_color(name);
648
597
  r = Sass::round(cap_channel<0xff>(n->r()), opt.precision);
649
598
  g = Sass::round(cap_channel<0xff>(n->g()), opt.precision);
650
599
  b = Sass::round(cap_channel<0xff>(n->b()), opt.precision);
@@ -658,6 +607,9 @@ namespace Sass {
658
607
  }
659
608
 
660
609
  std::stringstream hexlet;
610
+ // dart sass compressed all colors in regular css always
611
+ // ruby sass and libsass does it only when not delayed
612
+ // since color math is going to be removed, this can go too
661
613
  bool compressed = opt.output_style == COMPRESSED;
662
614
  hexlet << '#' << std::setw(1) << std::setfill('0');
663
615
  // create a short color hexlet if there is any need for it
@@ -681,9 +633,6 @@ namespace Sass {
681
633
  if (name != "") {
682
634
  ss << name;
683
635
  }
684
- else if (r == 0 && g == 0 && b == 0 && a == 0) {
685
- ss << "transparent";
686
- }
687
636
  else if (a >= 1) {
688
637
  if (res_name != "") {
689
638
  if (compressed && hexlet.str().size() < res_name.size()) {
@@ -711,13 +660,19 @@ namespace Sass {
711
660
 
712
661
  }
713
662
 
714
- void Inspect::operator()(Boolean_Ptr b)
663
+ void Inspect::operator()(Color_HSLA* c)
664
+ {
665
+ Color_RGBA_Obj rgba = c->toRGBA();
666
+ operator()(rgba);
667
+ }
668
+
669
+ void Inspect::operator()(Boolean* b)
715
670
  {
716
671
  // output the final token
717
672
  append_token(b->value() ? "true" : "false", b);
718
673
  }
719
674
 
720
- void Inspect::operator()(String_Schema_Ptr ss)
675
+ void Inspect::operator()(String_Schema* ss)
721
676
  {
722
677
  // Evaluation should turn these into String_Constants,
723
678
  // so this method is only for inspection purposes.
@@ -728,12 +683,12 @@ namespace Sass {
728
683
  }
729
684
  }
730
685
 
731
- void Inspect::operator()(String_Constant_Ptr s)
686
+ void Inspect::operator()(String_Constant* s)
732
687
  {
733
688
  append_token(s->value(), s);
734
689
  }
735
690
 
736
- void Inspect::operator()(String_Quoted_Ptr s)
691
+ void Inspect::operator()(String_Quoted* s)
737
692
  {
738
693
  if (const char q = s->quote_mark()) {
739
694
  append_token(quote(s->value(), q), s);
@@ -742,17 +697,17 @@ namespace Sass {
742
697
  }
743
698
  }
744
699
 
745
- void Inspect::operator()(Custom_Error_Ptr e)
700
+ void Inspect::operator()(Custom_Error* e)
746
701
  {
747
702
  append_token(e->message(), e);
748
703
  }
749
704
 
750
- void Inspect::operator()(Custom_Warning_Ptr w)
705
+ void Inspect::operator()(Custom_Warning* w)
751
706
  {
752
707
  append_token(w->message(), w);
753
708
  }
754
709
 
755
- void Inspect::operator()(Supports_Operator_Ptr so)
710
+ void Inspect::operator()(Supports_Operator* so)
756
711
  {
757
712
 
758
713
  if (so->needs_parens(so->left())) append_string("(");
@@ -774,7 +729,7 @@ namespace Sass {
774
729
  if (so->needs_parens(so->right())) append_string(")");
775
730
  }
776
731
 
777
- void Inspect::operator()(Supports_Negation_Ptr sn)
732
+ void Inspect::operator()(Supports_Negation* sn)
778
733
  {
779
734
  append_token("not", sn);
780
735
  append_mandatory_space();
@@ -783,7 +738,7 @@ namespace Sass {
783
738
  if (sn->needs_parens(sn->condition())) append_string(")");
784
739
  }
785
740
 
786
- void Inspect::operator()(Supports_Declaration_Ptr sd)
741
+ void Inspect::operator()(Supports_Declaration* sd)
787
742
  {
788
743
  append_string("(");
789
744
  sd->feature()->perform(this);
@@ -792,12 +747,12 @@ namespace Sass {
792
747
  append_string(")");
793
748
  }
794
749
 
795
- void Inspect::operator()(Supports_Interpolation_Ptr sd)
750
+ void Inspect::operator()(Supports_Interpolation* sd)
796
751
  {
797
752
  sd->value()->perform(this);
798
753
  }
799
754
 
800
- void Inspect::operator()(Media_Query_Ptr mq)
755
+ void Inspect::operator()(Media_Query* mq)
801
756
  {
802
757
  size_t i = 0;
803
758
  if (mq->media_type()) {
@@ -814,7 +769,7 @@ namespace Sass {
814
769
  }
815
770
  }
816
771
 
817
- void Inspect::operator()(Media_Query_Expression_Ptr mqe)
772
+ void Inspect::operator()(Media_Query_Expression* mqe)
818
773
  {
819
774
  if (mqe->is_interpolated()) {
820
775
  mqe->feature()->perform(this);
@@ -830,7 +785,7 @@ namespace Sass {
830
785
  }
831
786
  }
832
787
 
833
- void Inspect::operator()(At_Root_Query_Ptr ae)
788
+ void Inspect::operator()(At_Root_Query* ae)
834
789
  {
835
790
  if (ae->feature()) {
836
791
  append_string("(");
@@ -843,7 +798,7 @@ namespace Sass {
843
798
  }
844
799
  }
845
800
 
846
- void Inspect::operator()(Function_Ptr f)
801
+ void Inspect::operator()(Function* f)
847
802
  {
848
803
  append_token("get-function", f);
849
804
  append_string("(");
@@ -851,14 +806,14 @@ namespace Sass {
851
806
  append_string(")");
852
807
  }
853
808
 
854
- void Inspect::operator()(Null_Ptr n)
809
+ void Inspect::operator()(Null* n)
855
810
  {
856
811
  // output the final token
857
812
  append_token("null", n);
858
813
  }
859
814
 
860
815
  // parameters and arguments
861
- void Inspect::operator()(Parameter_Ptr p)
816
+ void Inspect::operator()(Parameter* p)
862
817
  {
863
818
  append_token(p->name(), p);
864
819
  if (p->default_value()) {
@@ -870,7 +825,7 @@ namespace Sass {
870
825
  }
871
826
  }
872
827
 
873
- void Inspect::operator()(Parameters_Ptr p)
828
+ void Inspect::operator()(Parameters* p)
874
829
  {
875
830
  append_string("(");
876
831
  if (!p->empty()) {
@@ -883,7 +838,7 @@ namespace Sass {
883
838
  append_string(")");
884
839
  }
885
840
 
886
- void Inspect::operator()(Argument_Ptr a)
841
+ void Inspect::operator()(Argument* a)
887
842
  {
888
843
  if (!a->name().empty()) {
889
844
  append_token(a->name(), a);
@@ -895,7 +850,7 @@ namespace Sass {
895
850
  return;
896
851
  }
897
852
  if (a->value()->concrete_type() == Expression::STRING) {
898
- String_Constant_Ptr s = Cast<String_Constant>(a->value());
853
+ String_Constant* s = Cast<String_Constant>(a->value());
899
854
  if (s) s->perform(this);
900
855
  } else {
901
856
  a->value()->perform(this);
@@ -905,7 +860,7 @@ namespace Sass {
905
860
  }
906
861
  }
907
862
 
908
- void Inspect::operator()(Arguments_Ptr a)
863
+ void Inspect::operator()(Arguments* a)
909
864
  {
910
865
  append_string("(");
911
866
  if (!a->empty()) {
@@ -919,19 +874,17 @@ namespace Sass {
919
874
  append_string(")");
920
875
  }
921
876
 
922
- void Inspect::operator()(Selector_Schema_Ptr s)
877
+ void Inspect::operator()(Selector_Schema* s)
923
878
  {
924
- opt.in_selector = true;
925
879
  s->contents()->perform(this);
926
- opt.in_selector = false;
927
880
  }
928
881
 
929
- void Inspect::operator()(Parent_Selector_Ptr p)
882
+ void Inspect::operator()(Parent_Selector* p)
930
883
  {
931
- if (p->is_real_parent_ref()) append_string("&");
884
+ if (p->real()) append_string("&");
932
885
  }
933
886
 
934
- void Inspect::operator()(Placeholder_Selector_Ptr s)
887
+ void Inspect::operator()(Placeholder_Selector* s)
935
888
  {
936
889
  append_token(s->name(), s);
937
890
  if (s->has_line_break()) append_optional_linefeed();
@@ -939,26 +892,26 @@ namespace Sass {
939
892
 
940
893
  }
941
894
 
942
- void Inspect::operator()(Element_Selector_Ptr s)
895
+ void Inspect::operator()(Type_Selector* s)
943
896
  {
944
897
  append_token(s->ns_name(), s);
945
898
  }
946
899
 
947
- void Inspect::operator()(Class_Selector_Ptr s)
900
+ void Inspect::operator()(Class_Selector* s)
948
901
  {
949
902
  append_token(s->ns_name(), s);
950
903
  if (s->has_line_break()) append_optional_linefeed();
951
904
  if (s->has_line_break()) append_indentation();
952
905
  }
953
906
 
954
- void Inspect::operator()(Id_Selector_Ptr s)
907
+ void Inspect::operator()(Id_Selector* s)
955
908
  {
956
909
  append_token(s->ns_name(), s);
957
910
  if (s->has_line_break()) append_optional_linefeed();
958
911
  if (s->has_line_break()) append_indentation();
959
912
  }
960
913
 
961
- void Inspect::operator()(Attribute_Selector_Ptr s)
914
+ void Inspect::operator()(Attribute_Selector* s)
962
915
  {
963
916
  append_string("[");
964
917
  add_open_mapping(s);
@@ -977,7 +930,7 @@ namespace Sass {
977
930
  append_string("]");
978
931
  }
979
932
 
980
- void Inspect::operator()(Pseudo_Selector_Ptr s)
933
+ void Inspect::operator()(Pseudo_Selector* s)
981
934
  {
982
935
  append_token(s->ns_name(), s);
983
936
  if (s->expression()) {
@@ -987,7 +940,7 @@ namespace Sass {
987
940
  }
988
941
  }
989
942
 
990
- void Inspect::operator()(Wrapped_Selector_Ptr s)
943
+ void Inspect::operator()(Wrapped_Selector* s)
991
944
  {
992
945
  if (s->name() == " ") {
993
946
  append_string("");
@@ -1005,7 +958,7 @@ namespace Sass {
1005
958
  }
1006
959
  }
1007
960
 
1008
- void Inspect::operator()(Compound_Selector_Ptr s)
961
+ void Inspect::operator()(Compound_Selector* s)
1009
962
  {
1010
963
  for (size_t i = 0, L = s->length(); i < L; ++i) {
1011
964
  (*s)[i]->perform(this);
@@ -1017,7 +970,7 @@ namespace Sass {
1017
970
  }
1018
971
  }
1019
972
 
1020
- void Inspect::operator()(Complex_Selector_Ptr c)
973
+ void Inspect::operator()(Complex_Selector* c)
1021
974
  {
1022
975
  Compound_Selector_Obj head = c->head();
1023
976
  Complex_Selector_Obj tail = c->tail();
@@ -1057,7 +1010,7 @@ namespace Sass {
1057
1010
  case Complex_Selector::REFERENCE:
1058
1011
  append_mandatory_space();
1059
1012
  append_string("/");
1060
- c->reference()->perform(this);
1013
+ if (c->reference()) c->reference()->perform(this);
1061
1014
  append_string("/");
1062
1015
  append_mandatory_space();
1063
1016
  break;
@@ -1081,7 +1034,7 @@ namespace Sass {
1081
1034
  }
1082
1035
  }
1083
1036
 
1084
- void Inspect::operator()(Selector_List_Ptr g)
1037
+ void Inspect::operator()(Selector_List* g)
1085
1038
  {
1086
1039
 
1087
1040
  if (g->empty()) {
@@ -1131,8 +1084,4 @@ namespace Sass {
1131
1084
 
1132
1085
  }
1133
1086
 
1134
- void Inspect::fallback_impl(AST_Node_Ptr n)
1135
- {
1136
- }
1137
-
1138
1087
  }