1 /*=========================================================================== 2 * 3 * PUBLIC DOMAIN NOTICE 4 * National Center for Biotechnology Information 5 * 6 * This software/database is a "United States Government Work" under the 7 * terms of the United States Copyright Act. It was written as part of 8 * the author's official duties as a United States Government employee and 9 * thus cannot be copyrighted. This software/database is freely available 10 * to the public for use. The National Library of Medicine and the U.S. 11 * Government have not placed any restriction on its use or reproduction. 12 * 13 * Although all reasonable efforts have been taken to ensure the accuracy 14 * and reliability of the software and data, the NLM and the U.S. 15 * Government do not and cannot warrant the performance or results that 16 * may be obtained by using this software or data. The NLM and the U.S. 17 * Government disclaim all warranties, express or implied, including 18 * warranties of performance, merchantability or fitness for any particular 19 * purpose. 20 * 21 * Please cite the author in any work or product based on this material. 22 * 23 * =========================================================================== 24 * 25 */ 26 27 #include <kfc/callstk.hpp> 28 #include <kfc/except.hpp> 29 #include <kfc/rsrc.hpp> 30 31 #ifndef _hpp_vdb3_kfc_except_ 32 #define THROW( xc, fmt, ... ) \ 33 throw fmt 34 #define CONST_THROW( xc, msg ) \ 35 throw msg 36 #endif 37 38 namespace vdb3 39 { 40 41 __thread CallStk const * callstk; 42 CallStk(const SrcLoc & sloc)43 CallStk :: CallStk ( const SrcLoc & sloc ) 44 : caller ( callstk ) 45 , depth ( 0 ) 46 , src ( sloc ) 47 , func ( "" ) 48 { 49 if ( callstk != 0 ) 50 { 51 #ifdef _hpp_vdb3_kfc_rsrc_ 52 assert ( rsrc != 0 ); 53 FUNC_ENTRY (); 54 #endif 55 CONST_THROW ( xc_program_state_violation, "not at top of call stack" ); 56 } 57 58 callstk = this; 59 } 60 } 61