forked from mirrors/gecko-dev
		
	 94a9f2e471
			
		
	
	
		94a9f2e471
		
	
	
	
	
		
			
			Depends on D52592 Differential Revision: https://phabricator.services.mozilla.com/D52593 --HG-- extra : moz-landing-system : lando
		
			
				
	
	
		
			85 lines
		
	
	
	
		
			2.4 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			85 lines
		
	
	
	
		
			2.4 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| #!/usr/bin/env python3
 | |
| # This Source Code Form is subject to the terms of the Mozilla Public
 | |
| # License, v. 2.0. If a copy of the MPL was not distributed with this
 | |
| # file, You can obtain one at http://mozilla.org/MPL/2.0/.
 | |
| 
 | |
| 
 | |
| """
 | |
| Script to remove unused getters in nsComputedDOMStyle.
 | |
| 
 | |
| It needs to be run from the topsrcdir, and it requires passing in the objdir
 | |
| as first argument. It can only be run after nsComputedDOMStyleGenerated.inc
 | |
| is generated in the objdir.
 | |
| """
 | |
| 
 | |
| import re
 | |
| import sys
 | |
| 
 | |
| from pathlib import Path
 | |
| 
 | |
| if len(sys.argv) != 2:
 | |
|     print("Usage: {} objdir".format(sys.argv[0]))
 | |
|     exit(1)
 | |
| 
 | |
| generated = Path(sys.argv[1]) / "layout" / "style"
 | |
| generated = generated / "nsComputedDOMStyleGenerated.inc"
 | |
| RE_GENERATED = re.compile(r"DoGet\w+")
 | |
| keeping = set()
 | |
| with generated.open() as f:
 | |
|     for line in f:
 | |
|         m = RE_GENERATED.search(line)
 | |
|         if m is not None:
 | |
|             keeping.add(m.group(0))
 | |
| 
 | |
| HEADER = "layout/style/nsComputedDOMStyle.h"
 | |
| SOURCE = "layout/style/nsComputedDOMStyle.cpp"
 | |
| 
 | |
| # We need to keep functions invoked by others
 | |
| RE_DEF = re.compile(r"nsComputedDOMStyle::(DoGet\w+)\(\)")
 | |
| RE_SRC = re.compile(r"\b(DoGet\w+)\(\)")
 | |
| with open(SOURCE, "r") as f:
 | |
|     for line in f:
 | |
|         m = RE_DEF.search(line)
 | |
|         if m is not None:
 | |
|             continue
 | |
|         m = RE_SRC.search(line)
 | |
|         if m is not None:
 | |
|             keeping.add(m.group(1))
 | |
| 
 | |
| removing = set()
 | |
| remaining_lines = []
 | |
| with open(HEADER, "r") as f:
 | |
|     for line in f:
 | |
|         m = RE_SRC.search(line)
 | |
|         if m is not None:
 | |
|             name = m.group(1)
 | |
|             if name not in keeping:
 | |
|                 print("Removing " + name)
 | |
|                 removing.add(name)
 | |
|                 continue
 | |
|         remaining_lines.append(line)
 | |
| 
 | |
| with open(HEADER, "w", newline="") as f:
 | |
|     f.writelines(remaining_lines)
 | |
| 
 | |
| remaining_lines = []
 | |
| is_removing = False
 | |
| with open(SOURCE, "r") as f:
 | |
|     for line in f:
 | |
|         if is_removing:
 | |
|             if line == "}\n":
 | |
|                 is_removing = False
 | |
|             continue
 | |
|         m = RE_DEF.search(line)
 | |
|         if m is not None:
 | |
|             name = m.group(1)
 | |
|             if name in removing:
 | |
|                 remaining_lines.pop()
 | |
|                 if remaining_lines[-1] == "\n":
 | |
|                     remaining_lines.pop()
 | |
|                 is_removing = True
 | |
|                 continue
 | |
|         remaining_lines.append(line)
 | |
| 
 | |
| with open(SOURCE, "w", newline="") as f:
 | |
|     f.writelines(remaining_lines)
 |