112855Sgabeblack@google.com//---------------------------------------------------------------------- 212855Sgabeblack@google.com// Copyright 2009 Cadence Design Systems, Inc. 312855Sgabeblack@google.com// All Rights Reserved Worldwide 412855Sgabeblack@google.com//---------------------------------------------------------------------- 512855Sgabeblack@google.com 612855Sgabeblack@google.com#include <systemc.h> 712855Sgabeblack@google.com 812855Sgabeblack@google.comclass my_exception { 912855Sgabeblack@google.compublic: 1012855Sgabeblack@google.com my_exception(const char* s) : s_(s) { } 1112855Sgabeblack@google.com const char* message() { return s_.c_str(); } 1212855Sgabeblack@google.comprotected: 1312855Sgabeblack@google.com std::string s_; 1412855Sgabeblack@google.com}; 1512855Sgabeblack@google.com 1612855Sgabeblack@google.comSC_MODULE(top) { 1712855Sgabeblack@google.compublic: 1812855Sgabeblack@google.com SC_CTOR(top) { 1912855Sgabeblack@google.com SC_THREAD(victim); 2012855Sgabeblack@google.com h = sc_get_current_process_handle(); 2112855Sgabeblack@google.com SC_THREAD(perpetrator); 2212855Sgabeblack@google.com } 2312855Sgabeblack@google.com 2412855Sgabeblack@google.com void victim() { 2512855Sgabeblack@google.com try { 2612855Sgabeblack@google.com cerr << sc_time_stamp() << ": starting victim thread" << endl; 2712855Sgabeblack@google.com ::sc_core::wait(100, SC_NS); 2812855Sgabeblack@google.com } 2912855Sgabeblack@google.com catch (my_exception& x) { 3012855Sgabeblack@google.com cerr << sc_time_stamp() << ": in victim thread, caught exception " 3112855Sgabeblack@google.com << x.message() << ", exiting" << endl; 3212855Sgabeblack@google.com return; 3312855Sgabeblack@google.com } 3412855Sgabeblack@google.com } 3512855Sgabeblack@google.com 3612855Sgabeblack@google.com void perpetrator() { 3712855Sgabeblack@google.com wait(10, SC_NS); 3812855Sgabeblack@google.com cerr << sc_time_stamp() 3912855Sgabeblack@google.com << ": in perpetrator throwing exception in victim " 4012855Sgabeblack@google.com << endl; 4112855Sgabeblack@google.com h.throw_it(my_exception("from pepetrator")); 4212855Sgabeblack@google.com cerr << sc_time_stamp() 4312855Sgabeblack@google.com << ": in perpetrator after throwing exception in victim " 4412855Sgabeblack@google.com << endl; 4512855Sgabeblack@google.com } 4612855Sgabeblack@google.com 4712855Sgabeblack@google.comprotected: 4812855Sgabeblack@google.com sc_process_handle h; 4912855Sgabeblack@google.com}; 5012855Sgabeblack@google.com 5112855Sgabeblack@google.comint sc_main (int argc, char *argv[]) 5212855Sgabeblack@google.com{ 5312855Sgabeblack@google.com top t("top"); 5412855Sgabeblack@google.com sc_start(); 5512855Sgabeblack@google.com return 0; 5612855Sgabeblack@google.com} 5712855Sgabeblack@google.com 58