sassc 1.11.1 → 1.11.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (85) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +2 -2
  3. data/README.md +3 -2
  4. data/ext/libsass/Makefile.conf +2 -1
  5. data/ext/libsass/appveyor.yml +10 -5
  6. data/ext/libsass/docs/dev-ast-memory.md +223 -0
  7. data/ext/libsass/include/sass/base.h +2 -0
  8. data/ext/libsass/script/bootstrap +7 -4
  9. data/ext/libsass/script/ci-build-libsass +3 -3
  10. data/ext/libsass/script/ci-install-compiler +2 -0
  11. data/ext/libsass/script/ci-report-coverage +2 -1
  12. data/ext/libsass/script/test-leaks.pl +103 -0
  13. data/ext/libsass/src/ast.cpp +621 -495
  14. data/ext/libsass/src/ast.hpp +801 -367
  15. data/ext/libsass/src/ast_def_macros.hpp +5 -5
  16. data/ext/libsass/src/ast_fwd_decl.hpp +312 -14
  17. data/ext/libsass/src/bind.cpp +54 -51
  18. data/ext/libsass/src/bind.hpp +3 -7
  19. data/ext/libsass/src/check_nesting.cpp +117 -120
  20. data/ext/libsass/src/check_nesting.hpp +38 -34
  21. data/ext/libsass/src/color_maps.cpp +3 -3
  22. data/ext/libsass/src/color_maps.hpp +3 -3
  23. data/ext/libsass/src/context.cpp +33 -34
  24. data/ext/libsass/src/context.hpp +12 -14
  25. data/ext/libsass/src/cssize.cpp +200 -228
  26. data/ext/libsass/src/cssize.hpp +49 -49
  27. data/ext/libsass/src/debugger.hpp +260 -241
  28. data/ext/libsass/src/emitter.cpp +6 -6
  29. data/ext/libsass/src/emitter.hpp +7 -7
  30. data/ext/libsass/src/environment.cpp +2 -2
  31. data/ext/libsass/src/environment.hpp +0 -2
  32. data/ext/libsass/src/error_handling.cpp +5 -5
  33. data/ext/libsass/src/error_handling.hpp +12 -12
  34. data/ext/libsass/src/eval.cpp +412 -401
  35. data/ext/libsass/src/eval.hpp +61 -62
  36. data/ext/libsass/src/expand.cpp +223 -204
  37. data/ext/libsass/src/expand.hpp +42 -42
  38. data/ext/libsass/src/extend.cpp +198 -201
  39. data/ext/libsass/src/extend.hpp +12 -14
  40. data/ext/libsass/src/file.hpp +4 -5
  41. data/ext/libsass/src/functions.cpp +413 -418
  42. data/ext/libsass/src/functions.hpp +7 -10
  43. data/ext/libsass/src/inspect.cpp +115 -109
  44. data/ext/libsass/src/inspect.hpp +69 -69
  45. data/ext/libsass/src/listize.cpp +31 -33
  46. data/ext/libsass/src/listize.hpp +8 -10
  47. data/ext/libsass/src/memory/SharedPtr.cpp +116 -0
  48. data/ext/libsass/src/memory/SharedPtr.hpp +202 -0
  49. data/ext/libsass/src/node.cpp +45 -43
  50. data/ext/libsass/src/node.hpp +15 -15
  51. data/ext/libsass/src/operation.hpp +136 -136
  52. data/ext/libsass/src/output.cpp +48 -49
  53. data/ext/libsass/src/output.hpp +14 -14
  54. data/ext/libsass/src/parser.cpp +530 -554
  55. data/ext/libsass/src/parser.hpp +91 -96
  56. data/ext/libsass/src/prelexer.cpp +13 -10
  57. data/ext/libsass/src/remove_placeholders.cpp +25 -21
  58. data/ext/libsass/src/remove_placeholders.hpp +7 -7
  59. data/ext/libsass/src/sass2scss.cpp +2 -1
  60. data/ext/libsass/src/sass_context.cpp +125 -107
  61. data/ext/libsass/src/sass_context.hpp +1 -1
  62. data/ext/libsass/src/sass_util.hpp +5 -5
  63. data/ext/libsass/src/sass_values.cpp +27 -27
  64. data/ext/libsass/src/source_map.cpp +2 -2
  65. data/ext/libsass/src/source_map.hpp +2 -2
  66. data/ext/libsass/src/subset_map.cpp +57 -0
  67. data/ext/libsass/src/subset_map.hpp +8 -76
  68. data/ext/libsass/src/to_c.cpp +13 -13
  69. data/ext/libsass/src/to_c.hpp +14 -14
  70. data/ext/libsass/src/to_value.cpp +20 -20
  71. data/ext/libsass/src/to_value.hpp +20 -21
  72. data/ext/libsass/src/util.cpp +55 -88
  73. data/ext/libsass/src/util.hpp +9 -13
  74. data/ext/libsass/src/values.cpp +27 -26
  75. data/ext/libsass/src/values.hpp +2 -2
  76. data/ext/libsass/test/test_subset_map.cpp +69 -69
  77. data/ext/libsass/win/libsass.targets +3 -2
  78. data/ext/libsass/win/libsass.vcxproj.filters +9 -6
  79. data/lib/sassc/version.rb +1 -1
  80. data/sassc.gemspec +0 -1
  81. data/test/native_test.rb +1 -1
  82. metadata +7 -5
  83. data/ext/libsass/src/ast_factory.hpp +0 -92
  84. data/ext/libsass/src/memory_manager.cpp +0 -77
  85. data/ext/libsass/src/memory_manager.hpp +0 -48
@@ -7,42 +7,41 @@
7
7
 
8
8
  namespace Sass {
9
9
 
10
- class To_Value : public Operation_CRTP<Value*, To_Value> {
10
+ class To_Value : public Operation_CRTP<Value_Ptr, To_Value> {
11
11
 
12
- Value* fallback_impl(AST_Node* n);
12
+ Value_Ptr fallback_impl(AST_Node_Ptr n);
13
13
 
14
14
  private:
15
15
 
16
16
  Context& ctx;
17
- Memory_Manager& mem;
18
17
 
19
18
  public:
20
19
 
21
- To_Value(Context& ctx, Memory_Manager& mem)
22
- : ctx(ctx), mem(mem)
20
+ To_Value(Context& ctx)
21
+ : ctx(ctx)
23
22
  { }
24
23
  ~To_Value() { }
25
- using Operation<Value*>::operator();
26
-
27
- Value* operator()(Argument*);
28
- Value* operator()(Boolean*);
29
- Value* operator()(Number*);
30
- Value* operator()(Color*);
31
- Value* operator()(String_Constant*);
32
- Value* operator()(String_Quoted*);
33
- Value* operator()(Custom_Warning*);
34
- Value* operator()(Custom_Error*);
35
- Value* operator()(List*);
36
- Value* operator()(Map*);
37
- Value* operator()(Null*);
24
+ using Operation<Value_Ptr>::operator();
25
+
26
+ Value_Ptr operator()(Argument_Ptr);
27
+ Value_Ptr operator()(Boolean_Ptr);
28
+ Value_Ptr operator()(Number_Ptr);
29
+ Value_Ptr operator()(Color_Ptr);
30
+ Value_Ptr operator()(String_Constant_Ptr);
31
+ Value_Ptr operator()(String_Quoted_Ptr);
32
+ Value_Ptr operator()(Custom_Warning_Ptr);
33
+ Value_Ptr operator()(Custom_Error_Ptr);
34
+ Value_Ptr operator()(List_Ptr);
35
+ Value_Ptr operator()(Map_Ptr);
36
+ Value_Ptr operator()(Null_Ptr);
38
37
 
39
38
  // convert to string via `To_String`
40
- Value* operator()(CommaSequence_Selector*);
41
- Value* operator()(Binary_Expression*);
39
+ Value_Ptr operator()(Selector_List_Ptr);
40
+ Value_Ptr operator()(Binary_Expression_Ptr);
42
41
 
43
42
  // fallback throws error
44
43
  template <typename U>
45
- Value* fallback(U x) { return fallback_impl(x); }
44
+ Value_Ptr fallback(U x) { return fallback_impl(x); }
46
45
  };
47
46
 
48
47
  }
@@ -438,30 +438,15 @@ namespace Sass {
438
438
  return normalized[0] == '.' ? normalized.insert(0, prefix) : normalized;
439
439
  }
440
440
 
441
- // compress a color sixtuplet if possible
442
- // input: "#CC9900" -> output: "#C90"
443
- std::string normalize_sixtuplet(const std::string& col) {
444
- if(
445
- col.substr(1, 1) == col.substr(2, 1) &&
446
- col.substr(3, 1) == col.substr(4, 1) &&
447
- col.substr(5, 1) == col.substr(6, 1)
448
- ) {
449
- return std::string("#" + col.substr(1, 1)
450
- + col.substr(3, 1)
451
- + col.substr(5, 1));
452
- } else {
453
- return std::string(col);
454
- }
455
- }
456
-
457
- bool isPrintable(Ruleset* r, Sass_Output_Style style) {
441
+ bool isPrintable(Ruleset_Ptr r, Sass_Output_Style style) {
458
442
  if (r == NULL) {
459
443
  return false;
460
444
  }
461
445
 
462
- Block* b = r->block();
446
+ Block_Obj b = r->block();
463
447
 
464
- bool hasSelectors = static_cast<CommaSequence_Selector*>(r->selector())->length() > 0;
448
+ Selector_List_Ptr sl = SASS_MEMORY_CAST(Selector_List, r->selector());
449
+ bool hasSelectors = sl ? sl->length() > 0 : false;
465
450
 
466
451
  if (!hasSelectors) {
467
452
  return false;
@@ -470,17 +455,17 @@ namespace Sass {
470
455
  bool hasDeclarations = false;
471
456
  bool hasPrintableChildBlocks = false;
472
457
  for (size_t i = 0, L = b->length(); i < L; ++i) {
473
- Statement* stm = (*b)[i];
474
- if (dynamic_cast<Directive*>(stm)) {
458
+ Statement_Obj stm = b->at(i);
459
+ if (dynamic_cast<Directive_Ptr>(&stm)) {
475
460
  return true;
476
- } else if (Declaration* d = dynamic_cast<Declaration*>(stm)) {
461
+ } else if (Declaration_Ptr d = dynamic_cast<Declaration_Ptr>(&stm)) {
477
462
  return isPrintable(d, style);
478
- } else if (dynamic_cast<Has_Block*>(stm)) {
479
- Block* pChildBlock = ((Has_Block*)stm)->block();
480
- if (isPrintable(pChildBlock, style)) {
463
+ } else if (dynamic_cast<Has_Block_Ptr>(&stm)) {
464
+ Block_Obj pChildBlock = ((Has_Block_Ptr)&stm)->block();
465
+ if (isPrintable(&pChildBlock, style)) {
481
466
  hasPrintableChildBlocks = true;
482
467
  }
483
- } else if (Comment* c = dynamic_cast<Comment*>(stm)) {
468
+ } else if (Comment_Ptr c = dynamic_cast<Comment_Ptr>(&stm)) {
484
469
  // keep for uncompressed
485
470
  if (style != COMPRESSED) {
486
471
  hasDeclarations = true;
@@ -501,43 +486,43 @@ namespace Sass {
501
486
  return false;
502
487
  }
503
488
 
504
- bool isPrintable(String_Constant* s, Sass_Output_Style style)
489
+ bool isPrintable(String_Constant_Ptr s, Sass_Output_Style style)
505
490
  {
506
491
  return ! s->value().empty();
507
492
  }
508
493
 
509
- bool isPrintable(String_Quoted* s, Sass_Output_Style style)
494
+ bool isPrintable(String_Quoted_Ptr s, Sass_Output_Style style)
510
495
  {
511
496
  return true;
512
497
  }
513
498
 
514
- bool isPrintable(Declaration* d, Sass_Output_Style style)
499
+ bool isPrintable(Declaration_Ptr d, Sass_Output_Style style)
515
500
  {
516
- Expression* val = d->value();
517
- if (String_Quoted* sq = dynamic_cast<String_Quoted*>(val)) return isPrintable(sq, style);
518
- if (String_Constant* sc = dynamic_cast<String_Constant*>(val)) return isPrintable(sc, style);
501
+ Expression_Obj val = d->value();
502
+ if (String_Quoted_Obj sq = SASS_MEMORY_CAST(String_Quoted, val)) return isPrintable(&sq, style);
503
+ if (String_Constant_Obj sc = SASS_MEMORY_CAST(String_Constant, val)) return isPrintable(&sc, style);
519
504
  return true;
520
505
  }
521
506
 
522
- bool isPrintable(Supports_Block* f, Sass_Output_Style style) {
507
+ bool isPrintable(Supports_Block_Ptr f, Sass_Output_Style style) {
523
508
  if (f == NULL) {
524
509
  return false;
525
510
  }
526
511
 
527
- Block* b = f->block();
512
+ Block_Obj b = f->block();
528
513
 
529
- // bool hasSelectors = f->selector() && static_cast<CommaSequence_Selector*>(f->selector())->length() > 0;
514
+ // bool hasSelectors = f->selector() && static_cast<Selector_List_Ptr>(f->selector())->length() > 0;
530
515
 
531
516
  bool hasDeclarations = false;
532
517
  bool hasPrintableChildBlocks = false;
533
518
  for (size_t i = 0, L = b->length(); i < L; ++i) {
534
- Statement* stm = (*b)[i];
535
- if (typeid(*stm) == typeid(Declaration) || typeid(*stm) == typeid(Directive)) {
519
+ Statement_Obj stm = b->at(i);
520
+ if (dynamic_cast<Declaration_Ptr>(&stm) || dynamic_cast<Directive_Ptr>(&stm)) {
536
521
  hasDeclarations = true;
537
522
  }
538
- else if (dynamic_cast<Has_Block*>(stm)) {
539
- Block* pChildBlock = ((Has_Block*)stm)->block();
540
- if (isPrintable(pChildBlock, style)) {
523
+ else if (dynamic_cast<Has_Block_Ptr>(&stm)) {
524
+ Block_Obj pChildBlock = ((Has_Block_Ptr)&stm)->block();
525
+ if (isPrintable(&pChildBlock, style)) {
541
526
  hasPrintableChildBlocks = true;
542
527
  }
543
528
  }
@@ -550,47 +535,47 @@ namespace Sass {
550
535
  return false;
551
536
  }
552
537
 
553
- bool isPrintable(Media_Block* m, Sass_Output_Style style)
538
+ bool isPrintable(Media_Block_Ptr m, Sass_Output_Style style)
554
539
  {
555
540
  if (m == 0) return false;
556
- Block* b = m->block();
541
+ Block_Obj b = m->block();
557
542
  if (b == 0) return false;
558
543
  for (size_t i = 0, L = b->length(); i < L; ++i) {
559
- Statement* stm = (*b)[i];
560
- if (typeid(*stm) == typeid(Directive)) return true;
561
- else if (typeid(*stm) == typeid(Declaration)) return true;
562
- else if (typeid(*stm) == typeid(Comment)) {
563
- Comment* c = (Comment*) stm;
544
+ Statement_Obj stm = b->at(i);
545
+ if (dynamic_cast<Directive_Ptr>(&stm)) return true;
546
+ else if (dynamic_cast<Declaration_Ptr>(&stm)) return true;
547
+ else if (dynamic_cast<Comment_Ptr>(&stm)) {
548
+ Comment_Ptr c = (Comment_Ptr) &stm;
564
549
  if (isPrintable(c, style)) {
565
550
  return true;
566
551
  }
567
552
  }
568
- else if (typeid(*stm) == typeid(Ruleset)) {
569
- Ruleset* r = (Ruleset*) stm;
553
+ else if (dynamic_cast<Ruleset_Ptr>(&stm)) {
554
+ Ruleset_Ptr r = (Ruleset_Ptr) &stm;
570
555
  if (isPrintable(r, style)) {
571
556
  return true;
572
557
  }
573
558
  }
574
- else if (typeid(*stm) == typeid(Supports_Block)) {
575
- Supports_Block* f = (Supports_Block*) stm;
559
+ else if (dynamic_cast<Supports_Block_Ptr>(&stm)) {
560
+ Supports_Block_Ptr f = (Supports_Block_Ptr) &stm;
576
561
  if (isPrintable(f, style)) {
577
562
  return true;
578
563
  }
579
564
  }
580
- else if (typeid(*stm) == typeid(Media_Block)) {
581
- Media_Block* m = (Media_Block*) stm;
565
+ else if (dynamic_cast<Media_Block_Ptr>(&stm)) {
566
+ Media_Block_Ptr m = (Media_Block_Ptr) &stm;
582
567
  if (isPrintable(m, style)) {
583
568
  return true;
584
569
  }
585
570
  }
586
- else if (dynamic_cast<Has_Block*>(stm) && isPrintable(((Has_Block*)stm)->block(), style)) {
571
+ else if (dynamic_cast<Has_Block_Ptr>(&stm) && isPrintable(((Has_Block_Ptr)&stm)->block(), style)) {
587
572
  return true;
588
573
  }
589
574
  }
590
575
  return false;
591
576
  }
592
577
 
593
- bool isPrintable(Comment* c, Sass_Output_Style style)
578
+ bool isPrintable(Comment_Ptr c, Sass_Output_Style style)
594
579
  {
595
580
  // keep for uncompressed
596
581
  if (style != COMPRESSED) {
@@ -604,41 +589,41 @@ namespace Sass {
604
589
  return false;
605
590
  };
606
591
 
607
- bool isPrintable(Block* b, Sass_Output_Style style) {
608
- if (b == NULL) {
592
+ bool isPrintable(Block_Obj b, Sass_Output_Style style) {
593
+ if (!b) {
609
594
  return false;
610
595
  }
611
596
 
612
597
  for (size_t i = 0, L = b->length(); i < L; ++i) {
613
- Statement* stm = (*b)[i];
614
- if (typeid(*stm) == typeid(Declaration) || typeid(*stm) == typeid(Directive)) {
598
+ Statement_Obj stm = b->at(i);
599
+ if (dynamic_cast<Declaration_Ptr>(&stm) || dynamic_cast<Directive_Ptr>(&stm)) {
615
600
  return true;
616
601
  }
617
- else if (typeid(*stm) == typeid(Comment)) {
618
- Comment* c = (Comment*) stm;
602
+ else if (dynamic_cast<Comment_Ptr>(&stm)) {
603
+ Comment_Ptr c = (Comment_Ptr) &stm;
619
604
  if (isPrintable(c, style)) {
620
605
  return true;
621
606
  }
622
607
  }
623
- else if (typeid(*stm) == typeid(Ruleset)) {
624
- Ruleset* r = (Ruleset*) stm;
608
+ else if (dynamic_cast<Ruleset_Ptr>(&stm)) {
609
+ Ruleset_Ptr r = (Ruleset_Ptr) &stm;
625
610
  if (isPrintable(r, style)) {
626
611
  return true;
627
612
  }
628
613
  }
629
- else if (typeid(*stm) == typeid(Supports_Block)) {
630
- Supports_Block* f = (Supports_Block*) stm;
614
+ else if (dynamic_cast<Supports_Block_Ptr>(&stm)) {
615
+ Supports_Block_Ptr f = (Supports_Block_Ptr) &stm;
631
616
  if (isPrintable(f, style)) {
632
617
  return true;
633
618
  }
634
619
  }
635
- else if (typeid(*stm) == typeid(Media_Block)) {
636
- Media_Block* m = (Media_Block*) stm;
620
+ else if (dynamic_cast<Media_Block_Ptr>(&stm)) {
621
+ Media_Block_Ptr m = (Media_Block_Ptr) &stm;
637
622
  if (isPrintable(m, style)) {
638
623
  return true;
639
624
  }
640
625
  }
641
- else if (dynamic_cast<Has_Block*>(stm) && isPrintable(((Has_Block*)stm)->block(), style)) {
626
+ else if (dynamic_cast<Has_Block_Ptr>(&stm) && isPrintable(((Has_Block_Ptr)&stm)->block(), style)) {
642
627
  return true;
643
628
  }
644
629
  }
@@ -646,27 +631,9 @@ namespace Sass {
646
631
  return false;
647
632
  }
648
633
 
649
- std::string vecJoin(const std::vector<std::string>& vec, const std::string& sep)
650
- {
651
- switch (vec.size())
652
- {
653
- case 0:
654
- return std::string("");
655
- case 1:
656
- return vec[0];
657
- default:
658
- std::ostringstream os;
659
- os << vec[0];
660
- for (size_t i = 1; i < vec.size(); i++) {
661
- os << sep << vec[i];
662
- }
663
- return os.str();
664
- }
634
+ bool isAscii(const char chr) {
635
+ return unsigned(chr) < 128;
665
636
  }
666
637
 
667
- bool isAscii(const char chr) {
668
- return unsigned(chr) < 128;
669
- }
670
-
671
638
  }
672
639
  }
@@ -43,19 +43,15 @@ namespace Sass {
43
43
 
44
44
  std::string normalize_underscores(const std::string& str);
45
45
  std::string normalize_decimals(const std::string& str);
46
- std::string normalize_sixtuplet(const std::string& col);
47
-
48
- std::string vecJoin(const std::vector<std::string>& vec, const std::string& sep);
49
- bool containsAnyPrintableStatements(Block* b);
50
-
51
- bool isPrintable(Ruleset* r, Sass_Output_Style style = NESTED);
52
- bool isPrintable(Supports_Block* r, Sass_Output_Style style = NESTED);
53
- bool isPrintable(Media_Block* r, Sass_Output_Style style = NESTED);
54
- bool isPrintable(Comment* b, Sass_Output_Style style = NESTED);
55
- bool isPrintable(Block* b, Sass_Output_Style style = NESTED);
56
- bool isPrintable(String_Constant* s, Sass_Output_Style style = NESTED);
57
- bool isPrintable(String_Quoted* s, Sass_Output_Style style = NESTED);
58
- bool isPrintable(Declaration* d, Sass_Output_Style style = NESTED);
46
+
47
+ bool isPrintable(Ruleset_Ptr r, Sass_Output_Style style = NESTED);
48
+ bool isPrintable(Supports_Block_Ptr r, Sass_Output_Style style = NESTED);
49
+ bool isPrintable(Media_Block_Ptr r, Sass_Output_Style style = NESTED);
50
+ bool isPrintable(Comment_Ptr b, Sass_Output_Style style = NESTED);
51
+ bool isPrintable(Block_Obj b, Sass_Output_Style style = NESTED);
52
+ bool isPrintable(String_Constant_Ptr s, Sass_Output_Style style = NESTED);
53
+ bool isPrintable(String_Quoted_Ptr s, Sass_Output_Style style = NESTED);
54
+ bool isPrintable(Declaration_Ptr d, Sass_Output_Style style = NESTED);
59
55
  bool isAscii(const char chr);
60
56
 
61
57
  }
@@ -7,35 +7,36 @@
7
7
  namespace Sass {
8
8
 
9
9
  // convert value from C++ side to C-API
10
- union Sass_Value* ast_node_to_sass_value (const Expression* val)
10
+ union Sass_Value* ast_node_to_sass_value (const Expression_Ptr val)
11
11
  {
12
12
  if (val->concrete_type() == Expression::NUMBER)
13
13
  {
14
- const Number* res = dynamic_cast<const Number*>(val);
14
+ Number_Ptr_Const res = dynamic_cast<Number_Ptr_Const>(val);
15
15
  return sass_make_number(res->value(), res->unit().c_str());
16
16
  }
17
17
  else if (val->concrete_type() == Expression::COLOR)
18
18
  {
19
- const Color* col = dynamic_cast<const Color*>(val);
19
+ Color_Ptr_Const col = dynamic_cast<Color_Ptr_Const>(val);
20
20
  return sass_make_color(col->r(), col->g(), col->b(), col->a());
21
21
  }
22
22
  else if (val->concrete_type() == Expression::LIST)
23
23
  {
24
- const List* l = dynamic_cast<const List*>(val);
24
+ List_Ptr_Const l = dynamic_cast<List_Ptr_Const>(val);
25
25
  union Sass_Value* list = sass_make_list(l->size(), l->separator());
26
26
  for (size_t i = 0, L = l->length(); i < L; ++i) {
27
- auto val = ast_node_to_sass_value((*l)[i]);
27
+ Expression_Obj obj = l->at(i);
28
+ auto val = ast_node_to_sass_value(&obj);
28
29
  sass_list_set_value(list, i, val);
29
30
  }
30
31
  return list;
31
32
  }
32
33
  else if (val->concrete_type() == Expression::MAP)
33
34
  {
34
- const Map* m = dynamic_cast<const Map*>(val);
35
+ Map_Ptr_Const m = dynamic_cast<Map_Ptr_Const>(val);
35
36
  union Sass_Value* map = sass_make_map(m->length());
36
- size_t i = 0; for (auto key : m->keys()) {
37
- sass_map_set_key(map, i, ast_node_to_sass_value(key));
38
- sass_map_set_value(map, i, ast_node_to_sass_value(m->at(key)));
37
+ size_t i = 0; for (Expression_Obj key : m->keys()) {
38
+ sass_map_set_key(map, i, ast_node_to_sass_value(&key));
39
+ sass_map_set_value(map, i, ast_node_to_sass_value(&m->at(key)));
39
40
  ++ i;
40
41
  }
41
42
  return map;
@@ -46,16 +47,16 @@ namespace Sass {
46
47
  }
47
48
  else if (val->concrete_type() == Expression::BOOLEAN)
48
49
  {
49
- const Boolean* res = dynamic_cast<const Boolean*>(val);
50
+ Boolean_Ptr_Const res = dynamic_cast<Boolean_Ptr_Const>(val);
50
51
  return sass_make_boolean(res->value());
51
52
  }
52
53
  else if (val->concrete_type() == Expression::STRING)
53
54
  {
54
- if (const String_Quoted* qstr = dynamic_cast<const String_Quoted*>(val))
55
+ if (String_Quoted_Ptr_Const qstr = dynamic_cast<String_Quoted_Ptr_Const>(val))
55
56
  {
56
57
  return sass_make_qstring(qstr->value().c_str());
57
58
  }
58
- else if (const String_Constant* cstr = dynamic_cast<const String_Constant*>(val))
59
+ else if (String_Constant_Ptr_Const cstr = dynamic_cast<String_Constant_Ptr_Const>(val))
59
60
  {
60
61
  return sass_make_string(cstr->value().c_str());
61
62
  }
@@ -64,22 +65,22 @@ namespace Sass {
64
65
  }
65
66
 
66
67
  // convert value from C-API to C++ side
67
- Value* sass_value_to_ast_node (Memory_Manager& mem, const union Sass_Value* val)
68
+ Value_Ptr sass_value_to_ast_node (const union Sass_Value* val)
68
69
  {
69
70
  switch (sass_value_get_tag(val)) {
70
71
  case SASS_NUMBER:
71
- return SASS_MEMORY_NEW(mem, Number,
72
+ return SASS_MEMORY_NEW(Number,
72
73
  ParserState("[C-VALUE]"),
73
74
  sass_number_get_value(val),
74
75
  sass_number_get_unit(val));
75
76
  break;
76
77
  case SASS_BOOLEAN:
77
- return SASS_MEMORY_NEW(mem, Boolean,
78
+ return SASS_MEMORY_NEW(Boolean,
78
79
  ParserState("[C-VALUE]"),
79
80
  sass_boolean_get_value(val));
80
81
  break;
81
82
  case SASS_COLOR:
82
- return SASS_MEMORY_NEW(mem, Color,
83
+ return SASS_MEMORY_NEW(Color,
83
84
  ParserState("[C-VALUE]"),
84
85
  sass_color_get_r(val),
85
86
  sass_color_get_g(val),
@@ -88,46 +89,46 @@ namespace Sass {
88
89
  break;
89
90
  case SASS_STRING:
90
91
  if (sass_string_is_quoted(val)) {
91
- return SASS_MEMORY_NEW(mem, String_Quoted,
92
+ return SASS_MEMORY_NEW(String_Quoted,
92
93
  ParserState("[C-VALUE]"),
93
94
  sass_string_get_value(val));
94
95
  } else {
95
- return SASS_MEMORY_NEW(mem, String_Constant,
96
+ return SASS_MEMORY_NEW(String_Constant,
96
97
  ParserState("[C-VALUE]"),
97
98
  sass_string_get_value(val));
98
99
  }
99
100
  break;
100
101
  case SASS_LIST: {
101
- List* l = SASS_MEMORY_NEW(mem, List,
102
+ List_Ptr l = SASS_MEMORY_NEW(List,
102
103
  ParserState("[C-VALUE]"),
103
104
  sass_list_get_length(val),
104
105
  sass_list_get_separator(val));
105
106
  for (size_t i = 0, L = sass_list_get_length(val); i < L; ++i) {
106
- *l << sass_value_to_ast_node(mem, sass_list_get_value(val, i));
107
+ l->append(sass_value_to_ast_node(sass_list_get_value(val, i)));
107
108
  }
108
109
  return l;
109
110
  }
110
111
  break;
111
112
  case SASS_MAP: {
112
- Map* m = SASS_MEMORY_NEW(mem, Map, ParserState("[C-VALUE]"));
113
+ Map_Ptr m = SASS_MEMORY_NEW(Map, ParserState("[C-VALUE]"));
113
114
  for (size_t i = 0, L = sass_map_get_length(val); i < L; ++i) {
114
115
  *m << std::make_pair(
115
- sass_value_to_ast_node(mem, sass_map_get_key(val, i)),
116
- sass_value_to_ast_node(mem, sass_map_get_value(val, i)));
116
+ sass_value_to_ast_node(sass_map_get_key(val, i)),
117
+ sass_value_to_ast_node(sass_map_get_value(val, i)));
117
118
  }
118
119
  return m;
119
120
  }
120
121
  break;
121
122
  case SASS_NULL:
122
- return SASS_MEMORY_NEW(mem, Null, ParserState("[C-VALUE]"));
123
+ return SASS_MEMORY_NEW(Null, ParserState("[C-VALUE]"));
123
124
  break;
124
125
  case SASS_ERROR:
125
- return SASS_MEMORY_NEW(mem, Custom_Error,
126
+ return SASS_MEMORY_NEW(Custom_Error,
126
127
  ParserState("[C-VALUE]"),
127
128
  sass_error_get_message(val));
128
129
  break;
129
130
  case SASS_WARNING:
130
- return SASS_MEMORY_NEW(mem, Custom_Warning,
131
+ return SASS_MEMORY_NEW(Custom_Warning,
131
132
  ParserState("[C-VALUE]"),
132
133
  sass_warning_get_message(val));
133
134
  break;