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
@@ -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);