typedef struct M2RTS_ArgCVEnvP_p M2RTS_ArgCVEnvP;
+# define stderrFd 2
typedef struct M2RTS_ProcedureList_r M2RTS_ProcedureList;
typedef char *M2RTS_PtrToChar;
/*
Halt - provides a more user friendly version of HALT, which takes
- four parameters to aid debugging.
+ four parameters to aid debugging. It writes an error message
+ to stderr and calls exit (1).
*/
-extern "C" void M2RTS_Halt (const char *file_, unsigned int _file_high, unsigned int line, const char *function_, unsigned int _function_high, const char *description_, unsigned int _description_high) __attribute__ ((noreturn));
+extern "C" void M2RTS_Halt (const char *filename_, unsigned int _filename_high, unsigned int line, const char *function_, unsigned int _function_high, const char *description_, unsigned int _description_high) __attribute__ ((noreturn));
+
+/*
+ HaltC - provides a more user friendly version of HALT, which takes
+ four parameters to aid debugging. It writes an error message
+ to stderr and calls exit (1).
+*/
+
+extern "C" void M2RTS_HaltC (void * filename, unsigned int line, void * function, void * description);
/*
ExitOnHalt - if HALT is executed then call exit with the exit code, e.
ErrorMessage - emits an error message to stderr and then calls exit (1).
*/
-extern "C" void M2RTS_ErrorMessage (const char *message_, unsigned int _message_high, const char *file_, unsigned int _file_high, unsigned int line, const char *function_, unsigned int _function_high) __attribute__ ((noreturn));
+extern "C" void M2RTS_ErrorMessage (const char *message_, unsigned int _message_high, const char *filename_, unsigned int _filename_high, unsigned int line, const char *function_, unsigned int _function_high) __attribute__ ((noreturn));
/*
Length - returns the length of a string, a. This is called whenever
static void ErrorString (const char *a_, unsigned int _a_high);
+/*
+ ErrorStringC - writes a string to stderr.
+*/
+
+static void ErrorStringC (void * str);
+
+/*
+ ErrorMessageC - emits an error message to stderr and then calls exit (1).
+*/
+
+static void ErrorMessageC (void * message, void * filename, unsigned int line, void * function) __attribute__ ((noreturn));
+
/*
InitProcList - initialize the head and tail pointers to NIL.
*/
/* make a local copy of each unbounded array. */
memcpy (a, a_, _a_high+1);
- n = static_cast<int> (libc_write (2, &a, static_cast<size_t> (StrLib_StrLen ((const char *) a, _a_high))));
+ n = static_cast<int> (libc_write (stderrFd, &a, static_cast<size_t> (StrLib_StrLen ((const char *) a, _a_high))));
+}
+
+
+/*
+ ErrorStringC - writes a string to stderr.
+*/
+
+static void ErrorStringC (void * str)
+{
+ int len;
+
+ len = static_cast<int> (libc_write (stderrFd, str, libc_strlen (str)));
+}
+
+
+/*
+ ErrorMessageC - emits an error message to stderr and then calls exit (1).
+*/
+
+static void ErrorMessageC (void * message, void * filename, unsigned int line, void * function)
+{
+ typedef struct ErrorMessageC__T2_a ErrorMessageC__T2;
+
+ struct ErrorMessageC__T2_a { char array[10+1]; };
+ ErrorMessageC__T2 buffer;
+
+ ErrorStringC (filename);
+ ErrorString ((const char *) ":", 1);
+ NumberIO_CardToStr (line, 0, (char *) &buffer.array[0], 10);
+ ErrorString ((const char *) &buffer.array[0], 10);
+ ErrorString ((const char *) ":", 1);
+ if ((libc_strlen (function)) > 0)
+ {
+ ErrorString ((const char *) "in ", 3);
+ ErrorStringC (function);
+ ErrorString ((const char *) " has caused ", 12);
+ }
+ ErrorStringC (message);
+ buffer.array[0] = ASCII_nl;
+ buffer.array[1] = ASCII_nul;
+ ErrorString ((const char *) &buffer.array[0], 10);
+ libc_exit (1);
}
/*
Halt - provides a more user friendly version of HALT, which takes
- four parameters to aid debugging.
+ four parameters to aid debugging. It writes an error message
+ to stderr and calls exit (1).
*/
-extern "C" void M2RTS_Halt (const char *file_, unsigned int _file_high, unsigned int line, const char *function_, unsigned int _function_high, const char *description_, unsigned int _description_high)
+extern "C" void M2RTS_Halt (const char *filename_, unsigned int _filename_high, unsigned int line, const char *function_, unsigned int _function_high, const char *description_, unsigned int _description_high)
{
- char file[_file_high+1];
+ char filename[_filename_high+1];
char function[_function_high+1];
char description[_description_high+1];
/* make a local copy of each unbounded array. */
- memcpy (file, file_, _file_high+1);
+ memcpy (filename, filename_, _filename_high+1);
memcpy (function, function_, _function_high+1);
memcpy (description, description_, _description_high+1);
- M2RTS_ErrorMessage ((const char *) description, _description_high, (const char *) file, _file_high, line, (const char *) function, _function_high);
- M2RTS_HALT (-1);
- __builtin_unreachable ();
+ M2RTS_ErrorMessage ((const char *) description, _description_high, (const char *) filename, _filename_high, line, (const char *) function, _function_high);
+}
+
+
+/*
+ HaltC - provides a more user friendly version of HALT, which takes
+ four parameters to aid debugging. It writes an error message
+ to stderr and calls exit (1).
+*/
+
+extern "C" void M2RTS_HaltC (void * filename, unsigned int line, void * function, void * description)
+{
+ ErrorMessageC (description, filename, line, function);
}
ErrorMessage - emits an error message to stderr and then calls exit (1).
*/
-extern "C" void M2RTS_ErrorMessage (const char *message_, unsigned int _message_high, const char *file_, unsigned int _file_high, unsigned int line, const char *function_, unsigned int _function_high)
+extern "C" void M2RTS_ErrorMessage (const char *message_, unsigned int _message_high, const char *filename_, unsigned int _filename_high, unsigned int line, const char *function_, unsigned int _function_high)
{
- typedef struct ErrorMessage__T2_a ErrorMessage__T2;
+ typedef struct ErrorMessage__T3_a ErrorMessage__T3;
- struct ErrorMessage__T2_a { char array[10+1]; };
- ErrorMessage__T2 LineNo;
+ struct ErrorMessage__T3_a { char array[10+1]; };
+ ErrorMessage__T3 buffer;
char message[_message_high+1];
- char file[_file_high+1];
+ char filename[_filename_high+1];
char function[_function_high+1];
/* make a local copy of each unbounded array. */
memcpy (message, message_, _message_high+1);
- memcpy (file, file_, _file_high+1);
+ memcpy (filename, filename_, _filename_high+1);
memcpy (function, function_, _function_high+1);
- ErrorString ((const char *) file, _file_high);
+ ErrorString ((const char *) filename, _filename_high);
ErrorString ((const char *) ":", 1);
- NumberIO_CardToStr (line, 0, (char *) &LineNo.array[0], 10);
- ErrorString ((const char *) &LineNo.array[0], 10);
+ NumberIO_CardToStr (line, 0, (char *) &buffer.array[0], 10);
+ ErrorString ((const char *) &buffer.array[0], 10);
ErrorString ((const char *) ":", 1);
if (! (StrLib_StrEqual ((const char *) function, _function_high, (const char *) "", 0)))
{
ErrorString ((const char *) " has caused ", 12);
}
ErrorString ((const char *) message, _message_high);
- LineNo.array[0] = ASCII_nl;
- LineNo.array[1] = ASCII_nul;
- ErrorString ((const char *) &LineNo.array[0], 10);
+ buffer.array[0] = ASCII_nl;
+ buffer.array[1] = ASCII_nul;
+ ErrorString ((const char *) &buffer.array[0], 10);
libc_exit (1);
}
typedef struct DynamicStrings_stringRecord_r DynamicStrings_stringRecord;
-typedef struct wlists__T9_r wlists__T9;
-
typedef struct DynamicStrings_Contents_r DynamicStrings_Contents;
-typedef struct DynamicStrings__T7_a DynamicStrings__T7;
+typedef struct wlists__T9_r wlists__T9;
typedef struct mcPretty__T12_r mcPretty__T12;
typedef struct wlists__T10_a wlists__T10;
+typedef struct DynamicStrings__T7_a DynamicStrings__T7;
+
typedef Indexing__T5 *Indexing_Index;
typedef mcComment__T6 *mcComment_commentDesc;
unsigned int used;
};
-struct DynamicStrings__T7_a { char array[(MaxBuf-1)+1]; };
struct wlists__T10_a { unsigned int array[maxNoOfElements-1+1]; };
+struct DynamicStrings__T7_a { char array[(MaxBuf-1)+1]; };
struct alists__T13_r {
unsigned int noOfelements;
alists__T14 elements;
decl_commentPair com;
};
-struct wlists__T9_r {
- unsigned int noOfElements;
- wlists__T10 elements;
- wlists_wlist next;
- };
-
struct DynamicStrings_Contents_r {
DynamicStrings__T7 buf;
unsigned int len;
DynamicStrings_String next;
};
+struct wlists__T9_r {
+ unsigned int noOfElements;
+ wlists__T10 elements;
+ wlists_wlist next;
+ };
+
struct mcPretty__T12_r {
mcPretty_writeProc write_;
mcPretty_writeLnProc writeln;
extern "C" void M2RTS_ExecuteTerminationProcedures (void);
extern "C" void M2RTS_Terminate (void) __attribute__ ((noreturn));
extern "C" void M2RTS_HALT (int exitcode) __attribute__ ((noreturn));
-extern "C" void M2RTS_Halt (const char *file_, unsigned int _file_high, unsigned int line, const char *function_, unsigned int _function_high, const char *description_, unsigned int _description_high) __attribute__ ((noreturn));
+extern "C" void M2RTS_Halt (const char *filename_, unsigned int _filename_high, unsigned int line, const char *function_, unsigned int _function_high, const char *description_, unsigned int _description_high) __attribute__ ((noreturn));
+extern "C" void M2RTS_HaltC (void * filename, unsigned int line, void * function, void * description);
extern "C" void M2RTS_ExitOnHalt (int e);
-extern "C" void M2RTS_ErrorMessage (const char *message_, unsigned int _message_high, const char *file_, unsigned int _file_high, unsigned int line, const char *function_, unsigned int _function_high) __attribute__ ((noreturn));
+extern "C" void M2RTS_ErrorMessage (const char *message_, unsigned int _message_high, const char *filename_, unsigned int _filename_high, unsigned int line, const char *function_, unsigned int _function_high) __attribute__ ((noreturn));
extern "C" unsigned int M2RTS_Length (const char *a_, unsigned int _a_high);
extern "C" void M2RTS_AssignmentException (void * filename, unsigned int line, unsigned int column, void * scope, void * message);
extern "C" void M2RTS_ReturnException (void * filename, unsigned int line, unsigned int column, void * scope, void * message);