# HG changeset patch # User Paul Boddie # Date 1100468748 -3600 # Node ID 2157b80a1b55747c83a80d4d26abae0c7d2f1fa4 # Parent e9628106c17dd68fb9d8114f4580e194202f2fa4 Added support for class initialisation method names and access flags inspection. diff -r e9628106c17d -r 2157b80a1b55 classfile.py --- a/classfile.py Sun Nov 14 19:36:46 2004 +0100 +++ b/classfile.py Sun Nov 14 22:45:48 2004 +0100 @@ -30,6 +30,8 @@ def f8(data): return struct.unpack(">d", data[0:8])[0] +# Useful tables and constants. + descriptor_base_type_mapping = { "B" : "int", "C" : "str", @@ -43,6 +45,13 @@ "[" : "list" } +PUBLIC, PRIVATE, PROTECTED, STATIC, FINAL, SUPER, SYNCHRONIZED, VOLATILE, TRANSIENT, NATIVE, INTERFACE, ABSTRACT, STRICT = \ +0x0001, 0x0002, 0x0004, 0x0008, 0x0010, 0x0020, 0x0020, 0x0040, 0x0080, 0x0100, 0x0200, 0x0400, 0x0800 + +def has_flags(flags, desired): + desired_flags = reduce(lambda a, b: a | b, desired, 0) + return (flags & desired_flags) == desired_flags + # Useful mix-ins. class PythonMethodUtils: @@ -50,6 +59,8 @@ name = self.get_name() if str(name) == "": name = "__init__" + elif str(name) == "": + return "__clinit__" else: name = str(name) return name + "$" + self._get_descriptor_as_name()