sassc 2.3.0 → 2.4.0

Sign up to get free protection for your applications and to get access to all the features.
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
@@ -34,7 +34,7 @@ namespace Sass {
34
34
 
35
35
  Env* environment();
36
36
  EnvStack& env_stack();
37
- const std::string cwd();
37
+ const sass::string cwd();
38
38
  CalleeStack& callee_stack();
39
39
  struct Sass_Inspect_Options& options();
40
40
  struct Sass_Compiler* compiler();
@@ -43,13 +43,13 @@ namespace Sass {
43
43
  Expression* operator()(Block*);
44
44
  Expression* operator()(Assignment*);
45
45
  Expression* operator()(If*);
46
- Expression* operator()(For*);
47
- Expression* operator()(Each*);
48
- Expression* operator()(While*);
46
+ Expression* operator()(ForRule*);
47
+ Expression* operator()(EachRule*);
48
+ Expression* operator()(WhileRule*);
49
49
  Expression* operator()(Return*);
50
- Expression* operator()(Warning*);
51
- Expression* operator()(Error*);
52
- Expression* operator()(Debug*);
50
+ Expression* operator()(WarningRule*);
51
+ Expression* operator()(ErrorRule*);
52
+ Expression* operator()(DebugRule*);
53
53
 
54
54
  Expression* operator()(List*);
55
55
  Expression* operator()(Map*);
@@ -67,9 +67,9 @@ namespace Sass {
67
67
  Media_Query* operator()(Media_Query*);
68
68
  Expression* operator()(Media_Query_Expression*);
69
69
  Expression* operator()(At_Root_Query*);
70
- Expression* operator()(Supports_Operator*);
71
- Expression* operator()(Supports_Negation*);
72
- Expression* operator()(Supports_Declaration*);
70
+ Expression* operator()(SupportsOperation*);
71
+ Expression* operator()(SupportsNegation*);
72
+ Expression* operator()(SupportsDeclaration*);
73
73
  Expression* operator()(Supports_Interpolation*);
74
74
  Expression* operator()(Null*);
75
75
  Expression* operator()(Argument*);
@@ -82,14 +82,14 @@ namespace Sass {
82
82
  CompoundSelector* operator()(CompoundSelector*);
83
83
  SelectorComponent* operator()(SelectorComponent*);
84
84
  SimpleSelector* operator()(SimpleSelector* s);
85
- Pseudo_Selector* operator()(Pseudo_Selector* s);
85
+ PseudoSelector* operator()(PseudoSelector* s);
86
86
 
87
87
  // they don't have any specific implementation (yet)
88
- Id_Selector* operator()(Id_Selector* s) { return s; };
89
- Class_Selector* operator()(Class_Selector* s) { return s; };
90
- Type_Selector* operator()(Type_Selector* s) { return s; };
91
- Attribute_Selector* operator()(Attribute_Selector* s) { return s; };
92
- Placeholder_Selector* operator()(Placeholder_Selector* s) { return s; };
88
+ IDSelector* operator()(IDSelector* s) { return s; };
89
+ ClassSelector* operator()(ClassSelector* s) { return s; };
90
+ TypeSelector* operator()(TypeSelector* s) { return s; };
91
+ AttributeSelector* operator()(AttributeSelector* s) { return s; };
92
+ PlaceholderSelector* operator()(PlaceholderSelector* s) { return s; };
93
93
 
94
94
  // actual evaluated selectors
95
95
  SelectorList* operator()(Selector_Schema*);
@@ -101,7 +101,7 @@ namespace Sass {
101
101
  { return Cast<Expression>(x); }
102
102
 
103
103
  private:
104
- void interpolation(Context& ctx, std::string& res, Expression_Obj ex, bool into_quotes, bool was_itpl = false);
104
+ void interpolation(Context& ctx, sass::string& res, ExpressionObj ex, bool into_quotes, bool was_itpl = false);
105
105
 
106
106
  };
107
107
 
@@ -10,7 +10,7 @@ namespace Sass {
10
10
 
11
11
  SelectorList* Eval::operator()(SelectorList* s)
12
12
  {
13
- std::vector<SelectorListObj> rv;
13
+ sass::vector<SelectorListObj> rv;
14
14
  SelectorListObj sl = SASS_MEMORY_NEW(SelectorList, s->pstate());
15
15
  for (size_t i = 0, iL = s->length(); i < iL; ++i) {
16
16
  rv.push_back(operator()(s->get(i)));
@@ -19,7 +19,7 @@ namespace Sass {
19
19
  // we should actually permutate parent first
20
20
  // but here we have permutated the selector first
21
21
  size_t round = 0;
22
- while (round != std::string::npos) {
22
+ while (round != sass::string::npos) {
23
23
  bool abort = true;
24
24
  for (size_t i = 0, iL = rv.size(); i < iL; ++i) {
25
25
  if (rv[i]->length() > round) {
@@ -28,7 +28,7 @@ namespace Sass {
28
28
  }
29
29
  }
30
30
  if (abort) {
31
- round = std::string::npos;
31
+ round = sass::string::npos;
32
32
  }
33
33
  else {
34
34
  ++round;
@@ -13,6 +13,7 @@
13
13
  #include "context.hpp"
14
14
  #include "parser.hpp"
15
15
  #include "sass_functions.hpp"
16
+ #include "error_handling.hpp"
16
17
 
17
18
  namespace Sass {
18
19
 
@@ -162,7 +163,7 @@ namespace Sass {
162
163
  return bb.detach();
163
164
  }
164
165
 
165
- Statement* Expand::operator()(Ruleset* r)
166
+ Statement* Expand::operator()(StyleRule* r)
166
167
  {
167
168
  LOCAL_FLAG(old_at_root_without_rule, at_root_without_rule);
168
169
 
@@ -188,9 +189,9 @@ namespace Sass {
188
189
  if (r->schema()) {
189
190
  SelectorListObj sel = eval(r->schema());
190
191
  r->selector(sel);
191
- bool chroot = sel->has_real_parent_ref();
192
192
  for (auto complex : sel->elements()) {
193
- complex->chroots(chroot);
193
+ // ToDo: maybe we can get rid of chroots?
194
+ complex->chroots(complex->has_real_parent_ref());
194
195
  }
195
196
 
196
197
  }
@@ -213,7 +214,7 @@ namespace Sass {
213
214
  if (r->block()) blk = operator()(r->block());
214
215
  popFromOriginalStack();
215
216
  popFromSelectorStack();
216
- Ruleset* rr = SASS_MEMORY_NEW(Ruleset,
217
+ StyleRule* rr = SASS_MEMORY_NEW(StyleRule,
217
218
  r->pstate(),
218
219
  evaled,
219
220
  blk);
@@ -228,21 +229,21 @@ namespace Sass {
228
229
  return rr;
229
230
  }
230
231
 
231
- Statement* Expand::operator()(Supports_Block* f)
232
+ Statement* Expand::operator()(SupportsRule* f)
232
233
  {
233
- Expression_Obj condition = f->condition()->perform(&eval);
234
- Supports_Block_Obj ff = SASS_MEMORY_NEW(Supports_Block,
234
+ ExpressionObj condition = f->condition()->perform(&eval);
235
+ SupportsRuleObj ff = SASS_MEMORY_NEW(SupportsRule,
235
236
  f->pstate(),
236
- Cast<Supports_Condition>(condition),
237
+ Cast<SupportsCondition>(condition),
237
238
  operator()(f->block()));
238
239
  return ff.detach();
239
240
  }
240
241
 
241
- std::vector<CssMediaQuery_Obj> Expand::mergeMediaQueries(
242
- const std::vector<CssMediaQuery_Obj>& lhs,
243
- const std::vector<CssMediaQuery_Obj>& rhs)
242
+ sass::vector<CssMediaQuery_Obj> Expand::mergeMediaQueries(
243
+ const sass::vector<CssMediaQuery_Obj>& lhs,
244
+ const sass::vector<CssMediaQuery_Obj>& rhs)
244
245
  {
245
- std::vector<CssMediaQuery_Obj> queries;
246
+ sass::vector<CssMediaQuery_Obj> queries;
246
247
  for (CssMediaQuery_Obj query1 : lhs) {
247
248
  for (CssMediaQuery_Obj query2 : rhs) {
248
249
  CssMediaQuery_Obj result = query1->merge(query2);
@@ -256,14 +257,14 @@ namespace Sass {
256
257
 
257
258
  Statement* Expand::operator()(MediaRule* m)
258
259
  {
259
- Expression_Obj mq = eval(m->schema());
260
- std::string str_mq(mq->to_css(ctx.c_options));
261
- char* str = sass_copy_c_string(str_mq.c_str());
262
- ctx.strings.push_back(str);
263
- Parser parser(Parser::from_c_str(str, ctx, traces, mq->pstate()));
260
+ ExpressionObj mq = eval(m->schema());
261
+ sass::string str_mq(mq->to_css(ctx.c_options));
262
+ ItplFile* source = SASS_MEMORY_NEW(ItplFile,
263
+ str_mq.c_str(), m->pstate());
264
+ Parser parser(source, ctx, traces);
264
265
  // Create a new CSS only representation of the media rule
265
266
  CssMediaRuleObj css = SASS_MEMORY_NEW(CssMediaRule, m->pstate(), m->block());
266
- std::vector<CssMediaQuery_Obj> parsed = parser.parseCssMediaQueries();
267
+ sass::vector<CssMediaQuery_Obj> parsed = parser.parseCssMediaQueries();
267
268
  if (mediaStack.size() && mediaStack.back()) {
268
269
  auto& parent = mediaStack.back()->elements();
269
270
  css->concat(mergeMediaQueries(parent, parsed));
@@ -278,10 +279,10 @@ namespace Sass {
278
279
 
279
280
  }
280
281
 
281
- Statement* Expand::operator()(At_Root_Block* a)
282
+ Statement* Expand::operator()(AtRootRule* a)
282
283
  {
283
284
  Block_Obj ab = a->block();
284
- Expression_Obj ae = a->expression();
285
+ ExpressionObj ae = a->expression();
285
286
 
286
287
  if (ae) ae = ae->perform(&eval);
287
288
  else ae = SASS_MEMORY_NEW(At_Root_Query, a->pstate());
@@ -292,14 +293,14 @@ namespace Sass {
292
293
  ;
293
294
 
294
295
  Block_Obj bb = ab ? operator()(ab) : NULL;
295
- At_Root_Block_Obj aa = SASS_MEMORY_NEW(At_Root_Block,
296
+ AtRootRuleObj aa = SASS_MEMORY_NEW(AtRootRule,
296
297
  a->pstate(),
297
298
  bb,
298
299
  Cast<At_Root_Query>(ae));
299
300
  return aa.detach();
300
301
  }
301
302
 
302
- Statement* Expand::operator()(Directive* a)
303
+ Statement* Expand::operator()(AtRule* a)
303
304
  {
304
305
  LOCAL_FLAG(in_keyframes, a->is_keyframes());
305
306
  Block* ab = a->block();
@@ -310,7 +311,7 @@ namespace Sass {
310
311
  if (as) as = eval(as);
311
312
  popNullSelector();
312
313
  Block* bb = ab ? operator()(ab) : NULL;
313
- Directive* aa = SASS_MEMORY_NEW(Directive,
314
+ AtRule* aa = SASS_MEMORY_NEW(AtRule,
314
315
  a->pstate(),
315
316
  a->keyword(),
316
317
  as,
@@ -323,14 +324,14 @@ namespace Sass {
323
324
  {
324
325
  Block_Obj ab = d->block();
325
326
  String_Obj old_p = d->property();
326
- Expression_Obj prop = old_p->perform(&eval);
327
+ ExpressionObj prop = old_p->perform(&eval);
327
328
  String_Obj new_p = Cast<String>(prop);
328
329
  // we might get a color back
329
330
  if (!new_p) {
330
- std::string str(prop->to_string(ctx.c_options));
331
+ sass::string str(prop->to_string(ctx.c_options));
331
332
  new_p = SASS_MEMORY_NEW(String_Constant, old_p->pstate(), str);
332
333
  }
333
- Expression_Obj value = d->value();
334
+ ExpressionObj value = d->value();
334
335
  if (value) value = value->perform(&eval);
335
336
  Block_Obj bb = ab ? operator()(ab) : NULL;
336
337
  if (!bb) {
@@ -356,11 +357,17 @@ namespace Sass {
356
357
  Statement* Expand::operator()(Assignment* a)
357
358
  {
358
359
  Env* env = environment();
359
- const std::string& var(a->variable());
360
+ const sass::string& var(a->variable());
360
361
  if (a->is_global()) {
362
+ if (!env->has_global(var)) {
363
+ deprecated(
364
+ "!global assignments won't be able to declare new variables in future versions.",
365
+ "Consider adding `" + var + ": null` at the top level.",
366
+ true, a->pstate());
367
+ }
361
368
  if (a->is_default()) {
362
369
  if (env->has_global(var)) {
363
- Expression_Obj e = Cast<Expression>(env->get_global(var));
370
+ ExpressionObj e = Cast<Expression>(env->get_global(var));
364
371
  if (!e || e->concrete_type() == Expression::NULL_VAL) {
365
372
  env->set_global(var, a->value()->perform(&eval));
366
373
  }
@@ -379,7 +386,7 @@ namespace Sass {
379
386
  while (cur && cur->is_lexical()) {
380
387
  if (cur->has_local(var)) {
381
388
  if (AST_Node_Obj node = cur->get_local(var)) {
382
- Expression_Obj e = Cast<Expression>(node);
389
+ ExpressionObj e = Cast<Expression>(node);
383
390
  if (!e || e->concrete_type() == Expression::NULL_VAL) {
384
391
  cur->set_local(var, a->value()->perform(&eval));
385
392
  }
@@ -395,7 +402,7 @@ namespace Sass {
395
402
  }
396
403
  else if (env->has_global(var)) {
397
404
  if (AST_Node_Obj node = env->get_global(var)) {
398
- Expression_Obj e = Cast<Expression>(node);
405
+ ExpressionObj e = Cast<Expression>(node);
399
406
  if (!e || e->concrete_type() == Expression::NULL_VAL) {
400
407
  env->set_global(var, a->value()->perform(&eval));
401
408
  }
@@ -418,7 +425,7 @@ namespace Sass {
418
425
  {
419
426
  Import_Obj result = SASS_MEMORY_NEW(Import, imp->pstate());
420
427
  if (imp->import_queries() && imp->import_queries()->size()) {
421
- Expression_Obj ex = imp->import_queries()->perform(&eval);
428
+ ExpressionObj ex = imp->import_queries()->perform(&eval);
422
429
  result->import_queries(Cast<List>(ex));
423
430
  }
424
431
  for ( size_t i = 0, S = imp->urls().size(); i < S; ++i) {
@@ -450,7 +457,7 @@ namespace Sass {
450
457
  block_stack.back()->append(trace);
451
458
  block_stack.push_back(trace_block);
452
459
 
453
- const std::string& abs_path(i->resource().abs_path);
460
+ const sass::string& abs_path(i->resource().abs_path);
454
461
  append_block(ctx.sheets.at(abs_path).root);
455
462
  sass_delete_import(ctx.import_stack.back());
456
463
  ctx.import_stack.pop_back();
@@ -459,21 +466,21 @@ namespace Sass {
459
466
  return 0;
460
467
  }
461
468
 
462
- Statement* Expand::operator()(Warning* w)
469
+ Statement* Expand::operator()(WarningRule* w)
463
470
  {
464
471
  // eval handles this too, because warnings may occur in functions
465
472
  w->perform(&eval);
466
473
  return 0;
467
474
  }
468
475
 
469
- Statement* Expand::operator()(Error* e)
476
+ Statement* Expand::operator()(ErrorRule* e)
470
477
  {
471
478
  // eval handles this too, because errors may occur in functions
472
479
  e->perform(&eval);
473
480
  return 0;
474
481
  }
475
482
 
476
- Statement* Expand::operator()(Debug* d)
483
+ Statement* Expand::operator()(DebugRule* d)
477
484
  {
478
485
  // eval handles this too, because warnings may occur in functions
479
486
  d->perform(&eval);
@@ -499,7 +506,7 @@ namespace Sass {
499
506
  Env env(environment(), true);
500
507
  env_stack.push_back(&env);
501
508
  call_stack.push_back(i);
502
- Expression_Obj rv = i->predicate()->perform(&eval);
509
+ ExpressionObj rv = i->predicate()->perform(&eval);
503
510
  if (*rv) {
504
511
  append_block(i->block());
505
512
  }
@@ -514,15 +521,15 @@ namespace Sass {
514
521
 
515
522
  // For does not create a new env scope
516
523
  // But iteration vars are reset afterwards
517
- Statement* Expand::operator()(For* f)
524
+ Statement* Expand::operator()(ForRule* f)
518
525
  {
519
- std::string variable(f->variable());
520
- Expression_Obj low = f->lower_bound()->perform(&eval);
526
+ sass::string variable(f->variable());
527
+ ExpressionObj low = f->lower_bound()->perform(&eval);
521
528
  if (low->concrete_type() != Expression::NUMBER) {
522
529
  traces.push_back(Backtrace(low->pstate()));
523
530
  throw Exception::TypeMismatch(traces, *low, "integer");
524
531
  }
525
- Expression_Obj high = f->upper_bound()->perform(&eval);
532
+ ExpressionObj high = f->upper_bound()->perform(&eval);
526
533
  if (high->concrete_type() != Expression::NUMBER) {
527
534
  traces.push_back(Backtrace(high->pstate()));
528
535
  throw Exception::TypeMismatch(traces, *high, "integer");
@@ -531,7 +538,7 @@ namespace Sass {
531
538
  Number_Obj sass_end = Cast<Number>(high);
532
539
  // check if units are valid for sequence
533
540
  if (sass_start->unit() != sass_end->unit()) {
534
- std::stringstream msg; msg << "Incompatible units: '"
541
+ sass::ostream msg; msg << "Incompatible units: '"
535
542
  << sass_start->unit() << "' and '"
536
543
  << sass_end->unit() << "'.";
537
544
  error(msg.str(), low->pstate(), traces);
@@ -569,17 +576,17 @@ namespace Sass {
569
576
 
570
577
  // Eval does not create a new env scope
571
578
  // But iteration vars are reset afterwards
572
- Statement* Expand::operator()(Each* e)
579
+ Statement* Expand::operator()(EachRule* e)
573
580
  {
574
- std::vector<std::string> variables(e->variables());
575
- Expression_Obj expr = e->list()->perform(&eval);
581
+ sass::vector<sass::string> variables(e->variables());
582
+ ExpressionObj expr = e->list()->perform(&eval);
576
583
  List_Obj list;
577
584
  Map_Obj map;
578
585
  if (expr->concrete_type() == Expression::MAP) {
579
586
  map = Cast<Map>(expr);
580
587
  }
581
588
  else if (SelectorList * ls = Cast<SelectorList>(expr)) {
582
- Expression_Obj rv = Listize::perform(ls);
589
+ ExpressionObj rv = Listize::perform(ls);
583
590
  list = Cast<List>(rv);
584
591
  }
585
592
  else if (expr->concrete_type() != Expression::LIST) {
@@ -597,8 +604,8 @@ namespace Sass {
597
604
 
598
605
  if (map) {
599
606
  for (auto key : map->keys()) {
600
- Expression_Obj k = key->perform(&eval);
601
- Expression_Obj v = map->at(key)->perform(&eval);
607
+ ExpressionObj k = key->perform(&eval);
608
+ ExpressionObj v = map->at(key)->perform(&eval);
602
609
 
603
610
  if (variables.size() == 1) {
604
611
  List_Obj variable = SASS_MEMORY_NEW(List, map->pstate(), 2, SASS_SPACE);
@@ -618,7 +625,7 @@ namespace Sass {
618
625
  list = Cast<List>(list);
619
626
  }
620
627
  for (size_t i = 0, L = list->length(); i < L; ++i) {
621
- Expression_Obj item = list->at(i);
628
+ ExpressionObj item = list->at(i);
622
629
  // unwrap value if the expression is an argument
623
630
  if (Argument_Obj arg = Cast<Argument>(item)) item = arg->value();
624
631
  // check if we got passed a list of args (investigate)
@@ -629,17 +636,16 @@ namespace Sass {
629
636
  env.set_local(variables[0], var);
630
637
  } else {
631
638
  for (size_t j = 0, K = variables.size(); j < K; ++j) {
632
- Expression_Obj res = j >= scalars->length()
639
+ env.set_local(variables[j], j >= scalars->length()
633
640
  ? SASS_MEMORY_NEW(Null, expr->pstate())
634
- : (*scalars)[j]->perform(&eval);
635
- env.set_local(variables[j], res);
641
+ : (*scalars)[j]->perform(&eval));
636
642
  }
637
643
  }
638
644
  } else {
639
645
  if (variables.size() > 0) {
640
646
  env.set_local(variables.at(0), item);
641
647
  for (size_t j = 1, K = variables.size(); j < K; ++j) {
642
- Expression_Obj res = SASS_MEMORY_NEW(Null, expr->pstate());
648
+ ExpressionObj res = SASS_MEMORY_NEW(Null, expr->pstate());
643
649
  env.set_local(variables[j], res);
644
650
  }
645
651
  }
@@ -652,14 +658,14 @@ namespace Sass {
652
658
  return 0;
653
659
  }
654
660
 
655
- Statement* Expand::operator()(While* w)
661
+ Statement* Expand::operator()(WhileRule* w)
656
662
  {
657
- Expression_Obj pred = w->predicate();
663
+ ExpressionObj pred = w->predicate();
658
664
  Block* body = w->block();
659
665
  Env env(environment(), true);
660
666
  env_stack.push_back(&env);
661
667
  call_stack.push_back(w);
662
- Expression_Obj cond = pred->perform(&eval);
668
+ ExpressionObj cond = pred->perform(&eval);
663
669
  while (!cond->is_false()) {
664
670
  append_block(body);
665
671
  cond = pred->perform(&eval);
@@ -698,7 +704,7 @@ namespace Sass {
698
704
 
699
705
  if (compound->length() != 1) {
700
706
 
701
- std::stringstream sels; bool addComma = false;
707
+ sass::ostream sels; bool addComma = false;
702
708
  sels << "Compound selectors may no longer be extended.\n";
703
709
  sels << "Consider `@extend ";
704
710
  for (auto sel : compound->elements()) {
@@ -769,7 +775,7 @@ namespace Sass {
769
775
  recursions ++;
770
776
 
771
777
  Env* env = environment();
772
- std::string full_name(c->name() + "[m]");
778
+ sass::string full_name(c->name() + "[m]");
773
779
  if (!env->has(full_name)) {
774
780
  error("no mixin named " + c->name(), c->pstate(), traces);
775
781
  }
@@ -780,15 +786,15 @@ namespace Sass {
780
786
  if (c->block() && c->name() != "@content" && !body->has_content()) {
781
787
  error("Mixin \"" + c->name() + "\" does not accept a content block.", c->pstate(), traces);
782
788
  }
783
- Expression_Obj rv = c->arguments()->perform(&eval);
789
+ ExpressionObj rv = c->arguments()->perform(&eval);
784
790
  Arguments_Obj args = Cast<Arguments>(rv);
785
- std::string msg(", in mixin `" + c->name() + "`");
791
+ sass::string msg(", in mixin `" + c->name() + "`");
786
792
  traces.push_back(Backtrace(c->pstate(), msg));
787
793
  ctx.callee_stack.push_back({
788
794
  c->name().c_str(),
789
- c->pstate().path,
790
- c->pstate().line + 1,
791
- c->pstate().column + 1,
795
+ c->pstate().getPath(),
796
+ c->pstate().getLine(),
797
+ c->pstate().getColumn(),
792
798
  SASS_CALLEE_MIXIN,
793
799
  { env }
794
800
  });
@@ -809,7 +815,7 @@ namespace Sass {
809
815
  new_env.local_frame()["@content[m]"] = thunk;
810
816
  }
811
817
 
812
- bind(std::string("Mixin"), c->name(), params, args, &new_env, &eval, traces);
818
+ bind(sass::string("Mixin"), c->name(), params, args, &new_env, &eval, traces);
813
819
 
814
820
  Block_Obj trace_block = SASS_MEMORY_NEW(Block, c->pstate());
815
821
  Trace_Obj trace = SASS_MEMORY_NEW(Trace, c->pstate(), c->name(), trace_block);
@@ -820,7 +826,7 @@ namespace Sass {
820
826
  }
821
827
  block_stack.push_back(trace_block);
822
828
  for (auto bb : body->elements()) {
823
- if (Ruleset* r = Cast<Ruleset>(bb)) {
829
+ if (StyleRule* r = Cast<StyleRule>(bb)) {
824
830
  r->is_root(trace_block->is_root());
825
831
  }
826
832
  Statement_Obj ith = bb->perform(this);