| 244 | return _format_code_info(_get_code_object(x)) |
| 245 | |
| 246 | def _format_code_info(co): |
| 247 | lines = [] |
| 248 | lines.append("Name: %s" % co.co_name) |
| 249 | lines.append("Filename: %s" % co.co_filename) |
| 250 | lines.append("Argument count: %s" % co.co_argcount) |
| 251 | lines.append("Positional-only arguments: %s" % co.co_posonlyargcount) |
| 252 | lines.append("Kw-only arguments: %s" % co.co_kwonlyargcount) |
| 253 | lines.append("Number of locals: %s" % co.co_nlocals) |
| 254 | lines.append("Stack size: %s" % co.co_stacksize) |
| 255 | lines.append("Flags: %s" % pretty_flags(co.co_flags)) |
| 256 | if co.co_consts: |
| 257 | lines.append("Constants:") |
| 258 | for i_c in enumerate(co.co_consts): |
| 259 | lines.append("%4d: %r" % i_c) |
| 260 | if co.co_names: |
| 261 | lines.append("Names:") |
| 262 | for i_n in enumerate(co.co_names): |
| 263 | lines.append("%4d: %s" % i_n) |
| 264 | if co.co_varnames: |
| 265 | lines.append("Variable names:") |
| 266 | for i_n in enumerate(co.co_varnames): |
| 267 | lines.append("%4d: %s" % i_n) |
| 268 | if co.co_freevars: |
| 269 | lines.append("Free variables:") |
| 270 | for i_n in enumerate(co.co_freevars): |
| 271 | lines.append("%4d: %s" % i_n) |
| 272 | if co.co_cellvars: |
| 273 | lines.append("Cell variables:") |
| 274 | for i_n in enumerate(co.co_cellvars): |
| 275 | lines.append("%4d: %s" % i_n) |
| 276 | return "\n".join(lines) |
| 277 | |
| 278 | def show_code(co, *, file=None): |
| 279 | """Print details of methods, functions, or code to *file*. |