From 6e1686757f589639c65e2f9b51b830eb137224c1 Mon Sep 17 00:00:00 2001 From: Doug Fish Date: Fri, 12 Sep 2014 13:39:49 -0500 Subject: Make an earier copy of the rules to close up the window for concurrent modification to break things. --- scss/__init__.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/scss/__init__.py b/scss/__init__.py index 00a366f..a0b0aad 100644 --- a/scss/__init__.py +++ b/scss/__init__.py @@ -1330,10 +1330,11 @@ class Scss(object): # DEVIATION: These are used to rearrange rules in dependency order, so # an @extended parent appears in the output before a child. Sass does # not do this, and the results may be unexpected. Pending removal. + rules = list(self.rules) rule_order = dict() rule_dependencies = dict() order = 0 - for rule in self.rules: + for rule in rules: rule_order[rule] = order # Rules are ultimately sorted by the earliest rule they must # *precede*, so every rule should "depend" on the next one @@ -1347,7 +1348,7 @@ class Scss(object): # Now go through all the rules with an @extends and find their parent # rules. - for rule in self.rules: + for rule in rules: for selector in rule.extends_selectors: # This is a little dirty. intersection isn't a class method. # Don't think about it too much. @@ -1395,7 +1396,8 @@ class Scss(object): more_parent_selectors)) rule_dependencies[parent_rule].append(rule_order[rule]) - self.rules.sort(key=lambda rule: min(rule_dependencies[rule])) + rules.sort(key=lambda rule: min(rule_dependencies[rule])) + self.rules = rules @print_timing(3) def parse_properties(self): -- cgit v1.2.1