(* keyc.def provides an interface to emitting symbols which. Copyright (C) 2016-2025 Free Software Foundation, Inc. Contributed by Gaius Mulley . This file is part of GNU Modula-2. GNU Modula-2 is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GNU Modula-2 is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GNU Modula-2; see the file COPYING3. If not see . *) DEFINITION MODULE keyc ; FROM mcPretty IMPORT pretty ; FROM DynamicStrings IMPORT String ; FROM decl IMPORT node ; FROM nameKey IMPORT Name ; (* useGccTree - indicate we have imported tree from gcctypes. *) PROCEDURE useGccTree ; (* useGccLocation - indicate we have imported tree from gcctypes. *) PROCEDURE useGccLocation ; (* useUnistd - need to use unistd.h call using open/close/read/write require this header. *) PROCEDURE useUnistd ; (* useThrow - use the throw function. *) PROCEDURE useThrow ; (* useStorage - indicate we have used storage. *) PROCEDURE useStorage ; (* useFree - indicate we have used free. *) PROCEDURE useFree ; (* useMalloc - indicate we have used malloc. *) PROCEDURE useMalloc ; (* useProc - indicate we have used proc. *) PROCEDURE useProc ; (* useTrue - indicate we have used TRUE. *) PROCEDURE useTrue ; (* useFalse - indicate we have used FALSE. *) PROCEDURE useFalse ; (* useNull - indicate we have used NULL. *) PROCEDURE useNull ; (* useMemcpy - indicate we have used memcpy. *) PROCEDURE useMemcpy ; (* useIntMin - indicate we have used INT_MIN. *) PROCEDURE useIntMin ; (* useUIntMin - indicate we have used UINT_MIN. *) PROCEDURE useUIntMin ; (* useLongMin - indicate we have used LONG_MIN. *) PROCEDURE useLongMin ; (* useULongMin - indicate we have used ULONG_MIN. *) PROCEDURE useULongMin ; (* useCharMin - indicate we have used CHAR_MIN. *) PROCEDURE useCharMin ; (* useUCharMin - indicate we have used UCHAR_MIN. *) PROCEDURE useUCharMin ; (* useIntMax - indicate we have used INT_MAX. *) PROCEDURE useIntMax ; (* useUIntMax - indicate we have used UINT_MAX. *) PROCEDURE useUIntMax ; (* useLongMax - indicate we have used LONG_MAX. *) PROCEDURE useLongMax ; (* useULongMax - indicate we have used ULONG_MAX. *) PROCEDURE useULongMax ; (* useCharMax - indicate we have used CHAR_MAX. *) PROCEDURE useCharMax ; (* useUCharMax - indicate we have used UChar_MAX. *) PROCEDURE useUCharMax ; (* useSize_t - indicate we have used size_t. *) PROCEDURE useSize_t ; (* useSSize_t - indicate we have used ssize_t. *) PROCEDURE useSSize_t ; (* useLabs - indicate we have used labs. *) PROCEDURE useLabs ; (* useAbs - indicate we have used abs. *) PROCEDURE useAbs ; (* useFabs - indicate we have used fabs. *) PROCEDURE useFabs ; (* useFabsl - indicate we have used fabsl. *) PROCEDURE useFabsl ; (* useException - use the exceptions module, mcrts. *) PROCEDURE useException ; (* useComplex - use the complex data type. *) PROCEDURE useComplex ; (* useM2RTS - indicate we have used M2RTS in the converted code. *) PROCEDURE useM2RTS ; (* useStrlen - indicate we have used strlen in the converted code. *) PROCEDURE useStrlen ; (* useCtype - indicate we have used the toupper function. *) PROCEDURE useCtype ; (* genDefs - generate definitions or includes for all macros and prototypes used. *) PROCEDURE genDefs (p: pretty) ; (* genConfigSystem - generate include files for config.h and system.h within the GCC framework. *) PROCEDURE genConfigSystem (p: pretty) ; (* enterScope - enter a scope defined by, n. *) PROCEDURE enterScope (n: node) ; (* leaveScope - leave the scope defined by, n. *) PROCEDURE leaveScope (n: node) ; (* cname - attempts to declare a symbol with name, n, in the current scope. If there is no conflict with the target language then NIL is returned, otherwise a mangled name is returned as a String. If scopes is FALSE then only the keywords and macros are detected for a clash (all scoping is ignored). *) PROCEDURE cname (n: Name; scopes: BOOLEAN) : String ; (* cnamen - attempts to declare a symbol with name, n, in the current scope. If there is no conflict with the target language then NIL is returned, otherwise a mangled name is returned as a Name If scopes is FALSE then only the keywords and macros are detected for a clash (all scoping is ignored). *) PROCEDURE cnamen (n: Name; scopes: BOOLEAN) : Name ; (* cp - include C++ keywords and standard declarations to avoid. *) PROCEDURE cp ; END keyc.