mirror of
https://github.com/Mercury-Language/mercury.git
synced 2026-04-21 12:23:44 +00:00
to inside pragma(c_code) declarations in the `library' directory sources.
runtime/{Mmake,{math,io}_rt.mod}:
Remove math_rt.mod and io_rt.mod, since the code has been moved
into `.m' files in the library directory.
runtime/main.mod:
Remove this file, since it wasn't used.
runtime/imp.h:
Add SUCCESS_INDICATOR as a macro for r1, for use by
pragma_c_code.
Also a few minor unrelated changes:
runtime/imp.h:
Avoid code duplication in hash_string macros.
runtime/tags.h:
Use sizeof(Word) rather than WORD_SIZE (in this old code, the
extra level of indirection only obfuscated things).
runtime/{aux.c,aux.h,prof.c}:
Add some more #ifdefs to avoid including debugging/profiling
code in the non-debugging/non-profiling version of the library.
156 lines
4.1 KiB
C
156 lines
4.1 KiB
C
/*
|
|
** Copyright (C) 1995 University of Melbourne.
|
|
** This file may only be copied under the terms of the GNU Library General
|
|
** Public License - see the file COPYING.LIB in the Mercury distribution.
|
|
*/
|
|
|
|
#ifndef DEBUG_H
|
|
#define DEBUG_H
|
|
|
|
#ifdef DEBUG_ON
|
|
#define DEBUG(X) X
|
|
#else
|
|
#define DEBUG(X)
|
|
#endif
|
|
|
|
#define DONT(X)
|
|
|
|
#endif
|
|
|
|
/* DEFINITIONS FOR DEBUGGING MESSAGES */
|
|
|
|
#if defined(SPEED) && !defined(DEBUG_GOTOS)
|
|
|
|
#define debuggoto(label) ((void)0)
|
|
#define debugsreg() ((void)0)
|
|
|
|
#else
|
|
|
|
#define debuggoto(label) \
|
|
(assert(label), \
|
|
IF (gotodebug, (save_transient_registers(), goto_msg(label))))
|
|
|
|
#define debugsreg() \
|
|
IF (sregdebug, (save_transient_registers(), reg_msg()))
|
|
|
|
#endif
|
|
|
|
#ifdef SPEED
|
|
|
|
#define debugcr1(val0, hp) ((void)0)
|
|
#define debugcr2(val0, val1, hp) ((void)0)
|
|
#define debugincrhp(val, hp) ((void)0)
|
|
#define debugincrsp(val, sp) ((void)0)
|
|
#define debugdecrsp(val, sp) ((void)0)
|
|
#define debugpush(val, sp) ((void)0)
|
|
#define debugpop(val, sp) ((void)0)
|
|
#define debugregs(msg) ((void)0)
|
|
#define debugframe(msg) ((void)0)
|
|
#define debugmkframe() ((void)0)
|
|
#define debugmodframe() ((void)0)
|
|
#define debugsucceed() ((void)0)
|
|
#define debugsucceeddiscard() ((void)0)
|
|
#define debugfail() ((void)0)
|
|
#define debugredo() ((void)0)
|
|
#define debugcall(proc, succ_cont) ((void)0)
|
|
#define debugtailcall(proc) ((void)0)
|
|
#define debugproceed() ((void)0)
|
|
#define debugmsg0(msg) ((void)0)
|
|
#define debugmsg1(msg, arg1) ((void)0)
|
|
#define debugmsg2(msg, arg1, arg2) ((void)0)
|
|
#define debugmsg3(msg, arg1, arg2, arg3) ((void)0)
|
|
|
|
#else
|
|
|
|
#define debugcr1(val0, hp) \
|
|
IF (heapdebug, (save_transient_registers(), cr1_msg(val0, hp)))
|
|
|
|
#define debugcr2(val0, val1, hp) \
|
|
IF (heapdebug, (save_transient_registers(), cr2_msg(val0, val1, hp)))
|
|
|
|
#define debugincrhp(val, hp) \
|
|
IF (heapdebug, (save_transient_registers(), incr_hp_msg((val), (hp))))
|
|
|
|
#define debugincrsp(val, sp) \
|
|
IF (detstackdebug, (save_transient_registers(), incr_sp_msg((val), (sp))))
|
|
|
|
#define debugdecrsp(val, sp) \
|
|
IF (detstackdebug, (save_transient_registers(), decr_sp_msg((val), (sp))))
|
|
|
|
#define debugpush(val, sp) \
|
|
IF (detstackdebug, (save_transient_registers(), push_msg((val), (sp))))
|
|
|
|
#define debugpop(val, sp) \
|
|
IF (detstackdebug, (save_transient_registers(), pop_msg(val, sp)))
|
|
|
|
#define debugregs(msg) \
|
|
IF (progdebug, (save_transient_registers(), printregs(msg)))
|
|
|
|
#define debugmkframe() \
|
|
IF (nondstackdebug, (save_transient_registers(), mkframe_msg()))
|
|
|
|
#define debugframe(msg) \
|
|
IF (progdebug, (save_transient_registers(), printframe(msg)))
|
|
|
|
#define debugmodframe() \
|
|
IF (nondstackdebug, (save_transient_registers(), modframe_msg()))
|
|
|
|
#define debugsucceed() \
|
|
IF (nondstackdebug, (save_transient_registers(), succeed_msg()))
|
|
|
|
#define debugsucceeddiscard() \
|
|
IF (nondstackdebug, (save_transient_registers(), succeeddiscard_msg()))
|
|
|
|
#define debugfail() \
|
|
IF (nondstackdebug, (save_transient_registers(), fail_msg()))
|
|
|
|
#define debugredo() \
|
|
IF (nondstackdebug, (save_transient_registers(), redo_msg()))
|
|
|
|
#define debugcall(proc, succ_cont) \
|
|
IF (calldebug, (save_transient_registers(), call_msg(proc, succ_cont)))
|
|
|
|
#define debugtailcall(proc) \
|
|
IF (calldebug, (save_transient_registers(), tailcall_msg(proc)))
|
|
|
|
#define debugproceed() \
|
|
IF (calldebug, (save_transient_registers(), proceed_msg()))
|
|
|
|
#define debugmsg0(msg) \
|
|
IF (progdebug, (printf(msg)))
|
|
|
|
#define debugmsg1(msg, arg1) \
|
|
IF (progdebug, (printf(msg, arg1)))
|
|
|
|
#define debugmsg2(msg, arg1, arg2) \
|
|
IF (progdebug, (printf(msg, arg1, arg2)))
|
|
|
|
#define debugmsg3(msg, arg1, arg2, arg3) \
|
|
IF (progdebug, (printf(msg, arg1, arg2, arg3)))
|
|
|
|
#endif
|
|
|
|
#if 0
|
|
|
|
/* DEFINITIONS TO SUPPORT MANUAL DEBUGGING */
|
|
|
|
#ifdef __GNUC__
|
|
#define mklist(start,len) \
|
|
({ \
|
|
Word tmp; \
|
|
save_transient_registers(); \
|
|
tmp = do_mklist(start,len); \
|
|
restore_transient_registers(); \
|
|
/* return */ tmp; \
|
|
})
|
|
#else
|
|
/*
|
|
** if it's not gcc, then we can't use global register variables,
|
|
** so we don't need to worry about saving/restoring them
|
|
** (which would have been tricky to do in a portable macro)
|
|
*/
|
|
#define mklist(start,len) do_mklist(start,len)
|
|
#endif
|
|
|
|
#endif
|