gdb: Xmethod API

 
 23.2.2.14 Xmethod API
 .....................
 
 The GDB Python API provides classes, interfaces and functions to
 implement, register and manipulate xmethods.  SeeXmethods In
 Python.
 
    An xmethod matcher should be an instance of a class derived from
 'XMethodMatcher' defined in the module 'gdb.xmethod', or an object with
 similar interface and attributes.  An instance of 'XMethodMatcher' has
 the following attributes:
 
  -- Variable: name
      The name of the matcher.
 
  -- Variable: enabled
      A boolean value indicating whether the matcher is enabled or
      disabled.
 
  -- Variable: methods
      A list of named methods managed by the matcher.  Each object in the
      list is an instance of the class 'XMethod' defined in the module
      'gdb.xmethod', or any object with the following attributes:
 
      'name'
           Name of the xmethod which should be unique for each xmethod
           managed by the matcher.
 
      'enabled'
           A boolean value indicating whether the xmethod is enabled or
           disabled.
 
      The class 'XMethod' is a convenience class with same attributes as
      above along with the following constructor:
 
       -- Function: XMethod.__init__ (self, name)
           Constructs an enabled xmethod with name NAME.
 
 The 'XMethodMatcher' class has the following methods:
 
  -- Function: XMethodMatcher.__init__ (self, name)
      Constructs an enabled xmethod matcher with name NAME.  The
      'methods' attribute is initialized to 'None'.
 
  -- Function: XMethodMatcher.match (self, class_type, method_name)
      Derived classes should override this method.  It should return a
      xmethod worker object (or a sequence of xmethod worker objects)
      matching the CLASS_TYPE and METHOD_NAME.  CLASS_TYPE is a
      'gdb.Type' object, and METHOD_NAME is a string value.  If the
      matcher manages named methods as listed in its 'methods' attribute,
      then only those worker objects whose corresponding entries in the
      'methods' list are enabled should be returned.
 
    An xmethod worker should be an instance of a class derived from
 'XMethodWorker' defined in the module 'gdb.xmethod', or support the
 following interface:
 
  -- Function: XMethodWorker.get_arg_types (self)
      This method returns a sequence of 'gdb.Type' objects corresponding
      to the arguments that the xmethod takes.  It can return an empty
      sequence or 'None' if the xmethod does not take any arguments.  If
      the xmethod takes a single argument, then a single 'gdb.Type'
      object corresponding to it can be returned.
 
  -- Function: XMethodWorker.get_result_type (self, *args)
      This method returns a 'gdb.Type' object representing the type of
      the result of invoking this xmethod.  The ARGS argument is the same
      tuple of arguments that would be passed to the '__call__' method of
      this worker.
 
  -- Function: XMethodWorker.__call__ (self, *args)
      This is the method which does the _work_ of the xmethod.  The ARGS
      arguments is the tuple of arguments to the xmethod.  Each element
      in this tuple is a gdb.Value object.  The first element is always
      the 'this' pointer value.
 
    For GDB to lookup xmethods, the xmethod matchers should be registered
 using the following function defined in the module 'gdb.xmethod':
 
  -- Function: register_xmethod_matcher (locus, matcher, replace=False)
      The 'matcher' is registered with 'locus', replacing an existing
      matcher with the same name as 'matcher' if 'replace' is 'True'.
      'locus' can be a 'gdb.Objfile' object (SeeObjfiles In Python),
      or a 'gdb.Progspace' object (SeeProgspaces In Python), or
      'None'.  If it is 'None', then 'matcher' is registered globally.