+class methodhandle(object):
+ def __init__(self, kind, ref):
+ self.kind = kind
+ self.ref = ref
+ def __hash__(self):
+ return hash(methodhandle) + self.kind * 31 + self.ref
+ def __eq__(s, o):
+ return isinstance(o, methodhandle) and o.kind == s.kind and o.ref == s.ref
+
+class methodtype(object):
+ def __init__(self, desc):
+ self.desc = desc
+ def __hash__(self):
+ return hash(methodhandle) + self.desc
+ def __eq__(s, o):
+ return isinstance(o, methodtype) and o.desc == s.desc
+
+class callsite(object):
+ def __init__(self, boot, sig):
+ self.boot = boot
+ self.sig = sig
+ def __hash__(self):
+ return hash(callsite) + self.boot * 31 + self.sig
+ def __eq__(s, o):
+ return isinstance(o, callsite) and o.boot == s.boot and o.sig == s.sig
+