sassc 1.11.1 → 1.11.2

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 (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;