112027Sjungma@eit.uni-kl.de/*****************************************************************************
212027Sjungma@eit.uni-kl.de
312027Sjungma@eit.uni-kl.de  Licensed to Accellera Systems Initiative Inc. (Accellera) under one or
412027Sjungma@eit.uni-kl.de  more contributor license agreements.  See the NOTICE file distributed
512027Sjungma@eit.uni-kl.de  with this work for additional information regarding copyright ownership.
612027Sjungma@eit.uni-kl.de  Accellera licenses this file to you under the Apache License, Version 2.0
712027Sjungma@eit.uni-kl.de  (the "License"); you may not use this file except in compliance with the
812027Sjungma@eit.uni-kl.de  License.  You may obtain a copy of the License at
912027Sjungma@eit.uni-kl.de
1012027Sjungma@eit.uni-kl.de    http://www.apache.org/licenses/LICENSE-2.0
1112027Sjungma@eit.uni-kl.de
1212027Sjungma@eit.uni-kl.de  Unless required by applicable law or agreed to in writing, software
1312027Sjungma@eit.uni-kl.de  distributed under the License is distributed on an "AS IS" BASIS,
1412027Sjungma@eit.uni-kl.de  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
1512027Sjungma@eit.uni-kl.de  implied.  See the License for the specific language governing
1612027Sjungma@eit.uni-kl.de  permissions and limitations under the License.
1712027Sjungma@eit.uni-kl.de
1812027Sjungma@eit.uni-kl.de *****************************************************************************/
1912027Sjungma@eit.uni-kl.de
2012027Sjungma@eit.uni-kl.de/*****************************************************************************
2112027Sjungma@eit.uni-kl.de
2212027Sjungma@eit.uni-kl.de  sc_report.h -- Run-time logging and reporting facilities
2312027Sjungma@eit.uni-kl.de
2412027Sjungma@eit.uni-kl.de  Interface design by SystemC Verification Working Group.
2512027Sjungma@eit.uni-kl.de  Implementation by Alex Riesen, Synopsys Inc.
2612027Sjungma@eit.uni-kl.de  Original implementation by Martin Janssen, Synopsys Inc.
2712027Sjungma@eit.uni-kl.de  Reference implementation by Cadence Design Systems, Inc., 2002-09-23:
2812027Sjungma@eit.uni-kl.de  Norris Ip, Dean Shea, John Rose, Jasvinder Singh, William Paulsen,
2912027Sjungma@eit.uni-kl.de  John Pierce, Rachida Kebichi, Ted Elkind, David Bailey.
3012027Sjungma@eit.uni-kl.de
3112027Sjungma@eit.uni-kl.de  CHANGE LOG AT END OF FILE
3212027Sjungma@eit.uni-kl.de *****************************************************************************/
3312027Sjungma@eit.uni-kl.de
3412027Sjungma@eit.uni-kl.de#ifndef SC_REPORT_H
3512027Sjungma@eit.uni-kl.de#define SC_REPORT_H 1
3612027Sjungma@eit.uni-kl.de
3712027Sjungma@eit.uni-kl.de#include <exception>
3812027Sjungma@eit.uni-kl.de#include <string>
3912027Sjungma@eit.uni-kl.de
4012027Sjungma@eit.uni-kl.denamespace sc_core {
4112027Sjungma@eit.uni-kl.de
4212027Sjungma@eit.uni-kl.de// ----------------------------------------------------------------------------
4312027Sjungma@eit.uni-kl.de//  ENUM : sc_severity
4412027Sjungma@eit.uni-kl.de//
4512027Sjungma@eit.uni-kl.de//  Enumeration of possible exception severity levels
4612027Sjungma@eit.uni-kl.de// ----------------------------------------------------------------------------
4712027Sjungma@eit.uni-kl.de
4812027Sjungma@eit.uni-kl.deenum sc_severity {
4912027Sjungma@eit.uni-kl.de    SC_INFO = 0,        // informative only
5012027Sjungma@eit.uni-kl.de    SC_WARNING, // indicates potentially incorrect condition
5112027Sjungma@eit.uni-kl.de    SC_ERROR,   // indicates a definite problem
5212027Sjungma@eit.uni-kl.de    SC_FATAL,   // indicates a problem from which we cannot recover
5312027Sjungma@eit.uni-kl.de    SC_MAX_SEVERITY
5412027Sjungma@eit.uni-kl.de};
5512027Sjungma@eit.uni-kl.de
5612027Sjungma@eit.uni-kl.detypedef unsigned sc_actions;
5712027Sjungma@eit.uni-kl.de
5812027Sjungma@eit.uni-kl.de// ----------------------------------------------------------------------------
5912027Sjungma@eit.uni-kl.de//  ENUM : sc_verbosity
6012027Sjungma@eit.uni-kl.de//
6112027Sjungma@eit.uni-kl.de//  Enumeration of message verbosity.
6212027Sjungma@eit.uni-kl.de// ----------------------------------------------------------------------------
6312027Sjungma@eit.uni-kl.de
6412027Sjungma@eit.uni-kl.de enum sc_verbosity {
6512027Sjungma@eit.uni-kl.de     SC_NONE = 0,
6612027Sjungma@eit.uni-kl.de     SC_LOW = 100,
6712027Sjungma@eit.uni-kl.de     SC_MEDIUM = 200,
6812027Sjungma@eit.uni-kl.de     SC_HIGH = 300,
6912027Sjungma@eit.uni-kl.de     SC_FULL = 400,
7012027Sjungma@eit.uni-kl.de     SC_DEBUG = 500
7112027Sjungma@eit.uni-kl.de };
7212027Sjungma@eit.uni-kl.de
7312027Sjungma@eit.uni-kl.de// ----------------------------------------------------------------------------
7412027Sjungma@eit.uni-kl.de//  ENUM :
7512027Sjungma@eit.uni-kl.de//
7612027Sjungma@eit.uni-kl.de//  Enumeration of actions on an exception (implementation specific)
7712027Sjungma@eit.uni-kl.de// ----------------------------------------------------------------------------
7812027Sjungma@eit.uni-kl.de
7912027Sjungma@eit.uni-kl.deenum {
8012027Sjungma@eit.uni-kl.de    SC_UNSPECIFIED  = 0x0000, // look for lower-priority rule
8112027Sjungma@eit.uni-kl.de    SC_DO_NOTHING   = 0x0001, // take no action (ignore if other bits set)
8212027Sjungma@eit.uni-kl.de    SC_THROW        = 0x0002, // throw an exception
8312027Sjungma@eit.uni-kl.de    SC_LOG          = 0x0004, // add report to report log
8412027Sjungma@eit.uni-kl.de    SC_DISPLAY      = 0x0008, // display report to screen
8512027Sjungma@eit.uni-kl.de    SC_CACHE_REPORT = 0x0010, // save report to cache
8612027Sjungma@eit.uni-kl.de    SC_INTERRUPT    = 0x0020, // call sc_interrupt_here(...)
8712027Sjungma@eit.uni-kl.de    SC_STOP         = 0x0040, // call sc_stop()
8812027Sjungma@eit.uni-kl.de    SC_ABORT        = 0x0080  // call abort()
8912027Sjungma@eit.uni-kl.de};
9012027Sjungma@eit.uni-kl.de
9112027Sjungma@eit.uni-kl.declass sc_object;
9212027Sjungma@eit.uni-kl.declass sc_time;
9312027Sjungma@eit.uni-kl.destruct sc_msg_def;
9412027Sjungma@eit.uni-kl.declass sc_report;
9512027Sjungma@eit.uni-kl.declass sc_report_handler;
9612027Sjungma@eit.uni-kl.deconst std::string sc_report_compose_message( const sc_report& );
9712027Sjungma@eit.uni-kl.de
9812027Sjungma@eit.uni-kl.de// ----------------------------------------------------------------------------
9912027Sjungma@eit.uni-kl.de//  CLASS : sc_report
10012027Sjungma@eit.uni-kl.de//
10112027Sjungma@eit.uni-kl.de//  Exception reporting
10212027Sjungma@eit.uni-kl.de// ----------------------------------------------------------------------------
10312027Sjungma@eit.uni-kl.de
10412027Sjungma@eit.uni-kl.declass sc_report : public std::exception
10512027Sjungma@eit.uni-kl.de{
10612027Sjungma@eit.uni-kl.de    friend class sc_report_handler;
10712027Sjungma@eit.uni-kl.de    friend sc_report* sc_handle_exception();
10812027Sjungma@eit.uni-kl.de
10912027Sjungma@eit.uni-kl.de    sc_report(); // used internally by sc_handle_exception
11012027Sjungma@eit.uni-kl.de
11112027Sjungma@eit.uni-kl.depublic:
11212027Sjungma@eit.uni-kl.de
11312027Sjungma@eit.uni-kl.de    sc_report(const sc_report&);
11412027Sjungma@eit.uni-kl.de
11512027Sjungma@eit.uni-kl.de    sc_report & operator=(const sc_report&);
11612027Sjungma@eit.uni-kl.de
11712027Sjungma@eit.uni-kl.de    virtual ~sc_report() throw();
11812027Sjungma@eit.uni-kl.de
11912027Sjungma@eit.uni-kl.de    const char * get_msg_type() const;
12012027Sjungma@eit.uni-kl.de
12112027Sjungma@eit.uni-kl.de    const char * get_msg() const
12212027Sjungma@eit.uni-kl.de	{ return msg; }
12312027Sjungma@eit.uni-kl.de
12412027Sjungma@eit.uni-kl.de    sc_severity get_severity() const
12512027Sjungma@eit.uni-kl.de	{ return severity; }
12612027Sjungma@eit.uni-kl.de
12712027Sjungma@eit.uni-kl.de    const char * get_file_name() const
12812027Sjungma@eit.uni-kl.de	{ return file; }
12912027Sjungma@eit.uni-kl.de
13012027Sjungma@eit.uni-kl.de    int get_line_number() const
13112027Sjungma@eit.uni-kl.de	{ return line; }
13212027Sjungma@eit.uni-kl.de
13312027Sjungma@eit.uni-kl.de    const sc_time & get_time() const
13412027Sjungma@eit.uni-kl.de	{ return *timestamp; }
13512027Sjungma@eit.uni-kl.de
13612027Sjungma@eit.uni-kl.de    const char* get_process_name() const;
13712027Sjungma@eit.uni-kl.de
13812027Sjungma@eit.uni-kl.de    int get_verbosity() const { return m_verbosity_level; }
13912027Sjungma@eit.uni-kl.de
14012027Sjungma@eit.uni-kl.de    bool valid () const
14112027Sjungma@eit.uni-kl.de        {
14212027Sjungma@eit.uni-kl.de	    return process != 0;
14312027Sjungma@eit.uni-kl.de	}
14412027Sjungma@eit.uni-kl.de
14512027Sjungma@eit.uni-kl.de    virtual const char* what() const throw()
14612027Sjungma@eit.uni-kl.de        {
14712027Sjungma@eit.uni-kl.de	    return m_what;
14812027Sjungma@eit.uni-kl.de	}
14912027Sjungma@eit.uni-kl.de
15012027Sjungma@eit.uni-kl.de    void swap( sc_report& );
15112027Sjungma@eit.uni-kl.de
15212027Sjungma@eit.uni-kl.deprotected:
15312027Sjungma@eit.uni-kl.de
15412027Sjungma@eit.uni-kl.de    sc_report(sc_severity,
15512027Sjungma@eit.uni-kl.de	      const sc_msg_def*,
15612027Sjungma@eit.uni-kl.de	      const char* msg,
15712027Sjungma@eit.uni-kl.de	      const char* file,
15812027Sjungma@eit.uni-kl.de	      int line,
15912027Sjungma@eit.uni-kl.de	      int verbosity_level=SC_MEDIUM);
16012027Sjungma@eit.uni-kl.de
16112027Sjungma@eit.uni-kl.de    sc_severity        severity;
16212027Sjungma@eit.uni-kl.de    const sc_msg_def*  md;
16312027Sjungma@eit.uni-kl.de    char*              msg;
16412027Sjungma@eit.uni-kl.de    char*              file;
16512027Sjungma@eit.uni-kl.de    int                line;
16612027Sjungma@eit.uni-kl.de    sc_time*           timestamp;
16712027Sjungma@eit.uni-kl.de    sc_object*         process;
16812027Sjungma@eit.uni-kl.de    int                m_verbosity_level;
16912027Sjungma@eit.uni-kl.de    char*              m_what;
17012027Sjungma@eit.uni-kl.de
17112027Sjungma@eit.uni-kl.depublic:  // backward compatibility with 2.0+
17212027Sjungma@eit.uni-kl.de
17312027Sjungma@eit.uni-kl.de    static const char* get_message(int id);
17412027Sjungma@eit.uni-kl.de    static bool is_suppressed(int id);
17512027Sjungma@eit.uni-kl.de    static void make_warnings_errors(bool);
17612027Sjungma@eit.uni-kl.de    static void register_id(int id, const char* msg);
17712027Sjungma@eit.uni-kl.de    static void suppress_id(int id, bool); // only for info or warning
17812027Sjungma@eit.uni-kl.de    static void suppress_infos(bool);
17912027Sjungma@eit.uni-kl.de    static void suppress_warnings(bool);
18012027Sjungma@eit.uni-kl.de
18112027Sjungma@eit.uni-kl.de    int get_id() const;
18212027Sjungma@eit.uni-kl.de};
18312027Sjungma@eit.uni-kl.detypedef std::exception sc_exception;
18412027Sjungma@eit.uni-kl.de
18512027Sjungma@eit.uni-kl.de#define SC_DEFAULT_INFO_ACTIONS \
18612027Sjungma@eit.uni-kl.de   (::sc_core::SC_LOG | ::sc_core::SC_DISPLAY)
18712027Sjungma@eit.uni-kl.de#define SC_DEFAULT_WARNING_ACTIONS \
18812027Sjungma@eit.uni-kl.de   (::sc_core::SC_LOG | ::sc_core::SC_DISPLAY)
18912027Sjungma@eit.uni-kl.de#define SC_DEFAULT_ERROR_ACTIONS \
19012027Sjungma@eit.uni-kl.de   (::sc_core::SC_LOG | ::sc_core::SC_CACHE_REPORT | ::sc_core::SC_THROW)
19112027Sjungma@eit.uni-kl.de#define SC_DEFAULT_FATAL_ACTIONS \
19212027Sjungma@eit.uni-kl.de   (::sc_core::SC_LOG | ::sc_core::SC_DISPLAY | \
19312027Sjungma@eit.uni-kl.de    ::sc_core::SC_CACHE_REPORT | ::sc_core::SC_ABORT)
19412027Sjungma@eit.uni-kl.de
19512027Sjungma@eit.uni-kl.de
19612027Sjungma@eit.uni-kl.de// ----------------------------------------------------------------------------
19712027Sjungma@eit.uni-kl.de//  Report macros.
19812027Sjungma@eit.uni-kl.de//
19912027Sjungma@eit.uni-kl.de//  Use these macros to report an info, warning, error, or fatal.
20012027Sjungma@eit.uni-kl.de// ----------------------------------------------------------------------------
20112027Sjungma@eit.uni-kl.de
20212027Sjungma@eit.uni-kl.de#define SC_REPORT_INFO( msg_type, msg )    \
20312027Sjungma@eit.uni-kl.de    ::sc_core::sc_report_handler::report(  \
20412027Sjungma@eit.uni-kl.de            ::sc_core::SC_INFO, msg_type, msg, __FILE__, __LINE__ )
20512027Sjungma@eit.uni-kl.de
20612027Sjungma@eit.uni-kl.de#define SC_REPORT_INFO_VERB( msg_type, msg, verbosity )   \
20712027Sjungma@eit.uni-kl.de    ::sc_core::sc_report_handler::report(                 \
20812027Sjungma@eit.uni-kl.de            ::sc_core::SC_INFO, msg_type, msg, verbosity, \
20912027Sjungma@eit.uni-kl.de                               __FILE__ , __LINE__ )
21012027Sjungma@eit.uni-kl.de
21112027Sjungma@eit.uni-kl.de#define SC_REPORT_WARNING( msg_type, msg ) \
21212027Sjungma@eit.uni-kl.de    ::sc_core::sc_report_handler::report(  \
21312027Sjungma@eit.uni-kl.de            ::sc_core::SC_WARNING, msg_type, msg, __FILE__, __LINE__ )
21412027Sjungma@eit.uni-kl.de
21512027Sjungma@eit.uni-kl.de#define SC_REPORT_ERROR( msg_type, msg )  \
21612027Sjungma@eit.uni-kl.de    ::sc_core::sc_report_handler::report( \
21712027Sjungma@eit.uni-kl.de            ::sc_core::SC_ERROR, msg_type, msg, __FILE__, __LINE__ )
21812027Sjungma@eit.uni-kl.de
21912027Sjungma@eit.uni-kl.de#define SC_REPORT_FATAL( msg_type, msg )  \
22012027Sjungma@eit.uni-kl.de    ::sc_core::sc_report_handler::report( \
22112027Sjungma@eit.uni-kl.de            ::sc_core::SC_FATAL, msg_type, msg, __FILE__, __LINE__ )
22212027Sjungma@eit.uni-kl.de
22312027Sjungma@eit.uni-kl.de// ----------------------------------------------------------------------------
22412027Sjungma@eit.uni-kl.de//  MACRO : sc_assert(expr)
22512027Sjungma@eit.uni-kl.de//
22612027Sjungma@eit.uni-kl.de//  Like assert(), but additionally prints the current process name
22712027Sjungma@eit.uni-kl.de//  and simulation time, if the simulation is running.
22812027Sjungma@eit.uni-kl.de// ----------------------------------------------------------------------------
22912027Sjungma@eit.uni-kl.de
23012027Sjungma@eit.uni-kl.de#ifdef NDEBUG
23112027Sjungma@eit.uni-kl.de
23212027Sjungma@eit.uni-kl.de#define sc_assert(expr) \
23312027Sjungma@eit.uni-kl.de ((void) 0)
23412027Sjungma@eit.uni-kl.de
23512027Sjungma@eit.uni-kl.de#else
23612027Sjungma@eit.uni-kl.de
23712027Sjungma@eit.uni-kl.de#define sc_assert(expr) \
23812027Sjungma@eit.uni-kl.de ((void)((expr) ? 0 :   \
23912027Sjungma@eit.uni-kl.de     (SC_REPORT_FATAL( ::sc_core::SC_ID_ASSERTION_FAILED_, #expr ), 0)))
24012027Sjungma@eit.uni-kl.de
24112027Sjungma@eit.uni-kl.de#endif // NDEBUG
24212027Sjungma@eit.uni-kl.de
24312027Sjungma@eit.uni-kl.deextern const char SC_ID_UNKNOWN_ERROR_[];
24412027Sjungma@eit.uni-kl.deextern const char SC_ID_WITHOUT_MESSAGE_[];
24512027Sjungma@eit.uni-kl.deextern const char SC_ID_NOT_IMPLEMENTED_[];
24612027Sjungma@eit.uni-kl.deextern const char SC_ID_INTERNAL_ERROR_[];
24712027Sjungma@eit.uni-kl.deextern const char SC_ID_ASSERTION_FAILED_[];
24812027Sjungma@eit.uni-kl.deextern const char SC_ID_OUT_OF_BOUNDS_[];
24912027Sjungma@eit.uni-kl.de
25012027Sjungma@eit.uni-kl.de// backward compatibility with 2.0+
25112027Sjungma@eit.uni-kl.deextern const char SC_ID_REGISTER_ID_FAILED_[];
25212027Sjungma@eit.uni-kl.de
25312027Sjungma@eit.uni-kl.de} // namespace sc_core
25412027Sjungma@eit.uni-kl.de
25512027Sjungma@eit.uni-kl.de#include "sysc/utils/sc_report_handler.h"
25612027Sjungma@eit.uni-kl.de
25712027Sjungma@eit.uni-kl.de/*****************************************************************************
25812027Sjungma@eit.uni-kl.de
25912027Sjungma@eit.uni-kl.de  MODIFICATION LOG - modifiers, enter your name, affiliation, date and
26012027Sjungma@eit.uni-kl.de  changes you are making here.
26112027Sjungma@eit.uni-kl.de
26212027Sjungma@eit.uni-kl.de      Name, Affiliation, Date: Alex Riesen, Synopsys Inc., Jan 28, 2003
26312027Sjungma@eit.uni-kl.de  Description of Modification: Implementation for SytemC 2.1
26412027Sjungma@eit.uni-kl.de
26512027Sjungma@eit.uni-kl.de *****************************************************************************/
26612027Sjungma@eit.uni-kl.de
26712027Sjungma@eit.uni-kl.de// $Log: sc_report.h,v $
26812027Sjungma@eit.uni-kl.de// Revision 1.8  2011/08/26 20:46:19  acg
26912027Sjungma@eit.uni-kl.de//  Andy Goodrich: moved the modification log to the end of the file to
27012027Sjungma@eit.uni-kl.de//  eliminate source line number skew when check-ins are done.
27112027Sjungma@eit.uni-kl.de//
27212027Sjungma@eit.uni-kl.de// Revision 1.7  2011/05/05 17:46:04  acg
27312027Sjungma@eit.uni-kl.de//  Philip A. Hartmann: changes in "swap" support.
27412027Sjungma@eit.uni-kl.de//
27512027Sjungma@eit.uni-kl.de// Revision 1.6  2011/04/19 02:39:44  acg
27612027Sjungma@eit.uni-kl.de//  Andy Goodrich: set proper name for get_verbosity().
27712027Sjungma@eit.uni-kl.de//
27812027Sjungma@eit.uni-kl.de// Revision 1.5  2011/03/23 16:16:48  acg
27912027Sjungma@eit.uni-kl.de//  Andy Goodrich: finish message verbosity support.
28012027Sjungma@eit.uni-kl.de//
28112027Sjungma@eit.uni-kl.de// Revision 1.4  2011/02/18 20:38:44  acg
28212027Sjungma@eit.uni-kl.de//  Andy Goodrich: Updated Copyright notice.
28312027Sjungma@eit.uni-kl.de//
28412027Sjungma@eit.uni-kl.de// Revision 1.3  2011/02/01 23:02:05  acg
28512027Sjungma@eit.uni-kl.de//  Andy Goodrich: IEEE 1666 2011 changes.
28612027Sjungma@eit.uni-kl.de//
28712027Sjungma@eit.uni-kl.de// Revision 1.2  2008/05/20 20:42:50  acg
28812027Sjungma@eit.uni-kl.de//  Andy Goodrich: added sc_core namespace prefix for ID value in sc_assert()
28912027Sjungma@eit.uni-kl.de//  macro.
29012027Sjungma@eit.uni-kl.de//
29112027Sjungma@eit.uni-kl.de// Revision 1.1.1.1  2006/12/15 20:20:06  acg
29212027Sjungma@eit.uni-kl.de// SystemC 2.3
29312027Sjungma@eit.uni-kl.de//
29412027Sjungma@eit.uni-kl.de// Revision 1.3  2006/01/13 18:53:11  acg
29512027Sjungma@eit.uni-kl.de// Andy Goodrich: Added $Log command so that CVS comments are reproduced in
29612027Sjungma@eit.uni-kl.de// the source.
29712027Sjungma@eit.uni-kl.de//
29812027Sjungma@eit.uni-kl.de
29912027Sjungma@eit.uni-kl.de#endif // SC_REPORT_H
300