LCOV - code coverage report
Current view: top level - /mnt/build/buildbot/bld/build-lcov/gcc/m2/gm2-compiler-boot - M2MetaError.c (source / functions) Coverage Total Hit
Test: gcc.info Lines: 56.9 % 1655 941
Test Date: 2026-02-28 14:20:25 Functions: 64.3 % 140 90
Legend: Lines:     hit not hit

            Line data    Source code
       1              : /* do not edit automatically generated by mc from M2MetaError.  */
       2              : /* M2MetaError.mod provides a set of high level error routines.
       3              : 
       4              : Copyright (C) 2008-2026 Free Software Foundation, Inc.
       5              : Contributed by Gaius Mulley <gaius.mulley@southwales.ac.uk>.
       6              : 
       7              : This file is part of GNU Modula-2.
       8              : 
       9              : GNU Modula-2 is free software; you can redistribute it and/or modify
      10              : it under the terms of the GNU General Public License as published by
      11              : the Free Software Foundation; either version 3, or (at your option)
      12              : any later version.
      13              : 
      14              : GNU Modula-2 is distributed in the hope that it will be useful, but
      15              : WITHOUT ANY WARRANTY; without even the implied warranty of
      16              : MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
      17              : General Public License for more details.
      18              : 
      19              : You should have received a copy of the GNU General Public License
      20              : along with GNU Modula-2; see the file COPYING3.  If not see
      21              : <http://www.gnu.org/licenses/>.  */
      22              : 
      23              : #include "config.h"
      24              : #include "system.h"
      25              : #include "gcc-consolidation.h"
      26              : 
      27              : #include <stdbool.h>
      28              : #   if !defined (PROC_D)
      29              : #      define PROC_D
      30              :        typedef void (*PROC_t) (void);
      31              :        typedef struct { PROC_t proc; } PROC;
      32              : #   endif
      33              : 
      34              : #   if !defined (TRUE)
      35              : #      define TRUE (1==1)
      36              : #   endif
      37              : 
      38              : #   if !defined (FALSE)
      39              : #      define FALSE (1==0)
      40              : #   endif
      41              : 
      42              : #   include "GStorage.h"
      43              : #   include "Gmcrts.h"
      44              : #include <safe-ctype.h>
      45              : #if defined(__cplusplus)
      46              : #   undef NULL
      47              : #   define NULL 0
      48              : #endif
      49              : #define _M2MetaError_C
      50              : 
      51              : #include "GM2MetaError.h"
      52              : #   include "GM2Base.h"
      53              : #   include "GNameKey.h"
      54              : #   include "GStrLib.h"
      55              : #   include "GM2LexBuf.h"
      56              : #   include "GM2Error.h"
      57              : #   include "GFIO.h"
      58              : #   include "GSFIO.h"
      59              : #   include "GStringConvert.h"
      60              : #   include "GM2Printf.h"
      61              : #   include "GM2Options.h"
      62              : #   include "GStrCase.h"
      63              : #   include "Glibc.h"
      64              : #   include "GSYSTEM.h"
      65              : #   include "GM2Debug.h"
      66              : #   include "GStorage.h"
      67              : #   include "GIndexing.h"
      68              : #   include "GDynamicStrings.h"
      69              : #   include "GSymbolTable.h"
      70              : #   include "GM2ColorString.h"
      71              : #   include "GFilterError.h"
      72              : #   include "GM2StackSpell.h"
      73              : #   include "GM2RTS.h"
      74              : 
      75              : #   define MaxStack 10
      76              : #   define Debugging false
      77              : #   define ColorDebug false
      78              : typedef struct M2MetaError_GetTokProcedure_p M2MetaError_GetTokProcedure;
      79              : 
      80              : typedef struct M2MetaError_errorBlock_r M2MetaError_errorBlock;
      81              : 
      82              : typedef struct M2MetaError__T1_a M2MetaError__T1;
      83              : 
      84              : typedef struct M2MetaError__T2_r M2MetaError__T2;
      85              : 
      86              : typedef M2MetaError__T2 *M2MetaError_dictionaryEntry;
      87              : 
      88              : typedef enum {M2MetaError_none, M2MetaError_error, M2MetaError_warning, M2MetaError_note, M2MetaError_chained, M2MetaError_aborta} M2MetaError_errorType;
      89              : 
      90              : typedef enum {M2MetaError_unsetColor, M2MetaError_noColor, M2MetaError_quoteColor, M2MetaError_filenameColor, M2MetaError_errorColor, M2MetaError_warningColor, M2MetaError_noteColor, M2MetaError_keywordColor, M2MetaError_locusColor, M2MetaError_insertColor, M2MetaError_deleteColor, M2MetaError_typeColor, M2MetaError_range1Color, M2MetaError_range2Color} M2MetaError_colorType;
      91              : 
      92              : typedef unsigned int (*M2MetaError_GetTokProcedure_t) (unsigned int);
      93              : struct M2MetaError_GetTokProcedure_p { M2MetaError_GetTokProcedure_t proc; };
      94              : 
      95              : struct M2MetaError__T1_a { M2MetaError_colorType array[MaxStack+1]; };
      96              : struct M2MetaError__T2_r {
      97              :                            DynamicStrings_String key;
      98              :                            DynamicStrings_String value;
      99              :                            M2MetaError_dictionaryEntry next;
     100              :                          };
     101              : 
     102              : struct M2MetaError_errorBlock_r {
     103              :                                   bool useError;
     104              :                                   M2Error_Error e;
     105              :                                   unsigned int symcause;
     106              :                                   unsigned int token;
     107              :                                   M2MetaError_errorType type;
     108              :                                   DynamicStrings_String out;
     109              :                                   DynamicStrings_String in;
     110              :                                   unsigned int highplus1;
     111              :                                   int len;
     112              :                                   int ini;
     113              :                                   bool vowel;
     114              :                                   bool filterDef;
     115              :                                   bool importHint;
     116              :                                   bool exportHint;
     117              :                                   bool withStackHint;
     118              :                                   bool glyph;
     119              :                                   bool chain;
     120              :                                   bool root;
     121              :                                   bool quotes;
     122              :                                   bool positive;
     123              :                                   M2MetaError_colorType currentCol;
     124              :                                   M2MetaError_colorType beginCol;
     125              :                                   M2MetaError_colorType endCol;
     126              :                                   M2MetaError__T1 colorStack;
     127              :                                   unsigned int stackPtr;
     128              :                                 };
     129              : 
     130              : static M2Error_Error lastRoot;
     131              : static M2MetaError_colorType lastColor;
     132              : static bool seenAbort;
     133              : static Indexing_Index dictionary;
     134              : static Indexing_Index outputStack;
     135              : static M2MetaError_dictionaryEntry freeEntry;
     136              : static FilterError_Filter FilterUnknown;
     137              : extern "C" void M2MetaError_MetaError0 (const char *m_, unsigned int _m_high);
     138              : extern "C" void M2MetaError_MetaError1 (const char *m_, unsigned int _m_high, unsigned int s);
     139              : extern "C" void M2MetaError_MetaError2 (const char *m_, unsigned int _m_high, unsigned int s1, unsigned int s2);
     140              : extern "C" void M2MetaError_MetaError3 (const char *m_, unsigned int _m_high, unsigned int s1, unsigned int s2, unsigned int s3);
     141              : extern "C" void M2MetaError_MetaError4 (const char *m_, unsigned int _m_high, unsigned int s1, unsigned int s2, unsigned int s3, unsigned int s4);
     142              : 
     143              : /*
     144              :    wrapErrors -
     145              : */
     146              : 
     147              : extern "C" void M2MetaError_MetaErrors1 (const char *m1_, unsigned int _m1_high, const char *m2_, unsigned int _m2_high, unsigned int s);
     148              : 
     149              : /*
     150              :    wrapErrors -
     151              : */
     152              : 
     153              : extern "C" void M2MetaError_MetaErrors2 (const char *m1_, unsigned int _m1_high, const char *m2_, unsigned int _m2_high, unsigned int s1, unsigned int s2);
     154              : 
     155              : /*
     156              :    wrapErrors -
     157              : */
     158              : 
     159              : extern "C" void M2MetaError_MetaErrors3 (const char *m1_, unsigned int _m1_high, const char *m2_, unsigned int _m2_high, unsigned int s1, unsigned int s2, unsigned int s3);
     160              : 
     161              : /*
     162              :    wrapErrors -
     163              : */
     164              : 
     165              : extern "C" void M2MetaError_MetaErrors4 (const char *m1_, unsigned int _m1_high, const char *m2_, unsigned int _m2_high, unsigned int s1, unsigned int s2, unsigned int s3, unsigned int s4);
     166              : extern "C" void M2MetaError_MetaErrorT0 (unsigned int tok, const char *m_, unsigned int _m_high);
     167              : extern "C" void M2MetaError_MetaErrorT1 (unsigned int tok, const char *m_, unsigned int _m_high, unsigned int s);
     168              : extern "C" void M2MetaError_MetaErrorT2 (unsigned int tok, const char *m_, unsigned int _m_high, unsigned int s1, unsigned int s2);
     169              : extern "C" void M2MetaError_MetaErrorT3 (unsigned int tok, const char *m_, unsigned int _m_high, unsigned int s1, unsigned int s2, unsigned int s3);
     170              : extern "C" void M2MetaError_MetaErrorT4 (unsigned int tok, const char *m_, unsigned int _m_high, unsigned int s1, unsigned int s2, unsigned int s3, unsigned int s4);
     171              : 
     172              : /*
     173              :    wrapErrors -
     174              : */
     175              : 
     176              : extern "C" void M2MetaError_MetaErrorsT1 (unsigned int tok, const char *m1_, unsigned int _m1_high, const char *m2_, unsigned int _m2_high, unsigned int s);
     177              : 
     178              : /*
     179              :    wrapErrors -
     180              : */
     181              : 
     182              : extern "C" void M2MetaError_MetaErrorsT2 (unsigned int tok, const char *m1_, unsigned int _m1_high, const char *m2_, unsigned int _m2_high, unsigned int s1, unsigned int s2);
     183              : 
     184              : /*
     185              :    wrapErrors -
     186              : */
     187              : 
     188              : extern "C" void M2MetaError_MetaErrorsT3 (unsigned int tok, const char *m1_, unsigned int _m1_high, const char *m2_, unsigned int _m2_high, unsigned int s1, unsigned int s2, unsigned int s3);
     189              : 
     190              : /*
     191              :    wrapErrors -
     192              : */
     193              : 
     194              : extern "C" void M2MetaError_MetaErrorsT4 (unsigned int tok, const char *m1_, unsigned int _m1_high, const char *m2_, unsigned int _m2_high, unsigned int s1, unsigned int s2, unsigned int s3, unsigned int s4);
     195              : 
     196              : /*
     197              :    wrapErrors -
     198              : */
     199              : 
     200              : extern "C" void M2MetaError_MetaErrorString0 (DynamicStrings_String m);
     201              : 
     202              : /*
     203              :    wrapErrors -
     204              : */
     205              : 
     206              : extern "C" void M2MetaError_MetaErrorString1 (DynamicStrings_String m, unsigned int s);
     207              : 
     208              : /*
     209              :    wrapErrors -
     210              : */
     211              : 
     212              : extern "C" void M2MetaError_MetaErrorString2 (DynamicStrings_String m, unsigned int s1, unsigned int s2);
     213              : 
     214              : /*
     215              :    wrapErrors -
     216              : */
     217              : 
     218              : extern "C" void M2MetaError_MetaErrorString3 (DynamicStrings_String m, unsigned int s1, unsigned int s2, unsigned int s3);
     219              : 
     220              : /*
     221              :    wrapErrors -
     222              : */
     223              : 
     224              : extern "C" void M2MetaError_MetaErrorString4 (DynamicStrings_String m, unsigned int s1, unsigned int s2, unsigned int s3, unsigned int s4);
     225              : extern "C" void M2MetaError_MetaErrorStringT0 (unsigned int tok, DynamicStrings_String m);
     226              : extern "C" void M2MetaError_MetaErrorStringT1 (unsigned int tok, DynamicStrings_String m, unsigned int s);
     227              : extern "C" void M2MetaError_MetaErrorStringT2 (unsigned int tok, DynamicStrings_String m, unsigned int s1, unsigned int s2);
     228              : extern "C" void M2MetaError_MetaErrorStringT3 (unsigned int tok, DynamicStrings_String m, unsigned int s1, unsigned int s2, unsigned int s3);
     229              : extern "C" void M2MetaError_MetaErrorStringT4 (unsigned int tok, DynamicStrings_String m, unsigned int s1, unsigned int s2, unsigned int s3, unsigned int s4);
     230              : 
     231              : /*
     232              :    MetaErrorN1 -
     233              : */
     234              : 
     235              : extern "C" void M2MetaError_MetaErrorN1 (const char *m_, unsigned int _m_high, NameKey_Name n);
     236              : 
     237              : /*
     238              :    MetaErrorN2 -
     239              : */
     240              : 
     241              : extern "C" void M2MetaError_MetaErrorN2 (const char *m_, unsigned int _m_high, NameKey_Name n1, NameKey_Name n2);
     242              : 
     243              : /*
     244              :    MetaErrorNT0 - generate an error message at tok using format.
     245              : */
     246              : 
     247              : extern "C" void M2MetaError_MetaErrorNT0 (unsigned int tok, const char *format_, unsigned int _format_high);
     248              : 
     249              : /*
     250              :    MetaErrorNT1 - generate an error message at tok using format and name.
     251              :                   The format should contain %a for name substitution.
     252              : */
     253              : 
     254              : extern "C" void M2MetaError_MetaErrorNT1 (unsigned int tok, const char *format_, unsigned int _format_high, NameKey_Name name);
     255              : extern "C" void M2MetaError_MetaErrorNT2 (unsigned int tok, const char *format_, unsigned int _format_high, NameKey_Name name1, NameKey_Name name2);
     256              : 
     257              : /*
     258              :    wrapString - return a string which has been formatted with the specifier codes.
     259              :                 Color is disabled.  The result string is returned.
     260              : */
     261              : 
     262              : extern "C" DynamicStrings_String M2MetaError_MetaString0 (DynamicStrings_String m);
     263              : 
     264              : /*
     265              :    wrapString - return a string which has been formatted with the specifier codes.
     266              :                 Color is disabled.  The result string is returned.
     267              : */
     268              : 
     269              : extern "C" DynamicStrings_String M2MetaError_MetaString1 (DynamicStrings_String m, unsigned int s);
     270              : 
     271              : /*
     272              :    wrapString - return a string which has been formatted with the specifier codes.
     273              :                 Color is disabled.  The result string is returned.
     274              : */
     275              : 
     276              : extern "C" DynamicStrings_String M2MetaError_MetaString2 (DynamicStrings_String m, unsigned int s1, unsigned int s2);
     277              : 
     278              : /*
     279              :    wrapString - return a string which has been formatted with the specifier codes.
     280              :                 Color is disabled.  The result string is returned.
     281              : */
     282              : 
     283              : extern "C" DynamicStrings_String M2MetaError_MetaString3 (DynamicStrings_String m, unsigned int s1, unsigned int s2, unsigned int s3);
     284              : 
     285              : /*
     286              :    wrapString - return a string which has been formatted with the specifier codes.
     287              :                 Color is disabled.  The result string is returned.
     288              : */
     289              : 
     290              : extern "C" DynamicStrings_String M2MetaError_MetaString4 (DynamicStrings_String m, unsigned int s1, unsigned int s2, unsigned int s3, unsigned int s4);
     291              : 
     292              : /*
     293              :    MetaErrorDecl - if sym is a variable or parameter then generate a
     294              :                    declaration error or warning message.  If error is
     295              :                    FALSE then a warning is issued.
     296              : */
     297              : 
     298              : extern "C" void M2MetaError_MetaErrorDecl (unsigned int sym, bool error);
     299              : 
     300              : /*
     301              :    pushOutput -
     302              : */
     303              : 
     304              : static void pushOutput (M2MetaError_errorBlock *eb);
     305              : 
     306              : /*
     307              :    readWord - reads and returns a word delimited by '}' it uses '%' as
     308              :               the escape character.
     309              : */
     310              : 
     311              : static DynamicStrings_String readWord (M2MetaError_errorBlock *eb);
     312              : 
     313              : /*
     314              :    addEntry -
     315              : */
     316              : 
     317              : static void addEntry (DynamicStrings_String key, DynamicStrings_String value);
     318              : 
     319              : /*
     320              :    popOutput -
     321              : */
     322              : 
     323              : static void popOutput (M2MetaError_errorBlock *eb);
     324              : 
     325              : /*
     326              :    newEntry -
     327              : */
     328              : 
     329              : static M2MetaError_dictionaryEntry newEntry (void);
     330              : 
     331              : /*
     332              :    killEntry - dispose e and delete any strings.
     333              : */
     334              : 
     335              : static void killEntry (M2MetaError_dictionaryEntry e);
     336              : 
     337              : /*
     338              :    resetDictionary - remove all entries in the dictionary.
     339              : */
     340              : 
     341              : static void resetDictionary (void);
     342              : 
     343              : /*
     344              :    lookupString - lookup and return a duplicate of the string value for key s.
     345              :                   NIL is returned if the key s is unknown.
     346              : */
     347              : 
     348              : static DynamicStrings_String lookupString (DynamicStrings_String s);
     349              : 
     350              : /*
     351              :    lookupDefine - looks up the word in the input string (ending with '}').
     352              :                   It uses this word as a key into the dictionary and returns
     353              :                   the entry.
     354              : */
     355              : 
     356              : static DynamicStrings_String lookupDefine (M2MetaError_errorBlock *eb);
     357              : 
     358              : /*
     359              :    processDefine - place contents of dictionary entry name onto the output string.
     360              : */
     361              : 
     362              : static void processDefine (M2MetaError_errorBlock *eb);
     363              : 
     364              : /*
     365              :    lookupColor - looks up the color enum from the string.
     366              : */
     367              : 
     368              : static M2MetaError_colorType lookupColor (DynamicStrings_String s);
     369              : 
     370              : /*
     371              :    readColor -
     372              : */
     373              : 
     374              : static M2MetaError_colorType readColor (M2MetaError_errorBlock *eb);
     375              : 
     376              : /*
     377              :    keyword - copy characters until the '}' in the input string and convert them to
     378              :              the keyword color/font.
     379              : */
     380              : 
     381              : static void keyword (M2MetaError_errorBlock *eb);
     382              : 
     383              : /*
     384              :    filename - copy characters until the '}' in the input string and convert them to
     385              :               the filename color/font.
     386              : */
     387              : 
     388              : static void filename (M2MetaError_errorBlock *eb);
     389              : 
     390              : /*
     391              :    pushColor -
     392              : */
     393              : 
     394              : static void pushColor (M2MetaError_errorBlock *eb);
     395              : 
     396              : /*
     397              :    popColor -
     398              : */
     399              : 
     400              : static void popColor (M2MetaError_errorBlock *eb);
     401              : 
     402              : /*
     403              :    initErrorBlock - initialise an error block with the, input, string.
     404              : */
     405              : 
     406              : static void initErrorBlock (M2MetaError_errorBlock *eb, DynamicStrings_String input, const unsigned int *sym_, unsigned int _sym_high);
     407              : 
     408              : /*
     409              :    push - performs a push from the oldblock to the newblock.
     410              :           It copies all fields except the output string.
     411              : */
     412              : 
     413              : static void push (M2MetaError_errorBlock *newblock, M2MetaError_errorBlock oldblock);
     414              : 
     415              : /*
     416              :    pop - copies contents of fromblock into toblock.  It only copies the error
     417              :          handle if the toblock.e is NIL.
     418              : */
     419              : 
     420              : static void pop (M2MetaError_errorBlock *toblock, M2MetaError_errorBlock *fromblock);
     421              : 
     422              : /*
     423              :    OutOpenQuote -
     424              : */
     425              : 
     426              : static void OutOpenQuote (M2MetaError_errorBlock *eb);
     427              : 
     428              : /*
     429              :    OutCloseQuote -
     430              : */
     431              : 
     432              : static void OutCloseQuote (M2MetaError_errorBlock *eb);
     433              : 
     434              : /*
     435              :    findColorType - return the color of the string.  This is determined by the first
     436              :                    occurrance of an error, warning or note marker.  An error message
     437              :                    is assumed to either be: a keyword category, error category, note
     438              :                    category, warning category or to be chained from a previous error.
     439              : */
     440              : 
     441              : static M2MetaError_colorType findColorType (DynamicStrings_String s);
     442              : 
     443              : /*
     444              :    killErrorBlock - deallocates the dynamic strings associated with the error block.
     445              : */
     446              : 
     447              : static void killErrorBlock (M2MetaError_errorBlock *eb);
     448              : 
     449              : /*
     450              :    InternalFormat - produces an informative internal error.
     451              : */
     452              : 
     453              : static void InternalFormat (M2MetaError_errorBlock eb, const char *m_, unsigned int _m_high, unsigned int line);
     454              : 
     455              : /*
     456              :    x - checks to see that a=b.
     457              : */
     458              : 
     459              : static DynamicStrings_String x (DynamicStrings_String a, DynamicStrings_String b);
     460              : 
     461              : /*
     462              :    IsWhite - returns TRUE if, ch, is a space.
     463              : */
     464              : 
     465              : static bool IsWhite (char ch);
     466              : 
     467              : /*
     468              :    skip - skips over this level input until the next '}'.
     469              : */
     470              : 
     471              : static void skip (M2MetaError_errorBlock *sb);
     472              : 
     473              : /*
     474              :    ifNonNulThen := [ ':' ebnf ] =:
     475              : */
     476              : 
     477              : static void ifNonNulThen (M2MetaError_errorBlock *eb, const unsigned int *sym_, unsigned int _sym_high);
     478              : 
     479              : /*
     480              :    doNumber -
     481              : */
     482              : 
     483              : static void doNumber (M2MetaError_errorBlock *eb, const unsigned int *sym_, unsigned int _sym_high, unsigned int bol);
     484              : 
     485              : /*
     486              :    doCount -
     487              : */
     488              : 
     489              : static void doCount (M2MetaError_errorBlock *eb, const unsigned int *sym_, unsigned int _sym_high, unsigned int bol);
     490              : 
     491              : /*
     492              :    doCount -
     493              : */
     494              : 
     495              : static void doAscii (M2MetaError_errorBlock *eb, const unsigned int *sym_, unsigned int _sym_high, unsigned int bol);
     496              : 
     497              : /*
     498              :    unquotedKeyword -
     499              : */
     500              : 
     501              : static void unquotedKeyword (M2MetaError_errorBlock *eb);
     502              : 
     503              : /*
     504              :    OutArray -
     505              : */
     506              : 
     507              : static void OutArray (M2MetaError_errorBlock *eb, const char *a_, unsigned int _a_high);
     508              : 
     509              : /*
     510              :    OutGlyphS - outputs a string of glyphs.
     511              : */
     512              : 
     513              : static void OutGlyphS (M2MetaError_errorBlock *eb, DynamicStrings_String s);
     514              : 
     515              : /*
     516              :    empty - returns TRUE if the output string is empty.
     517              :            It ignores color changes.
     518              : */
     519              : 
     520              : static bool empty (M2MetaError_errorBlock *eb);
     521              : 
     522              : /*
     523              :    checkVowel - checks to see if the from block word starts with
     524              :                 a vowel and if so adds an n to the to block output.
     525              : */
     526              : 
     527              : static void checkVowel (M2MetaError_errorBlock *to, M2MetaError_errorBlock from);
     528              : 
     529              : /*
     530              :    isVowel - returns TRUE if ch is a, e, i, o or u.
     531              : */
     532              : 
     533              : static bool isVowel (char ch);
     534              : 
     535              : /*
     536              :    clear - remove the output string.
     537              : */
     538              : 
     539              : static void clear (M2MetaError_errorBlock *eb);
     540              : 
     541              : /*
     542              :    clear - remove the output string.
     543              : */
     544              : 
     545              : static void doName (M2MetaError_errorBlock *eb, const unsigned int *sym_, unsigned int _sym_high, unsigned int bol);
     546              : 
     547              : /*
     548              :    clear - remove the output string.
     549              : */
     550              : 
     551              : static void doQualified (M2MetaError_errorBlock *eb, const unsigned int *sym_, unsigned int _sym_high, unsigned int bol);
     552              : 
     553              : /*
     554              :    doType - returns a string containing the type name of
     555              :             sym.
     556              : */
     557              : 
     558              : static void doType (M2MetaError_errorBlock *eb, const unsigned int *sym_, unsigned int _sym_high, unsigned int bol);
     559              : 
     560              : /*
     561              :    doSkipType - will skip all pseudonym types.  It also
     562              :                 returns the type symbol found and name.
     563              : */
     564              : 
     565              : static void doSkipType (M2MetaError_errorBlock eb, const unsigned int *sym_, unsigned int _sym_high, unsigned int bol);
     566              : 
     567              : /*
     568              :    doGetType - attempts to get the type of sym[bol].
     569              : */
     570              : 
     571              : static void doGetType (M2MetaError_errorBlock *eb, unsigned int *sym, unsigned int _sym_high, unsigned int bol);
     572              : 
     573              : /*
     574              :    doGetSkipType - will skip all pseudonym types.  It also
     575              :                    returns the type symbol found and name.
     576              : */
     577              : 
     578              : static void doGetSkipType (M2MetaError_errorBlock *eb, unsigned int *sym, unsigned int _sym_high, unsigned int bol);
     579              : 
     580              : /*
     581              :    doChain -
     582              : */
     583              : 
     584              : static void doChain (M2MetaError_errorBlock *eb, unsigned int tok);
     585              : 
     586              : /*
     587              :    doError - creates and returns an error note.
     588              : */
     589              : 
     590              : static void doError (M2MetaError_errorBlock *eb, unsigned int tok, unsigned int sym);
     591              : 
     592              : /*
     593              :    defaultError - adds the default error location to, tok,
     594              :                   if one has not already been assigned.
     595              : */
     596              : 
     597              : static void defaultError (M2MetaError_errorBlock *eb, unsigned int tok);
     598              : 
     599              : /*
     600              :    updateTokSym - assign symcause to sym if not NulSym.
     601              :                   Update token.
     602              : */
     603              : 
     604              : static void updateTokSym (M2MetaError_errorBlock *eb, unsigned int tok, unsigned int sym);
     605              : 
     606              : /*
     607              :    chooseError - choose the error kind dependant upon type.
     608              :                  Either an error, warning or note will be generated.
     609              : */
     610              : 
     611              : static void chooseError (M2MetaError_errorBlock *eb, unsigned int tok, unsigned int sym);
     612              : 
     613              : /*
     614              :    doErrorScopeModule -
     615              : */
     616              : 
     617              : static void doErrorScopeModule (M2MetaError_errorBlock *eb, unsigned int sym);
     618              : 
     619              : /*
     620              :    doErrorScopeForward -
     621              : */
     622              : 
     623              : static void doErrorScopeForward (M2MetaError_errorBlock *eb, unsigned int sym);
     624              : 
     625              : /*
     626              :    doErrorScopeMod - potentially create an error referring to the definition
     627              :                      module, fall back to the implementation or program module if
     628              :                      there is no declaration in the definition module.
     629              : */
     630              : 
     631              : static void doErrorScopeMod (M2MetaError_errorBlock *eb, unsigned int sym);
     632              : 
     633              : /*
     634              :    doErrorScopeFor - potentially create an error referring to the
     635              :                      forward declaration, definition module, fall back
     636              :                      to the implementation or program module if
     637              :                      there is no declaration in the definition module.
     638              : */
     639              : 
     640              : static void doErrorScopeFor (M2MetaError_errorBlock *eb, unsigned int sym);
     641              : static void declaredMod (M2MetaError_errorBlock *eb, const unsigned int *sym_, unsigned int _sym_high, unsigned int bol);
     642              : 
     643              : /*
     644              :    doErrorScopeDefinition - use the declaration in the definitio module if one is available.
     645              : */
     646              : 
     647              : static void doErrorScopeDefinition (M2MetaError_errorBlock *eb, unsigned int sym);
     648              : 
     649              : /*
     650              :    doErrorScopeDef - potentially create an error referring to the definition
     651              :                      module, fall back to the implementation or program module if
     652              :                      there is no declaration in the definition module.
     653              : */
     654              : 
     655              : static void doErrorScopeDef (M2MetaError_errorBlock *eb, unsigned int sym);
     656              : static void declaredDef (M2MetaError_errorBlock *eb, const unsigned int *sym_, unsigned int _sym_high, unsigned int bol);
     657              : static void declaredFor (M2MetaError_errorBlock *eb, const unsigned int *sym_, unsigned int _sym_high, unsigned int bol);
     658              : 
     659              : /*
     660              :    doErrorScopeProc - determine the location for the error or warning from
     661              :                       the default declaration.  For example parameters can be
     662              :                       declared in definition, forward or in modules (proper procedure).
     663              :                       Use GetVarParamTok to obtain a variable or parameter location.
     664              : */
     665              : 
     666              : static void doErrorScopeProc (M2MetaError_errorBlock *eb, unsigned int sym, M2MetaError_GetTokProcedure GetVarParamTok);
     667              : static void declaredVar (M2MetaError_errorBlock *eb, const unsigned int *sym_, unsigned int _sym_high, unsigned int bol);
     668              : static void declaredType (M2MetaError_errorBlock *eb, const unsigned int *sym_, unsigned int _sym_high, unsigned int bol);
     669              : static void declaredFull (M2MetaError_errorBlock *eb, const unsigned int *sym_, unsigned int _sym_high, unsigned int bol);
     670              : 
     671              : /*
     672              :    used - creates an error note where sym[bol] was first used.
     673              : */
     674              : 
     675              : static void used (M2MetaError_errorBlock *eb, const unsigned int *sym_, unsigned int _sym_high, unsigned int bol);
     676              : 
     677              : /*
     678              :    symDesc -
     679              : */
     680              : 
     681              : static DynamicStrings_String symDesc (unsigned int sym);
     682              : 
     683              : /*
     684              :    doDesc -
     685              : */
     686              : 
     687              : static void doDesc (M2MetaError_errorBlock *eb, const unsigned int *sym_, unsigned int _sym_high, unsigned int bol);
     688              : 
     689              : /*
     690              :    op := {'!'|'a'|'c'|'d'|'k'|'n'|'p'|'q'|'s'|'t'|'u'|'v'|
     691              :           'A'|'B'|'C'|'D'|'E'|'F'|'G'|'H'|'K'|'M'|'N'|
     692              :           'O'|'P'|'Q'|'R'|'S'|'T'|'U'|'V'|'W'|'X'|'Y'|'Z'|
     693              :           '&' } then =:
     694              : */
     695              : 
     696              : static void op (M2MetaError_errorBlock *eb, const unsigned int *sym_, unsigned int _sym_high, unsigned int bol);
     697              : 
     698              : /*
     699              :    continuation := {':'|'1'|'2'|'3'|'4'|'i'|'s'|'x'|'w'|'D'} =:
     700              : */
     701              : 
     702              : static void continuation (M2MetaError_errorBlock *eb, unsigned int *sym, unsigned int _sym_high, unsigned int bol);
     703              : 
     704              : /*
     705              :    percenttoken := '%' (
     706              :                          '1'        % doOperand(1) %
     707              :                              op
     708              :                        | '2'        % doOperand(2) %
     709              :                              op
     710              :                        | '3'        % doOperand(3) %
     711              :                              op
     712              :                        | '4'        % doOperand(4) %
     713              :                              op
     714              :                        )
     715              :                        } =:
     716              : */
     717              : 
     718              : static void percenttoken (M2MetaError_errorBlock *eb, const unsigned int *sym_, unsigned int _sym_high);
     719              : 
     720              : /*
     721              :    IsPunct - returns TRUE if ch is a punctuation character.
     722              : */
     723              : 
     724              : static bool IsPunct (char ch);
     725              : 
     726              : /*
     727              :    JoinSentances - join s onto eb.  It removes trailing
     728              :                    spaces from eb if s starts with a punctuation
     729              :                    character.
     730              : */
     731              : 
     732              : static void JoinSentances (M2MetaError_errorBlock *eb, DynamicStrings_String s);
     733              : 
     734              : /*
     735              :    SpellHint -
     736              : */
     737              : 
     738              : static void SpellHint (M2MetaError_errorBlock *eb, const unsigned int *sym_, unsigned int _sym_high, unsigned int bol);
     739              : 
     740              : /*
     741              :    AddImportsHint -
     742              : */
     743              : 
     744              : static void AddImportsHint (M2MetaError_errorBlock *eb);
     745              : 
     746              : /*
     747              :    AddExportsHint -
     748              : */
     749              : 
     750              : static void AddExportsHint (M2MetaError_errorBlock *eb);
     751              : 
     752              : /*
     753              :    AddWithStackHint -
     754              : */
     755              : 
     756              : static void AddWithStackHint (M2MetaError_errorBlock *eb);
     757              : 
     758              : /*
     759              :    FilterOnDefinitionModule - turn on filtering and include all the definition modules.
     760              : */
     761              : 
     762              : static void FilterOnDefinitionModule (M2MetaError_errorBlock *eb);
     763              : 
     764              : /*
     765              :    changeColor - changes to color, c.
     766              : */
     767              : 
     768              : static void changeColor (M2MetaError_errorBlock *eb, M2MetaError_colorType c);
     769              : 
     770              : /*
     771              :    shutdownColor - shutdown existing color if it exists.
     772              : */
     773              : 
     774              : static void shutdownColor (M2MetaError_errorBlock *eb);
     775              : 
     776              : /*
     777              :    flushColor - flushes any outstanding color change.
     778              : */
     779              : 
     780              : static void flushColor (M2MetaError_errorBlock *eb);
     781              : 
     782              : /*
     783              :    emitColorGCC -
     784              : */
     785              : 
     786              : static void emitColorGCC (M2MetaError_errorBlock *eb, M2MetaError_colorType c);
     787              : 
     788              : /*
     789              :    emitColorTag -
     790              : */
     791              : 
     792              : static void emitColorTag (M2MetaError_errorBlock *eb, M2MetaError_colorType c);
     793              : 
     794              : /*
     795              :    emitColor - adds the appropriate color string to the output string.
     796              : */
     797              : 
     798              : static void emitColor (M2MetaError_errorBlock *eb, M2MetaError_colorType c);
     799              : 
     800              : /*
     801              :    openQuote -
     802              : */
     803              : 
     804              : static DynamicStrings_String openQuote (DynamicStrings_String s);
     805              : 
     806              : /*
     807              :    closeQuote -
     808              : */
     809              : 
     810              : static DynamicStrings_String closeQuote (DynamicStrings_String s);
     811              : 
     812              : /*
     813              :    colorEnd -
     814              : */
     815              : 
     816              : static DynamicStrings_String colorEnd (DynamicStrings_String s);
     817              : 
     818              : /*
     819              :    copyChar - copies a character from in string to out string.
     820              : */
     821              : 
     822              : static void copyChar (M2MetaError_errorBlock *eb);
     823              : 
     824              : /*
     825              :    copyKeywordChar - copies a character from in string to out string
     826              :                      it will convert the character to lower case if the
     827              :                      -fm2-lower-case option was specified.
     828              : */
     829              : 
     830              : static void copyKeywordChar (M2MetaError_errorBlock *eb);
     831              : 
     832              : /*
     833              :    percent := '%' anych           % copy anych %
     834              :             =:
     835              : */
     836              : 
     837              : static void percent (M2MetaError_errorBlock *eb, const unsigned int *sym_, unsigned int _sym_high);
     838              : 
     839              : /*
     840              :    lbra := '{' [ '!' ] percenttoken '}' =:
     841              : */
     842              : 
     843              : static void lbra (M2MetaError_errorBlock *eb, const unsigned int *sym_, unsigned int _sym_high);
     844              : 
     845              : /*
     846              :    lbra := '{' [ '!' ] percenttoken '}' =:
     847              : */
     848              : 
     849              : static void stop (void);
     850              : 
     851              : /*
     852              :    lbra := '{' [ '!' ] percenttoken '}' =:
     853              : */
     854              : 
     855              : static void checkMe (void);
     856              : 
     857              : /*
     858              :    dumpErrorType -
     859              : */
     860              : 
     861              : static void dumpErrorType (M2MetaError_errorType e);
     862              : 
     863              : /*
     864              :    dumpColorType -
     865              : */
     866              : 
     867              : static void dumpColorType (M2MetaError_colorType c);
     868              : 
     869              : /*
     870              :    dump -
     871              : 
     872              : */
     873              : 
     874              : static void dump (M2MetaError_errorBlock eb);
     875              : 
     876              : /*
     877              :    ebnf := { percent
     878              :              | lbra
     879              :              | any                    % copy ch %
     880              :            }
     881              :          =:
     882              : */
     883              : 
     884              : static void ebnf (M2MetaError_errorBlock *eb, const unsigned int *sym_, unsigned int _sym_high);
     885              : 
     886              : /*
     887              :    isUniqueError - return TRUE if the symbol associated with the
     888              :                    error block is unknown and we have seen the same
     889              :                    token before.
     890              : */
     891              : 
     892              : static bool isUniqueError (M2MetaError_errorBlock *eb);
     893              : 
     894              : /*
     895              :    wrapErrors -
     896              : */
     897              : 
     898              : static void wrapErrors (unsigned int tok, const char *m1_, unsigned int _m1_high, const char *m2_, unsigned int _m2_high, const unsigned int *sym_, unsigned int _sym_high);
     899              : 
     900              : /*
     901              :    checkAbort - checks to see if the boolean flag seenAbort has been set,
     902              :                 if so it flushes all existing errors and terminates.
     903              : */
     904              : 
     905              : static void checkAbort (void);
     906              : 
     907              : /*
     908              :    translate -
     909              : */
     910              : 
     911              : static DynamicStrings_String translate (DynamicStrings_String m, DynamicStrings_String s, int *i, NameKey_Name name);
     912              : 
     913              : /*
     914              :    wrapString - return a string which has been formatted with the specifier codes.
     915              :                 Color is disabled.  The result string is returned.
     916              : */
     917              : 
     918              : static DynamicStrings_String wrapString (DynamicStrings_String m, const unsigned int *sym_, unsigned int _sym_high);
     919              : 
     920              : 
     921              : /*
     922              :    pushOutput -
     923              : */
     924              : 
     925            0 : static void pushOutput (M2MetaError_errorBlock *eb)
     926              : {
     927            0 :   Indexing_PutIndice (outputStack, (Indexing_HighIndice (outputStack))+1, reinterpret_cast <void *> ((*eb).out));
     928            0 :   (*eb).out = DynamicStrings_InitString ((const char *) "", 0);
     929            0 :   (*eb).glyph = false;
     930            0 : }
     931              : 
     932              : 
     933              : /*
     934              :    readWord - reads and returns a word delimited by '}' it uses '%' as
     935              :               the escape character.
     936              : */
     937              : 
     938            0 : static DynamicStrings_String readWord (M2MetaError_errorBlock *eb)
     939              : {
     940            0 :   DynamicStrings_String word;
     941              : 
     942            0 :   word = DynamicStrings_InitString ((const char *) "", 0);
     943            0 :   while (((*eb).ini < (*eb).len) && ((DynamicStrings_char ((*eb).in, (*eb).ini)) != '}'))
     944              :     {
     945            0 :       if ((DynamicStrings_char ((*eb).in, (*eb).ini)) == '%')
     946              :         {
     947            0 :           (*eb).ini += 1;
     948              :         }
     949            0 :       word = DynamicStrings_ConCatChar (word, DynamicStrings_char ((*eb).in, (*eb).ini));
     950            0 :       (*eb).ini += 1;
     951              :     }
     952            0 :   return word;
     953              :   /* static analysis guarentees a RETURN statement will be used before here.  */
     954              :   __builtin_unreachable ();
     955              : }
     956              : 
     957              : 
     958              : /*
     959              :    addEntry -
     960              : */
     961              : 
     962            0 : static void addEntry (DynamicStrings_String key, DynamicStrings_String value)
     963              : {
     964            0 :   M2MetaError_dictionaryEntry e;
     965            0 :   DynamicStrings_String s;
     966            0 :   unsigned int i;
     967              : 
     968            0 :   s = lookupString (key);
     969            0 :   if (s == NULL)
     970              :     {
     971            0 :       e = newEntry ();
     972            0 :       e->key = key;
     973            0 :       e->value = value;
     974            0 :       Indexing_PutIndice (dictionary, (Indexing_HighIndice (dictionary))+1, reinterpret_cast <void *> (e));
     975              :     }
     976              :   else
     977              :     {
     978              :       i = 1;
     979            0 :       while (i <= (Indexing_HighIndice (dictionary)))
     980              :         {
     981            0 :           e = static_cast<M2MetaError_dictionaryEntry> (Indexing_GetIndice (dictionary, i));
     982            0 :           if (DynamicStrings_Equal (e->key, key))
     983              :             {
     984            0 :               e->value = DynamicStrings_KillString (e->value);
     985            0 :               e->value = value;
     986            0 :               return;
     987              :             }
     988            0 :           i += 1;
     989              :         }
     990              :     }
     991              : }
     992              : 
     993              : 
     994              : /*
     995              :    popOutput -
     996              : */
     997              : 
     998            0 : static void popOutput (M2MetaError_errorBlock *eb)
     999              : {
    1000            0 :   DynamicStrings_String key;
    1001            0 :   DynamicStrings_String previous;
    1002              : 
    1003            0 :   if ((Indexing_HighIndice (outputStack)) >= 1)
    1004              :     {
    1005            0 :       previous = static_cast<DynamicStrings_String> (Indexing_GetIndice (outputStack, Indexing_HighIndice (outputStack)));
    1006            0 :       Indexing_DeleteIndice (outputStack, Indexing_HighIndice (outputStack));
    1007            0 :       key = readWord (eb);
    1008            0 :       addEntry (key, (*eb).out);
    1009            0 :       (*eb).out = previous;
    1010              :     }
    1011            0 : }
    1012              : 
    1013              : 
    1014              : /*
    1015              :    newEntry -
    1016              : */
    1017              : 
    1018            0 : static M2MetaError_dictionaryEntry newEntry (void)
    1019              : {
    1020            0 :   M2MetaError_dictionaryEntry e;
    1021              : 
    1022            0 :   if (freeEntry == NULL)
    1023              :     {
    1024            0 :       Storage_ALLOCATE ((void **) &e, sizeof (M2MetaError__T2));
    1025              :     }
    1026              :   else
    1027              :     {
    1028            0 :       e = freeEntry;
    1029            0 :       freeEntry = freeEntry->next;
    1030              :     }
    1031            0 :   e->key = static_cast<DynamicStrings_String> (NULL);
    1032            0 :   e->value = static_cast<DynamicStrings_String> (NULL);
    1033            0 :   e->next = NULL;
    1034            0 :   return e;
    1035              :   /* static analysis guarentees a RETURN statement will be used before here.  */
    1036              :   __builtin_unreachable ();
    1037              : }
    1038              : 
    1039              : 
    1040              : /*
    1041              :    killEntry - dispose e and delete any strings.
    1042              : */
    1043              : 
    1044            0 : static void killEntry (M2MetaError_dictionaryEntry e)
    1045              : {
    1046            0 :   e->next = freeEntry;
    1047            0 :   freeEntry = e;
    1048            0 :   if (e->key != NULL)
    1049              :     {
    1050            0 :       e->key = DynamicStrings_KillString (e->key);
    1051              :     }
    1052            0 :   if (e->value != NULL)
    1053              :     {
    1054            0 :       e->value = DynamicStrings_KillString (e->value);
    1055              :     }
    1056            0 : }
    1057              : 
    1058              : 
    1059              : /*
    1060              :    resetDictionary - remove all entries in the dictionary.
    1061              : */
    1062              : 
    1063            0 : static void resetDictionary (void)
    1064              : {
    1065            0 :   unsigned int i;
    1066            0 :   M2MetaError_dictionaryEntry e;
    1067              : 
    1068            0 :   i = 1;
    1069            0 :   while (i <= (Indexing_HighIndice (dictionary)))
    1070              :     {
    1071            0 :       e = static_cast<M2MetaError_dictionaryEntry> (Indexing_GetIndice (dictionary, i));
    1072            0 :       killEntry (e);
    1073            0 :       i += 1;
    1074              :     }
    1075            0 :   dictionary = Indexing_KillIndex (dictionary);
    1076            0 :   dictionary = Indexing_InitIndex (1);
    1077            0 : }
    1078              : 
    1079              : 
    1080              : /*
    1081              :    lookupString - lookup and return a duplicate of the string value for key s.
    1082              :                   NIL is returned if the key s is unknown.
    1083              : */
    1084              : 
    1085            0 : static DynamicStrings_String lookupString (DynamicStrings_String s)
    1086              : {
    1087            0 :   unsigned int i;
    1088            0 :   M2MetaError_dictionaryEntry e;
    1089              : 
    1090            0 :   i = 1;
    1091            0 :   while (i <= (Indexing_HighIndice (dictionary)))
    1092              :     {
    1093            0 :       e = static_cast<M2MetaError_dictionaryEntry> (Indexing_GetIndice (dictionary, i));
    1094            0 :       if (DynamicStrings_Equal (e->key, s))
    1095              :         {
    1096            0 :           return DynamicStrings_Dup (e->value);
    1097              :         }
    1098            0 :       i += 1;
    1099              :     }
    1100              :   return static_cast<DynamicStrings_String> (NULL);
    1101              :   /* static analysis guarentees a RETURN statement will be used before here.  */
    1102              :   __builtin_unreachable ();
    1103              : }
    1104              : 
    1105              : 
    1106              : /*
    1107              :    lookupDefine - looks up the word in the input string (ending with '}').
    1108              :                   It uses this word as a key into the dictionary and returns
    1109              :                   the entry.
    1110              : */
    1111              : 
    1112            0 : static DynamicStrings_String lookupDefine (M2MetaError_errorBlock *eb)
    1113              : {
    1114            0 :   DynamicStrings_String s;
    1115              : 
    1116            0 :   s = DynamicStrings_InitString ((const char *) "", 0);
    1117            0 :   while (((*eb).ini < (*eb).len) && ((DynamicStrings_char ((*eb).in, (*eb).ini)) != '}'))
    1118              :     {
    1119            0 :       if ((DynamicStrings_char ((*eb).in, (*eb).ini)) == '%')
    1120              :         {
    1121            0 :           (*eb).ini += 1;
    1122              :         }
    1123            0 :       s = DynamicStrings_ConCatChar (s, DynamicStrings_char ((*eb).in, (*eb).ini));
    1124            0 :       (*eb).ini += 1;
    1125              :     }
    1126            0 :   s = lookupString (s);
    1127            0 :   if (s == NULL)
    1128              :     {
    1129            0 :       s = DynamicStrings_InitString ((const char *) "", 0);
    1130              :     }
    1131            0 :   return s;
    1132              :   /* static analysis guarentees a RETURN statement will be used before here.  */
    1133              :   __builtin_unreachable ();
    1134              : }
    1135              : 
    1136              : 
    1137              : /*
    1138              :    processDefine - place contents of dictionary entry name onto the output string.
    1139              : */
    1140              : 
    1141            0 : static void processDefine (M2MetaError_errorBlock *eb)
    1142              : {
    1143            0 :   (*eb).out = DynamicStrings_ConCat ((*eb).out, lookupDefine (eb));
    1144            0 : }
    1145              : 
    1146              : 
    1147              : /*
    1148              :    lookupColor - looks up the color enum from the string.
    1149              : */
    1150              : 
    1151            0 : static M2MetaError_colorType lookupColor (DynamicStrings_String s)
    1152              : {
    1153            0 :   if (DynamicStrings_EqualArray (s, (const char *) "filename", 8))
    1154              :     {
    1155              :       return M2MetaError_filenameColor;
    1156              :     }
    1157            0 :   else if (DynamicStrings_EqualArray (s, (const char *) "quote", 5))
    1158              :     {
    1159              :       /* avoid dangling else.  */
    1160              :       return M2MetaError_quoteColor;
    1161              :     }
    1162            0 :   else if (DynamicStrings_EqualArray (s, (const char *) "error", 5))
    1163              :     {
    1164              :       /* avoid dangling else.  */
    1165              :       return M2MetaError_errorColor;
    1166              :     }
    1167            0 :   else if (DynamicStrings_EqualArray (s, (const char *) "warning", 7))
    1168              :     {
    1169              :       /* avoid dangling else.  */
    1170              :       return M2MetaError_warningColor;
    1171              :     }
    1172            0 :   else if (DynamicStrings_EqualArray (s, (const char *) "note", 4))
    1173              :     {
    1174              :       /* avoid dangling else.  */
    1175              :       return M2MetaError_warningColor;
    1176              :     }
    1177            0 :   else if (DynamicStrings_EqualArray (s, (const char *) "locus", 5))
    1178              :     {
    1179              :       /* avoid dangling else.  */
    1180              :       return M2MetaError_locusColor;
    1181              :     }
    1182            0 :   else if (DynamicStrings_EqualArray (s, (const char *) "insert", 6))
    1183              :     {
    1184              :       /* avoid dangling else.  */
    1185              :       return M2MetaError_insertColor;
    1186              :     }
    1187            0 :   else if (DynamicStrings_EqualArray (s, (const char *) "delete", 6))
    1188              :     {
    1189              :       /* avoid dangling else.  */
    1190              :       return M2MetaError_deleteColor;
    1191              :     }
    1192            0 :   else if (DynamicStrings_EqualArray (s, (const char *) "type", 4))
    1193              :     {
    1194              :       /* avoid dangling else.  */
    1195              :       return M2MetaError_typeColor;
    1196              :     }
    1197            0 :   else if (DynamicStrings_EqualArray (s, (const char *) "range1", 6))
    1198              :     {
    1199              :       /* avoid dangling else.  */
    1200              :       return M2MetaError_range1Color;
    1201              :     }
    1202            0 :   else if (DynamicStrings_EqualArray (s, (const char *) "range2", 6))
    1203              :     {
    1204              :       /* avoid dangling else.  */
    1205            0 :       return M2MetaError_range2Color;
    1206              :     }
    1207              :   return M2MetaError_noColor;
    1208              :   /* static analysis guarentees a RETURN statement will be used before here.  */
    1209              :   __builtin_unreachable ();
    1210              : }
    1211              : 
    1212              : 
    1213              : /*
    1214              :    readColor -
    1215              : */
    1216              : 
    1217            0 : static M2MetaError_colorType readColor (M2MetaError_errorBlock *eb)
    1218              : {
    1219            0 :   DynamicStrings_String s;
    1220            0 :   M2MetaError_colorType c;
    1221              : 
    1222            0 :   s = DynamicStrings_InitString ((const char *) "", 0);
    1223            0 :   while (((*eb).ini < (*eb).len) && ((DynamicStrings_char ((*eb).in, (*eb).ini)) != '}'))
    1224              :     {
    1225            0 :       if ((DynamicStrings_char ((*eb).in, (*eb).ini)) == '%')
    1226              :         {
    1227            0 :           (*eb).ini += 1;
    1228              :         }
    1229            0 :       s = DynamicStrings_ConCatChar (s, DynamicStrings_char ((*eb).in, (*eb).ini));
    1230            0 :       (*eb).ini += 1;
    1231              :     }
    1232            0 :   c = lookupColor (s);
    1233            0 :   s = DynamicStrings_KillString (s);
    1234            0 :   return c;
    1235              :   /* static analysis guarentees a RETURN statement will be used before here.  */
    1236              :   __builtin_unreachable ();
    1237              : }
    1238              : 
    1239              : 
    1240              : /*
    1241              :    keyword - copy characters until the '}' in the input string and convert them to
    1242              :              the keyword color/font.
    1243              : */
    1244              : 
    1245         1182 : static void keyword (M2MetaError_errorBlock *eb)
    1246              : {
    1247         1182 :   if (TOUPPER (DynamicStrings_char ((*eb).in, (*eb).ini)) == 'K')
    1248              :     {
    1249         1182 :       (*eb).ini += 1;
    1250         1182 :       pushColor (eb);
    1251         1182 :       changeColor (eb, M2MetaError_keywordColor);
    1252         6279 :       while (((*eb).ini < (*eb).len) && ((DynamicStrings_char ((*eb).in, (*eb).ini)) != '}'))
    1253              :         {
    1254         5097 :           if (Debugging)
    1255              :             {
    1256              :               dump ((*eb));
    1257              :             }
    1258         5097 :           if ((DynamicStrings_char ((*eb).in, (*eb).ini)) == '%')
    1259              :             {
    1260           12 :               (*eb).ini += 1;
    1261              :             }
    1262         5097 :           copyKeywordChar (eb);
    1263         5097 :           (*eb).ini += 1;
    1264              :         }
    1265         1182 :       popColor (eb);
    1266              :     }
    1267              :   else
    1268              :     {
    1269            0 :       M2Error_InternalError ((const char *) "expecting index to be on the K for keyword", 42);
    1270              :     }
    1271         1182 : }
    1272              : 
    1273              : 
    1274              : /*
    1275              :    filename - copy characters until the '}' in the input string and convert them to
    1276              :               the filename color/font.
    1277              : */
    1278              : 
    1279            0 : static void filename (M2MetaError_errorBlock *eb)
    1280              : {
    1281            0 :   if (TOUPPER (DynamicStrings_char ((*eb).in, (*eb).ini)) == 'F')
    1282              :     {
    1283            0 :       (*eb).ini += 1;
    1284            0 :       pushColor (eb);
    1285            0 :       changeColor (eb, M2MetaError_filenameColor);
    1286            0 :       while (((*eb).ini < (*eb).len) && ((DynamicStrings_char ((*eb).in, (*eb).ini)) != '}'))
    1287              :         {
    1288            0 :           if (Debugging)
    1289              :             {
    1290              :               dump ((*eb));
    1291              :             }
    1292            0 :           if ((DynamicStrings_char ((*eb).in, (*eb).ini)) == '%')
    1293              :             {
    1294            0 :               (*eb).ini += 1;
    1295              :             }
    1296            0 :           copyChar (eb);
    1297            0 :           (*eb).ini += 1;
    1298              :         }
    1299            0 :       popColor (eb);
    1300              :     }
    1301              :   else
    1302              :     {
    1303            0 :       M2Error_InternalError ((const char *) "expecting index to be on the F for filename", 43);
    1304              :     }
    1305            0 : }
    1306              : 
    1307              : 
    1308              : /*
    1309              :    pushColor -
    1310              : */
    1311              : 
    1312        52716 : static void pushColor (M2MetaError_errorBlock *eb)
    1313              : {
    1314        52716 :   if ((*eb).stackPtr > MaxStack)
    1315              :     {
    1316            0 :       M2RTS_HALT (-1);
    1317              :       __builtin_unreachable ();
    1318              :     }
    1319              :   else
    1320              :     {
    1321        52716 :       (*eb).colorStack.array[(*eb).stackPtr] = (*eb).currentCol;
    1322        52716 :       (*eb).stackPtr += 1;
    1323              :     }
    1324        52716 : }
    1325              : 
    1326              : 
    1327              : /*
    1328              :    popColor -
    1329              : */
    1330              : 
    1331        13688 : static void popColor (M2MetaError_errorBlock *eb)
    1332              : {
    1333        13688 :   if ((*eb).stackPtr > 0)
    1334              :     {
    1335        13688 :       (*eb).stackPtr -= 1;
    1336              :     }
    1337              :   else
    1338              :     {
    1339            0 :       M2RTS_HALT (-1);
    1340              :       __builtin_unreachable ();
    1341              :     }
    1342        13688 :   (*eb).currentCol = (*eb).colorStack.array[(*eb).stackPtr];
    1343        13688 :   if ((*eb).currentCol == M2MetaError_unsetColor)
    1344              :     {
    1345            0 :       (*eb).currentCol = M2MetaError_noColor;
    1346              :     }
    1347        13688 : }
    1348              : 
    1349              : 
    1350              : /*
    1351              :    initErrorBlock - initialise an error block with the, input, string.
    1352              : */
    1353              : 
    1354        16608 : static void initErrorBlock (M2MetaError_errorBlock *eb, DynamicStrings_String input, const unsigned int *sym_, unsigned int _sym_high)
    1355              : {
    1356        16608 :   unsigned int sym[_sym_high+1];
    1357              : 
    1358              :   /* make a local copy of each unbounded array.  */
    1359        16608 :   memcpy (sym, sym_, (_sym_high+1) * sizeof (unsigned int));
    1360              : 
    1361        16608 :   (*eb).useError = true;
    1362        16608 :   (*eb).e = static_cast<M2Error_Error> (NULL);
    1363        16608 :   (*eb).symcause = SymbolTable_NulSym;
    1364        16608 :   (*eb).token = M2LexBuf_UnknownTokenNo;
    1365        16608 :   (*eb).type = M2MetaError_error;  /* Default to the error color.  */
    1366        33216 :   (*eb).out = DynamicStrings_InitString ((const char *) "", 0);  /* Default to the error color.  */
    1367        16608 :   (*eb).in = input;
    1368        16608 :   (*eb).highplus1 = _sym_high+1;
    1369        16608 :   (*eb).len = DynamicStrings_Length (input);
    1370        16608 :   (*eb).ini = 0;
    1371        16608 :   (*eb).glyph = false;  /* Nothing to output yet.  */
    1372        16608 :   (*eb).vowel = false;  /* Check for a vowel when outputing string?  */
    1373        16608 :   (*eb).filterDef = false;  /* Filter on definition module list?  */
    1374        16608 :   (*eb).importHint = false;  /* Filter on definition module list?  */
    1375        16608 :   (*eb).exportHint = false;
    1376        16608 :   (*eb).withStackHint = false;
    1377        16608 :   (*eb).quotes = true;
    1378        16608 :   (*eb).positive = true;
    1379        16608 :   (*eb).root = false;
    1380        16608 :   (*eb).chain = false;
    1381        16608 :   (*eb).currentCol = findColorType (input);
    1382        16608 :   (*eb).beginCol = M2MetaError_unsetColor;
    1383        16608 :   (*eb).endCol = M2MetaError_unsetColor;
    1384        16608 :   (*eb).stackPtr = 0;
    1385        16608 : }
    1386              : 
    1387              : 
    1388              : /*
    1389              :    push - performs a push from the oldblock to the newblock.
    1390              :           It copies all fields except the output string.
    1391              : */
    1392              : 
    1393        42212 : static void push (M2MetaError_errorBlock *newblock, M2MetaError_errorBlock oldblock)
    1394              : {
    1395        42212 :   pushColor (&oldblock);  /* Save the current color.  */
    1396        42212 :   (*newblock) = oldblock;  /* Now copy all the fields.  */
    1397        42212 :   (*newblock).out = static_cast<DynamicStrings_String> (NULL);  /* We must do this before a clear as we have copied the address.  */
    1398        42212 :   clear (newblock);  /* We must do this before a clear as we have copied the address.  */
    1399        42212 :   (*newblock).quotes = true;
    1400        42212 : }
    1401              : 
    1402              : 
    1403              : /*
    1404              :    pop - copies contents of fromblock into toblock.  It only copies the error
    1405              :          handle if the toblock.e is NIL.
    1406              : */
    1407              : 
    1408        42212 : static void pop (M2MetaError_errorBlock *toblock, M2MetaError_errorBlock *fromblock)
    1409              : {
    1410        42212 :   M2MetaError_colorType c;
    1411              : 
    1412        42212 :   checkVowel (toblock, (*fromblock));
    1413        42212 :   if (empty (fromblock))
    1414              :     {
    1415         3184 :       (*toblock).stackPtr = (*fromblock).stackPtr;
    1416         3184 :       (*toblock).colorStack = (*fromblock).colorStack;
    1417         3184 :       popColor (toblock);  /* Lastly restore the color from the push start.  */
    1418              :     }
    1419              :   else
    1420              :     {
    1421        39028 :       if ((*fromblock).quotes)
    1422              :         {
    1423              :           /* The string needs to be quoted.  */
    1424        29706 :           if ((*toblock).currentCol == M2MetaError_unsetColor)
    1425              :             {
    1426              :               /* The caller has not yet assigned a color, so use the callee color at the end.  */
    1427            0 :               OutOpenQuote (toblock);
    1428            0 :               OutGlyphS (toblock, (*fromblock).out);
    1429            0 :               OutCloseQuote (toblock);
    1430            0 :               changeColor (toblock, (*fromblock).currentCol);
    1431              :             }
    1432              :           else
    1433              :             {
    1434        29706 :               shutdownColor (fromblock);
    1435              :               /* The caller has assigned a color, so use it after the new string.  */
    1436        29706 :               c = (*toblock).currentCol;
    1437        29706 :               OutOpenQuote (toblock);
    1438        29706 :               OutGlyphS (toblock, (*fromblock).out);
    1439        29706 :               OutCloseQuote (toblock);
    1440        29706 :               (*toblock).currentCol = c;
    1441              :             }
    1442              :         }
    1443              :       else
    1444              :         {
    1445         9322 :           if ((*toblock).currentCol == M2MetaError_unsetColor)
    1446              :             {
    1447            0 :               JoinSentances (toblock, (*fromblock).out);
    1448            0 :               (*toblock).endCol = (*fromblock).endCol;
    1449            0 :               changeColor (toblock, (*fromblock).endCol);
    1450              :             }
    1451              :           else
    1452              :             {
    1453         9322 :               pushColor (toblock);
    1454         9322 :               JoinSentances (toblock, (*fromblock).out);
    1455         9322 :               (*toblock).endCol = (*fromblock).endCol;
    1456         9322 :               popColor (toblock);
    1457              :             }
    1458              :         }
    1459              :     }
    1460        42212 :   if ((*toblock).e == NULL)
    1461              :     {
    1462        41842 :       (*toblock).e = (*fromblock).e;
    1463              :     }
    1464        42212 :   if ((*toblock).symcause == SymbolTable_NulSym)
    1465              :     {
    1466        20447 :       (*toblock).symcause = (*fromblock).symcause;
    1467              :     }
    1468        42212 :   (*toblock).chain = (*fromblock).chain;
    1469        42212 :   (*toblock).root = (*fromblock).root;
    1470        42212 :   (*toblock).ini = (*fromblock).ini;
    1471        42212 :   (*toblock).type = (*fromblock).type;  /* It might have been changed by the callee.  */
    1472        42212 : }
    1473              : 
    1474              : 
    1475              : /*
    1476              :    OutOpenQuote -
    1477              : */
    1478              : 
    1479        29706 : static void OutOpenQuote (M2MetaError_errorBlock *eb)
    1480              : {
    1481        29706 :   (*eb).currentCol = M2MetaError_noColor;
    1482        29706 :   flushColor (eb);
    1483        59412 :   (*eb).out = DynamicStrings_ConCat ((*eb).out, openQuote (DynamicStrings_InitString ((const char *) "", 0)));
    1484        29706 : }
    1485              : 
    1486              : 
    1487              : /*
    1488              :    OutCloseQuote -
    1489              : */
    1490              : 
    1491        29706 : static void OutCloseQuote (M2MetaError_errorBlock *eb)
    1492              : {
    1493        59412 :   (*eb).out = DynamicStrings_ConCat ((*eb).out, closeQuote (DynamicStrings_InitString ((const char *) "", 0)));
    1494        29706 :   (*eb).currentCol = M2MetaError_noColor;
    1495        29706 :   (*eb).endCol = M2MetaError_noColor;
    1496        29706 : }
    1497              : 
    1498              : 
    1499              : /*
    1500              :    findColorType - return the color of the string.  This is determined by the first
    1501              :                    occurrance of an error, warning or note marker.  An error message
    1502              :                    is assumed to either be: a keyword category, error category, note
    1503              :                    category, warning category or to be chained from a previous error.
    1504              : */
    1505              : 
    1506        16650 : static M2MetaError_colorType findColorType (DynamicStrings_String s)
    1507              : {
    1508        16650 :   unsigned int i;
    1509              : 
    1510        16650 :   i = 0;
    1511       751230 :   while (i < (DynamicStrings_Length (s)))
    1512              :     {
    1513       747826 :       if ((DynamicStrings_char (s, static_cast<int> (i))) == '{')
    1514              :         {
    1515        19779 :           i += 1;
    1516        19779 :           if ((DynamicStrings_char (s, static_cast<int> (i))) == '%')
    1517              :             {
    1518        19778 :               i += 1;
    1519        57474 :               while ((i < (DynamicStrings_Length (s))) && ((DynamicStrings_char (s, static_cast<int> (i))) != '}'))
    1520              :                 {
    1521        50942 :                   if ((DynamicStrings_char (s, static_cast<int> (i))) == '%')
    1522              :                     {
    1523           66 :                       i += 1;
    1524              :                     }
    1525        50942 :                   switch (DynamicStrings_char (s, static_cast<int> (i)))
    1526              :                     {
    1527              :                       case 'K':
    1528              :                         return M2MetaError_errorColor;  /* keyword errors start with the fatal error color.  */
    1529              :                         break;
    1530              : 
    1531              :                       case 'E':
    1532              :                         return M2MetaError_errorColor;  /* keyword errors start with the fatal error color.  */
    1533              :                         break;
    1534              : 
    1535              :                       case 'A':
    1536              :                         return M2MetaError_errorColor;
    1537              :                         break;
    1538              : 
    1539              :                       case 'O':
    1540              :                         return M2MetaError_noteColor;
    1541        11032 :                         break;
    1542              : 
    1543        11032 :                       case 'W':
    1544        11032 :                         return M2MetaError_warningColor;
    1545          186 :                         break;
    1546              : 
    1547          186 :                       case 'C':
    1548          186 :                         return lastColor;
    1549        37696 :                         break;
    1550              : 
    1551              : 
    1552        37696 :                       default:
    1553        37696 :                         break;
    1554              :                     }
    1555        37696 :                   i += 1;
    1556              :                 }
    1557              :             }
    1558              :         }
    1559       734580 :       i += 1;
    1560              :     }
    1561              :   return M2MetaError_errorColor;  /* default to the error color.  */
    1562              :   /* static analysis guarentees a RETURN statement will be used before here.  */
    1563              :   __builtin_unreachable ();
    1564              : }
    1565              : 
    1566              : 
    1567              : /*
    1568              :    killErrorBlock - deallocates the dynamic strings associated with the error block.
    1569              : */
    1570              : 
    1571        16608 : static void killErrorBlock (M2MetaError_errorBlock *eb)
    1572              : {
    1573        16608 :   (*eb).out = DynamicStrings_KillString ((*eb).out);
    1574        16608 :   (*eb).in = DynamicStrings_KillString ((*eb).in);
    1575        16608 : }
    1576              : 
    1577              : 
    1578              : /*
    1579              :    InternalFormat - produces an informative internal error.
    1580              : */
    1581              : 
    1582            0 : static void InternalFormat (M2MetaError_errorBlock eb, const char *m_, unsigned int _m_high, unsigned int line)
    1583              : {
    1584            0 :   char m[_m_high+1];
    1585              : 
    1586              :   /* make a local copy of each unbounded array.  */
    1587            0 :   memcpy (m, m_, _m_high+1);
    1588              : 
    1589            0 :   M2Printf_printf1 ((const char *) "M2MetaError.mod:%d:internalformat error detected\\n", 50, (const unsigned char *) &line, (sizeof (line)-1));
    1590            0 :   dump (eb);
    1591            0 :   M2Error_InternalError ((const char *) m, _m_high);
    1592            0 : }
    1593              : 
    1594              : 
    1595              : /*
    1596              :    x - checks to see that a=b.
    1597              : */
    1598              : 
    1599      1521297 : static DynamicStrings_String x (DynamicStrings_String a, DynamicStrings_String b)
    1600              : {
    1601            0 :   if (a != b)
    1602              :     {
    1603            0 :       M2Error_InternalError ((const char *) "different string returned", 25);
    1604              :     }
    1605            0 :   return a;
    1606              :   /* static analysis guarentees a RETURN statement will be used before here.  */
    1607              :   __builtin_unreachable ();
    1608              : }
    1609              : 
    1610              : 
    1611              : /*
    1612              :    IsWhite - returns TRUE if, ch, is a space.
    1613              : */
    1614              : 
    1615            0 : static bool IsWhite (char ch)
    1616              : {
    1617            0 :   return ch == ' ';
    1618              :   /* static analysis guarentees a RETURN statement will be used before here.  */
    1619              :   __builtin_unreachable ();
    1620              : }
    1621              : 
    1622              : 
    1623              : /*
    1624              :    skip - skips over this level input until the next '}'.
    1625              : */
    1626              : 
    1627         1238 : static void skip (M2MetaError_errorBlock *sb)
    1628              : {
    1629         1238 :   int level;
    1630              : 
    1631         1238 :   level = 0;
    1632        20840 :   while ((*sb).ini < (*sb).len)
    1633              :     {
    1634        20840 :       if ((level == 0) && ((DynamicStrings_char ((*sb).in, (*sb).ini)) == '}'))
    1635              :         {
    1636              :           return;
    1637              :         }
    1638        19602 :       if ((DynamicStrings_char ((*sb).in, (*sb).ini)) == '}')
    1639              :         {
    1640         3036 :           level -= 1;
    1641              :         }
    1642        16566 :       else if ((DynamicStrings_char ((*sb).in, (*sb).ini)) == '{')
    1643              :         {
    1644              :           /* avoid dangling else.  */
    1645         3036 :           level += 1;
    1646              :         }
    1647        19602 :       (*sb).ini += 1;
    1648              :     }
    1649              : }
    1650              : 
    1651              : 
    1652              : /*
    1653              :    ifNonNulThen := [ ':' ebnf ] =:
    1654              : */
    1655              : 
    1656         6844 : static void ifNonNulThen (M2MetaError_errorBlock *eb, const unsigned int *sym_, unsigned int _sym_high)
    1657              : {
    1658         6844 :   unsigned int sym[_sym_high+1];
    1659              : 
    1660              :   /* make a local copy of each unbounded array.  */
    1661         6844 :   memcpy (sym, sym_, (_sym_high+1) * sizeof (unsigned int));
    1662              : 
    1663         6844 :   if ((DynamicStrings_char ((*eb).in, (*eb).ini)) == ':')
    1664              :     {
    1665         6844 :       (*eb).ini += 1;
    1666         6844 :       if ((*eb).positive)
    1667              :         {
    1668              :           /* avoid dangling else.  */
    1669         1112 :           if ((empty (eb)) && ((DynamicStrings_Length ((*eb).out)) != 0))
    1670              :             {
    1671            0 :               M2Printf_printf0 ((const char *) "inconsistency found\\n", 21);
    1672            0 :               dump ((*eb));
    1673              :             }
    1674         6716 :           if (empty (eb))
    1675              :             {
    1676         1112 :               if (Debugging)
    1677              :                 {
    1678              :                   M2Printf_printf0 ((const char *) "empty expression, skip\\n", 24);
    1679              :                 }
    1680         1112 :               clear (eb);
    1681              :               /* skip over this level of input text.  */
    1682         1112 :               skip (eb);
    1683              :             }
    1684              :           else
    1685              :             {
    1686         5604 :               if (Debugging)
    1687              :                 {
    1688              :                   dump ((*eb));
    1689              :                   M2Printf_printf0 ((const char *) "non empty expression, clear and continue\\n", 42);
    1690              :                 }
    1691         5604 :               clear (eb);
    1692         5604 :               if (Debugging)
    1693              :                 {
    1694              :                   dump ((*eb));
    1695              :                   M2Printf_printf0 ((const char *) "cleared, continue\\n", 19);
    1696              :                   dump ((*eb));
    1697              :                 }
    1698              :               /* carry on processing input text.  */
    1699         5604 :               ebnf (eb, (const unsigned int *) sym, _sym_high);
    1700         5604 :               if (Debugging)
    1701              :                 {
    1702              :                   M2Printf_printf0 ((const char *) "evaluated\\n", 11);
    1703              :                   dump ((*eb));
    1704              :                 }
    1705              :             }
    1706              :         }
    1707              :       else
    1708              :         {
    1709          128 :           if (empty (eb))
    1710              :             {
    1711            2 :               clear (eb);
    1712              :               /* carry on processing input text.  */
    1713            2 :               ebnf (eb, (const unsigned int *) sym, _sym_high);
    1714              :             }
    1715              :           else
    1716              :             {
    1717          126 :               clear (eb);
    1718              :               /* skip over this level of input text.  */
    1719          126 :               skip (eb);
    1720              :             }
    1721              :         }
    1722         6844 :       if (((*eb).ini < (*eb).len) && ((DynamicStrings_char ((*eb).in, (*eb).ini)) != '}'))
    1723              :         {
    1724            0 :           InternalFormat ((*eb), (const char *) "expecting to see }", 18, 881);
    1725              :         }
    1726              :     }
    1727         6844 : }
    1728              : 
    1729              : 
    1730              : /*
    1731              :    doNumber -
    1732              : */
    1733              : 
    1734            0 : static void doNumber (M2MetaError_errorBlock *eb, const unsigned int *sym_, unsigned int _sym_high, unsigned int bol)
    1735              : {
    1736            0 :   unsigned int sym[_sym_high+1];
    1737              : 
    1738              :   /* make a local copy of each unbounded array.  */
    1739            0 :   memcpy (sym, sym_, (_sym_high+1) * sizeof (unsigned int));
    1740              : 
    1741            0 :   if (empty (eb))
    1742              :     {
    1743            0 :       (*eb).quotes = false;
    1744            0 :       OutGlyphS (eb, StringConvert_ctos (sym[bol], 0, ' '));
    1745              :     }
    1746            0 : }
    1747              : 
    1748              : 
    1749              : /*
    1750              :    doCount -
    1751              : */
    1752              : 
    1753         2136 : static void doCount (M2MetaError_errorBlock *eb, const unsigned int *sym_, unsigned int _sym_high, unsigned int bol)
    1754              : {
    1755         2136 :   unsigned int sym[_sym_high+1];
    1756              : 
    1757              :   /* make a local copy of each unbounded array.  */
    1758         2136 :   memcpy (sym, sym_, (_sym_high+1) * sizeof (unsigned int));
    1759              : 
    1760         2136 :   if (empty (eb))
    1761              :     {
    1762         2136 :       (*eb).quotes = false;
    1763         2136 :       OutGlyphS (eb, StringConvert_ctos (sym[bol], 0, ' '));
    1764         2136 :       if (((sym[bol] % 100) >= 11) && ((sym[bol] % 100) <= 13))
    1765              :         {
    1766            0 :           OutGlyphS (eb, DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "th", 2)));
    1767              :         }
    1768              : 
    1769              :       else {
    1770         2136 :         switch (sym[bol] % 10)
    1771              :           {
    1772         1728 :             case 1:
    1773         1728 :               OutGlyphS (eb, DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "st", 2)));
    1774         1728 :               break;
    1775              : 
    1776          348 :             case 2:
    1777          348 :               OutGlyphS (eb, DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "nd", 2)));
    1778          348 :               break;
    1779              : 
    1780           24 :             case 3:
    1781           24 :               OutGlyphS (eb, DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "rd", 2)));
    1782           24 :               break;
    1783              : 
    1784              : 
    1785           36 :             default:
    1786           36 :               OutGlyphS (eb, DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "th", 2)));
    1787           36 :               break;
    1788              :           }
    1789              :       }
    1790              :     }
    1791         4272 : }
    1792              : 
    1793              : 
    1794              : /*
    1795              :    doCount -
    1796              : */
    1797              : 
    1798        34929 : static void doAscii (M2MetaError_errorBlock *eb, const unsigned int *sym_, unsigned int _sym_high, unsigned int bol)
    1799              : {
    1800        34929 :   unsigned int sym[_sym_high+1];
    1801              : 
    1802              :   /* make a local copy of each unbounded array.  */
    1803        34929 :   memcpy (sym, sym_, (_sym_high+1) * sizeof (unsigned int));
    1804              : 
    1805        34887 :   if ((((sym[bol] == SymbolTable_NulSym) || (! (empty (eb)))) || (SymbolTable_IsTemporary (sym[bol]))) || (SymbolTable_IsNameAnonymous (sym[bol])))
    1806              :     {
    1807          156 :       return;
    1808              :     }
    1809              :   else
    1810              :     {
    1811        34773 :       OutGlyphS (eb, DynamicStrings_InitStringCharStar (NameKey_KeyToCharStar (SymbolTable_GetSymName (sym[bol]))));
    1812              :     }
    1813        34929 : }
    1814              : 
    1815              : 
    1816              : /*
    1817              :    unquotedKeyword -
    1818              : */
    1819              : 
    1820          633 : static void unquotedKeyword (M2MetaError_errorBlock *eb)
    1821              : {
    1822          633 :   (*eb).quotes = false;
    1823            0 :   keyword (eb);
    1824            0 : }
    1825              : 
    1826              : 
    1827              : /*
    1828              :    OutArray -
    1829              : */
    1830              : 
    1831           78 : static void OutArray (M2MetaError_errorBlock *eb, const char *a_, unsigned int _a_high)
    1832              : {
    1833           78 :   char a[_a_high+1];
    1834              : 
    1835              :   /* make a local copy of each unbounded array.  */
    1836           78 :   memcpy (a, a_, _a_high+1);
    1837              : 
    1838           78 :   OutGlyphS (eb, DynamicStrings_Mark (DynamicStrings_InitString ((const char *) a, _a_high)));
    1839           78 : }
    1840              : 
    1841              : 
    1842              : /*
    1843              :    OutGlyphS - outputs a string of glyphs.
    1844              : */
    1845              : 
    1846        69934 : static void OutGlyphS (M2MetaError_errorBlock *eb, DynamicStrings_String s)
    1847              : {
    1848        69934 :   if ((DynamicStrings_Length (s)) > 0)
    1849              :     {
    1850        69934 :       flushColor (eb);
    1851        69934 :       checkMe ();
    1852        69934 :       (*eb).glyph = true;
    1853        69934 :       (*eb).out = DynamicStrings_ConCat ((*eb).out, s);
    1854              :     }
    1855        69934 : }
    1856              : 
    1857              : 
    1858              : /*
    1859              :    empty - returns TRUE if the output string is empty.
    1860              :            It ignores color changes.
    1861              : */
    1862              : 
    1863       155954 : static bool empty (M2MetaError_errorBlock *eb)
    1864              : {
    1865        87191 :   return ! (*eb).glyph;
    1866              :   /* static analysis guarentees a RETURN statement will be used before here.  */
    1867              :   __builtin_unreachable ();
    1868              : }
    1869              : 
    1870              : 
    1871              : /*
    1872              :    checkVowel - checks to see if the from block word starts with
    1873              :                 a vowel and if so adds an n to the to block output.
    1874              : */
    1875              : 
    1876        42212 : static void checkVowel (M2MetaError_errorBlock *to, M2MetaError_errorBlock from)
    1877              : {
    1878        42212 :   if (from.vowel && (! (empty (&from))))
    1879              :     {
    1880          180 :       if (isVowel (DynamicStrings_char (from.out, 0)))
    1881              :         {
    1882           24 :           if ((DynamicStrings_Length ((*to).out)) > 0)
    1883              :             {
    1884           24 :               (*to).out = DynamicStrings_RemoveWhitePostfix (DynamicStrings_Mark ((*to).out));
    1885           24 :               (*to).out = DynamicStrings_ConCat ((*to).out, DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "n ", 2)));
    1886           24 :               from.vowel = false;
    1887              :             }
    1888              :         }
    1889              :     }
    1890        42212 : }
    1891              : 
    1892              : 
    1893              : /*
    1894              :    isVowel - returns TRUE if ch is a, e, i, o or u.
    1895              : */
    1896              : 
    1897          180 : static bool isVowel (char ch)
    1898              : {
    1899          180 :   return ((((ch == 'a') || (ch == 'e')) || (ch == 'i')) || (ch == 'o')) || (ch == 'u');
    1900              :   /* static analysis guarentees a RETURN statement will be used before here.  */
    1901              :   __builtin_unreachable ();
    1902              : }
    1903              : 
    1904              : 
    1905              : /*
    1906              :    clear - remove the output string.
    1907              : */
    1908              : 
    1909        49056 : static void clear (M2MetaError_errorBlock *eb)
    1910              : {
    1911        49056 :   (*eb).out = DynamicStrings_KillString ((*eb).out);
    1912        49056 :   (*eb).out = DynamicStrings_InitString ((const char *) "", 0);
    1913        49056 :   (*eb).glyph = false;
    1914        49056 :   (*eb).beginCol = M2MetaError_unsetColor;
    1915        49056 :   (*eb).quotes = false;
    1916        49056 : }
    1917              : 
    1918              : 
    1919              : /*
    1920              :    clear - remove the output string.
    1921              : */
    1922              : 
    1923        28671 : static void doName (M2MetaError_errorBlock *eb, const unsigned int *sym_, unsigned int _sym_high, unsigned int bol)
    1924              : {
    1925        28671 :   unsigned int sym[_sym_high+1];
    1926              : 
    1927              :   /* make a local copy of each unbounded array.  */
    1928        28671 :   memcpy (sym, sym_, (_sym_high+1) * sizeof (unsigned int));
    1929              : 
    1930        23151 :   if ((((! (empty (eb))) || (sym[bol] == SymbolTable_NulSym)) || (SymbolTable_IsTemporary (sym[bol]))) || (SymbolTable_IsNameAnonymous (sym[bol])))
    1931              :     {
    1932         8394 :       return;
    1933              :     }
    1934              :   else
    1935              :     {
    1936        20277 :       if (sym[bol] == M2Base_ZType)
    1937              :         {
    1938           60 :           (*eb).quotes = false;
    1939           60 :           OutArray (eb, (const char *) "the ZType", 9);
    1940              :         }
    1941        20217 :       else if (sym[bol] == M2Base_RType)
    1942              :         {
    1943              :           /* avoid dangling else.  */
    1944           18 :           (*eb).quotes = false;
    1945           18 :           OutArray (eb, (const char *) "the RType", 9);
    1946              :         }
    1947              :       else
    1948              :         {
    1949              :           /* avoid dangling else.  */
    1950        20199 :           doAscii (eb, (const unsigned int *) sym, _sym_high, bol);
    1951              :         }
    1952              :     }
    1953        28671 : }
    1954              : 
    1955              : 
    1956              : /*
    1957              :    clear - remove the output string.
    1958              : */
    1959              : 
    1960            0 : static void doQualified (M2MetaError_errorBlock *eb, const unsigned int *sym_, unsigned int _sym_high, unsigned int bol)
    1961              : {
    1962            0 :   typedef struct doQualified__T3_a doQualified__T3;
    1963              : 
    1964            0 :   struct doQualified__T3_a { unsigned int array[1+1]; };
    1965            0 :   doQualified__T3 mod;
    1966            0 :   unsigned int sym[_sym_high+1];
    1967              : 
    1968              :   /* make a local copy of each unbounded array.  */
    1969            0 :   memcpy (sym, sym_, (_sym_high+1) * sizeof (unsigned int));
    1970              : 
    1971            0 :   if ((((! (empty (eb))) || (sym[bol] == SymbolTable_NulSym)) || (SymbolTable_IsTemporary (sym[bol]))) || (SymbolTable_IsNameAnonymous (sym[bol])))
    1972              :     {
    1973            0 :       return;
    1974              :     }
    1975              :   else
    1976              :     {
    1977            0 :       mod.array[0] = SymbolTable_GetScope (sym[bol]);
    1978            0 :       if ((SymbolTable_IsDefImp (mod.array[0])) && (SymbolTable_IsExported (mod.array[0], sym[bol])))
    1979              :         {
    1980            0 :           doAscii (eb, (const unsigned int *) &mod.array[0], 1, 0);
    1981            0 :           OutArray (eb, (const char *) ".", 1);
    1982            0 :           OutGlyphS (eb, DynamicStrings_Mark (DynamicStrings_InitStringCharStar (NameKey_KeyToCharStar (SymbolTable_GetSymName (sym[bol])))));
    1983              :         }
    1984              :       else
    1985              :         {
    1986            0 :           doAscii (eb, (const unsigned int *) sym, _sym_high, bol);
    1987              :         }
    1988              :     }
    1989            0 : }
    1990              : 
    1991              : 
    1992              : /*
    1993              :    doType - returns a string containing the type name of
    1994              :             sym.
    1995              : */
    1996              : 
    1997        14712 : static void doType (M2MetaError_errorBlock *eb, const unsigned int *sym_, unsigned int _sym_high, unsigned int bol)
    1998              : {
    1999        14712 :   unsigned int sym[_sym_high+1];
    2000              : 
    2001              :   /* make a local copy of each unbounded array.  */
    2002        14712 :   memcpy (sym, sym_, (_sym_high+1) * sizeof (unsigned int));
    2003              : 
    2004        14706 :   if ((! (empty (eb))) || (sym[bol] == SymbolTable_NulSym))
    2005              :     {
    2006            6 :       return;
    2007              :     }
    2008              :   else
    2009              :     {
    2010        14706 :       const_cast<unsigned int *>(sym)[bol] = SymbolTable_GetType (sym[bol]);
    2011        14706 :       doAscii (eb, (const unsigned int *) sym, _sym_high, bol);
    2012              :     }
    2013        14712 : }
    2014              : 
    2015              : 
    2016              : /*
    2017              :    doSkipType - will skip all pseudonym types.  It also
    2018              :                 returns the type symbol found and name.
    2019              : */
    2020              : 
    2021         9462 : static void doSkipType (M2MetaError_errorBlock eb, const unsigned int *sym_, unsigned int _sym_high, unsigned int bol)
    2022              : {
    2023         9462 :   unsigned int sym[_sym_high+1];
    2024              : 
    2025              :   /* make a local copy of each unbounded array.  */
    2026         9462 :   memcpy (sym, sym_, (_sym_high+1) * sizeof (unsigned int));
    2027              : 
    2028           24 :   if ((! (empty (&eb))) || (sym[bol] == SymbolTable_NulSym))
    2029              :     {
    2030         9438 :       return;
    2031              :     }
    2032              :   else
    2033              :     {
    2034           24 :       const_cast<unsigned int *>(sym)[bol] = SymbolTable_SkipType (sym[bol]);
    2035           24 :       while ((SymbolTable_IsType (sym[bol])) && (((SymbolTable_GetSymName (sym[bol])) == NameKey_NulName) || (SymbolTable_IsNameAnonymous (sym[bol]))))
    2036              :         {
    2037            0 :           const_cast<unsigned int *>(sym)[bol] = SymbolTable_GetType (sym[bol]);
    2038              :         }
    2039           24 :       doAscii (&eb, (const unsigned int *) sym, _sym_high, bol);
    2040              :     }
    2041         9462 : }
    2042              : 
    2043              : 
    2044              : /*
    2045              :    doGetType - attempts to get the type of sym[bol].
    2046              : */
    2047              : 
    2048            0 : static void doGetType (M2MetaError_errorBlock *eb, unsigned int *sym, unsigned int _sym_high, unsigned int bol)
    2049              : {
    2050            0 :   if (((bol > _sym_high) || (! (empty (eb)))) || (sym[bol] == SymbolTable_NulSym))
    2051              :     {
    2052              :       return;
    2053              :     }
    2054              :   else
    2055              :     {
    2056            0 :       const_cast<unsigned int *>(sym)[bol] = SymbolTable_GetType (sym[bol]);
    2057              :     }
    2058              : }
    2059              : 
    2060              : 
    2061              : /*
    2062              :    doGetSkipType - will skip all pseudonym types.  It also
    2063              :                    returns the type symbol found and name.
    2064              : */
    2065              : 
    2066            0 : static void doGetSkipType (M2MetaError_errorBlock *eb, unsigned int *sym, unsigned int _sym_high, unsigned int bol)
    2067              : {
    2068            0 :   unsigned int prev;
    2069              : 
    2070            0 :   if (((bol > _sym_high) || (! (empty (eb)))) || (sym[bol] == SymbolTable_NulSym))
    2071              :     {
    2072              :       return;
    2073              :     }
    2074              :   else
    2075              :     {
    2076            0 :       do {
    2077            0 :         prev = sym[bol];
    2078            0 :         const_cast<unsigned int *>(sym)[bol] = SymbolTable_SkipType (sym[bol]);
    2079            0 :         if (((SymbolTable_IsType (sym[bol])) && (((SymbolTable_GetSymName (sym[bol])) == NameKey_NulName) || (SymbolTable_IsNameAnonymous (sym[bol])))) && ((SymbolTable_GetType (sym[bol])) != SymbolTable_NulSym))
    2080              :           {
    2081            0 :             const_cast<unsigned int *>(sym)[bol] = SymbolTable_GetType (sym[bol]);
    2082              :           }
    2083            0 :       } while (! (sym[bol] == prev));
    2084              :     }
    2085              : }
    2086              : 
    2087              : 
    2088              : /*
    2089              :    doChain -
    2090              : */
    2091              : 
    2092          162 : static void doChain (M2MetaError_errorBlock *eb, unsigned int tok)
    2093              : {
    2094          162 :   if (lastRoot == NULL)
    2095              :     {
    2096            0 :       M2Error_InternalError ((const char *) "should not be chaining an error onto an empty error note", 56);
    2097              :     }
    2098              :   else
    2099              :     {
    2100          162 :       (*eb).e = M2Error_ChainError (tok, lastRoot);
    2101              :     }
    2102          162 : }
    2103              : 
    2104              : 
    2105              : /*
    2106              :    doError - creates and returns an error note.
    2107              : */
    2108              : 
    2109         3139 : static void doError (M2MetaError_errorBlock *eb, unsigned int tok, unsigned int sym)
    2110              : {
    2111            0 :   if ((*eb).useError)
    2112              :     {
    2113         3139 :       chooseError (eb, tok, sym);
    2114              :     }
    2115            0 : }
    2116              : 
    2117              : 
    2118              : /*
    2119              :    defaultError - adds the default error location to, tok,
    2120              :                   if one has not already been assigned.
    2121              : */
    2122              : 
    2123         3133 : static void defaultError (M2MetaError_errorBlock *eb, unsigned int tok)
    2124              : {
    2125         3133 :   if ((*eb).e == NULL)
    2126              :     {
    2127         2283 :       doError (eb, tok, SymbolTable_NulSym);
    2128              :     }
    2129         3133 :   if ((*eb).token == M2LexBuf_UnknownTokenNo)
    2130              :     {
    2131          910 :       (*eb).token = tok;
    2132              :     }
    2133         3133 : }
    2134              : 
    2135              : 
    2136              : /*
    2137              :    updateTokSym - assign symcause to sym if not NulSym.
    2138              :                   Update token.
    2139              : */
    2140              : 
    2141         2977 : static void updateTokSym (M2MetaError_errorBlock *eb, unsigned int tok, unsigned int sym)
    2142              : {
    2143            0 :   if (sym != SymbolTable_NulSym)
    2144              :     {
    2145          742 :       (*eb).symcause = sym;
    2146              :     }
    2147         2977 :   (*eb).token = tok;
    2148         2977 : }
    2149              : 
    2150              : 
    2151              : /*
    2152              :    chooseError - choose the error kind dependant upon type.
    2153              :                  Either an error, warning or note will be generated.
    2154              : */
    2155              : 
    2156         3139 : static void chooseError (M2MetaError_errorBlock *eb, unsigned int tok, unsigned int sym)
    2157              : {
    2158         3139 :   if ((*eb).chain)
    2159              :     {
    2160           48 :       doChain (eb, tok);
    2161              :     }
    2162              :   else
    2163              :     {
    2164         3091 :       switch ((*eb).type)
    2165              :         {
    2166          114 :           case M2MetaError_chained:
    2167          114 :             doChain (eb, tok);
    2168          114 :             break;
    2169              : 
    2170         2345 :           case M2MetaError_none:
    2171         2345 :           case M2MetaError_aborta:
    2172         2345 :           case M2MetaError_error:
    2173         2345 :             if ((*eb).e == NULL)
    2174              :               {
    2175         2345 :                 (*eb).e = M2Error_NewError (tok);
    2176              :               }
    2177              :             else
    2178              :               {
    2179            0 :                 (*eb).e = M2Error_MoveError ((*eb).e, tok);
    2180              :               }
    2181         2345 :             updateTokSym (eb, tok, sym);
    2182         2345 :             break;
    2183              : 
    2184          600 :           case M2MetaError_warning:
    2185          600 :             if ((*eb).e == NULL)
    2186              :               {
    2187          600 :                 (*eb).e = M2Error_NewWarning (tok);
    2188              :               }
    2189              :             else
    2190              :               {
    2191            0 :                 (*eb).e = M2Error_MoveError ((*eb).e, tok);
    2192              :               }
    2193          600 :             updateTokSym (eb, tok, sym);
    2194          600 :             break;
    2195              : 
    2196           32 :           case M2MetaError_note:
    2197           32 :             if ((*eb).e == NULL)
    2198              :               {
    2199           32 :                 (*eb).e = M2Error_NewNote (tok);
    2200              :               }
    2201              :             else
    2202              :               {
    2203            0 :                 (*eb).e = M2Error_MoveError ((*eb).e, tok);
    2204              :               }
    2205           32 :             updateTokSym (eb, tok, sym);
    2206           32 :             break;
    2207              : 
    2208              : 
    2209            0 :           default:
    2210            0 :             M2Error_InternalError ((const char *) "unexpected enumeration value", 28);
    2211         3139 :             break;
    2212              :         }
    2213              :     }
    2214         3139 :   if ((*eb).root)
    2215              :     {
    2216           42 :       lastRoot = (*eb).e;
    2217           42 :       lastColor = findColorType ((*eb).in);
    2218              :     }
    2219         3139 :   (*eb).e = M2Error_SetColor ((*eb).e);
    2220         3139 : }
    2221              : 
    2222              : 
    2223              : /*
    2224              :    doErrorScopeModule -
    2225              : */
    2226              : 
    2227           36 : static void doErrorScopeModule (M2MetaError_errorBlock *eb, unsigned int sym)
    2228              : {
    2229           36 :   unsigned int scope;
    2230              : 
    2231           36 :   scope = SymbolTable_GetScope (sym);
    2232           36 :   if (SymbolTable_IsModule (scope))
    2233              :     {
    2234           30 :       if (SymbolTable_IsInnerModule (scope))
    2235              :         {
    2236            0 :           doError (eb, SymbolTable_GetDeclaredMod (sym), sym);
    2237              :         }
    2238              :       else
    2239              :         {
    2240           30 :           doError (eb, SymbolTable_GetDeclaredMod (sym), sym);
    2241              :         }
    2242              :     }
    2243              :   else
    2244              :     {
    2245            6 :       M2Debug_Assert (SymbolTable_IsDefImp (scope));
    2246              :       /* if this fails then we need to skip to the outer scope.
    2247              :          REPEAT
    2248              :             OuterModule := GetScope(OuterModule)
    2249              :          UNTIL GetScope(OuterModule)=NulSym.  */
    2250            6 :       if ((SymbolTable_GetDeclaredModule (sym)) == M2LexBuf_UnknownTokenNo)
    2251              :         {
    2252            0 :           doError (eb, SymbolTable_GetDeclaredDef (sym), sym);
    2253              :         }
    2254              :       else
    2255              :         {
    2256            6 :           doError (eb, SymbolTable_GetDeclaredMod (sym), sym);
    2257              :         }
    2258              :     }
    2259           36 : }
    2260              : 
    2261              : 
    2262              : /*
    2263              :    doErrorScopeForward -
    2264              : */
    2265              : 
    2266            0 : static void doErrorScopeForward (M2MetaError_errorBlock *eb, unsigned int sym)
    2267              : {
    2268            0 :   unsigned int scope;
    2269              : 
    2270            0 :   scope = SymbolTable_GetScope (sym);
    2271            0 :   if (SymbolTable_IsModule (scope))
    2272              :     {
    2273            0 :       if (SymbolTable_IsInnerModule (scope))
    2274              :         {
    2275            0 :           doError (eb, SymbolTable_GetDeclaredFor (sym), sym);
    2276              :         }
    2277              :       else
    2278              :         {
    2279            0 :           doError (eb, SymbolTable_GetDeclaredFor (sym), sym);
    2280              :         }
    2281              :     }
    2282              :   else
    2283              :     {
    2284            0 :       M2Debug_Assert (SymbolTable_IsDefImp (scope));
    2285              :       /* if this fails then we need to skip to the outer scope.
    2286              :          REPEAT
    2287              :             OuterModule := GetScope(OuterModule)
    2288              :          UNTIL GetScope(OuterModule)=NulSym.  */
    2289            0 :       if ((SymbolTable_GetDeclaredModule (sym)) == M2LexBuf_UnknownTokenNo)
    2290              :         {
    2291            0 :           doError (eb, SymbolTable_GetDeclaredDef (sym), sym);
    2292              :         }
    2293              :       else
    2294              :         {
    2295            0 :           doError (eb, SymbolTable_GetDeclaredFor (sym), sym);
    2296              :         }
    2297              :     }
    2298            0 : }
    2299              : 
    2300              : 
    2301              : /*
    2302              :    doErrorScopeMod - potentially create an error referring to the definition
    2303              :                      module, fall back to the implementation or program module if
    2304              :                      there is no declaration in the definition module.
    2305              : */
    2306              : 
    2307           59 : static void doErrorScopeMod (M2MetaError_errorBlock *eb, unsigned int sym)
    2308              : {
    2309           59 :   unsigned int scope;
    2310              : 
    2311           59 :   scope = SymbolTable_GetScope (sym);
    2312           59 :   if (scope == SymbolTable_NulSym)
    2313              :     {
    2314           23 :       M2Error_EnterErrorScope (static_cast<M2Error_ErrorScope> (NULL));
    2315           23 :       doError (eb, SymbolTable_GetDeclaredMod (sym), sym);
    2316              :     }
    2317              :   else
    2318              :     {
    2319           36 :       M2Error_EnterErrorScope (SymbolTable_GetErrorScope (scope));
    2320           36 :       if (SymbolTable_IsProcedure (scope))
    2321              :         {
    2322            0 :           doError (eb, SymbolTable_GetDeclaredMod (sym), sym);
    2323              :         }
    2324              :       else
    2325              :         {
    2326           36 :           doErrorScopeModule (eb, sym);
    2327              :         }
    2328              :     }
    2329           59 :   M2Error_LeaveErrorScope ();
    2330           59 : }
    2331              : 
    2332              : 
    2333              : /*
    2334              :    doErrorScopeFor - potentially create an error referring to the
    2335              :                      forward declaration, definition module, fall back
    2336              :                      to the implementation or program module if
    2337              :                      there is no declaration in the definition module.
    2338              : */
    2339              : 
    2340            0 : static void doErrorScopeFor (M2MetaError_errorBlock *eb, unsigned int sym)
    2341              : {
    2342            0 :   unsigned int scope;
    2343              : 
    2344            0 :   scope = SymbolTable_GetScope (sym);
    2345            0 :   if (scope == SymbolTable_NulSym)
    2346              :     {
    2347            0 :       M2Error_EnterErrorScope (static_cast<M2Error_ErrorScope> (NULL));
    2348            0 :       doError (eb, SymbolTable_GetDeclaredFor (sym), sym);
    2349              :     }
    2350              :   else
    2351              :     {
    2352            0 :       M2Error_EnterErrorScope (SymbolTable_GetErrorScope (scope));
    2353            0 :       if (SymbolTable_IsProcedure (scope))
    2354              :         {
    2355            0 :           doError (eb, SymbolTable_GetDeclaredFor (sym), sym);
    2356              :         }
    2357              :       else
    2358              :         {
    2359            0 :           doErrorScopeForward (eb, sym);
    2360              :         }
    2361              :     }
    2362            0 :   M2Error_LeaveErrorScope ();
    2363            0 : }
    2364              : 
    2365           59 : static void declaredMod (M2MetaError_errorBlock *eb, const unsigned int *sym_, unsigned int _sym_high, unsigned int bol)
    2366              : {
    2367           59 :   unsigned int sym[_sym_high+1];
    2368              : 
    2369              :   /* make a local copy of each unbounded array.  */
    2370           59 :   memcpy (sym, sym_, (_sym_high+1) * sizeof (unsigned int));
    2371              : 
    2372              :   /* 
    2373              :    doDeclaredMod - creates an error note where sym[bol] was declared.
    2374              :   */
    2375           59 :   if (bol <= _sym_high)
    2376              :     {
    2377           59 :       doErrorScopeMod (eb, sym[bol]);
    2378              :     }
    2379           59 : }
    2380              : 
    2381              : 
    2382              : /*
    2383              :    doErrorScopeDefinition - use the declaration in the definitio module if one is available.
    2384              : */
    2385              : 
    2386          402 : static void doErrorScopeDefinition (M2MetaError_errorBlock *eb, unsigned int sym)
    2387              : {
    2388          402 :   unsigned int scope;
    2389              : 
    2390          402 :   scope = SymbolTable_GetScope (sym);
    2391          402 :   if (SymbolTable_IsModule (scope))
    2392              :     {
    2393              :       /* No definition module for a program module.  */
    2394          402 :       doError (eb, SymbolTable_GetDeclaredMod (sym), sym);
    2395              :     }
    2396              :   else
    2397              :     {
    2398            0 :       M2Debug_Assert (SymbolTable_IsDefImp (scope));
    2399            0 :       if ((SymbolTable_GetDeclaredDefinition (sym)) == M2LexBuf_UnknownTokenNo)
    2400              :         {
    2401              :           /* Fall back to the implementation module if no declaration exists
    2402              :             in the definition module.  */
    2403            0 :           doError (eb, SymbolTable_GetDeclaredMod (sym), sym);
    2404              :         }
    2405              :       else
    2406              :         {
    2407            0 :           doError (eb, SymbolTable_GetDeclaredDef (sym), sym);
    2408              :         }
    2409              :     }
    2410          402 : }
    2411              : 
    2412              : 
    2413              : /*
    2414              :    doErrorScopeDef - potentially create an error referring to the definition
    2415              :                      module, fall back to the implementation or program module if
    2416              :                      there is no declaration in the definition module.
    2417              : */
    2418              : 
    2419          432 : static void doErrorScopeDef (M2MetaError_errorBlock *eb, unsigned int sym)
    2420              : {
    2421          432 :   unsigned int scope;
    2422              : 
    2423          432 :   scope = SymbolTable_GetScope (sym);
    2424          432 :   if (scope == SymbolTable_NulSym)
    2425              :     {
    2426            0 :       M2Error_EnterErrorScope (static_cast<M2Error_ErrorScope> (NULL));
    2427            0 :       doError (eb, SymbolTable_GetDeclaredFor (sym), sym);
    2428              :     }
    2429              :   else
    2430              :     {
    2431          432 :       M2Error_EnterErrorScope (SymbolTable_GetErrorScope (scope));
    2432          432 :       if (SymbolTable_IsProcedure (scope))
    2433              :         {
    2434           30 :           doError (eb, SymbolTable_GetDeclaredDef (sym), sym);
    2435              :         }
    2436              :       else
    2437              :         {
    2438          402 :           doErrorScopeDefinition (eb, sym);
    2439              :         }
    2440              :     }
    2441          432 :   M2Error_LeaveErrorScope ();
    2442          432 : }
    2443              : 
    2444          432 : static void declaredDef (M2MetaError_errorBlock *eb, const unsigned int *sym_, unsigned int _sym_high, unsigned int bol)
    2445              : {
    2446          432 :   unsigned int sym[_sym_high+1];
    2447              : 
    2448              :   /* make a local copy of each unbounded array.  */
    2449          432 :   memcpy (sym, sym_, (_sym_high+1) * sizeof (unsigned int));
    2450              : 
    2451              :   /* 
    2452              :    doDeclaredDef - creates an error note where sym[bol] was declared.
    2453              :   */
    2454          432 :   if (bol <= _sym_high)
    2455              :     {
    2456          432 :       doErrorScopeDef (eb, sym[bol]);
    2457              :     }
    2458          432 : }
    2459              : 
    2460            0 : static void declaredFor (M2MetaError_errorBlock *eb, const unsigned int *sym_, unsigned int _sym_high, unsigned int bol)
    2461              : {
    2462            0 :   unsigned int sym[_sym_high+1];
    2463              : 
    2464              :   /* make a local copy of each unbounded array.  */
    2465            0 :   memcpy (sym, sym_, (_sym_high+1) * sizeof (unsigned int));
    2466              : 
    2467              :   /* 
    2468              :    doDeclaredFor - creates an error note where sym[bol] was declared.
    2469              :   */
    2470            0 :   if (bol <= _sym_high)
    2471              :     {
    2472            0 :       doErrorScopeFor (eb, sym[bol]);
    2473              :     }
    2474            0 : }
    2475              : 
    2476              : 
    2477              : /*
    2478              :    doErrorScopeProc - determine the location for the error or warning from
    2479              :                       the default declaration.  For example parameters can be
    2480              :                       declared in definition, forward or in modules (proper procedure).
    2481              :                       Use GetVarParamTok to obtain a variable or parameter location.
    2482              : */
    2483              : 
    2484          156 : static void doErrorScopeProc (M2MetaError_errorBlock *eb, unsigned int sym, M2MetaError_GetTokProcedure GetVarParamTok)
    2485              : {
    2486          156 :   unsigned int scope;
    2487              : 
    2488          156 :   scope = SymbolTable_GetScope (sym);
    2489          156 :   if (scope == SymbolTable_NulSym)
    2490              :     {
    2491            0 :       M2Error_EnterErrorScope (static_cast<M2Error_ErrorScope> (NULL));
    2492            0 :       doError (eb, SymbolTable_GetDeclaredDef (sym), sym);
    2493              :     }
    2494              :   else
    2495              :     {
    2496          156 :       M2Error_EnterErrorScope (SymbolTable_GetErrorScope (scope));
    2497          156 :       if ((SymbolTable_IsVar (sym)) || (SymbolTable_IsParameter (sym)))
    2498              :         {
    2499          156 :           doError (eb, (unsigned int ) ((*GetVarParamTok.proc) (sym)), sym);
    2500              :         }
    2501            0 :       else if (SymbolTable_IsProcedure (scope))
    2502              :         {
    2503              :           /* avoid dangling else.  */
    2504            0 :           doError (eb, SymbolTable_GetDeclaredDef (sym), sym);
    2505              :         }
    2506            0 :       else if (SymbolTable_IsModule (scope))
    2507              :         {
    2508              :           /* avoid dangling else.  */
    2509            0 :           doError (eb, SymbolTable_GetDeclaredMod (sym), sym);
    2510              :         }
    2511              :       else
    2512              :         {
    2513              :           /* avoid dangling else.  */
    2514            0 :           M2Debug_Assert (SymbolTable_IsDefImp (scope));
    2515            0 :           if ((SymbolTable_GetDeclaredDefinition (sym)) == M2LexBuf_UnknownTokenNo)
    2516              :             {
    2517            0 :               doError (eb, SymbolTable_GetDeclaredMod (sym), sym);
    2518              :             }
    2519              :           else
    2520              :             {
    2521            0 :               doError (eb, SymbolTable_GetDeclaredDef (sym), sym);
    2522              :             }
    2523              :         }
    2524              :     }
    2525          156 :   M2Error_LeaveErrorScope ();
    2526          156 : }
    2527              : 
    2528           96 : static void declaredVar (M2MetaError_errorBlock *eb, const unsigned int *sym_, unsigned int _sym_high, unsigned int bol)
    2529              : {
    2530           96 :   unsigned int sym[_sym_high+1];
    2531              : 
    2532              :   /* make a local copy of each unbounded array.  */
    2533           96 :   memcpy (sym, sym_, (_sym_high+1) * sizeof (unsigned int));
    2534              : 
    2535              :   /* 
    2536              :    doDeclaredVar - creates an error note where sym[bol] was declared.
    2537              :   */
    2538           96 :   if (bol <= _sym_high)
    2539              :     {
    2540           96 :       doErrorScopeProc (eb, sym[bol], (M2MetaError_GetTokProcedure) {(M2MetaError_GetTokProcedure_t) SymbolTable_GetVarDeclTok});
    2541              :     }
    2542           96 : }
    2543              : 
    2544            0 : static void declaredType (M2MetaError_errorBlock *eb, const unsigned int *sym_, unsigned int _sym_high, unsigned int bol)
    2545              : {
    2546            0 :   unsigned int sym[_sym_high+1];
    2547              : 
    2548              :   /* make a local copy of each unbounded array.  */
    2549            0 :   memcpy (sym, sym_, (_sym_high+1) * sizeof (unsigned int));
    2550              : 
    2551              :   /* 
    2552              :    doDeclaredType - creates an error note where sym[bol] was declared.
    2553              :   */
    2554            0 :   if (bol <= _sym_high)
    2555              :     {
    2556            0 :       doErrorScopeProc (eb, sym[bol], (M2MetaError_GetTokProcedure) {(M2MetaError_GetTokProcedure_t) SymbolTable_GetVarDeclTypeTok});
    2557              :     }
    2558            0 : }
    2559              : 
    2560           60 : static void declaredFull (M2MetaError_errorBlock *eb, const unsigned int *sym_, unsigned int _sym_high, unsigned int bol)
    2561              : {
    2562           60 :   unsigned int sym[_sym_high+1];
    2563              : 
    2564              :   /* make a local copy of each unbounded array.  */
    2565           60 :   memcpy (sym, sym_, (_sym_high+1) * sizeof (unsigned int));
    2566              : 
    2567              :   /* 
    2568              :    doDeclaredFull - creates an error note where sym[bol] was declared.
    2569              :   */
    2570           60 :   if (bol <= _sym_high)
    2571              :     {
    2572           60 :       doErrorScopeProc (eb, sym[bol], (M2MetaError_GetTokProcedure) {(M2MetaError_GetTokProcedure_t) SymbolTable_GetVarDeclFullTok});
    2573              :     }
    2574           60 : }
    2575              : 
    2576              : 
    2577              : /*
    2578              :    used - creates an error note where sym[bol] was first used.
    2579              : */
    2580              : 
    2581          209 : static void used (M2MetaError_errorBlock *eb, const unsigned int *sym_, unsigned int _sym_high, unsigned int bol)
    2582              : {
    2583          209 :   unsigned int sym[_sym_high+1];
    2584              : 
    2585              :   /* make a local copy of each unbounded array.  */
    2586          209 :   memcpy (sym, sym_, (_sym_high+1) * sizeof (unsigned int));
    2587              : 
    2588          209 :   if (bol <= _sym_high)
    2589              :     {
    2590          209 :       doError (eb, SymbolTable_GetFirstUsed (sym[bol]), sym[bol]);
    2591              :     }
    2592          209 : }
    2593              : 
    2594              : 
    2595              : /*
    2596              :    symDesc -
    2597              : */
    2598              : 
    2599         1105 : static DynamicStrings_String symDesc (unsigned int sym)
    2600              : {
    2601         1105 :   if (SymbolTable_IsConstLit (sym))
    2602              :     {
    2603            6 :       return DynamicStrings_InitString ((const char *) "constant literal", 16);
    2604              :     }
    2605         1099 :   else if (SymbolTable_IsConstSet (sym))
    2606              :     {
    2607              :       /* avoid dangling else.  */
    2608           48 :       return DynamicStrings_InitString ((const char *) "constant set", 12);
    2609              :     }
    2610         1051 :   else if (SymbolTable_IsConstructor (sym))
    2611              :     {
    2612              :       /* avoid dangling else.  */
    2613           12 :       return DynamicStrings_InitString ((const char *) "constructor", 11);
    2614              :     }
    2615         1039 :   else if (SymbolTable_IsConst (sym))
    2616              :     {
    2617              :       /* avoid dangling else.  */
    2618           24 :       return DynamicStrings_InitString ((const char *) "constant", 8);
    2619              :     }
    2620         1015 :   else if (SymbolTable_IsArray (sym))
    2621              :     {
    2622              :       /* avoid dangling else.  */
    2623           72 :       return DynamicStrings_InitString ((const char *) "array", 5);
    2624              :     }
    2625          943 :   else if (SymbolTable_IsVar (sym))
    2626              :     {
    2627              :       /* avoid dangling else.  */
    2628          624 :       if (SymbolTable_IsTemporary (sym))
    2629              :         {
    2630          432 :           return DynamicStrings_InitString ((const char *) "expression", 10);
    2631              :         }
    2632              :       else
    2633              :         {
    2634          192 :           return DynamicStrings_InitString ((const char *) "variable", 8);
    2635              :         }
    2636              :     }
    2637          319 :   else if (SymbolTable_IsEnumeration (sym))
    2638              :     {
    2639              :       /* avoid dangling else.  */
    2640            6 :       return DynamicStrings_InitString ((const char *) "enumeration type", 16);
    2641              :     }
    2642          313 :   else if (SymbolTable_IsFieldEnumeration (sym))
    2643              :     {
    2644              :       /* avoid dangling else.  */
    2645            0 :       return DynamicStrings_InitString ((const char *) "enumeration field", 17);
    2646              :     }
    2647          313 :   else if (SymbolTable_IsUnbounded (sym))
    2648              :     {
    2649              :       /* avoid dangling else.  */
    2650           24 :       return DynamicStrings_InitString ((const char *) "unbounded parameter", 19);
    2651              :     }
    2652          289 :   else if (SymbolTable_IsProcType (sym))
    2653              :     {
    2654              :       /* avoid dangling else.  */
    2655           18 :       return DynamicStrings_InitString ((const char *) "procedure type", 14);
    2656              :     }
    2657          271 :   else if (M2Base_IsPseudoBaseFunction (sym))
    2658              :     {
    2659              :       /* avoid dangling else.  */
    2660            6 :       return DynamicStrings_InitString ((const char *) "standard function procedure", 27);
    2661              :     }
    2662          265 :   else if (M2Base_IsPseudoBaseProcedure (sym))
    2663              :     {
    2664              :       /* avoid dangling else.  */
    2665            0 :       return DynamicStrings_InitString ((const char *) "standard procedure", 18);
    2666              :     }
    2667          265 :   else if (SymbolTable_IsProcedure (sym))
    2668              :     {
    2669              :       /* avoid dangling else.  */
    2670           18 :       return DynamicStrings_InitString ((const char *) "procedure", 9);
    2671              :     }
    2672          247 :   else if (SymbolTable_IsPointer (sym))
    2673              :     {
    2674              :       /* avoid dangling else.  */
    2675            0 :       return DynamicStrings_InitString ((const char *) "pointer", 7);
    2676              :     }
    2677          247 :   else if (SymbolTable_IsParameter (sym))
    2678              :     {
    2679              :       /* avoid dangling else.  */
    2680           18 :       if (SymbolTable_IsParameterVar (sym))
    2681              :         {
    2682           12 :           return DynamicStrings_InitString ((const char *) "var parameter", 13);
    2683              :         }
    2684              :       else
    2685              :         {
    2686            6 :           return DynamicStrings_InitString ((const char *) "parameter", 9);
    2687              :         }
    2688              :     }
    2689          229 :   else if (SymbolTable_IsType (sym))
    2690              :     {
    2691              :       /* avoid dangling else.  */
    2692            0 :       if (SymbolTable_IsHiddenType (sym))
    2693              :         {
    2694            0 :           return DynamicStrings_InitString ((const char *) "opaque type", 11);
    2695              :         }
    2696              :       else
    2697              :         {
    2698            0 :           return DynamicStrings_InitString ((const char *) "type", 4);
    2699              :         }
    2700              :     }
    2701          229 :   else if (SymbolTable_IsRecord (sym))
    2702              :     {
    2703              :       /* avoid dangling else.  */
    2704            6 :       return DynamicStrings_InitString ((const char *) "record", 6);
    2705              :     }
    2706          223 :   else if (SymbolTable_IsRecordField (sym))
    2707              :     {
    2708              :       /* avoid dangling else.  */
    2709            0 :       return DynamicStrings_InitString ((const char *) "record field", 12);
    2710              :     }
    2711          223 :   else if (SymbolTable_IsVarient (sym))
    2712              :     {
    2713              :       /* avoid dangling else.  */
    2714            0 :       return DynamicStrings_InitString ((const char *) "varient record", 14);
    2715              :     }
    2716          223 :   else if (SymbolTable_IsModule (sym))
    2717              :     {
    2718              :       /* avoid dangling else.  */
    2719            0 :       return DynamicStrings_InitString ((const char *) "module", 6);
    2720              :     }
    2721          223 :   else if (SymbolTable_IsDefImp (sym))
    2722              :     {
    2723              :       /* avoid dangling else.  */
    2724            0 :       return DynamicStrings_InitString ((const char *) "definition or implementation module", 35);
    2725              :     }
    2726          223 :   else if (SymbolTable_IsSet (sym))
    2727              :     {
    2728              :       /* avoid dangling else.  */
    2729           72 :       return DynamicStrings_InitString ((const char *) "set", 3);
    2730              :     }
    2731          151 :   else if (SymbolTable_IsUnknown (sym))
    2732              :     {
    2733              :       /* avoid dangling else.  */
    2734           25 :       return DynamicStrings_InitString ((const char *) "unknown", 7);
    2735              :     }
    2736          126 :   else if (SymbolTable_IsSubrange (sym))
    2737              :     {
    2738              :       /* avoid dangling else.  */
    2739          126 :       return DynamicStrings_InitString ((const char *) "subrange", 8);
    2740              :     }
    2741              :   else
    2742              :     {
    2743              :       /* avoid dangling else.  */
    2744            0 :       return DynamicStrings_InitString ((const char *) "", 0);
    2745              :     }
    2746              :   /* static analysis guarentees a RETURN statement will be used before here.  */
    2747              :   __builtin_unreachable ();
    2748              : }
    2749              : 
    2750              : 
    2751              : /*
    2752              :    doDesc -
    2753              : */
    2754              : 
    2755         9029 : static void doDesc (M2MetaError_errorBlock *eb, const unsigned int *sym_, unsigned int _sym_high, unsigned int bol)
    2756              : {
    2757         9029 :   unsigned int sym[_sym_high+1];
    2758              : 
    2759              :   /* make a local copy of each unbounded array.  */
    2760         9029 :   memcpy (sym, sym_, (_sym_high+1) * sizeof (unsigned int));
    2761              : 
    2762         9029 :   if (empty (eb))
    2763              :     {
    2764         1105 :       OutGlyphS (eb, symDesc (sym[bol]));
    2765         1105 :       if (! (empty (eb)))
    2766              :         {
    2767         1105 :           (*eb).quotes = false;
    2768              :         }
    2769              :     }
    2770         9029 : }
    2771              : 
    2772              : 
    2773              : /*
    2774              :    op := {'!'|'a'|'c'|'d'|'k'|'n'|'p'|'q'|'s'|'t'|'u'|'v'|
    2775              :           'A'|'B'|'C'|'D'|'E'|'F'|'G'|'H'|'K'|'M'|'N'|
    2776              :           'O'|'P'|'Q'|'R'|'S'|'T'|'U'|'V'|'W'|'X'|'Y'|'Z'|
    2777              :           '&' } then =:
    2778              : */
    2779              : 
    2780        42212 : static void op (M2MetaError_errorBlock *eb, const unsigned int *sym_, unsigned int _sym_high, unsigned int bol)
    2781              : {
    2782        42212 :   unsigned int sym[_sym_high+1];
    2783              : 
    2784              :   /* make a local copy of each unbounded array.  */
    2785        42212 :   memcpy (sym, sym_, (_sym_high+1) * sizeof (unsigned int));
    2786              : 
    2787       128837 :   while (((*eb).ini < (*eb).len) && ((DynamicStrings_char ((*eb).in, (*eb).ini)) != '}'))
    2788              :     {
    2789        86625 :       if (Debugging)
    2790              :         {
    2791              :           M2Printf_printf0 ((const char *) "while loop in op\\n", 18);
    2792              :           dump ((*eb));
    2793              :         }
    2794        86625 :       switch (DynamicStrings_char ((*eb).in, (*eb).ini))
    2795              :         {
    2796            0 :           case '!':
    2797            0 :             (*eb).positive = ! (*eb).positive;
    2798            0 :             break;
    2799              : 
    2800        28671 :           case 'a':
    2801        28671 :             doName (eb, (const unsigned int *) sym, _sym_high, bol);
    2802        28671 :             break;
    2803              : 
    2804            0 :           case 'c':
    2805            0 :             (*eb).currentCol = readColor (eb);
    2806            0 :             (*eb).ini -= 1;
    2807            0 :             break;
    2808              : 
    2809         9029 :           case 'd':
    2810         9029 :             doDesc (eb, (const unsigned int *) sym, _sym_high, bol);
    2811         9029 :             break;
    2812              : 
    2813          633 :           case 'k':
    2814          633 :             unquotedKeyword (eb);
    2815          633 :             (*eb).ini -= 1;
    2816          633 :             break;
    2817              : 
    2818            0 :           case 'n':
    2819            0 :             doNumber (eb, (const unsigned int *) sym, _sym_high, bol);
    2820            0 :             break;
    2821              : 
    2822            0 :           case 'p':
    2823            0 :             popColor (eb);
    2824            0 :             break;
    2825              : 
    2826            0 :           case 'q':
    2827            0 :             doQualified (eb, (const unsigned int *) sym, _sym_high, bol);
    2828            0 :             break;
    2829              : 
    2830         9462 :           case 's':
    2831         9462 :             doSkipType ((*eb), (const unsigned int *) sym, _sym_high, bol);
    2832         9462 :             break;
    2833              : 
    2834        14712 :           case 't':
    2835        14712 :             doType (eb, (const unsigned int *) sym, _sym_high, bol);
    2836        14712 :             break;
    2837              : 
    2838            0 :           case 'u':
    2839            0 :             (*eb).quotes = false;
    2840            0 :             break;
    2841              : 
    2842          180 :           case 'v':
    2843          180 :             (*eb).vowel = true;
    2844          180 :             break;
    2845              : 
    2846           92 :           case 'A':
    2847           92 :             (*eb).type = M2MetaError_aborta;
    2848           92 :             seenAbort = true;
    2849           92 :             break;
    2850              : 
    2851            0 :           case 'B':
    2852            0 :             declaredType (eb, (const unsigned int *) sym, _sym_high, bol);
    2853            0 :             break;
    2854              : 
    2855           42 :           case 'C':
    2856           42 :             (*eb).chain = true;
    2857           42 :             break;
    2858              : 
    2859          432 :           case 'D':
    2860          432 :             declaredDef (eb, (const unsigned int *) sym, _sym_high, bol);
    2861          432 :             break;
    2862              : 
    2863         1921 :           case 'E':
    2864         1921 :             (*eb).type = M2MetaError_error;
    2865         1921 :             (*eb).symcause = sym[bol];
    2866         1921 :             break;
    2867              : 
    2868            0 :           case 'F':
    2869            0 :             filename (eb);
    2870            0 :             (*eb).ini -= 1;
    2871            0 :             break;
    2872              : 
    2873            0 :           case 'G':
    2874            0 :             declaredFor (eb, (const unsigned int *) sym, _sym_high, bol);
    2875            0 :             break;
    2876              : 
    2877           60 :           case 'H':
    2878           60 :             declaredFull (eb, (const unsigned int *) sym, _sym_high, bol);
    2879           60 :             break;
    2880              : 
    2881          549 :           case 'K':
    2882          549 :             keyword (eb);
    2883          549 :             (*eb).ini -= 1;
    2884          549 :             break;
    2885              : 
    2886           59 :           case 'M':
    2887           59 :             declaredMod (eb, (const unsigned int *) sym, _sym_high, bol);
    2888           59 :             break;
    2889              : 
    2890         2136 :           case 'N':
    2891         2136 :             doCount (eb, (const unsigned int *) sym, _sym_high, bol);
    2892         2136 :             break;
    2893              : 
    2894           32 :           case 'O':
    2895           32 :             (*eb).type = M2MetaError_note;
    2896           32 :             (*eb).symcause = sym[bol];
    2897           32 :             break;
    2898              : 
    2899            0 :           case 'P':
    2900            0 :             pushColor (eb);
    2901            0 :             break;
    2902              : 
    2903            0 :           case 'Q':
    2904            0 :             resetDictionary ();
    2905            0 :             break;
    2906              : 
    2907           42 :           case 'R':
    2908           42 :             (*eb).root = true;
    2909           42 :             break;
    2910              : 
    2911            0 :           case 'S':
    2912            0 :             doGetSkipType (eb, (unsigned int *) sym, _sym_high, bol);
    2913            0 :             break;
    2914              : 
    2915            0 :           case 'T':
    2916            0 :             doGetType (eb, (unsigned int *) sym, _sym_high, bol);
    2917            0 :             break;
    2918              : 
    2919          209 :           case 'U':
    2920          209 :             used (eb, (const unsigned int *) sym, _sym_high, bol);
    2921          209 :             break;
    2922              : 
    2923           96 :           case 'V':
    2924           96 :             declaredVar (eb, (const unsigned int *) sym, _sym_high, bol);
    2925           96 :             break;
    2926              : 
    2927        11032 :           case 'W':
    2928        11032 :             (*eb).type = M2MetaError_warning;
    2929        11032 :             (*eb).symcause = sym[bol];
    2930        11032 :             break;
    2931              : 
    2932            0 :           case 'X':
    2933            0 :             pushOutput (eb);
    2934            0 :             break;
    2935              : 
    2936            0 :           case 'Y':
    2937            0 :             processDefine (eb);
    2938            0 :             break;
    2939              : 
    2940            0 :           case 'Z':
    2941            0 :             popOutput (eb);
    2942            0 :             break;
    2943              : 
    2944          392 :           case '&':
    2945          392 :             continuation (eb, (unsigned int *) sym, _sym_high, bol);
    2946          392 :             (*eb).ini -= 1;
    2947          392 :             break;
    2948              : 
    2949         6844 :           case ':':
    2950         6844 :             ifNonNulThen (eb, (const unsigned int *) sym, _sym_high);
    2951         6844 :             (*eb).ini -= 1;
    2952         6844 :             break;
    2953              : 
    2954            0 :           case '1':
    2955            0 :             M2Error_InternalError ((const char *) "incorrect format spec, expecting %1 rather than % spec 1", 56);
    2956            0 :             break;
    2957              : 
    2958            0 :           case '2':
    2959            0 :             M2Error_InternalError ((const char *) "incorrect format spec, expecting %2 rather than % spec 2", 56);
    2960            0 :             break;
    2961              : 
    2962            0 :           case '3':
    2963            0 :             M2Error_InternalError ((const char *) "incorrect format spec, expecting %3 rather than % spec 3", 56);
    2964            0 :             break;
    2965              : 
    2966            0 :           case '4':
    2967            0 :             M2Error_InternalError ((const char *) "incorrect format spec, expecting %4 rather than % spec 4", 56);
    2968            0 :             break;
    2969              : 
    2970              : 
    2971            0 :           default:
    2972            0 :             InternalFormat ((*eb), (const char *) "expecting one of [akqtdnpsuCDEFGKNOPQRSTUWXYZ:<>%]", 50, 1832);
    2973              :             break;
    2974              :         }
    2975        86625 :       (*eb).ini += 1;
    2976              :     }
    2977        42212 :   if (Debugging)
    2978              :     {
    2979              :       M2Printf_printf0 ((const char *) "finishing op\\n", 14);
    2980              :       dump ((*eb));
    2981              :     }
    2982        42212 : }
    2983              : 
    2984              : 
    2985              : /*
    2986              :    continuation := {':'|'1'|'2'|'3'|'4'|'i'|'s'|'x'|'w'|'D'} =:
    2987              : */
    2988              : 
    2989          392 : static void continuation (M2MetaError_errorBlock *eb, unsigned int *sym, unsigned int _sym_high, unsigned int bol)
    2990              : {
    2991          392 :   M2Debug_Assert (((*eb).ini < (*eb).len) && ((DynamicStrings_char ((*eb).in, (*eb).ini)) == '&'));
    2992          392 :   (*eb).ini += 1;
    2993          807 :   while (((*eb).ini < (*eb).len) && ((DynamicStrings_char ((*eb).in, (*eb).ini)) != '}'))
    2994              :     {
    2995          415 :       switch (DynamicStrings_char ((*eb).in, (*eb).ini))
    2996              :         {
    2997            0 :           case ':':
    2998            0 :             ifNonNulThen (eb, (const unsigned int *) sym, _sym_high);
    2999            0 :             (*eb).ini -= 1;
    3000            0 :             break;
    3001              : 
    3002            0 :           case '1':
    3003            0 :             M2Error_InternalError ((const char *) "incorrect format spec, expecting %1 rather than % spec 1", 56);
    3004            0 :             break;
    3005              : 
    3006            0 :           case '2':
    3007            0 :             M2Error_InternalError ((const char *) "incorrect format spec, expecting %2 rather than % spec 2", 56);
    3008            0 :             break;
    3009              : 
    3010            0 :           case '3':
    3011            0 :             M2Error_InternalError ((const char *) "incorrect format spec, expecting %3 rather than % spec 3", 56);
    3012            0 :             break;
    3013              : 
    3014            0 :           case '4':
    3015            0 :             M2Error_InternalError ((const char *) "incorrect format spec, expecting %4 rather than % spec 4", 56);
    3016            0 :             break;
    3017              : 
    3018            0 :           case 'i':
    3019            0 :             AddImportsHint (eb);
    3020            0 :             break;
    3021              : 
    3022          392 :           case 's':
    3023          392 :             SpellHint (eb, (const unsigned int *) sym, _sym_high, bol);
    3024          392 :             break;
    3025              : 
    3026            0 :           case 'x':
    3027            0 :             AddExportsHint (eb);
    3028            0 :             break;
    3029              : 
    3030            0 :           case 'w':
    3031            0 :             AddWithStackHint (eb);
    3032            0 :             break;
    3033              : 
    3034           23 :           case 'D':
    3035           23 :             FilterOnDefinitionModule (eb);
    3036           23 :             break;
    3037              : 
    3038              : 
    3039            0 :           default:
    3040            0 :             InternalFormat ((*eb), (const char *) "expecting one of [:1234isxw]", 28, 1870);
    3041              :             break;
    3042              :         }
    3043          415 :       (*eb).ini += 1;
    3044              :     }
    3045          392 :   if (((*eb).ini < (*eb).len) && ((DynamicStrings_char ((*eb).in, (*eb).ini)) != '}'))
    3046              :     {
    3047            0 :       (*eb).ini -= 1;
    3048              :     }
    3049          392 : }
    3050              : 
    3051              : 
    3052              : /*
    3053              :    percenttoken := '%' (
    3054              :                          '1'        % doOperand(1) %
    3055              :                              op
    3056              :                        | '2'        % doOperand(2) %
    3057              :                              op
    3058              :                        | '3'        % doOperand(3) %
    3059              :                              op
    3060              :                        | '4'        % doOperand(4) %
    3061              :                              op
    3062              :                        )
    3063              :                        } =:
    3064              : */
    3065              : 
    3066        42212 : static void percenttoken (M2MetaError_errorBlock *eb, const unsigned int *sym_, unsigned int _sym_high)
    3067              : {
    3068        42212 :   unsigned int sym[_sym_high+1];
    3069              : 
    3070              :   /* make a local copy of each unbounded array.  */
    3071        42212 :   memcpy (sym, sym_, (_sym_high+1) * sizeof (unsigned int));
    3072              : 
    3073        42212 :   if ((DynamicStrings_char ((*eb).in, (*eb).ini)) == '%')
    3074              :     {
    3075        42212 :       (*eb).ini += 1;
    3076        42212 :       switch (DynamicStrings_char ((*eb).in, (*eb).ini))
    3077              :         {
    3078        24873 :           case '1':
    3079        24873 :             (*eb).ini += 1;
    3080        24873 :             op (eb, (const unsigned int *) sym, _sym_high, 0);
    3081        24873 :             break;
    3082              : 
    3083        13595 :           case '2':
    3084        13595 :             (*eb).ini += 1;
    3085        13595 :             op (eb, (const unsigned int *) sym, _sym_high, 1);
    3086        13595 :             break;
    3087              : 
    3088         2052 :           case '3':
    3089         2052 :             (*eb).ini += 1;
    3090         2052 :             op (eb, (const unsigned int *) sym, _sym_high, 2);
    3091         2052 :             break;
    3092              : 
    3093          228 :           case '4':
    3094          228 :             (*eb).ini += 1;
    3095          228 :             op (eb, (const unsigned int *) sym, _sym_high, 3);
    3096          228 :             break;
    3097              : 
    3098              : 
    3099         1464 :           default:
    3100         1464 :             op (eb, (const unsigned int *) sym, _sym_high, 0);
    3101         1464 :             break;
    3102              :         }
    3103        42212 :       if (((*eb).ini < (*eb).len) && ((DynamicStrings_char ((*eb).in, (*eb).ini)) != '}'))
    3104              :         {
    3105            0 :           InternalFormat ((*eb), (const char *) "expecting to see }", 18, 1916);
    3106              :         }
    3107              :     }
    3108        42212 : }
    3109              : 
    3110              : 
    3111              : /*
    3112              :    IsPunct - returns TRUE if ch is a punctuation character.
    3113              : */
    3114              : 
    3115         9386 : static bool IsPunct (char ch)
    3116              : {
    3117         9386 :   return ((((((((ch == '.') || (ch == ',')) || (ch == ':')) || (ch == ';')) || (ch == '!')) || (ch == '(')) || (ch == ')')) || (ch == '[')) || (ch == ']');
    3118              :   /* static analysis guarentees a RETURN statement will be used before here.  */
    3119              :   __builtin_unreachable ();
    3120              : }
    3121              : 
    3122              : 
    3123              : /*
    3124              :    JoinSentances - join s onto eb.  It removes trailing
    3125              :                    spaces from eb if s starts with a punctuation
    3126              :                    character.
    3127              : */
    3128              : 
    3129         9588 : static void JoinSentances (M2MetaError_errorBlock *eb, DynamicStrings_String s)
    3130              : {
    3131         9588 :   if ((s != NULL) && ((DynamicStrings_Length (s)) > 0))
    3132              :     {
    3133         9386 :       if (IsPunct (DynamicStrings_char (s, 0)))
    3134              :         {
    3135          128 :           (*eb).out = DynamicStrings_RemoveWhitePostfix ((*eb).out);
    3136              :         }
    3137         9386 :       flushColor (eb);
    3138         9386 :       (*eb).out = DynamicStrings_ConCat ((*eb).out, s);
    3139         9386 :       (*eb).glyph = true;
    3140         9386 :       (*eb).quotes = false;
    3141              :     }
    3142         9588 : }
    3143              : 
    3144              : 
    3145              : /*
    3146              :    SpellHint -
    3147              : */
    3148              : 
    3149          392 : static void SpellHint (M2MetaError_errorBlock *eb, const unsigned int *sym_, unsigned int _sym_high, unsigned int bol)
    3150              : {
    3151          392 :   unsigned int sym[_sym_high+1];
    3152              : 
    3153              :   /* make a local copy of each unbounded array.  */
    3154          392 :   memcpy (sym, sym_, (_sym_high+1) * sizeof (unsigned int));
    3155              : 
    3156          392 :   if (bol <= _sym_high)
    3157              :     {
    3158              :       /* avoid gcc warning by using compound statement even if not strictly necessary.  */
    3159          392 :       if ((*eb).filterDef && (SymbolTable_IsDefImp (sym[bol])))
    3160              :         {
    3161           23 :           JoinSentances (eb, M2StackSpell_GetDefModuleSpellHint (sym[bol]));
    3162              :         }
    3163          369 :       else if (SymbolTable_IsUnknown (sym[bol]))
    3164              :         {
    3165              :           /* avoid dangling else.  */
    3166          243 :           JoinSentances (eb, M2StackSpell_GetSpellHint (sym[bol]));
    3167              :         }
    3168              :     }
    3169          392 : }
    3170              : 
    3171              : 
    3172              : /*
    3173              :    AddImportsHint -
    3174              : */
    3175              : 
    3176            0 : static void AddImportsHint (M2MetaError_errorBlock *eb)
    3177              : {
    3178            0 :   (*eb).importHint = true;
    3179            0 : }
    3180              : 
    3181              : 
    3182              : /*
    3183              :    AddExportsHint -
    3184              : */
    3185              : 
    3186            0 : static void AddExportsHint (M2MetaError_errorBlock *eb)
    3187              : {
    3188            0 :   (*eb).exportHint = true;
    3189            0 : }
    3190              : 
    3191              : 
    3192              : /*
    3193              :    AddWithStackHint -
    3194              : */
    3195              : 
    3196            0 : static void AddWithStackHint (M2MetaError_errorBlock *eb)
    3197              : {
    3198            0 :   (*eb).withStackHint = true;
    3199            0 : }
    3200              : 
    3201              : 
    3202              : /*
    3203              :    FilterOnDefinitionModule - turn on filtering and include all the definition modules.
    3204              : */
    3205              : 
    3206           23 : static void FilterOnDefinitionModule (M2MetaError_errorBlock *eb)
    3207              : {
    3208           23 :   (*eb).filterDef = true;
    3209           23 : }
    3210              : 
    3211              : 
    3212              : /*
    3213              :    changeColor - changes to color, c.
    3214              : */
    3215              : 
    3216         1182 : static void changeColor (M2MetaError_errorBlock *eb, M2MetaError_colorType c)
    3217              : {
    3218         1182 :   (*eb).currentCol = c;
    3219         1182 : }
    3220              : 
    3221              : 
    3222              : /*
    3223              :    shutdownColor - shutdown existing color if it exists.
    3224              : */
    3225              : 
    3226       105975 : static void shutdownColor (M2MetaError_errorBlock *eb)
    3227              : {
    3228       105975 :   if (((*eb).endCol != M2MetaError_unsetColor) && ((*eb).endCol != M2MetaError_noColor))
    3229              :     {
    3230       135782 :       (*eb).out = colorEnd ((*eb).out);
    3231        67891 :       (*eb).endCol = M2MetaError_noColor;
    3232              :     }
    3233       105975 : }
    3234              : 
    3235              : 
    3236              : /*
    3237              :    flushColor - flushes any outstanding color change.
    3238              : */
    3239              : 
    3240      1663533 : static void flushColor (M2MetaError_errorBlock *eb)
    3241              : {
    3242      1663533 :   if ((*eb).endCol != (*eb).currentCol)
    3243              :     {
    3244        76269 :       shutdownColor (eb);
    3245        76269 :       if ((*eb).endCol != (*eb).currentCol)
    3246              :         {
    3247        78694 :           emitColor (eb, (*eb).currentCol);
    3248        39347 :           (*eb).endCol = (*eb).currentCol;
    3249              :         }
    3250        76269 :       if ((*eb).beginCol == M2MetaError_unsetColor)
    3251              :         {
    3252        23350 :           (*eb).beginCol = (*eb).currentCol;
    3253              :         }
    3254              :     }
    3255      1663533 : }
    3256              : 
    3257              : 
    3258              : /*
    3259              :    emitColorGCC -
    3260              : */
    3261              : 
    3262        39347 : static void emitColorGCC (M2MetaError_errorBlock *eb, M2MetaError_colorType c)
    3263              : {
    3264        39347 :   switch (c)
    3265              :     {
    3266              :       case M2MetaError_unsetColor:
    3267              :         break;
    3268              : 
    3269          410 :       case M2MetaError_noColor:
    3270          410 :         (*eb).out = M2ColorString_endColor ((*eb).out);
    3271          410 :         break;
    3272              : 
    3273            0 :       case M2MetaError_quoteColor:
    3274            0 :         (*eb).out = M2ColorString_quoteColor ((*eb).out);
    3275            0 :         break;
    3276              : 
    3277            0 :       case M2MetaError_filenameColor:
    3278            0 :         (*eb).out = M2ColorString_filenameColor ((*eb).out);
    3279            0 :         break;
    3280              : 
    3281        11168 :       case M2MetaError_errorColor:
    3282        11168 :         (*eb).out = M2ColorString_errorColor ((*eb).out);
    3283        11168 :         break;
    3284              : 
    3285        26530 :       case M2MetaError_warningColor:
    3286        26530 :         (*eb).out = M2ColorString_warningColor ((*eb).out);
    3287        26530 :         break;
    3288              : 
    3289           57 :       case M2MetaError_noteColor:
    3290           57 :         (*eb).out = M2ColorString_noteColor ((*eb).out);
    3291           57 :         break;
    3292              : 
    3293         1182 :       case M2MetaError_keywordColor:
    3294         1182 :         (*eb).out = M2ColorString_locusColor ((*eb).out);
    3295         1182 :         break;
    3296              : 
    3297            0 :       case M2MetaError_locusColor:
    3298            0 :         (*eb).out = M2ColorString_locusColor ((*eb).out);
    3299            0 :         break;
    3300              : 
    3301            0 :       case M2MetaError_insertColor:
    3302            0 :         (*eb).out = M2ColorString_insertColor ((*eb).out);
    3303            0 :         break;
    3304              : 
    3305            0 :       case M2MetaError_deleteColor:
    3306            0 :         (*eb).out = M2ColorString_deleteColor ((*eb).out);
    3307            0 :         break;
    3308              : 
    3309            0 :       case M2MetaError_typeColor:
    3310            0 :         (*eb).out = M2ColorString_typeColor ((*eb).out);
    3311            0 :         break;
    3312              : 
    3313            0 :       case M2MetaError_range1Color:
    3314            0 :         (*eb).out = M2ColorString_range1Color ((*eb).out);
    3315            0 :         break;
    3316              : 
    3317            0 :       case M2MetaError_range2Color:
    3318            0 :         (*eb).out = M2ColorString_range2Color ((*eb).out);
    3319            0 :         break;
    3320              : 
    3321              : 
    3322            0 :       default:
    3323            0 :         CaseException ("/home/worker/buildworker/tiber-lcov/build/gcc/m2/gm2-compiler/M2MetaError.def", 20, 1);
    3324            0 :         __builtin_unreachable ();
    3325              :     }
    3326        39347 : }
    3327              : 
    3328              : 
    3329              : /*
    3330              :    emitColorTag -
    3331              : */
    3332              : 
    3333            0 : static void emitColorTag (M2MetaError_errorBlock *eb, M2MetaError_colorType c)
    3334              : {
    3335            0 :   DynamicStrings_String s;
    3336              : 
    3337            0 :   switch (c)
    3338              :     {
    3339            0 :       case M2MetaError_unsetColor:
    3340            0 :         s = DynamicStrings_InitString ((const char *) "<unset>", 7);
    3341            0 :         break;
    3342              : 
    3343            0 :       case M2MetaError_noColor:
    3344            0 :         s = DynamicStrings_InitString ((const char *) "<nocol>", 7);
    3345            0 :         stop ();
    3346            0 :         break;
    3347              : 
    3348            0 :       case M2MetaError_quoteColor:
    3349            0 :         s = DynamicStrings_InitString ((const char *) "<quote>", 7);
    3350            0 :         break;
    3351              : 
    3352            0 :       case M2MetaError_filenameColor:
    3353            0 :         s = DynamicStrings_InitString ((const char *) "<filename>", 10);
    3354            0 :         break;
    3355              : 
    3356            0 :       case M2MetaError_errorColor:
    3357            0 :         s = DynamicStrings_InitString ((const char *) "<error>", 7);
    3358            0 :         break;
    3359              : 
    3360            0 :       case M2MetaError_warningColor:
    3361            0 :         s = DynamicStrings_InitString ((const char *) "<warn>", 6);
    3362            0 :         break;
    3363              : 
    3364            0 :       case M2MetaError_noteColor:
    3365            0 :         s = DynamicStrings_InitString ((const char *) "<note>", 6);
    3366            0 :         break;
    3367              : 
    3368            0 :       case M2MetaError_keywordColor:
    3369            0 :         s = DynamicStrings_InitString ((const char *) "<key>", 5);
    3370            0 :         break;
    3371              : 
    3372            0 :       case M2MetaError_locusColor:
    3373            0 :         s = DynamicStrings_InitString ((const char *) "<locus>", 7);
    3374            0 :         break;
    3375              : 
    3376            0 :       case M2MetaError_insertColor:
    3377            0 :         s = DynamicStrings_InitString ((const char *) "<insert>", 8);
    3378            0 :         break;
    3379              : 
    3380            0 :       case M2MetaError_deleteColor:
    3381            0 :         s = DynamicStrings_InitString ((const char *) "<delete>", 8);
    3382            0 :         break;
    3383              : 
    3384            0 :       case M2MetaError_typeColor:
    3385            0 :         s = DynamicStrings_InitString ((const char *) "<type>", 6);
    3386            0 :         break;
    3387              : 
    3388            0 :       case M2MetaError_range1Color:
    3389            0 :         s = DynamicStrings_InitString ((const char *) "<range1>", 8);
    3390            0 :         break;
    3391              : 
    3392            0 :       case M2MetaError_range2Color:
    3393            0 :         s = DynamicStrings_InitString ((const char *) "<range2>", 8);
    3394            0 :         break;
    3395              : 
    3396              : 
    3397            0 :       default:
    3398            0 :         CaseException ("/home/worker/buildworker/tiber-lcov/build/gcc/m2/gm2-compiler/M2MetaError.def", 20, 1);
    3399            0 :         __builtin_unreachable ();
    3400              :     }
    3401            0 :   (*eb).out = DynamicStrings_ConCat ((*eb).out, DynamicStrings_Mark (s));
    3402            0 : }
    3403              : 
    3404              : 
    3405              : /*
    3406              :    emitColor - adds the appropriate color string to the output string.
    3407              : */
    3408              : 
    3409        39347 : static void emitColor (M2MetaError_errorBlock *eb, M2MetaError_colorType c)
    3410              : {
    3411        39347 :   if (ColorDebug)
    3412              :     {
    3413              :       emitColorTag (eb, c);
    3414              :     }
    3415              :   else
    3416              :     {
    3417        39347 :       emitColorGCC (eb, c);
    3418              :     }
    3419            0 : }
    3420              : 
    3421              : 
    3422              : /*
    3423              :    openQuote -
    3424              : */
    3425              : 
    3426        29706 : static DynamicStrings_String openQuote (DynamicStrings_String s)
    3427              : {
    3428        29706 :   if (ColorDebug)
    3429              :     {
    3430              :       return DynamicStrings_ConCat (s, DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "<openquote>", 11)));
    3431              :     }
    3432              :   else
    3433              :     {
    3434        29706 :       return M2ColorString_quoteOpen (s);
    3435              :     }
    3436              :   /* static analysis guarentees a RETURN statement will be used before here.  */
    3437              :   __builtin_unreachable ();
    3438              : }
    3439              : 
    3440              : 
    3441              : /*
    3442              :    closeQuote -
    3443              : */
    3444              : 
    3445        29706 : static DynamicStrings_String closeQuote (DynamicStrings_String s)
    3446              : {
    3447        29706 :   if (ColorDebug)
    3448              :     {
    3449              :       return DynamicStrings_ConCat (s, DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "<closequote>", 12)));
    3450              :     }
    3451              :   else
    3452              :     {
    3453        29706 :       return M2ColorString_quoteClose (s);
    3454              :     }
    3455              :   /* static analysis guarentees a RETURN statement will be used before here.  */
    3456              :   __builtin_unreachable ();
    3457              : }
    3458              : 
    3459              : 
    3460              : /*
    3461              :    colorEnd -
    3462              : */
    3463              : 
    3464        67891 : static DynamicStrings_String colorEnd (DynamicStrings_String s)
    3465              : {
    3466        67891 :   stop ();
    3467        67891 :   if (ColorDebug)
    3468              :     {
    3469              :       return DynamicStrings_ConCat (s, DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "<nocol>", 7)));
    3470              :     }
    3471              :   else
    3472              :     {
    3473        67891 :       return M2ColorString_endColor (s);
    3474              :     }
    3475              :   /* static analysis guarentees a RETURN statement will be used before here.  */
    3476              :   __builtin_unreachable ();
    3477              : }
    3478              : 
    3479              : 
    3480              : /*
    3481              :    copyChar - copies a character from in string to out string.
    3482              : */
    3483              : 
    3484      1516200 : static void copyChar (M2MetaError_errorBlock *eb)
    3485              : {
    3486      1516200 :   if ((*eb).ini < (*eb).len)
    3487              :     {
    3488      1516200 :       flushColor (eb);
    3489      1516200 :       checkMe ();
    3490      1516200 :       (*eb).glyph = true;
    3491      1516200 :       (*eb).out = x ((*eb).out, DynamicStrings_ConCatChar ((*eb).out, DynamicStrings_char ((*eb).in, (*eb).ini)));
    3492              :     }
    3493      1516200 : }
    3494              : 
    3495              : 
    3496              : /*
    3497              :    copyKeywordChar - copies a character from in string to out string
    3498              :                      it will convert the character to lower case if the
    3499              :                      -fm2-lower-case option was specified.
    3500              : */
    3501              : 
    3502         5097 : static void copyKeywordChar (M2MetaError_errorBlock *eb)
    3503              : {
    3504         5097 :   char ch;
    3505              : 
    3506         5097 :   if ((*eb).ini < (*eb).len)
    3507              :     {
    3508         5097 :       flushColor (eb);
    3509         5097 :       ch = DynamicStrings_char ((*eb).in, (*eb).ini);
    3510         5097 :       if (M2Options_LowerCaseKeywords)
    3511              :         {
    3512            0 :           ch = StrCase_Lower (ch);
    3513              :         }
    3514         5097 :       (*eb).glyph = true;
    3515         5097 :       (*eb).out = x ((*eb).out, DynamicStrings_ConCatChar ((*eb).out, ch));
    3516              :     }
    3517         5097 : }
    3518              : 
    3519              : 
    3520              : /*
    3521              :    percent := '%' anych           % copy anych %
    3522              :             =:
    3523              : */
    3524              : 
    3525            6 : static void percent (M2MetaError_errorBlock *eb, const unsigned int *sym_, unsigned int _sym_high)
    3526              : {
    3527            6 :   unsigned int sym[_sym_high+1];
    3528              : 
    3529              :   /* make a local copy of each unbounded array.  */
    3530            6 :   memcpy (sym, sym_, (_sym_high+1) * sizeof (unsigned int));
    3531              : 
    3532            6 :   if ((DynamicStrings_char ((*eb).in, (*eb).ini)) == '%')
    3533              :     {
    3534            6 :       (*eb).ini += 1;
    3535            6 :       if ((*eb).ini < (*eb).len)
    3536              :         {
    3537              :           /* avoid gcc warning by using compound statement even if not strictly necessary.  */
    3538            6 :           if ((DynamicStrings_char ((*eb).in, (*eb).ini)) == '<')
    3539              :             {
    3540              :               /* %< is a quotation symbol.  */
    3541            0 :               pushColor (eb);
    3542            0 :               (*eb).currentCol = M2MetaError_noColor;
    3543            0 :               flushColor (eb);
    3544            0 :               changeColor (eb, M2MetaError_quoteColor);
    3545            0 :               (*eb).endCol = M2MetaError_quoteColor;  /* the openQuote will change the color.  */
    3546              :               /* OutGlyphS performs a flush and we are emitting the open quote glyph.  */
    3547            0 :               OutGlyphS (eb, openQuote (DynamicStrings_InitString ((const char *) "", 0)));
    3548              :             }
    3549            6 :           else if ((DynamicStrings_char ((*eb).in, (*eb).ini)) == '>')
    3550              :             {
    3551              :               /* avoid dangling else.  */
    3552            0 :               OutGlyphS (eb, closeQuote (DynamicStrings_InitString ((const char *) "", 0)));
    3553            0 :               (*eb).endCol = M2MetaError_noColor;  /* closeQuote also turns off color.  */
    3554            0 :               popColor (eb);  /* closeQuote also turns off color.  */
    3555              :             }
    3556              :           else
    3557              :             {
    3558              :               /* avoid dangling else.  */
    3559            6 :               copyChar (eb);
    3560              :             }
    3561              :         }
    3562              :     }
    3563            6 : }
    3564              : 
    3565              : 
    3566              : /*
    3567              :    lbra := '{' [ '!' ] percenttoken '}' =:
    3568              : */
    3569              : 
    3570        42212 : static void lbra (M2MetaError_errorBlock *eb, const unsigned int *sym_, unsigned int _sym_high)
    3571              : {
    3572        42212 :   unsigned int sym[_sym_high+1];
    3573              : 
    3574              :   /* make a local copy of each unbounded array.  */
    3575        42212 :   memcpy (sym, sym_, (_sym_high+1) * sizeof (unsigned int));
    3576              : 
    3577        42212 :   if ((DynamicStrings_char ((*eb).in, (*eb).ini)) == '{')
    3578              :     {
    3579        42212 :       (*eb).positive = true;
    3580        42212 :       (*eb).ini += 1;
    3581        42212 :       if ((DynamicStrings_char ((*eb).in, (*eb).ini)) == '!')
    3582              :         {
    3583          128 :           (*eb).positive = false;
    3584          128 :           (*eb).ini += 1;
    3585              :         }
    3586        42212 :       if ((DynamicStrings_char ((*eb).in, (*eb).ini)) != '%')
    3587              :         {
    3588            0 :           InternalFormat ((*eb), (const char *) "expecting to see %", 18, 2271);
    3589              :         }
    3590        42212 :       percenttoken (eb, (const unsigned int *) sym, _sym_high);
    3591        42212 :       if (((*eb).ini < (*eb).len) && ((DynamicStrings_char ((*eb).in, (*eb).ini)) != '}'))
    3592              :         {
    3593            0 :           InternalFormat ((*eb), (const char *) "expecting to see }", 18, 2276);
    3594              :         }
    3595              :     }
    3596        42212 : }
    3597              : 
    3598              : 
    3599              : /*
    3600              :    lbra := '{' [ '!' ] percenttoken '}' =:
    3601              : */
    3602              : 
    3603            0 : static void stop (void)
    3604              : {
    3605            0 : }
    3606              : 
    3607              : 
    3608              : /*
    3609              :    lbra := '{' [ '!' ] percenttoken '}' =:
    3610              : */
    3611              : 
    3612            0 : static void checkMe (void)
    3613              : {
    3614            0 : }
    3615              : 
    3616              : 
    3617              : /*
    3618              :    dumpErrorType -
    3619              : */
    3620              : 
    3621            0 : static void dumpErrorType (M2MetaError_errorType e)
    3622              : {
    3623            0 :   switch (e)
    3624              :     {
    3625            0 :       case M2MetaError_none:
    3626            0 :         M2Printf_printf0 ((const char *) "none", 4);
    3627            0 :         break;
    3628              : 
    3629            0 :       case M2MetaError_error:
    3630            0 :         M2Printf_printf0 ((const char *) "error", 5);
    3631            0 :         break;
    3632              : 
    3633            0 :       case M2MetaError_warning:
    3634            0 :         M2Printf_printf0 ((const char *) "warning", 7);
    3635            0 :         break;
    3636              : 
    3637            0 :       case M2MetaError_note:
    3638            0 :         M2Printf_printf0 ((const char *) "note", 4);
    3639            0 :         break;
    3640              : 
    3641            0 :       case M2MetaError_chained:
    3642            0 :         M2Printf_printf0 ((const char *) "chained", 7);
    3643            0 :         break;
    3644              : 
    3645            0 :       case M2MetaError_aborta:
    3646            0 :         M2Printf_printf0 ((const char *) "abort", 5);
    3647            0 :         break;
    3648              : 
    3649              : 
    3650            0 :       default:
    3651            0 :         CaseException ("/home/worker/buildworker/tiber-lcov/build/gcc/m2/gm2-compiler/M2MetaError.def", 20, 1);
    3652            0 :         __builtin_unreachable ();
    3653              :     }
    3654            0 : }
    3655              : 
    3656              : 
    3657              : /*
    3658              :    dumpColorType -
    3659              : */
    3660              : 
    3661            0 : static void dumpColorType (M2MetaError_colorType c)
    3662              : {
    3663            0 :   switch (c)
    3664              :     {
    3665            0 :       case M2MetaError_unsetColor:
    3666            0 :         M2Printf_printf0 ((const char *) "unsetColor", 10);
    3667            0 :         break;
    3668              : 
    3669            0 :       case M2MetaError_noColor:
    3670            0 :         M2Printf_printf0 ((const char *) "noColor", 7);
    3671            0 :         break;
    3672              : 
    3673            0 :       case M2MetaError_quoteColor:
    3674            0 :         M2Printf_printf0 ((const char *) "quoteColor", 10);
    3675            0 :         break;
    3676              : 
    3677            0 :       case M2MetaError_filenameColor:
    3678            0 :         M2Printf_printf0 ((const char *) "filenameColor", 13);
    3679            0 :         break;
    3680              : 
    3681            0 :       case M2MetaError_errorColor:
    3682            0 :         M2Printf_printf0 ((const char *) "errorColor", 10);
    3683            0 :         break;
    3684              : 
    3685            0 :       case M2MetaError_warningColor:
    3686            0 :         M2Printf_printf0 ((const char *) "warningColor", 12);
    3687            0 :         break;
    3688              : 
    3689            0 :       case M2MetaError_noteColor:
    3690            0 :         M2Printf_printf0 ((const char *) "noteColor", 9);
    3691            0 :         break;
    3692              : 
    3693            0 :       case M2MetaError_keywordColor:
    3694            0 :         M2Printf_printf0 ((const char *) "keywordColor", 12);
    3695            0 :         break;
    3696              : 
    3697            0 :       case M2MetaError_locusColor:
    3698            0 :         M2Printf_printf0 ((const char *) "locusColor", 10);
    3699            0 :         break;
    3700              : 
    3701            0 :       case M2MetaError_insertColor:
    3702            0 :         M2Printf_printf0 ((const char *) "insertColor", 11);
    3703            0 :         break;
    3704              : 
    3705            0 :       case M2MetaError_deleteColor:
    3706            0 :         M2Printf_printf0 ((const char *) "deleteColor", 11);
    3707            0 :         break;
    3708              : 
    3709            0 :       case M2MetaError_typeColor:
    3710            0 :         M2Printf_printf0 ((const char *) "typeColor", 9);
    3711            0 :         break;
    3712              : 
    3713            0 :       case M2MetaError_range1Color:
    3714            0 :         M2Printf_printf0 ((const char *) "range1Color", 11);
    3715            0 :         break;
    3716              : 
    3717            0 :       case M2MetaError_range2Color:
    3718            0 :         M2Printf_printf0 ((const char *) "range2Color", 11);
    3719            0 :         break;
    3720              : 
    3721              : 
    3722            0 :       default:
    3723            0 :         CaseException ("/home/worker/buildworker/tiber-lcov/build/gcc/m2/gm2-compiler/M2MetaError.def", 20, 1);
    3724            0 :         __builtin_unreachable ();
    3725              :     }
    3726            0 : }
    3727              : 
    3728              : 
    3729              : /*
    3730              :    dump -
    3731              : 
    3732              : */
    3733              : 
    3734            0 : static void dump (M2MetaError_errorBlock eb)
    3735              : {
    3736            0 :   char ch;
    3737            0 :   unsigned int l;
    3738            0 :   int i;
    3739              : 
    3740            0 :   l = DynamicStrings_Length (eb.out);
    3741            0 :   M2Printf_printf0 ((const char *) "\\n\\nerrorBlock\\n", 16);
    3742            0 :   M2Printf_printf0 ((const char *) "\\ntype      = ", 14);
    3743            0 :   dumpErrorType (eb.type);
    3744            0 :   M2Printf_printf1 ((const char *) "\\nout       = |%s|", 18, (const unsigned char *) &eb.out, (sizeof (eb.out)-1));
    3745            0 :   M2Printf_printf1 ((const char *) "\\nin        = |%s|", 18, (const unsigned char *) &eb.in, (sizeof (eb.in)-1));
    3746            0 :   M2Printf_printf1 ((const char *) "\\nLength (out) = %d", 19, (const unsigned char *) &l, (sizeof (l)-1));
    3747            0 :   M2Printf_printf1 ((const char *) "\\nlen       = %d", 16, (const unsigned char *) &eb.len, (sizeof (eb.len)-1));
    3748            0 :   M2Printf_printf1 ((const char *) "\\nhighplus1 = %d", 16, (const unsigned char *) &eb.highplus1, (sizeof (eb.highplus1)-1));
    3749              :   /* printf1 ("
    3750              :   glyph     = %d", eb.glyph) ;
    3751              :    printf1 ("
    3752              :   quotes    = %d", eb.quotes) ;
    3753              :    printf1 ("
    3754              :   positive  = %d", eb.positive) ;
    3755              :   */
    3756            0 :   M2Printf_printf0 ((const char *) "\\nbeginCol  = ", 14);
    3757            0 :   dumpColorType (eb.beginCol);
    3758            0 :   M2Printf_printf0 ((const char *) "\\nendCol    = ", 14);
    3759            0 :   dumpColorType (eb.endCol);
    3760            0 :   M2Printf_printf0 ((const char *) "\\ncurrentCol = ", 15);
    3761            0 :   dumpColorType (eb.currentCol);
    3762            0 :   M2Printf_printf1 ((const char *) "\\nini        = %d", 17, (const unsigned char *) &eb.ini, (sizeof (eb.ini)-1));
    3763            0 :   if (eb.ini < eb.len)
    3764              :     {
    3765            0 :       ch = DynamicStrings_char (eb.in, eb.ini);
    3766            0 :       M2Printf_printf1 ((const char *) "\\ncurrent char = %c", 19, (const unsigned char *) &ch, (sizeof (ch)-1));
    3767            0 :       M2Printf_printf1 ((const char *) "\\n%s\\n", 6, (const unsigned char *) &eb.in, (sizeof (eb.in)-1));
    3768            0 :       i = 0;
    3769            0 :       while (i < eb.ini)
    3770              :         {
    3771            0 :           M2Printf_printf0 ((const char *) " ", 1);
    3772            0 :           i += 1;
    3773              :         }
    3774            0 :       M2Printf_printf0 ((const char *) "^\\n", 3);
    3775              :     }
    3776            0 :   M2Printf_printf0 ((const char *) "\\n", 2);
    3777            0 : }
    3778              : 
    3779              : 
    3780              : /*
    3781              :    ebnf := { percent
    3782              :              | lbra
    3783              :              | any                    % copy ch %
    3784              :            }
    3785              :          =:
    3786              : */
    3787              : 
    3788        22214 : static void ebnf (M2MetaError_errorBlock *eb, const unsigned int *sym_, unsigned int _sym_high)
    3789              : {
    3790        22214 :   M2MetaError_errorBlock nb;
    3791        22214 :   unsigned int sym[_sym_high+1];
    3792              : 
    3793              :   /* make a local copy of each unbounded array.  */
    3794        22214 :   memcpy (sym, sym_, (_sym_high+1) * sizeof (unsigned int));
    3795              : 
    3796        22214 :   if (Debugging)
    3797              :     {
    3798              :       M2Printf_printf0 ((const char *) "top of ebnf\\n", 13);
    3799              :       dump ((*eb));
    3800              :     }
    3801      1582918 :   while ((*eb).ini < (*eb).len)
    3802              :     {
    3803      1566316 :       if (Debugging)
    3804              :         {
    3805              :           M2Printf_printf0 ((const char *) "while loop ebnf\\n", 17);
    3806              :           dump ((*eb));
    3807              :         }
    3808      1566316 :       switch (DynamicStrings_char ((*eb).in, (*eb).ini))
    3809              :         {
    3810            0 :           case '!':
    3811            0 :             (*eb).positive = ! (*eb).positive;
    3812            0 :             break;
    3813              : 
    3814            6 :           case '%':
    3815            6 :             percent (eb, (const unsigned int *) sym, _sym_high);
    3816            6 :             break;
    3817              : 
    3818        42212 :           case '{':
    3819        42212 :             push (&nb, (*eb));
    3820        42212 :             lbra (&nb, (const unsigned int *) sym, _sym_high);
    3821        42212 :             pop (eb, &nb);
    3822        42212 :             if (((*eb).ini < (*eb).len) && ((DynamicStrings_char ((*eb).in, (*eb).ini)) != '}'))
    3823              :               {
    3824            0 :                 InternalFormat ((*eb), (const char *) "expecting to see }", 18, 2408);
    3825              :               }
    3826              :             break;
    3827              : 
    3828         5612 :           case '}':
    3829         5612 :             return;
    3830      1518486 :             break;
    3831              : 
    3832              : 
    3833      1518486 :           default:
    3834      1518486 :             if (((((IsWhite (DynamicStrings_char ((*eb).in, (*eb).ini))) && ((DynamicStrings_Length ((*eb).out)) > 0)) && (! (IsWhite (DynamicStrings_char ((*eb).out, -1))))) || (! (IsWhite (DynamicStrings_char ((*eb).in, (*eb).ini))))) && ((*eb).highplus1 > 0))
    3835              :               {
    3836      1516194 :                 (*eb).quotes = false;  /* copying a normal character, don't quote the result.  */
    3837      1516194 :                 copyChar (eb);  /* copying a normal character, don't quote the result.  */
    3838              :               }
    3839              :             break;
    3840              :         }
    3841      1560704 :       (*eb).ini += 1;
    3842              :     }
    3843        16602 :   (*eb).currentCol = M2MetaError_noColor;
    3844        16602 :   flushColor (eb);
    3845        16602 :   if (Debugging)
    3846              :     {
    3847              :       M2Printf_printf0 ((const char *) "finishing ebnf\\n", 16);
    3848              :       dump ((*eb));
    3849              :     }
    3850        22214 : }
    3851              : 
    3852              : 
    3853              : /*
    3854              :    isUniqueError - return TRUE if the symbol associated with the
    3855              :                    error block is unknown and we have seen the same
    3856              :                    token before.
    3857              : */
    3858              : 
    3859         2582 : static bool isUniqueError (M2MetaError_errorBlock *eb)
    3860              : {
    3861         2582 :   if (((*eb).symcause != SymbolTable_NulSym) && (SymbolTable_IsUnknown ((*eb).symcause)))
    3862              :     {
    3863              :       /* avoid gcc warning by using compound statement even if not strictly necessary.  */
    3864              :       /* A candidate for filtering.  */
    3865          222 :       if (FilterError_IsSymError (FilterUnknown, (*eb).symcause, (*eb).token))
    3866              :         {
    3867              :           /* Seen and reported about this unknown and token
    3868              :             location before.  */
    3869              :           return false;
    3870              :         }
    3871              :       else
    3872              :         {
    3873              :           /* Remember this combination.  */
    3874          203 :           FilterError_AddSymError (FilterUnknown, (*eb).symcause, (*eb).token);
    3875              :         }
    3876              :     }
    3877              :   return true;
    3878              :   /* static analysis guarentees a RETURN statement will be used before here.  */
    3879              :   __builtin_unreachable ();
    3880              : }
    3881              : 
    3882              : 
    3883              : /*
    3884              :    wrapErrors -
    3885              : */
    3886              : 
    3887          114 : static void wrapErrors (unsigned int tok, const char *m1_, unsigned int _m1_high, const char *m2_, unsigned int _m2_high, const unsigned int *sym_, unsigned int _sym_high)
    3888              : {
    3889          114 :   M2MetaError_errorBlock eb;
    3890          114 :   char m1[_m1_high+1];
    3891          114 :   char m2[_m2_high+1];
    3892          114 :   unsigned int sym[_sym_high+1];
    3893              : 
    3894              :   /* make a local copy of each unbounded array.  */
    3895          114 :   memcpy (m1, m1_, _m1_high+1);
    3896          114 :   memcpy (m2, m2_, _m2_high+1);
    3897          114 :   memcpy (sym, sym_, (_sym_high+1) * sizeof (unsigned int));
    3898              : 
    3899          114 :   initErrorBlock (&eb, DynamicStrings_InitString ((const char *) m1, _m1_high), (const unsigned int *) sym, _sym_high);
    3900          114 :   ebnf (&eb, (const unsigned int *) sym, _sym_high);
    3901          114 :   flushColor (&eb);
    3902          114 :   defaultError (&eb, tok);
    3903          114 :   if (isUniqueError (&eb))
    3904              :     {
    3905          114 :       lastRoot = eb.e;
    3906          114 :       M2Error_ErrorString (eb.e, DynamicStrings_Dup (eb.out));
    3907          114 :       killErrorBlock (&eb);
    3908          114 :       initErrorBlock (&eb, DynamicStrings_InitString ((const char *) m2, _m2_high), (const unsigned int *) sym, _sym_high);
    3909          114 :       eb.type = M2MetaError_chained;
    3910          114 :       ebnf (&eb, (const unsigned int *) sym, _sym_high);
    3911          114 :       flushColor (&eb);
    3912          114 :       defaultError (&eb, tok);
    3913          114 :       M2Error_ErrorString (eb.e, DynamicStrings_Dup (eb.out));
    3914              :     }
    3915              :   else
    3916              :     {
    3917            0 :       M2Error_KillError (&eb.e);
    3918              :     }
    3919          114 :   killErrorBlock (&eb);
    3920          114 : }
    3921              : 
    3922              : 
    3923              : /*
    3924              :    checkAbort - checks to see if the boolean flag seenAbort has been set,
    3925              :                 if so it flushes all existing errors and terminates.
    3926              : */
    3927              : 
    3928         2905 : static void checkAbort (void)
    3929              : {
    3930         2905 :   if (seenAbort)
    3931              :     {
    3932           92 :       M2Error_FlushWarnings ();
    3933           92 :       M2Error_FlushErrors ();
    3934              :     }
    3935         2813 : }
    3936              : 
    3937              : 
    3938              : /*
    3939              :    translate -
    3940              : */
    3941              : 
    3942            0 : static DynamicStrings_String translate (DynamicStrings_String m, DynamicStrings_String s, int *i, NameKey_Name name)
    3943              : {
    3944            0 :   int l;
    3945            0 :   char ch;
    3946              : 
    3947            0 :   l = DynamicStrings_Length (m);
    3948            0 :   while (((*i) >= 0) && ((*i) < l))
    3949              :     {
    3950            0 :       ch = DynamicStrings_char (m, (*i));
    3951            0 :       if ((ch == '%') && ((*i) < l))
    3952              :         {
    3953            0 :           (*i) += 1;
    3954            0 :           ch = DynamicStrings_char (m, (*i));
    3955            0 :           (*i) += 1;
    3956            0 :           if (ch == 'a')
    3957              :             {
    3958            0 :               s = DynamicStrings_ConCat (s, DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "%<", 2)));
    3959            0 :               s = DynamicStrings_ConCat (s, DynamicStrings_Mark (DynamicStrings_InitStringCharStar (NameKey_KeyToCharStar (name))));
    3960            0 :               s = DynamicStrings_ConCat (s, DynamicStrings_Mark (DynamicStrings_InitString ((const char *) "%>", 2)));
    3961            0 :               return s;
    3962              :             }
    3963            0 :           s = DynamicStrings_ConCatChar (s, '%');
    3964              :         }
    3965            0 :       s = DynamicStrings_ConCatChar (s, ch);
    3966            0 :       (*i) += 1;
    3967              :     }
    3968              :   return s;
    3969              :   /* static analysis guarentees a RETURN statement will be used before here.  */
    3970              :   __builtin_unreachable ();
    3971              : }
    3972              : 
    3973              : 
    3974              : /*
    3975              :    wrapString - return a string which has been formatted with the specifier codes.
    3976              :                 Color is disabled.  The result string is returned.
    3977              : */
    3978              : 
    3979        13475 : static DynamicStrings_String wrapString (DynamicStrings_String m, const unsigned int *sym_, unsigned int _sym_high)
    3980              : {
    3981        13475 :   M2MetaError_errorBlock eb;
    3982        13475 :   DynamicStrings_String s;
    3983        13475 :   bool old;
    3984        13475 :   unsigned int sym[_sym_high+1];
    3985              : 
    3986              :   /* make a local copy of each unbounded array.  */
    3987        13475 :   memcpy (sym, sym_, (_sym_high+1) * sizeof (unsigned int));
    3988              : 
    3989        26950 :   old = M2ColorString_SetEnableColor (false);
    3990        13475 :   initErrorBlock (&eb, DynamicStrings_Dup (m), (const unsigned int *) sym, _sym_high);
    3991        13475 :   eb.useError = false;
    3992        13475 :   ebnf (&eb, (const unsigned int *) sym, _sym_high);
    3993        13475 :   flushColor (&eb);
    3994        13475 :   s = DynamicStrings_Dup (eb.out);
    3995        13475 :   killErrorBlock (&eb);
    3996        13475 :   old = M2ColorString_SetEnableColor (old);
    3997        13475 :   return s;
    3998              :   /* static analysis guarentees a RETURN statement will be used before here.  */
    3999              :   __builtin_unreachable ();
    4000        13475 : }
    4001              : 
    4002            0 : extern "C" void M2MetaError_MetaError0 (const char *m_, unsigned int _m_high)
    4003              : {
    4004            0 :   char m[_m_high+1];
    4005              : 
    4006              :   /* make a local copy of each unbounded array.  */
    4007            0 :   memcpy (m, m_, _m_high+1);
    4008              : 
    4009            0 :   M2MetaError_MetaErrorT0 (M2LexBuf_GetTokenNo (), (const char *) m, _m_high);
    4010            0 : }
    4011              : 
    4012          419 : extern "C" void M2MetaError_MetaError1 (const char *m_, unsigned int _m_high, unsigned int s)
    4013              : {
    4014          419 :   char m[_m_high+1];
    4015              : 
    4016              :   /* make a local copy of each unbounded array.  */
    4017          419 :   memcpy (m, m_, _m_high+1);
    4018              : 
    4019          419 :   M2MetaError_MetaErrorT1 (M2LexBuf_GetTokenNo (), (const char *) m, _m_high, s);
    4020          419 : }
    4021              : 
    4022           30 : extern "C" void M2MetaError_MetaError2 (const char *m_, unsigned int _m_high, unsigned int s1, unsigned int s2)
    4023              : {
    4024           30 :   char m[_m_high+1];
    4025              : 
    4026              :   /* make a local copy of each unbounded array.  */
    4027           30 :   memcpy (m, m_, _m_high+1);
    4028              : 
    4029           30 :   M2MetaError_MetaErrorT2 (M2LexBuf_GetTokenNo (), (const char *) m, _m_high, s1, s2);
    4030           30 : }
    4031              : 
    4032            0 : extern "C" void M2MetaError_MetaError3 (const char *m_, unsigned int _m_high, unsigned int s1, unsigned int s2, unsigned int s3)
    4033              : {
    4034            0 :   char m[_m_high+1];
    4035              : 
    4036              :   /* make a local copy of each unbounded array.  */
    4037            0 :   memcpy (m, m_, _m_high+1);
    4038              : 
    4039            0 :   M2MetaError_MetaErrorT3 (M2LexBuf_GetTokenNo (), (const char *) m, _m_high, s1, s2, s3);
    4040            0 : }
    4041              : 
    4042            0 : extern "C" void M2MetaError_MetaError4 (const char *m_, unsigned int _m_high, unsigned int s1, unsigned int s2, unsigned int s3, unsigned int s4)
    4043              : {
    4044            0 :   char m[_m_high+1];
    4045              : 
    4046              :   /* make a local copy of each unbounded array.  */
    4047            0 :   memcpy (m, m_, _m_high+1);
    4048              : 
    4049            0 :   M2MetaError_MetaErrorT4 (M2LexBuf_GetTokenNo (), (const char *) m, _m_high, s1, s2, s3, s4);
    4050            0 : }
    4051              : 
    4052              : 
    4053              : /*
    4054              :    wrapErrors -
    4055              : */
    4056              : 
    4057           18 : extern "C" void M2MetaError_MetaErrors1 (const char *m1_, unsigned int _m1_high, const char *m2_, unsigned int _m2_high, unsigned int s)
    4058              : {
    4059           18 :   char m1[_m1_high+1];
    4060           18 :   char m2[_m2_high+1];
    4061              : 
    4062              :   /* make a local copy of each unbounded array.  */
    4063           18 :   memcpy (m1, m1_, _m1_high+1);
    4064           18 :   memcpy (m2, m2_, _m2_high+1);
    4065              : 
    4066           18 :   M2MetaError_MetaErrorsT1 (M2LexBuf_GetTokenNo (), (const char *) m1, _m1_high, (const char *) m2, _m2_high, s);
    4067           18 : }
    4068              : 
    4069              : 
    4070              : /*
    4071              :    wrapErrors -
    4072              : */
    4073              : 
    4074            6 : extern "C" void M2MetaError_MetaErrors2 (const char *m1_, unsigned int _m1_high, const char *m2_, unsigned int _m2_high, unsigned int s1, unsigned int s2)
    4075              : {
    4076            6 :   char m1[_m1_high+1];
    4077            6 :   char m2[_m2_high+1];
    4078              : 
    4079              :   /* make a local copy of each unbounded array.  */
    4080            6 :   memcpy (m1, m1_, _m1_high+1);
    4081            6 :   memcpy (m2, m2_, _m2_high+1);
    4082              : 
    4083            6 :   M2MetaError_MetaErrorsT2 (M2LexBuf_GetTokenNo (), (const char *) m1, _m1_high, (const char *) m2, _m2_high, s1, s2);
    4084            6 : }
    4085              : 
    4086              : 
    4087              : /*
    4088              :    wrapErrors -
    4089              : */
    4090              : 
    4091            0 : extern "C" void M2MetaError_MetaErrors3 (const char *m1_, unsigned int _m1_high, const char *m2_, unsigned int _m2_high, unsigned int s1, unsigned int s2, unsigned int s3)
    4092              : {
    4093            0 :   char m1[_m1_high+1];
    4094            0 :   char m2[_m2_high+1];
    4095              : 
    4096              :   /* make a local copy of each unbounded array.  */
    4097            0 :   memcpy (m1, m1_, _m1_high+1);
    4098            0 :   memcpy (m2, m2_, _m2_high+1);
    4099              : 
    4100            0 :   M2MetaError_MetaErrorsT3 (M2LexBuf_GetTokenNo (), (const char *) m1, _m1_high, (const char *) m2, _m2_high, s1, s2, s3);
    4101            0 : }
    4102              : 
    4103              : 
    4104              : /*
    4105              :    wrapErrors -
    4106              : */
    4107              : 
    4108            0 : extern "C" void M2MetaError_MetaErrors4 (const char *m1_, unsigned int _m1_high, const char *m2_, unsigned int _m2_high, unsigned int s1, unsigned int s2, unsigned int s3, unsigned int s4)
    4109              : {
    4110            0 :   char m1[_m1_high+1];
    4111            0 :   char m2[_m2_high+1];
    4112              : 
    4113              :   /* make a local copy of each unbounded array.  */
    4114            0 :   memcpy (m1, m1_, _m1_high+1);
    4115            0 :   memcpy (m2, m2_, _m2_high+1);
    4116              : 
    4117            0 :   M2MetaError_MetaErrorsT4 (M2LexBuf_GetTokenNo (), (const char *) m1, _m1_high, (const char *) m2, _m2_high, s1, s2, s3, s4);
    4118            0 : }
    4119              : 
    4120           63 : extern "C" void M2MetaError_MetaErrorT0 (unsigned int tok, const char *m_, unsigned int _m_high)
    4121              : {
    4122           63 :   char m[_m_high+1];
    4123              : 
    4124              :   /* make a local copy of each unbounded array.  */
    4125           63 :   memcpy (m, m_, _m_high+1);
    4126              : 
    4127           63 :   M2MetaError_MetaErrorStringT0 (tok, DynamicStrings_InitString ((const char *) m, _m_high));
    4128           63 : }
    4129              : 
    4130         1169 : extern "C" void M2MetaError_MetaErrorT1 (unsigned int tok, const char *m_, unsigned int _m_high, unsigned int s)
    4131              : {
    4132         1169 :   char m[_m_high+1];
    4133              : 
    4134              :   /* make a local copy of each unbounded array.  */
    4135         1169 :   memcpy (m, m_, _m_high+1);
    4136              : 
    4137         1169 :   M2MetaError_MetaErrorStringT1 (tok, DynamicStrings_InitString ((const char *) m, _m_high), s);
    4138         1169 : }
    4139              : 
    4140          541 : extern "C" void M2MetaError_MetaErrorT2 (unsigned int tok, const char *m_, unsigned int _m_high, unsigned int s1, unsigned int s2)
    4141              : {
    4142          541 :   char m[_m_high+1];
    4143              : 
    4144              :   /* make a local copy of each unbounded array.  */
    4145          541 :   memcpy (m, m_, _m_high+1);
    4146              : 
    4147          541 :   M2MetaError_MetaErrorStringT2 (tok, DynamicStrings_InitString ((const char *) m, _m_high), s1, s2);
    4148          541 : }
    4149              : 
    4150           60 : extern "C" void M2MetaError_MetaErrorT3 (unsigned int tok, const char *m_, unsigned int _m_high, unsigned int s1, unsigned int s2, unsigned int s3)
    4151              : {
    4152           60 :   char m[_m_high+1];
    4153              : 
    4154              :   /* make a local copy of each unbounded array.  */
    4155           60 :   memcpy (m, m_, _m_high+1);
    4156              : 
    4157           60 :   M2MetaError_MetaErrorStringT3 (tok, DynamicStrings_InitString ((const char *) m, _m_high), s1, s2, s3);
    4158           60 : }
    4159              : 
    4160           12 : extern "C" void M2MetaError_MetaErrorT4 (unsigned int tok, const char *m_, unsigned int _m_high, unsigned int s1, unsigned int s2, unsigned int s3, unsigned int s4)
    4161              : {
    4162           12 :   char m[_m_high+1];
    4163              : 
    4164              :   /* make a local copy of each unbounded array.  */
    4165           12 :   memcpy (m, m_, _m_high+1);
    4166              : 
    4167           12 :   M2MetaError_MetaErrorStringT4 (tok, DynamicStrings_InitString ((const char *) m, _m_high), s1, s2, s3, s4);
    4168           12 : }
    4169              : 
    4170              : 
    4171              : /*
    4172              :    wrapErrors -
    4173              : */
    4174              : 
    4175           18 : extern "C" void M2MetaError_MetaErrorsT1 (unsigned int tok, const char *m1_, unsigned int _m1_high, const char *m2_, unsigned int _m2_high, unsigned int s)
    4176              : {
    4177           18 :   typedef struct MetaErrorsT1__T4_a MetaErrorsT1__T4;
    4178              : 
    4179           18 :   struct MetaErrorsT1__T4_a { unsigned int array[0+1]; };
    4180           18 :   MetaErrorsT1__T4 sym;
    4181           18 :   char m1[_m1_high+1];
    4182           18 :   char m2[_m2_high+1];
    4183              : 
    4184              :   /* make a local copy of each unbounded array.  */
    4185           18 :   memcpy (m1, m1_, _m1_high+1);
    4186           18 :   memcpy (m2, m2_, _m2_high+1);
    4187              : 
    4188           18 :   sym.array[0] = s;
    4189           18 :   wrapErrors (tok, (const char *) m1, _m1_high, (const char *) m2, _m2_high, (const unsigned int *) &sym.array[0], 0);
    4190           18 : }
    4191              : 
    4192              : 
    4193              : /*
    4194              :    wrapErrors -
    4195              : */
    4196              : 
    4197           96 : extern "C" void M2MetaError_MetaErrorsT2 (unsigned int tok, const char *m1_, unsigned int _m1_high, const char *m2_, unsigned int _m2_high, unsigned int s1, unsigned int s2)
    4198              : {
    4199           96 :   typedef struct MetaErrorsT2__T5_a MetaErrorsT2__T5;
    4200              : 
    4201           96 :   struct MetaErrorsT2__T5_a { unsigned int array[1+1]; };
    4202           96 :   MetaErrorsT2__T5 sym;
    4203           96 :   char m1[_m1_high+1];
    4204           96 :   char m2[_m2_high+1];
    4205              : 
    4206              :   /* make a local copy of each unbounded array.  */
    4207           96 :   memcpy (m1, m1_, _m1_high+1);
    4208           96 :   memcpy (m2, m2_, _m2_high+1);
    4209              : 
    4210           96 :   sym.array[0] = s1;
    4211           96 :   sym.array[1] = s2;
    4212           96 :   wrapErrors (tok, (const char *) m1, _m1_high, (const char *) m2, _m2_high, (const unsigned int *) &sym.array[0], 1);
    4213           96 : }
    4214              : 
    4215              : 
    4216              : /*
    4217              :    wrapErrors -
    4218              : */
    4219              : 
    4220            0 : extern "C" void M2MetaError_MetaErrorsT3 (unsigned int tok, const char *m1_, unsigned int _m1_high, const char *m2_, unsigned int _m2_high, unsigned int s1, unsigned int s2, unsigned int s3)
    4221              : {
    4222            0 :   typedef struct MetaErrorsT3__T6_a MetaErrorsT3__T6;
    4223              : 
    4224            0 :   struct MetaErrorsT3__T6_a { unsigned int array[2+1]; };
    4225            0 :   MetaErrorsT3__T6 sym;
    4226            0 :   char m1[_m1_high+1];
    4227            0 :   char m2[_m2_high+1];
    4228              : 
    4229              :   /* make a local copy of each unbounded array.  */
    4230            0 :   memcpy (m1, m1_, _m1_high+1);
    4231            0 :   memcpy (m2, m2_, _m2_high+1);
    4232              : 
    4233            0 :   sym.array[0] = s1;
    4234            0 :   sym.array[1] = s2;
    4235            0 :   sym.array[2] = s3;
    4236            0 :   wrapErrors (tok, (const char *) m1, _m1_high, (const char *) m2, _m2_high, (const unsigned int *) &sym.array[0], 2);
    4237            0 : }
    4238              : 
    4239              : 
    4240              : /*
    4241              :    wrapErrors -
    4242              : */
    4243              : 
    4244            0 : extern "C" void M2MetaError_MetaErrorsT4 (unsigned int tok, const char *m1_, unsigned int _m1_high, const char *m2_, unsigned int _m2_high, unsigned int s1, unsigned int s2, unsigned int s3, unsigned int s4)
    4245              : {
    4246            0 :   typedef struct MetaErrorsT4__T7_a MetaErrorsT4__T7;
    4247              : 
    4248            0 :   struct MetaErrorsT4__T7_a { unsigned int array[3+1]; };
    4249            0 :   MetaErrorsT4__T7 sym;
    4250            0 :   char m1[_m1_high+1];
    4251            0 :   char m2[_m2_high+1];
    4252              : 
    4253              :   /* make a local copy of each unbounded array.  */
    4254            0 :   memcpy (m1, m1_, _m1_high+1);
    4255            0 :   memcpy (m2, m2_, _m2_high+1);
    4256              : 
    4257            0 :   sym.array[0] = s1;
    4258            0 :   sym.array[1] = s2;
    4259            0 :   sym.array[2] = s3;
    4260            0 :   sym.array[3] = s4;
    4261            0 :   wrapErrors (tok, (const char *) m1, _m1_high, (const char *) m2, _m2_high, (const unsigned int *) &sym.array[0], 3);
    4262            0 : }
    4263              : 
    4264              : 
    4265              : /*
    4266              :    wrapErrors -
    4267              : */
    4268              : 
    4269            0 : extern "C" void M2MetaError_MetaErrorString0 (DynamicStrings_String m)
    4270              : {
    4271            0 :   M2MetaError_MetaErrorStringT0 (M2LexBuf_GetTokenNo (), m);
    4272            0 : }
    4273              : 
    4274              : 
    4275              : /*
    4276              :    wrapErrors -
    4277              : */
    4278              : 
    4279            0 : extern "C" void M2MetaError_MetaErrorString1 (DynamicStrings_String m, unsigned int s)
    4280              : {
    4281            0 :   M2MetaError_MetaErrorStringT1 (M2LexBuf_GetTokenNo (), m, s);
    4282            0 : }
    4283              : 
    4284              : 
    4285              : /*
    4286              :    wrapErrors -
    4287              : */
    4288              : 
    4289            0 : extern "C" void M2MetaError_MetaErrorString2 (DynamicStrings_String m, unsigned int s1, unsigned int s2)
    4290              : {
    4291            0 :   M2MetaError_MetaErrorStringT2 (M2LexBuf_GetTokenNo (), m, s1, s2);
    4292            0 : }
    4293              : 
    4294              : 
    4295              : /*
    4296              :    wrapErrors -
    4297              : */
    4298              : 
    4299          132 : extern "C" void M2MetaError_MetaErrorString3 (DynamicStrings_String m, unsigned int s1, unsigned int s2, unsigned int s3)
    4300              : {
    4301          132 :   M2MetaError_MetaErrorStringT3 (M2LexBuf_GetTokenNo (), m, s1, s2, s3);
    4302          132 : }
    4303              : 
    4304              : 
    4305              : /*
    4306              :    wrapErrors -
    4307              : */
    4308              : 
    4309            0 : extern "C" void M2MetaError_MetaErrorString4 (DynamicStrings_String m, unsigned int s1, unsigned int s2, unsigned int s3, unsigned int s4)
    4310              : {
    4311            0 :   M2MetaError_MetaErrorStringT4 (M2LexBuf_GetTokenNo (), m, s1, s2, s3, s4);
    4312            0 : }
    4313              : 
    4314          437 : extern "C" void M2MetaError_MetaErrorStringT0 (unsigned int tok, DynamicStrings_String m)
    4315              : {
    4316          437 :   typedef struct MetaErrorStringT0__T8_a MetaErrorStringT0__T8;
    4317              : 
    4318          437 :   struct MetaErrorStringT0__T8_a { unsigned int array[0+1]; };
    4319          437 :   M2MetaError_errorBlock eb;
    4320          437 :   MetaErrorStringT0__T8 sym;
    4321              : 
    4322          437 :   sym.array[0] = SymbolTable_NulSym;
    4323          437 :   initErrorBlock (&eb, m, (const unsigned int *) &sym.array[0], 0);
    4324          437 :   ebnf (&eb, (const unsigned int *) &sym.array[0], 0);
    4325          437 :   flushColor (&eb);
    4326          437 :   defaultError (&eb, tok);
    4327          437 :   M2Error_ErrorString (eb.e, DynamicStrings_Dup (eb.out));
    4328          437 :   killErrorBlock (&eb);
    4329          437 :   checkAbort ();
    4330          425 : }
    4331              : 
    4332         1644 : extern "C" void M2MetaError_MetaErrorStringT1 (unsigned int tok, DynamicStrings_String m, unsigned int s)
    4333              : {
    4334         1644 :   typedef struct MetaErrorStringT1__T9_a MetaErrorStringT1__T9;
    4335              : 
    4336         1644 :   struct MetaErrorStringT1__T9_a { unsigned int array[0+1]; };
    4337         1644 :   M2MetaError_errorBlock eb;
    4338         1644 :   MetaErrorStringT1__T9 sym;
    4339              : 
    4340         1644 :   sym.array[0] = s;
    4341         1644 :   initErrorBlock (&eb, m, (const unsigned int *) &sym.array[0], 0);
    4342         1644 :   ebnf (&eb, (const unsigned int *) &sym.array[0], 0);
    4343         1644 :   flushColor (&eb);
    4344         1644 :   defaultError (&eb, tok);
    4345         1644 :   if (isUniqueError (&eb))
    4346              :     {
    4347         1625 :       M2Error_ErrorString (eb.e, DynamicStrings_Dup (eb.out));
    4348              :     }
    4349              :   else
    4350              :     {
    4351           19 :       M2Error_KillError (&eb.e);
    4352              :     }
    4353         1644 :   killErrorBlock (&eb);
    4354         1644 :   checkAbort ();
    4355         1564 : }
    4356              : 
    4357          620 : extern "C" void M2MetaError_MetaErrorStringT2 (unsigned int tok, DynamicStrings_String m, unsigned int s1, unsigned int s2)
    4358              : {
    4359          620 :   typedef struct MetaErrorStringT2__T10_a MetaErrorStringT2__T10;
    4360              : 
    4361          620 :   struct MetaErrorStringT2__T10_a { unsigned int array[1+1]; };
    4362          620 :   M2MetaError_errorBlock eb;
    4363          620 :   MetaErrorStringT2__T10 sym;
    4364              : 
    4365          620 :   sym.array[0] = s1;
    4366          620 :   sym.array[1] = s2;
    4367          620 :   initErrorBlock (&eb, m, (const unsigned int *) &sym.array[0], 1);
    4368          620 :   ebnf (&eb, (const unsigned int *) &sym.array[0], 1);
    4369          620 :   flushColor (&eb);
    4370          620 :   defaultError (&eb, tok);
    4371          620 :   if (isUniqueError (&eb))
    4372              :     {
    4373          620 :       M2Error_ErrorString (eb.e, DynamicStrings_Dup (eb.out));
    4374              :     }
    4375              :   else
    4376              :     {
    4377            0 :       M2Error_KillError (&eb.e);
    4378              :     }
    4379          620 :   killErrorBlock (&eb);
    4380          620 :   checkAbort ();
    4381          620 : }
    4382              : 
    4383          192 : extern "C" void M2MetaError_MetaErrorStringT3 (unsigned int tok, DynamicStrings_String m, unsigned int s1, unsigned int s2, unsigned int s3)
    4384              : {
    4385          192 :   typedef struct MetaErrorStringT3__T11_a MetaErrorStringT3__T11;
    4386              : 
    4387          192 :   struct MetaErrorStringT3__T11_a { unsigned int array[2+1]; };
    4388          192 :   M2MetaError_errorBlock eb;
    4389          192 :   MetaErrorStringT3__T11 sym;
    4390              : 
    4391          192 :   sym.array[0] = s1;
    4392          192 :   sym.array[1] = s2;
    4393          192 :   sym.array[2] = s3;
    4394          192 :   initErrorBlock (&eb, m, (const unsigned int *) &sym.array[0], 2);
    4395          192 :   eb.highplus1 = 2+1;
    4396          192 :   ebnf (&eb, (const unsigned int *) &sym.array[0], 2);
    4397          192 :   flushColor (&eb);
    4398          192 :   defaultError (&eb, tok);
    4399          192 :   if (isUniqueError (&eb))
    4400              :     {
    4401          192 :       M2Error_ErrorString (eb.e, DynamicStrings_Dup (eb.out));
    4402              :     }
    4403              :   else
    4404              :     {
    4405            0 :       M2Error_KillError (&eb.e);
    4406              :     }
    4407          192 :   killErrorBlock (&eb);
    4408          192 :   checkAbort ();
    4409          192 : }
    4410              : 
    4411           12 : extern "C" void M2MetaError_MetaErrorStringT4 (unsigned int tok, DynamicStrings_String m, unsigned int s1, unsigned int s2, unsigned int s3, unsigned int s4)
    4412              : {
    4413           12 :   typedef struct MetaErrorStringT4__T12_a MetaErrorStringT4__T12;
    4414              : 
    4415           12 :   struct MetaErrorStringT4__T12_a { unsigned int array[3+1]; };
    4416           12 :   M2MetaError_errorBlock eb;
    4417           12 :   MetaErrorStringT4__T12 sym;
    4418              : 
    4419           12 :   sym.array[0] = s1;
    4420           12 :   sym.array[1] = s2;
    4421           12 :   sym.array[2] = s3;
    4422           12 :   sym.array[3] = s4;
    4423           12 :   initErrorBlock (&eb, m, (const unsigned int *) &sym.array[0], 3);
    4424           12 :   ebnf (&eb, (const unsigned int *) &sym.array[0], 3);
    4425           12 :   flushColor (&eb);
    4426           12 :   defaultError (&eb, tok);
    4427           12 :   if (isUniqueError (&eb))
    4428              :     {
    4429           12 :       M2Error_ErrorString (eb.e, DynamicStrings_Dup (eb.out));
    4430              :     }
    4431              :   else
    4432              :     {
    4433            0 :       M2Error_KillError (&eb.e);
    4434              :     }
    4435           12 :   killErrorBlock (&eb);
    4436           12 :   checkAbort ();
    4437           12 : }
    4438              : 
    4439              : 
    4440              : /*
    4441              :    MetaErrorN1 -
    4442              : */
    4443              : 
    4444            0 : extern "C" void M2MetaError_MetaErrorN1 (const char *m_, unsigned int _m_high, NameKey_Name n)
    4445              : {
    4446            0 :   char m[_m_high+1];
    4447              : 
    4448              :   /* make a local copy of each unbounded array.  */
    4449            0 :   memcpy (m, m_, _m_high+1);
    4450              : 
    4451            0 :   M2MetaError_MetaErrorNT1 (M2LexBuf_GetTokenNo (), (const char *) m, _m_high, n);
    4452            0 : }
    4453              : 
    4454              : 
    4455              : /*
    4456              :    MetaErrorN2 -
    4457              : */
    4458              : 
    4459            0 : extern "C" void M2MetaError_MetaErrorN2 (const char *m_, unsigned int _m_high, NameKey_Name n1, NameKey_Name n2)
    4460              : {
    4461            0 :   char m[_m_high+1];
    4462              : 
    4463              :   /* make a local copy of each unbounded array.  */
    4464            0 :   memcpy (m, m_, _m_high+1);
    4465              : 
    4466            0 :   M2MetaError_MetaErrorNT2 (M2LexBuf_GetTokenNo (), (const char *) m, _m_high, n1, n2);
    4467            0 : }
    4468              : 
    4469              : 
    4470              : /*
    4471              :    MetaErrorNT0 - generate an error message at tok using format.
    4472              : */
    4473              : 
    4474            0 : extern "C" void M2MetaError_MetaErrorNT0 (unsigned int tok, const char *format_, unsigned int _format_high)
    4475              : {
    4476            0 :   char format[_format_high+1];
    4477              : 
    4478              :   /* make a local copy of each unbounded array.  */
    4479            0 :   memcpy (format, format_, _format_high+1);
    4480              : 
    4481            0 :   M2MetaError_MetaErrorStringT0 (tok, DynamicStrings_InitString ((const char *) format, _format_high));
    4482            0 : }
    4483              : 
    4484              : 
    4485              : /*
    4486              :    MetaErrorNT1 - generate an error message at tok using format and name.
    4487              :                   The format should contain %a for name substitution.
    4488              : */
    4489              : 
    4490            0 : extern "C" void M2MetaError_MetaErrorNT1 (unsigned int tok, const char *format_, unsigned int _format_high, NameKey_Name name)
    4491              : {
    4492            0 :   int i;
    4493            0 :   DynamicStrings_String s;
    4494            0 :   DynamicStrings_String fmt;
    4495            0 :   char format[_format_high+1];
    4496              : 
    4497              :   /* make a local copy of each unbounded array.  */
    4498            0 :   memcpy (format, format_, _format_high+1);
    4499              : 
    4500            0 :   i = 0;
    4501            0 :   fmt = DynamicStrings_InitString ((const char *) format, _format_high);
    4502            0 :   s = DynamicStrings_InitString ((const char *) "", 0);
    4503            0 :   s = translate (fmt, s, &i, name);
    4504            0 :   M2MetaError_MetaErrorStringT0 (tok, s);
    4505            0 :   fmt = DynamicStrings_KillString (fmt);
    4506            0 : }
    4507              : 
    4508            0 : extern "C" void M2MetaError_MetaErrorNT2 (unsigned int tok, const char *format_, unsigned int _format_high, NameKey_Name name1, NameKey_Name name2)
    4509              : {
    4510            0 :   int i;
    4511            0 :   DynamicStrings_String s;
    4512            0 :   DynamicStrings_String fmt;
    4513            0 :   char format[_format_high+1];
    4514              : 
    4515              :   /* make a local copy of each unbounded array.  */
    4516            0 :   memcpy (format, format_, _format_high+1);
    4517              : 
    4518              :   /* 
    4519              :    MetaErrorNT1 - generate an error message at tok using format, name1
    4520              :                   and name2.  The format should contain two occurances of %a
    4521              :                   for name substitution.
    4522              :   */
    4523            0 :   i = 0;
    4524            0 :   fmt = DynamicStrings_InitString ((const char *) format, _format_high);
    4525            0 :   s = DynamicStrings_InitString ((const char *) "", 0);
    4526            0 :   s = translate (fmt, s, &i, name1);
    4527            0 :   s = translate (fmt, s, &i, name2);
    4528            0 :   M2MetaError_MetaErrorStringT0 (tok, s);
    4529            0 :   fmt = DynamicStrings_KillString (fmt);
    4530            0 : }
    4531              : 
    4532              : 
    4533              : /*
    4534              :    wrapString - return a string which has been formatted with the specifier codes.
    4535              :                 Color is disabled.  The result string is returned.
    4536              : */
    4537              : 
    4538           18 : extern "C" DynamicStrings_String M2MetaError_MetaString0 (DynamicStrings_String m)
    4539              : {
    4540           18 :   typedef struct MetaString0__T13_a MetaString0__T13;
    4541              : 
    4542           18 :   struct MetaString0__T13_a { unsigned int array[0+1]; };
    4543           18 :   MetaString0__T13 sym;
    4544              : 
    4545           18 :   sym.array[0] = SymbolTable_NulSym;
    4546           18 :   return wrapString (m, (const unsigned int *) &sym.array[0], 0);
    4547              :   /* static analysis guarentees a RETURN statement will be used before here.  */
    4548              :   __builtin_unreachable ();
    4549              : }
    4550              : 
    4551              : 
    4552              : /*
    4553              :    wrapString - return a string which has been formatted with the specifier codes.
    4554              :                 Color is disabled.  The result string is returned.
    4555              : */
    4556              : 
    4557           66 : extern "C" DynamicStrings_String M2MetaError_MetaString1 (DynamicStrings_String m, unsigned int s)
    4558              : {
    4559           66 :   typedef struct MetaString1__T14_a MetaString1__T14;
    4560              : 
    4561           66 :   struct MetaString1__T14_a { unsigned int array[0+1]; };
    4562           66 :   MetaString1__T14 sym;
    4563              : 
    4564           66 :   sym.array[0] = s;
    4565           66 :   return wrapString (m, (const unsigned int *) &sym.array[0], 0);
    4566              :   /* static analysis guarentees a RETURN statement will be used before here.  */
    4567              :   __builtin_unreachable ();
    4568              : }
    4569              : 
    4570              : 
    4571              : /*
    4572              :    wrapString - return a string which has been formatted with the specifier codes.
    4573              :                 Color is disabled.  The result string is returned.
    4574              : */
    4575              : 
    4576          576 : extern "C" DynamicStrings_String M2MetaError_MetaString2 (DynamicStrings_String m, unsigned int s1, unsigned int s2)
    4577              : {
    4578          576 :   typedef struct MetaString2__T15_a MetaString2__T15;
    4579              : 
    4580          576 :   struct MetaString2__T15_a { unsigned int array[1+1]; };
    4581          576 :   MetaString2__T15 sym;
    4582              : 
    4583          576 :   sym.array[0] = s1;
    4584          576 :   sym.array[1] = s2;
    4585          576 :   return wrapString (m, (const unsigned int *) &sym.array[0], 1);
    4586              :   /* static analysis guarentees a RETURN statement will be used before here.  */
    4587              :   __builtin_unreachable ();
    4588              : }
    4589              : 
    4590              : 
    4591              : /*
    4592              :    wrapString - return a string which has been formatted with the specifier codes.
    4593              :                 Color is disabled.  The result string is returned.
    4594              : */
    4595              : 
    4596        12707 : extern "C" DynamicStrings_String M2MetaError_MetaString3 (DynamicStrings_String m, unsigned int s1, unsigned int s2, unsigned int s3)
    4597              : {
    4598        12707 :   typedef struct MetaString3__T16_a MetaString3__T16;
    4599              : 
    4600        12707 :   struct MetaString3__T16_a { unsigned int array[2+1]; };
    4601        12707 :   MetaString3__T16 sym;
    4602              : 
    4603        12707 :   sym.array[0] = s1;
    4604        12707 :   sym.array[1] = s2;
    4605        12707 :   sym.array[2] = s3;
    4606        12707 :   return wrapString (m, (const unsigned int *) &sym.array[0], 2);
    4607              :   /* static analysis guarentees a RETURN statement will be used before here.  */
    4608              :   __builtin_unreachable ();
    4609              : }
    4610              : 
    4611              : 
    4612              : /*
    4613              :    wrapString - return a string which has been formatted with the specifier codes.
    4614              :                 Color is disabled.  The result string is returned.
    4615              : */
    4616              : 
    4617          108 : extern "C" DynamicStrings_String M2MetaError_MetaString4 (DynamicStrings_String m, unsigned int s1, unsigned int s2, unsigned int s3, unsigned int s4)
    4618              : {
    4619          108 :   typedef struct MetaString4__T17_a MetaString4__T17;
    4620              : 
    4621          108 :   struct MetaString4__T17_a { unsigned int array[3+1]; };
    4622          108 :   MetaString4__T17 sym;
    4623              : 
    4624          108 :   sym.array[0] = s1;
    4625          108 :   sym.array[1] = s2;
    4626          108 :   sym.array[2] = s3;
    4627          108 :   sym.array[3] = s4;
    4628          108 :   return wrapString (m, (const unsigned int *) &sym.array[0], 3);
    4629              :   /* static analysis guarentees a RETURN statement will be used before here.  */
    4630              :   __builtin_unreachable ();
    4631              : }
    4632              : 
    4633              : 
    4634              : /*
    4635              :    MetaErrorDecl - if sym is a variable or parameter then generate a
    4636              :                    declaration error or warning message.  If error is
    4637              :                    FALSE then a warning is issued.
    4638              : */
    4639              : 
    4640          264 : extern "C" void M2MetaError_MetaErrorDecl (unsigned int sym, bool error)
    4641              : {
    4642          264 :   if ((sym != SymbolTable_NulSym) && (SymbolTable_IsVar (sym)))
    4643              :     {
    4644              :       /* avoid gcc warning by using compound statement even if not strictly necessary.  */
    4645          222 :       if (error)
    4646              :         {
    4647          222 :           if (SymbolTable_IsVarAParam (sym))
    4648              :             {
    4649            0 :               M2MetaError_MetaErrorT1 (SymbolTable_GetVarDeclFullTok (sym), (const char *) "parameter declaration for {%1ad}", 32, sym);
    4650              :             }
    4651              :           else
    4652              :             {
    4653          222 :               M2MetaError_MetaErrorT1 (SymbolTable_GetVarDeclFullTok (sym), (const char *) "variable declaration for {%1ad}", 31, sym);
    4654              :             }
    4655              :         }
    4656              :       else
    4657              :         {
    4658            0 :           if (SymbolTable_IsVarAParam (sym))
    4659              :             {
    4660            0 :               M2MetaError_MetaErrorT1 (SymbolTable_GetVarDeclFullTok (sym), (const char *) "parameter declaration for {%1Wad}", 33, sym);
    4661              :             }
    4662              :           else
    4663              :             {
    4664            0 :               M2MetaError_MetaErrorT1 (SymbolTable_GetVarDeclFullTok (sym), (const char *) "variable declaration for {%1Wad}", 32, sym);
    4665              :             }
    4666              :         }
    4667              :     }
    4668          264 : }
    4669              : 
    4670        14952 : extern "C" void _M2_M2MetaError_init (__attribute__((unused)) int argc, __attribute__((unused)) char *argv[], __attribute__((unused)) char *envp[])
    4671              : {
    4672        14952 :   lastRoot = static_cast<M2Error_Error> (NULL);
    4673        14952 :   lastColor = M2MetaError_noColor;
    4674        14952 :   seenAbort = false;
    4675        14952 :   outputStack = Indexing_InitIndex (1);
    4676        14952 :   dictionary = Indexing_InitIndex (1);
    4677        14952 :   freeEntry = NULL;
    4678        14952 :   FilterUnknown = FilterError_Init ();
    4679        14952 : }
    4680              : 
    4681            0 : extern "C" void _M2_M2MetaError_fini (__attribute__((unused)) int argc, __attribute__((unused)) char *argv[], __attribute__((unused)) char *envp[])
    4682              : {
    4683            0 : }
        

Generated by: LCOV version 2.4-beta

LCOV profile is generated on x86_64 machine using following configure options: configure --disable-bootstrap --enable-coverage=opt --enable-languages=c,c++,fortran,go,jit,lto,rust,m2 --enable-host-shared. GCC test suite is run with the built compiler.