sassc 1.11.1 → 1.11.2
Sign up to get free protection for your applications and to get access to all the features.
- 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;
|