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