Files
mercury/runtime/mercury_init.h
Zoltan Somogyi 455e1eea75 The runtime had two different conventions for naming types.
Estimated hours taken: 2
Branches: main

The runtime had two different conventions for naming types. One convention,
used mostly in the debugger-related modules, added underscores between
capitalized words; example: MR_Label_Layout. The other convention, used
in most modules, used capitalized words without underscores (e.g. MR_TypeInfo).

This diff standardizes on the second convention. It has no algorithmic changes,
only renames of types.

runtime/*.[ch]:
trace/*.[ch]:
compiler/*.m:
library/*.m:
mdbcomp/*.m:
	Effect the change described above. The only substantive change is that
	runtime/mercury_stack_layout.h used to define *two* types for trace
	levels: MR_TraceLevel and MR_Trace_Level, and this diff standardizes
	on just one (they had equivalent definitions).

runtime/mercury_bootstrap.h:
	Add a #define from the old name to the new for all the changed type
	names that the installed compiler can put into .c files. We can delete
	these #defines some time after this diff has bootstrapped.

slice/.mgnuc_opts:
	Restore the --no-mercury-stdlib-dir option, without which the slice
	directory won't compile after this change (because it looks for type
	names in the installed runtime header files, which define the old
	versions of type names).
2006-11-29 05:18:42 +00:00

174 lines
5.8 KiB
C

/*
** Copyright (C) 1993-2006 The 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.
*/
/*
** mercury_init.h - this file declares stuff defined in the
** automatically generated *_init.c files. This is also the interface
** used by C code that wishes to interface to Mercury.
**
** It also declares some stuff that is used in the automatically
** generate *_init.c files.
*/
#ifndef MERCURY_INIT_H
#define MERCURY_INIT_H
/*
** The following must come before any definitions of global variables.
** This is necessary to support DLLs on Windows.
*/
#include "mercury_conf.h" /* for MR_USE_DLLS */
#if MR_USE_DLLS
#include "libmer_rt_dll.h"
#endif
/*---------------------------------------------------------------------------*/
/*
** This part is the interface that should be used by C programs that wish
** to interface to Mercury.
*/
/*
** mercury_main() is defined in the <module>_init.c file.
** It calls mercury_init(), mercury_call_main(), and then mercury_terminate().
*/
extern int mercury_main(int argc, char **argv);
/*
** mercury_init() is defined in the <module>_init.c file.
**
** The `argc' and `argv' parameters are as for main() in C.
** The `stack_bottom' parameter should be the address of a (word-aligned)
** variable on the C stack. The conservative garbage collector treats that
** address as the start of the stack, so anything older than that
** address won't get scanned; don't store pointers to GC'ed memory
** in local variables that are older than that.
**
** mercury_init() just does some stuff to initialize the garbage
** collector, sets some global variables, and then calls
** mercury_runtime_init().
*/
extern void mercury_init(int argc, char **argv, void *stack_bottom);
/*
** mercury_call_main() is defined in the <module>_init.c file.
** It just calls mercury_runtime_main(), which calls main/2
** in the Mercury program.
*/
extern void mercury_call_main(void);
/*
** mercury_terminate() is defined in the <module>_init.c file.
** It just calls mercury_runtime_terminate(), which performs
** any necessary cleanup, and then returns the appropriate
** exit status as set by io__set_exit_status.
*/
extern int mercury_terminate(void);
/*---------------------------------------------------------------------------*/
/*
** This part defines things which are used by the automatically
** generated *_init.c file. These should not be used (directly)
** by C programs that wish to interface to Mercury.
*/
#include "mercury_regs.h" /* must come before system headers */
#include "mercury_goto.h" /* for MR_declare_entry */
#include "mercury_types.h" /* for MR_Word etc */
#include "mercury_wrapper.h" /* for MR_do_init_modules,
mercury_runtime_init(),
mercury_runtime_main(),
mercury_runtime_terminate(),
etc. */
#include "mercury_trace_base.h" /* for MR_trace_port */
#include "mercury_type_info.h" /* for MR_TypeCtorInfo_Struct */
#include "mercury_library_types.h" /* for MercuryFilePtr */
#include "mercury_complexity.h" /* for MR_ComplexityProc */
#ifdef MR_CONSERVATIVE_GC
#ifdef MR_MPS_GC
#include "mercury_mps.h" /* for GC_INIT(), GC_stack_bottom */
#endif
#ifdef MR_BOEHM_GC
#define GC_I_HIDE_POINTERS
#include "gc.h" /* for GC_INIT(), GC_stack_bottom */
#endif
#endif
#ifdef MR_HIGHLEVEL_CODE
#include "mercury.h"
#endif
/*
** mercury_main() takes the address of the following predicates/functions,
** which are defined elsewhere.
**
** These declarations duplicate some of the contents of the automatically
** generated header files for some of the library modules, and therefore
** represent a potential double maintenance problem. At the moment we
** accept this because it avoids having the runtime rely on the library.
*/
/* in library/io.mh */
extern void mercury_init_io(void);
extern void ML_io_init_state(void);
extern void ML_io_finalize_state(void);
extern void ML_io_stderr_stream(MercuryFilePtr *);
extern void ML_io_stdout_stream(MercuryFilePtr *);
extern void ML_io_stdin_stream(MercuryFilePtr *);
extern void ML_io_print_to_stream(MR_Word, MercuryFilePtr, MR_Word);
extern void ML_io_print_to_cur_stream(MR_Word, MR_Word);
/* in library/private_builtin.m */
extern const MR_TypeCtorInfo ML_type_ctor_info_for_univ;
extern const MR_TypeCtorInfo ML_type_info_for_type_info;
extern const MR_TypeCtorInfo ML_type_info_for_pseudo_type_info;
extern const MR_FA_TypeInfo_Struct1 ML_type_info_for_list_of_univ;
extern const MR_FA_TypeInfo_Struct1 ML_type_info_for_list_of_int;
extern const MR_FA_TypeInfo_Struct1 ML_type_info_for_list_of_char;
extern const MR_FA_TypeInfo_Struct1 ML_type_info_for_list_of_string;
extern const MR_FA_TypeInfo_Struct1 ML_type_info_for_list_of_type_info;
extern const MR_FA_TypeInfo_Struct1
ML_type_info_for_list_of_pseudo_type_info;
/* in trace/mercury_trace_internal.h */
extern char *MR_trace_getline(const char *, FILE *mdb_in, FILE *mdb_out);
extern char *MR_trace_get_command(const char *, FILE *, FILE *);
/* in trace/mercury_trace_vars.h */
extern const char *MR_trace_browse_all_on_level(FILE *,
const MR_LabelLayout *, MR_Word *, MR_Word *,
int, MR_bool);
/* in trace/mercury_trace_external.h */
extern void MR_trace_init_external(void);
extern void MR_trace_final_external(void);
/* in library/type_desc.m */
extern MR_String ML_type_name(MR_Word);
/* in runtime/mercury_trace_base.c */
extern MR_Code *MR_trace_fake(const MR_LabelLayout *);
/* in trace/mercury_trace.c */
extern MR_Code *MR_trace_real(const MR_LabelLayout *);
extern void MR_trace_interrupt_handler(void);
/* in trace/mercury_trace_tables.c */
extern void MR_register_module_layout_real(const MR_ModuleLayout *);
/*---------------------------------------------------------------------------*/
#endif /* not MERCURY_INIT_H */
/*---------------------------------------------------------------------------*/