Skip to content

Commit 957ad48

Browse files
committed
Merge pull request #2005 from mgreter/bugfix/flag-propagation
Fix two flag propagations
2 parents bee270f + b96723b commit 957ad48

File tree

9 files changed

+29
-6
lines changed

9 files changed

+29
-6
lines changed

include/sass2scss.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@
3737
#ifndef SASS2SCSS_VERSION
3838
// Hardcode once the file is copied from
3939
// https://github.com/mgreter/sass2scss
40-
#define SASS2SCSS_VERSION "1.0.5"
40+
#define SASS2SCSS_VERSION "1.0.6"
4141
#endif
4242

4343
// add namespace for c++

src/ast.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1275,10 +1275,10 @@ namespace Sass {
12751275
if ((*this)[i]->head()->is_empty_reference()) {
12761276
// simply move to the next tail if we have "no" combinator
12771277
if ((*this)[i]->combinator() == Complex_Selector::ANCESTOR_OF) {
1278-
if ((*this)[i]->tail() && (*this)[i]->has_line_feed()) {
1279-
(*this)[i]->tail()->has_line_feed(true);
1280-
}
12811278
if ((*this)[i]->tail() != NULL) {
1279+
if ((*this)[i]->has_line_feed()) {
1280+
(*this)[i]->tail()->has_line_feed(true);
1281+
}
12821282
(*this)[i] = (*this)[i]->tail();
12831283
}
12841284
}

src/ast.hpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -856,6 +856,7 @@ namespace Sass {
856856
// The @content directive for mixin content blocks.
857857
///////////////////////////////////////////////////
858858
class Content : public Statement {
859+
ADD_PROPERTY(Media_Block*, media_block)
859860
public:
860861
Content(ParserState pstate) : Statement(pstate)
861862
{ statement_type(CONTENT); }

src/debugger.hpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -352,6 +352,7 @@ inline void debug_ast(AST_Node* node, std::string ind, Env* env)
352352
Content* block = dynamic_cast<Content*>(node);
353353
std::cerr << ind << "Content " << block;
354354
std::cerr << " (" << pstate_source_position(node) << ")";
355+
std::cerr << " [@media:" << block->media_block() << "]";
355356
std::cerr << " " << block->tabs() << std::endl;
356357
} else if (dynamic_cast<Import_Stub*>(node)) {
357358
Import_Stub* block = dynamic_cast<Import_Stub*>(node);
@@ -564,6 +565,7 @@ inline void debug_ast(AST_Node* node, std::string ind, Env* env)
564565
Content* expression = dynamic_cast<Content*>(node);
565566
std::cerr << ind << "Content " << expression;
566567
std::cerr << " (" << pstate_source_position(node) << ")";
568+
std::cerr << " [@media:" << expression->media_block() << "]";
567569
std::cerr << " [Statement]" << std::endl;
568570
} else if (dynamic_cast<Boolean*>(node)) {
569571
Boolean* expression = dynamic_cast<Boolean*>(node);

src/eval.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1683,6 +1683,7 @@ namespace Sass {
16831683
std::vector<Selector_List*> rv;
16841684
Selector_List* sl = SASS_MEMORY_NEW(ctx.mem, Selector_List, s->pstate());
16851685
sl->media_block(s->media_block());
1686+
sl->is_optional(s->is_optional());
16861687
for (size_t i = 0, iL = s->length(); i < iL; ++i) {
16871688
rv.push_back(operator()((*s)[i]));
16881689
}

src/expand.cpp

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ namespace Sass {
1919
call_stack(std::vector<AST_Node*>()),
2020
property_stack(std::vector<String*>()),
2121
selector_stack(std::vector<Selector_List*>()),
22+
media_block_stack(std::vector<Media_Block*>()),
2223
backtrace_stack(std::vector<Backtrace*>()),
2324
in_keyframes(false)
2425
{
@@ -29,6 +30,7 @@ namespace Sass {
2930
// import_stack.push_back(0);
3031
property_stack.push_back(0);
3132
selector_stack.push_back(0);
33+
media_block_stack.push_back(0);
3234
backtrace_stack.push_back(0);
3335
backtrace_stack.push_back(bt);
3436
}
@@ -195,6 +197,7 @@ namespace Sass {
195197

196198
Statement* Expand::operator()(Media_Block* m)
197199
{
200+
media_block_stack.push_back(m);
198201
Expression* mq = m->media_queries()->perform(&eval);
199202
std::string str_mq(mq->to_string(ctx.c_options));
200203
char* str = sass_copy_c_string(str_mq.c_str());
@@ -206,6 +209,7 @@ namespace Sass {
206209
static_cast<List*>(mq->perform(&eval)),
207210
m->block()->perform(this)->block(),
208211
0);
212+
media_block_stack.pop_back();
209213
mm->tabs(m->tabs());
210214
return mm;
211215
}
@@ -593,7 +597,7 @@ namespace Sass {
593597
error("Can't extend " + sel_str + ": can't extend nested selectors", c->pstate(), backtrace());
594598
}
595599
Compound_Selector* placeholder = c->head();
596-
placeholder->is_optional(s->is_optional());
600+
if (contextualized->is_optional()) placeholder->is_optional(true);
597601
for (size_t i = 0, L = extender->length(); i < L; ++i) {
598602
Complex_Selector* sel = (*extender)[i];
599603
if (!(sel->head() && sel->head()->length() > 0 &&
@@ -625,6 +629,13 @@ namespace Sass {
625629
if (Selector_Schema* schema = dynamic_cast<Selector_Schema*>(s)) {
626630
if (schema->has_parent_ref()) s = eval(schema);
627631
}
632+
if (Selector_List* sl = dynamic_cast<Selector_List*>(s)) {
633+
for (Complex_Selector* cs : *sl) {
634+
if (cs != NULL && cs->head() != NULL) {
635+
cs->head()->media_block(media_block_stack.back());
636+
}
637+
}
638+
}
628639
selector_stack.push_back(0);
629640
expand_selector_list(s, extender);
630641
selector_stack.pop_back();

src/expand.hpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ namespace Sass {
3333
std::vector<AST_Node*> call_stack;
3434
std::vector<String*> property_stack;
3535
std::vector<Selector_List*> selector_stack;
36+
std::vector<Media_Block*> media_block_stack;
3637
std::vector<Backtrace*>backtrace_stack;
3738
bool in_keyframes;
3839

src/extend.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1737,7 +1737,7 @@ namespace Sass {
17371737
SubsetMapEntries entries = subset_map.get_v(pHead->to_str_vec());
17381738
for (ExtensionPair ext : entries) {
17391739
// check if both selectors have the same media block parent
1740-
if (ext.first->media_block() == pComplexSelector->media_block()) continue;
1740+
// if (ext.first->media_block() == pComplexSelector->media_block()) continue;
17411741
if (ext.second->media_block() == 0) continue;
17421742
if (pComplexSelector->media_block() &&
17431743
ext.second->media_block()->media_queries() &&

src/sass2scss.cpp

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -528,6 +528,13 @@ namespace Sass
528528
// reset converter state
529529
converter.selector = false;
530530

531+
// looks like some undocumented behavior ...
532+
// https://github.com/mgreter/sass2scss/issues/29
533+
if (sass.substr(pos_left, 1) == "\\") {
534+
converter.selector = true;
535+
sass[pos_left] = ' ';
536+
}
537+
531538
// check if we have sass property syntax
532539
if (sass.substr(pos_left, 1) == ":" && sass.substr(pos_left, 2) != "::")
533540
{

0 commit comments

Comments
 (0)