mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 02:15:10 +00:00 
			
		
		
		
	 a13b26cac1
			
		
	
	
		a13b26cac1
		
			
		
	
	
	
	
		
			
			PyType_GetSlot() can now accept static types. Co-Authored-By: Petr Viktorin <encukou@gmail.com> Automerge-Triggered-By: GH:encukou
		
			
				
	
	
		
			51 lines
		
	
	
	
		
			1.7 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable file
		
	
	
	
	
			
		
		
	
	
			51 lines
		
	
	
	
		
			1.7 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable file
		
	
	
	
	
| #!/usr/bin/python
 | |
| # Usage: typeslots.py < Include/typeslots.h typeslots.inc
 | |
| 
 | |
| import sys, re
 | |
| 
 | |
| 
 | |
| def generate_typeslots(out=sys.stdout):
 | |
|     out.write("/* Generated by typeslots.py */\n")
 | |
|     res = {}
 | |
|     for line in sys.stdin:
 | |
|         m = re.match("#define Py_([a-z_]+) ([0-9]+)", line)
 | |
|         if not m:
 | |
|             continue
 | |
| 
 | |
|         member = m.group(1)
 | |
|         if member.startswith("tp_"):
 | |
|             member = f'{{-1, offsetof(PyTypeObject, {member})}}'
 | |
|         elif member.startswith("am_"):
 | |
|             member = (f'{{offsetof(PyAsyncMethods, {member}),'+
 | |
|                       ' offsetof(PyTypeObject, tp_as_async)}')
 | |
|         elif member.startswith("nb_"):
 | |
|             member = (f'{{offsetof(PyNumberMethods, {member}),'+
 | |
|                       ' offsetof(PyTypeObject, tp_as_number)}')
 | |
|         elif member.startswith("mp_"):
 | |
|             member = (f'{{offsetof(PyMappingMethods, {member}),'+
 | |
|                       ' offsetof(PyTypeObject, tp_as_mapping)}')
 | |
|         elif member.startswith("sq_"):
 | |
|             member = (f'{{offsetof(PySequenceMethods, {member}),'+
 | |
|                       ' offsetof(PyTypeObject, tp_as_sequence)}')
 | |
|         elif member.startswith("bf_"):
 | |
|             member = (f'{{offsetof(PyBufferProcs, {member}),'+
 | |
|                       ' offsetof(PyTypeObject, tp_as_buffer)}')
 | |
|         res[int(m.group(2))] = member
 | |
| 
 | |
|     M = max(res.keys())+1
 | |
|     for i in range(1,M):
 | |
|         if i in res:
 | |
|             out.write("%s,\n" % res[i])
 | |
|         else:
 | |
|             out.write("{0, 0},\n")
 | |
| 
 | |
| 
 | |
| def main():
 | |
|     if len(sys.argv) == 2:
 | |
|         with open(sys.argv[1], "w") as f:
 | |
|             generate_typeslots(f)
 | |
|     else:
 | |
|         generate_typeslots()
 | |
| 
 | |
| if __name__ == "__main__":
 | |
|     main()
 |