fix documentation warnings
[libfirm] / include / libfirm / dbginfo.h
index a001d7d..9778aea 100644 (file)
  * @brief     Implements the Firm interface to debug information.
  * @author    Goetz Lindenmaier, Michael Beck
  * @date      2001
- * @version   $Id$
- * @summary
- *  Firm requires a debugging module fulfilling this interface, else no
- *  debugging information is passed to the backend.
- *  The interface requires a datatype representing the debugging
- *  information.  Firm supports administrating a reference to the debug
- *  information in every Firm node.  Further Firm optimizations call
- *  routines to propagate debug information from old nodes to new nodes
- *  if the optimization replaces the old ones by the new ones.
  */
 #ifndef FIRM_DEBUG_DBGINFO_H
 #define FIRM_DEBUG_DBGINFO_H
 
+#include <stdlib.h>
 #include "firm_types.h"
 #include "ident.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
+#include "begin.h"
 
 /**
- * @defgroup debug    The Firm interface to debugging support.
- *
+ * @defgroup dbg_info    Source References
+ *  Firm requires a debugging module fulfilling this interface, else no
+ *  debugging information is passed to the backend.
+ *  The interface requires a datatype representing the debugging
+ *  information.  Firm supports administrating a reference to the debug
+ *  information in every Firm node.  Further Firm optimizations call
+ *  routines to propagate debug information from old nodes to new nodes
+ *  if the optimization replaces the old ones by the new ones.
  * @{
  */
 
@@ -83,7 +78,7 @@ typedef enum {
        dbg_read_a_const,             /**< A Firm subgraph was replaced because of a read
                                           a constant optimization. */
        dbg_rem_poly_call,            /**< Remove polymorphic call. */
-       dbg_dead_code,                /**< Removing unreachable code, I.e. blocks that are never executed. */
+       dbg_dead_code,                /**< Removing unreachable code, i.e. blocks that are never executed. */
        dbg_opt_confirm,              /**< A Firm subgraph was replace because of a Confirmation. */
        dbg_gvn_pre,                  /**< A Firm node was replace because of the GVN-PRE algorithm. */
        dbg_combo,                    /**< A Firm node was replace because of the combo algorithm. */
@@ -97,7 +92,7 @@ typedef enum {
  *
  * @param a  the debug action
  */
-const char *dbg_action_2_str(dbg_action a);
+FIRM_API const char *dbg_action_2_str(dbg_action a);
 
 /**
  * The type of the debug info merge function.
@@ -123,26 +118,9 @@ typedef void merge_pair_func(ir_node *new_node, ir_node *old_node, dbg_action ac
  */
 typedef void merge_sets_func(ir_node **new_node_array, int new_num_entries, ir_node **old_node_array, int old_num_entries, dbg_action action);
 
-/**
- * The type of the debug info to human readable string function.
- *
- * @param buf    pointer to a buffer that will hold the info
- * @param len    length of the buffer
- * @param dbg    the debug info
- *
- * @return  Number of written characters to the buffer.
- *
- * @see dbg_init()
- */
-typedef unsigned snprint_dbg_func(char *buf, unsigned len, const dbg_info *dbg);
-
 /**
  *  Initializes the debug support.
  *
- *  @param dbg_info_merge_pair   see function description
- *  @param dbg_info_merge_sets   see function description
- *  @param snprint_dbg           see function description
- *
  *  This function takes pointers to two functions that merge the
  *  debug information when a
  *  transformation of a Firm graph is performed.
@@ -162,59 +140,59 @@ typedef unsigned snprint_dbg_func(char *buf, unsigned len, const dbg_info *dbg);
  *
  *   Further both functions pass an enumeration indicating the action
  *   performed by the transformation, e.g. the kind of optimization performed.
- *
- * The third argument snprint_dbg is called to convert a debug info into a human readable string.
- * This string is the dumped in the dumper functions.
- *
- * Note that if NULL is passed for dbg_info_merge_pair or dbg_info_merge_sets, the default
- * implementations default_dbg_info_merge_pair() and default_dbg_info_merge_sets() are used.
- * NULL passed for snprint_dbg means no output.
  */
-void dbg_init(merge_pair_func *dbg_info_merge_pair, merge_sets_func *dbg_info_merge_sets, snprint_dbg_func *snprint_dbg);
+FIRM_API void dbg_init(merge_pair_func *dbg_info_merge_pair,
+                       merge_sets_func *dbg_info_merge_sets);
+
+/** A sourcecode location */
+typedef struct src_loc_t {
+       char const *file;    /**< the name of the source (usually a file) */
+       unsigned    line;    /**< line number (starting at 1; 0 if unknown) */
+       unsigned    column;  /**< column number (starting at 1; 0 if unknown) */
+} src_loc_t;
 
 /**
- * The default merge_pair_func implementation, simply copies the debug info
- * from the old Firm node to the new one if the new one does not have debug info yet.
- *
- * @param nw    The new Firm node.
- * @param old   The old Firm node.
- * @param info  The action that cause old node to be replaced by new one.
+ * The type of the debug info retriever function.
+ *  When given a dbg_info returns the name (usually the filename), line number
+ *  and column number of the definition.
+ *  Any part of the returned information may be NULL/0, which means it is not
+ *  available.
  */
-void default_dbg_info_merge_pair(ir_node *nw, ir_node *old, dbg_action info);
+typedef src_loc_t (*retrieve_dbg_func)(dbg_info const *dbg);
 
 /**
- * The default merge_sets_func implementation.  If n_old_nodes is equal 1, copies
- * the debug info from the old node to all new ones (if they do not have one), else does nothing.
+ * Sets a debug info retriever.
  *
- * @param new_nodes     An array of new Firm nodes.
- * @param n_new_nodes   The length of the new_nodes array.
- * @param old_nodes     An array of old (replaced) Firm nodes.
- * @param n_old_nodes   The length of the old_nodes array.
- * @param info          The action that cause old node to be replaced by new one.
+ * @param func   the debug retriever function.
  */
-void default_dbg_info_merge_sets(ir_node **new_nodes, int n_new_nodes,
-                            ir_node **old_nodes, int n_old_nodes,
-                            dbg_action info);
-
-/** @} */
+FIRM_API void ir_set_debug_retrieve(retrieve_dbg_func func);
 
-/** The type of the debug info retriever function. */
-typedef const char *(*retrieve_dbg_func)(const dbg_info *dbg, unsigned *line);
+/**
+ * The type of the type debug info retrieve function.
+ * Prints a human readable source representation of a type to an obstack.
+ *  (Used for generating debug info like stabs or dwarf)
+ */
+typedef void (*retrieve_type_dbg_func)(char *buffer, size_t buffer_size,
+                                       const type_dbg_info *tdbgi);
 
 /**
- * Sets a debug info retriever.
- *
- * @param func   the debug retriever function.
+ * Sets global print_type_dbg_info function in firm
  */
-void ir_set_debug_retrieve(retrieve_dbg_func func);
+FIRM_API void ir_set_type_debug_retrieve(retrieve_type_dbg_func func);
 
 /**
  * Retrieve the debug info.
  */
-const char *ir_retrieve_dbg_info(const dbg_info *dbg, unsigned *line);
+FIRM_API src_loc_t ir_retrieve_dbg_info(dbg_info const *dbg);
 
-#ifdef __cplusplus
-}
-#endif
+/**
+ * Retrieve type debug info
+ */
+FIRM_API void ir_retrieve_type_dbg_info(char *buffer, size_t buffer_size,
+                                        const type_dbg_info *tdbgi);
+
+/** @} */
+
+#include "end.h"
 
 #endif