9
9
10
10
import os
11
11
import sys
12
- import decl_visitor
12
+ import calldef
13
13
import algorithm
14
+ import decl_visitor
14
15
15
16
16
17
class decl_printer_t ( decl_visitor .decl_visitor_t ):
@@ -33,7 +34,7 @@ def __init__( self, level=0, print_details=True, recursive=True, writer=None ):
33
34
self .__recursive = recursive
34
35
self .__writer = writer
35
36
if not self .__writer :
36
- self .__writer = sys .stdout .write
37
+ self .__writer = lambda x : sys .stdout .write ( x + os . linesep )
37
38
38
39
def clone (self , increment_level = True ):
39
40
level = self .__level
@@ -83,20 +84,27 @@ def __nice_decl_name( self, inst ):
83
84
84
85
def print_decl_header (self ):
85
86
header = self .__nice_decl_name ( self .__inst ) + ": '%s'" % self .__inst .name
86
- self .writer ( ' ' * self .level * self .INDENT_SIZE + header .ljust ( self .JUSTIFY ) + os . linesep )
87
+ self .writer ( ' ' * self .level * self .INDENT_SIZE + header .ljust ( self .JUSTIFY ))
87
88
if self .__print_details :
88
89
curr_level = self .level + 1
89
90
if self .__inst .location :
90
91
location = 'location: [%s]:%s' % (self .__inst .location .file_name , self .__inst .location .line )
91
- self .writer ( ' ' * curr_level * self .INDENT_SIZE + location + os . linesep )
92
+ self .writer ( ' ' * curr_level * self .INDENT_SIZE + location )
92
93
artificial = 'artificial: ' + "'%s'" % str (self .__inst .is_artificial )
93
- self .writer ( ' ' * curr_level * self .INDENT_SIZE + artificial .ljust ( self .JUSTIFY ) + os . linesep )
94
+ self .writer ( ' ' * curr_level * self .INDENT_SIZE + artificial .ljust ( self .JUSTIFY ))
94
95
if self .__inst .attributes :
95
96
attributes = 'attributes: %s' % (self .__inst .attributes )
96
- self .writer ( ' ' * curr_level * self .INDENT_SIZE + attributes + os .linesep )
97
+ self .writer ( ' ' * curr_level * self .INDENT_SIZE + attributes )
98
+ if self .__inst .demangled :
99
+ demangled = 'demangled: %s' % (self .__inst .demangled )
100
+ self .writer ( ' ' * curr_level * self .INDENT_SIZE + demangled )
101
+ if self .__inst .mangled :
102
+ mangled = 'mangled: %s' % (self .__inst .mangled )
103
+ self .writer ( ' ' * curr_level * self .INDENT_SIZE + mangled )
104
+
97
105
98
106
99
- def __get_method_signature (self , decl = None ):
107
+ def print_calldef_info (self , decl = None ):
100
108
""" Returns function signature: [retval, [arg1, ..., argN]]. """
101
109
if None is decl :
102
110
decl = self .__inst
@@ -106,46 +114,45 @@ def __get_method_signature(self, decl=None):
106
114
retval = decl .return_type .decl_string
107
115
args = []
108
116
for arg in decl .arguments :
109
- args .append (arg .type .decl_string )
110
- return [retval , args ]
117
+ args .append (arg .type .decl_string + ' ' + arg .name )
118
+ indent = ' ' * (self .level + 1 ) * self .INDENT_SIZE
119
+ self .writer ( indent + "return type: " + str (retval ) )
120
+ self .writer ( indent + "arguments type: " + ', ' .join (args ))
121
+ if isinstance ( decl , calldef .member_calldef_t ):
122
+ self .writer ( indent + "virtual: " + str (decl .virtuality ))
123
+ self .writer ( indent + "is const: " + str (decl .has_const ))
124
+ self .writer ( indent + "is static: " + str (decl .has_static ))
111
125
112
126
def visit_member_function ( self ):
113
127
self .print_decl_header ()
114
- self .writer ( ' ' * (self .level + 1 ) * self .INDENT_SIZE
115
- + "Signature: " + str ( self .__get_method_signature () ) + os .linesep )
128
+ self .print_calldef_info ()
116
129
117
130
def visit_constructor ( self ):
118
131
self .print_decl_header ()
119
- self .writer ( ' ' * (self .level + 1 ) * self .INDENT_SIZE
120
- + "Signature: " + str ( self .__get_method_signature () ) + os .linesep )
132
+ self .print_calldef_info ()
121
133
122
134
if self .__print_details :
123
135
self .writer ( ' ' * ( self .level + 1 ) * self .INDENT_SIZE
124
- + 'copy constructor: ' + str (self .__inst .is_copy_constructor )
125
- + os .linesep )
136
+ + 'copy constructor: ' + str (self .__inst .is_copy_constructor ) )
126
137
127
138
def visit_destructor ( self ):
128
139
self .print_decl_header ()
129
140
130
141
def visit_member_operator ( self ):
131
142
self .print_decl_header ()
132
- self .writer ( ' ' * (self .level + 1 ) * self .INDENT_SIZE
133
- + "Signature: " + str ( self .__get_method_signature () ) + os .linesep )
143
+ self .print_calldef_info ()
134
144
135
145
def visit_casting_operator ( self ):
136
146
self .print_decl_header ()
137
- self .writer ( ' ' * (self .level + 1 ) * self .INDENT_SIZE
138
- + "Signature: " + str ( self .__get_method_signature () ) + os .linesep )
147
+ self .print_calldef_info ()
139
148
140
149
def visit_free_function ( self ):
141
150
self .print_decl_header ()
142
- self .writer ( ' ' * (self .level + 1 ) * self .INDENT_SIZE
143
- + "Signature: " + str ( self .__get_method_signature () ) + os .linesep )
151
+ self .print_calldef_info ()
144
152
145
153
def visit_free_operator ( self ):
146
154
self .print_decl_header ()
147
- self .writer ( ' ' * (self .level + 1 ) * self .INDENT_SIZE
148
- + "Signature: " + str ( self .__get_method_signature () ) + os .linesep )
155
+ self .print_calldef_info ()
149
156
150
157
def visit_class_declaration (self ):
151
158
self .print_decl_header ()
@@ -154,35 +161,35 @@ def visit_class(self ):
154
161
self .print_decl_header ()
155
162
curr_level = self .level + 1
156
163
class_type = 'class type: ' + "'%s'" % str (self .__inst .class_type )
157
- self .writer ( ' ' * curr_level * self .INDENT_SIZE + class_type .ljust ( self .JUSTIFY ) + os . linesep )
164
+ self .writer ( ' ' * curr_level * self .INDENT_SIZE + class_type .ljust ( self .JUSTIFY ))
158
165
if self .__print_details :
159
166
byte_size = 'size: %d' % (self .__inst .byte_size )
160
- self .writer ( ' ' * curr_level * self .INDENT_SIZE + byte_size .ljust ( self .JUSTIFY ) + os . linesep )
167
+ self .writer ( ' ' * curr_level * self .INDENT_SIZE + byte_size .ljust ( self .JUSTIFY ))
161
168
try :
162
169
byte_align = 'align: %d' % (self .__inst .byte_align )
163
- self .writer ( ' ' * curr_level * self .INDENT_SIZE + byte_align .ljust ( self .JUSTIFY ) + os . linesep )
170
+ self .writer ( ' ' * curr_level * self .INDENT_SIZE + byte_align .ljust ( self .JUSTIFY ))
164
171
except NotImplementedError :
165
- self .writer ( ' ' * curr_level * self .INDENT_SIZE + "align: not implemented" .ljust ( self .JUSTIFY ) + os . linesep )
172
+ self .writer ( ' ' * curr_level * self .INDENT_SIZE + "align: not implemented" .ljust ( self .JUSTIFY ))
166
173
167
174
if self .__inst .aliases :
168
175
aliases = map ( lambda typedef : typedef .name , self .__inst .aliases )
169
176
msg = 'aliases: ' + `aliases`
170
- self .writer ( ' ' * curr_level * self .INDENT_SIZE + msg .ljust ( self .JUSTIFY ) + os . linesep )
177
+ self .writer ( ' ' * curr_level * self .INDENT_SIZE + msg .ljust ( self .JUSTIFY ))
171
178
172
179
def print_hierarchy (hierarchy_type , classes , curr_level ):
173
- self .writer ( ' ' * curr_level * self .INDENT_SIZE + hierarchy_type .ljust ( self .JUSTIFY ) + os . linesep )
180
+ self .writer ( ' ' * curr_level * self .INDENT_SIZE + hierarchy_type .ljust ( self .JUSTIFY ))
174
181
curr_level += 1
175
182
for class_ in classes :
176
183
class_str = 'class: ' + "'%s'" % str (class_ .related_class .decl_string )
177
- self .writer ( ' ' * curr_level * self .INDENT_SIZE + class_str .ljust ( self .JUSTIFY ) + os . linesep )
184
+ self .writer ( ' ' * curr_level * self .INDENT_SIZE + class_str .ljust ( self .JUSTIFY ))
178
185
access = 'access type: ' + "'%s'" % str (class_ .access )
179
- self .writer ( ' ' * (curr_level + 1 )* self .INDENT_SIZE + access .ljust ( self .JUSTIFY ) + os . linesep )
186
+ self .writer ( ' ' * (curr_level + 1 )* self .INDENT_SIZE + access .ljust ( self .JUSTIFY ))
180
187
if not ( None is class_ .is_virtual ):
181
188
is_virtual = 'virtual inheritance: ' + "'%s'" % str (class_ .is_virtual )
182
- self .writer ( ' ' * (curr_level + 1 )* self .INDENT_SIZE + is_virtual .ljust ( self .JUSTIFY ) + os . linesep )
189
+ self .writer ( ' ' * (curr_level + 1 )* self .INDENT_SIZE + is_virtual .ljust ( self .JUSTIFY ))
183
190
184
191
def print_members (members_type , members , curr_level ):
185
- self .writer ( ' ' * curr_level * self .INDENT_SIZE + members_type .ljust ( self .JUSTIFY ) + os . linesep )
192
+ self .writer ( ' ' * curr_level * self .INDENT_SIZE + members_type .ljust ( self .JUSTIFY ))
186
193
if self .__recursive :
187
194
curr_level += 1
188
195
for member in members :
@@ -207,7 +214,7 @@ def visit_enumeration(self):
207
214
value_level = ' ' * ( curr_level + 1 )* self .INDENT_SIZE
208
215
self .writer ( os .linesep )
209
216
for name , value in self .__inst .values :
210
- self .writer ( value_level + "%s : %s" % (name , value ) + os . linesep )
217
+ self .writer ( value_level + "%s : %s" % (name , value ))
211
218
212
219
def visit_namespace (self ):
213
220
self .print_decl_header ()
@@ -220,24 +227,24 @@ def visit_namespace(self ):
220
227
def visit_typedef (self ):
221
228
self .print_decl_header ()
222
229
curr_level = self .level + 1
223
- self .writer ( ' ' * curr_level * self .INDENT_SIZE + 'alias to: ' + self .__inst .type .decl_string + os . linesep )
230
+ self .writer ( ' ' * curr_level * self .INDENT_SIZE + 'alias to: ' + self .__inst .type .decl_string )
224
231
225
232
def visit_variable (self ):
226
233
self .print_decl_header ()
227
234
curr_level = self .level + 1
228
235
self .writer ( ' ' * curr_level * self .INDENT_SIZE + 'type: %s value: %s' % (self .__inst .type .decl_string , self .__inst .value ) + os .linesep )
229
236
if self .__print_details :
230
237
byte_size = 'size: %d' % (self .__inst .type .byte_size )
231
- self .writer ( ' ' * curr_level * self .INDENT_SIZE + byte_size .ljust ( self .JUSTIFY ) + os . linesep )
238
+ self .writer ( ' ' * curr_level * self .INDENT_SIZE + byte_size .ljust ( self .JUSTIFY ))
232
239
try :
233
240
byte_align = 'align: %d' % (self .__inst .type .byte_align )
234
- self .writer ( ' ' * curr_level * self .INDENT_SIZE + byte_align .ljust ( self .JUSTIFY ) + os . linesep )
241
+ self .writer ( ' ' * curr_level * self .INDENT_SIZE + byte_align .ljust ( self .JUSTIFY ))
235
242
except NotImplementedError :
236
- self .writer ( ' ' * curr_level * self .INDENT_SIZE + "align: not implemented" .ljust ( self .JUSTIFY ) + os . linesep )
243
+ self .writer ( ' ' * curr_level * self .INDENT_SIZE + "align: not implemented" .ljust ( self .JUSTIFY ))
237
244
byte_offset = 'offset: %d' % (self .__inst .byte_offset )
238
245
self .writer ( ' ' * curr_level * self .INDENT_SIZE + byte_offset + os .linesep )
239
246
240
- def print_declarations ( decls , detailed = True , recursive = True , writer = sys .stdout .write ):
247
+ def print_declarations ( decls , detailed = True , recursive = True , writer = lambda x : sys .stdout .write ( x + os . linesep ) ):
241
248
""" Print decl tree rooted at each of the included nodes.
242
249
decls - either a single decl or a list of decls.
243
250
"""
0 commit comments