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.
Files changed (116) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +1 -0
  3. data/CHANGELOG.md +5 -0
  4. data/ext/libsass/VERSION +1 -1
  5. data/ext/libsass/include/sass/context.h +3 -0
  6. data/ext/libsass/src/MurmurHash2.hpp +91 -0
  7. data/ext/libsass/src/ast.cpp +117 -117
  8. data/ext/libsass/src/ast.hpp +160 -162
  9. data/ext/libsass/src/ast_def_macros.hpp +10 -10
  10. data/ext/libsass/src/ast_fwd_decl.cpp +2 -2
  11. data/ext/libsass/src/ast_fwd_decl.hpp +61 -52
  12. data/ext/libsass/src/ast_helpers.hpp +5 -5
  13. data/ext/libsass/src/ast_sel_cmp.cpp +18 -18
  14. data/ext/libsass/src/ast_sel_super.cpp +52 -52
  15. data/ext/libsass/src/ast_sel_unify.cpp +16 -16
  16. data/ext/libsass/src/ast_sel_weave.cpp +62 -62
  17. data/ext/libsass/src/ast_selectors.cpp +87 -77
  18. data/ext/libsass/src/ast_selectors.hpp +72 -62
  19. data/ext/libsass/src/ast_supports.cpp +35 -35
  20. data/ext/libsass/src/ast_supports.hpp +29 -29
  21. data/ext/libsass/src/ast_values.cpp +58 -58
  22. data/ext/libsass/src/ast_values.hpp +75 -75
  23. data/ext/libsass/src/backtrace.cpp +9 -9
  24. data/ext/libsass/src/backtrace.hpp +5 -5
  25. data/ext/libsass/src/base64vlq.cpp +2 -2
  26. data/ext/libsass/src/base64vlq.hpp +1 -1
  27. data/ext/libsass/src/bind.cpp +17 -17
  28. data/ext/libsass/src/bind.hpp +1 -1
  29. data/ext/libsass/src/c2ast.cpp +3 -3
  30. data/ext/libsass/src/c2ast.hpp +1 -1
  31. data/ext/libsass/src/check_nesting.cpp +36 -36
  32. data/ext/libsass/src/check_nesting.hpp +2 -2
  33. data/ext/libsass/src/color_maps.cpp +5 -5
  34. data/ext/libsass/src/color_maps.hpp +1 -1
  35. data/ext/libsass/src/context.cpp +63 -60
  36. data/ext/libsass/src/context.hpp +33 -33
  37. data/ext/libsass/src/cssize.cpp +30 -29
  38. data/ext/libsass/src/cssize.hpp +13 -13
  39. data/ext/libsass/src/dart_helpers.hpp +5 -5
  40. data/ext/libsass/src/debugger.hpp +127 -128
  41. data/ext/libsass/src/emitter.cpp +12 -12
  42. data/ext/libsass/src/emitter.hpp +10 -10
  43. data/ext/libsass/src/environment.cpp +27 -27
  44. data/ext/libsass/src/environment.hpp +24 -24
  45. data/ext/libsass/src/error_handling.cpp +42 -42
  46. data/ext/libsass/src/error_handling.hpp +38 -50
  47. data/ext/libsass/src/eval.cpp +138 -132
  48. data/ext/libsass/src/eval.hpp +17 -17
  49. data/ext/libsass/src/eval_selectors.cpp +3 -3
  50. data/ext/libsass/src/expand.cpp +70 -64
  51. data/ext/libsass/src/expand.hpp +12 -12
  52. data/ext/libsass/src/extender.cpp +55 -53
  53. data/ext/libsass/src/extender.hpp +14 -14
  54. data/ext/libsass/src/file.cpp +66 -58
  55. data/ext/libsass/src/file.hpp +23 -25
  56. data/ext/libsass/src/fn_colors.cpp +9 -9
  57. data/ext/libsass/src/fn_lists.cpp +18 -18
  58. data/ext/libsass/src/fn_maps.cpp +3 -3
  59. data/ext/libsass/src/fn_miscs.cpp +15 -15
  60. data/ext/libsass/src/fn_numbers.cpp +7 -7
  61. data/ext/libsass/src/fn_selectors.cpp +8 -8
  62. data/ext/libsass/src/fn_strings.cpp +34 -22
  63. data/ext/libsass/src/fn_utils.cpp +29 -26
  64. data/ext/libsass/src/fn_utils.hpp +10 -10
  65. data/ext/libsass/src/inspect.cpp +35 -34
  66. data/ext/libsass/src/inspect.hpp +21 -21
  67. data/ext/libsass/src/lexer.cpp +3 -1
  68. data/ext/libsass/src/listize.cpp +2 -2
  69. data/ext/libsass/src/mapping.hpp +1 -0
  70. data/ext/libsass/src/memory.hpp +12 -0
  71. data/ext/libsass/src/memory/allocator.cpp +48 -0
  72. data/ext/libsass/src/memory/allocator.hpp +138 -0
  73. data/ext/libsass/src/memory/config.hpp +20 -0
  74. data/ext/libsass/src/memory/memory_pool.hpp +186 -0
  75. data/ext/libsass/src/memory/{SharedPtr.cpp → shared_ptr.cpp} +2 -2
  76. data/ext/libsass/src/memory/{SharedPtr.hpp → shared_ptr.hpp} +18 -6
  77. data/ext/libsass/src/operation.hpp +44 -44
  78. data/ext/libsass/src/operators.cpp +18 -18
  79. data/ext/libsass/src/operators.hpp +11 -11
  80. data/ext/libsass/src/ordered_map.hpp +18 -18
  81. data/ext/libsass/src/output.cpp +16 -16
  82. data/ext/libsass/src/output.hpp +5 -5
  83. data/ext/libsass/src/parser.cpp +327 -345
  84. data/ext/libsass/src/parser.hpp +77 -87
  85. data/ext/libsass/src/parser_selectors.cpp +6 -6
  86. data/ext/libsass/src/permutate.hpp +39 -15
  87. data/ext/libsass/src/plugins.cpp +7 -7
  88. data/ext/libsass/src/plugins.hpp +8 -8
  89. data/ext/libsass/src/position.cpp +7 -26
  90. data/ext/libsass/src/position.hpp +44 -21
  91. data/ext/libsass/src/remove_placeholders.cpp +4 -4
  92. data/ext/libsass/src/remove_placeholders.hpp +3 -3
  93. data/ext/libsass/src/sass.cpp +16 -15
  94. data/ext/libsass/src/sass.hpp +9 -5
  95. data/ext/libsass/src/sass_context.cpp +52 -34
  96. data/ext/libsass/src/sass_values.cpp +8 -10
  97. data/ext/libsass/src/settings.hpp +19 -0
  98. data/ext/libsass/src/source.cpp +69 -0
  99. data/ext/libsass/src/source.hpp +95 -0
  100. data/ext/libsass/src/source_data.hpp +32 -0
  101. data/ext/libsass/src/source_map.cpp +22 -18
  102. data/ext/libsass/src/source_map.hpp +12 -9
  103. data/ext/libsass/src/units.cpp +19 -19
  104. data/ext/libsass/src/units.hpp +8 -8
  105. data/ext/libsass/src/utf8_string.cpp +9 -10
  106. data/ext/libsass/src/utf8_string.hpp +7 -6
  107. data/ext/libsass/src/util.cpp +38 -38
  108. data/ext/libsass/src/util.hpp +18 -18
  109. data/ext/libsass/src/util_string.cpp +13 -13
  110. data/ext/libsass/src/util_string.hpp +9 -8
  111. data/ext/libsass/src/values.cpp +12 -12
  112. data/lib/sassc/native.rb +3 -5
  113. data/lib/sassc/version.rb +1 -1
  114. data/test/native_test.rb +4 -4
  115. metadata +14 -5
  116. data/lib/sassc/native/lib_c.rb +0 -21
@@ -20,20 +20,20 @@ namespace Sass {
20
20
 
21
21
  namespace Exception {
22
22
 
23
- const std::string def_msg = "Invalid sass detected";
24
- const std::string def_op_msg = "Undefined operation";
25
- const std::string def_op_null_msg = "Invalid null operation";
26
- const std::string def_nesting_limit = "Code too deeply neested";
23
+ const sass::string def_msg = "Invalid sass detected";
24
+ const sass::string def_op_msg = "Undefined operation";
25
+ const sass::string def_op_null_msg = "Invalid null operation";
26
+ const sass::string def_nesting_limit = "Code too deeply nested";
27
27
 
28
28
  class Base : public std::runtime_error {
29
29
  protected:
30
- std::string msg;
31
- std::string prefix;
30
+ sass::string msg;
31
+ sass::string prefix;
32
32
  public:
33
- ParserState pstate;
33
+ SourceSpan pstate;
34
34
  Backtraces traces;
35
35
  public:
36
- Base(ParserState pstate, std::string msg, Backtraces traces);
36
+ Base(SourceSpan pstate, sass::string msg, Backtraces traces);
37
37
  virtual const char* errtype() const { return prefix.c_str(); }
38
38
  virtual const char* what() const throw() { return msg.c_str(); }
39
39
  virtual ~Base() throw() {};
@@ -41,20 +41,8 @@ namespace Sass {
41
41
 
42
42
  class InvalidSass : public Base {
43
43
  public:
44
- InvalidSass(InvalidSass& other) : Base(other), owned_src(other.owned_src) {
45
- // Assumes that `this` will outlive `other`.
46
- other.owned_src = nullptr;
47
- }
48
-
49
- // Required because the copy constructor's argument is not const.
50
- // Can't use `std::move` here because we build on Visual Studio 2013.
51
- InvalidSass(InvalidSass &&other) : Base(other), owned_src(other.owned_src) {
52
- other.owned_src = nullptr;
53
- }
54
-
55
- InvalidSass(ParserState pstate, Backtraces traces, std::string msg, char* owned_src = nullptr);
56
- virtual ~InvalidSass() throw() { sass_free_memory(owned_src); };
57
- char *owned_src;
44
+ InvalidSass(SourceSpan pstate, Backtraces traces, sass::string msg);
45
+ virtual ~InvalidSass() throw() {};
58
46
  };
59
47
 
60
48
  class InvalidParent : public Base {
@@ -68,43 +56,43 @@ namespace Sass {
68
56
 
69
57
  class MissingArgument : public Base {
70
58
  protected:
71
- std::string fn;
72
- std::string arg;
73
- std::string fntype;
59
+ sass::string fn;
60
+ sass::string arg;
61
+ sass::string fntype;
74
62
  public:
75
- MissingArgument(ParserState pstate, Backtraces traces, std::string fn, std::string arg, std::string fntype);
63
+ MissingArgument(SourceSpan pstate, Backtraces traces, sass::string fn, sass::string arg, sass::string fntype);
76
64
  virtual ~MissingArgument() throw() {};
77
65
  };
78
66
 
79
67
  class InvalidArgumentType : public Base {
80
68
  protected:
81
- std::string fn;
82
- std::string arg;
83
- std::string type;
69
+ sass::string fn;
70
+ sass::string arg;
71
+ sass::string type;
84
72
  const Value* value;
85
73
  public:
86
- InvalidArgumentType(ParserState pstate, Backtraces traces, std::string fn, std::string arg, std::string type, const Value* value = 0);
74
+ InvalidArgumentType(SourceSpan pstate, Backtraces traces, sass::string fn, sass::string arg, sass::string type, const Value* value = 0);
87
75
  virtual ~InvalidArgumentType() throw() {};
88
76
  };
89
77
 
90
78
  class InvalidVarKwdType : public Base {
91
79
  protected:
92
- std::string name;
80
+ sass::string name;
93
81
  const Argument* arg;
94
82
  public:
95
- InvalidVarKwdType(ParserState pstate, Backtraces traces, std::string name, const Argument* arg = 0);
83
+ InvalidVarKwdType(SourceSpan pstate, Backtraces traces, sass::string name, const Argument* arg = 0);
96
84
  virtual ~InvalidVarKwdType() throw() {};
97
85
  };
98
86
 
99
87
  class InvalidSyntax : public Base {
100
88
  public:
101
- InvalidSyntax(ParserState pstate, Backtraces traces, std::string msg);
89
+ InvalidSyntax(SourceSpan pstate, Backtraces traces, sass::string msg);
102
90
  virtual ~InvalidSyntax() throw() {};
103
91
  };
104
92
 
105
93
  class NestingLimitError : public Base {
106
94
  public:
107
- NestingLimitError(ParserState pstate, Backtraces traces, std::string msg = def_nesting_limit);
95
+ NestingLimitError(SourceSpan pstate, Backtraces traces, sass::string msg = def_nesting_limit);
108
96
  virtual ~NestingLimitError() throw() {};
109
97
  };
110
98
 
@@ -121,9 +109,9 @@ namespace Sass {
121
109
  class TypeMismatch : public Base {
122
110
  protected:
123
111
  const Expression& var;
124
- const std::string type;
112
+ const sass::string type;
125
113
  public:
126
- TypeMismatch(Backtraces traces, const Expression& var, const std::string type);
114
+ TypeMismatch(Backtraces traces, const Expression& var, const sass::string type);
127
115
  virtual const char* errtype() const { return "Error"; }
128
116
  virtual ~TypeMismatch() throw() {};
129
117
  };
@@ -149,10 +137,10 @@ namespace Sass {
149
137
  /* common virtual base class (has no pstate or trace) */
150
138
  class OperationError : public std::runtime_error {
151
139
  protected:
152
- std::string msg;
140
+ sass::string msg;
153
141
  public:
154
- OperationError(std::string msg = def_op_msg)
155
- : std::runtime_error(msg), msg(msg)
142
+ OperationError(sass::string msg = def_op_msg)
143
+ : std::runtime_error(msg.c_str()), msg(msg)
156
144
  {};
157
145
  public:
158
146
  virtual const char* errtype() const { return "Error"; }
@@ -210,13 +198,13 @@ namespace Sass {
210
198
 
211
199
  class SassValueError : public Base {
212
200
  public:
213
- SassValueError(Backtraces traces, ParserState pstate, OperationError& err);
201
+ SassValueError(Backtraces traces, SourceSpan pstate, OperationError& err);
214
202
  virtual ~SassValueError() throw() {};
215
203
  };
216
204
 
217
205
  class TopLevelParent : public Base {
218
206
  public:
219
- TopLevelParent(Backtraces traces, ParserState pstate);
207
+ TopLevelParent(Backtraces traces, SourceSpan pstate);
220
208
  virtual ~TopLevelParent() throw() {};
221
209
  };
222
210
 
@@ -234,17 +222,17 @@ namespace Sass {
234
222
 
235
223
  }
236
224
 
237
- void warn(std::string msg, ParserState pstate);
238
- void warn(std::string msg, ParserState pstate, Backtrace* bt);
239
- void warning(std::string msg, ParserState pstate);
225
+ void warn(sass::string msg, SourceSpan pstate);
226
+ void warn(sass::string msg, SourceSpan pstate, Backtrace* bt);
227
+ void warning(sass::string msg, SourceSpan pstate);
240
228
 
241
- void deprecated_function(std::string msg, ParserState pstate);
242
- void deprecated(std::string msg, std::string msg2, bool with_column, ParserState pstate);
243
- void deprecated_bind(std::string msg, ParserState pstate);
244
- // void deprecated(std::string msg, ParserState pstate, Backtrace* bt);
229
+ void deprecated_function(sass::string msg, SourceSpan pstate);
230
+ void deprecated(sass::string msg, sass::string msg2, bool with_column, SourceSpan pstate);
231
+ void deprecated_bind(sass::string msg, SourceSpan pstate);
232
+ // void deprecated(sass::string msg, SourceSpan pstate, Backtrace* bt);
245
233
 
246
- void coreError(std::string msg, ParserState pstate);
247
- void error(std::string msg, ParserState pstate, Backtraces& traces);
234
+ void coreError(sass::string msg, SourceSpan pstate);
235
+ void error(sass::string msg, SourceSpan pstate, Backtraces& traces);
248
236
 
249
237
  }
250
238
 
@@ -30,6 +30,7 @@
30
30
  #include "expand.hpp"
31
31
  #include "color_maps.hpp"
32
32
  #include "sass_functions.hpp"
33
+ #include "error_handling.hpp"
33
34
  #include "util_string.hpp"
34
35
 
35
36
  namespace Sass {
@@ -52,7 +53,7 @@ namespace Sass {
52
53
  return exp.environment();
53
54
  }
54
55
 
55
- const std::string Eval::cwd()
56
+ const sass::string Eval::cwd()
56
57
  {
57
58
  return ctx.cwd();
58
59
  }
@@ -72,7 +73,7 @@ namespace Sass {
72
73
  return exp.env_stack;
73
74
  }
74
75
 
75
- std::vector<Sass_Callee>& Eval::callee_stack()
76
+ sass::vector<Sass_Callee>& Eval::callee_stack()
76
77
  {
77
78
  return ctx.callee_stack;
78
79
  }
@@ -90,8 +91,14 @@ namespace Sass {
90
91
  Expression* Eval::operator()(Assignment* a)
91
92
  {
92
93
  Env* env = environment();
93
- std::string var(a->variable());
94
+ sass::string var(a->variable());
94
95
  if (a->is_global()) {
96
+ if (!env->has_global(var)) {
97
+ deprecated(
98
+ "!global assignments won't be able to declare new variables in future versions.",
99
+ "Consider adding `" + var + ": null` at the top level.",
100
+ true, a->pstate());
101
+ }
95
102
  if (a->is_default()) {
96
103
  if (env->has_global(var)) {
97
104
  Expression* e = Cast<Expression>(env->get_global(var));
@@ -150,10 +157,10 @@ namespace Sass {
150
157
 
151
158
  Expression* Eval::operator()(If* i)
152
159
  {
153
- Expression_Obj rv;
160
+ ExpressionObj rv;
154
161
  Env env(environment());
155
162
  env_stack().push_back(&env);
156
- Expression_Obj cond = i->predicate()->perform(this);
163
+ ExpressionObj cond = i->predicate()->perform(this);
157
164
  if (!cond->is_false()) {
158
165
  rv = i->block()->perform(this);
159
166
  }
@@ -167,15 +174,15 @@ namespace Sass {
167
174
 
168
175
  // For does not create a new env scope
169
176
  // But iteration vars are reset afterwards
170
- Expression* Eval::operator()(For* f)
177
+ Expression* Eval::operator()(ForRule* f)
171
178
  {
172
- std::string variable(f->variable());
173
- Expression_Obj low = f->lower_bound()->perform(this);
179
+ sass::string variable(f->variable());
180
+ ExpressionObj low = f->lower_bound()->perform(this);
174
181
  if (low->concrete_type() != Expression::NUMBER) {
175
182
  traces.push_back(Backtrace(low->pstate()));
176
183
  throw Exception::TypeMismatch(traces, *low, "integer");
177
184
  }
178
- Expression_Obj high = f->upper_bound()->perform(this);
185
+ ExpressionObj high = f->upper_bound()->perform(this);
179
186
  if (high->concrete_type() != Expression::NUMBER) {
180
187
  traces.push_back(Backtrace(high->pstate()));
181
188
  throw Exception::TypeMismatch(traces, *high, "integer");
@@ -184,7 +191,7 @@ namespace Sass {
184
191
  Number_Obj sass_end = Cast<Number>(high);
185
192
  // check if units are valid for sequence
186
193
  if (sass_start->unit() != sass_end->unit()) {
187
- std::stringstream msg; msg << "Incompatible units: '"
194
+ sass::ostream msg; msg << "Incompatible units: '"
188
195
  << sass_end->unit() << "' and '"
189
196
  << sass_start->unit() << "'.";
190
197
  error(msg.str(), low->pstate(), traces);
@@ -223,10 +230,10 @@ namespace Sass {
223
230
 
224
231
  // Eval does not create a new env scope
225
232
  // But iteration vars are reset afterwards
226
- Expression* Eval::operator()(Each* e)
233
+ Expression* Eval::operator()(EachRule* e)
227
234
  {
228
- std::vector<std::string> variables(e->variables());
229
- Expression_Obj expr = e->list()->perform(this);
235
+ sass::vector<sass::string> variables(e->variables());
236
+ ExpressionObj expr = e->list()->perform(this);
230
237
  Env env(environment(), true);
231
238
  env_stack().push_back(&env);
232
239
  List_Obj list;
@@ -235,7 +242,7 @@ namespace Sass {
235
242
  map = Cast<Map>(expr);
236
243
  }
237
244
  else if (SelectorList * ls = Cast<SelectorList>(expr)) {
238
- Expression_Obj rv = Listize::perform(ls);
245
+ ExpressionObj rv = Listize::perform(ls);
239
246
  list = Cast<List>(rv);
240
247
  }
241
248
  else if (expr->concrete_type() != Expression::LIST) {
@@ -247,11 +254,11 @@ namespace Sass {
247
254
  }
248
255
 
249
256
  Block_Obj body = e->block();
250
- Expression_Obj val;
257
+ ExpressionObj val;
251
258
 
252
259
  if (map) {
253
- for (Expression_Obj key : map->keys()) {
254
- Expression_Obj value = map->at(key);
260
+ for (ExpressionObj key : map->keys()) {
261
+ ExpressionObj value = map->at(key);
255
262
 
256
263
  if (variables.size() == 1) {
257
264
  List* variable = SASS_MEMORY_NEW(List, map->pstate(), 2, SASS_SPACE);
@@ -281,12 +288,10 @@ namespace Sass {
281
288
  Expression* var = scalars;
282
289
  env.set_local(variables[0], var);
283
290
  } else {
284
- // XXX: this is never hit via spec tests
291
+ // https://github.com/sass/libsass/issues/3078
285
292
  for (size_t j = 0, K = variables.size(); j < K; ++j) {
286
- Expression* res = j >= scalars->length()
287
- ? SASS_MEMORY_NEW(Null, expr->pstate())
288
- : scalars->at(j);
289
- env.set_local(variables[j], res);
293
+ env.set_local(variables[j], j >= scalars->length()
294
+ ? SASS_MEMORY_NEW(Null, expr->pstate()) : scalars->at(j));
290
295
  }
291
296
  }
292
297
  } else {
@@ -307,15 +312,15 @@ namespace Sass {
307
312
  return val.detach();
308
313
  }
309
314
 
310
- Expression* Eval::operator()(While* w)
315
+ Expression* Eval::operator()(WhileRule* w)
311
316
  {
312
- Expression_Obj pred = w->predicate();
317
+ ExpressionObj pred = w->predicate();
313
318
  Block_Obj body = w->block();
314
319
  Env env(environment(), true);
315
320
  env_stack().push_back(&env);
316
- Expression_Obj cond = pred->perform(this);
321
+ ExpressionObj cond = pred->perform(this);
317
322
  while (!cond->is_false()) {
318
- Expression_Obj val = body->perform(this);
323
+ ExpressionObj val = body->perform(this);
319
324
  if (val) {
320
325
  env_stack().pop_back();
321
326
  return val.detach();
@@ -331,11 +336,11 @@ namespace Sass {
331
336
  return r->value()->perform(this);
332
337
  }
333
338
 
334
- Expression* Eval::operator()(Warning* w)
339
+ Expression* Eval::operator()(WarningRule* w)
335
340
  {
336
341
  Sass_Output_Style outstyle = options().output_style;
337
342
  options().output_style = NESTED;
338
- Expression_Obj message = w->message()->perform(this);
343
+ ExpressionObj message = w->message()->perform(this);
339
344
  Env* env = environment();
340
345
 
341
346
  // try to use generic function
@@ -344,9 +349,9 @@ namespace Sass {
344
349
  // add call stack entry
345
350
  callee_stack().push_back({
346
351
  "@warn",
347
- w->pstate().path,
348
- w->pstate().line + 1,
349
- w->pstate().column + 1,
352
+ w->pstate().getPath(),
353
+ w->pstate().getLine(),
354
+ w->pstate().getColumn(),
350
355
  SASS_CALLEE_FUNCTION,
351
356
  { env }
352
357
  });
@@ -369,7 +374,7 @@ namespace Sass {
369
374
 
370
375
  }
371
376
 
372
- std::string result(unquote(message->to_sass()));
377
+ sass::string result(unquote(message->to_sass()));
373
378
  std::cerr << "WARNING: " << result << std::endl;
374
379
  traces.push_back(Backtrace(w->pstate()));
375
380
  std::cerr << traces_to_string(traces, " ");
@@ -379,11 +384,11 @@ namespace Sass {
379
384
  return 0;
380
385
  }
381
386
 
382
- Expression* Eval::operator()(Error* e)
387
+ Expression* Eval::operator()(ErrorRule* e)
383
388
  {
384
389
  Sass_Output_Style outstyle = options().output_style;
385
390
  options().output_style = NESTED;
386
- Expression_Obj message = e->message()->perform(this);
391
+ ExpressionObj message = e->message()->perform(this);
387
392
  Env* env = environment();
388
393
 
389
394
  // try to use generic function
@@ -392,9 +397,9 @@ namespace Sass {
392
397
  // add call stack entry
393
398
  callee_stack().push_back({
394
399
  "@error",
395
- e->pstate().path,
396
- e->pstate().line + 1,
397
- e->pstate().column + 1,
400
+ e->pstate().getPath(),
401
+ e->pstate().getLine(),
402
+ e->pstate().getColumn(),
398
403
  SASS_CALLEE_FUNCTION,
399
404
  { env }
400
405
  });
@@ -417,17 +422,17 @@ namespace Sass {
417
422
 
418
423
  }
419
424
 
420
- std::string result(unquote(message->to_sass()));
425
+ sass::string result(unquote(message->to_sass()));
421
426
  options().output_style = outstyle;
422
427
  error(result, e->pstate(), traces);
423
428
  return 0;
424
429
  }
425
430
 
426
- Expression* Eval::operator()(Debug* d)
431
+ Expression* Eval::operator()(DebugRule* d)
427
432
  {
428
433
  Sass_Output_Style outstyle = options().output_style;
429
434
  options().output_style = NESTED;
430
- Expression_Obj message = d->value()->perform(this);
435
+ ExpressionObj message = d->value()->perform(this);
431
436
  Env* env = environment();
432
437
 
433
438
  // try to use generic function
@@ -436,9 +441,9 @@ namespace Sass {
436
441
  // add call stack entry
437
442
  callee_stack().push_back({
438
443
  "@debug",
439
- d->pstate().path,
440
- d->pstate().line + 1,
441
- d->pstate().column + 1,
444
+ d->pstate().getPath(),
445
+ d->pstate().getLine(),
446
+ d->pstate().getColumn(),
442
447
  SASS_CALLEE_FUNCTION,
443
448
  { env }
444
449
  });
@@ -461,13 +466,13 @@ namespace Sass {
461
466
 
462
467
  }
463
468
 
464
- std::string result(unquote(message->to_sass()));
465
- std::string abs_path(Sass::File::rel2abs(d->pstate().path, cwd(), cwd()));
466
- std::string rel_path(Sass::File::abs2rel(d->pstate().path, cwd(), cwd()));
467
- std::string output_path(Sass::File::path_for_console(rel_path, abs_path, d->pstate().path));
469
+ sass::string result(unquote(message->to_sass()));
470
+ sass::string abs_path(Sass::File::rel2abs(d->pstate().getPath(), cwd(), cwd()));
471
+ sass::string rel_path(Sass::File::abs2rel(d->pstate().getPath(), cwd(), cwd()));
472
+ sass::string output_path(Sass::File::path_for_console(rel_path, abs_path, d->pstate().getPath()));
468
473
  options().output_style = outstyle;
469
474
 
470
- std::cerr << output_path << ":" << d->pstate().line+1 << " DEBUG: " << result;
475
+ std::cerr << output_path << ":" << d->pstate().getLine() << " DEBUG: " << result;
471
476
  std::cerr << std::endl;
472
477
  return 0;
473
478
  }
@@ -482,8 +487,8 @@ namespace Sass {
482
487
  l->length() / 2);
483
488
  for (size_t i = 0, L = l->length(); i < L; i += 2)
484
489
  {
485
- Expression_Obj key = (*l)[i+0]->perform(this);
486
- Expression_Obj val = (*l)[i+1]->perform(this);
490
+ ExpressionObj key = (*l)[i+0]->perform(this);
491
+ ExpressionObj val = (*l)[i+1]->perform(this);
487
492
  // make sure the color key never displays its real name
488
493
  key->is_delayed(true); // verified
489
494
  *lm << std::make_pair(key, val);
@@ -549,8 +554,8 @@ namespace Sass {
549
554
  Expression* Eval::operator()(Binary_Expression* b_in)
550
555
  {
551
556
 
552
- Expression_Obj lhs = b_in->left();
553
- Expression_Obj rhs = b_in->right();
557
+ ExpressionObj lhs = b_in->left();
558
+ ExpressionObj rhs = b_in->right();
554
559
  enum Sass_OP op_type = b_in->optype();
555
560
 
556
561
  if (op_type == Sass_OP::AND) {
@@ -574,7 +579,7 @@ namespace Sass {
574
579
  rhs = operator()(r_v);
575
580
  }
576
581
 
577
- Binary_Expression_Obj b = b_in;
582
+ Binary_ExpressionObj b = b_in;
578
583
 
579
584
  // Evaluate sub-expressions early on
580
585
  while (Binary_Expression* l_b = Cast<Binary_Expression>(lhs)) {
@@ -686,7 +691,7 @@ namespace Sass {
686
691
  if (String_Schema* s_l = Cast<String_Schema>(b->left())) {
687
692
  if (!s_l->has_interpolant() && (!s_l->is_right_interpolant())) {
688
693
  ret_schema = SASS_MEMORY_NEW(String_Schema, b->pstate());
689
- Binary_Expression_Obj bin_ex = SASS_MEMORY_NEW(Binary_Expression, b->pstate(),
694
+ Binary_ExpressionObj bin_ex = SASS_MEMORY_NEW(Binary_Expression, b->pstate(),
690
695
  b->op(), s_l->last(), b->right());
691
696
  bin_ex->is_delayed(b->left()->is_delayed() || b->right()->is_delayed()); // unverified
692
697
  for (size_t i = 0; i < s_l->length() - 1; ++i) {
@@ -700,7 +705,7 @@ namespace Sass {
700
705
 
701
706
  if (!s_r->has_interpolant() && (!s_r->is_left_interpolant() || op_type == Sass_OP::DIV)) {
702
707
  ret_schema = SASS_MEMORY_NEW(String_Schema, b->pstate());
703
- Binary_Expression_Obj bin_ex = SASS_MEMORY_NEW(Binary_Expression, b->pstate(),
708
+ Binary_ExpressionObj bin_ex = SASS_MEMORY_NEW(Binary_Expression, b->pstate(),
704
709
  b->op(), b->left(), s_r->first());
705
710
  bin_ex->is_delayed(b->left()->is_delayed() || b->right()->is_delayed()); // verified
706
711
  ret_schema->append(bin_ex->perform(this));
@@ -742,8 +747,8 @@ namespace Sass {
742
747
  // Is one of the operands an interpolant?
743
748
  String_Schema_Obj s1 = Cast<String_Schema>(b->left());
744
749
  String_Schema_Obj s2 = Cast<String_Schema>(b->right());
745
- Binary_Expression_Obj b1 = Cast<Binary_Expression>(b->left());
746
- Binary_Expression_Obj b2 = Cast<Binary_Expression>(b->right());
750
+ Binary_ExpressionObj b1 = Cast<Binary_Expression>(b->left());
751
+ Binary_ExpressionObj b2 = Cast<Binary_Expression>(b->right());
747
752
 
748
753
  bool schema_op = false;
749
754
 
@@ -758,7 +763,7 @@ namespace Sass {
758
763
  op_type == Sass_OP::EQ) {
759
764
  // If possible upgrade LHS to a number (for number to string compare)
760
765
  if (String_Constant* str = Cast<String_Constant>(lhs)) {
761
- std::string value(str->value());
766
+ sass::string value(str->value());
762
767
  const char* start = value.c_str();
763
768
  if (Prelexer::sequence < Prelexer::dimension, Prelexer::end_of_file >(start) != 0) {
764
769
  lhs = Parser::lexed_dimension(b->pstate(), str->value());
@@ -766,7 +771,7 @@ namespace Sass {
766
771
  }
767
772
  // If possible upgrade RHS to a number (for string to number compare)
768
773
  if (String_Constant* str = Cast<String_Constant>(rhs)) {
769
- std::string value(str->value());
774
+ sass::string value(str->value());
770
775
  const char* start = value.c_str();
771
776
  if (Prelexer::sequence < Prelexer::dimension, Prelexer::number >(start) != 0) {
772
777
  rhs = Parser::lexed_dimension(b->pstate(), str->value());
@@ -775,11 +780,11 @@ namespace Sass {
775
780
  }
776
781
 
777
782
  To_Value to_value(ctx);
778
- Value_Obj v_l = Cast<Value>(lhs->perform(&to_value));
779
- Value_Obj v_r = Cast<Value>(rhs->perform(&to_value));
783
+ ValueObj v_l = Cast<Value>(lhs->perform(&to_value));
784
+ ValueObj v_r = Cast<Value>(rhs->perform(&to_value));
780
785
 
781
786
  if (force_delay) {
782
- std::string str("");
787
+ sass::string str("");
783
788
  str += v_l->to_string(options());
784
789
  if (b->op().ws_before) str += " ";
785
790
  str += b->separator();
@@ -814,9 +819,9 @@ namespace Sass {
814
819
 
815
820
  // ToDo: throw error in op functions
816
821
  // ToDo: then catch and re-throw them
817
- Expression_Obj rv;
822
+ ExpressionObj rv;
818
823
  try {
819
- ParserState pstate(b->pstate());
824
+ SourceSpan pstate(b->pstate());
820
825
  if (l_type == Expression::NUMBER && r_type == Expression::NUMBER) {
821
826
  Number* l_n = Cast<Number>(lhs);
822
827
  Number* r_n = Cast<Number>(rhs);
@@ -841,8 +846,8 @@ namespace Sass {
841
846
  else {
842
847
  To_Value to_value(ctx);
843
848
  // this will leak if perform does not return a value!
844
- Value_Obj v_l = Cast<Value>(lhs->perform(&to_value));
845
- Value_Obj v_r = Cast<Value>(rhs->perform(&to_value));
849
+ ValueObj v_l = Cast<Value>(lhs->perform(&to_value));
850
+ ValueObj v_r = Cast<Value>(rhs->perform(&to_value));
846
851
  bool interpolant = b->is_right_interpolant() ||
847
852
  b->is_left_interpolant() ||
848
853
  b->is_interpolant();
@@ -895,7 +900,7 @@ namespace Sass {
895
900
 
896
901
  Expression* Eval::operator()(Unary_Expression* u)
897
902
  {
898
- Expression_Obj operand = u->operand()->perform(this);
903
+ ExpressionObj operand = u->operand()->perform(this);
899
904
  if (u->optype() == Unary_Expression::NOT) {
900
905
  Boolean* result = SASS_MEMORY_NEW(Boolean, u->pstate(), (bool)*operand);
901
906
  result->value(!result->value());
@@ -909,7 +914,7 @@ namespace Sass {
909
914
  return cpy.detach(); // return the copy
910
915
  }
911
916
  else if (u->optype() == Unary_Expression::SLASH) {
912
- std::string str = '/' + nr->to_string(options());
917
+ sass::string str = '/' + nr->to_string(options());
913
918
  return SASS_MEMORY_NEW(String_Constant, u->pstate(), str);
914
919
  }
915
920
  // nothing for positive
@@ -925,7 +930,7 @@ namespace Sass {
925
930
  else if (Color* color = Cast<Color>(operand)) {
926
931
  // Use the color name if this was eval with one
927
932
  if (color->disp().length() > 0) {
928
- Unary_Expression_Obj cpy = SASS_MEMORY_COPY(u);
933
+ Unary_ExpressionObj cpy = SASS_MEMORY_COPY(u);
929
934
  cpy->operand(SASS_MEMORY_NEW(String_Constant, operand->pstate(), color->disp()));
930
935
  return SASS_MEMORY_NEW(String_Quoted,
931
936
  cpy->pstate(),
@@ -933,7 +938,7 @@ namespace Sass {
933
938
  }
934
939
  }
935
940
  else {
936
- Unary_Expression_Obj cpy = SASS_MEMORY_COPY(u);
941
+ Unary_ExpressionObj cpy = SASS_MEMORY_COPY(u);
937
942
  cpy->operand(operand);
938
943
  return SASS_MEMORY_NEW(String_Quoted,
939
944
  cpy->pstate(),
@@ -952,21 +957,21 @@ namespace Sass {
952
957
  {
953
958
  if (traces.size() > Constants::MaxCallStack) {
954
959
  // XXX: this is never hit via spec tests
955
- std::ostringstream stm;
960
+ sass::ostream stm;
956
961
  stm << "Stack depth exceeded max of " << Constants::MaxCallStack;
957
962
  error(stm.str(), c->pstate(), traces);
958
963
  }
959
964
 
960
965
  if (Cast<String_Schema>(c->sname())) {
961
- Expression_Obj evaluated_name = c->sname()->perform(this);
962
- Expression_Obj evaluated_args = c->arguments()->perform(this);
963
- std::string str(evaluated_name->to_string());
966
+ ExpressionObj evaluated_name = c->sname()->perform(this);
967
+ ExpressionObj evaluated_args = c->arguments()->perform(this);
968
+ sass::string str(evaluated_name->to_string());
964
969
  str += evaluated_args->to_string();
965
970
  return SASS_MEMORY_NEW(String_Constant, c->pstate(), str);
966
971
  }
967
972
 
968
- std::string name(Util::normalize_underscores(c->name()));
969
- std::string full_name(name + "[f]");
973
+ sass::string name(Util::normalize_underscores(c->name()));
974
+ sass::string full_name(name + "[f]");
970
975
 
971
976
  // we make a clone here, need to implement that further
972
977
  Arguments_Obj args = c->arguments();
@@ -1010,7 +1015,7 @@ namespace Sass {
1010
1015
  if (c->func()) def = c->func()->definition();
1011
1016
 
1012
1017
  if (def->is_overload_stub()) {
1013
- std::stringstream ss;
1018
+ sass::ostream ss;
1014
1019
  size_t L = args->length();
1015
1020
  // account for rest arguments
1016
1021
  if (args->has_rest_argument() && args->length() > 0) {
@@ -1021,12 +1026,12 @@ namespace Sass {
1021
1026
  }
1022
1027
  ss << full_name << L;
1023
1028
  full_name = ss.str();
1024
- std::string resolved_name(full_name);
1025
- if (!env->has(resolved_name)) error("overloaded function `" + std::string(c->name()) + "` given wrong number of arguments", c->pstate(), traces);
1029
+ sass::string resolved_name(full_name);
1030
+ if (!env->has(resolved_name)) error("overloaded function `" + sass::string(c->name()) + "` given wrong number of arguments", c->pstate(), traces);
1026
1031
  def = Cast<Definition>((*env)[resolved_name]);
1027
1032
  }
1028
1033
 
1029
- Expression_Obj result = c;
1034
+ ExpressionObj result = c;
1030
1035
  Block_Obj body = def->block();
1031
1036
  Native_Function func = def->native_function();
1032
1037
  Sass_Function_Entry c_function = def->c_function();
@@ -1038,14 +1043,14 @@ namespace Sass {
1038
1043
  env_stack().push_back(&fn_env);
1039
1044
 
1040
1045
  if (func || body) {
1041
- bind(std::string("Function"), c->name(), params, args, &fn_env, this, traces);
1042
- std::string msg(", in function `" + c->name() + "`");
1046
+ bind(sass::string("Function"), c->name(), params, args, &fn_env, this, traces);
1047
+ sass::string msg(", in function `" + c->name() + "`");
1043
1048
  traces.push_back(Backtrace(c->pstate(), msg));
1044
1049
  callee_stack().push_back({
1045
1050
  c->name().c_str(),
1046
- c->pstate().path,
1047
- c->pstate().line + 1,
1048
- c->pstate().column + 1,
1051
+ c->pstate().getPath(),
1052
+ c->pstate().getLine(),
1053
+ c->pstate().getColumn(),
1049
1054
  SASS_CALLEE_FUNCTION,
1050
1055
  { env }
1051
1056
  });
@@ -1058,7 +1063,7 @@ namespace Sass {
1058
1063
  result = func(fn_env, *env, ctx, def->signature(), c->pstate(), traces, exp.getSelectorStack(), exp.originalStack);
1059
1064
  }
1060
1065
  if (!result) {
1061
- error(std::string("Function ") + c->name() + " finished without @return", c->pstate(), traces);
1066
+ error(sass::string("Function ") + c->name() + " finished without @return", c->pstate(), traces);
1062
1067
  }
1063
1068
  callee_stack().pop_back();
1064
1069
  traces.pop_back();
@@ -1077,15 +1082,15 @@ namespace Sass {
1077
1082
  }
1078
1083
 
1079
1084
  // populates env with default values for params
1080
- std::string ff(c->name());
1081
- bind(std::string("Function"), c->name(), params, args, &fn_env, this, traces);
1082
- std::string msg(", in function `" + c->name() + "`");
1085
+ sass::string ff(c->name());
1086
+ bind(sass::string("Function"), c->name(), params, args, &fn_env, this, traces);
1087
+ sass::string msg(", in function `" + c->name() + "`");
1083
1088
  traces.push_back(Backtrace(c->pstate(), msg));
1084
1089
  callee_stack().push_back({
1085
1090
  c->name().c_str(),
1086
- c->pstate().path,
1087
- c->pstate().line + 1,
1088
- c->pstate().column + 1,
1091
+ c->pstate().getPath(),
1092
+ c->pstate().getLine(),
1093
+ c->pstate().getColumn(),
1089
1094
  SASS_CALLEE_C_FUNCTION,
1090
1095
  { env }
1091
1096
  });
@@ -1094,19 +1099,19 @@ namespace Sass {
1094
1099
  union Sass_Value* c_args = sass_make_list(params->length(), SASS_COMMA, false);
1095
1100
  for(size_t i = 0; i < params->length(); i++) {
1096
1101
  Parameter_Obj param = params->at(i);
1097
- std::string key = param->name();
1102
+ sass::string key = param->name();
1098
1103
  AST_Node_Obj node = fn_env.get_local(key);
1099
- Expression_Obj arg = Cast<Expression>(node);
1104
+ ExpressionObj arg = Cast<Expression>(node);
1100
1105
  sass_list_set_value(c_args, i, arg->perform(&ast2c));
1101
1106
  }
1102
1107
  union Sass_Value* c_val = c_func(c_args, c_function, compiler());
1103
1108
  if (sass_value_get_tag(c_val) == SASS_ERROR) {
1104
- std::string message("error in C function " + c->name() + ": " + sass_error_get_message(c_val));
1109
+ sass::string message("error in C function " + c->name() + ": " + sass_error_get_message(c_val));
1105
1110
  sass_delete_value(c_val);
1106
1111
  sass_delete_value(c_args);
1107
1112
  error(message, c->pstate(), traces);
1108
1113
  } else if (sass_value_get_tag(c_val) == SASS_WARNING) {
1109
- std::string message("warning in C function " + c->name() + ": " + sass_warning_get_message(c_val));
1114
+ sass::string message("warning in C function " + c->name() + ": " + sass_warning_get_message(c_val));
1110
1115
  sass_delete_value(c_val);
1111
1116
  sass_delete_value(c_args);
1112
1117
  error(message, c->pstate(), traces);
@@ -1122,7 +1127,7 @@ namespace Sass {
1122
1127
 
1123
1128
  // link back to function definition
1124
1129
  // only do this for custom functions
1125
- if (result->pstate().file == std::string::npos)
1130
+ if (result->pstate().getSrcId() == sass::string::npos)
1126
1131
  result->pstate(c->pstate());
1127
1132
 
1128
1133
  result = result->perform(this);
@@ -1133,9 +1138,9 @@ namespace Sass {
1133
1138
 
1134
1139
  Expression* Eval::operator()(Variable* v)
1135
1140
  {
1136
- Expression_Obj value;
1141
+ ExpressionObj value;
1137
1142
  Env* env = environment();
1138
- const std::string& name(v->name());
1143
+ const sass::string& name(v->name());
1139
1144
  EnvResult rv(env->find(name));
1140
1145
  if (rv.found) value = static_cast<Expression*>(rv.it->second.ptr());
1141
1146
  else error("Undefined variable: \"" + v->name() + "\".", v->pstate(), traces);
@@ -1169,7 +1174,7 @@ namespace Sass {
1169
1174
  return b;
1170
1175
  }
1171
1176
 
1172
- void Eval::interpolation(Context& ctx, std::string& res, Expression_Obj ex, bool into_quotes, bool was_itpl) {
1177
+ void Eval::interpolation(Context& ctx, sass::string& res, ExpressionObj ex, bool into_quotes, bool was_itpl) {
1173
1178
 
1174
1179
  bool needs_closing_brace = false;
1175
1180
 
@@ -1214,9 +1219,9 @@ namespace Sass {
1214
1219
  List_Obj ll = SASS_MEMORY_NEW(List, l->pstate(), 0, l->separator());
1215
1220
  // this fixes an issue with bourbon sample, not really sure why
1216
1221
  // if (l->size() && Cast<Null>((*l)[0])) { res += ""; }
1217
- for(Expression_Obj item : *l) {
1222
+ for(ExpressionObj item : *l) {
1218
1223
  item->is_interpolant(l->is_interpolant());
1219
- std::string rl(""); interpolation(ctx, rl, item, into_quotes, l->is_interpolant());
1224
+ sass::string rl(""); interpolation(ctx, rl, item, into_quotes, l->is_interpolant());
1220
1225
  bool is_null = Cast<Null>(item) != 0; // rl != ""
1221
1226
  if (!is_null) ll->append(SASS_MEMORY_NEW(String_Quoted, item->pstate(), rl));
1222
1227
  }
@@ -1224,7 +1229,7 @@ namespace Sass {
1224
1229
  // here. Normally single list items are already unwrapped.
1225
1230
  if (l->size() > 1) {
1226
1231
  // string_to_output would fail "#{'_\a' '_\a'}";
1227
- std::string str(ll->to_string(options()));
1232
+ sass::string str(ll->to_string(options()));
1228
1233
  str = read_hex_escapes(str); // read escapes
1229
1234
  newline_to_space(str); // replace directly
1230
1235
  res += str; // append to result string
@@ -1245,7 +1250,7 @@ namespace Sass {
1245
1250
  if (into_quotes && ex->is_interpolant()) {
1246
1251
  res += evacuate_escapes(ex ? ex->to_string(options()) : "");
1247
1252
  } else {
1248
- std::string str(ex ? ex->to_string(options()) : "");
1253
+ sass::string str(ex ? ex->to_string(options()) : "");
1249
1254
  if (into_quotes) str = read_hex_escapes(str);
1250
1255
  res += str; // append to result string
1251
1256
  }
@@ -1273,12 +1278,12 @@ namespace Sass {
1273
1278
  }
1274
1279
  bool was_quoted = false;
1275
1280
  bool was_interpolant = false;
1276
- std::string res("");
1281
+ sass::string res("");
1277
1282
  for (size_t i = 0; i < L; ++i) {
1278
1283
  bool is_quoted = Cast<String_Quoted>((*s)[i]) != NULL;
1279
1284
  if (was_quoted && !(*s)[i]->is_interpolant() && !was_interpolant) { res += " "; }
1280
1285
  else if (i > 0 && is_quoted && !(*s)[i]->is_interpolant() && !was_interpolant) { res += " "; }
1281
- Expression_Obj ex = (*s)[i]->perform(this);
1286
+ ExpressionObj ex = (*s)[i]->perform(this);
1282
1287
  interpolation(ctx, res, ex, into_quotes, ex->is_interpolant());
1283
1288
  was_quoted = Cast<String_Quoted>((*s)[i]) != NULL;
1284
1289
  was_interpolant = (*s)[i]->is_interpolant();
@@ -1286,7 +1291,8 @@ namespace Sass {
1286
1291
  }
1287
1292
  if (!s->is_interpolant()) {
1288
1293
  if (s->length() > 1 && res == "") return SASS_MEMORY_NEW(Null, s->pstate());
1289
- return SASS_MEMORY_NEW(String_Constant, s->pstate(), res, s->css());
1294
+ String_Constant_Obj str = SASS_MEMORY_NEW(String_Constant, s->pstate(), res, s->css());
1295
+ return str.detach();
1290
1296
  }
1291
1297
  // string schema seems to have a special unquoting behavior (also handles "nested" quotes)
1292
1298
  String_Quoted_Obj str = SASS_MEMORY_NEW(String_Quoted, s->pstate(), res, 0, false, false, false, s->css());
@@ -1313,32 +1319,32 @@ namespace Sass {
1313
1319
  return str;
1314
1320
  }
1315
1321
 
1316
- Expression* Eval::operator()(Supports_Operator* c)
1322
+ Expression* Eval::operator()(SupportsOperation* c)
1317
1323
  {
1318
1324
  Expression* left = c->left()->perform(this);
1319
1325
  Expression* right = c->right()->perform(this);
1320
- Supports_Operator* cc = SASS_MEMORY_NEW(Supports_Operator,
1326
+ SupportsOperation* cc = SASS_MEMORY_NEW(SupportsOperation,
1321
1327
  c->pstate(),
1322
- Cast<Supports_Condition>(left),
1323
- Cast<Supports_Condition>(right),
1328
+ Cast<SupportsCondition>(left),
1329
+ Cast<SupportsCondition>(right),
1324
1330
  c->operand());
1325
1331
  return cc;
1326
1332
  }
1327
1333
 
1328
- Expression* Eval::operator()(Supports_Negation* c)
1334
+ Expression* Eval::operator()(SupportsNegation* c)
1329
1335
  {
1330
1336
  Expression* condition = c->condition()->perform(this);
1331
- Supports_Negation* cc = SASS_MEMORY_NEW(Supports_Negation,
1337
+ SupportsNegation* cc = SASS_MEMORY_NEW(SupportsNegation,
1332
1338
  c->pstate(),
1333
- Cast<Supports_Condition>(condition));
1339
+ Cast<SupportsCondition>(condition));
1334
1340
  return cc;
1335
1341
  }
1336
1342
 
1337
- Expression* Eval::operator()(Supports_Declaration* c)
1343
+ Expression* Eval::operator()(SupportsDeclaration* c)
1338
1344
  {
1339
1345
  Expression* feature = c->feature()->perform(this);
1340
1346
  Expression* value = c->value()->perform(this);
1341
- Supports_Declaration* cc = SASS_MEMORY_NEW(Supports_Declaration,
1347
+ SupportsDeclaration* cc = SASS_MEMORY_NEW(SupportsDeclaration,
1342
1348
  c->pstate(),
1343
1349
  feature,
1344
1350
  value);
@@ -1356,9 +1362,9 @@ namespace Sass {
1356
1362
 
1357
1363
  Expression* Eval::operator()(At_Root_Query* e)
1358
1364
  {
1359
- Expression_Obj feature = e->feature();
1365
+ ExpressionObj feature = e->feature();
1360
1366
  feature = (feature ? feature->perform(this) : 0);
1361
- Expression_Obj value = e->value();
1367
+ ExpressionObj value = e->value();
1362
1368
  value = (value ? value->perform(this) : 0);
1363
1369
  Expression* ee = SASS_MEMORY_NEW(At_Root_Query,
1364
1370
  e->pstate(),
@@ -1385,14 +1391,14 @@ namespace Sass {
1385
1391
 
1386
1392
  Expression* Eval::operator()(Media_Query_Expression* e)
1387
1393
  {
1388
- Expression_Obj feature = e->feature();
1394
+ ExpressionObj feature = e->feature();
1389
1395
  feature = (feature ? feature->perform(this) : 0);
1390
1396
  if (feature && Cast<String_Quoted>(feature)) {
1391
1397
  feature = SASS_MEMORY_NEW(String_Quoted,
1392
1398
  feature->pstate(),
1393
1399
  Cast<String_Quoted>(feature)->value());
1394
1400
  }
1395
- Expression_Obj value = e->value();
1401
+ ExpressionObj value = e->value();
1396
1402
  value = (value ? value->perform(this) : 0);
1397
1403
  if (value && Cast<String_Quoted>(value)) {
1398
1404
  // XXX: this is never hit via spec tests
@@ -1414,7 +1420,7 @@ namespace Sass {
1414
1420
 
1415
1421
  Expression* Eval::operator()(Argument* a)
1416
1422
  {
1417
- Expression_Obj val = a->value()->perform(this);
1423
+ ExpressionObj val = a->value()->perform(this);
1418
1424
  bool is_rest_argument = a->is_rest_argument();
1419
1425
  bool is_keyword_argument = a->is_keyword_argument();
1420
1426
 
@@ -1446,7 +1452,7 @@ namespace Sass {
1446
1452
  Arguments_Obj aa = SASS_MEMORY_NEW(Arguments, a->pstate());
1447
1453
  if (a->length() == 0) return aa.detach();
1448
1454
  for (size_t i = 0, L = a->length(); i < L; ++i) {
1449
- Expression_Obj rv = (*a)[i]->perform(this);
1455
+ ExpressionObj rv = (*a)[i]->perform(this);
1450
1456
  Argument* arg = Cast<Argument>(rv);
1451
1457
  if (!(arg->is_rest_argument() || arg->is_keyword_argument())) {
1452
1458
  aa->append(arg);
@@ -1454,8 +1460,8 @@ namespace Sass {
1454
1460
  }
1455
1461
 
1456
1462
  if (a->has_rest_argument()) {
1457
- Expression_Obj rest = a->get_rest_argument()->perform(this);
1458
- Expression_Obj splat = Cast<Argument>(rest)->value()->perform(this);
1463
+ ExpressionObj rest = a->get_rest_argument()->perform(this);
1464
+ ExpressionObj splat = Cast<Argument>(rest)->value()->perform(this);
1459
1465
 
1460
1466
  Sass_Separator separator = SASS_COMMA;
1461
1467
  List* ls = Cast<List>(splat);
@@ -1482,9 +1488,9 @@ namespace Sass {
1482
1488
  }
1483
1489
 
1484
1490
  if (a->has_keyword_argument()) {
1485
- Expression_Obj rv = a->get_keyword_argument()->perform(this);
1491
+ ExpressionObj rv = a->get_keyword_argument()->perform(this);
1486
1492
  Argument* rvarg = Cast<Argument>(rv);
1487
- Expression_Obj kwarg = rvarg->value()->perform(this);
1493
+ ExpressionObj kwarg = rvarg->value()->perform(this);
1488
1494
 
1489
1495
  aa->append(SASS_MEMORY_NEW(Argument, kwarg->pstate(), kwarg, "", false, true));
1490
1496
  }
@@ -1500,12 +1506,12 @@ namespace Sass {
1500
1506
  {
1501
1507
  LOCAL_FLAG(is_in_selector_schema, true);
1502
1508
  // the parser will look for a brace to end the selector
1503
- Expression_Obj sel = s->contents()->perform(this);
1504
- std::string result_str(sel->to_string(options()));
1509
+ ExpressionObj sel = s->contents()->perform(this);
1510
+ sass::string result_str(sel->to_string(options()));
1505
1511
  result_str = unquote(Util::rtrim(result_str));
1506
- char* temp_cstr = sass_copy_c_string(result_str.c_str());
1507
- ctx.strings.push_back(temp_cstr); // attach to context
1508
- Parser p = Parser::from_c_str(temp_cstr, ctx, traces, s->pstate());
1512
+ ItplFile* source = SASS_MEMORY_NEW(ItplFile,
1513
+ result_str.c_str(), s->pstate());
1514
+ Parser p(source, ctx, traces);
1509
1515
 
1510
1516
  // If a schema contains a reference to parent it is already
1511
1517
  // connected to it, so don't connect implicitly anymore
@@ -1528,7 +1534,7 @@ namespace Sass {
1528
1534
  return s;
1529
1535
  }
1530
1536
 
1531
- Pseudo_Selector* Eval::operator()(Pseudo_Selector* pseudo)
1537
+ PseudoSelector* Eval::operator()(PseudoSelector* pseudo)
1532
1538
  {
1533
1539
  // ToDo: should we eval selector?
1534
1540
  return pseudo;