@@ -53,7 +53,7 @@ def parseRules(ruleFiles, comby=False):
5353 continue # Allow blank lines and comments, just ignore lines without a transformation
5454 else :
5555 s = r .split (" ==> " )
56-
56+
5757 if comby :
5858 lhs = s [0 ]
5959 lhs = lhs .rstrip () # Trailing whitespace in rule file will be treated significantly unless stripped, so strip it. If matching trailing whitespace is desired, then regex holes should be used.
@@ -80,14 +80,16 @@ def parseRules(ruleFiles, comby=False):
8080
8181
8282
83- def mutants_comby (source , ruleFiles = [ "universal.rules" ] , mutateTestCode = False , mutateBoth = False ,
83+ def mutants_comby (source , ruleFiles = None , mutateTestCode = False , mutateBoth = False ,
8484 ignorePatterns = None , ignoreStringOnly = False , fuzzing = False , language = ".generic" ):
85+ if ruleFiles is None :
86+ ruleFiles = ["universal.rules" ]
8587 comby = Comby ()
8688 print ("MUTATING WITH RULES (COMBY):" , ", " .join (ruleFiles ))
87- (rules , ignoreRules , skipRules ) = parseRules (ruleFiles , True )
89+ (rules , ignoreRules , _ ) = parseRules (ruleFiles , True )
8890 for lhs in ignorePatterns :
89- ignoreRules .append (lhs )
90- source = '' .join (source )
91+ ignoreRules .append (lhs )
92+ source = '' .join (source )
9193 mutants = []
9294
9395 # Lines that match with DO_NOT_MUTATE and other ignore rules will be skipped
@@ -100,9 +102,9 @@ def mutants_comby(source, ruleFiles=["universal.rules"], mutateTestCode=False, m
100102
101103 # Instead of line-by-line x rule-by-rule iterate rule-by-rule x match-by-match.
102104 for ((lhs , rhs ), ruleUsed ) in rules :
103- try :
105+ try :
104106 for match in comby .matches (source , lhs , language = language ):
105- environment = dict ()
107+ environment = {}
106108 for entry in match .environment :
107109 environment [entry ] = match .environment .get (entry ).fragment
108110 mutant = comby .substitute (rhs , environment )
@@ -115,18 +117,20 @@ def mutants_comby(source, ruleFiles=["universal.rules"], mutateTestCode=False, m
115117 if line in ignoreLines :
116118 skipMutant = True
117119 break
118-
120+
119121 if not skipMutant :
120122 mutants .append ((substitutionRange , mutant , ruleUsed , lineRange , (lhs ,rhs )))
121- except JSONDecodeError as e :
123+ except JSONDecodeError :
122124 continue
123125 except Exception as e :
124126 print (f"WARNING: Got exception { e } running rule { ruleUsed } " )
125127 continue
126128 return mutants
127129
128- def mutants (source , ruleFiles = [ "universal.rules" ] , mutateTestCode = False , mutateBoth = False ,
130+ def mutants (source , ruleFiles = None , mutateTestCode = False , mutateBoth = False ,
129131 ignorePatterns = None , ignoreStringOnly = False , fuzzing = False ):
132+ if ruleFiles is None :
133+ ruleFiles = ["universal.rules" ]
130134 print ("MUTATING WITH RULES:" , ", " .join (ruleFiles ))
131135
132136 (rules , ignoreRules , skipRules ) = parseRules (ruleFiles )
@@ -180,8 +184,8 @@ def mutants(source, ruleFiles=["universal.rules"], mutateTestCode=False, mutateB
180184 skipp = skipRule .search (l , 0 )
181185 if skipp and (skipp .start () < skipPos ):
182186 skipPos = skipp .start ()
183-
184-
187+
188+
185189 p = lhs .search (l , 0 )
186190
187191 # skip mutating if match occurs at index >= skipPos
@@ -235,7 +239,7 @@ def mutants(source, ruleFiles=["universal.rules"], mutateTestCode=False, mutateB
235239 if (mutant != l ) and ((lineno , mutant ) not in produced ) and (not skipDueToString ):
236240 mutants .append ((lineno , mutant , ruleUsed , (lhs ,rhs )))
237241 produced [(lineno , mutant )] = True
238-
242+
239243 p = lhs .search (l , p .start ()+ 1 ) #search from the next position of the current match
240244 if abandon :
241245 break
0 commit comments