sassc 2.2.1 → 2.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (113) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +1 -0
  3. data/CHANGELOG.md +13 -0
  4. data/Rakefile +1 -3
  5. data/ext/extconf.rb +13 -5
  6. data/ext/libsass/VERSION +1 -1
  7. data/ext/libsass/include/sass/base.h +2 -1
  8. data/ext/libsass/include/sass/context.h +1 -0
  9. data/ext/libsass/src/ast.cpp +49 -59
  10. data/ext/libsass/src/ast.hpp +263 -102
  11. data/ext/libsass/src/ast_def_macros.hpp +8 -0
  12. data/ext/libsass/src/ast_fwd_decl.cpp +2 -1
  13. data/ext/libsass/src/ast_fwd_decl.hpp +40 -116
  14. data/ext/libsass/src/ast_helpers.hpp +292 -0
  15. data/ext/libsass/src/ast_sel_cmp.cpp +209 -722
  16. data/ext/libsass/src/ast_sel_super.cpp +539 -0
  17. data/ext/libsass/src/ast_sel_unify.cpp +207 -212
  18. data/ext/libsass/src/ast_sel_weave.cpp +616 -0
  19. data/ext/libsass/src/ast_selectors.cpp +559 -1001
  20. data/ext/libsass/src/ast_selectors.hpp +311 -367
  21. data/ext/libsass/src/ast_supports.cpp +1 -17
  22. data/ext/libsass/src/ast_values.cpp +216 -29
  23. data/ext/libsass/src/ast_values.hpp +42 -33
  24. data/ext/libsass/src/bind.cpp +1 -1
  25. data/ext/libsass/src/cencode.c +4 -6
  26. data/ext/libsass/src/check_nesting.cpp +5 -6
  27. data/ext/libsass/src/check_nesting.hpp +4 -0
  28. data/ext/libsass/src/color_maps.cpp +11 -10
  29. data/ext/libsass/src/color_maps.hpp +0 -8
  30. data/ext/libsass/src/constants.cpp +5 -0
  31. data/ext/libsass/src/constants.hpp +6 -0
  32. data/ext/libsass/src/context.cpp +30 -60
  33. data/ext/libsass/src/context.hpp +8 -20
  34. data/ext/libsass/src/cssize.cpp +36 -120
  35. data/ext/libsass/src/cssize.hpp +4 -10
  36. data/ext/libsass/src/dart_helpers.hpp +199 -0
  37. data/ext/libsass/src/debugger.hpp +364 -207
  38. data/ext/libsass/src/emitter.cpp +3 -4
  39. data/ext/libsass/src/emitter.hpp +0 -2
  40. data/ext/libsass/src/environment.hpp +5 -0
  41. data/ext/libsass/src/error_handling.cpp +21 -0
  42. data/ext/libsass/src/error_handling.hpp +25 -3
  43. data/ext/libsass/src/eval.cpp +33 -153
  44. data/ext/libsass/src/eval.hpp +11 -13
  45. data/ext/libsass/src/eval_selectors.cpp +75 -0
  46. data/ext/libsass/src/expand.cpp +214 -167
  47. data/ext/libsass/src/expand.hpp +26 -6
  48. data/ext/libsass/src/extender.cpp +1186 -0
  49. data/ext/libsass/src/extender.hpp +399 -0
  50. data/ext/libsass/src/extension.cpp +43 -0
  51. data/ext/libsass/src/extension.hpp +89 -0
  52. data/ext/libsass/src/file.cpp +15 -14
  53. data/ext/libsass/src/file.hpp +5 -12
  54. data/ext/libsass/src/fn_colors.cpp +12 -10
  55. data/ext/libsass/src/fn_lists.cpp +12 -11
  56. data/ext/libsass/src/fn_miscs.cpp +22 -34
  57. data/ext/libsass/src/fn_numbers.cpp +13 -6
  58. data/ext/libsass/src/fn_selectors.cpp +94 -124
  59. data/ext/libsass/src/fn_strings.cpp +16 -14
  60. data/ext/libsass/src/fn_utils.cpp +5 -6
  61. data/ext/libsass/src/fn_utils.hpp +9 -3
  62. data/ext/libsass/src/inspect.cpp +154 -117
  63. data/ext/libsass/src/inspect.hpp +10 -8
  64. data/ext/libsass/src/lexer.cpp +17 -81
  65. data/ext/libsass/src/lexer.hpp +5 -16
  66. data/ext/libsass/src/listize.cpp +22 -36
  67. data/ext/libsass/src/listize.hpp +8 -9
  68. data/ext/libsass/src/memory/SharedPtr.hpp +39 -5
  69. data/ext/libsass/src/operation.hpp +27 -17
  70. data/ext/libsass/src/operators.cpp +1 -0
  71. data/ext/libsass/src/ordered_map.hpp +112 -0
  72. data/ext/libsass/src/output.cpp +30 -49
  73. data/ext/libsass/src/output.hpp +1 -1
  74. data/ext/libsass/src/parser.cpp +211 -381
  75. data/ext/libsass/src/parser.hpp +17 -15
  76. data/ext/libsass/src/parser_selectors.cpp +189 -0
  77. data/ext/libsass/src/permutate.hpp +140 -0
  78. data/ext/libsass/src/position.hpp +1 -1
  79. data/ext/libsass/src/prelexer.cpp +6 -6
  80. data/ext/libsass/src/remove_placeholders.cpp +55 -56
  81. data/ext/libsass/src/remove_placeholders.hpp +21 -18
  82. data/ext/libsass/src/sass.hpp +1 -0
  83. data/ext/libsass/src/sass2scss.cpp +4 -4
  84. data/ext/libsass/src/sass_context.cpp +42 -91
  85. data/ext/libsass/src/sass_context.hpp +2 -2
  86. data/ext/libsass/src/sass_functions.cpp +1 -1
  87. data/ext/libsass/src/sass_values.cpp +0 -1
  88. data/ext/libsass/src/stylesheet.cpp +22 -0
  89. data/ext/libsass/src/stylesheet.hpp +57 -0
  90. data/ext/libsass/src/to_value.cpp +2 -2
  91. data/ext/libsass/src/to_value.hpp +1 -1
  92. data/ext/libsass/src/units.cpp +5 -3
  93. data/ext/libsass/src/util.cpp +10 -12
  94. data/ext/libsass/src/util.hpp +2 -3
  95. data/ext/libsass/src/util_string.cpp +111 -61
  96. data/ext/libsass/src/util_string.hpp +61 -8
  97. data/lib/sassc/engine.rb +5 -3
  98. data/lib/sassc/functions_handler.rb +8 -8
  99. data/lib/sassc/native.rb +1 -1
  100. data/lib/sassc/script.rb +4 -4
  101. data/lib/sassc/version.rb +1 -1
  102. data/test/functions_test.rb +18 -1
  103. data/test/native_test.rb +1 -1
  104. metadata +17 -12
  105. data/ext/libsass/src/extend.cpp +0 -2132
  106. data/ext/libsass/src/extend.hpp +0 -86
  107. data/ext/libsass/src/node.cpp +0 -322
  108. data/ext/libsass/src/node.hpp +0 -118
  109. data/ext/libsass/src/paths.hpp +0 -71
  110. data/ext/libsass/src/sass_util.cpp +0 -152
  111. data/ext/libsass/src/sass_util.hpp +0 -256
  112. data/ext/libsass/src/subset_map.cpp +0 -58
  113. data/ext/libsass/src/subset_map.hpp +0 -76
@@ -1,10 +1,9 @@
1
+ // sass.hpp must go before all system headers to get the
2
+ // __EXTENSIONS__ fix on Solaris.
1
3
  #include "sass.hpp"
2
- #include "util.hpp"
3
- #include "context.hpp"
4
- #include "output.hpp"
5
4
  #include "emitter.hpp"
6
5
  #include "util_string.hpp"
7
- #include "utf8_string.hpp"
6
+ #include "util.hpp"
8
7
 
9
8
  namespace Sass {
10
9
 
@@ -5,8 +5,6 @@
5
5
  // __EXTENSIONS__ fix on Solaris.
6
6
  #include "sass.hpp"
7
7
 
8
- #include <string>
9
-
10
8
  #include "sass/base.h"
11
9
  #include "source_map.hpp"
12
10
  #include "ast_fwd_decl.hpp"
@@ -1,6 +1,11 @@
1
1
  #ifndef SASS_ENVIRONMENT_H
2
2
  #define SASS_ENVIRONMENT_H
3
3
 
4
+ // sass.hpp must go before all system headers to get the
5
+ // __EXTENSIONS__ fix on Solaris.
6
+ #include "sass.hpp"
7
+
8
+ #include <map>
4
9
  #include <string>
5
10
  #include "ast_fwd_decl.hpp"
6
11
  #include "ast_def_macros.hpp"
@@ -132,6 +132,27 @@ namespace Sass {
132
132
  prefix = err.errtype();
133
133
  }
134
134
 
135
+ TopLevelParent::TopLevelParent(Backtraces traces, ParserState pstate)
136
+ : Base(pstate, "Top-level selectors may not contain the parent selector \"&\".", traces)
137
+ {
138
+
139
+ }
140
+
141
+ UnsatisfiedExtend::UnsatisfiedExtend(Backtraces traces, Extension extension)
142
+ : Base(extension.target->pstate(), "The target selector was not found.\n"
143
+ "Use \"@extend " + extension.target->to_string() + " !optional\" to avoid this error.", traces)
144
+ {
145
+
146
+ }
147
+
148
+ ExtendAcrossMedia::ExtendAcrossMedia(Backtraces traces, Extension extension)
149
+ : Base(extension.target->pstate(), "You may not @extend selectors across media queries.\n"
150
+ "Use \"@extend " + extension.target->to_string() + " !optional\" to avoid this error.", traces)
151
+ {
152
+
153
+ }
154
+
155
+
135
156
  }
136
157
 
137
158
 
@@ -1,6 +1,10 @@
1
1
  #ifndef SASS_ERROR_HANDLING_H
2
2
  #define SASS_ERROR_HANDLING_H
3
3
 
4
+ // sass.hpp must go before all system headers to get the
5
+ // __EXTENSIONS__ fix on Solaris.
6
+ #include "sass.hpp"
7
+
4
8
  #include <string>
5
9
  #include <sstream>
6
10
  #include <stdexcept>
@@ -205,9 +209,27 @@ namespace Sass {
205
209
  };
206
210
 
207
211
  class SassValueError : public Base {
208
- public:
209
- SassValueError(Backtraces traces, ParserState pstate, OperationError& err);
210
- virtual ~SassValueError() throw() {};
212
+ public:
213
+ SassValueError(Backtraces traces, ParserState pstate, OperationError& err);
214
+ virtual ~SassValueError() throw() {};
215
+ };
216
+
217
+ class TopLevelParent : public Base {
218
+ public:
219
+ TopLevelParent(Backtraces traces, ParserState pstate);
220
+ virtual ~TopLevelParent() throw() {};
221
+ };
222
+
223
+ class UnsatisfiedExtend : public Base {
224
+ public:
225
+ UnsatisfiedExtend(Backtraces traces, Extension extension);
226
+ virtual ~UnsatisfiedExtend() throw() {};
227
+ };
228
+
229
+ class ExtendAcrossMedia : public Base {
230
+ public:
231
+ ExtendAcrossMedia(Backtraces traces, Extension extension);
232
+ virtual ~ExtendAcrossMedia() throw() {};
211
233
  };
212
234
 
213
235
  }
@@ -72,28 +72,11 @@ namespace Sass {
72
72
  return exp.env_stack;
73
73
  }
74
74
 
75
- Selector_List_Obj Eval::selector()
76
- {
77
- return exp.selector();
78
- }
79
-
80
75
  std::vector<Sass_Callee>& Eval::callee_stack()
81
76
  {
82
77
  return ctx.callee_stack;
83
78
  }
84
79
 
85
-
86
- SelectorStack& Eval::selector_stack()
87
- {
88
- return exp.selector_stack;
89
- }
90
-
91
- bool& Eval::old_at_root_without_rule()
92
- {
93
- return exp.old_at_root_without_rule;
94
- }
95
-
96
-
97
80
  Expression* Eval::operator()(Block* b)
98
81
  {
99
82
  Expression* val = 0;
@@ -251,9 +234,8 @@ namespace Sass {
251
234
  if (expr->concrete_type() == Expression::MAP) {
252
235
  map = Cast<Map>(expr);
253
236
  }
254
- else if (Selector_List* ls = Cast<Selector_List>(expr)) {
255
- Listize listize;
256
- Expression_Obj rv = ls->perform(&listize);
237
+ else if (SelectorList * ls = Cast<SelectorList>(expr)) {
238
+ Expression_Obj rv = Listize::perform(ls);
257
239
  list = Cast<List>(rv);
258
240
  }
259
241
  else if (expr->concrete_type() != Expression::LIST) {
@@ -286,7 +268,7 @@ namespace Sass {
286
268
  }
287
269
  }
288
270
  else {
289
- if (list->length() == 1 && Cast<Selector_List>(list)) {
271
+ if (list->length() == 1 && Cast<SelectorList>(list)) {
290
272
  list = Cast<List>(list);
291
273
  }
292
274
  for (size_t i = 0, L = list->length(); i < L; ++i) {
@@ -490,6 +472,7 @@ namespace Sass {
490
472
  return 0;
491
473
  }
492
474
 
475
+
493
476
  Expression* Eval::operator()(List* l)
494
477
  {
495
478
  // special case for unevaluated map
@@ -707,9 +690,9 @@ namespace Sass {
707
690
  b->op(), s_l->last(), b->right());
708
691
  bin_ex->is_delayed(b->left()->is_delayed() || b->right()->is_delayed()); // unverified
709
692
  for (size_t i = 0; i < s_l->length() - 1; ++i) {
710
- ret_schema->append(Cast<PreValue>(s_l->at(i)->perform(this)));
693
+ ret_schema->append(s_l->at(i)->perform(this));
711
694
  }
712
- ret_schema->append(Cast<PreValue>(bin_ex->perform(this)));
695
+ ret_schema->append(bin_ex->perform(this));
713
696
  return ret_schema->perform(this);
714
697
  }
715
698
  }
@@ -720,9 +703,9 @@ namespace Sass {
720
703
  Binary_Expression_Obj bin_ex = SASS_MEMORY_NEW(Binary_Expression, b->pstate(),
721
704
  b->op(), b->left(), s_r->first());
722
705
  bin_ex->is_delayed(b->left()->is_delayed() || b->right()->is_delayed()); // verified
723
- ret_schema->append(Cast<PreValue>(bin_ex->perform(this)));
706
+ ret_schema->append(bin_ex->perform(this));
724
707
  for (size_t i = 1; i < s_r->length(); ++i) {
725
- ret_schema->append(Cast<PreValue>(s_r->at(i)->perform(this)));
708
+ ret_schema->append(s_r->at(i)->perform(this));
726
709
  }
727
710
  return ret_schema->perform(this);
728
711
  }
@@ -933,7 +916,7 @@ namespace Sass {
933
916
  return nr.detach();
934
917
  }
935
918
  else {
936
- // Special cases: +/- variables which evaluate to null ouput just +/-,
919
+ // Special cases: +/- variables which evaluate to null output just +/-,
937
920
  // but +/- null itself outputs the string
938
921
  if (operand->concrete_type() == Expression::NULL_VAL && Cast<Variable>(u->operand())) {
939
922
  u->operand(SASS_MEMORY_NEW(String_Quoted, u->pstate(), ""));
@@ -942,12 +925,19 @@ namespace Sass {
942
925
  else if (Color* color = Cast<Color>(operand)) {
943
926
  // Use the color name if this was eval with one
944
927
  if (color->disp().length() > 0) {
945
- operand = SASS_MEMORY_NEW(String_Constant, operand->pstate(), color->disp());
946
- u->operand(operand);
928
+ Unary_Expression_Obj cpy = SASS_MEMORY_COPY(u);
929
+ cpy->operand(SASS_MEMORY_NEW(String_Constant, operand->pstate(), color->disp()));
930
+ return SASS_MEMORY_NEW(String_Quoted,
931
+ cpy->pstate(),
932
+ cpy->inspect());
947
933
  }
948
934
  }
949
935
  else {
950
- u->operand(operand);
936
+ Unary_Expression_Obj cpy = SASS_MEMORY_COPY(u);
937
+ cpy->operand(operand);
938
+ return SASS_MEMORY_NEW(String_Quoted,
939
+ cpy->pstate(),
940
+ cpy->inspect());
951
941
  }
952
942
 
953
943
  return SASS_MEMORY_NEW(String_Quoted,
@@ -995,7 +985,7 @@ namespace Sass {
995
985
  c->name(),
996
986
  args);
997
987
  if (args->has_named_arguments()) {
998
- error("Function " + c->name() + " doesn't support keyword arguments", c->pstate(), traces);
988
+ error("Plain CSS function " + c->name() + " doesn't support keyword arguments", c->pstate(), traces);
999
989
  }
1000
990
  String_Quoted* str = SASS_MEMORY_NEW(String_Quoted,
1001
991
  c->pstate(),
@@ -1065,7 +1055,7 @@ namespace Sass {
1065
1055
  result = body->perform(this);
1066
1056
  }
1067
1057
  else if (func) {
1068
- result = func(fn_env, *env, ctx, def->signature(), c->pstate(), traces, exp.selector_stack);
1058
+ result = func(fn_env, *env, ctx, def->signature(), c->pstate(), traces, exp.getSelectorStack(), exp.originalStack);
1069
1059
  }
1070
1060
  if (!result) {
1071
1061
  error(std::string("Function ") + c->name() + " finished without @return", c->pstate(), traces);
@@ -1214,11 +1204,6 @@ namespace Sass {
1214
1204
 
1215
1205
  if (Cast<Null>(ex)) { return; }
1216
1206
 
1217
- // parent selector needs another go
1218
- if (Cast<Parent_Selector>(ex)) {
1219
- // XXX: this is never hit via spec tests
1220
- ex = ex->perform(this);
1221
- }
1222
1207
  // parent selector needs another go
1223
1208
  if (Cast<Parent_Reference>(ex)) {
1224
1209
  // XXX: this is never hit via spec tests
@@ -1254,7 +1239,6 @@ namespace Sass {
1254
1239
  // Selector_List
1255
1240
  // String_Quoted
1256
1241
  // String_Constant
1257
- // Parent_Selector
1258
1242
  // Binary_Expression
1259
1243
  else {
1260
1244
  // ex = ex->perform(this);
@@ -1512,69 +1496,7 @@ namespace Sass {
1512
1496
  return 0;
1513
1497
  }
1514
1498
 
1515
- Selector_List* Eval::operator()(Selector_List* s)
1516
- {
1517
- SelectorStack rv;
1518
- Selector_List_Obj sl = SASS_MEMORY_NEW(Selector_List, s->pstate());
1519
- sl->is_optional(s->is_optional());
1520
- sl->media_block(s->media_block());
1521
- sl->is_optional(s->is_optional());
1522
- for (size_t i = 0, iL = s->length(); i < iL; ++i) {
1523
- rv.push_back(operator()((*s)[i]));
1524
- }
1525
-
1526
- // we should actually permutate parent first
1527
- // but here we have permutated the selector first
1528
- size_t round = 0;
1529
- while (round != std::string::npos) {
1530
- bool abort = true;
1531
- for (size_t i = 0, iL = rv.size(); i < iL; ++i) {
1532
- if (rv[i]->length() > round) {
1533
- sl->append((*rv[i])[round]);
1534
- abort = false;
1535
- }
1536
- }
1537
- if (abort) {
1538
- round = std::string::npos;
1539
- } else {
1540
- ++ round;
1541
- }
1542
-
1543
- }
1544
- return sl.detach();
1545
- }
1546
-
1547
-
1548
- Selector_List* Eval::operator()(Complex_Selector* s)
1549
- {
1550
- bool implicit_parent = !exp.old_at_root_without_rule;
1551
- if (is_in_selector_schema) exp.selector_stack.push_back({});
1552
- Selector_List_Obj resolved = s->resolve_parent_refs(exp.selector_stack, traces, implicit_parent);
1553
- if (is_in_selector_schema) exp.selector_stack.pop_back();
1554
- for (size_t i = 0; i < resolved->length(); i++) {
1555
- Complex_Selector* is = resolved->at(i)->mutable_first();
1556
- while (is) {
1557
- if (is->head()) {
1558
- is->head(operator()(is->head()));
1559
- }
1560
- is = is->tail();
1561
- }
1562
- }
1563
- return resolved.detach();
1564
- }
1565
-
1566
- Compound_Selector* Eval::operator()(Compound_Selector* s)
1567
- {
1568
- for (size_t i = 0; i < s->length(); i++) {
1569
- Simple_Selector* ss = s->at(i);
1570
- // skip parents here (called via resolve_parent_refs)
1571
- if (ss == NULL || Cast<Parent_Selector>(ss)) continue;
1572
- s->at(i) = Cast<Simple_Selector>(ss->perform(this));
1573
- }
1574
- return s;
1575
- }
1576
-
1577
- Selector_List* Eval::operator()(Selector_Schema* s)
1499
+ SelectorList* Eval::operator()(Selector_Schema* s)
1578
1500
  {
1579
1501
  LOCAL_FLAG(is_in_selector_schema, true);
1580
1502
  // the parser will look for a brace to end the selector
@@ -1584,74 +1506,32 @@ namespace Sass {
1584
1506
  char* temp_cstr = sass_copy_c_string(result_str.c_str());
1585
1507
  ctx.strings.push_back(temp_cstr); // attach to context
1586
1508
  Parser p = Parser::from_c_str(temp_cstr, ctx, traces, s->pstate());
1587
- p.last_media_block = s->media_block();
1588
- // a selector schema may or may not connect to parent?
1589
- bool chroot = s->connect_parent() == false;
1590
- Selector_List_Obj sl = p.parse_selector_list(chroot);
1591
- flag_is_in_selector_schema.reset();
1592
- return operator()(sl);
1593
- }
1594
1509
 
1595
- Expression* Eval::operator()(Parent_Selector* p)
1596
- {
1597
- if (Selector_List_Obj pr = selector()) {
1598
- exp.selector_stack.pop_back();
1599
- Selector_List_Obj rv = operator()(pr);
1600
- exp.selector_stack.push_back(rv);
1601
- return rv.detach();
1602
- } else {
1603
- return SASS_MEMORY_NEW(Null, p->pstate());
1604
- }
1510
+ // If a schema contains a reference to parent it is already
1511
+ // connected to it, so don't connect implicitly anymore
1512
+ SelectorListObj parsed = p.parseSelectorList(true);
1513
+ flag_is_in_selector_schema.reset();
1514
+ return parsed.detach();
1605
1515
  }
1606
1516
 
1607
1517
  Expression* Eval::operator()(Parent_Reference* p)
1608
1518
  {
1609
- if (Selector_List_Obj pr = selector()) {
1610
- exp.selector_stack.pop_back();
1611
- Selector_List_Obj rv = operator()(pr);
1612
- exp.selector_stack.push_back(rv);
1613
- return rv.detach();
1519
+ if (SelectorListObj pr = exp.original()) {
1520
+ return operator()(pr);
1614
1521
  } else {
1615
1522
  return SASS_MEMORY_NEW(Null, p->pstate());
1616
1523
  }
1617
1524
  }
1618
1525
 
1619
- Simple_Selector* Eval::operator()(Simple_Selector* s)
1526
+ SimpleSelector* Eval::operator()(SimpleSelector* s)
1620
1527
  {
1621
1528
  return s;
1622
1529
  }
1623
1530
 
1624
- // hotfix to avoid invalid nested `:not` selectors
1625
- // probably the wrong place, but this should ultimately
1626
- // be fixed by implement superselector correctly for `:not`
1627
- // first use of "find" (ATM only implemented for selectors)
1628
- bool hasNotSelector(AST_Node_Obj obj) {
1629
- if (Wrapped_Selector* w = Cast<Wrapped_Selector>(obj)) {
1630
- return w->name() == ":not";
1631
- }
1632
- return false;
1633
- }
1634
-
1635
- Wrapped_Selector* Eval::operator()(Wrapped_Selector* s)
1531
+ Pseudo_Selector* Eval::operator()(Pseudo_Selector* pseudo)
1636
1532
  {
1637
-
1638
- if (s->name() == ":not") {
1639
- if (exp.selector_stack.back()) {
1640
- if (s->selector()->find(hasNotSelector)) {
1641
- s->selector()->clear();
1642
- s->name(" ");
1643
- } else {
1644
- for (size_t i = 0; i < s->selector()->length(); ++i) {
1645
- Complex_Selector* cs = s->selector()->at(i);
1646
- if (cs->tail()) {
1647
- s->selector()->clear();
1648
- s->name(" ");
1649
- }
1650
- }
1651
- }
1652
- }
1653
- }
1654
- return s;
1533
+ // ToDo: should we eval selector?
1534
+ return pseudo;
1655
1535
  };
1656
1536
 
1657
1537
  }
@@ -1,7 +1,11 @@
1
1
  #ifndef SASS_EVAL_H
2
2
  #define SASS_EVAL_H
3
3
 
4
+ // sass.hpp must go before all system headers to get the
5
+ // __EXTENSIONS__ fix on Solaris.
6
+ #include "sass.hpp"
4
7
  #include "ast.hpp"
8
+
5
9
  #include "context.hpp"
6
10
  #include "listize.hpp"
7
11
  #include "operation.hpp"
@@ -31,12 +35,8 @@ namespace Sass {
31
35
  Env* environment();
32
36
  EnvStack& env_stack();
33
37
  const std::string cwd();
34
- Selector_List_Obj selector();
35
38
  CalleeStack& callee_stack();
36
- SelectorStack& selector_stack();
37
- bool& old_at_root_without_rule();
38
39
  struct Sass_Inspect_Options& options();
39
- struct Sass_Inspect_Options options2();
40
40
  struct Sass_Compiler* compiler();
41
41
 
42
42
  // for evaluating function bodies
@@ -64,7 +64,6 @@ namespace Sass {
64
64
  Expression* operator()(String_Schema*);
65
65
  Expression* operator()(String_Quoted*);
66
66
  Expression* operator()(String_Constant*);
67
- // Expression* operator()(Selector_List*);
68
67
  Media_Query* operator()(Media_Query*);
69
68
  Expression* operator()(Media_Query_Expression*);
70
69
  Expression* operator()(At_Root_Query*);
@@ -78,23 +77,22 @@ namespace Sass {
78
77
  Expression* operator()(Comment*);
79
78
 
80
79
  // these will return selectors
81
- Selector_List* operator()(Selector_List*);
82
- Selector_List* operator()(Complex_Selector*);
83
- Compound_Selector* operator()(Compound_Selector*);
84
- Simple_Selector* operator()(Simple_Selector* s);
85
- Wrapped_Selector* operator()(Wrapped_Selector* s);
80
+ SelectorList* operator()(SelectorList*);
81
+ SelectorList* operator()(ComplexSelector*);
82
+ CompoundSelector* operator()(CompoundSelector*);
83
+ SelectorComponent* operator()(SelectorComponent*);
84
+ SimpleSelector* operator()(SimpleSelector* s);
85
+ Pseudo_Selector* operator()(Pseudo_Selector* s);
86
86
 
87
87
  // they don't have any specific implementation (yet)
88
88
  Id_Selector* operator()(Id_Selector* s) { return s; };
89
89
  Class_Selector* operator()(Class_Selector* s) { return s; };
90
- Pseudo_Selector* operator()(Pseudo_Selector* s) { return s; };
91
90
  Type_Selector* operator()(Type_Selector* s) { return s; };
92
91
  Attribute_Selector* operator()(Attribute_Selector* s) { return s; };
93
92
  Placeholder_Selector* operator()(Placeholder_Selector* s) { return s; };
94
93
 
95
94
  // actual evaluated selectors
96
- Selector_List* operator()(Selector_Schema*);
97
- Expression* operator()(Parent_Selector*);
95
+ SelectorList* operator()(Selector_Schema*);
98
96
  Expression* operator()(Parent_Reference*);
99
97
 
100
98
  // generic fallback