@@ -153,6 +153,15 @@ def get_identifiers_with_prefixes(self, prefixes: Set[str]):
153153 identifiers_with_prefixes .add (identifier )
154154 return identifiers_with_prefixes
155155
156+ def prefix_identifiers (self , identifiers_to_prefix : Set [str ]):
157+ """
158+ In all test driver files, prefix each identifier in `identifiers_to_prefix`
159+ with the test driver prefix: <DRIVER>_ for uppercase identifiers,
160+ and <driver>_ for lowercase ones.
161+ """
162+ for f in iter_code_files (self .dst_dir ):
163+ self .__prefix_identifiers_in_file (f , identifiers_to_prefix , self .driver )
164+
156165 @staticmethod
157166 def __rewrite_inclusions_in_file (file : Path , headers : Set [str ],
158167 src_include_dir : str , driver : str ,) -> None :
@@ -183,3 +192,28 @@ def repl(m: Match) -> str:
183192 new_text = include_line_re .sub (repl , text )
184193 if changed :
185194 file .write_text (new_text , encoding = "utf-8" )
195+
196+ @staticmethod
197+ def __prefix_identifiers_in_file (file : Path , identifiers : Set [str ], \
198+ prefix : str ) -> None :
199+ """
200+ In `file`, prefix each identifier in `identifiers` with the uppercase
201+ form of `prefix` if the identifier is uppercase, or with the lowercase
202+ form of `prefix` otherwise.
203+ """
204+ c_identifier_re = re .compile (r"\b[A-Za-z_][A-Za-z0-9_]*\b" )
205+ text = file .read_text (encoding = "utf-8" )
206+ prefix_uppercased = prefix .upper ()
207+ prefix_lowercased = prefix .lower ()
208+
209+ def repl (m : Match ) -> str :
210+ identifier = m .group (0 )
211+ if identifier in identifiers :
212+ if identifier [0 ].isupper ():
213+ return f"{ prefix_uppercased } _{ identifier } "
214+ else :
215+ return f"{ prefix_lowercased } _{ identifier } "
216+ return identifier
217+
218+ new_text = c_identifier_re .sub (repl , text )
219+ file .write_text (new_text , encoding = "utf-8" )
0 commit comments