diff --git a/src/ast.cpp b/src/ast.cpp index 273bbd850d..dbe534559f 100644 --- a/src/ast.cpp +++ b/src/ast.cpp @@ -291,7 +291,7 @@ namespace Sass { { for (i = 0, L = rhs->length(); i < L; ++i) { - if ((typeid(*(*rhs)[i]) == typeid(Pseudo_Selector) || typeid(*(*rhs)[i]) == typeid(Wrapped_Selector)) && (*rhs)[L-1]->is_pseudo_element()) + if ((dynamic_cast((*rhs)[i]) || dynamic_cast((*rhs)[i])) && (*rhs)[L-1]->is_pseudo_element()) { found = true; break; } } } @@ -299,7 +299,7 @@ namespace Sass { { for (i = 0, L = rhs->length(); i < L; ++i) { - if (typeid(*(*rhs)[i]) == typeid(Pseudo_Selector) || typeid(*(*rhs)[i]) == typeid(Wrapped_Selector)) + if (dynamic_cast((*rhs)[i]) || dynamic_cast((*rhs)[i])) { found = true; break; } } } diff --git a/src/ast.hpp b/src/ast.hpp index 655e759da0..e6af937537 100644 --- a/src/ast.hpp +++ b/src/ast.hpp @@ -189,8 +189,8 @@ namespace Sass { virtual ~Vectorized() = 0; size_t length() const { return elements_.size(); } bool empty() const { return elements_.empty(); } - T last() { return elements_.back(); } - T first() { return elements_.front(); } + T last() const { return elements_.back(); } + T first() const { return elements_.front(); } T& operator[](size_t i) { return elements_[i]; } virtual const T& at(size_t i) const { return elements_.at(i); } const T& operator[](size_t i) const { return elements_[i]; } @@ -2079,9 +2079,9 @@ namespace Sass { } const Simple_Selector* base() const { if (length() == 0) return 0; - if (typeid(*(*this)[0]) == typeid(Type_Selector)) + // ToDo: why is this needed? + if (dynamic_cast((*this)[0])) return (*this)[0]; -// else cerr << "SERIOUSELY " << "\n"; return 0; } virtual bool is_superselector_of(Compound_Selector* sub, std::string wrapped = ""); @@ -2098,7 +2098,7 @@ namespace Sass { bool is_empty_reference() { return length() == 1 && - typeid(*(*this)[0]) == typeid(Parent_Selector); + dynamic_cast((*this)[0]); } std::vector to_str_vec(); // sometimes need to convert to a flat "by-value" data structure diff --git a/src/eval.cpp b/src/eval.cpp index be48071911..80920ac4da 100644 --- a/src/eval.cpp +++ b/src/eval.cpp @@ -638,7 +638,7 @@ namespace Sass { To_String to_string(&ctx); // Special cases: +/- variables which evaluate to null ouput just +/-, // but +/- null itself outputs the string - if (operand->concrete_type() == Expression::NULL_VAL && typeid(*(u->operand())) == typeid(Variable)) { + if (operand->concrete_type() == Expression::NULL_VAL && dynamic_cast(u->operand())) { u->operand(SASS_MEMORY_NEW(ctx.mem, String_Quoted, u->pstate(), "")); } else u->operand(operand);