@@ -43,8 +43,6 @@ def print_struct_val(val, internal_dict):
43
43
return print_struct_val_starting_from (0 , val , internal_dict )
44
44
45
45
def print_vec_slice_val (val , internal_dict ):
46
- output = "&["
47
-
48
46
length = val .GetChildAtIndex (1 ).GetValueAsUnsigned ()
49
47
50
48
data_ptr_val = val .GetChildAtIndex (0 )
@@ -56,16 +54,12 @@ def print_vec_slice_val(val, internal_dict):
56
54
57
55
start_address = data_ptr_val .GetValueAsUnsigned ()
58
56
59
- for i in range ( length ):
57
+ def render_element ( i ):
60
58
address = start_address + i * element_type_size
61
- element_val = val .CreateValueFromAddress ( val .GetName () + ("[%s]" % i ), address , element_type )
62
- output += print_val (element_val , internal_dict )
63
-
64
- if i != length - 1 :
65
- output += ", "
59
+ element_val = val .CreateValueFromAddress ( val .GetName () + ("[%s]" % i ), address , element_type )
60
+ return print_val (element_val , internal_dict )
66
61
67
- output += "]"
68
- return output
62
+ return "&[%s]" % (', ' .join ([render_element (i ) for i in range (length )]))
69
63
70
64
def print_struct_val_starting_from (field_start_index , val , internal_dict ):
71
65
'''
@@ -77,39 +71,33 @@ def print_struct_val_starting_from(field_start_index, val, internal_dict):
77
71
t = val .GetType ()
78
72
has_field_names = type_has_field_names (t )
79
73
type_name = extract_type_name (t .GetName ())
80
- output = ""
81
-
82
- if not type_name .startswith ("(" ):
83
- # this is a tuple, so don't print the type name
84
- output += type_name
85
74
86
75
if has_field_names :
87
- output += " { \n "
76
+ template = "%(type_name)s {\n %(body)s\n }"
77
+ separator = ", \n "
88
78
else :
89
- output += "("
79
+ template = "%(type_name)s(%(body)s)"
80
+ separator = ", "
81
+
82
+ if type_name .startswith ("(" ):
83
+ # this is a tuple, so don't print the type name
84
+ type_name = ""
90
85
91
86
num_children = val .num_children
92
87
93
- for child_index in range (field_start_index , num_children ):
88
+ def render_child (child_index ):
89
+ this = ""
94
90
if has_field_names :
95
91
field_name = t .GetFieldAtIndex (child_index ).GetName ()
96
- output += field_name + ": "
92
+ this += field_name + ": "
97
93
98
94
field_val = val .GetChildAtIndex (child_index )
99
- output += print_val (field_val , internal_dict )
95
+ return this + print_val (field_val , internal_dict )
100
96
101
- if child_index != num_children - 1 :
102
- output += ", "
103
-
104
- if has_field_names :
105
- output += "\n "
106
-
107
- if has_field_names :
108
- output += "}"
109
- else :
110
- output += ")"
97
+ body = separator .join ([render_child (idx ) for idx in range (field_start_index , num_children )])
111
98
112
- return output
99
+ return template % {"type_name" : type_name ,
100
+ "body" : body }
113
101
114
102
115
103
def print_enum_val (val , internal_dict ):
@@ -243,3 +231,5 @@ def is_vec_slice(val):
243
231
244
232
type_name = extract_type_name (ty .GetName ()).replace ("&'static" , "&" ).replace (" " , "" )
245
233
return type_name .startswith ("&[" ) and type_name .endswith ("]" )
234
+
235
+ # vi: sw=2:ts=2
0 commit comments