sassc 2.2.1 → 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.
Files changed (147) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +2 -0
  3. data/CHANGELOG.md +18 -0
  4. data/Rakefile +1 -3
  5. data/ext/extconf.rb +13 -5
  6. data/ext/libsass/VERSION +1 -1
  7. data/ext/libsass/include/sass/base.h +2 -1
  8. data/ext/libsass/include/sass/context.h +4 -0
  9. data/ext/libsass/src/MurmurHash2.hpp +91 -0
  10. data/ext/libsass/src/ast.cpp +158 -168
  11. data/ext/libsass/src/ast.hpp +389 -230
  12. data/ext/libsass/src/ast_def_macros.hpp +18 -10
  13. data/ext/libsass/src/ast_fwd_decl.cpp +4 -3
  14. data/ext/libsass/src/ast_fwd_decl.hpp +98 -165
  15. data/ext/libsass/src/ast_helpers.hpp +292 -0
  16. data/ext/libsass/src/ast_sel_cmp.cpp +219 -732
  17. data/ext/libsass/src/ast_sel_super.cpp +539 -0
  18. data/ext/libsass/src/ast_sel_unify.cpp +207 -212
  19. data/ext/libsass/src/ast_sel_weave.cpp +616 -0
  20. data/ext/libsass/src/ast_selectors.cpp +594 -1026
  21. data/ext/libsass/src/ast_selectors.hpp +339 -385
  22. data/ext/libsass/src/ast_supports.cpp +36 -52
  23. data/ext/libsass/src/ast_supports.hpp +29 -29
  24. data/ext/libsass/src/ast_values.cpp +271 -84
  25. data/ext/libsass/src/ast_values.hpp +116 -107
  26. data/ext/libsass/src/backtrace.cpp +9 -9
  27. data/ext/libsass/src/backtrace.hpp +5 -5
  28. data/ext/libsass/src/base64vlq.cpp +2 -2
  29. data/ext/libsass/src/base64vlq.hpp +1 -1
  30. data/ext/libsass/src/bind.cpp +18 -18
  31. data/ext/libsass/src/bind.hpp +1 -1
  32. data/ext/libsass/src/c2ast.cpp +3 -3
  33. data/ext/libsass/src/c2ast.hpp +1 -1
  34. data/ext/libsass/src/cencode.c +4 -6
  35. data/ext/libsass/src/check_nesting.cpp +40 -41
  36. data/ext/libsass/src/check_nesting.hpp +6 -2
  37. data/ext/libsass/src/color_maps.cpp +14 -13
  38. data/ext/libsass/src/color_maps.hpp +1 -9
  39. data/ext/libsass/src/constants.cpp +5 -0
  40. data/ext/libsass/src/constants.hpp +6 -0
  41. data/ext/libsass/src/context.cpp +92 -119
  42. data/ext/libsass/src/context.hpp +41 -53
  43. data/ext/libsass/src/cssize.cpp +66 -149
  44. data/ext/libsass/src/cssize.hpp +17 -23
  45. data/ext/libsass/src/dart_helpers.hpp +199 -0
  46. data/ext/libsass/src/debugger.hpp +451 -295
  47. data/ext/libsass/src/emitter.cpp +15 -16
  48. data/ext/libsass/src/emitter.hpp +10 -12
  49. data/ext/libsass/src/environment.cpp +27 -27
  50. data/ext/libsass/src/environment.hpp +29 -24
  51. data/ext/libsass/src/error_handling.cpp +62 -41
  52. data/ext/libsass/src/error_handling.hpp +61 -51
  53. data/ext/libsass/src/eval.cpp +167 -281
  54. data/ext/libsass/src/eval.hpp +27 -29
  55. data/ext/libsass/src/eval_selectors.cpp +75 -0
  56. data/ext/libsass/src/expand.cpp +275 -222
  57. data/ext/libsass/src/expand.hpp +36 -16
  58. data/ext/libsass/src/extender.cpp +1188 -0
  59. data/ext/libsass/src/extender.hpp +399 -0
  60. data/ext/libsass/src/extension.cpp +43 -0
  61. data/ext/libsass/src/extension.hpp +89 -0
  62. data/ext/libsass/src/file.cpp +81 -72
  63. data/ext/libsass/src/file.hpp +28 -37
  64. data/ext/libsass/src/fn_colors.cpp +20 -18
  65. data/ext/libsass/src/fn_lists.cpp +30 -29
  66. data/ext/libsass/src/fn_maps.cpp +3 -3
  67. data/ext/libsass/src/fn_miscs.cpp +34 -46
  68. data/ext/libsass/src/fn_numbers.cpp +20 -13
  69. data/ext/libsass/src/fn_selectors.cpp +98 -128
  70. data/ext/libsass/src/fn_strings.cpp +47 -33
  71. data/ext/libsass/src/fn_utils.cpp +31 -29
  72. data/ext/libsass/src/fn_utils.hpp +17 -11
  73. data/ext/libsass/src/inspect.cpp +186 -148
  74. data/ext/libsass/src/inspect.hpp +31 -29
  75. data/ext/libsass/src/lexer.cpp +20 -82
  76. data/ext/libsass/src/lexer.hpp +5 -16
  77. data/ext/libsass/src/listize.cpp +23 -37
  78. data/ext/libsass/src/listize.hpp +8 -9
  79. data/ext/libsass/src/mapping.hpp +1 -0
  80. data/ext/libsass/src/memory/allocator.cpp +48 -0
  81. data/ext/libsass/src/memory/allocator.hpp +138 -0
  82. data/ext/libsass/src/memory/config.hpp +20 -0
  83. data/ext/libsass/src/memory/memory_pool.hpp +186 -0
  84. data/ext/libsass/src/memory/{SharedPtr.cpp → shared_ptr.cpp} +2 -2
  85. data/ext/libsass/src/memory/{SharedPtr.hpp → shared_ptr.hpp} +55 -9
  86. data/ext/libsass/src/memory.hpp +12 -0
  87. data/ext/libsass/src/operation.hpp +71 -61
  88. data/ext/libsass/src/operators.cpp +19 -18
  89. data/ext/libsass/src/operators.hpp +11 -11
  90. data/ext/libsass/src/ordered_map.hpp +112 -0
  91. data/ext/libsass/src/output.cpp +45 -64
  92. data/ext/libsass/src/output.hpp +6 -6
  93. data/ext/libsass/src/parser.cpp +512 -700
  94. data/ext/libsass/src/parser.hpp +89 -97
  95. data/ext/libsass/src/parser_selectors.cpp +189 -0
  96. data/ext/libsass/src/permutate.hpp +164 -0
  97. data/ext/libsass/src/plugins.cpp +7 -7
  98. data/ext/libsass/src/plugins.hpp +8 -8
  99. data/ext/libsass/src/position.cpp +7 -26
  100. data/ext/libsass/src/position.hpp +44 -21
  101. data/ext/libsass/src/prelexer.cpp +6 -6
  102. data/ext/libsass/src/remove_placeholders.cpp +55 -56
  103. data/ext/libsass/src/remove_placeholders.hpp +21 -18
  104. data/ext/libsass/src/sass.cpp +16 -15
  105. data/ext/libsass/src/sass.hpp +10 -5
  106. data/ext/libsass/src/sass2scss.cpp +4 -4
  107. data/ext/libsass/src/sass_context.cpp +91 -122
  108. data/ext/libsass/src/sass_context.hpp +2 -2
  109. data/ext/libsass/src/sass_functions.cpp +1 -1
  110. data/ext/libsass/src/sass_values.cpp +8 -11
  111. data/ext/libsass/src/settings.hpp +19 -0
  112. data/ext/libsass/src/source.cpp +69 -0
  113. data/ext/libsass/src/source.hpp +95 -0
  114. data/ext/libsass/src/source_data.hpp +32 -0
  115. data/ext/libsass/src/source_map.cpp +22 -18
  116. data/ext/libsass/src/source_map.hpp +12 -9
  117. data/ext/libsass/src/stylesheet.cpp +22 -0
  118. data/ext/libsass/src/stylesheet.hpp +57 -0
  119. data/ext/libsass/src/to_value.cpp +2 -2
  120. data/ext/libsass/src/to_value.hpp +1 -1
  121. data/ext/libsass/src/units.cpp +24 -22
  122. data/ext/libsass/src/units.hpp +8 -8
  123. data/ext/libsass/src/utf8_string.cpp +9 -10
  124. data/ext/libsass/src/utf8_string.hpp +7 -6
  125. data/ext/libsass/src/util.cpp +48 -50
  126. data/ext/libsass/src/util.hpp +20 -21
  127. data/ext/libsass/src/util_string.cpp +111 -61
  128. data/ext/libsass/src/util_string.hpp +62 -8
  129. data/ext/libsass/src/values.cpp +12 -12
  130. data/lib/sassc/engine.rb +5 -3
  131. data/lib/sassc/functions_handler.rb +8 -8
  132. data/lib/sassc/native.rb +4 -6
  133. data/lib/sassc/script.rb +4 -4
  134. data/lib/sassc/version.rb +1 -1
  135. data/test/functions_test.rb +18 -1
  136. data/test/native_test.rb +4 -4
  137. metadata +29 -15
  138. data/ext/libsass/src/extend.cpp +0 -2132
  139. data/ext/libsass/src/extend.hpp +0 -86
  140. data/ext/libsass/src/node.cpp +0 -322
  141. data/ext/libsass/src/node.hpp +0 -118
  142. data/ext/libsass/src/paths.hpp +0 -71
  143. data/ext/libsass/src/sass_util.cpp +0 -152
  144. data/ext/libsass/src/sass_util.hpp +0 -256
  145. data/ext/libsass/src/subset_map.cpp +0 -58
  146. data/ext/libsass/src/subset_map.hpp +0 -76
  147. 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
- Parser sig_parser = Parser::from_c_str(sig, ctx, ctx.traces, ParserState("[built-in function]"));
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
- std::string name(Util::normalize_underscores(sig_parser.lexed));
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
- ParserState("[built-in function]"),
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
- Parser sig_parser = Parser::from_c_str(sig, ctx, ctx.traces, ParserState("[c function]"));
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
- std::string name(Util::normalize_underscores(sig_parser.lexed));
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
- ParserState("[c function]"),
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
- std::string function_name(Signature sig)
51
+ sass::string function_name(Signature sig)
51
52
  {
52
- std::string str(sig);
53
+ sass::string str(sig);
53
54
  return str.substr(0, str.find('('));
54
55
  }
55
56
 
56
- Map* get_arg_m(const std::string& argname, Env& env, Signature sig, ParserState pstate, Backtraces traces)
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 std::string& argname, Env& env, Signature sig, ParserState pstate, Backtraces traces, double lo, double hi)
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
- std::stringstream msg;
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 std::string& argname, Env& env, Signature sig, ParserState pstate, Backtraces traces)
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 std::string& argname, Env& env, Signature sig, ParserState pstate, Backtraces traces)
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 std::string& argname, Env& env, Signature sig, ParserState pstate, Backtraces traces)
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 std::string& argname, Env& env, Signature sig, ParserState pstate, Backtraces traces) {
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
- 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);
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
- std::stringstream msg;
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,28 +130,29 @@ namespace Sass {
129
130
  if (String_Constant* str = Cast<String_Constant>(exp)) {
130
131
  str->quote_mark(0);
131
132
  }
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);
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
- 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
+ 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
- std::stringstream msg;
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
- 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
+ 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
- Complex_Selector_Obj first = sel_list->first();
150
- if (!first->tail()) return first->head();
151
- return first->tail()->head();
152
+ return sel_list->first()->first();
152
153
  }
153
154
 
155
+
154
156
  }
155
157
 
156
158
  }
@@ -1,5 +1,10 @@
1
1
  #ifndef SASS_FN_UTILS_H
2
2
  #define SASS_FN_UTILS_H
3
+
4
+ // sass.hpp must go before all system headers to get the
5
+ // __EXTENSIONS__ fix on Solaris.
6
+ #include "sass.hpp"
7
+
3
8
  #include "units.hpp"
4
9
  #include "backtrace.hpp"
5
10
  #include "environment.hpp"
@@ -13,9 +18,10 @@ namespace Sass {
13
18
  Env& d_env, \
14
19
  Context& ctx, \
15
20
  Signature sig, \
16
- ParserState pstate, \
21
+ SourceSpan pstate, \
17
22
  Backtraces& traces, \
18
- SelectorStack& selector_stack
23
+ SelectorStack selector_stack, \
24
+ SelectorStack original_stack \
19
25
 
20
26
  typedef const char* Signature;
21
27
  typedef PreValue* (*Native_Function)(FN_PROTOTYPE);
@@ -31,7 +37,7 @@ namespace Sass {
31
37
  namespace Functions {
32
38
 
33
39
  template <typename T>
34
- T* get_arg(const std::string& argname, Env& env, Signature sig, ParserState pstate, Backtraces traces)
40
+ T* get_arg(const sass::string& argname, Env& env, Signature sig, SourceSpan pstate, Backtraces traces)
35
41
  {
36
42
  T* val = Cast<T>(env[argname]);
37
43
  if (!val) {
@@ -40,14 +46,14 @@ namespace Sass {
40
46
  return val;
41
47
  }
42
48
 
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
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
51
57
 
52
58
  }
53
59