/* do not edit automatically generated by mc from mcOptions. */ /* This file is part of GNU Modula-2. GNU Modula-2 is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GNU Modula-2 is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with gm2; see the file COPYING. If not, write to the Free Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include "config.h" #include "system.h" #include # if !defined (PROC_D) # define PROC_D typedef void (*PROC_t) (void); typedef struct { PROC_t proc; } PROC; # endif # if !defined (TRUE) # define TRUE (1==1) # endif # if !defined (FALSE) # define FALSE (1==0) # endif #if defined(__cplusplus) # undef NULL # define NULL 0 #endif #define _mcOptions_H #define _mcOptions_C # include "GSArgs.h" # include "GmcSearch.h" # include "Glibc.h" # include "GmcPrintf.h" # include "GDebug.h" # include "GStrLib.h" # include "Gdecl.h" # include "GDynamicStrings.h" # include "GFIO.h" # include "GSFIO.h" static bool langC; static bool langCPP; static bool langM2; static bool gplHeader; static bool glplHeader; static bool summary; static bool contributed; static bool scaffoldMain; static bool scaffoldDynamic; static bool caseRuntime; static bool arrayRuntime; static bool returnRuntime; static bool suppressNoReturn; static bool useBoolType; static bool gccConfigSystem; static bool ignoreFQ; static bool debugTopological; static bool extendedOpaque; static bool internalDebugging; static bool verbose; static bool quiet; static DynamicStrings_String CReal; static DynamicStrings_String CLongReal; static DynamicStrings_String CShortReal; static DynamicStrings_String projectContents; static DynamicStrings_String summaryContents; static DynamicStrings_String contributedContents; static DynamicStrings_String hPrefix; static DynamicStrings_String outputFile; static DynamicStrings_String cppArgs; static DynamicStrings_String cppProgram; /* handleOptions - iterates over all options setting appropriate values and returns the single source file if found at the end of the arguments. */ extern "C" DynamicStrings_String mcOptions_handleOptions (void); /* getQuiet - return the value of quiet. */ extern "C" bool mcOptions_getQuiet (void); /* getVerbose - return the value of verbose. */ extern "C" bool mcOptions_getVerbose (void); /* getInternalDebugging - return the value of internalDebugging. */ extern "C" bool mcOptions_getInternalDebugging (void); /* getCppCommandLine - returns the Cpp command line and all arguments. */ extern "C" DynamicStrings_String mcOptions_getCppCommandLine (void); /* getOutputFile - sets the output filename to output. */ extern "C" DynamicStrings_String mcOptions_getOutputFile (void); /* getExtendedOpaque - return the extendedOpaque value. */ extern "C" bool mcOptions_getExtendedOpaque (void); /* setDebugTopological - sets the flag debugTopological to value. */ extern "C" void mcOptions_setDebugTopological (bool value); /* getDebugTopological - returns the flag value of the command line option --debug-top. */ extern "C" bool mcOptions_getDebugTopological (void); /* getHPrefix - saves the H file prefix. */ extern "C" DynamicStrings_String mcOptions_getHPrefix (void); /* getIgnoreFQ - returns the ignorefq flag. */ extern "C" bool mcOptions_getIgnoreFQ (void); /* getGccConfigSystem - return the value of the gccConfigSystem flag. */ extern "C" bool mcOptions_getGccConfigSystem (void); /* getScaffoldDynamic - return true if the --scaffold-dynamic option was present. */ extern "C" bool mcOptions_getScaffoldDynamic (void); /* getScaffoldMain - return true if the --scaffold-main option was present. */ extern "C" bool mcOptions_getScaffoldMain (void); /* writeGPLheader - writes out the GPL or the LGPL as a comment. */ extern "C" void mcOptions_writeGPLheader (FIO_File f); /* setSuppressNoReturn - set suppressNoReturn to value. */ extern "C" void mcOptions_setSuppressNoReturn (bool value); /* getSuppressNoReturn - return the suppressNoReturn value. */ extern "C" bool mcOptions_getSuppressNoReturn (void); /* useBool - should mc use the bool type instead of int. */ extern "C" bool mcOptions_useBool (void); /* getCRealType - returns the string representing the REAL type used by C. By default this is "double". */ extern "C" DynamicStrings_String mcOptions_getCRealType (void); /* getCLongRealType - returns the string representing the REAL type used by C. By default this is "long double". */ extern "C" DynamicStrings_String mcOptions_getCLongRealType (void); /* getCShortRealType - returns the string representing the REAL type used by C. By default this is "float". */ extern "C" DynamicStrings_String mcOptions_getCShortRealType (void); /* getYear - return the year. */ static unsigned int getYear (void); /* displayVersion - displays the version of the compiler. */ static void displayVersion (bool mustExit); /* displayHelp - display the mc help summary. */ static void displayHelp (void); /* commentBegin - issue a start of comment for the appropriate language. */ static void commentBegin (FIO_File f); /* commentEnd - issue an end of comment for the appropriate language. */ static void commentEnd (FIO_File f); /* comment - write a comment to file, f, and also a newline. */ static void comment (FIO_File f, const char *a_, unsigned int _a_high); /* commentS - write a comment to file, f, and also a newline. */ static void commentS (FIO_File f, DynamicStrings_String s); /* gplBody - */ static void gplBody (FIO_File f); /* glplBody - */ static void glplBody (FIO_File f); /* issueGPL - writes out the summary, GPL/LGPL and/or contributed as a single comment. */ static void issueGPL (FIO_File f); /* setOutputFile - sets the output filename to output. */ static void setOutputFile (DynamicStrings_String output); /* setQuiet - sets the quiet flag to, value. */ static void setQuiet (bool value); /* setVerbose - sets the verbose flag to, value. */ static void setVerbose (bool value); /* setExtendedOpaque - set extendedOpaque to value. */ static void setExtendedOpaque (bool value); /* setSearchPath - set the search path for the module sources. */ static void setSearchPath (DynamicStrings_String arg); /* setInternalDebugging - turn on/off internal debugging. */ static void setInternalDebugging (bool value); /* setHPrefix - saves the H file prefix. */ static void setHPrefix (DynamicStrings_String s); /* setIgnoreFQ - sets the ignorefq flag. */ static void setIgnoreFQ (bool value); /* toCType - returns a new string which has all occurences of '-' replaced by ' '. */ static DynamicStrings_String toCType (DynamicStrings_String namedType); /* setCReal - assigns CReal to namedType after it has been transformed by toCType. */ static void setCReal (DynamicStrings_String namedType); /* setCShortReal - assigns CShortReal to namedType after it has been transformed by toCType. */ static void setCShortReal (DynamicStrings_String namedType); /* setCLongReal - assigns CLongReal to namedType after it has been transformed by toCType. */ static void setCLongReal (DynamicStrings_String namedType); /* optionIs - returns TRUE if the first len (right) characters match left. */ static bool optionIs (const char *left_, unsigned int _left_high, DynamicStrings_String right); /* setLang - set the appropriate output language. */ static void setLang (DynamicStrings_String arg); /* handleOption - */ static void handleOption (DynamicStrings_String arg); /* getYear - return the year. */ static unsigned int getYear (void) { libc_time_t epoch; libc_ptrToTM localTime; epoch = libc_time (NULL); localTime = static_cast (libc_localtime (&epoch)); return localTime->tm_year+1900; /* static analysis guarentees a RETURN statement will be used before here. */ __builtin_unreachable (); } /* displayVersion - displays the version of the compiler. */ static void displayVersion (bool mustExit) { unsigned int year; year = getYear (); /* These first three calls to printf hide the first line of text away from the year change script. */ mcPrintf_printf0 ((const char *) "Copyright ", 10); mcPrintf_printf0 ((const char *) "(C)", 3); /* A unicode char here would be good. */ mcPrintf_printf1 ((const char *) " %d Free Software Foundation, Inc.\\n", 36, (const unsigned char *) &year, (sizeof (year)-1)); /* A unicode char here would be good. */ mcPrintf_printf0 ((const char *) "License GPLv3: GNU GPL version 3 or later \\n", 78); mcPrintf_printf0 ((const char *) "This is free software: you are free to change and redistribute it.\\n", 68); mcPrintf_printf0 ((const char *) "There is NO WARRANTY, to the extent permitted by law.\\n", 55); if (mustExit) { libc_exit (0); } } /* displayHelp - display the mc help summary. */ static void displayHelp (void) { mcPrintf_printf0 ((const char *) "usage: mc [--cpp] [-g] [--quiet] [--extended-opaque] [-q] [-v]", 62); mcPrintf_printf0 ((const char *) " [--verbose] [--version] [--help] [-h] [-Ipath] [--olang=c]", 59); mcPrintf_printf0 ((const char *) " [--olang=c++] [--olang=m2] [--debug-top]", 41); mcPrintf_printf0 ((const char *) " [--gpl-header] [--glpl-header] [--summary=\"foo\"]", 49); mcPrintf_printf0 ((const char *) " [--contributed=\"foo\"] [--project=\"foo\"]", 40); mcPrintf_printf0 ((const char *) " [--h-file-prefix=foo] [--automatic] [-o=foo] filename\\n", 56); mcPrintf_printf0 ((const char *) " --cpp preprocess through the C preprocessor\\n", 61); mcPrintf_printf0 ((const char *) " -g emit debugging directives in the output language", 70); mcPrintf_printf0 ((const char *) " so that the debugger will refer to the source\\n", 69); mcPrintf_printf0 ((const char *) " -q --quiet no output unless an error occurs\\n", 56); mcPrintf_printf0 ((const char *) " -v --verbose display preprocessor if invoked\\n", 55); mcPrintf_printf0 ((const char *) " --version display version and exit\\n", 48); mcPrintf_printf0 ((const char *) " -h --help display this help message\\n", 49); mcPrintf_printf0 ((const char *) " -Ipath set the module search path\\n", 50); mcPrintf_printf0 ((const char *) " --olang=c generate ansi C output\\n", 46); mcPrintf_printf0 ((const char *) " --olang=c++ generate ansi C++ output\\n", 48); mcPrintf_printf0 ((const char *) " --olang=m2 generate PIM4 output\\n", 44); mcPrintf_printf0 ((const char *) " --extended-opaque parse definition and implementation modules to\\n", 70); mcPrintf_printf0 ((const char *) " generate full type debugging of opaque types\\n", 68); mcPrintf_printf0 ((const char *) " --debug-top debug topological data structure resolving (internal)\\n", 77); mcPrintf_printf0 ((const char *) " --h-file-prefix=foo set the h file prefix to foo\\n", 52); mcPrintf_printf0 ((const char *) " -o=foo set the output file to foo\\n", 50); mcPrintf_printf0 ((const char *) " --ignore-fq do not generate fully qualified idents\\n", 62); mcPrintf_printf0 ((const char *) " --gcc-config-system do not use standard host include files, use gcc config and system instead\\n", 97); mcPrintf_printf0 ((const char *) " --gpl-header generate a GPL3 header comment at the top of the file\\n", 77); mcPrintf_printf0 ((const char *) " --glpl-header generate a GLPL3 header comment at the top of the file\\n", 78); mcPrintf_printf0 ((const char *) " --summary=\"foo\" generate a one line summary comment at the top of the file\\n", 82); mcPrintf_printf0 ((const char *) " --contributed=\"foo\" generate a one line contribution comment near the top of the file\\n", 89); mcPrintf_printf0 ((const char *) " --project=\"foo\" include the project name within the GPL3 or GLPL3 header\\n", 80); mcPrintf_printf0 ((const char *) " --automatic generate a comment at the start of the file warning not to edit as it was automatically generated\\n", 121); mcPrintf_printf0 ((const char *) " --scaffold-dynamic generate dynamic module initialization code for C++\\n", 75); mcPrintf_printf0 ((const char *) " --scaffold-main generate main function which calls upon the dynamic initialization support in M2RTS\\n", 107); mcPrintf_printf0 ((const char *) " --suppress-noreturn suppress the emission of any attribute noreturn\\n", 71); mcPrintf_printf0 ((const char *) " filename the source file must be the last option\\n", 63); libc_exit (0); } /* commentBegin - issue a start of comment for the appropriate language. */ static void commentBegin (FIO_File f) { if (langC || langCPP) { FIO_WriteString (f, (const char *) "/* ", 3); } else if (langM2) { /* avoid dangling else. */ FIO_WriteString (f, (const char *) "(* ", 3); } } /* commentEnd - issue an end of comment for the appropriate language. */ static void commentEnd (FIO_File f) { if (langC || langCPP) { FIO_WriteString (f, (const char *) " */", 3); FIO_WriteLine (f); } else if (langM2) { /* avoid dangling else. */ FIO_WriteString (f, (const char *) " *)", 3); FIO_WriteLine (f); } } /* comment - write a comment to file, f, and also a newline. */ static void comment (FIO_File f, const char *a_, unsigned int _a_high) { char a[_a_high+1]; /* make a local copy of each unbounded array. */ memcpy (a, a_, _a_high+1); FIO_WriteString (f, (const char *) a, _a_high); FIO_WriteLine (f); } /* commentS - write a comment to file, f, and also a newline. */ static void commentS (FIO_File f, DynamicStrings_String s) { s = SFIO_WriteS (f, s); FIO_WriteLine (f); } /* gplBody - */ static void gplBody (FIO_File f) { unsigned int year; year = getYear (); mcPrintf_printf1 ((const char *) "Copyright (C) %d Free Software Foundation, Inc.\\n", 49, (const unsigned char *) &year, (sizeof (year)-1)); if (contributed) { FIO_WriteString (f, (const char *) "Contributed by ", 15); contributedContents = SFIO_WriteS (f, contributedContents); FIO_WriteString (f, (const char *) ".", 1); FIO_WriteLine (f); } FIO_WriteLine (f); FIO_WriteString (f, (const char *) "This file is part of ", 21); projectContents = SFIO_WriteS (f, projectContents); FIO_WriteString (f, (const char *) ".", 1); FIO_WriteLine (f); FIO_WriteLine (f); projectContents = SFIO_WriteS (f, projectContents); comment (f, (const char *) " is software; you can redistribute it and/or modify", 51); comment (f, (const char *) "it under the terms of the GNU General Public License as published by", 68); comment (f, (const char *) "the Free Software Foundation; either version 3, or (at your option)", 67); comment (f, (const char *) "any later version.", 18); FIO_WriteLine (f); projectContents = SFIO_WriteS (f, projectContents); comment (f, (const char *) " is distributed in the hope that it will be useful, but", 55); comment (f, (const char *) "WITHOUT ANY WARRANTY; without even the implied warranty of", 58); comment (f, (const char *) "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU", 65); comment (f, (const char *) "General Public License for more details.", 40); FIO_WriteLine (f); comment (f, (const char *) "You should have received a copy of the GNU General Public License", 65); FIO_WriteString (f, (const char *) "along with ", 11); projectContents = SFIO_WriteS (f, projectContents); comment (f, (const char *) "; see the file COPYING. If not,", 32); FIO_WriteString (f, (const char *) "see . ", 37); } /* glplBody - */ static void glplBody (FIO_File f) { unsigned int year; year = getYear (); mcPrintf_printf1 ((const char *) "Copyright (C) %d Free Software Foundation, Inc.\\n", 49, (const unsigned char *) &year, (sizeof (year)-1)); if (contributed) { FIO_WriteString (f, (const char *) "Contributed by ", 15); contributedContents = SFIO_WriteS (f, contributedContents); FIO_WriteString (f, (const char *) ".", 1); FIO_WriteLine (f); } FIO_WriteLine (f); FIO_WriteString (f, (const char *) "This file is part of ", 21); projectContents = SFIO_WriteS (f, projectContents); FIO_WriteString (f, (const char *) ".", 1); FIO_WriteLine (f); FIO_WriteLine (f); projectContents = SFIO_WriteS (f, projectContents); comment (f, (const char *) " is free software; you can redistribute it and/or modify", 56); comment (f, (const char *) "it under the terms of the GNU General Public License as published by", 68); comment (f, (const char *) "the Free Software Foundation; either version 3, or (at your option)", 67); comment (f, (const char *) "any later version.", 18); FIO_WriteLine (f); projectContents = SFIO_WriteS (f, projectContents); comment (f, (const char *) " is software; you can redistribute it and/or modify", 51); comment (f, (const char *) "it under the terms of the GNU Lesser General Public License", 59); comment (f, (const char *) "as published by the Free Software Foundation; either version 3,", 63); comment (f, (const char *) "or (at your option) any later version.", 38); FIO_WriteLine (f); projectContents = SFIO_WriteS (f, projectContents); comment (f, (const char *) " is distributed in the hope that it will be useful, but", 55); comment (f, (const char *) "WITHOUT ANY WARRANTY; without even the implied warranty of", 58); comment (f, (const char *) "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU", 65); comment (f, (const char *) "General Public License for more details.", 40); FIO_WriteLine (f); comment (f, (const char *) "You should have received a copy of the GNU General Public License", 65); FIO_WriteString (f, (const char *) "along with ", 11); projectContents = SFIO_WriteS (f, projectContents); comment (f, (const char *) "; see the file COPYING3. If not see", 36); comment (f, (const char *) ".", 31); FIO_WriteLine (f); comment (f, (const char *) "You should have received a copy of the GNU Lesser General Public License", 72); FIO_WriteString (f, (const char *) "along with ", 11); projectContents = SFIO_WriteS (f, projectContents); comment (f, (const char *) "; see the file COPYING. If not,", 32); FIO_WriteString (f, (const char *) "see . ", 37); } /* issueGPL - writes out the summary, GPL/LGPL and/or contributed as a single comment. */ static void issueGPL (FIO_File f) { if (((summary || contributed) || gplHeader) || glplHeader) { commentBegin (f); if (summary) { commentS (f, summaryContents); FIO_WriteLine (f); } if (gplHeader) { gplBody (f); } if (glplHeader) { glplBody (f); } commentEnd (f); FIO_WriteLine (f); } } /* setOutputFile - sets the output filename to output. */ static void setOutputFile (DynamicStrings_String output) { outputFile = output; } /* setQuiet - sets the quiet flag to, value. */ static void setQuiet (bool value) { quiet = value; } /* setVerbose - sets the verbose flag to, value. */ static void setVerbose (bool value) { verbose = value; } /* setExtendedOpaque - set extendedOpaque to value. */ static void setExtendedOpaque (bool value) { extendedOpaque = value; } /* setSearchPath - set the search path for the module sources. */ static void setSearchPath (DynamicStrings_String arg) { mcSearch_prependSearchPath (arg); } /* setInternalDebugging - turn on/off internal debugging. */ static void setInternalDebugging (bool value) { internalDebugging = value; } /* setHPrefix - saves the H file prefix. */ static void setHPrefix (DynamicStrings_String s) { hPrefix = s; } /* setIgnoreFQ - sets the ignorefq flag. */ static void setIgnoreFQ (bool value) { ignoreFQ = value; } /* toCType - returns a new string which has all occurences of '-' replaced by ' '. */ static DynamicStrings_String toCType (DynamicStrings_String namedType) { return DynamicStrings_ReplaceChar (DynamicStrings_Dup (namedType), '-', ' '); /* static analysis guarentees a RETURN statement will be used before here. */ __builtin_unreachable (); } /* setCReal - assigns CReal to namedType after it has been transformed by toCType. */ static void setCReal (DynamicStrings_String namedType) { CReal = toCType (namedType); } /* setCShortReal - assigns CShortReal to namedType after it has been transformed by toCType. */ static void setCShortReal (DynamicStrings_String namedType) { CShortReal = toCType (namedType); } /* setCLongReal - assigns CLongReal to namedType after it has been transformed by toCType. */ static void setCLongReal (DynamicStrings_String namedType) { CLongReal = toCType (namedType); } /* optionIs - returns TRUE if the first len (right) characters match left. */ static bool optionIs (const char *left_, unsigned int _left_high, DynamicStrings_String right) { DynamicStrings_String s; char left[_left_high+1]; /* make a local copy of each unbounded array. */ memcpy (left, left_, _left_high+1); if ((DynamicStrings_Length (right)) == (StrLib_StrLen ((const char *) left, _left_high))) { return DynamicStrings_EqualArray (right, (const char *) left, _left_high); } else if ((DynamicStrings_Length (right)) > (StrLib_StrLen ((const char *) left, _left_high))) { /* avoid dangling else. */ s = DynamicStrings_Mark (DynamicStrings_Slice (right, 0, static_cast (StrLib_StrLen ((const char *) left, _left_high)))); return DynamicStrings_EqualArray (s, (const char *) left, _left_high); } else { /* avoid dangling else. */ return false; } /* static analysis guarentees a RETURN statement will be used before here. */ __builtin_unreachable (); } /* setLang - set the appropriate output language. */ static void setLang (DynamicStrings_String arg) { /* must check the longest distinctive string first. */ if (optionIs ((const char *) "c++", 3, arg)) { decl_setLangCP (); langCPP = true; } else if (optionIs ((const char *) "c", 1, arg)) { /* avoid dangling else. */ decl_setLangC (); langC = true; } else if (optionIs ((const char *) "m2", 2, arg)) { /* avoid dangling else. */ decl_setLangM2 (); langM2 = true; } else { /* avoid dangling else. */ displayHelp (); } } /* handleOption - */ static void handleOption (DynamicStrings_String arg) { if ((optionIs ((const char *) "--quiet", 7, arg)) || (optionIs ((const char *) "-q", 2, arg))) { setQuiet (true); } else if ((optionIs ((const char *) "--verbose", 9, arg)) || (optionIs ((const char *) "-v", 2, arg))) { /* avoid dangling else. */ setVerbose (true); } else if (optionIs ((const char *) "--version", 9, arg)) { /* avoid dangling else. */ displayVersion (true); } else if (optionIs ((const char *) "--olang=", 8, arg)) { /* avoid dangling else. */ setLang (DynamicStrings_Slice (arg, 8, 0)); } else if (optionIs ((const char *) "-I", 2, arg)) { /* avoid dangling else. */ setSearchPath (DynamicStrings_Slice (arg, 2, 0)); } else if ((optionIs ((const char *) "--help", 6, arg)) || (optionIs ((const char *) "-h", 2, arg))) { /* avoid dangling else. */ displayHelp (); } else if (optionIs ((const char *) "--cpp", 5, arg)) { /* avoid dangling else. */ cppProgram = DynamicStrings_InitString ((const char *) "cpp", 3); } else if (optionIs ((const char *) "-o=", 3, arg)) { /* avoid dangling else. */ setOutputFile (DynamicStrings_Slice (arg, 3, 0)); } else if (optionIs ((const char *) "--extended-opaque", 17, arg)) { /* avoid dangling else. */ setExtendedOpaque (true); } else if (optionIs ((const char *) "--debug-top", 11, arg)) { /* avoid dangling else. */ mcOptions_setDebugTopological (true); } else if (optionIs ((const char *) "--h-file-prefix=", 16, arg)) { /* avoid dangling else. */ setHPrefix (DynamicStrings_Slice (arg, 16, 0)); } else if (optionIs ((const char *) "--ignore-fq", 11, arg)) { /* avoid dangling else. */ setIgnoreFQ (true); } else if (optionIs ((const char *) "--gpl-header", 12, arg)) { /* avoid dangling else. */ gplHeader = true; } else if (optionIs ((const char *) "--glpl-header", 13, arg)) { /* avoid dangling else. */ glplHeader = true; } else if (optionIs ((const char *) "--summary=\"", 11, arg)) { /* avoid dangling else. */ summary = true; summaryContents = DynamicStrings_Slice (arg, 11, -1); } else if (optionIs ((const char *) "--contributed=\"", 15, arg)) { /* avoid dangling else. */ contributed = true; contributedContents = DynamicStrings_Slice (arg, 13, -1); } else if (optionIs ((const char *) "--project=\"", 11, arg)) { /* avoid dangling else. */ projectContents = DynamicStrings_Slice (arg, 10, -1); } else if (optionIs ((const char *) "--gcc-config-system", 19, arg)) { /* avoid dangling else. */ gccConfigSystem = true; } else if (optionIs ((const char *) "--scaffold-main", 15, arg)) { /* avoid dangling else. */ scaffoldMain = true; } else if (optionIs ((const char *) "--scaffold-dynamic", 18, arg)) { /* avoid dangling else. */ scaffoldDynamic = true; } else if (optionIs ((const char *) "--suppress-noreturn", 19, arg)) { /* avoid dangling else. */ suppressNoReturn = true; } else if (optionIs ((const char *) "--real=", 7, arg)) { /* avoid dangling else. */ setCReal (DynamicStrings_Slice (arg, 7, 0)); } else if (optionIs ((const char *) "--longreal=", 11, arg)) { /* avoid dangling else. */ setCLongReal (DynamicStrings_Slice (arg, 11, 0)); } else if (optionIs ((const char *) "--shortreal=", 12, arg)) { /* avoid dangling else. */ setCShortReal (DynamicStrings_Slice (arg, 12, 0)); } } /* handleOptions - iterates over all options setting appropriate values and returns the single source file if found at the end of the arguments. */ extern "C" DynamicStrings_String mcOptions_handleOptions (void) { unsigned int i; DynamicStrings_String arg; i = 1; while (SArgs_GetArg (&arg, i)) { if ((DynamicStrings_Length (arg)) > 0) { /* avoid gcc warning by using compound statement even if not strictly necessary. */ if ((DynamicStrings_char (arg, 0)) == '-') { handleOption (arg); } else { if (! summary) { summaryContents = DynamicStrings_ConCatChar (DynamicStrings_ConCat (DynamicStrings_InitString ((const char *) "automatically created by mc from ", 33), arg), '.'); summary = false; } return arg; } } i += 1; } return static_cast (NULL); /* static analysis guarentees a RETURN statement will be used before here. */ __builtin_unreachable (); } /* getQuiet - return the value of quiet. */ extern "C" bool mcOptions_getQuiet (void) { return quiet; /* static analysis guarentees a RETURN statement will be used before here. */ __builtin_unreachable (); } /* getVerbose - return the value of verbose. */ extern "C" bool mcOptions_getVerbose (void) { return verbose; /* static analysis guarentees a RETURN statement will be used before here. */ __builtin_unreachable (); } /* getInternalDebugging - return the value of internalDebugging. */ extern "C" bool mcOptions_getInternalDebugging (void) { return internalDebugging; /* static analysis guarentees a RETURN statement will be used before here. */ __builtin_unreachable (); } /* getCppCommandLine - returns the Cpp command line and all arguments. */ extern "C" DynamicStrings_String mcOptions_getCppCommandLine (void) { DynamicStrings_String s; if (DynamicStrings_EqualArray (cppProgram, (const char *) "", 0)) { return static_cast (NULL); } else { s = DynamicStrings_Dup (cppProgram); s = DynamicStrings_ConCat (DynamicStrings_ConCatChar (s, ' '), cppArgs); if (mcOptions_getQuiet ()) { s = DynamicStrings_ConCat (DynamicStrings_ConCatChar (s, ' '), DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "-quiet", 6))); } return s; } /* static analysis guarentees a RETURN statement will be used before here. */ __builtin_unreachable (); } /* getOutputFile - sets the output filename to output. */ extern "C" DynamicStrings_String mcOptions_getOutputFile (void) { return outputFile; /* static analysis guarentees a RETURN statement will be used before here. */ __builtin_unreachable (); } /* getExtendedOpaque - return the extendedOpaque value. */ extern "C" bool mcOptions_getExtendedOpaque (void) { return extendedOpaque; /* static analysis guarentees a RETURN statement will be used before here. */ __builtin_unreachable (); } /* setDebugTopological - sets the flag debugTopological to value. */ extern "C" void mcOptions_setDebugTopological (bool value) { debugTopological = value; } /* getDebugTopological - returns the flag value of the command line option --debug-top. */ extern "C" bool mcOptions_getDebugTopological (void) { return debugTopological; /* static analysis guarentees a RETURN statement will be used before here. */ __builtin_unreachable (); } /* getHPrefix - saves the H file prefix. */ extern "C" DynamicStrings_String mcOptions_getHPrefix (void) { return hPrefix; /* static analysis guarentees a RETURN statement will be used before here. */ __builtin_unreachable (); } /* getIgnoreFQ - returns the ignorefq flag. */ extern "C" bool mcOptions_getIgnoreFQ (void) { return ignoreFQ; /* static analysis guarentees a RETURN statement will be used before here. */ __builtin_unreachable (); } /* getGccConfigSystem - return the value of the gccConfigSystem flag. */ extern "C" bool mcOptions_getGccConfigSystem (void) { return gccConfigSystem; /* static analysis guarentees a RETURN statement will be used before here. */ __builtin_unreachable (); } /* getScaffoldDynamic - return true if the --scaffold-dynamic option was present. */ extern "C" bool mcOptions_getScaffoldDynamic (void) { return scaffoldDynamic; /* static analysis guarentees a RETURN statement will be used before here. */ __builtin_unreachable (); } /* getScaffoldMain - return true if the --scaffold-main option was present. */ extern "C" bool mcOptions_getScaffoldMain (void) { return scaffoldMain; /* static analysis guarentees a RETURN statement will be used before here. */ __builtin_unreachable (); } /* writeGPLheader - writes out the GPL or the LGPL as a comment. */ extern "C" void mcOptions_writeGPLheader (FIO_File f) { issueGPL (f); } /* setSuppressNoReturn - set suppressNoReturn to value. */ extern "C" void mcOptions_setSuppressNoReturn (bool value) { suppressNoReturn = value; } /* getSuppressNoReturn - return the suppressNoReturn value. */ extern "C" bool mcOptions_getSuppressNoReturn (void) { return suppressNoReturn; /* static analysis guarentees a RETURN statement will be used before here. */ __builtin_unreachable (); } /* useBool - should mc use the bool type instead of int. */ extern "C" bool mcOptions_useBool (void) { return useBoolType; /* static analysis guarentees a RETURN statement will be used before here. */ __builtin_unreachable (); } /* getCRealType - returns the string representing the REAL type used by C. By default this is "double". */ extern "C" DynamicStrings_String mcOptions_getCRealType (void) { return CReal; /* static analysis guarentees a RETURN statement will be used before here. */ __builtin_unreachable (); } /* getCLongRealType - returns the string representing the REAL type used by C. By default this is "long double". */ extern "C" DynamicStrings_String mcOptions_getCLongRealType (void) { return CLongReal; /* static analysis guarentees a RETURN statement will be used before here. */ __builtin_unreachable (); } /* getCShortRealType - returns the string representing the REAL type used by C. By default this is "float". */ extern "C" DynamicStrings_String mcOptions_getCShortRealType (void) { return CShortReal; /* static analysis guarentees a RETURN statement will be used before here. */ __builtin_unreachable (); } extern "C" void _M2_mcOptions_init (__attribute__((unused)) int argc,__attribute__((unused)) char *argv[],__attribute__((unused)) char *envp[]) { langC = true; langCPP = false; langM2 = false; gplHeader = false; glplHeader = false; summary = false; contributed = false; caseRuntime = false; arrayRuntime = false; returnRuntime = false; internalDebugging = false; quiet = false; verbose = false; extendedOpaque = false; debugTopological = false; ignoreFQ = false; gccConfigSystem = false; scaffoldMain = false; scaffoldDynamic = false; suppressNoReturn = false; useBoolType = true; hPrefix = DynamicStrings_InitString ((const char *) "", 0); cppArgs = DynamicStrings_InitString ((const char *) "", 0); cppProgram = DynamicStrings_InitString ((const char *) "", 0); outputFile = DynamicStrings_InitString ((const char *) "-", 1); summaryContents = DynamicStrings_InitString ((const char *) "", 0); contributedContents = DynamicStrings_InitString ((const char *) "", 0); projectContents = DynamicStrings_InitString ((const char *) "GNU Modula-2", 12); CReal = DynamicStrings_InitString ((const char *) "double", 6); CLongReal = DynamicStrings_InitString ((const char *) "long double", 11); CShortReal = DynamicStrings_InitString ((const char *) "float", 5); } extern "C" void _M2_mcOptions_fini (__attribute__((unused)) int argc,__attribute__((unused)) char *argv[],__attribute__((unused)) char *envp[]) { }