/*
 * Copyright 2018 Google, Inc.
 *
 * 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;
 * neither the name of the copyright holders nor the names of its
 * contributors may be used to endorse or promote products derived from
 * this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 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 COPYRIGHT
 * OWNER OR 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.
 *
 * Authors: Gabe Black
 */

#include "systemc/ext/core/messages.hh"
#include "systemc/utils/report.hh"

namespace sc_core
{

const char SC_ID_NO_BOOL_RETURNED_[] = "operator does not return boolean";
const char SC_ID_NO_INT_RETURNED_[] = "operator does not return int";
const char SC_ID_NO_SC_LOGIC_RETURNED_[] = "operator does not return sc_logic";
const char SC_ID_OPERAND_NOT_SC_LOGIC_[] = "operand is not sc_logic";
const char SC_ID_OPERAND_NOT_BOOL_[] = "operand is not bool";
const char SC_ID_INSTANCE_EXISTS_[] = "object already exists";
const char SC_ID_ILLEGAL_CHARACTERS_[] = "illegal characters";
const char SC_ID_VC6_PROCESS_HELPER_[] =
    "internal error: sc_vc6_process_helper";
const char SC_ID_VC6_MAX_PROCESSES_EXCEEDED_[] =
    "maximum number of processes per module exceeded (VC6)";
const char SC_ID_END_MODULE_NOT_CALLED_[] =
    "module construction not properly completed: did "
    "you forget to add a sc_module_name parameter to "
    "your module constructor?";
const char SC_ID_HIER_NAME_INCORRECT_[] =
    "hierarchical name as shown may be incorrect due to previous errors";
const char SC_ID_SET_STACK_SIZE_[] =
    "set_stack_size() is only allowed for SC_THREADs and SC_CTHREADs";
const char SC_ID_SC_MODULE_NAME_USE_[] = "incorrect use of sc_module_name";
const char SC_ID_SC_MODULE_NAME_REQUIRED_[] =
    "an sc_module_name parameter for your constructor is required";
const char SC_ID_SET_TIME_RESOLUTION_[] = "set time resolution failed";
const char SC_ID_SET_DEFAULT_TIME_UNIT_[] = "set default time unit failed";
const char SC_ID_DEFAULT_TIME_UNIT_CHANGED_[] =
    "default time unit changed to time resolution";
const char SC_ID_INCONSISTENT_API_CONFIG_[] =
    "inconsistent library configuration detected";
const char SC_ID_WAIT_NOT_ALLOWED_[] =
    "wait() is only allowed in SC_THREADs and SC_CTHREADs";
const char SC_ID_NEXT_TRIGGER_NOT_ALLOWED_[] =
    "next_trigger() is only allowed in SC_METHODs";
const char SC_ID_IMMEDIATE_NOTIFICATION_[] =
    "immediate notification is not allowed during update phase or elaboration";
const char SC_ID_HALT_NOT_ALLOWED_[] = "halt() is only allowed in SC_CTHREADs";
const char SC_ID_WATCHING_NOT_ALLOWED_[] =
    "watching() has been deprecated, use reset_signal_is()";
const char SC_ID_DONT_INITIALIZE_[] =
    "dont_initialize() has no effect for SC_CTHREADs";
const char SC_ID_WAIT_N_INVALID_[] = "wait(n) is only valid for n > 0";
const char SC_ID_MAKE_SENSITIVE_[] = "make sensitive failed";
const char SC_ID_MAKE_SENSITIVE_POS_[] = "make sensitive pos failed";
const char SC_ID_MAKE_SENSITIVE_NEG_[] = "make sensitive neg failed";
const char SC_ID_INSERT_MODULE_[] = "insert module failed";
const char SC_ID_REMOVE_MODULE_[] = "remove module failed";
const char SC_ID_NOTIFY_DELAYED_[] =
    "notify_delayed() cannot be called on events "
    "that have pending notifications";
const char SC_ID_GEN_UNIQUE_NAME_[] =
    "cannot generate unique name from null string";
const char SC_ID_MODULE_NAME_STACK_EMPTY_[] =
    "module name stack is empty: did you forget to "
    "add a sc_module_name parameter to your module "
    "constructor?";
const char SC_ID_NAME_EXISTS_[] = "name already exists";
const char SC_ID_IMMEDIATE_SELF_NOTIFICATION_[] =
    "immediate self-notification ignored as of IEEE 1666-2011";
const char SC_ID_WAIT_DURING_UNWINDING_[] =
    "wait() not allowed during unwinding";
const char SC_ID_CYCLE_MISSES_EVENTS_[] =
    "the simulation contains timed-events but they are "
    "ignored by sc_cycle() ==> the simulation will be "
    "incorrect";
const char SC_ID_RETHROW_UNWINDING_[] =
    "sc_unwind_exception not re-thrown during kill/reset";
const char SC_ID_PROCESS_ALREADY_UNWINDING_[] =
    "kill/reset ignored during unwinding";
const char SC_ID_MODULE_METHOD_AFTER_START_[] =
    "call to SC_METHOD in sc_module while simulation running";
const char SC_ID_MODULE_THREAD_AFTER_START_[] =
    "call to SC_THREAD in sc_module while simulation running";
const char SC_ID_MODULE_CTHREAD_AFTER_START_[] =
    "call to SC_CTHREAD in sc_module while simulation running";
const char SC_ID_SIMULATION_TIME_OVERFLOW_[] =
    "simulation time value overflow, simulation aborted";
const char SC_ID_SIMULATION_STOP_CALLED_TWICE_[] =
    "sc_stop has already been called";
const char SC_ID_SIMULATION_START_AFTER_STOP_[] =
    "sc_start called after sc_stop has been called";
const char SC_ID_STOP_MODE_AFTER_START_[] =
    "attempt to set sc_stop mode  after start will be ignored";
const char SC_ID_SIMULATION_START_AFTER_ERROR_[] =
    "attempt to restart simulation after error";
const char SC_ID_SIMULATION_UNCAUGHT_EXCEPTION_[] = "uncaught exception";
const char SC_ID_PHASE_CALLBACKS_UNSUPPORTED_[] =
    "simulation phase callbacks not enabled";
const char SC_ID_PHASE_CALLBACK_NOT_IMPLEMENTED_[] =
    "empty simulation phase callback called";
const char SC_ID_PHASE_CALLBACK_REGISTER_[] =
    "register simulation phase callback";
const char SC_ID_PHASE_CALLBACK_FORBIDDEN_[] =
    "forbidden action in simulation phase callback";
const char SC_ID_SIMULATION_START_UNEXPECTED_[] =
    "sc_start called unexpectedly";
const char SC_ID_THROW_IT_IGNORED_[] =
    "throw_it on method/non-running process is being ignored ";
const char SC_ID_NOT_EXPECTING_DYNAMIC_EVENT_NOTIFY_[] =
    "dynamic event notification encountered when sensitivity is static";
const char SC_ID_DISABLE_WILL_ORPHAN_PROCESS_[] =
    "disable() or dont_initialize() called on process with no static "
    "sensitivity, it will be orphaned";
const char SC_ID_PROCESS_CONTROL_CORNER_CASE_[] =
    "Undefined process control interaction";
const char SC_ID_METHOD_TERMINATION_EVENT_[] =
    "Attempt to get terminated event for a method process";
const char SC_ID_JOIN_ON_METHOD_HANDLE_[] =
    "Attempt to register method process with sc_join object";
const char SC_ID_NO_PROCESS_SEMANTICS_[] =
    "Attempt to invoke process with no semantics() method";
const char SC_ID_EVENT_ON_NULL_PROCESS_[] =
    "Attempt to get an event for non-existent process";
const char SC_ID_EVENT_LIST_FAILED_[] =
    "invalid use of sc_(and|or)_event list";
const char SC_ID_UNKNOWN_PROCESS_TYPE_[] = "Unknown process type";
const char SC_ID_TIME_CONVERSION_FAILED_[] = "sc_time conversion failed";
const char SC_ID_NEGATIVE_SIMULATION_TIME_[] =
    "negative simulation interval specified in sc_start call";
const char SC_ID_BAD_SC_MODULE_CONSTRUCTOR_[] =
    "sc_module(const char*), sc_module(const std::string&) "
    "have been deprecated, use sc_module(const sc_module_name&)";
const char SC_ID_EMPTY_PROCESS_HANDLE_[] =
    "attempt to use an empty process handle ignored";
const char SC_ID_NO_SC_START_ACTIVITY_[] =
    "no activity or clock movement for sc_start() invocation";
const char SC_ID_KILL_PROCESS_WHILE_UNITIALIZED_[] =
    "a process may not be killed before it is initialized";
const char SC_ID_RESET_PROCESS_WHILE_NOT_RUNNING_[] =
    "a process may not be asynchronously reset while the "
    "simulation is not running";
const char SC_ID_THROW_IT_WHILE_NOT_RUNNING_[] =
    "throw_it not allowed unless simulation is running ";

namespace {

sc_gem5::DefaultReportMessages predfinedMessages{
    {500, SC_ID_NO_BOOL_RETURNED_},
    {501, SC_ID_NO_INT_RETURNED_},
    {502, SC_ID_NO_SC_LOGIC_RETURNED_},
    {503, SC_ID_OPERAND_NOT_SC_LOGIC_},
    {504, SC_ID_OPERAND_NOT_BOOL_},
    {505, SC_ID_INSTANCE_EXISTS_},
    {506, SC_ID_ILLEGAL_CHARACTERS_},
    {507, SC_ID_VC6_PROCESS_HELPER_},
    {508, SC_ID_VC6_MAX_PROCESSES_EXCEEDED_},
    {509, SC_ID_END_MODULE_NOT_CALLED_},
    {510, SC_ID_HIER_NAME_INCORRECT_},
    {511, SC_ID_SET_STACK_SIZE_},
    {512, SC_ID_SC_MODULE_NAME_USE_},
    {513, SC_ID_SC_MODULE_NAME_REQUIRED_},
    {514, SC_ID_SET_TIME_RESOLUTION_},
    {515, SC_ID_SET_DEFAULT_TIME_UNIT_},
    {516, SC_ID_DEFAULT_TIME_UNIT_CHANGED_},
    {517, SC_ID_INCONSISTENT_API_CONFIG_},
    {519, SC_ID_WAIT_NOT_ALLOWED_},
    {520, SC_ID_NEXT_TRIGGER_NOT_ALLOWED_},
    {521, SC_ID_IMMEDIATE_NOTIFICATION_},
    {522, SC_ID_HALT_NOT_ALLOWED_},
    {523, SC_ID_WATCHING_NOT_ALLOWED_},
    {524, SC_ID_DONT_INITIALIZE_},
    {525, SC_ID_WAIT_N_INVALID_},
    {526, SC_ID_MAKE_SENSITIVE_},
    {527, SC_ID_MAKE_SENSITIVE_POS_},
    {528, SC_ID_MAKE_SENSITIVE_NEG_},
    {529, SC_ID_INSERT_MODULE_},
    {530, SC_ID_REMOVE_MODULE_},
    {531, SC_ID_NOTIFY_DELAYED_},
    {532, SC_ID_GEN_UNIQUE_NAME_},
    {533, SC_ID_MODULE_NAME_STACK_EMPTY_},
    {534, SC_ID_NAME_EXISTS_},
    {536, SC_ID_IMMEDIATE_SELF_NOTIFICATION_},
    {537, SC_ID_WAIT_DURING_UNWINDING_},
    {538, SC_ID_CYCLE_MISSES_EVENTS_},
    {539, SC_ID_RETHROW_UNWINDING_},
    {540, SC_ID_PROCESS_ALREADY_UNWINDING_},
    {541, SC_ID_MODULE_METHOD_AFTER_START_},
    {542, SC_ID_MODULE_THREAD_AFTER_START_},
    {543, SC_ID_MODULE_CTHREAD_AFTER_START_},
    {544, SC_ID_SIMULATION_TIME_OVERFLOW_},
    {545, SC_ID_SIMULATION_STOP_CALLED_TWICE_},
    {546, SC_ID_SIMULATION_START_AFTER_STOP_},
    {547, SC_ID_STOP_MODE_AFTER_START_},
    {548, SC_ID_SIMULATION_START_AFTER_ERROR_},
    {549, SC_ID_SIMULATION_UNCAUGHT_EXCEPTION_},
    {550, SC_ID_PHASE_CALLBACKS_UNSUPPORTED_},
    {551, SC_ID_PHASE_CALLBACK_NOT_IMPLEMENTED_},
    {552, SC_ID_PHASE_CALLBACK_REGISTER_},
    {553, SC_ID_PHASE_CALLBACK_FORBIDDEN_},
    {554, SC_ID_SIMULATION_START_UNEXPECTED_},
    {556, SC_ID_THROW_IT_IGNORED_},
    {557, SC_ID_NOT_EXPECTING_DYNAMIC_EVENT_NOTIFY_},
    {558, SC_ID_DISABLE_WILL_ORPHAN_PROCESS_},
    {559, SC_ID_PROCESS_CONTROL_CORNER_CASE_},
    {560, SC_ID_METHOD_TERMINATION_EVENT_},
    {561, SC_ID_JOIN_ON_METHOD_HANDLE_},
    {563, SC_ID_NO_PROCESS_SEMANTICS_},
    {564, SC_ID_EVENT_ON_NULL_PROCESS_},
    {565, SC_ID_EVENT_LIST_FAILED_},
    {566, SC_ID_UNKNOWN_PROCESS_TYPE_},
    {567, SC_ID_TIME_CONVERSION_FAILED_},
    {568, SC_ID_NEGATIVE_SIMULATION_TIME_},
    {569, SC_ID_BAD_SC_MODULE_CONSTRUCTOR_},
    {570, SC_ID_EMPTY_PROCESS_HANDLE_},
    {571, SC_ID_NO_SC_START_ACTIVITY_},
    {572, SC_ID_KILL_PROCESS_WHILE_UNITIALIZED_},
    {573, SC_ID_RESET_PROCESS_WHILE_NOT_RUNNING_},
    {574, SC_ID_THROW_IT_WHILE_NOT_RUNNING_}
};

} // anonymous namespace

} // namespace sc_core
