changed or an error occurs no further languages are called. */
enum ext_lang_rc (*before_prompt) (const struct extension_language_defn *,
const char *current_gdb_prompt);
+
+ /* xmethod support:
+ clone_xmethod_worker_data, free_xmethod_worker_data,
+ get_matching_xmethod_workers, get_xmethod_arg_types,
+ invoke_xmethod.
+ These methods are optional and may be NULL, but if one of them is
+ implemented then they all must be. */
+
+ /* Clone DATA and return a new but identical xmethod worker data
+ object for this extension language. */
+ void * (*clone_xmethod_worker_data)
+ (const struct extension_language_defn *extlang, void *data);
+
+ /* Free the DATA object of this extension language. */
+ void (*free_xmethod_worker_data)
+ (const struct extension_language_defn *extlang, void *data);
+
+ /* Return a vector of matching xmethod workers defined in this
+ extension language. The workers service methods with name
+ METHOD_NAME on objects of type OBJ_TYPE. The vector is returned
+ in DM_VEC. */
+ enum ext_lang_rc (*get_matching_xmethod_workers)
+ (const struct extension_language_defn *extlang,
+ struct type *obj_type,
+ const char *method_name,
+ xmethod_worker_vec **dm_vec);
+
+ /* Given a WORKER servicing a particular method, return the types
+ of the arguments the method takes. The number of arguments is
+ returned in NARGS, and their types are returned in the array
+ ARGTYPES. */
+ enum ext_lang_rc (*get_xmethod_arg_types)
+ (const struct extension_language_defn *extlang,
+ struct xmethod_worker *worker,
+ int *nargs,
+ struct type ***arg_types);
+
+ /* Invoke the xmethod serviced by WORKER. The xmethod is invoked
+ on OBJECT with arguments in the array ARGS. NARGS is the length of
+ this array. Returns the value returned by the xmethod. */
+ struct value * (*invoke_xmethod)
+ (const struct extension_language_defn *extlang,
+ struct xmethod_worker *worker,
+ struct value *object,
+ struct value **args,
+ int nargs);
};
/* State necessary to restore a signal handler to its previous value. */