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.
- checksums.yaml +4 -4
- data/.travis.yml +2 -2
- data/README.md +3 -2
- data/ext/libsass/Makefile.conf +2 -1
- data/ext/libsass/appveyor.yml +10 -5
- data/ext/libsass/docs/dev-ast-memory.md +223 -0
- data/ext/libsass/include/sass/base.h +2 -0
- data/ext/libsass/script/bootstrap +7 -4
- data/ext/libsass/script/ci-build-libsass +3 -3
- data/ext/libsass/script/ci-install-compiler +2 -0
- data/ext/libsass/script/ci-report-coverage +2 -1
- data/ext/libsass/script/test-leaks.pl +103 -0
- data/ext/libsass/src/ast.cpp +621 -495
- data/ext/libsass/src/ast.hpp +801 -367
- data/ext/libsass/src/ast_def_macros.hpp +5 -5
- data/ext/libsass/src/ast_fwd_decl.hpp +312 -14
- data/ext/libsass/src/bind.cpp +54 -51
- data/ext/libsass/src/bind.hpp +3 -7
- data/ext/libsass/src/check_nesting.cpp +117 -120
- data/ext/libsass/src/check_nesting.hpp +38 -34
- data/ext/libsass/src/color_maps.cpp +3 -3
- data/ext/libsass/src/color_maps.hpp +3 -3
- data/ext/libsass/src/context.cpp +33 -34
- data/ext/libsass/src/context.hpp +12 -14
- data/ext/libsass/src/cssize.cpp +200 -228
- data/ext/libsass/src/cssize.hpp +49 -49
- data/ext/libsass/src/debugger.hpp +260 -241
- data/ext/libsass/src/emitter.cpp +6 -6
- data/ext/libsass/src/emitter.hpp +7 -7
- data/ext/libsass/src/environment.cpp +2 -2
- data/ext/libsass/src/environment.hpp +0 -2
- data/ext/libsass/src/error_handling.cpp +5 -5
- data/ext/libsass/src/error_handling.hpp +12 -12
- data/ext/libsass/src/eval.cpp +412 -401
- data/ext/libsass/src/eval.hpp +61 -62
- data/ext/libsass/src/expand.cpp +223 -204
- data/ext/libsass/src/expand.hpp +42 -42
- data/ext/libsass/src/extend.cpp +198 -201
- data/ext/libsass/src/extend.hpp +12 -14
- data/ext/libsass/src/file.hpp +4 -5
- data/ext/libsass/src/functions.cpp +413 -418
- data/ext/libsass/src/functions.hpp +7 -10
- data/ext/libsass/src/inspect.cpp +115 -109
- data/ext/libsass/src/inspect.hpp +69 -69
- data/ext/libsass/src/listize.cpp +31 -33
- data/ext/libsass/src/listize.hpp +8 -10
- data/ext/libsass/src/memory/SharedPtr.cpp +116 -0
- data/ext/libsass/src/memory/SharedPtr.hpp +202 -0
- data/ext/libsass/src/node.cpp +45 -43
- data/ext/libsass/src/node.hpp +15 -15
- data/ext/libsass/src/operation.hpp +136 -136
- data/ext/libsass/src/output.cpp +48 -49
- data/ext/libsass/src/output.hpp +14 -14
- data/ext/libsass/src/parser.cpp +530 -554
- data/ext/libsass/src/parser.hpp +91 -96
- data/ext/libsass/src/prelexer.cpp +13 -10
- data/ext/libsass/src/remove_placeholders.cpp +25 -21
- data/ext/libsass/src/remove_placeholders.hpp +7 -7
- data/ext/libsass/src/sass2scss.cpp +2 -1
- data/ext/libsass/src/sass_context.cpp +125 -107
- data/ext/libsass/src/sass_context.hpp +1 -1
- data/ext/libsass/src/sass_util.hpp +5 -5
- data/ext/libsass/src/sass_values.cpp +27 -27
- data/ext/libsass/src/source_map.cpp +2 -2
- data/ext/libsass/src/source_map.hpp +2 -2
- data/ext/libsass/src/subset_map.cpp +57 -0
- data/ext/libsass/src/subset_map.hpp +8 -76
- data/ext/libsass/src/to_c.cpp +13 -13
- data/ext/libsass/src/to_c.hpp +14 -14
- data/ext/libsass/src/to_value.cpp +20 -20
- data/ext/libsass/src/to_value.hpp +20 -21
- data/ext/libsass/src/util.cpp +55 -88
- data/ext/libsass/src/util.hpp +9 -13
- data/ext/libsass/src/values.cpp +27 -26
- data/ext/libsass/src/values.hpp +2 -2
- data/ext/libsass/test/test_subset_map.cpp +69 -69
- data/ext/libsass/win/libsass.targets +3 -2
- data/ext/libsass/win/libsass.vcxproj.filters +9 -6
- data/lib/sassc/version.rb +1 -1
- data/sassc.gemspec +0 -1
- data/test/native_test.rb +1 -1
- metadata +7 -5
- data/ext/libsass/src/ast_factory.hpp +0 -92
- data/ext/libsass/src/memory_manager.cpp +0 -77
- 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<
|
10
|
+
class To_Value : public Operation_CRTP<Value_Ptr, To_Value> {
|
11
11
|
|
12
|
-
|
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
|
22
|
-
: ctx(ctx)
|
20
|
+
To_Value(Context& ctx)
|
21
|
+
: ctx(ctx)
|
23
22
|
{ }
|
24
23
|
~To_Value() { }
|
25
|
-
using Operation<
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
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
|
-
|
41
|
-
|
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
|
-
|
44
|
+
Value_Ptr fallback(U x) { return fallback_impl(x); }
|
46
45
|
};
|
47
46
|
|
48
47
|
}
|
data/ext/libsass/src/util.cpp
CHANGED
@@ -438,30 +438,15 @@ namespace Sass {
|
|
438
438
|
return normalized[0] == '.' ? normalized.insert(0, prefix) : normalized;
|
439
439
|
}
|
440
440
|
|
441
|
-
|
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
|
-
|
446
|
+
Block_Obj b = r->block();
|
463
447
|
|
464
|
-
|
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
|
-
|
474
|
-
if (dynamic_cast<
|
458
|
+
Statement_Obj stm = b->at(i);
|
459
|
+
if (dynamic_cast<Directive_Ptr>(&stm)) {
|
475
460
|
return true;
|
476
|
-
} else if (
|
461
|
+
} else if (Declaration_Ptr d = dynamic_cast<Declaration_Ptr>(&stm)) {
|
477
462
|
return isPrintable(d, style);
|
478
|
-
} else if (dynamic_cast<
|
479
|
-
|
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 (
|
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(
|
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(
|
494
|
+
bool isPrintable(String_Quoted_Ptr s, Sass_Output_Style style)
|
510
495
|
{
|
511
496
|
return true;
|
512
497
|
}
|
513
498
|
|
514
|
-
bool isPrintable(
|
499
|
+
bool isPrintable(Declaration_Ptr d, Sass_Output_Style style)
|
515
500
|
{
|
516
|
-
|
517
|
-
if (
|
518
|
-
if (
|
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(
|
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
|
-
|
512
|
+
Block_Obj b = f->block();
|
528
513
|
|
529
|
-
// bool hasSelectors = f->selector() && static_cast<
|
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
|
-
|
535
|
-
if (
|
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<
|
539
|
-
|
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(
|
538
|
+
bool isPrintable(Media_Block_Ptr m, Sass_Output_Style style)
|
554
539
|
{
|
555
540
|
if (m == 0) return false;
|
556
|
-
|
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
|
-
|
560
|
-
if (
|
561
|
-
else if (
|
562
|
-
else if (
|
563
|
-
|
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 (
|
569
|
-
|
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 (
|
575
|
-
|
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 (
|
581
|
-
|
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<
|
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(
|
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(
|
608
|
-
if (b
|
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
|
-
|
614
|
-
if (
|
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 (
|
618
|
-
|
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 (
|
624
|
-
|
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 (
|
630
|
-
|
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 (
|
636
|
-
|
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<
|
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
|
-
|
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
|
}
|
data/ext/libsass/src/util.hpp
CHANGED
@@ -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
|
-
|
47
|
-
|
48
|
-
|
49
|
-
bool
|
50
|
-
|
51
|
-
bool isPrintable(
|
52
|
-
bool isPrintable(
|
53
|
-
bool isPrintable(
|
54
|
-
bool isPrintable(
|
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
|
}
|
data/ext/libsass/src/values.cpp
CHANGED
@@ -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
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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 (
|
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
|
-
|
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 (
|
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 (
|
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
|
-
|
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(
|
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(
|
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(
|
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(
|
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(
|
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
|
-
|
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
|
-
|
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
|
-
|
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(
|
116
|
-
sass_value_to_ast_node(
|
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(
|
123
|
+
return SASS_MEMORY_NEW(Null, ParserState("[C-VALUE]"));
|
123
124
|
break;
|
124
125
|
case SASS_ERROR:
|
125
|
-
return SASS_MEMORY_NEW(
|
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(
|
131
|
+
return SASS_MEMORY_NEW(Custom_Warning,
|
131
132
|
ParserState("[C-VALUE]"),
|
132
133
|
sass_warning_get_message(val));
|
133
134
|
break;
|