You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

81 lines
2.9 KiB

#!/usr/bin/env python3
"""
Script to update test_ll_queue.c for xxx=0 architecture
Changes all queue_data_* calls to use struct ll_entry* intermediate
"""
import re
# Read the file
with open('test_ll_queue.c', 'r') as f:
content = f.read()
# Pattern 1: queue_data_new with variable declaration
# FROM: test_data_t* data = (test_data_t*)queue_data_new(sizeof(test_data_t));
# TO: struct ll_entry* entry = (struct ll_entry*)queue_data_new(sizeof(test_data_t));
# test_data_t* data = (test_data_t*)entry->data;
# Find all occurrences and replace
lines = content.split('\n')
new_lines = []
i = 0
while i < len(lines):
line = lines[i]
# Pattern 1: test_data_t* data = (test_data_t*)queue_data_new
match = re.match(r'(\s*)test_data_t\* (\w+) = \(test_data_t\*\)queue_data_new\(sizeof\(test_data_t\)\);', line)
if match:
indent = match.group(1)
var_name = match.group(2)
# Replace with two lines
new_lines.append(f'{indent}struct ll_entry* entry_{var_name} = (struct ll_entry*)queue_data_new(sizeof(test_data_t));')
new_lines.append(f'{indent}test_data_t* {var_name} = (test_data_t*)entry_{var_name}->data;')
i += 1
continue
# Pattern 2: test_data_t* var = (test_data_t*)queue_data_get
match = re.match(r'(\s*)test_data_t\* (\w+) = \(test_data_t\*\)queue_data_get\(([^)]+)\);', line)
if match:
indent = match.group(1)
var_name = match.group(2)
queue_var = match.group(3)
# Replace with two lines
new_lines.append(f'{indent}struct ll_entry* entry_{var_name} = (struct ll_entry*)queue_data_get({queue_var});')
new_lines.append(f'{indent}test_data_t* {var_name} = entry_{var_name} ? (test_data_t*)entry_{var_name}->data : NULL;')
i += 1
continue
# Pattern 3: queue_data_put with data variable
# Need to find the corresponding entry variable
match = re.match(r'(\s*)(\w+)\(q, (\w+), (\w+)->id\)', line)
if match and 'queue_data_put' in line:
func = match.group(2)
var = match.group(3)
# Replace data with entry variable
new_line = line.replace(f'{var}, {var}->id)', f'entry_{var}, {var}->id)')
new_lines.append(new_line)
i += 1
continue
# Pattern 4: queue_data_free with data variable
match = re.match(r'(\s*)queue_data_free\((\w+)\);', line)
if match:
indent = match.group(1)
var = match.group(2)
# Check if this is a data variable (not entry)
if not var.startswith('entry_') and var != 'data' and var != 'item':
# Replace with entry variable
new_lines.append(f'{indent}queue_data_free(entry_{var});')
else:
new_lines.append(line)
i += 1
continue
new_lines.append(line)
i += 1
# Write the updated file
with open('test_ll_queue.c', 'w') as f:
f.write('\n'.join(new_lines))
print("File updated successfully!")