sassc 2.3.0 → 2.4.0
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.
- checksums.yaml +4 -4
- data/.travis.yml +1 -0
- data/CHANGELOG.md +5 -0
- data/ext/libsass/VERSION +1 -1
- data/ext/libsass/include/sass/context.h +3 -0
- data/ext/libsass/src/MurmurHash2.hpp +91 -0
- data/ext/libsass/src/ast.cpp +117 -117
- data/ext/libsass/src/ast.hpp +160 -162
- data/ext/libsass/src/ast_def_macros.hpp +10 -10
- data/ext/libsass/src/ast_fwd_decl.cpp +2 -2
- data/ext/libsass/src/ast_fwd_decl.hpp +61 -52
- data/ext/libsass/src/ast_helpers.hpp +5 -5
- data/ext/libsass/src/ast_sel_cmp.cpp +18 -18
- data/ext/libsass/src/ast_sel_super.cpp +52 -52
- data/ext/libsass/src/ast_sel_unify.cpp +16 -16
- data/ext/libsass/src/ast_sel_weave.cpp +62 -62
- data/ext/libsass/src/ast_selectors.cpp +87 -77
- data/ext/libsass/src/ast_selectors.hpp +72 -62
- data/ext/libsass/src/ast_supports.cpp +35 -35
- data/ext/libsass/src/ast_supports.hpp +29 -29
- data/ext/libsass/src/ast_values.cpp +58 -58
- data/ext/libsass/src/ast_values.hpp +75 -75
- data/ext/libsass/src/backtrace.cpp +9 -9
- data/ext/libsass/src/backtrace.hpp +5 -5
- data/ext/libsass/src/base64vlq.cpp +2 -2
- data/ext/libsass/src/base64vlq.hpp +1 -1
- data/ext/libsass/src/bind.cpp +17 -17
- data/ext/libsass/src/bind.hpp +1 -1
- data/ext/libsass/src/c2ast.cpp +3 -3
- data/ext/libsass/src/c2ast.hpp +1 -1
- data/ext/libsass/src/check_nesting.cpp +36 -36
- data/ext/libsass/src/check_nesting.hpp +2 -2
- data/ext/libsass/src/color_maps.cpp +5 -5
- data/ext/libsass/src/color_maps.hpp +1 -1
- data/ext/libsass/src/context.cpp +63 -60
- data/ext/libsass/src/context.hpp +33 -33
- data/ext/libsass/src/cssize.cpp +30 -29
- data/ext/libsass/src/cssize.hpp +13 -13
- data/ext/libsass/src/dart_helpers.hpp +5 -5
- data/ext/libsass/src/debugger.hpp +127 -128
- data/ext/libsass/src/emitter.cpp +12 -12
- data/ext/libsass/src/emitter.hpp +10 -10
- data/ext/libsass/src/environment.cpp +27 -27
- data/ext/libsass/src/environment.hpp +24 -24
- data/ext/libsass/src/error_handling.cpp +42 -42
- data/ext/libsass/src/error_handling.hpp +38 -50
- data/ext/libsass/src/eval.cpp +138 -132
- data/ext/libsass/src/eval.hpp +17 -17
- data/ext/libsass/src/eval_selectors.cpp +3 -3
- data/ext/libsass/src/expand.cpp +70 -64
- data/ext/libsass/src/expand.hpp +12 -12
- data/ext/libsass/src/extender.cpp +55 -53
- data/ext/libsass/src/extender.hpp +14 -14
- data/ext/libsass/src/file.cpp +66 -58
- data/ext/libsass/src/file.hpp +23 -25
- data/ext/libsass/src/fn_colors.cpp +9 -9
- data/ext/libsass/src/fn_lists.cpp +18 -18
- data/ext/libsass/src/fn_maps.cpp +3 -3
- data/ext/libsass/src/fn_miscs.cpp +15 -15
- data/ext/libsass/src/fn_numbers.cpp +7 -7
- data/ext/libsass/src/fn_selectors.cpp +8 -8
- data/ext/libsass/src/fn_strings.cpp +34 -22
- data/ext/libsass/src/fn_utils.cpp +29 -26
- data/ext/libsass/src/fn_utils.hpp +10 -10
- data/ext/libsass/src/inspect.cpp +35 -34
- data/ext/libsass/src/inspect.hpp +21 -21
- data/ext/libsass/src/lexer.cpp +3 -1
- data/ext/libsass/src/listize.cpp +2 -2
- data/ext/libsass/src/mapping.hpp +1 -0
- data/ext/libsass/src/memory.hpp +12 -0
- data/ext/libsass/src/memory/allocator.cpp +48 -0
- data/ext/libsass/src/memory/allocator.hpp +138 -0
- data/ext/libsass/src/memory/config.hpp +20 -0
- data/ext/libsass/src/memory/memory_pool.hpp +186 -0
- data/ext/libsass/src/memory/{SharedPtr.cpp → shared_ptr.cpp} +2 -2
- data/ext/libsass/src/memory/{SharedPtr.hpp → shared_ptr.hpp} +18 -6
- data/ext/libsass/src/operation.hpp +44 -44
- data/ext/libsass/src/operators.cpp +18 -18
- data/ext/libsass/src/operators.hpp +11 -11
- data/ext/libsass/src/ordered_map.hpp +18 -18
- data/ext/libsass/src/output.cpp +16 -16
- data/ext/libsass/src/output.hpp +5 -5
- data/ext/libsass/src/parser.cpp +327 -345
- data/ext/libsass/src/parser.hpp +77 -87
- data/ext/libsass/src/parser_selectors.cpp +6 -6
- data/ext/libsass/src/permutate.hpp +39 -15
- data/ext/libsass/src/plugins.cpp +7 -7
- data/ext/libsass/src/plugins.hpp +8 -8
- data/ext/libsass/src/position.cpp +7 -26
- data/ext/libsass/src/position.hpp +44 -21
- data/ext/libsass/src/remove_placeholders.cpp +4 -4
- data/ext/libsass/src/remove_placeholders.hpp +3 -3
- data/ext/libsass/src/sass.cpp +16 -15
- data/ext/libsass/src/sass.hpp +9 -5
- data/ext/libsass/src/sass_context.cpp +52 -34
- data/ext/libsass/src/sass_values.cpp +8 -10
- data/ext/libsass/src/settings.hpp +19 -0
- data/ext/libsass/src/source.cpp +69 -0
- data/ext/libsass/src/source.hpp +95 -0
- data/ext/libsass/src/source_data.hpp +32 -0
- data/ext/libsass/src/source_map.cpp +22 -18
- data/ext/libsass/src/source_map.hpp +12 -9
- data/ext/libsass/src/units.cpp +19 -19
- data/ext/libsass/src/units.hpp +8 -8
- data/ext/libsass/src/utf8_string.cpp +9 -10
- data/ext/libsass/src/utf8_string.hpp +7 -6
- data/ext/libsass/src/util.cpp +38 -38
- data/ext/libsass/src/util.hpp +18 -18
- data/ext/libsass/src/util_string.cpp +13 -13
- data/ext/libsass/src/util_string.hpp +9 -8
- data/ext/libsass/src/values.cpp +12 -12
- data/lib/sassc/native.rb +3 -5
- data/lib/sassc/version.rb +1 -1
- data/test/native_test.rb +4 -4
- metadata +14 -5
- data/lib/sassc/native/lib_c.rb +0 -21
| @@ -10,12 +10,13 @@ namespace Sass { | |
| 10 10 |  | 
| 11 11 | 
             
              Definition* make_native_function(Signature sig, Native_Function func, Context& ctx)
         | 
| 12 12 | 
             
              {
         | 
| 13 | 
            -
                 | 
| 13 | 
            +
                SourceFile* source = SASS_MEMORY_NEW(SourceFile, "[built-in function]", sig, std::string::npos);
         | 
| 14 | 
            +
                Parser sig_parser(source, ctx, ctx.traces);
         | 
| 14 15 | 
             
                sig_parser.lex<Prelexer::identifier>();
         | 
| 15 | 
            -
                 | 
| 16 | 
            +
                sass::string name(Util::normalize_underscores(sig_parser.lexed));
         | 
| 16 17 | 
             
                Parameters_Obj params = sig_parser.parse_parameters();
         | 
| 17 18 | 
             
                return SASS_MEMORY_NEW(Definition,
         | 
| 18 | 
            -
                                       | 
| 19 | 
            +
                                      SourceSpan(source),
         | 
| 19 20 | 
             
                                      sig,
         | 
| 20 21 | 
             
                                      name,
         | 
| 21 22 | 
             
                                      params,
         | 
| @@ -26,19 +27,19 @@ namespace Sass { | |
| 26 27 | 
             
              Definition* make_c_function(Sass_Function_Entry c_func, Context& ctx)
         | 
| 27 28 | 
             
              {
         | 
| 28 29 | 
             
                using namespace Prelexer;
         | 
| 29 | 
            -
             | 
| 30 30 | 
             
                const char* sig = sass_function_get_signature(c_func);
         | 
| 31 | 
            -
                 | 
| 31 | 
            +
                SourceFile* source = SASS_MEMORY_NEW(SourceFile, "[c function]", sig, std::string::npos);
         | 
| 32 | 
            +
                Parser sig_parser(source, ctx, ctx.traces);
         | 
| 32 33 | 
             
                // allow to overload generic callback plus @warn, @error and @debug with custom functions
         | 
| 33 34 | 
             
                sig_parser.lex < alternatives < identifier, exactly <'*'>,
         | 
| 34 35 | 
             
                                                exactly < Constants::warn_kwd >,
         | 
| 35 36 | 
             
                                                exactly < Constants::error_kwd >,
         | 
| 36 37 | 
             
                                                exactly < Constants::debug_kwd >
         | 
| 37 38 | 
             
                              >              >();
         | 
| 38 | 
            -
                 | 
| 39 | 
            +
                sass::string name(Util::normalize_underscores(sig_parser.lexed));
         | 
| 39 40 | 
             
                Parameters_Obj params = sig_parser.parse_parameters();
         | 
| 40 41 | 
             
                return SASS_MEMORY_NEW(Definition,
         | 
| 41 | 
            -
                                       | 
| 42 | 
            +
                                      SourceSpan(source),
         | 
| 42 43 | 
             
                                      sig,
         | 
| 43 44 | 
             
                                      name,
         | 
| 44 45 | 
             
                                      params,
         | 
| @@ -47,13 +48,13 @@ namespace Sass { | |
| 47 48 |  | 
| 48 49 | 
             
              namespace Functions {
         | 
| 49 50 |  | 
| 50 | 
            -
                 | 
| 51 | 
            +
                sass::string function_name(Signature sig)
         | 
| 51 52 | 
             
                {
         | 
| 52 | 
            -
                   | 
| 53 | 
            +
                  sass::string str(sig);
         | 
| 53 54 | 
             
                  return str.substr(0, str.find('('));
         | 
| 54 55 | 
             
                }
         | 
| 55 56 |  | 
| 56 | 
            -
                Map* get_arg_m(const  | 
| 57 | 
            +
                Map* get_arg_m(const sass::string& argname, Env& env, Signature sig, SourceSpan pstate, Backtraces traces)
         | 
| 57 58 | 
             
                {
         | 
| 58 59 | 
             
                  AST_Node* value = env[argname];
         | 
| 59 60 | 
             
                  if (Map* map = Cast<Map>(value)) return map;
         | 
| @@ -64,14 +65,14 @@ namespace Sass { | |
| 64 65 | 
             
                  return get_arg<Map>(argname, env, sig, pstate, traces);
         | 
| 65 66 | 
             
                }
         | 
| 66 67 |  | 
| 67 | 
            -
                double get_arg_r(const  | 
| 68 | 
            +
                double get_arg_r(const sass::string& argname, Env& env, Signature sig, SourceSpan pstate, Backtraces traces, double lo, double hi)
         | 
| 68 69 | 
             
                {
         | 
| 69 70 | 
             
                  Number* val = get_arg<Number>(argname, env, sig, pstate, traces);
         | 
| 70 71 | 
             
                  Number tmpnr(val);
         | 
| 71 72 | 
             
                  tmpnr.reduce();
         | 
| 72 73 | 
             
                  double v = tmpnr.value();
         | 
| 73 74 | 
             
                  if (!(lo <= v && v <= hi)) {
         | 
| 74 | 
            -
                     | 
| 75 | 
            +
                    sass::ostream msg;
         | 
| 75 76 | 
             
                    msg << "argument `" << argname << "` of `" << sig << "` must be between ";
         | 
| 76 77 | 
             
                    msg << lo << " and " << hi;
         | 
| 77 78 | 
             
                    error(msg.str(), pstate, traces);
         | 
| @@ -79,7 +80,7 @@ namespace Sass { | |
| 79 80 | 
             
                  return v;
         | 
| 80 81 | 
             
                }
         | 
| 81 82 |  | 
| 82 | 
            -
                Number* get_arg_n(const  | 
| 83 | 
            +
                Number* get_arg_n(const sass::string& argname, Env& env, Signature sig, SourceSpan pstate, Backtraces traces)
         | 
| 83 84 | 
             
                {
         | 
| 84 85 | 
             
                  Number* val = get_arg<Number>(argname, env, sig, pstate, traces);
         | 
| 85 86 | 
             
                  val = SASS_MEMORY_COPY(val);
         | 
| @@ -87,7 +88,7 @@ namespace Sass { | |
| 87 88 | 
             
                  return val;
         | 
| 88 89 | 
             
                }
         | 
| 89 90 |  | 
| 90 | 
            -
                double get_arg_val(const  | 
| 91 | 
            +
                double get_arg_val(const sass::string& argname, Env& env, Signature sig, SourceSpan pstate, Backtraces traces)
         | 
| 91 92 | 
             
                {
         | 
| 92 93 | 
             
                  Number* val = get_arg<Number>(argname, env, sig, pstate, traces);
         | 
| 93 94 | 
             
                  Number tmpnr(val);
         | 
| @@ -95,7 +96,7 @@ namespace Sass { | |
| 95 96 | 
             
                  return tmpnr.value();
         | 
| 96 97 | 
             
                }
         | 
| 97 98 |  | 
| 98 | 
            -
                double color_num(const  | 
| 99 | 
            +
                double color_num(const sass::string& argname, Env& env, Signature sig, SourceSpan pstate, Backtraces traces)
         | 
| 99 100 | 
             
                {
         | 
| 100 101 | 
             
                  Number* val = get_arg<Number>(argname, env, sig, pstate, traces);
         | 
| 101 102 | 
             
                  Number tmpnr(val);
         | 
| @@ -107,7 +108,7 @@ namespace Sass { | |
| 107 108 | 
             
                  }
         | 
| 108 109 | 
             
                }
         | 
| 109 110 |  | 
| 110 | 
            -
                double alpha_num(const  | 
| 111 | 
            +
                double alpha_num(const sass::string& argname, Env& env, Signature sig, SourceSpan pstate, Backtraces traces) {
         | 
| 111 112 | 
             
                  Number* val = get_arg<Number>(argname, env, sig, pstate, traces);
         | 
| 112 113 | 
             
                  Number tmpnr(val);
         | 
| 113 114 | 
             
                  tmpnr.reduce();
         | 
| @@ -118,10 +119,10 @@ namespace Sass { | |
| 118 119 | 
             
                  }
         | 
| 119 120 | 
             
                }
         | 
| 120 121 |  | 
| 121 | 
            -
                SelectorListObj get_arg_sels(const  | 
| 122 | 
            -
                   | 
| 122 | 
            +
                SelectorListObj get_arg_sels(const sass::string& argname, Env& env, Signature sig, SourceSpan pstate, Backtraces traces, Context& ctx) {
         | 
| 123 | 
            +
                  ExpressionObj exp = ARG(argname, Expression);
         | 
| 123 124 | 
             
                  if (exp->concrete_type() == Expression::NULL_VAL) {
         | 
| 124 | 
            -
                     | 
| 125 | 
            +
                    sass::ostream msg;
         | 
| 125 126 | 
             
                    msg << argname << ": null is not a valid selector: it must be a string,\n";
         | 
| 126 127 | 
             
                    msg << "a list of strings, or a list of lists of strings for `" << function_name(sig) << "'";
         | 
| 127 128 | 
             
                    error(msg.str(), exp->pstate(), traces);
         | 
| @@ -129,22 +130,24 @@ namespace Sass { | |
| 129 130 | 
             
                  if (String_Constant* str = Cast<String_Constant>(exp)) {
         | 
| 130 131 | 
             
                    str->quote_mark(0);
         | 
| 131 132 | 
             
                  }
         | 
| 132 | 
            -
                   | 
| 133 | 
            -
                   | 
| 133 | 
            +
                  sass::string exp_src = exp->to_string(ctx.c_options);
         | 
| 134 | 
            +
                  ItplFile* source = SASS_MEMORY_NEW(ItplFile, exp_src.c_str(), exp->pstate());
         | 
| 135 | 
            +
                  return Parser::parse_selector(source, ctx, traces, false);
         | 
| 134 136 | 
             
                }
         | 
| 135 137 |  | 
| 136 | 
            -
                CompoundSelectorObj get_arg_sel(const  | 
| 137 | 
            -
                   | 
| 138 | 
            +
                CompoundSelectorObj get_arg_sel(const sass::string& argname, Env& env, Signature sig, SourceSpan pstate, Backtraces traces, Context& ctx) {
         | 
| 139 | 
            +
                  ExpressionObj exp = ARG(argname, Expression);
         | 
| 138 140 | 
             
                  if (exp->concrete_type() == Expression::NULL_VAL) {
         | 
| 139 | 
            -
                     | 
| 141 | 
            +
                    sass::ostream msg;
         | 
| 140 142 | 
             
                    msg << argname << ": null is not a string for `" << function_name(sig) << "'";
         | 
| 141 143 | 
             
                    error(msg.str(), exp->pstate(), traces);
         | 
| 142 144 | 
             
                  }
         | 
| 143 145 | 
             
                  if (String_Constant* str = Cast<String_Constant>(exp)) {
         | 
| 144 146 | 
             
                    str->quote_mark(0);
         | 
| 145 147 | 
             
                  }
         | 
| 146 | 
            -
                   | 
| 147 | 
            -
                   | 
| 148 | 
            +
                  sass::string exp_src = exp->to_string(ctx.c_options);
         | 
| 149 | 
            +
                  ItplFile* source = SASS_MEMORY_NEW(ItplFile, exp_src.c_str(), exp->pstate());
         | 
| 150 | 
            +
                  SelectorListObj sel_list = Parser::parse_selector(source, ctx, traces, false);
         | 
| 148 151 | 
             
                  if (sel_list->length() == 0) return {};
         | 
| 149 152 | 
             
                  return sel_list->first()->first();
         | 
| 150 153 | 
             
                }
         | 
| @@ -18,7 +18,7 @@ namespace Sass { | |
| 18 18 | 
             
                Env& d_env, \
         | 
| 19 19 | 
             
                Context& ctx, \
         | 
| 20 20 | 
             
                Signature sig, \
         | 
| 21 | 
            -
                 | 
| 21 | 
            +
                SourceSpan pstate, \
         | 
| 22 22 | 
             
                Backtraces& traces, \
         | 
| 23 23 | 
             
                SelectorStack selector_stack, \
         | 
| 24 24 | 
             
                SelectorStack original_stack \
         | 
| @@ -37,7 +37,7 @@ namespace Sass { | |
| 37 37 | 
             
              namespace Functions {
         | 
| 38 38 |  | 
| 39 39 | 
             
                template <typename T>
         | 
| 40 | 
            -
                T* get_arg(const  | 
| 40 | 
            +
                T* get_arg(const sass::string& argname, Env& env, Signature sig, SourceSpan pstate, Backtraces traces)
         | 
| 41 41 | 
             
                {
         | 
| 42 42 | 
             
                  T* val = Cast<T>(env[argname]);
         | 
| 43 43 | 
             
                  if (!val) {
         | 
| @@ -46,14 +46,14 @@ namespace Sass { | |
| 46 46 | 
             
                  return val;
         | 
| 47 47 | 
             
                }
         | 
| 48 48 |  | 
| 49 | 
            -
                Map* get_arg_m(const  | 
| 50 | 
            -
                Number* get_arg_n(const  | 
| 51 | 
            -
                double alpha_num(const  | 
| 52 | 
            -
                double color_num(const  | 
| 53 | 
            -
                double get_arg_r(const  | 
| 54 | 
            -
                double get_arg_val(const  | 
| 55 | 
            -
                SelectorListObj get_arg_sels(const  | 
| 56 | 
            -
                CompoundSelectorObj get_arg_sel(const  | 
| 49 | 
            +
                Map* get_arg_m(const sass::string& argname, Env& env, Signature sig, SourceSpan pstate, Backtraces traces); // maps only
         | 
| 50 | 
            +
                Number* get_arg_n(const sass::string& argname, Env& env, Signature sig, SourceSpan pstate, Backtraces traces); // numbers only
         | 
| 51 | 
            +
                double alpha_num(const sass::string& argname, Env& env, Signature sig, SourceSpan pstate, Backtraces traces); // colors only
         | 
| 52 | 
            +
                double color_num(const sass::string& argname, Env& env, Signature sig, SourceSpan pstate, Backtraces traces); // colors only
         | 
| 53 | 
            +
                double get_arg_r(const sass::string& argname, Env& env, Signature sig, SourceSpan pstate, Backtraces traces, double lo, double hi); // colors only
         | 
| 54 | 
            +
                double get_arg_val(const sass::string& argname, Env& env, Signature sig, SourceSpan pstate, Backtraces traces); // shared
         | 
| 55 | 
            +
                SelectorListObj get_arg_sels(const sass::string& argname, Env& env, Signature sig, SourceSpan pstate, Backtraces traces, Context& ctx); // selectors only
         | 
| 56 | 
            +
                CompoundSelectorObj get_arg_sel(const sass::string& argname, Env& env, Signature sig, SourceSpan pstate, Backtraces traces, Context& ctx); // selectors only
         | 
| 57 57 |  | 
| 58 58 | 
             
              }
         | 
| 59 59 |  | 
    
        data/ext/libsass/src/inspect.cpp
    CHANGED
    
    | @@ -42,7 +42,7 @@ namespace Sass { | |
| 42 42 |  | 
| 43 43 | 
             
              }
         | 
| 44 44 |  | 
| 45 | 
            -
              void Inspect::operator()( | 
| 45 | 
            +
              void Inspect::operator()(StyleRule* ruleset)
         | 
| 46 46 | 
             
              {
         | 
| 47 47 | 
             
                if (ruleset->selector()) {
         | 
| 48 48 | 
             
                  ruleset->selector()->perform(this);
         | 
| @@ -124,7 +124,7 @@ namespace Sass { | |
| 124 124 | 
             
                }
         | 
| 125 125 | 
             
              }
         | 
| 126 126 |  | 
| 127 | 
            -
              void Inspect::operator()( | 
| 127 | 
            +
              void Inspect::operator()(SupportsRule* feature_block)
         | 
| 128 128 | 
             
              {
         | 
| 129 129 | 
             
                append_indentation();
         | 
| 130 130 | 
             
                append_token("@supports", feature_block);
         | 
| @@ -133,7 +133,7 @@ namespace Sass { | |
| 133 133 | 
             
                feature_block->block()->perform(this);
         | 
| 134 134 | 
             
              }
         | 
| 135 135 |  | 
| 136 | 
            -
              void Inspect::operator()( | 
| 136 | 
            +
              void Inspect::operator()(AtRootRule* at_root_block)
         | 
| 137 137 | 
             
              {
         | 
| 138 138 | 
             
                append_indentation();
         | 
| 139 139 | 
             
                append_token("@at-root ", at_root_block);
         | 
| @@ -142,7 +142,7 @@ namespace Sass { | |
| 142 142 | 
             
                if(at_root_block->block()) at_root_block->block()->perform(this);
         | 
| 143 143 | 
             
              }
         | 
| 144 144 |  | 
| 145 | 
            -
              void Inspect::operator()( | 
| 145 | 
            +
              void Inspect::operator()(AtRule* at_rule)
         | 
| 146 146 | 
             
              {
         | 
| 147 147 | 
             
                append_indentation();
         | 
| 148 148 | 
             
                append_token(at_rule->keyword(), at_rule);
         | 
| @@ -180,7 +180,7 @@ namespace Sass { | |
| 180 180 | 
             
                append_colon_separator();
         | 
| 181 181 |  | 
| 182 182 | 
             
                if (dec->value()->concrete_type() == Expression::SELECTOR) {
         | 
| 183 | 
            -
                   | 
| 183 | 
            +
                  ExpressionObj ls = Listize::perform(dec->value());
         | 
| 184 184 | 
             
                  ls->perform(this);
         | 
| 185 185 | 
             
                } else {
         | 
| 186 186 | 
             
                  dec->value()->perform(this);
         | 
| @@ -248,7 +248,7 @@ namespace Sass { | |
| 248 248 | 
             
                append_delimiter();
         | 
| 249 249 | 
             
              }
         | 
| 250 250 |  | 
| 251 | 
            -
              void Inspect::operator()( | 
| 251 | 
            +
              void Inspect::operator()(WarningRule* warning)
         | 
| 252 252 | 
             
              {
         | 
| 253 253 | 
             
                append_indentation();
         | 
| 254 254 | 
             
                append_token("@warn", warning);
         | 
| @@ -257,7 +257,7 @@ namespace Sass { | |
| 257 257 | 
             
                append_delimiter();
         | 
| 258 258 | 
             
              }
         | 
| 259 259 |  | 
| 260 | 
            -
              void Inspect::operator()( | 
| 260 | 
            +
              void Inspect::operator()(ErrorRule* error)
         | 
| 261 261 | 
             
              {
         | 
| 262 262 | 
             
                append_indentation();
         | 
| 263 263 | 
             
                append_token("@error", error);
         | 
| @@ -266,7 +266,7 @@ namespace Sass { | |
| 266 266 | 
             
                append_delimiter();
         | 
| 267 267 | 
             
              }
         | 
| 268 268 |  | 
| 269 | 
            -
              void Inspect::operator()( | 
| 269 | 
            +
              void Inspect::operator()(DebugRule* debug)
         | 
| 270 270 | 
             
              {
         | 
| 271 271 | 
             
                append_indentation();
         | 
| 272 272 | 
             
                append_token("@debug", debug);
         | 
| @@ -297,7 +297,7 @@ namespace Sass { | |
| 297 297 | 
             
                }
         | 
| 298 298 | 
             
              }
         | 
| 299 299 |  | 
| 300 | 
            -
              void Inspect::operator()( | 
| 300 | 
            +
              void Inspect::operator()(ForRule* loop)
         | 
| 301 301 | 
             
              {
         | 
| 302 302 | 
             
                append_indentation();
         | 
| 303 303 | 
             
                append_token("@for", loop);
         | 
| @@ -310,7 +310,7 @@ namespace Sass { | |
| 310 310 | 
             
                loop->block()->perform(this);
         | 
| 311 311 | 
             
              }
         | 
| 312 312 |  | 
| 313 | 
            -
              void Inspect::operator()( | 
| 313 | 
            +
              void Inspect::operator()(EachRule* loop)
         | 
| 314 314 | 
             
              {
         | 
| 315 315 | 
             
                append_indentation();
         | 
| 316 316 | 
             
                append_token("@each", loop);
         | 
| @@ -325,7 +325,7 @@ namespace Sass { | |
| 325 325 | 
             
                loop->block()->perform(this);
         | 
| 326 326 | 
             
              }
         | 
| 327 327 |  | 
| 328 | 
            -
              void Inspect::operator()( | 
| 328 | 
            +
              void Inspect::operator()(WhileRule* loop)
         | 
| 329 329 | 
             
              {
         | 
| 330 330 | 
             
                append_indentation();
         | 
| 331 331 | 
             
                append_token("@while", loop);
         | 
| @@ -412,11 +412,11 @@ namespace Sass { | |
| 412 412 | 
             
                append_string(")");
         | 
| 413 413 | 
             
              }
         | 
| 414 414 |  | 
| 415 | 
            -
               | 
| 415 | 
            +
              sass::string Inspect::lbracket(List* list) {
         | 
| 416 416 | 
             
                return list->is_bracketed() ? "[" : "(";
         | 
| 417 417 | 
             
              }
         | 
| 418 418 |  | 
| 419 | 
            -
               | 
| 419 | 
            +
              sass::string Inspect::rbracket(List* list) {
         | 
| 420 420 | 
             
                return list->is_bracketed() ? "]" : ")";
         | 
| 421 421 | 
             
              }
         | 
| 422 422 |  | 
| @@ -427,7 +427,7 @@ namespace Sass { | |
| 427 427 | 
             
                  append_string(rbracket(list));
         | 
| 428 428 | 
             
                  return;
         | 
| 429 429 | 
             
                }
         | 
| 430 | 
            -
                 | 
| 430 | 
            +
                sass::string sep(list->separator() == SASS_SPACE ? " " : ",");
         | 
| 431 431 | 
             
                if ((output_style() != COMPRESSED) && sep == ",") sep += " ";
         | 
| 432 432 | 
             
                else if (in_media_block && sep != " ") sep += " "; // verified
         | 
| 433 433 | 
             
                if (list->empty()) return;
         | 
| @@ -461,7 +461,7 @@ namespace Sass { | |
| 461 461 | 
             
                for (size_t i = 0, L = list->size(); i < L; ++i) {
         | 
| 462 462 | 
             
                  if (list->separator() == SASS_HASH)
         | 
| 463 463 | 
             
                  { sep[0] = i % 2 ? ':' : ','; }
         | 
| 464 | 
            -
                   | 
| 464 | 
            +
                  ExpressionObj list_item = list->at(i);
         | 
| 465 465 | 
             
                  if (output_style() != TO_SASS) {
         | 
| 466 466 | 
             
                    if (list_item->is_invisible()) {
         | 
| 467 467 | 
             
                      // this fixes an issue with "" in a list
         | 
| @@ -570,11 +570,11 @@ namespace Sass { | |
| 570 570 | 
             
                // reduce units
         | 
| 571 571 | 
             
                n->reduce();
         | 
| 572 572 |  | 
| 573 | 
            -
                 | 
| 573 | 
            +
                sass::ostream ss;
         | 
| 574 574 | 
             
                ss.precision(opt.precision);
         | 
| 575 575 | 
             
                ss << std::fixed << n->value();
         | 
| 576 576 |  | 
| 577 | 
            -
                 | 
| 577 | 
            +
                sass::string res = ss.str();
         | 
| 578 578 | 
             
                size_t s = res.length();
         | 
| 579 579 |  | 
| 580 580 | 
             
                // delete trailing zeros
         | 
| @@ -627,14 +627,14 @@ namespace Sass { | |
| 627 627 | 
             
              void Inspect::operator()(Color_RGBA* c)
         | 
| 628 628 | 
             
              {
         | 
| 629 629 | 
             
                // output the final token
         | 
| 630 | 
            -
                 | 
| 630 | 
            +
                sass::ostream ss;
         | 
| 631 631 |  | 
| 632 632 | 
             
                // original color name
         | 
| 633 633 | 
             
                // maybe an unknown token
         | 
| 634 | 
            -
                 | 
| 634 | 
            +
                sass::string name = c->disp();
         | 
| 635 635 |  | 
| 636 636 | 
             
                // resolved color
         | 
| 637 | 
            -
                 | 
| 637 | 
            +
                sass::string res_name = name;
         | 
| 638 638 |  | 
| 639 639 | 
             
                double r = Sass::round(cap_channel<0xff>(c->r()), opt.precision);
         | 
| 640 640 | 
             
                double g = Sass::round(cap_channel<0xff>(c->g()), opt.precision);
         | 
| @@ -656,7 +656,7 @@ namespace Sass { | |
| 656 656 | 
             
                    res_name = color_to_name(numval);
         | 
| 657 657 | 
             
                }
         | 
| 658 658 |  | 
| 659 | 
            -
                 | 
| 659 | 
            +
                sass::ostream hexlet;
         | 
| 660 660 | 
             
                // dart sass compressed all colors in regular css always
         | 
| 661 661 | 
             
                // ruby sass and libsass does it only when not delayed
         | 
| 662 662 | 
             
                // since color math is going to be removed, this can go too
         | 
| @@ -757,18 +757,18 @@ namespace Sass { | |
| 757 757 | 
             
                append_token(w->message(), w);
         | 
| 758 758 | 
             
              }
         | 
| 759 759 |  | 
| 760 | 
            -
              void Inspect::operator()( | 
| 760 | 
            +
              void Inspect::operator()(SupportsOperation* so)
         | 
| 761 761 | 
             
              {
         | 
| 762 762 |  | 
| 763 763 | 
             
                if (so->needs_parens(so->left())) append_string("(");
         | 
| 764 764 | 
             
                so->left()->perform(this);
         | 
| 765 765 | 
             
                if (so->needs_parens(so->left())) append_string(")");
         | 
| 766 766 |  | 
| 767 | 
            -
                if (so->operand() ==  | 
| 767 | 
            +
                if (so->operand() == SupportsOperation::AND) {
         | 
| 768 768 | 
             
                  append_mandatory_space();
         | 
| 769 769 | 
             
                  append_token("and", so);
         | 
| 770 770 | 
             
                  append_mandatory_space();
         | 
| 771 | 
            -
                } else if (so->operand() ==  | 
| 771 | 
            +
                } else if (so->operand() == SupportsOperation::OR) {
         | 
| 772 772 | 
             
                  append_mandatory_space();
         | 
| 773 773 | 
             
                  append_token("or", so);
         | 
| 774 774 | 
             
                  append_mandatory_space();
         | 
| @@ -779,7 +779,7 @@ namespace Sass { | |
| 779 779 | 
             
                if (so->needs_parens(so->right())) append_string(")");
         | 
| 780 780 | 
             
              }
         | 
| 781 781 |  | 
| 782 | 
            -
              void Inspect::operator()( | 
| 782 | 
            +
              void Inspect::operator()(SupportsNegation* sn)
         | 
| 783 783 | 
             
              {
         | 
| 784 784 | 
             
                append_token("not", sn);
         | 
| 785 785 | 
             
                append_mandatory_space();
         | 
| @@ -788,7 +788,7 @@ namespace Sass { | |
| 788 788 | 
             
                if (sn->needs_parens(sn->condition())) append_string(")");
         | 
| 789 789 | 
             
              }
         | 
| 790 790 |  | 
| 791 | 
            -
              void Inspect::operator()( | 
| 791 | 
            +
              void Inspect::operator()(SupportsDeclaration* sd)
         | 
| 792 792 | 
             
              {
         | 
| 793 793 | 
             
                append_string("(");
         | 
| 794 794 | 
             
                sd->feature()->perform(this);
         | 
| @@ -934,28 +934,28 @@ namespace Sass { | |
| 934 934 | 
             
                append_string("&");
         | 
| 935 935 | 
             
              }
         | 
| 936 936 |  | 
| 937 | 
            -
              void Inspect::operator()( | 
| 937 | 
            +
              void Inspect::operator()(PlaceholderSelector* s)
         | 
| 938 938 | 
             
              {
         | 
| 939 939 | 
             
                append_token(s->name(), s);
         | 
| 940 940 |  | 
| 941 941 | 
             
              }
         | 
| 942 942 |  | 
| 943 | 
            -
              void Inspect::operator()( | 
| 943 | 
            +
              void Inspect::operator()(TypeSelector* s)
         | 
| 944 944 | 
             
              {
         | 
| 945 945 | 
             
                append_token(s->ns_name(), s);
         | 
| 946 946 | 
             
              }
         | 
| 947 947 |  | 
| 948 | 
            -
              void Inspect::operator()( | 
| 948 | 
            +
              void Inspect::operator()(ClassSelector* s)
         | 
| 949 949 | 
             
              {
         | 
| 950 950 | 
             
                append_token(s->ns_name(), s);
         | 
| 951 951 | 
             
              }
         | 
| 952 952 |  | 
| 953 | 
            -
              void Inspect::operator()( | 
| 953 | 
            +
              void Inspect::operator()(IDSelector* s)
         | 
| 954 954 | 
             
              {
         | 
| 955 955 | 
             
                append_token(s->ns_name(), s);
         | 
| 956 956 | 
             
              }
         | 
| 957 957 |  | 
| 958 | 
            -
              void Inspect::operator()( | 
| 958 | 
            +
              void Inspect::operator()(AttributeSelector* s)
         | 
| 959 959 | 
             
              {
         | 
| 960 960 | 
             
                append_string("[");
         | 
| 961 961 | 
             
                add_open_mapping(s);
         | 
| @@ -974,7 +974,7 @@ namespace Sass { | |
| 974 974 | 
             
                append_string("]");
         | 
| 975 975 | 
             
              }
         | 
| 976 976 |  | 
| 977 | 
            -
              void Inspect::operator()( | 
| 977 | 
            +
              void Inspect::operator()(PseudoSelector* s)
         | 
| 978 978 | 
             
              {
         | 
| 979 979 |  | 
| 980 980 | 
             
                if (s->name() != "") {
         | 
| @@ -1033,6 +1033,7 @@ namespace Sass { | |
| 1033 1033 |  | 
| 1034 1034 | 
             
                  if (!in_wrapped && i == 0) append_indentation();
         | 
| 1035 1035 | 
             
                  if ((*g)[i] == nullptr) continue;
         | 
| 1036 | 
            +
                  if (g->at(i)->length() == 0) continue;
         | 
| 1036 1037 | 
             
                  schedule_mapping(g->at(i)->last());
         | 
| 1037 1038 | 
             
                  // add_open_mapping((*g)[i]->last());
         | 
| 1038 1039 | 
             
                  (*g)[i]->perform(this);
         | 
| @@ -1066,8 +1067,7 @@ namespace Sass { | |
| 1066 1067 | 
             
                const SelectorComponent* prev = nullptr;
         | 
| 1067 1068 | 
             
                for (auto& item : sel->elements()) {
         | 
| 1068 1069 | 
             
                  if (prev != nullptr) {
         | 
| 1069 | 
            -
                    if ( | 
| 1070 | 
            -
                        typeid(*prev) == typeid(SelectorCombinator)) {
         | 
| 1070 | 
            +
                    if (item->getCombinator() || prev->getCombinator()) {
         | 
| 1071 1071 | 
             
                      append_optional_space();
         | 
| 1072 1072 | 
             
                    } else {
         | 
| 1073 1073 | 
             
                      append_mandatory_space();
         | 
| @@ -1091,6 +1091,7 @@ namespace Sass { | |
| 1091 1091 | 
             
                if (sel->hasRealParent()) {
         | 
| 1092 1092 | 
             
                  append_string("&");
         | 
| 1093 1093 | 
             
                }
         | 
| 1094 | 
            +
                sel->sortChildren();
         | 
| 1094 1095 | 
             
                for (auto& item : sel->elements()) {
         | 
| 1095 1096 | 
             
                  item->perform(this);
         | 
| 1096 1097 | 
             
                }
         |