@@ -521,10 +521,10 @@ namespace Sass {
521
521
// of style declarations.
522
522
// ///////////////////////////////////////////////////////////////////////////
523
523
class Ruleset : public Has_Block {
524
- ADD_PROPERTY (Selector_Obj , selector)
524
+ ADD_PROPERTY (Selector_List_Obj , selector)
525
525
ADD_PROPERTY (bool , is_root);
526
526
public:
527
- Ruleset (ParserState pstate, Selector_Obj s = 0 , Block_Obj b = 0 )
527
+ Ruleset (ParserState pstate, Selector_List_Obj s = 0 , Block_Obj b = 0 )
528
528
: Has_Block(pstate, b), selector_(s), is_root_(false )
529
529
{ statement_type (RULESET); }
530
530
Ruleset (const Ruleset* ptr)
@@ -598,10 +598,10 @@ namespace Sass {
598
598
// /////////////////////////////////////////////////////////////////////
599
599
class Directive : public Has_Block {
600
600
ADD_CONSTREF (std::string, keyword)
601
- ADD_PROPERTY (Selector_Obj , selector)
601
+ ADD_PROPERTY (Selector_List_Obj , selector)
602
602
ADD_PROPERTY (Expression_Obj, value)
603
603
public:
604
- Directive (ParserState pstate, std::string kwd, Selector_Obj sel = 0 , Block_Obj b = 0 , Expression_Obj val = 0 )
604
+ Directive (ParserState pstate, std::string kwd, Selector_List_Obj sel = 0 , Block_Obj b = 0 , Expression_Obj val = 0 )
605
605
: Has_Block(pstate, b), keyword_(kwd), selector_(sel), value_(val) // set value manually if needed
606
606
{ statement_type (DIRECTIVE); }
607
607
Directive (const Directive* ptr)
@@ -633,7 +633,7 @@ namespace Sass {
633
633
class Keyframe_Rule : public Has_Block {
634
634
// according to css spec, this should be <keyframes-name>
635
635
// <keyframes-name> = <custom-ident> | <string>
636
- ADD_PROPERTY (Selector_Obj , name)
636
+ ADD_PROPERTY (Selector_List_Obj , name)
637
637
public:
638
638
Keyframe_Rule (ParserState pstate, Block_Obj b)
639
639
: Has_Block(pstate, b), name_()
@@ -911,9 +911,9 @@ namespace Sass {
911
911
// The Sass `@extend` directive.
912
912
// //////////////////////////////
913
913
class Extension : public Statement {
914
- ADD_PROPERTY (Selector_Obj , selector)
914
+ ADD_PROPERTY (Selector_List_Obj , selector)
915
915
public:
916
- Extension (ParserState pstate, Selector_Obj s)
916
+ Extension (ParserState pstate, Selector_List_Obj s)
917
917
: Statement(pstate), selector_(s)
918
918
{ statement_type (EXTEND); }
919
919
Extension (const Extension* ptr)
@@ -2313,19 +2313,26 @@ namespace Sass {
2313
2313
// Interpolated selectors -- the interpolated String will be expanded and
2314
2314
// re-parsed into a normal selector class.
2315
2315
// ///////////////////////////////////////////////////////////////////////
2316
- class Selector_Schema : public Selector {
2316
+ class Selector_Schema : public AST_Node {
2317
2317
ADD_PROPERTY (String_Obj, contents)
2318
2318
ADD_PROPERTY (bool , connect_parent);
2319
+ // must not be a reference counted object
2320
+ // otherwise we create circular references
2321
+ ADD_PROPERTY (Media_Block_Ptr, media_block)
2322
+ // store computed hash
2323
+ size_t hash_;
2319
2324
public:
2320
2325
Selector_Schema (ParserState pstate, String_Obj c)
2321
- : Selector (pstate),
2326
+ : AST_Node (pstate),
2322
2327
contents_ (c),
2323
- connect_parent_(true )
2328
+ connect_parent_(true ),
2329
+ media_block_(NULL )
2324
2330
{ }
2325
2331
Selector_Schema (const Selector_Schema* ptr)
2326
- : Selector (ptr),
2332
+ : AST_Node (ptr),
2327
2333
contents_(ptr->contents_),
2328
- connect_parent_(ptr->connect_parent_)
2334
+ connect_parent_(ptr->connect_parent_),
2335
+ media_block_(ptr->media_block_)
2329
2336
{ }
2330
2337
virtual bool has_parent_ref ();
2331
2338
virtual bool has_real_parent_ref ();
@@ -2657,9 +2664,9 @@ namespace Sass {
2657
2664
// Wrapped selector -- pseudo selector that takes a list of selectors as argument(s) e.g., :not(:first-of-type), :-moz-any(ol p.blah, ul, menu, dir)
2658
2665
// ///////////////////////////////////////////////
2659
2666
class Wrapped_Selector : public Simple_Selector {
2660
- ADD_PROPERTY (Selector_Obj , selector)
2667
+ ADD_PROPERTY (Selector_List_Obj , selector)
2661
2668
public:
2662
- Wrapped_Selector (ParserState pstate, std::string n, Selector_Obj sel)
2669
+ Wrapped_Selector (ParserState pstate, std::string n, Selector_List_Obj sel)
2663
2670
: Simple_Selector(pstate, n), selector_(sel)
2664
2671
{ simple_type (WRAPPED_SEL); }
2665
2672
Wrapped_Selector (const Wrapped_Selector* ptr)
@@ -2668,28 +2675,10 @@ namespace Sass {
2668
2675
virtual bool is_superselector_of (Wrapped_Selector_Obj sub);
2669
2676
// Selectors inside the negation pseudo-class are counted like any
2670
2677
// other, but the negation itself does not count as a pseudo-class.
2671
- virtual size_t hash ()
2672
- {
2673
- if (hash_ == 0 ) {
2674
- hash_combine (hash_, Simple_Selector::hash ());
2675
- if (selector_) hash_combine (hash_, selector_->hash ());
2676
- }
2677
- return hash_;
2678
- }
2679
- virtual bool has_parent_ref () {
2680
- // if (has_reference()) return true;
2681
- if (!selector ()) return false ;
2682
- return selector ()->has_parent_ref ();
2683
- }
2684
- virtual bool has_real_parent_ref () {
2685
- // if (has_reference()) return true;
2686
- if (!selector ()) return false ;
2687
- return selector ()->has_real_parent_ref ();
2688
- }
2689
- virtual unsigned long specificity () const
2690
- {
2691
- return selector_ ? selector_->specificity () : 0 ;
2692
- }
2678
+ virtual size_t hash ();
2679
+ virtual bool has_parent_ref ();
2680
+ virtual bool has_real_parent_ref ();
2681
+ virtual unsigned long specificity () const ;
2693
2682
virtual bool operator ==(const Simple_Selector& rhs) const ;
2694
2683
virtual bool operator ==(const Wrapped_Selector& rhs) const ;
2695
2684
virtual bool operator <(const Simple_Selector& rhs) const ;
@@ -2971,16 +2960,21 @@ namespace Sass {
2971
2960
// Comma-separated selector groups.
2972
2961
// /////////////////////////////////
2973
2962
class Selector_List : public Selector , public Vectorized <Complex_Selector_Obj> {
2963
+ ADD_PROPERTY (Selector_Schema_Obj, schema)
2974
2964
ADD_CONSTREF (std::vector<std::string>, wspace)
2975
2965
protected:
2976
2966
void adjust_after_pushing (Complex_Selector_Obj c);
2977
2967
public:
2978
2968
Selector_List (ParserState pstate, size_t s = 0 )
2979
- : Selector(pstate), Vectorized<Complex_Selector_Obj>(s), wspace_(0 )
2969
+ : Selector(pstate),
2970
+ Vectorized<Complex_Selector_Obj>(s),
2971
+ schema_ (NULL ),
2972
+ wspace_(0 )
2980
2973
{ }
2981
2974
Selector_List (const Selector_List* ptr)
2982
2975
: Selector(ptr),
2983
2976
Vectorized<Complex_Selector_Obj>(*ptr),
2977
+ schema_(ptr->schema_),
2984
2978
wspace_(ptr->wspace_)
2985
2979
{ }
2986
2980
std::string type () { return " list" ; }
@@ -2995,6 +2989,7 @@ namespace Sass {
2995
2989
virtual bool is_superselector_of (Selector_List_Obj sub, std::string wrapping = " " );
2996
2990
Selector_List_Ptr unify_with (Selector_List_Ptr, Context&);
2997
2991
void populate_extends (Selector_List_Obj, Context&, Subset_Map&);
2992
+ Selector_List_Obj eval (Eval& eval);
2998
2993
virtual size_t hash ()
2999
2994
{
3000
2995
if (Selector::hash_ == 0 ) {
0 commit comments