Logo Search packages:      
Sourcecode: yasm version File versions  Download package

errwarn.h

Go to the documentation of this file.
/**
 * \file libyasm/errwarn.h
 * \brief YASM error and warning reporting interface.
 *
 * \rcs
 * $Id: errwarn.h 1137 2004-09-04 01:24:57Z peter $
 * \endrcs
 *
 * \license
 *  Copyright (C) 2001  Peter Johnson
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 *  - Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 *  - Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in the
 *    documentation and/or other materials provided with the distribution.
 *
 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND OTHER CONTRIBUTORS ``AS IS''
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR OTHER CONTRIBUTORS BE
 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 * \endlicense
 */
#ifndef YASM_ERRWARN_H
#define YASM_ERRWARN_H

/** Warning classes (that may be enabled/disabled). */
00038 typedef enum {
00039     YASM_WARN_GENERAL = 0,  /**< Non-specific warnings */
00040     YASM_WARN_UNREC_CHAR,   /**< Unrecognized characters (while tokenizing) */
00041     YASM_WARN_PREPROC,      /**< Preprocessor warnings */
00042     YASM_WARN_ORPHAN_LABEL  /**< Label alone on a line without a colon */
} yasm_warn_class;

/** Initialize any internal data structures. */
void yasm_errwarn_initialize(void);

/** Clean up any memory allocated by yasm_errwarn_initialize() or other
 * functions.
 */
void yasm_errwarn_cleanup(void);

/** Reporting point of internal errors.  These are usually due to sanity
 * check failures in the code.
 * \warning This function must NOT return to calling code; exit or longjmp
 *          instead.
 * \param file      source file (ala __FILE__)
 * \param line      source line (ala __LINE__)
 * \param message   internal error message
 */
extern /*@exits@*/ void (*yasm_internal_error_)
    (const char *file, unsigned int line, const char *message);

/** Easily-callable version of yasm_internal_error_().  Automatically uses
 * __FILE__ and __LINE__ as the file and line.
 * \param message   internal error message
 */
00068 #define yasm_internal_error(message) \
    yasm_internal_error_(__FILE__, __LINE__, message)

/** Reporting point of fatal errors.
 * \warning This function must NOT return to calling code; exit or longjmp
 *          instead.
 * \param message   fatal error message
 * \param va          va_list argument list for message
 */
extern /*@exits@*/ void (*yasm_fatal) (const char *message, va_list va);

/** Reporting point of fatal errors, with variable arguments (internal only).
 * \warning This function calls #yasm_fatal, and thus does not return to the
 *          calling code.
 * \param message   fatal error message
 * \param ...         argument list for message
 */
/*@exits@*/ void yasm__fatal(const char *message, ...);

/** Log an error at a given line, displaying a different line.  va_list version
 * of yasm__error_at().
 * \internal
 * \param line      virtual line
 * \param displine  displayed virtual line
 * \param message   printf-like-format message
 * \param va          argument list for message
 */
void yasm__error_va_at(unsigned long line, unsigned long displine,
                   const char *message, va_list va);

/** Log an error.  va_list version of yasm__error().
 * \internal
 * \param line      virtual line
 * \param message   printf-like-format message
 * \param va          argument list for message
 */
00104 #define yasm__error_va(line, message, va) \
    yasm__error_va_at(line, line, message, va)

/** Log a warning at a given line, displaying a different line.  va_list
 * version of yasm__warning_at().
 * \internal
 * \param wclass    warning class
 * \param line      virtual line
 * \param displine  displayed virtual line
 * \param message   printf-like-format message
 * \param va          argument list for message
 */
void yasm__warning_va_at(yasm_warn_class wclass, unsigned long line,
                   unsigned long displine, const char *message,
                   va_list va);

/** Log a warning.  va_list version of yasm__warning().
 * \internal
 * \param wclass    warning class
 * \param line      virtual line
 * \param message   printf-like-format message
 * \param va          argument list for message
 */
00127 #define yasm__warning_va(wclass, line, message, va) \
    yasm__warning_va_at(wclass, line, line, message, va)

/** Log an error.  Does not print it out immediately; yasm_errwarn_output_all()
 * outputs errors and warnings.
 * \internal
 * \param line      virtual line
 * \param message   printf-like-format message
 * \param ...         argument list for message
 */
void yasm__error(unsigned long line, const char *message, ...)
    /*@printflike@*/;

/** Log an error at a given line, displaying a different line.  Does not print
 * it out immediately; yasm_errwarn_output_all() outputs errors and warnings.
 * \internal
 * \param line      virtual line
 * \param displine  displayed virtual line
 * \param message   printf-like-format message
 * \param ...         argument list for message
 */
void yasm__error_at(unsigned long line, unsigned long displine,
                const char *message, ...) /*@printflike@*/;

/** Log a warning.  Does not print it out immediately;
 * yasm_errwarn_output_all() outputs errors and warnings.
 * \internal
 * \param wclass    warning class
 * \param line      virtual line
 * \param message   printf-like-format message
 * \param ...         argument list for message
 */
void yasm__warning(yasm_warn_class wclass, unsigned long line,
               const char *message, ...) /*@printflike@*/;

/** Log a warning at a given line, displaying a different line.  Does not print
 * it out immediately; yasm_errwarn_output_all() outputs errors and warnings.
 * \internal
 * \param wclass    warning class
 * \param line      virtual line
 * \param displine  displayed virtual line
 * \param message   printf-like-format message
 * \param ...         argument list for message
 */
void yasm__warning_at(yasm_warn_class wclass, unsigned long line,
                  unsigned long displine, const char *message, ...)
    /*@printflike@*/;

/** Log a parser error.  Parser errors can be overwritten by non-parser errors
 * on the same line.
 * \internal
 * \param line      virtual line
 * \param message   parser error message
 */
void yasm__parser_error(unsigned long line, const char *message);

/** Enable a class of warnings.
 * \param wclass    warning class
 */
void yasm_warn_enable(yasm_warn_class wclass);

/** Disable a class of warnings.
 * \param wclass    warning class
 */
void yasm_warn_disable(yasm_warn_class wclass);

/** Disable all classes of warnings. */
void yasm_warn_disable_all(void);

/** Get total number of errors logged.
 * \param warning_as_error  if nonzero, warnings are treated as errors.
 * \return Number of errors.
 */
unsigned int yasm_get_num_errors(int warning_as_error);

/** Print out an error.
 * \param fn      filename of source file
 * \param line    line number
 * \param msg     error message
 */
typedef void (*yasm_print_error_func)
00208     (const char *fn, unsigned long line, const char *msg);

/** Print out a warning.
 * \param fn      filename of source file
 * \param line    line number
 * \param msg     warning message
 */
typedef void (*yasm_print_warning_func)
00216     (const char *fn, unsigned long line, const char *msg);

/** Outputs all errors and warnings.
 * \param lm      line map (to convert virtual lines into filename/line pairs)
 * \param warning_as_error  if nonzero, treat warnings as errors
 * \param print_error       function called to print out errors
 * \param print_warning     function called to print out warnings
 */
void yasm_errwarn_output_all
    (yasm_linemap *lm, int warning_as_error, yasm_print_error_func print_error,
     yasm_print_warning_func print_warning);

/** Convert a possibly unprintable character into a printable string.
 * \internal
 * \param ch      possibly unprintable character
 * \return Printable string representation (static buffer).
 */
char *yasm__conv_unprint(int ch);

/** Hook for library users to map to gettext() if GNU gettext is being used.
 * \param msgid       message catalog identifier
 * \return Translated message.
 */
extern const char * (*yasm_gettext_hook) (const char *msgid);

#endif

Generated by  Doxygen 1.6.0   Back to index