1 /* -*- Mode: C; indent-tabs-mode: t; tab-width: 4 -*-
2 // ---------------------------------------------------------------------------
4 // Copyright (C) Stephanie Gawroriski <xer@multiphasicapps.net>
5 // ---------------------------------------------------------------------------
6 // SquirrelJME is under the Mozilla Public License Version 2.0.
7 // See license.mkd for licensing and copyright information.
8 // -------------------------------------------------------------------------*/
10 #include "sjme/except.h"
11 #include "sjme/debug.h"
13 void sjme_genericMessage(sjme_lpcstr file
, int line
,
14 sjme_lpcstr func
, sjme_lpcstr prefix
, sjme_lpcstr format
, va_list args
);
16 sjme_errorCode
sjme_except_printStackTraceR(SJME_DEBUG_DECL_FILE_LINE_FUNC
,
17 sjme_errorCode errorCode
, volatile sjme_exceptTrace
* exceptTrace
)
19 volatile sjme_exceptTrace
* seeker
;
21 /* Add notice, similar to Java. */
22 sjme_messageR(NULL
, -1, NULL
, SJME_JNI_TRUE
,
23 "EXCEPTION native: Error %d",
26 /* Go down the stack. */
28 while (seeker
!= NULL
)
30 /* Print indicators. */
31 if (seeker
->file
!= NULL
)
33 if (seeker
->line
>= 0)
34 sjme_messageR(NULL
, -1, NULL
, SJME_JNI_TRUE
,
37 sjme_debug_shortenFile(seeker
->file
),
40 sjme_messageR(NULL
, -1, NULL
, SJME_JNI_TRUE
,
43 sjme_debug_shortenFile(seeker
->file
));
47 if (seeker
->line
>= 0)
48 sjme_messageR(NULL
, -1, NULL
, SJME_JNI_TRUE
,
53 sjme_messageR(NULL
, -1, NULL
, SJME_JNI_TRUE
,
59 seeker
= seeker
->parent
;
63 return SJME_ERROR_NONE
;
66 sjme_errorCode
sjme_except_gracefulDeathR(SJME_DEBUG_DECL_FILE_LINE_FUNC
,
67 sjme_attrInNotNull sjme_nvm_frame
* frame
,
68 sjme_attrInRange(SJME_NUM_ERROR_CODES
, SJME_ERROR_NONE
)
69 sjme_errorCode errorCode
,
70 sjme_attrInNotNull sjme_attrFormatArg sjme_lpcstr message
, ...)
72 #if defined(SJME_CONFIG_DEBUG)
75 /* Emit debug message. */
76 va_start(args
, message
);
77 sjme_messageV(file
, line
, func
, SJME_JNI_FALSE
, message
, args
);
80 /* If debugging and not release version, mark to-do to fix issue. */
81 sjme_todoR(file
, line
, func
, "Fix bug! Because %d %08x!",
82 (int)errorCode
, (int)errorCode
);
84 sjme_todo("Implement graceful exit for release??");