* [PATCH] Modula-2: merge proposal/review: 7/9 07.patch-set-05
@ 2022-05-18 13:45 Gaius Mulley
2022-05-18 20:46 ` Joseph Myers
0 siblings, 1 reply; 3+ messages in thread
From: Gaius Mulley @ 2022-05-18 13:45 UTC (permalink / raw)
To: gcc-patches
Hello,
this file contains:
5. all the driver code /gcc/m2.
==========================================
-----------------------------
New file: gcc/m2/ChangeLog
-----------------------------
2022-05-16 Gaius Mulley <gaius.mulley@southwales.ac.uk>
* plugin/m2rte.cc (alias.h, predict.h, tm.h)
(stringpool.h, toplev.h, basic-block.h, hash-table.h)
(vec.h, ggc.h, basic-block.h, tree-ssa-alias.h)
(internal-fn.h, gimple-fold.h, tree-eh.h, gimple-expr.h)
(is-a.h): Header file includes removed.
(plugin/m2rte$(exeext).so) Make dependent upon
$(GCC_HEADER_DEPENDENCIES_FOR_M2) and insn-addr-common.h.
2022-05-15 Gaius Mulley <gaius.mulley@southwales.ac.uk>
* m2/Make-lang.in (GCC_HEADER_DEPENDENCIES_FOR_M2): New define.
m2/gm2-gcc/%.o: Add GCC_HEADER_DEPENDENCIES_FOR_M2 as a dependent.
m2/gm2-lang.o: Add GCC_HEADER_DEPENDENCIES_FOR_M2 as a dependent.
m2/stor-layout.o: Add GCC_HEADER_DEPENDENCIES_FOR_M2 as a
dependent.
m2/m2pp.o: Add GCC_HEADER_DEPENDENCIES_FOR_M2 as a
dependent.
m2/gm2-gcc/rtegraph.o: Add GCC_HEADER_DEPENDENCIES_FOR_M2 as a
dependent.
c-family/m2pp.o: Add GCC_HEADER_DEPENDENCIES_FOR_M2 as a
dependent. Added new comments.
* m2/tools-src/calcpath: Remove -e option to realpath
to help the build on FreeBSD.
2022-05-13 Gaius Mulley <gaius.mulley@southwales.ac.uk>
* gm2-compiler/ppg.mod: Reduced the line wrap marker
to ensure texi pretty print rules do not cause overful box errors
in gm2 pdf documentation.
* gm2-libs-iso/SYSTEM.def: Shorten the comment lines
and parameter lists per line to avoid overful box errors.
* gm2-libs/Assertion.def: Shorten the comment lines
and parameter lists per line to avoid overful box errors.
* gm2-libs/Builtins.def: Shorten the comment lines
and parameter lists per line to avoid overful box errors.
* gm2-libs/Builtins.mod: Name change n to nbytes for memcpy,
memset and memmove.
* gm2-libs/DynamicStrings.def: Shorten the comment lines
and parameter lists per line to avoid overful box errors.
* gm2-libs/Environment.def: Shorten the comment lines
and parameter lists per line to avoid overful box errors.
* gm2-libs/FIO.def: Shorten the comment lines
and parameter lists per line to avoid overful box errors.
* gm2-libs/FIO.mod: Shorten the comment lines
and parameter lists per line to avoid overful box errors.
* gm2-libs/FormatStrings.def: Shorten the comment lines
and parameter lists per line to avoid overful box errors.
* gm2-libs/FpuIO.def: Shorten the comment lines
and parameter lists per line to avoid overful box errors.
* gm2-libs/GetOpt.def: Shorten the comment lines
and parameter lists per line to avoid overful box errors.
* gm2-libs/SYSTEM.def: Shorten the comment lines
and parameter lists per line to avoid overful box errors.
2022-05-05 Gaius Mulley <gaius.mulley@southwales.ac.uk>
* m2-link-support.h (GM2CC): Add CC1_SPEC to the cc1/cc1plus
invocation.
2022-05-04 Gaius Mulley <gaius.mulley@southwales.ac.uk>
* m2/m2-link-support.h (RM_IF_NOSAVETEMP) New macro.
(GM2CC) Use RM_IF_NOSAVETEMP on the assembler intermediate file.
(GM2LCC) Use RM_IF_NOSAVETEMP when creating an archive of the
application. (GEN_SCAFFOLD_SRC) Use RM_IF_NOSAVETEMP when
creating the scaffold source program. (M2LINK) Use
RM_IF_NOSAVETEMP when creating the assembler source name and use
RM_IF_NOSAVETEMP when creating the main program object.
2022-05-03 Gaius Mulley <gaius.mulley@southwales.ac.uk>
* Make-lang.in: Replaced sh with $(SHELL).
* gm2-lang.cc (gm2_langhook_post_options): Assign
main_input_filename. (gm2_parse_input_files) Assign
main_input_filename before every source filename is compiled.
2022-04-29 Gaius Mulley <gaius.mulley@southwales.ac.uk>
* m2/gm2-libs-ch/SysExceptions.c: Replace sigfpe with sigfpe_ to
avoid name clash with C signal infastructure.
* m2/mc-boot-ch/GSysExceptions.c: Replace sigfpe with sigfpe_ to
avoid name clash with C signal infastructure.
2022-04-28 Gaius Mulley <gaius.mulley@southwales.ac.uk>
* Make-lang.in: Added $(INCLUDES) to all %.o rules requiring gmp.h.
* mc-boot/Gkeyc.c: Rebuilt.
* mc/keyc.mod (initMacros): Add sigfpe to the list of names to be
avoided.
* m2/mc-boot/GEnvironment.c: Rebuilt.
* mc-boot/GEnvironment.h: Rebuilt.
* mc-boot/Gdecl.c: Rebuilt.
* mc-boot/Gkeyc.c: Rebuilt.
* mc-boot/Glibc.h: Rebuilt.
* mc/keyc.mod (initMacros): Add trunc to the list of functions to
be avoided.
2022-04-20 Gaius Mulley <gaius.mulley@southwales.ac.uk>
* tools-src/mklink.c (FindObject): Replace calls to sprintf
with calls to snprintf.
2022-03-02 Gaius Mulley <gaius.mulley@southwales.ac.uk>
* ChangeLog: Correct month for last commit.
2022-03-02 Gaius Mulley <gaius.mulley@southwales.ac.uk>
* ChangeLog-2021: (New file).
2022-03-02 Gaius Mulley <gaius.mulley@southwales.ac.uk>
* gm2-libs/Args.def (GetArg): Corrected formatting.
* gm2-libs/Environment.def (GetEnvironment): Renamed parameter
a to dest. (PutEnvironment) New procedure function.
* gm2-libs/Environment.mod (GetEnvironment): Renamed parameter
a to dest. (PutEnvironment) New procedure function.
* gm2-libs/SEnvironment.def (GetEnvironment): Renamed parameter
a to dest. (PutEnvironment) New procedure function.
* gm2-libs/SEnvironment.mod (GetEnvironment): Renamed parameter
a to dest. (PutEnvironment) New procedure function.
* gm2-libs/libc.def: Export list introduced identifiers putenv, execv.
* m2/m2-link-support.h: Ensure that the scaffold program
is not deleted if the user specified -fmakeinit.
* mc-boot-ch/Glibc.c (libc_putenv): New function.
* ChangeLog-2021: (New file).
* m2/m2-link-support.h (GEN_SCAFFOLD_SRC): New definition.
(M2LINK) use GEN_SCAFFOLD_SRC to generate the scaffold name.
* m2/configure.ac: Added rule to test for Python3. Added rule to
detect realpath.
2022-01-25 Gaius Mulley <gaius.mulley@southwales.ac.uk>
* gm2spec.cc: Replaced save_switch by fe_save_switch.
Replaced xputenv by fe_putenv. Replaced xgetenv by fe_getenv.
2022-01-23 Gaius Mulley <gaius.mulley@southwales.ac.uk>
* mc/decl.mod: (isZtypeEquivalent) New procedure function.
(isEquivalentType) New procedure function. (doExprCastC)
Added header comment and check for type equivalence.
(needsCast) Added header comment and skip types for
the formal and actual parameters before comparison.
Add check for actual = nil parameter. (checkSystemCast)
check for actual = nil being passed to a pointer parameter.
* mc-boot/GArgs.c: Rebuilt.
* mc-boot/GCmdArgs.c: Rebuilt.
* mc-boot/GDebug.c: Rebuilt.
* mc-boot/GDynamicStrings.c: Rebuilt.
* mc-boot/GEnvironment.c: Rebuilt.
* mc-boot/GFIO.c: Rebuilt.
* mc-boot/GFormatStrings.c: Rebuilt.
* mc-boot/GIO.c: Rebuilt.
* mc-boot/GIndexing.c: Rebuilt.
* mc-boot/GM2RTS.c: Rebuilt.
* mc-boot/GNumberIO.c: Rebuilt.
* mc-boot/GPushBackInput.c: Rebuilt.
* mc-boot/GRTExceptions.c: Rebuilt.
* mc-boot/GRTint.c: Rebuilt.
* mc-boot/GStdIO.c: Rebuilt.
* mc-boot/GStrCase.c: Rebuilt.
* mc-boot/GStrIO.c: Rebuilt.
* mc-boot/GStrLib.c: Rebuilt.
* mc-boot/GStringConvert.c: Rebuilt.
* mc-boot/GSysStorage.c: Rebuilt.
* mc-boot/GTimeString.c: Rebuilt.
* mc-boot/Galists.c: Rebuilt.
* mc-boot/Gdecl.c: Rebuilt.
* mc-boot/Gkeyc.c: Rebuilt.
* mc-boot/Glists.c: Rebuilt.
* mc-boot/GmcComment.c: Rebuilt.
* mc-boot/GmcError.c: Rebuilt.
* mc-boot/GmcLexBuf.c: Rebuilt.
* mc-boot/GmcMetaError.c: Rebuilt.
* mc-boot/GmcOptions.c: Rebuilt.
* mc-boot/GmcPretty.c: Rebuilt.
* mc-boot/GmcPrintf.c: Rebuilt.
* mc-boot/GmcSearch.c: Rebuilt.
* mc-boot/GmcStack.c: Rebuilt.
* mc-boot/Gmcp1.c: Rebuilt.
* mc-boot/Gmcp2.c: Rebuilt.
* mc-boot/Gmcp3.c: Rebuilt.
* mc-boot/Gmcp4.c: Rebuilt.
* mc-boot/Gmcp5.c: Rebuilt.
* mc-boot/GnameKey.c: Rebuilt.
* mc-boot/GsymbolKey.c: Rebuilt.
* mc-boot/Gvarargs.c: Rebuilt.
* mc-boot/Gwlists.c: Rebuilt.
2022-01-22 Gaius Mulley <gaius.mulley@southwales.ac.uk>
* mc/decl.mod: (doReturnC) Use getExprType rather than getType.
(getExprType) Added header comment.
* mc-boot/GCmdArgs.c: Rebuilt.
* mc-boot/GDynamicStrings.c: Rebuilt.
* mc-boot/GFIO.c: Rebuilt.
* mc-boot/GFormatStrings.c: Rebuilt.
* mc-boot/GFpuIO.c: Rebuilt.
* mc-boot/GIO.c: Rebuilt.
* mc-boot/GIndexing.c: Rebuilt.
* mc-boot/GM2EXCEPTION.c: Rebuilt.
* mc-boot/GM2RTS.c: Rebuilt.
* mc-boot/GNumberIO.c: Rebuilt.
* mc-boot/GPushBackInput.c: Rebuilt.
* mc-boot/GRTExceptions.c: Rebuilt.
* mc-boot/GRTint.c: Rebuilt.
* mc-boot/GSArgs.c: Rebuilt.
* mc-boot/GSFIO.c: Rebuilt.
* mc-boot/GStorage.c: Rebuilt.
* mc-boot/GStrCase.c: Rebuilt.
* mc-boot/GStrIO.c: Rebuilt.
* mc-boot/GStrLib.c: Rebuilt.
* mc-boot/GStringConvert.c: Rebuilt.
* mc-boot/GSysStorage.c: Rebuilt.
* mc-boot/Galists.c: Rebuilt.
* mc-boot/Gdecl.c: Rebuilt.
* mc-boot/Gkeyc.c: Rebuilt.
* mc-boot/Glists.c: Rebuilt.
* mc-boot/GmcComment.c: Rebuilt.
* mc-boot/GmcComp.c: Rebuilt.
* mc-boot/GmcError.c: Rebuilt.
* mc-boot/GmcFileName.c: Rebuilt.
* mc-boot/GmcLexBuf.c: Rebuilt.
* mc-boot/GmcMetaError.c: Rebuilt.
* mc-boot/GmcOptions.c: Rebuilt.
* mc-boot/GmcPreprocess.c: Rebuilt.
* mc-boot/GmcPretty.c: Rebuilt.
* mc-boot/GmcPrintf.c: Rebuilt.
* mc-boot/GmcSearch.c: Rebuilt.
* mc-boot/GmcStack.c: Rebuilt.
* mc-boot/GmcStream.c: Rebuilt.
* mc-boot/Gmcp1.c: Rebuilt.
* mc-boot/Gmcp2.c: Rebuilt.
* mc-boot/Gmcp3.c: Rebuilt.
* mc-boot/Gmcp4.c: Rebuilt.
* mc-boot/Gmcp5.c: Rebuilt.
* mc-boot/GnameKey.c: Rebuilt.
* mc-boot/GsymbolKey.c: Rebuilt.
* mc-boot/Gvarargs.c: Rebuilt.
* mc-boot/Gwlists.c: Rebuilt.
2022-01-22 Gaius Mulley <gaius.mulley@southwales.ac.uk>
* mc-boot-ch/Gabort.c: (New file).
* Make-lang.in: Use $(CXX) rather than $(CC). Use $(CC) rather
than $(HOSTCC) when compiling mcflex.c. Invoke $(M2LINK) with
--langc++ rather than --g++. (MCC_ARGS) changed to use
--olang=c++. (m2/ppg$(exeext)) link with Gabort.o and make
dependant upon Gabort.o. (m2/pg$(exeext)) link with Gabort.o
and make dependant upon Gabort.o. (m2/pge$(exeext)) link with
Gabort.o and make dependant upon Gabort.o. (gm2-check-examples)
Removed.
* gm2-ici/m2linemap.c: Introduce extern C for complete source
file.
* gm2-libs-ch/README: Reformatted.
* gm2-libs-ch/RTcodummy.c: Introduce extern C for complete source
file.
* gm2-libs-ch/RTintdummy.c: Introduce extern C for complete source
file.
* gm2-libs-ch/Selective.c: Introduce extern C for complete source
file.
* gm2-libs-ch/SysExceptions.c: Introduce extern C for complete
source file.
* gm2-libs-ch/UnixArgs.c: Introduce extern C for complete source
file.
* gm2-libs-ch/UnixArgs.c: Introduce extern C for complete source
file.
* gm2-libs-ch/cgetopt.c: Introduce extern C for complete source
file.
* gm2-libs-ch/choosetemp.c: Introduce extern C for complete source
file.
* gm2-libs-ch/dtoa.c: Introduce extern C for complete source
file.
* gm2-libs-ch/errno.c: Introduce extern C for complete source
file.
* gm2-libs-ch/host.c: Introduce extern C for complete source
file.
* gm2-libs-ch/ldtoa.c: Introduce extern C for complete source
file.
* gm2-libs-ch/termios.c: Introduce extern C for complete source
file.
* gm2-libs-ch/tools.c: Reformatted source.
* gm2-libs-ch/wrapc.c: Introduce extern C for complete source
file.
* gm2-libs-ch/xlibc.c: Introduce extern C for complete source
file.
* mc-boot-ch/GBuiltins.c: Introduce extern C for complete source
file.
* mc-boot-ch/GRTco.c: Introduce extern C for complete source
file.
* mc-boot-ch/GSYSTEM.c: Introduce extern C for complete source
file.
* mc-boot-ch/GSelective.c: Introduce extern C for complete source
file.
* mc-boot-ch/GSysExceptions.c: Introduce extern C for complete
source file.
* mc-boot-ch/GUnixArgs.c: Introduce extern C for complete source
file.
* mc-boot-ch/Gdtoa.c: Introduce extern C for complete source
file.
* mc-boot-ch/Gerrno.c: Introduce extern C for complete source
file.
* mc-boot-ch/Gldtoa.c: Introduce extern C for complete source
file.
* mc-boot-ch/Glibc.c: Introduce extern C for complete source
file.
* mc-boot-ch/Gmcrts.c: Removed fancy_abort. Introduce extern C for
complete source file.
* mc-boot-ch/Gtermios.c: Introduce extern C for complete source
file.
* mc-boot-ch/Gwrapc.c: Introduce extern C for complete source
file.
* mc-boot/GASCII.c: Rebuilt.
* mc-boot/GASCII.h: Rebuilt.
* mc-boot/GArgs.c: Rebuilt.
* mc-boot/GArgs.h: Rebuilt.
* mc-boot/GAssertion.c: Rebuilt.
* mc-boot/GAssertion.h: Rebuilt.
* mc-boot/GBreak.c: Rebuilt.
* mc-boot/GBreak.h: Rebuilt.
* mc-boot/GCOROUTINES.h: Rebuilt.
* mc-boot/GCmdArgs.c: Rebuilt.
* mc-boot/GCmdArgs.h: Rebuilt.
* mc-boot/GDebug.c: Rebuilt.
* mc-boot/GDebug.h: Rebuilt.
* mc-boot/GDynamicStrings.c: Rebuilt.
* mc-boot/GDynamicStrings.h: Rebuilt.
* mc-boot/GEnvironment.c: Rebuilt.
* mc-boot/GEnvironment.h: Rebuilt.
* mc-boot/GFIO.c: Rebuilt.
* mc-boot/GFIO.h: Rebuilt.
* mc-boot/GFormatStrings.c Rebuilt.:
* mc-boot/GFormatStrings.h: Rebuilt.
* mc-boot/GFpuIO.c: Rebuilt.
* mc-boot/GFpuIO.h: Rebuilt.
* mc-boot/GIO.c: Rebuilt.
* mc-boot/GIO.h: Rebuilt.
* mc-boot/GIndexing.c: Rebuilt.
* mc-boot/GIndexing.h: Rebuilt.
* mc-boot/GM2EXCEPTION.c: Rebuilt.
* mc-boot/GM2EXCEPTION.h: Rebuilt.
* mc-boot/GM2RTS.c: Rebuilt.
* mc-boot/GM2RTS.h: Rebuilt.
* mc-boot/GMemUtils.c: Rebuilt.
* mc-boot/GMemUtils.h: Rebuilt.
* mc-boot/GNumberIO.c: Rebuilt.
* mc-boot/GNumberIO.h: Rebuilt.
* mc-boot/GPushBackInput.c: Rebuilt.
* mc-boot/GPushBackInput.h: Rebuilt.
* mc-boot/GRTExceptions.c: Rebuilt.
* mc-boot/GRTExceptions.h: Rebuilt.
* mc-boot/GRTco.h: Rebuilt.
* mc-boot/GRTint.c: Rebuilt.
* mc-boot/GRTint.h: Rebuilt.
* mc-boot/GSArgs.c: Rebuilt.
* mc-boot/GSArgs.h: Rebuilt.
* mc-boot/GSFIO.c: Rebuilt.
* mc-boot/GSFIO.h: Rebuilt.
* mc-boot/GSYSTEM.h: Rebuilt.
* mc-boot/GSelective.h: Rebuilt.
* mc-boot/GStdIO.c: Rebuilt.
* mc-boot/GStdIO.h: Rebuilt.
* mc-boot/GStorage.c: Rebuilt.
* mc-boot/GStorage.h: Rebuilt.
* mc-boot/GStrCase.c: Rebuilt.
* mc-boot/GStrCase.h: Rebuilt.
* mc-boot/GStrIO.c: Rebuilt.
* mc-boot/GStrIO.h: Rebuilt.
* mc-boot/GStrLib.c: Rebuilt.
* mc-boot/GStrLib.h: Rebuilt.
* mc-boot/GStringConvert.c: Rebuilt.
* mc-boot/GStringConvert.h: Rebuilt.
* mc-boot/GSysExceptions.h: Rebuilt.
* mc-boot/GSysStorage.c: Rebuilt.
* mc-boot/GSysStorage.h: Rebuilt.
* mc-boot/GTimeString.c: Rebuilt.
* mc-boot/GTimeString.h: Rebuilt.
* mc-boot/GUnixArgs.h: Rebuilt.
* mc-boot/Galists.c: Rebuilt.
* mc-boot/Galists.h: Rebuilt.
* mc-boot/Gdecl.c: Rebuilt.
* mc-boot/Gdecl.h: Rebuilt.
* mc-boot/Gdtoa.h: Rebuilt.
* mc-boot/Gerrno.h: Rebuilt.
* mc-boot/Gkeyc.c: Rebuilt.
* mc-boot/Gkeyc.h: Rebuilt.
* mc-boot/Gldtoa.h: Rebuilt.
* mc-boot/Glibc.h: Rebuilt.
* mc-boot/Glibm.h: Rebuilt.
* mc-boot/Glists.c: Rebuilt.
* mc-boot/Glists.h: Rebuilt.
* mc-boot/GmcComment.c: Rebuilt.
* mc-boot/GmcComment.h: Rebuilt.
* mc-boot/GmcComp.c: Rebuilt.
* mc-boot/GmcComp.h: Rebuilt.
* mc-boot/GmcDebug.c: Rebuilt.
* mc-boot/GmcDebug.h: Rebuilt.
* mc-boot/GmcError.c: Rebuilt.
* mc-boot/GmcError.h: Rebuilt.
* mc-boot/GmcFileName.c: Rebuilt.
* mc-boot/GmcFileName.h: Rebuilt.
* mc-boot/GmcLexBuf.c: Rebuilt.
* mc-boot/GmcLexBuf.h: Rebuilt.
* mc-boot/GmcMetaError.c: Rebuilt.
* mc-boot/GmcMetaError.h: Rebuilt.
* mc-boot/GmcOptions.c: Rebuilt.
* mc-boot/GmcOptions.h: Rebuilt.
* mc-boot/GmcPreprocess.c: Rebuilt.
* mc-boot/GmcPreprocess.h: Rebuilt.
* mc-boot/GmcPretty.c: Rebuilt.
* mc-boot/GmcPretty.h: Rebuilt.
* mc-boot/GmcPrintf.c: Rebuilt.
* mc-boot/GmcPrintf.h: Rebuilt.
* mc-boot/GmcQuiet.c: Rebuilt.
* mc-boot/GmcQuiet.h: Rebuilt.
* mc-boot/GmcReserved.c: Rebuilt.
* mc-boot/GmcReserved.h: Rebuilt.
* mc-boot/GmcSearch.c: Rebuilt.
* mc-boot/GmcSearch.h: Rebuilt.
* mc-boot/GmcStack.c: Rebuilt.
* mc-boot/GmcStack.h: Rebuilt.
* mc-boot/GmcStream.c: Rebuilt.
* mc-boot/GmcStream.h: Rebuilt.
* mc-boot/Gmcflex.h: Rebuilt.
* mc-boot/Gmcp1.c: Rebuilt.
* mc-boot/Gmcp1.h: Rebuilt.
* mc-boot/Gmcp2.c: Rebuilt.
* mc-boot/Gmcp2.h: Rebuilt.
* mc-boot/Gmcp3.c: Rebuilt.
* mc-boot/Gmcp3.h: Rebuilt.
* mc-boot/Gmcp4.c: Rebuilt.
* mc-boot/Gmcp4.h: Rebuilt.
* mc-boot/Gmcp5.c: Rebuilt.
* mc-boot/Gmcp5.h: Rebuilt.
* mc-boot/GnameKey.c: Rebuilt.
* mc-boot/GnameKey.h: Rebuilt.
* mc-boot/GsymbolKey.c: Rebuilt.
* mc-boot/GsymbolKey.h: Rebuilt.
* mc-boot/Gtermios.h: Rebuilt.
* mc-boot/Gtop.c: Rebuilt.
* mc-boot/Gvarargs.c: Rebuilt.
* mc-boot/Gvarargs.h: Rebuilt.
* mc-boot/Gwlists.c: Rebuilt.
* mc-boot/Gwlists.h: Rebuilt.
* mc-boot/Gwrapc.h: Rebuilt.
* mc/decl.mod: (returnT) scope field added. (makeReturn)
initialize scope field. (doReturnC) check scope field and
generate error if expression exists and no return type specified.
Call doExprCastC to cast the return expression.
(outDefC) Call keyc.genConfigSystem before entering extern C
block. (outImpC) Call keyc.genConfigSystem prior to keyc.genDefs.
(outModuleC) Call keyc.genConfigSystem prior to keyc.genDefs.
* mc/keyc.def: (genConfigSystem) exported.
* mc/varargs.mod: (copy) Rewritten pointer arithmetic to allow for
Modula-2 and translated C++ versions to compile cleanly.
* tools-src/mklink.c: Replace option --gcc with --langc. Replace
option --g++ with --langc++.
2022-01-18 Gaius Mulley <gaius.mulley@southwales.ac.uk>
* Make-lang.in: (gm2spec.o) Use gm2spec.cc source
file.
(plugin/m2rte$(exeext).so) Use m2/plugin/m2rte.cc
source file.
(m2/gm2-gcc/%.o) Use .cc rather than .c source files.
(m2/stor-layout.o) Build from stor-layout.cc rather than
stor-layout.c.
* config-lang.in: Renamed all .c files to .cc files.
* gm2-gcc/init.cc: Remamed from m2/gm2-gcc/init.c.
* gm2-gcc/init.h: Summary name change.
* gm2-gcc/m2assert.cc: Remamed from
m2/gm2-gcc/m2assert.c.
* gm2-gcc/m2assert.h: Summary name change.
* gm2-gcc/m2block.cc: Renamed from
m2/gm2-gcc/m2block.c.
* gm2-gcc/m2block.def: Summary name change.
* gcc/m2/gm2-gcc/m2block.h: Summary name change.
* gm2-gcc/m2builtins.cc: Renamed from
m2/gm2-gcc/m2builtins.c.
* gm2-gcc/m2builtins.def: Summary name change.
* gm2-gcc/m2builtins.h: Summary name change.
* gm2-gcc/m2color.cc: Renamed from
m2/gm2-gcc/m2color.c.
* gm2-gcc/m2convert.cc: Renamed from
m2/gm2-gcc/m2convert.c.
* gm2-gcc/m2convert.def: Summary name change.
* gm2-gcc/m2convert.h: Summary name change.
* gm2-gcc/m2decl.cc: Renamed from m2/gm2-gcc/m2decl.c.
* gm2-gcc/m2decl.def: Summary name change.
* gm2-gcc/m2decl.h: Summary name change.
* gm2-gcc/m2except.cc: Renamed from
m2/gm2-gcc/m2except.c.
* gm2-gcc/m2except.h: Summary name change.
* gm2-gcc/m2expr.cc: Renamed from m2/gm2-gcc/m2expr.c.
* gm2-gcc/m2expr.def: Summary name change.
* gm2-gcc/m2expr.h: Summary name change.
* gm2-gcc/m2linemap.cc: Renamed from
m2/gm2-gcc/m2linemap.c.
* gm2-gcc/m2linemap.h: Summary name change.
* gm2-gcc/m2misc.cc: Renamed from m2/gm2-gcc/m2misc.c.
* gm2-gcc/m2misc.def: Summary name change.
* gm2-gcc/m2misc.h: Summary name change.
* gm2-gcc/m2statement.cc: Renamed from
m2/gm2-gcc/m2statement.c.
* gm2-gcc/m2statement.def: Summary name change.
* gm2-gcc/m2statement.h: Summary name change.
* gm2-gcc/m2top.cc: Renamed from m2/gm2-gcc/m2top.c.
* gm2-gcc/m2top.def: Summary name change.
* gm2-gcc/m2top.h: Summary name change.
* gm2-gcc/m2tree.cc: Renamed from m2/gm2-gcc/m2tree.c.
* gm2-gcc/m2tree.def: Summary name change.
* gm2-gcc/m2tree.h: Summary name change.
* gm2-gcc/m2treelib.cc: Renamed from
m2/gm2-gcc/m2treelib.c.
* gm2-gcc/m2treelib.def: Summary name change.
* gm2-gcc/m2treelib.h: Summary name change.
* gm2-gcc/m2type.cc: Renamed from m2/gm2-gcc/m2type.c.
* gm2-gcc/m2type.def: Summary name change.
* gm2-gcc/m2type.h: Summary name change.
* gm2-gcc/rtegraph.cc: Renamed from
m2/gm2-gcc/rtegraph.c.
* gm2-lang.cc: Renamed from m2/gm2-lang.c.
* gm2spec.cc: Renamed from m2/gm2spec.c.
* plugin/m2rte.cc: Renamed from m2/plugin/m2rte.c.
2022-01-18 Gaius Mulley <gaius.mulley@southwales.ac.uk>
* COPYING.FDL: Update copyright notice dates.
* COPYING.RUNTIME: Update copyright notice dates.
* Make-lang.in: Update copyright notice dates.
* bnf/gm2l.bnf: Update copyright notice dates.
* bnf/gm2m.bnf: Update copyright notice dates.
* bnf/m2-1.bnf: Update copyright notice dates.
* bnf/m2-2.bnf: Update copyright notice dates.
* bnf/m2-3.bnf: Update copyright notice dates.
* bnf/m2-c.bnf: Update copyright notice dates.
* bnf/m2-h.bnf: Update copyright notice dates.
* bnf/m2.bnf: Update copyright notice dates.
* bnf/mc-1.bnf: Update copyright notice dates.
* bnf/mc-2.bnf: Update copyright notice dates.
* bnf/mc-3.bnf: Update copyright notice dates.
* bnf/mc-4.bnf: Update copyright notice dates.
* bnf/mc-5.bnf: Update copyright notice dates.
* config-lang.in: Update copyright notice dates.
* configure.ac: Update copyright notice dates.
* gm2-compiler/CLexBuf.def: Update copyright notice dates.
* gm2-compiler/CLexBuf.mod: Update copyright notice dates.
* gm2-compiler/FifoQueue.def: Update copyright notice dates.
* gm2-compiler/FifoQueue.mod: Update copyright notice dates.
* gm2-compiler/Lists.def: Update copyright notice dates.
* gm2-compiler/Lists.mod: Update copyright notice dates.
* gm2-compiler/M2ALU.def: Update copyright notice dates.
* gm2-compiler/M2ALU.mod: Update copyright notice dates.
* gm2-compiler/M2AsmUtil.def: Update copyright notice dates.
* gm2-compiler/M2AsmUtil.mod: Update copyright notice dates.
* gm2-compiler/M2Base.def: Update copyright notice dates.
* gm2-compiler/M2Base.mod: Update copyright notice dates.
* gm2-compiler/M2BasicBlock.def: Update copyright notice dates.
* gm2-compiler/M2BasicBlock.mod: Update copyright notice dates.
* gm2-compiler/M2Batch.def: Update copyright notice dates.
* gm2-compiler/M2Batch.mod: Update copyright notice dates.
* gm2-compiler/M2Bitset.def: Update copyright notice dates.
* gm2-compiler/M2Bitset.mod: Update copyright notice dates.
* gm2-compiler/M2CaseList.def: Update copyright notice dates.
* gm2-compiler/M2CaseList.mod: Update copyright notice dates.
* gm2-compiler/M2Check.def: Update copyright notice dates.
* gm2-compiler/M2Check.mod: Update copyright notice dates.
* gm2-compiler/M2Code.def: Update copyright notice dates.
* gm2-compiler/M2Code.mod: Update copyright notice dates.
* gm2-compiler/M2ColorString.def: Update copyright notice dates.
* gm2-compiler/M2ColorString.mod: Update copyright notice dates.
* gm2-compiler/M2Comp.def: Update copyright notice dates.
* gm2-compiler/M2Comp.mod: Update copyright notice dates.
* gm2-compiler/M2Configure.def: Update copyright notice dates.
* gm2-compiler/M2Configure.mod: Update copyright notice dates.
* gm2-compiler/M2Const.def: Update copyright notice dates.
* gm2-compiler/M2Const.mod: Update copyright notice dates.
* gm2-compiler/M2Debug.def: Update copyright notice dates.
* gm2-compiler/M2Debug.mod: Update copyright notice dates.
* gm2-compiler/M2DebugStack.def: Update copyright notice dates.
* gm2-compiler/M2DebugStack.mod: Update copyright notice dates.
* gm2-compiler/M2Defaults.def: Update copyright notice dates.
* gm2-compiler/M2Defaults.mod: Update copyright notice dates.
* gm2-compiler/M2Depth.def: Update copyright notice dates.
* gm2-compiler/M2Depth.mod: Update copyright notice dates.
* gm2-compiler/M2DriverOptions.def: Update copyright notice dates.
* gm2-compiler/M2DriverOptions.mod: Update copyright notice dates.
* gm2-compiler/M2Emit.def: Update copyright notice dates.
* gm2-compiler/M2Emit.mod: Update copyright notice dates.
* gm2-compiler/M2Error.def: Update copyright notice dates.
* gm2-compiler/M2Error.mod: Update copyright notice dates.
* gm2-compiler/M2EvalSym.def: Update copyright notice dates.
* gm2-compiler/M2FileName.def: Update copyright notice dates.
* gm2-compiler/M2FileName.mod: Update copyright notice dates.
* gm2-compiler/M2GCCDeclare.def: Update copyright notice dates.
* gm2-compiler/M2GCCDeclare.mod: Update copyright notice dates.
* gm2-compiler/M2GenGCC.def: Update copyright notice dates.
* gm2-compiler/M2GenGCC.mod: Update copyright notice dates.
* gm2-compiler/M2Lex.def: Update copyright notice dates.
* gm2-compiler/M2Lex.mod: Update copyright notice dates.
* gm2-compiler/M2LexBuf.def: Update copyright notice dates.
* gm2-compiler/M2LexBuf.mod: Update copyright notice dates.
* gm2-compiler/M2MetaError.def: Update copyright notice dates.
* gm2-compiler/M2MetaError.mod: Update copyright notice dates.
* gm2-compiler/M2Optimize.def: Update copyright notice dates.
* gm2-compiler/M2Optimize.mod: Update copyright notice dates.
* gm2-compiler/M2Options.def: Update copyright notice dates.
* gm2-compiler/M2Options.mod: Update copyright notice dates.
* gm2-compiler/M2Pass.def: Update copyright notice dates.
* gm2-compiler/M2Pass.mod: Update copyright notice dates.
* gm2-compiler/M2Preprocess.def: Update copyright notice dates.
* gm2-compiler/M2Preprocess.mod: Update copyright notice dates.
* gm2-compiler/M2Printf.def: Update copyright notice dates.
* gm2-compiler/M2Printf.mod: Update copyright notice dates.
* gm2-compiler/M2Quads.def: Update copyright notice dates.
* gm2-compiler/M2Quads.mod: Update copyright notice dates.
* gm2-compiler/M2Quiet.def: Update copyright notice dates.
* gm2-compiler/M2Quiet.mod: Update copyright notice dates.
* gm2-compiler/M2Range.def: Update copyright notice dates.
* gm2-compiler/M2Range.mod: Update copyright notice dates.
* gm2-compiler/M2Reserved.def: Update copyright notice dates.
* gm2-compiler/M2Reserved.mod: Update copyright notice dates.
* gm2-compiler/M2SSA.mod: Update copyright notice dates.
* gm2-compiler/M2Scope.def: Update copyright notice dates.
* gm2-compiler/M2Scope.mod: Update copyright notice dates.
* gm2-compiler/M2Search.def: Update copyright notice dates.
* gm2-compiler/M2Search.mod: Update copyright notice dates.
* gm2-compiler/M2Size.def: Update copyright notice dates.
* gm2-compiler/M2Size.mod: Update copyright notice dates.
* gm2-compiler/M2StackAddress.def: Update copyright notice dates.
* gm2-compiler/M2StackAddress.mod: Update copyright notice dates.
* gm2-compiler/M2StackWord.def: Update copyright notice dates.
* gm2-compiler/M2StackWord.mod: Update copyright notice dates.
* gm2-compiler/M2Students.def: Update copyright notice dates.
* gm2-compiler/M2Students.mod: Update copyright notice dates.
* gm2-compiler/M2Swig.def: Update copyright notice dates.
* gm2-compiler/M2Swig.mod: Update copyright notice dates.
* gm2-compiler/M2System.def: Update copyright notice dates.
* gm2-compiler/M2System.mod: Update copyright notice dates.
* gm2-compiler/M2Version.def: Update copyright notice dates.
* gm2-compiler/NameKey.def: Update copyright notice dates.
* gm2-compiler/NameKey.mod: Update copyright notice dates.
* gm2-compiler/ObjectFiles.def: Update copyright notice dates.
* gm2-compiler/ObjectFiles.mod: Update copyright notice dates.
* gm2-compiler/Output.def: Update copyright notice dates.
* gm2-compiler/Output.mod: Update copyright notice dates.
* gm2-compiler/P0SymBuild.def: Update copyright notice dates.
* gm2-compiler/P0SymBuild.mod: Update copyright notice dates.
* gm2-compiler/P0SyntaxCheck.def: Update copyright notice dates.
* gm2-compiler/P1Build.def: Update copyright notice dates.
* gm2-compiler/P1SymBuild.def: Update copyright notice dates.
* gm2-compiler/P1SymBuild.mod: Update copyright notice dates.
* gm2-compiler/P2Build.def: Update copyright notice dates.
* gm2-compiler/P2SymBuild.def: Update copyright notice dates.
* gm2-compiler/P2SymBuild.mod: Update copyright notice dates.
* gm2-compiler/P3Build.def: Update copyright notice dates.
* gm2-compiler/P3SymBuild.def: Update copyright notice dates.
* gm2-compiler/P3SymBuild.mod: Update copyright notice dates.
* gm2-compiler/PCBuild.def: Update copyright notice dates.
* gm2-compiler/PCSymBuild.def: Update copyright notice dates.
* gm2-compiler/PCSymBuild.mod: Update copyright notice dates.
* gm2-compiler/PHBuild.def: Update copyright notice dates.
* gm2-compiler/Sets.def: Update copyright notice dates.
* gm2-compiler/Sets.mod: Update copyright notice dates.
* gm2-compiler/SymbolConversion.def: Update copyright notice dates.
* gm2-compiler/SymbolConversion.mod: Update copyright notice dates.
* gm2-compiler/SymbolKey.def: Update copyright notice dates.
* gm2-compiler/SymbolKey.mod: Update copyright notice dates.
* gm2-compiler/SymbolTable.def: Update copyright notice dates.
* gm2-compiler/SymbolTable.mod: Update copyright notice dates.
* gm2-compiler/bnflex.def: Update copyright notice dates.
* gm2-compiler/bnflex.mod: Update copyright notice dates.
* gm2-compiler/cflex.def: Update copyright notice dates.
* gm2-compiler/gm2.mod: Update copyright notice dates.
* gm2-compiler/gm2lcc.mod: Update copyright notice dates.
* gm2-compiler/gm2lgen.mod: Update copyright notice dates.
* gm2-compiler/gm2lorder.mod: Update copyright notice dates.
* gm2-compiler/m2flex.def: Update copyright notice dates.
* gm2-compiler/ppg.mod: Update copyright notice dates.
* gm2-gcc/dynamicstrings.h: Update copyright notice dates.
* gm2-gcc/gcc-consolidation.h: Update copyright notice dates.
* gm2-gcc/init.c: Update copyright notice dates.
* gm2-gcc/init.def: Update copyright notice dates.
* gm2-gcc/init.h: Update copyright notice dates.
* gm2-gcc/m2assert.c: Update copyright notice dates.
* gm2-gcc/m2assert.h: Update copyright notice dates.
* gm2-gcc/m2block.c: Update copyright notice dates.
* gm2-gcc/m2block.def: Update copyright notice dates.
* gm2-gcc/m2block.h: Update copyright notice dates.
* gm2-gcc/m2builtins.c: Update copyright notice dates.
* gm2-gcc/m2builtins.def: Update copyright notice dates.
* gm2-gcc/m2builtins.h: Update copyright notice dates.
* gm2-gcc/m2color.c: Update copyright notice dates.
* gm2-gcc/m2color.def: Update copyright notice dates.
* gm2-gcc/m2color.h: Update copyright notice dates.
* gm2-gcc/m2convert.c: Update copyright notice dates.
* gm2-gcc/m2convert.def: Update copyright notice dates.
* gm2-gcc/m2convert.h: Update copyright notice dates.
* gm2-gcc/m2decl.c: Update copyright notice dates.
* gm2-gcc/m2decl.def: Update copyright notice dates.
* gm2-gcc/m2decl.h: Update copyright notice dates.
* gm2-gcc/m2except.c: Update copyright notice dates.
* gm2-gcc/m2except.def: Update copyright notice dates.
* gm2-gcc/m2except.h: Update copyright notice dates.
* gm2-gcc/m2expr.c: Update copyright notice dates.
* gm2-gcc/m2expr.def: Update copyright notice dates.
* gm2-gcc/m2expr.h: Update copyright notice dates.
* gm2-gcc/m2linemap.c: Update copyright notice dates.
* gm2-gcc/m2linemap.def: Update copyright notice dates.
* gm2-gcc/m2linemap.h: Update copyright notice dates.
* gm2-gcc/m2misc.c: Update copyright notice dates.
* gm2-gcc/m2misc.def: Update copyright notice dates.
* gm2-gcc/m2misc.h: Update copyright notice dates.
* gm2-gcc/m2options.h: Update copyright notice dates.
* gm2-gcc/m2range.h: Update copyright notice dates.
* gm2-gcc/m2search.h: Update copyright notice dates.
* gm2-gcc/m2statement.c: Update copyright notice dates.
* gm2-gcc/m2statement.def: Update copyright notice dates.
* gm2-gcc/m2statement.h: Update copyright notice dates.
* gm2-gcc/m2top.c: Update copyright notice dates.
* gm2-gcc/m2top.def: Update copyright notice dates.
* gm2-gcc/m2top.h: Update copyright notice dates.
* gm2-gcc/m2tree.c: Update copyright notice dates.
* gm2-gcc/m2tree.def: Update copyright notice dates.
* gm2-gcc/m2tree.h: Update copyright notice dates.
* gm2-gcc/m2treelib.c: Update copyright notice dates.
* gm2-gcc/m2treelib.def: Update copyright notice dates.
* gm2-gcc/m2treelib.h: Update copyright notice dates.
* gm2-gcc/m2type.c: Update copyright notice dates.
* gm2-gcc/m2type.def: Update copyright notice dates.
* gm2-gcc/m2type.h: Update copyright notice dates.
* gm2-gcc/rtegraph.c: Update copyright notice dates.
* gm2-gcc/rtegraph.h: Update copyright notice dates.
* gm2-internals.texi: Update copyright notice dates.
* gm2-lang.c: Update copyright notice dates.
* gm2-lang.h: Update copyright notice dates.
* gm2-libs-ch/RTcodummy.c: Update copyright notice dates.
* gm2-libs-ch/RTintdummy.c: Update copyright notice dates.
* gm2-libs-ch/Selective.c: Update copyright notice dates.
* gm2-libs-ch/SysExceptions.c: Update copyright notice dates.
* gm2-libs-ch/UnixArgs.c: Update copyright notice dates.
* gm2-libs-ch/cgetopt.c: Update copyright notice dates.
* gm2-libs-ch/choosetemp.c: Update copyright notice dates.
* gm2-libs-ch/dtoa.c: Update copyright notice dates.
* gm2-libs-ch/errno.c: Update copyright notice dates.
* gm2-libs-ch/host.c: Update copyright notice dates.
* gm2-libs-ch/ldtoa.c: Update copyright notice dates.
* gm2-libs-ch/pthdummy.c: Update copyright notice dates.
* gm2-libs-ch/termios.c: Update copyright notice dates.
* gm2-libs-ch/tools.c: Update copyright notice dates.
* gm2-libs-ch/wrapc.c: Update copyright notice dates.
* gm2-libs-ch/xlibc.c: Update copyright notice dates.
* gm2-libs-coroutines/Debug.def: Update copyright notice dates.
* gm2-libs-coroutines/Debug.mod: Update copyright notice dates.
* gm2-libs-coroutines/Executive.def: Update copyright notice dates.
* gm2-libs-coroutines/Executive.mod: Update copyright notice dates.
* gm2-libs-coroutines/KeyBoardLEDs.def: Update copyright notice dates.
* gm2-libs-coroutines/README.texi: Update copyright notice dates.
* gm2-libs-coroutines/SYSTEM.def: Update copyright notice dates.
* gm2-libs-coroutines/SYSTEM.mod: Update copyright notice dates.
* gm2-libs-coroutines/TimerHandler.def: Update copyright notice dates.
* gm2-libs-coroutines/TimerHandler.mod: Update copyright notice dates.
* gm2config.h.in: Update copyright notice dates.
* gm2spec.c: Update copyright notice dates.
* gm2version.h: Update copyright notice dates.
* lang-options.h: Update copyright notice dates.
* lang-specs.h: Update copyright notice dates.
* lang.opt: Update copyright notice dates.
* m2-link-support.h: Update copyright notice dates.
* m2-tree.def: Update copyright notice dates.
* m2-tree.h: Update copyright notice dates.
* m2.flex: Update copyright notice dates.
* m2pp.c: Update copyright notice dates.
* m2pp.h: Update copyright notice dates.
* mc-boot-ch/GBuiltins.c: Update copyright notice dates.
* mc-boot-ch/GRTco.c: Update copyright notice dates.
* mc-boot-ch/GSYSTEM.c: Update copyright notice dates.
* mc-boot-ch/GSelective.c: Update copyright notice dates.
* mc-boot-ch/GSysExceptions.c: Update copyright notice dates.
* mc-boot-ch/GUnixArgs.c: Update copyright notice dates.
* mc-boot-ch/Gcbuiltin.c: Update copyright notice dates.
* mc-boot-ch/Gdtoa.c: Update copyright notice dates.
* mc-boot-ch/Gerrno.c: Update copyright notice dates.
* mc-boot-ch/Gldtoa.c: Update copyright notice dates.
* mc-boot-ch/Glibc.c: Update copyright notice dates.
* mc-boot-ch/Glibm.c: Update copyright notice dates.
* mc-boot-ch/Gmcrts.c: Update copyright notice dates.
* mc-boot-ch/Gmcrts.h: Update copyright notice dates.
* mc-boot-ch/Gnetwork.h: Update copyright notice dates.
* mc-boot-ch/Gpth.c: Update copyright notice dates.
* mc-boot-ch/Gtermios.c: Update copyright notice dates.
* mc-boot-ch/Gwrapc.c: Update copyright notice dates.
* mc-boot-ch/network.c: Update copyright notice dates.
* mc/Indexing.def: Update copyright notice dates.
* mc/Indexing.mod: Update copyright notice dates.
* mc/alists.def: Update copyright notice dates.
* mc/alists.mod: Update copyright notice dates.
* mc/decl.def: Update copyright notice dates.
* mc/decl.mod: Update copyright notice dates.
* mc/keyc.def: Update copyright notice dates.
* mc/keyc.mod: Update copyright notice dates.
* mc/lists.def: Update copyright notice dates.
* mc/lists.mod: Update copyright notice dates.
* mc/m2flex.def: Update copyright notice dates.
* mc/mc.flex: Update copyright notice dates.
* mc/mcComment.def: Update copyright notice dates.
* mc/mcComment.h: Update copyright notice dates.
* mc/mcComment.mod: Update copyright notice dates.
* mc/mcComp.def: Update copyright notice dates.
* mc/mcComp.mod: Update copyright notice dates.
* mc/mcDebug.def: Update copyright notice dates.
* mc/mcDebug.mod: Update copyright notice dates.
* mc/mcError.def: Update copyright notice dates.
* mc/mcError.mod: Update copyright notice dates.
* mc/mcFileName.def: Update copyright notice dates.
* mc/mcFileName.mod: Update copyright notice dates.
* mc/mcLexBuf.def: Update copyright notice dates.
* mc/mcLexBuf.h: Update copyright notice dates.
* mc/mcLexBuf.mod: Update copyright notice dates.
* mc/mcMetaError.def: Update copyright notice dates.
* mc/mcMetaError.mod: Update copyright notice dates.
* mc/mcOptions.def: Update copyright notice dates.
* mc/mcOptions.mod: Update copyright notice dates.
* mc/mcPreprocess.def: Update copyright notice dates.
* mc/mcPreprocess.mod: Update copyright notice dates.
* mc/mcPretty.def: Update copyright notice dates.
* mc/mcPretty.mod: Update copyright notice dates.
* mc/mcPrintf.def: Update copyright notice dates.
* mc/mcPrintf.mod: Update copyright notice dates.
* mc/mcQuiet.def: Update copyright notice dates.
* mc/mcQuiet.mod: Update copyright notice dates.
* mc/mcReserved.def: Update copyright notice dates.
* mc/mcReserved.h: Update copyright notice dates.
* mc/mcReserved.mod: Update copyright notice dates.
* mc/mcSearch.def: Update copyright notice dates.
* mc/mcSearch.mod: Update copyright notice dates.
* mc/mcStack.def: Update copyright notice dates.
* mc/mcStack.mod: Update copyright notice dates.
* mc/mcStream.def: Update copyright notice dates.
* mc/mcStream.mod: Update copyright notice dates.
* mc/mcflex.def: Update copyright notice dates.
* mc/mcp1.def: Update copyright notice dates.
* mc/mcp2.def: Update copyright notice dates.
* mc/mcp3.def: Update copyright notice dates.
* mc/mcp4.def: Update copyright notice dates.
* mc/mcp5.def: Update copyright notice dates.
* mc/nameKey.def: Update copyright notice dates.
* mc/nameKey.mod: Update copyright notice dates.
* mc/symbolKey.def: Update copyright notice dates.
* mc/symbolKey.mod: Update copyright notice dates.
* mc/top.mod: Update copyright notice dates.
* mc/varargs.def: Update copyright notice dates.
* mc/varargs.mod: Update copyright notice dates.
* mc/wlists.def: Update copyright notice dates.
* mc/wlists.mod: Update copyright notice dates.
* tools-src/array2index.py: Update copyright notice dates.
* tools-src/boilerplate.py: Update copyright notice dates.
* tools-src/buildpg: Update copyright notice dates.
* tools-src/buildsyntax: Update copyright notice dates.
* tools-src/calcpath: Update copyright notice dates.
* tools-src/createUlmSys: Update copyright notice dates.
* tools-src/def2texi.py: Update copyright notice dates.
* tools-src/gensum.py: Update copyright notice dates.
* tools-src/incfile: Update copyright notice dates.
* tools-src/makeSystem: Update copyright notice dates.
* tools-src/makeconfigure: Update copyright notice dates.
* tools-src/makeversion: Update copyright notice dates.
* tools-src/mklink.c: Update copyright notice dates.
* tools-src/tidydates.py: Update copyright notice dates.
2022-01-11 Gaius Mulley <gaiusmod2@gmail.com>
* Make-lang.in (m2/gm2spec.o): Added $(LIBS) to the dependants.
(stage1/m2/gm2l): Added $(LIBS) to the dependants.
(stage1/m2/gm2lcc): Added $(LIBS) to the dependants.
(stage1/m2/gm2lgen): Added $(LIBS) to the dependants.
(stage1/m2/gm2lorder): Added $(LIBS) to the dependants.
(stage1/m2/gm2m): Added $(LIBS) to the dependants.
2022-01-04 Gaius Mulley <gaius.mulley@southwales.ac.uk>
* mc/decl.mod: Added missing comments to many procedures.
(getStringContents) Completed missing code removing a --fixme--.
(getLiteralStringContents) New procedure function.
(doMakeEnumField) Return f even if an error should occur.
* mc-boot/Gdecl.c: Rebuilt.
-------------------------------
New file: gcc/m2/ChangeLog-2021
-------------------------------
2021-12-30 Gaius Mulley <gaius.mulley@southwales.ac.uk>
* gm2-gcc/m2expr.def: Use FOR "C" keyword and ident.
* mc-boot/GRTExceptions.c: Rebuilt.
* mc-boot/GSArgs.c: Rebuilt.
* mc-boot/Gdecl.c: Rebuilt.
* mc-boot/Glibc.h: Rebuilt.
* mc/decl.mod (varparamT): isForC new field. (paramT) isForC new
field. (varargsT) isForC new field. (putDefForC) Implemented.
(makeNonVarParameter) assign isForC. (makeVarParameter) Assign
isForC. (getParameterVariable) ignore isDefForC.
(doParamTypeEmit) New procedure. (doParamC) Call doParamTypeEmit.
(doVarParamC) call doParamTypeEmit. (doCompletePartialProcType)
Emit a C named type which differs from the m2 proctype.
(doPrototypeC) Ignore isDefForC and extended opaque option.
(doFuncUnbounded) Disable C string parameters.
(doProcedureParamC) Handle isForC for a formal parameter.
(isForC) New procedure function. (isDefForCNode) New procedure
function. (doFuncParamC) Detect var param for a definition
module for "C" proc type parameter and emit error message.
Detect param for a definition module for "C" and reference the
.proc field. (outputPartialRecordArrayProcType) New procedure.
(outputPartial) Rewritten.
2021-12-25 Gaius Mulley <gaius.mulley@southwales.ac.uk>
* gm2-compiler/M2Error.mod (EnterProcedureScope): Corrected
indentation. (EnterModuleScope): Corrected
indentation. (EnterProgramScope): Corrected indentation.
(EnterImplementationScope) Corrected indentation.
(FlushAll) Assign currentScope to the error scope.
2021-12-25 Gaius Mulley <gaius.mulley@southwales.ac.uk>
* gm2-compiler/M2Error.mod (GetAnnounceScope): Issue
"no scope active" message. (AnnounceScope) Add ": "
after the no scope active message.
2021-12-25 Gaius Mulley <gaius.mulley@southwales.ac.uk>
* Make-lang.in (m2/gm2-compiler-boot/M2Error.o): New rule
to build M2Error.o using the --entended-opaque option since
M2Error.mod aggressively uses opaque data types.
* bnf/m2-1.bnf (DefProcedureHeading) ensure DefaultProcedure
scope is created before any further tokens are consumed.
Call LeaveErrorScope at the end of the rule.
* bnf/m2-2.bnf (DefProcedureHeading): Call LeaveErrorScope
at the end of the rule.
* bnf/m2-3.bnf (DefProcedureHeading): Call LeaveErrorScope
at the end of the rule.
* bnf/m2-c.bnf (DefProcedureHeading): Call LeaveErrorScope
at the end of the rule.
* bnf/m2-h.bnf (DefProcedureHeading): Call DefaultProcedure
and the beginning and LeaveErrorScope at the end of the rule.
* bnf/m2.bnf (DefProcedureHeading): Call DefaultProcedure
and the beginning of the rule.
* gm2-compiler/M2Comp.mod (M2Error): Import list replaced
identifiers ParsingComplete; and ResetErrorScope;.
* gm2-compiler/M2Error.def (NameKey): Renamed ParsingComplete to
ResetErrorScope. Call ResetErrorScope before each pass commenses.
Import list replaced identifiers LeaveScope,
ParsingComplete by EnterErrorScope, ErrorScope,
GetCurrentErrorScope,
(LeaveErrorScope): New procedure. (ResetErrorScope): New
procedure. (LeaveScope) Removed.
* gm2-compiler/M2Error.mod (M2Options): Import StackOfAddress.
(printf2) Imported. (printf3) Imported.
(IsErrorScopeNul): New procedure function.
(GetAnnounceScope): Re-implementation.
(IsSameScope): New procedure function.
(AnnounceScope): Detect no scope.
(newErrorScope): Use scopeArray to push a new scope.
(DefaultProgramModule): New implementation.
(DefaultImplementationModule): New implementation.
(DefaultDefinitionModule): New implementation.
(DefaultInnerModule): New implementation.
(GetCurrentErrorScope): New procedure function.
* gm2-compiler/M2MetaError.def: Extend the specifiers to
allow error contents to be pushed to a string stack;
string stack contents to be popped onto the output string;
replace dictionary string by the current output string and
remove all contents in the dictionary.
* gm2-compiler/M2MetaError.mod (addEntry) New procedure.
(killEntry) New procedure function.
(lookupDefine) New procedure function.
(lookupString) New procedure function.
(newEntry) New procedure function.
(popOutput) New procedure function.
(processDefine) New procedure.
(pushOutput) New procedure function.
(readWord) New procedure function.
(resetDictionary) New procedure.
(doErrorScopeMod) Enter error scope before
generate an error.
(doErrorScopeDef) Enter error scope before
generate an error.
(op): Handle 'Q', 'X', 'Y', 'Z' format directives.
* gm2-compiler/M2Scope.mod (SymbolTable): Import list includes
identifier GetErrorScope.
(enter): Re-implemented.
* gm2-compiler/M2StackWord.mod: Renamed data types so
they are easier to debug during bootstrap (avoid name clashes
with the M2StackAddress module).
* gm2-compiler/P0SymBuild.mod (EndProcedure): Call
LeaseErrorScope instead of LeaveScope at the end of the procedure.
* gm2-compiler/P2SymBuild.mod (P2EndBuildDefModule): Call
LeaseErrorScope instead of LeaveScope at the end of the procedure.
(P2EndBuildImplementationModule): Call
LeaseErrorScope instead of LeaveScope at the end of the procedure.
(P2EndBuildProgramModule): Call
LeaseErrorScope instead of LeaveScope at the end of the procedure.
(EndBuildInnerModule): Call
LeaseErrorScope instead of LeaveScope at the end of the procedure.
(P3EndBuildImpModule): Call
LeaseErrorScope instead of LeaveScope at the end of the procedure.
(P3EndBuildProgModule): Call
LeaseErrorScope instead of LeaveScope at the end of the procedure.
(EndBuildInnerModule): Call
LeaseErrorScope instead of LeaveScope at the end of the procedure.
* gm2-compiler/PCSymBuild.mod (PCEndBuildDefModule): Call
LeaseErrorScope instead of
LeaveScope at the end of the procedure.
(PCEndBuildImpModule): Call LeaseErrorScope instead of
LeaveScope at the end of the procedure.
(PCEndBuildProgModule): Call LeaseErrorScope instead of
LeaveScope at the end of the procedure.
(PCEndBuildInnerModule): Call LeaseErrorScope instead of
LeaveScope at the end of the procedure.
* gm2-compiler/SymbolKey.def (NoOfNodes): New procedure
function.
(ForeachNodeConditionDo) New procedure.
* gm2-compiler/SymbolKey.mod (NoOfNodes): New procedure
function.
(ContainsSymKey): Call FindNodeParentInTree instead of
FindNodeAndParentInTree.
(GetSymKey): Call FindNodeParentInTree instead of
FindNodeAndParentInTree.
(DelSymKey): Call FindNodeParentInTree instead of
FindNodeAndParentInTree.
(FindNodeParentInTree): Renamed from FindNodeAndParentInTree.
(IsEmptyTree): Reformatted. (DoesTreeContainAny): Reformatted.
(SearchForAny): Reformatted. (ForeachNodeConditionDo) New
procedure. (SearchConditional) New procedure.
* gm2-compiler/SymbolTable.def (GetErrorScope): New procedure
function. (PutErrorScope) New procedure.
* gm2-compiler/SymbolTable.def (GetErrorScope): New procedure
function implemented. (PutErrorScope) New procedure implemented.
(AddListify) New procedure. (Listify) New procedure.
(errorScope) field added to procedure, module, defimp
symbols and initialized during their construction.
2021-12-17 Gaius Mulley <gaius.mulley@southwales.ac.uk>
* bnf/m2-1.bnf (ProgramModule): Set up DefaultProgramModule scope.
(ImplementationModule) Set up DefaultImplementationModule scope.
(ProcedureHeading) Set up DefaultProcedureScope.
(ModuleDeclaration) Set up DefaultInnerModule scope.
* bnf/m2-2.bnf (ProgramModule): Set up DefaultProgramModule scope.
(ImplementationModule) Set up DefaultImplementationModule scope.
(ProcedureHeading) Set up DefaultProcedureScope.
(ModuleDeclaration) Set up DefaultInnerModule scope.
* bnf/m2-3.bnf (ProgramModule): Set up DefaultProgramModule scope.
(ImplementationModule) Set up DefaultImplementationModule scope.
(ProcedureHeading) Set up DefaultProcedureScope.
(ModuleDeclaration) Set up DefaultInnerModule scope.
* bnf/m2-c.bnf (ProgramModule): Set up DefaultProgramModule scope.
(ImplementationModule) Set up DefaultImplementationModule scope.
(ProcedureHeading) Set up DefaultProcedureScope.
(ModuleDeclaration) Set up DefaultInnerModule scope.
* bnf/m2-h.bnf (ProgramModule): Set up DefaultProgramModule scope.
(ImplementationModule) Set up DefaultImplementationModule scope.
(ProcedureHeading) Set up DefaultProcedureScope.
(ModuleDeclaration) Set up DefaultInnerModule scope.
* bnf/m2.bnf (ProgramModule): Set up DefaultProgramModule scope.
(ImplementationModule) Set up DefaultImplementationModule scope.
(ProcedureHeading) Set up DefaultProcedureScope.
(ModuleDeclaration) Set up DefaultInnerModule scope. (WasNoError)
replaced by seenError. (Expect) reformatted.
(CheckInsertCandiate) New procedure which replaces CheckAndInsert.
(PeepToken) use CheckInsertCandiate. (WarnMissingToken) generate
a warning using %W.
* gm2-compiler/M2Comp.mod (DefaultProgramModule): New procedure.
(DefaultImplementationModule) New procedure.
(DefaultDefinitionModule) New procedure. (DefaultInnerModule)
New procedure. (DefaultProcedure) New procedure.
(EnterImplementationScope) call LeaveScope if parsing.
(EnterProgramScope) call LeaveScope if parsing.
(EnterDefinitionScope) call LeaveScope if parsing.
(EnterModuleScope) call LeaveScope if parsing.
(EnterProcedureScope) call LeaveScope if parsing.
(ParsingComplete) New procedure.
* gm2-compiler/M2Comp.def (DefaultProgramModule): New procedure.
(DefaultImplementationModule) New procedure.
(DefaultDefinitionModule) New procedure. (DefaultInnerModule)
New procedure. (DefaultProcedure) New procedure.
(ParsingComplete) New procedure.
* gm2-compiler/M2Error.def (DefaultProgramModule) New procedure.
(DefaultImplementationModule) New procedure.
(DefaultDefinitionModule) New procedure. (DefaultInnerModule) New
procedure. (DefaultProcedure) New procedure. (ParsingComplete)
New procedure.
* gm2-compiler/M2Error.mod (DefaultProgramModule) New procedure.
(DefaultImplementationModule) New procedure.
(DefaultDefinitionModule) New procedure. (DefaultInnerModule) New
procedure. (DefaultProcedure) New procedure. (ParsingComplete)
New procedure. (GetAnnounceScope) check to see scopeName is non
null before using name.
* gm2-compiler/M2LexBuf.def (NameKey): Import list replaced identifiers
DisplayToken and DumpTokens.
* gm2-compiler/M2LexBuf.mod (InsertToken) Reimplemented.
(InsertTokenAndRewind) Reimplemented.
* gm2-compiler/M2MetaError.mod (doErrorScopeMod): setup
DefaultScope before calling EnterScope.
(doErrorScopeMod) (doErrorScopeDef): setup
DefaultScope before calling EnterScope.
* gm2-compiler/P0SymBuild.mod (RegisterProgramModule):
Reformatted. (RegisterImplementationModule) Reformatted.
(RegisterDefinitionModule) Reformatted.
2021-11-19 Gaius Mulley <gaius.mulley@southwales.ac.uk>
* gm2-compiler/M2Error.mod (ChainError): Initialize scopeKind and
scopeName.
* gm2-compiler/M2Range.mod (CodeErrorCheckLoc): Added comment.
2021-11-18 Gaius Mulley <gaius.mulley@southwales.ac.uk>
* gm2-compiler/M2Error.def (GetAnnounceScope): Exported.
(AnnounceScope) changed to use an extra parameter message.
* gm2-compiler/M2Error.mod (GetAnnounceScope): New procedure function.
(AnnounceScope) Rewritten to use GetAnnounceScope.
* gm2-compiler/M2Range.mod (M2Error): Added GetAnnounceScope to
import list. (CodeErrorCheckLoc) Rewritten to use GetAnnounceScope.
* gm2-gcc/rtegraph.c (generate_report): Emit error message using
the GCC scope heading and message house style.
* gm2-libs/RTExceptions.mod (Raise): Emit the message using the GCC
scope heading and message house style.
2021-11-16 Gaius Mulley <gaius.mulley@southwales.ac.uk>
* gm2-compiler/M2Error.def (NameKey): Imported identifier Name.
(AnnounceScope) defined and exported. (EnterDefinitionScope)
defined and exported. (EnterImplementationScope) defined and
exported. (EnterProcedureScope) defined and exported.
(EnterProgramScope) defined and exported. (EnterModuleScope)
defined exported. (LeaveScope) defined and exported.
(DepthScope) defined and exported.
* gm2-compiler/M2Error.mod (M2Debug): Import Assert.
(M2StackWord) Import StackOfWord, InitStackWord, InitStackWord,
NoOfItemsInStackWord, PopWord, and PushWord.
(M2ColorString) Import quoteOpen and quoteClose.
(M2Error) Added scopeKind.
(ScopeBlock) Added scopeName and kindScope.
(New) Reformatted. (SetScope) New procedure.
(AddToRange) call InitScopeBlock. (GetGlobalQuads) Rewritten
to call SetScope whether a new error scope occurs. Ensure that
scope starts when a new file starts and ends.
(GetProcQuads) Rewritten to start and end error scope when procedure
or module starts or ends. (DisplayScope) rewritten to display the
error scope. (InitScopeBlock) initialize kindScope to unsetscope.
(KillScopeBlock) Reformatted. (ForeachScopeBlockDo) call enter
and leave for every scope. (enter) New procedure. (leave)
New procedure.
* gm2-compiler/Output.mod (WriteKey) assign buffer to result
of ConCat. (StartBuffer) fixbug call InitString with an empty string.
gm2-compiler/P0SymBuild.mod (M2Error): Imported.
(RegisterProgramModule) call EnterProgramModule.
(RegisterImplementationModule) call EnterImplementationScope.
(RegisterInnerModule) call EnterModuleScope. (RegisterProcedure)
call EnterProcedureScope. (EndModule) call LeaveScope.
* gm2-compiler/P2SymBuild.mod (P2StartBuildDefModule) call
EnterDefinitionScope. (P2EndBuildDefModule) call LeaveScope.
(P2StartBuildImplementationModule) call EnterImplementationScope.
(P2StartBuildProgramModule) call EnterProgramScope.
(P2EndBuildProgramModule) call LeaveScope.
(StartBuildInnerModule) call EnterModuleScope.
(EndBuildInnerModule) call LeaveScope. (StartBuildProcedure)
call EnterProcedureScope. (EndBuildProcedure) call LeaveScope.
* gm2-compiler/P3SymBuild.mod (P3StartBuildDefModule) call
EnterDefinitionScope. (P3EndBuildDefModule) call LeaveScope.
(P3EndBuildImpModule) call LeaveScope. (P3StartBuildProgModule)
call EnterProgramScope. (P3EndBuildProgModule) call LeaveScope.
(StartBuildInnerModule) call EnterModuleScope.
(EndBuildInnerModule) call LeaveScope. (StartBuildProcedure)
call EnterProcedureScope. (EndBuildProcedure) call LeaveScope.
(PCStartBuildDefModule) call EnterDefinitionScope.
(PCEndBuildDefModule) call LeaveScope. (PCStartBuildImpModule)
call EnterImplementationScope. (PCEndBuildImpModule) call
LeaveScope. (PCStartBuildProgModule) call EnterProgramScope.
(PCEndBuildProgModule) call LeaveScope. (PCStartBuildInnerModule)
call EnterModuleScope. (PCEndBuildInnerModule) call LeaveScope.
(PCStartBuildProcedure) call EnterProcedureScope.
(PCEndBuildProcedure) call LeaveScope.
* gm2-compiler/SymbolTable.def (GetDeclaredDefinition) exported.
(GetDeclaredModule) exported.
2021-10-26 Gaius Mulley <gaius.mulley@southwales.ac.uk>
* gm2-compiler/M2Options.def (m2linemap): Import list replaced
identifiers SaveTemps, SetSaveTemps and SetSaveTempsDir.
* gm2-compiler/M2Options.mod (SetSaveTemps): New procedure.
Sets SaveTemps to value.
(MakeSaveTempsFileName) New procedure which appends ".i" to
filename.
(PreprocessModule) Check SaveTemps to determine whether the
temporary file should be deleted upon exit.
(SetSaveTempsDir) Stub added.
* gm2-gcc/m2options.h (SetSaveTemps): Prototype added.
(SetSaveTempsDir) Prototype added.
* gm2-lang.c (gm2_langhook_handle_option): Extended to
include OP_save_temps and OP_save_temps_.
* lang-options.h: Add -fsave-temps and -fsave-temps=.
* lang-specs.h: Pass %{save-temps*} to cc1gm2.
* lang.opt: Add -save-temps as an alias to save-temps.
Add save-temps, add save-temps=.
ChangeLog:
* m2tools/Makefile.in : Rebuilt.
2021-10-13 Gaius Mulley <gaius.mulley@southwales.ac.uk>
* gm2-libs-ch/termios.c (GetFlag): Corrected macro test
against absence of __MAX_BAUD.
2021-10-13 Gaius Mulley <gaius.mulley@southwales.ac.uk>
* Make-lang.in (lang_checks_parallelized): Include check-gm2.
(check_gm2_parallelize) Set to 10000.
2021-10-13 Gaius Mulley <gaius.mulley@southwales.ac.uk>
* m2-link-support.h (SCAFFOLDNAME): Add %d so scaffold files
are removed when gcc finishes without error.
2021-10-11 Gaius Mulley <gaius.mulley@southwales.ac.uk>
* gm2-compiler/M2GCCDeclare.mod (mystop): Removed.
(DebugSets): Commented out.
(TryFindSymbol): Commented out.
(DeclareTypePartially): Delete variable t and use Assert to test
return values.
(NotAllDependantsPartiallyOrFullyDeclared): Commented out.
(DeclareTypeFromPartial): Commented out.
(DeclarePointerTypeFully): Commented out.
(ForeachTryDeclare): Remove unused parameters start and end.
(DeclaredOutstandingTypes): Alter all calls to ForeachTryDeclare.
(DeclareType): Alter all calls to ForeachTryDeclare.
(DeclareStringConstant): Commented out.
(PromoteToString): Use tokenno to derive location.
(DeclareConstructor): Add location to a call to BuildStringConstant.
(TryDeclareConstant): Delete variable tok introduce parameter tokenno.
(DeclareConst): Change all calls to BuildConvert to pass the
location.
(WalkFamilyOfUnbounded): Add location to the calls of
DeclareStringConstant.
(WalkDependants): Reformatted.
(PopBinding): Remove start, end quadruple values from
ResolveConstantExpressions.
(AssertAllTypesDeclared): delete variable and use Assert to check
return result.
(DoVariableDeclaration): delete variables s and t.
(DeclareImportedVariables): Remove call to AlignDeclarationWithSource.
(DeclareLocalVariable): Remove call to AlignDeclarationWithSource.
(DeclareEnumeration): Remove call to AlignDeclarationWithSource.
(IncludeGetNth): Remove call to AlignDeclarationWithSource.
(DeclarePackedSubrange): Reformatted.
(WalkVarientDependants): Commented out.
(BuildTreeFromInterface): replace variable location.
* gm2-compiler/M2GenGCC.mod: (CodeInline): Add tokenno to calls
to BuildTreeFromInterface.
(CodeAddr): Change call to BuildStringConstant to use location
parameter.
* gm2-compiler/M2MetaError.mod (InternalFormat): Generate error
message using line number.
(OutColorS): Commented out.
(doGetType): Introduce safely check using HIGH.
(doGetSkipType): Introduce safely check using HIGH.
(ConCatWord): Commented out.
(copySym): Commented out.
* gm2-compiler/M2Quads.mod: Remove CheckRangeAddVariableRead and
CheckRangeRemoveVariableRead from the import list.
* gm2-compiler/M2Range.def (DynamicStrings): Import list commented
out identifiers CheckRangeAddVariableRead, CheckRangeRemoveVariableRead.
(CheckRangeAddVariableRead): Commented out.
* gm2-compiler/M2Range.mod (InitAssignmentRangeCheck): Delete variable
p and use Assert to check the return result.
(InitReturnRangeCheck): Delete variable
p and use Assert to check the return result.
(InitSubrangeRangeCheck): Delete variable
p and use Assert to check the return result.
(InitStaticArraySubscriptRangeCheck): Delete variable
p and use Assert to check the return result.
(InitDynamicArraySubscriptRangeCheck): Delete variable
p and use Assert to check the return result.
(InitIncRangeCheck): Delete variable
p and use Assert to check the return result.
(InitDecRangeCheck): Delete variable
p and use Assert to check the return result.
(InitInclCheck): Delete variable
p and use Assert to check the return result.
(InitExclCheck): Delete variable
p and use Assert to check the return result.
(InitShiftCheck): Delete variable
p and use Assert to check the return result.
(InitRotateCheck): Delete variable
p and use Assert to check the return result.
(InitTypesAssignmentCheck): Delete variable
p and use Assert to check the return result.
(InitTypesParameterCheck): Delete variable
p and use Assert to check the return result.
(InitTypesExpressionCheck): Delete variable
p and use Assert to check the return result.
(InitForLoopBeginRangeCheck): Delete variable
p and use Assert to check the return result.
(InitForLoopToRangeCheck): Delete variable
p and use Assert to check the return result.
(InitForLoopEndRangeCheck): Delete variable
p and use Assert to check the return result.
(InitPointerRangeCheck): Delete variable
p and use Assert to check the return result.
(InitNoReturnRangeCheck): Delete variable
p and use Assert to check the return result.
(InitNoElseRangeCheck): Delete variable
p and use Assert to check the return result.
(InitWholeNonPosDivCheck): Delete variable
p and use Assert to check the return result.
(InitWholeNonPosModCheck): Delete variable
p and use Assert to check the return result.
(InitWholeZeroDivisionCheck): Delete variable
p and use Assert to check the return result.
(FoldNil): Delete variable
p and use Assert to check the return result.
(FoldTypeExpr): Delete variable
p and use Assert to check the return result.
(CodeTypeExpr): Delete variable
p and use Assert to check the return result.
(FoldForLoopBegin): Delete variable
p and use Assert to check the return result.
(MakeAndDeclareConstLit): Delete variable
p and use Assert to check the return result.
(FoldNonPosMod): Delete variable
p and use Assert to check the return result.
(FoldZeroDiv): Delete variable
p and use Assert to check the return result.
(FoldZeroRem): Delete variable
p and use Assert to check the return result.
(FoldRangeCheck): Delete variable
p and use Assert to check the return result.
(CodeErrorCheck): Delete variable
p and use Assert to check the return result.
(CodeInclExcl): Delete variable
p and use Assert to check the return result.
(DiffTypesCodeForLoopEnd): Delete variable
p and use Assert to check the return result.
(DiffTypesCodeForLoopEnd): Delete variable
p and use Assert to check the return result.
(CodeNil): Delete variable
p and use Assert to check the return result.
(CodeWholeZero): Delete variable
p and use Assert to check the return result.
(InitCaseBounds): Delete variable
p and use Assert to check the return result.
(AddVarRead): Delete variable
p and use Assert to check the return result.
(SubVarRead): Delete variable
p and use Assert to check the return result.
(CheckRangeAddVariableRead): Delete variable
p and use Assert to check the return result.
(CheckRangeRemoveVariableRead): Delete variable
p and use Assert to check the return result.
(WriteRangeCheck): Delete variable
p and use Assert to check the return result.
* gm2-gcc/m2decl.c: (BuildStringConstant) add location parameter.
* gm2-gcc/m2decl.def: (BuildStringConstant) add location parameter.
* gm2-gcc/m2decl.h: (BuildStringConstant) add location parameter.
2021-10-08 Gaius Mulley <gaius.mulley@southwales.ac.uk>
* gm2-compiler/M2GenGCC.mod (m2statement): Import list inserted
identifier BuildFunctionCallTree.
(ConvertQuadsToTree): Delete variable Prev. Reformatted.
(IsCompilingMainModule): Reformatted.
(CodeStatement): Remove unused parameters for many of the Code
procedures.
(ResolveConstantExpressions): Remove unused parameters for many of
the Fold procedures.
(CodeSaveException): replace variables exceptionCall and functValue.
Use BuildFunctionCallTree to avoid an unused return result.
(CodeRestoreException): Replace variables exceptionCall and
functValue. Use BuildFunctionCallTree to avoid an unused return result.
(PopScope): Check return result.
(CodeRange): Remove unused parameters.
(CodeError): Remove unused parameters.
(CodeStartModFile): Remove unused parameters.
(CodeStartDefFile): Remove unused parameters and renamed existing
parameters.
(CodeEndFile): Remove unused parameters.
(CodeInitStart): Remove unused parameters.
(CodeInitStart): Reformatted.
(CodeInitEnd): replace variables t and moduleTree.
(CodeInitEnd): Reformatted.
(CodeFinallyStart): Rewritten to remove unused parameters and
renamed remaining parameters.
(CodeFinallyEnd): replace variables t and moduleTree.
(CodeFinallyEnd): Rewritten to remove unused parameters and
renamed remaining parameters.
(GetHighFromUnbounded): Commented out unused variable remainingDim.
(MakeCopyUse): Insert variables Type and NewArray. Reformatted.
(BuildCascadedIfThenElsif): Reformatted.
(CheckUnboundedNonVarParameter): Reformatted.
(IsParameterWritten): Removed usused variable i.
(AutoInitVariable): Removed usused variable i.
(CodeNewLocalVar): Reformatted.
(CodeKillLocalVar): Reformatted.
(CodeProcedureScope): Reformatted.
(CodeCall): Reformatted.
(FoldBuiltin): Renamed parameter.
(CodeFunctValue): Removed unused parameter.
(CodeAddr): Removed unused parameter.
(FoldBecomes): Delete variable t. Removed unused parameter.
(CodeTry): Removed all parameters.
(CodeThrow): Removed unused parameters.
(CodeCatchBegin): Reformatted.
(checkDeclare): Reformatted and renamed parameters. Removed
unused parameters.
(LValueToGenericPtr): Removed unused parameter and reformatted.
(CodeAddCheck): Renamed parameters.
(FoldSub): Renamed parameters.
(CodeAddCheck): Renamed parameters.
(CodeSubCheck): Renamed parameters.
(FoldMult): Renamed parameters.
(CodeSub): Renamed parameters.
(CodeMultCheck): Rewritten and reformatted.
(CodeDivM2Checked): Rewritten and reformatted.
(CodeDivM2Check): Rewritten and reformatted.
(CodeModM2Checked): Rewritten and reformatted.
(CodeModM2Check): Rewritten and reformatted.
(FoldDivM2): Rewritten and reformatted.
(CodeDivM2): Rewritten and reformatted.
(FoldModM2): Rewritten and reformatted.
(FoldDivTrunc): Rewritten and reformatted.
(FoldDivCeil): Rewritten and reformatted.
(FoldDivFloor): Rewritten and reformatted.
(FoldBuiltinConst): Rewritten and reformatted.
(FoldBuiltinTypeInfo): Rewritten and reformatted.
(CodeStandardFunction): Rewritten and reformatted.
(CodeSavePriority): Rewritten and reformatted.
(CodeRestorePriority): Rewritten and reformatted.
(CodeUnarySet): Rewritten and reformatted.
(FoldIfIn): Rewritten and reformatted.
(GetSetLimits): Rewritten and reformatted.
(CodeIncl): Rewritten and reformatted.
(CodeExcl): Rewritten and reformatted.
(FoldUnary): Rewritten and reformatted.
(FoldUnarySet): Rewritten and reformatted.
(CodeUnaryCheck): Rewritten and reformatted.
(CodeUnary): Rewritten and reformatted.
(CodeNegateChecked): Rewritten and reformatted.
(CodeSize): Rewritten and reformatted.
(FoldRecordField): Delete variables location and t.
(BuildHighFromArray): Rewritten and reformatted.
(BuildHighFromStaticArray): Rewritten and reformatted.
(ResolveHigh): Rewritten and reformatted.
(FoldHigh): Rewritten and reformatted.
(CodeArray): Rewritten and reformatted.
(FoldElementSizeForArray): Rewritten and reformatted.
(FoldElementSizeForUnbounded): Rewritten and reformatted.
(FoldConvert): Rewritten and reformatted.
(CodeIfNotEqu): Rewritten and reformatted.
(MixTypes3): Rewritten and reformatted.
(AddQuadInformation): Rewritten and reformatted.
(UndoReadWriteInfo): Rewritten and reformatted.
(WriteQuad): Rewritten and reformatted.
* gm2-gcc/m2statement.c (BuildFunctionCallTree): New function.
* gm2-gcc/m2statement.def (BuildFunctionCallTree): New function.
* gm2-gcc/m2statement.h (BuildFunctionCallTree): New function.
2021-10-08 Gaius Mulley <gaius.mulley@southwales.ac.uk>
* gm2-compiler/M2GenGCC.mod (m2statement): Import list inserted
identifier BuildFunctionCallTree.
(ConvertQuadsToTree): Delete variable Prev. Reformatted.
(IsCompilingMainModule): Reformatted.
(CodeStatement): Remove unused parameters for many of the Code
procedures.
(ResolveConstantExpressions): Remove unused parameters for many of
the Fold procedures.
(CodeSaveException): replace variables exceptionCall and functValue.
Use BuildFunctionCallTree to avoid an unused return result.
(CodeRestoreException): Replace variables exceptionCall and
functValue. Use BuildFunctionCallTree to avoid an unused return result.
(PopScope): Check return result.
(CodeRange): Remove unused parameters.
(CodeError): Remove unused parameters.
(CodeStartModFile): Remove unused parameters.
(CodeStartDefFile): Remove unused parameters and renamed existing
parameters.
(CodeEndFile): Remove unused parameters.
(CodeInitStart): Remove unused parameters.
(CodeInitStart): Reformatted.
(CodeInitEnd): replace variables t and moduleTree.
(CodeInitEnd): Reformatted.
(CodeFinallyStart): Rewritten to remove unused parameters and
renamed remaining parameters.
(CodeFinallyEnd): replace variables t and moduleTree.
(CodeFinallyEnd): Rewritten to remove unused parameters and
renamed remaining parameters.
(GetHighFromUnbounded): Commented out unused variable remainingDim.
(MakeCopyUse): Insert variables Type and NewArray. Reformatted.
(BuildCascadedIfThenElsif): Reformatted.
(CheckUnboundedNonVarParameter): Reformatted.
(IsParameterWritten): Removed usused variable i.
(AutoInitVariable): Removed usused variable i.
(CodeNewLocalVar): Reformatted.
(CodeKillLocalVar): Reformatted.
(CodeProcedureScope): Reformatted.
(CodeCall): Reformatted.
(FoldBuiltin): Renamed parameter.
(CodeFunctValue): Removed unused parameter.
(CodeAddr): Removed unused parameter.
(FoldBecomes): Delete variable t. Removed unused parameter.
(CodeTry): Removed all parameters.
(CodeThrow): Removed unused parameters.
(CodeCatchBegin): Reformatted.
(checkDeclare): Reformatted and renamed parameters. Removed
unused parameters.
(LValueToGenericPtr): Removed unused parameter and reformatted.
(CodeAddCheck): Renamed parameters.
(FoldSub): Renamed parameters.
(CodeAddCheck): Renamed parameters.
(CodeSubCheck): Renamed parameters.
(FoldMult): Renamed parameters.
(CodeSub): Renamed parameters.
(CodeMultCheck): Rewritten and reformatted.
(CodeDivM2Checked): Rewritten and reformatted.
(CodeDivM2Check): Rewritten and reformatted.
(CodeModM2Checked): Rewritten and reformatted.
(CodeModM2Check): Rewritten and reformatted.
(FoldDivM2): Rewritten and reformatted.
(CodeDivM2): Rewritten and reformatted.
(FoldModM2): Rewritten and reformatted.
(FoldDivTrunc): Rewritten and reformatted.
(FoldDivCeil): Rewritten and reformatted.
(FoldDivFloor): Rewritten and reformatted.
(FoldBuiltinConst): Rewritten and reformatted.
(FoldBuiltinTypeInfo): Rewritten and reformatted.
(CodeStandardFunction): Rewritten and reformatted.
(CodeSavePriority): Rewritten and reformatted.
(CodeRestorePriority): Rewritten and reformatted.
(CodeUnarySet): Rewritten and reformatted.
(FoldIfIn): Rewritten and reformatted.
(GetSetLimits): Rewritten and reformatted.
(CodeIncl): Rewritten and reformatted.
(CodeExcl): Rewritten and reformatted.
(FoldUnary): Rewritten and reformatted.
(FoldUnarySet): Rewritten and reformatted.
(CodeUnaryCheck): Rewritten and reformatted.
(CodeUnary): Rewritten and reformatted.
(CodeNegateChecked): Rewritten and reformatted.
(CodeSize): Rewritten and reformatted.
(FoldRecordField): Delete variables location and t.
(BuildHighFromArray): Rewritten and reformatted.
(BuildHighFromStaticArray): Rewritten and reformatted.
(ResolveHigh): Rewritten and reformatted.
(FoldHigh): Rewritten and reformatted.
(CodeArray): Rewritten and reformatted.
(FoldElementSizeForArray): Rewritten and reformatted.
(FoldElementSizeForUnbounded): Rewritten and reformatted.
(FoldConvert): Rewritten and reformatted.
(CodeIfNotEqu): Rewritten and reformatted.
(MixTypes3): Rewritten and reformatted.
(AddQuadInformation): Rewritten and reformatted.
(UndoReadWriteInfo): Rewritten and reformatted.
(WriteQuad): Rewritten and reformatted.
* gm2-gcc/m2statement.c (BuildFunctionCallTree): New function.
* gm2-gcc/m2statement.def (BuildFunctionCallTree): New function.
* gm2-gcc/m2statement.h (BuildFunctionCallTree): New function.
2021-09-16 Gaius Mulley <gaius.mulley@southwales.ac.uk>
* gm2-compiler/M2GenGCC.def (DoCopyString): Renamed parameter t
to length.
* gm2-compiler/M2GenGCC.mod (CodeStatement): Call
FoldStatementNote with one parameter. Call CodeGoto with
one parameter. Call CodeReturnValue without op2. Call
CodeInline without q, op1 and op2. Call CodeStatement with a
single parameter. Call CodeSaveException a single parameter op3.
Call CodeRestoreException with op1 and op3.
(ResolveConstantExpressions) Call FoldStatementNote with one
parameter. Call FoldRange without op1 and op2. Call
FoldStatementNote with only op3. (CodeInline) Reformatted.
(FoldStatementNote) changed to use a single parameter.
(FoldRange) Renamed parameter q to quad, commented out p
and removed op1, op2. (CodeSaveException) Rewritten using
descriptive variable names. (CodeRestoreException) Rewritten
using descriptive variable names. (MakeCopyAndUse) Use
BuildAssignmentStatement and remove variable t.
(AutoInitVariable) Use BuildAssignmentStatement and remove
variable t. (CodeMakeAdr) Use BuildAssignmentStatement.
(CodeAddr) Use BuildAssignmentStatement and remove
variable t. (DoCopyString) Renamed parameter t to length.
(CodeInitAddress) Use BuildAssignmentStatement and remove
variable t. (CodeBecomes) Use BuildAssignmentStatement and remove
variable t. (CodeBinaryCheck) Use BuildAssignmentStatement and
remove variable t. (CodeBinary) Use BuildAssignmentStatement and
remove variable t. (CodeStandardFunction) Use
BuildAssignmentStatement and remove variable t.
(CodeUnaryCheck) Use BuildAssignmentStatement and remove
variable t. (CodeUnary) Use BuildAssignmentStatement and remove
variable t. (CodeSize) Use BuildAssignmentStatement and remove
variable t. (CodeOffset) Use BuildAssignmentStatement and remove
variable t. (CodeHigh) Use BuildAssignmentStatement and remove
variable t. (CodeUnbounded) Use BuildAssignmentStatement and remove
variable t. (CodeArray) Use BuildAssignmentStatement and remove
variable t. (FoldRecordField) renamed local variable t to ptr.
(CodeOffset) renamed local variable t to offset.
* gm2-gcc/m2statement.def (BuildAssignmentStatement): New
procedure.
* gm2-gcc/m2statement.h (BuildAssignmentStatement): New
function declaration.
* gm2-gcc/m2statement.c: (BuildAssignmentStatement): New
function.
2021-09-13 Gaius Mulley <gaius.mulley@southwales.ac.uk>
* gm2-compiler/M2ALU.mod (WatchedValue): Removed. (stop)
Removed. (AddElement) Removed. (SetNegate) Removed variable j.
(DisplayElements) Removed variable t. (WalkConstructorDependants)
Removed variable r. (PerformSetIn) Removed variable v.
(BuildStructBitset) Removed GccField. (ConstructRecordConstant)
Removed variables GccFieldType, gccsym, high, low and location.
(InitialiseArrayOfCharWithString) Removed parameter v.
(CheckElementString) Remove parameter baseType. Call
InitialiseArrayOfCharWithString without the NIL third parameter.
(InitialiseArrayWith) Remove parameter baseType. Call
CheckElementString without baseType. (InitialiseArrayOfCharWith)
Remove parameter baseType. Remove variables Subrange, Subscript
and seenString.
* gm2-compiler/M2CaseList.def (OverlappingCaseBounds): Remove
unused tokenno parameter. (MissingCaseBounds) use MetaErrorT2 and
position the error at tokenno. (WriteCase) Simplistic
implmentation.
* gm2-compiler/M2Range.mod: (FoldCaseBounds) call
OverlappingCaseBounds without tokenno parameter.
2021-08-26 Gaius Mulley <gaius.mulley@southwales.ac.uk>
* Make-lang.in (GM2-COMP-BOOT-DEFS): Remove cflex.def from list.
(GM2-COMP-BOOT-MODS) Remove cflex.mod from list.
* gm2-compiler/CLexBuf.mod (GetToken):
Remove unused local variable a. Use AdvanceToken
instead of GetToken. (AddTokToList) Remove unused variable b.
(IsLastTokenEof) Remove unused variable t.
* gm2-compiler/M2ALU.mod (Reduce): New procedure.
(PrintValue) Use Reduce rather than PopIntegerTree.
* gm2-compiler/M2Base.mod (Param): Remove unused
global variable. (IsVarientSame) Initialize ga at the procedure
start. Initialize gb at the procedure start.
* gm2-compiler/M2CaseList.def (CaseBoundsResolved): tokenno
parameter removed.
* gm2-compiler/M2CaseList.mod (RangePair): Data type
simplified. (ConflictingPair) Data type simplified. (CaseList)
Data type simplified. (SetRange) Data type simplified.
(Overlaps) Reformatted. (OverlappingCaseBound) Remove tokenno
parameter.
* gm2-compiler/M2GenGCC.mod (ConvertForComparison):
Commented out. (IsWord) Removed. (HaveDifferentTypes) Removed.
(FoldSetLogicalDifference) Commented out. (DetermineFieldOf)
Commented out. (CodeMath) Commented out.
* gm2-compiler/M2Range.mod (FoldCaseBounds): Remove
first parameter to TypeCaseBounds. (CodeCaseBounds) Remove
first parameter to TypeCaseBounds.
* gm2-compiler/M2Search.mod (Assert): Imported.
(GarbageDebugging) Declared. (doDSdbEnter) Commented out.
(doDSdbExit) Commented out. (DSdbEnter) Commented out.
(DSdbExit) Commented out. (DSdbExit) Assert s # NIL.
* gm2-compiler/M2Swig.mod (Doresolveorder): Remove
parameter main. (DetermineParameter) Remove annotate parameter.
* gm2-compiler/ObjectFiles.mod (RegisterModuleObject):
Remove local variable r as libc.close and libc.read procedure
functions have an optional return result. (IsRegistered)
Remove local variable r as libc.close and libc.read procedure
functions have an optional return result.
* gm2-compiler/PCSymBuild.mod (WalkConst): Commented out.
* gm2-compiler/Sets.mod (checkRange): Remove unused
variable a. Use Assert to check memset and memcpy results instead
of assigning to a. (DuplicateSet) Remove unused variable a.
Use Assert to check return value of memset and memcpy instead of
assigning to a.
* gm2-compiler/SymbolTable.mod (MetaErrorT2): Imported.
(AlreadyImportedError) Commented out. (DisplayScopes) Commented
out. (GetConstFromTypeTree) Commented out.
(PutConstIntoTypeTree) Commented out. (SkipHiddenType) Commented
out. (GetLastMainScopeId) Commented out.
(PutExportUnImplemented) Commented out. (DumpSymbols) Commented out.
* gm2-compiler/cflex.def (AdvanceToken): New procedure.
* gm2-libs-min/libc.c (abort): Add infinite loop.
(exit) Add infinite loop.
* gm2-libs/libc.def (read): Define return value as
optional. (write) Define return value as optional.
(close) Define return value as optional.
(system) Define return value as optional.
(readv) Define return value as optional.
(writev) Define return value as optional.
(chown) Define return value as optional.
(strcpy) Define return value as optional.
(strncpy) Define return value as optional.
(unlink) Define return value as optional.
(memcpy) Define return value as optional.
(memset) Define return value as optional.
(memmove) Define return value as optional.
(setenv) Define return value as optional.
(ftime) Define return value as optional.
(shutdown) Define return value as optional.
(rename) Define return value as optional.
(atexit) Sefine return value as optional.
* Makefile.in: Rebuilt.
2021-08-26 Gaius Mulley <gaius.mulley@southwales.ac.uk>
* gcc/m2/Make-lang.in (cflex.def): Removed from
GM2-COMP-BOOT-DEFS. (cflex.mod) Removed from
GM2-COMP-BOOT-MODS.
* gcc/m2/gm2-compiler/CLexBuf.mod (GetToken):
Remove unused local variable a. Use AdvanceToken
instead of GetToken. (AddTokToList) Remove unused variable b.
(IsLastTokenEof) Remove unused variable t.
* gcc/m2/gm2-compiler/M2ALU.mod (Reduce): New procedure.
(PrintValue) Use Reduce rather than PopIntegerTree.
* gcc/m2/gm2-compiler/M2Base.mod (Param): Remove unused
global variable. (IsVarientSame) Initialize ga at the procedure
start. Initialize gb at the procedure start.
* gcc/m2/gm2-compiler/M2CaseList.def (CaseBoundsResolved) tokenno
parameter removed.
* gcc/m2/gm2-compiler/M2CaseList.mod (RangePair) Data type
simplified. (ConflictingPair) Data type simplified. (CaseList)
Data type simplified. (SetRange) Data type simplified.
(Overlaps) Reformatted. (OverlappingCaseBound) Remove tokenno
parameter.
* gcc/m2/gm2-compiler/M2GenGCC.mod: (ConvertForComparison)
Commented out. (IsWord) Removed. (HaveDifferentTypes) Removed.
(FoldSetLogicalDifference) Commented out. (DetermineFieldOf)
Commented out. (CodeMath) Commented out.
* gcc/m2/gm2-compiler/M2Range.mod (FoldCaseBounds) remove
first parameter to TypeCaseBounds. (CodeCaseBounds) remove
first parameter to TypeCaseBounds.
* gcc/m2/gm2-compiler/M2Search.mod (Assert) Imported.
(GarbageDebugging) Declared. (doDSdbEnter) Commented out.
(doDSdbExit) Commented out. (DSdbEnter) Commented out.
(DSdbExit) Commented out. (DSdbExit) Assert s # NIL.
* gcc/m2/gm2-compiler/M2Swig.mod (Doresolveorder) Remove
parameter main. (DetermineParameter) Remove annotate parameter.
* gcc/m2/gm2-compiler/ObjectFiles.mod (RegisterModuleObject)
Remove local variable r as libc.close and libc.read procedure
functions have an optional return result. (IsRegistered)
Remove local variable r as libc.close and libc.read procedure
functions have an optional return result.
* gcc/m2/gm2-compiler/PCSymBuild.mod (WalkConst): Commented out.
* gcc/m2/gm2-compiler/Sets.mod (checkRange): Remove unused
variable a. Use Assert to check memset and memcpy results instead
of assigning to a. (DuplicateSet): Remove unused variable a.
Use Assert to check return value of memset and memcpy instead of
assigning to a.
* gcc/m2/gm2-compiler/SymbolTable.mod (MetaErrorT2): Imported.
(AlreadyImportedError) Commented out. (DisplayScopes) Commented
out. (GetConstFromTypeTree) Commented out.
(PutConstIntoTypeTree) Commented out. (SkipHiddenType) Commented
out. (GetLastMainScopeId) Commented out.
(PutExportUnImplemented) Commented out. (DumpSymbols) Commented out.
* gcc/m2/gm2-compiler/cflex.def (AdvanceToken): New procedure.
* gcc/m2/gm2-libs-min/libc.c (abort): Add infinite loop.
(exit): Add infinite loop.
* gcc/m2/gm2-libs/libc.def (read): define return value as
optional. (write) define return value as optional.
(close) define return value as optional.
(system) define return value as optional.
(readv) define return value as optional.
(writev) define return value as optional.
(chown) define return value as optional.
(strcpy) define return value as optional.
(strncpy) define return value as optional.
(unlink) define return value as optional.
(memcpy) define return value as optional.
(memset) define return value as optional.
(memmove) define return value as optional.
(setenv) define return value as optional.
(ftime) define return value as optional.
(shutdown) define return value as optional.
(rename) define return value as optional.
(atexit) define return value as optional.
(Makefile.in): Rebuilt.
2021-08-18 Gaius Mulley <gaius.mulley@southwales.ac.uk>
* gm2-compiler/M2Options.def (SetMakeall): Commented out.
(SetMakeall0) Commented out. (SetIncludePath) Commented out.
* gm2-compiler/M2Options.mod: (SetMakeall): Commented out.
(SetMakeall0) Commented out. (SetIncludePath) Commented out.
* gm2-libs/SArgs.mod (GetArg): Cast ArgV to PtrToChar before
adding the offset. Removes a warning from the resultant C/C++ code.
2021-08-18 Gaius Mulley <gaius.mulley@southwales.ac.uk>
* Make-lang.in: Add $(generated_files) to the list
of dependanies for all .o files.
2021-08-17 Gaius Mulley <gaius.mulley@southwales.ac.uk>
* Make-lang.in (m2/gm2-gcc/%.o): Add $(generated_files) to the list
of dependanies.
2021-08-15 Gaius Mulley <gaius.mulley@southwales.ac.uk>
* m2-boot-ch/Gtermios.c (GetFlag): Correct guard using
defined(__MAX_BAUD). (SetFlag): Correct guard using
defined(__MAX_BAUD).
2021-08-12 Gaius Mulley <gaius.mulley@southwales.ac.uk>
* gm2-libs/GetOpt.mod: Rename the getopt module with cgetopt
to avoid a clash of source filenames in the gcc tree.
2021-08-12 Gaius Mulley <gaius.mulley@southwales.ac.uk>
* Make-lang.in (PGE): bootstrap binary location changed.
Use gcc-12 version of the gm2 libraries when regenerating
mc. All automatically generated parser files for mc are now
built by PGE using the -o option.
* gm2-compiler/M2Base.def (NegateType): Remove NearTok
parameter.
* gm2-compiler/M2Base.mod (NegateType): Remove NearTok
parameter. (IsEnumerationSame) Remove error parameter.
* gm2-compiler/M2GenGCC.mod: Caller to NegateType removes
token position parameter.
* gm2-compiler/M2Quads.mod: Caller to NegateType removes
token position parameter.
* gm2-compiler/M2System.mod (Assert) Imported.
(AttemptToCreateType) renamed to CreateType.
(AttemptToCreateSetType) renamed to CreateSetType.
(AttemptToCreateSetType) reimplemented. (AttemptToCreateType)
reimplemented. (MakeFixedSizedTypes) reimplemented.
(InitPIMTypes) reimplemented. (InitISOTypes) reimplemented.
(MakeExtraSystemTypes) reimplemented.
* gm2-compiler/PCSymBuild.mod (stackPtr) Removed. (currentConst)
removed. (BuildVarAtAddress) Commented out.
(BuildOptArgInitializer) Commented out.
* mc/keyc.mod: Introduce prototype for throw.
* mc-boot/GDynamicStrings.c: Rebuilt.
* mc-boot/GFIO.c: Rebuilt.
* mc-boot/GIndexing.c: Rebuilt.
* mc-boot/GM2EXCEPTION.c: Rebuilt.
* mc-boot/GPushBackInput.c: Rebuilt.
* mc-boot/GRTExceptions.c: Rebuilt.
* mc-boot/GRTint.c: Rebuilt.
* mc-boot/GStdIO.c: Rebuilt.
* mc-boot/GStrLib.c: Rebuilt.
* mc-boot/GStrLib.h: Rebuilt.
* mc-boot/GStringConvert.c: Rebuilt.
* mc-boot/GSysStorage.c: Rebuilt.
* mc-boot/Gdecl.c: Rebuilt.
* mc-boot/Gkeyc.c: Rebuilt.
* mc-boot/GmcComment.c: Rebuilt.
* mc-boot/GmcComp.c: Rebuilt.
* mc-boot/GmcDebug.c: Rebuilt.
* mc-boot/GmcMetaError.c: Rebuilt.
* mc-boot/GmcStack.c: Rebuilt.
* mc-boot/Gmcp1.c: Rebuilt.
* mc-boot/Gmcp2.c: Rebuilt.
* mc-boot/Gmcp3.c: Rebuilt.
* mc-boot/Gmcp4.c: Rebuilt.
* mc-boot/Gmcp5.c: Rebuilt.
* mc-boot/GnameKey.c: Rebuilt.
* mc-boot/GsymbolKey.c: Rebuilt.
2021-08-10 Gaius Mulley <gaius.mulley@southwales.ac.uk>
* gm2-compiler/M2Quads.mod (doDSdbEnter): Commented out.
(DSdbExit) Remove parameter. (GetQF) Cast procedure
function return result. (CheckAddVariableReadLeftValue)
Commented out. (CheckRemoveVariableReadLeftValue) Commented
out. (CheckParameterOrdinals) Remove parameter.
(CheckProcTypeAndProcedure) Remove tokpos and TypeList parameters.
(BuildCapFunction) Use local optok instead of erroneous global
vartok. (BuildProcedureEnd) Use RemoveTop rather than PopWord.
(CheckReadBeforeInitialized) Call CheckReadBeforeInitialized
without Start parameter. (CheckForLogicalOperator) Renamed
CheckLogicalOperator. (CheckGenericNulSet) Renamed
doCheckGenericNulSet and commented out. (CheckForGenericNulSet)
Renamed CheckGenericNulSet and commented out. (ds) Commented out.
(DSdbExit) called without a parameter. (BuildStmtNote)
Reformatted and INTEGER i is cast to a CARDINAL prior to
comparison. (IncOperandD) Commented out. (PushTrw) Commented
out. (StressStack) Commented out.
* gm2-compiler/M2StackWord.def (RemoveTop): Definition added.
* gm2-compiler/M2StackWord.mod (RemoveTop): Implementation added.
2021-08-02 Gaius Mulley <gaius.mulley@southwales.ac.uk>
* gm2-compiler/M2BasicBlock.mod (ConvertQuads2BasicBlock): Assign
CurrentBB to NIL. (Sub): Commented out. (DisplayBasicBlocks):
Commented out. (DisplayBlock): Commented out.
* gm2-compiler/M2Code.mod (PrintModule): Commented out.
(DisplayQuadsInScope): Commented out. (DisplayQuadNumbers):
Commented out.
* gm2-compiler/M2Error.mod: Import NulName. (DoFormat1) initialize
n. (DoFormat2) initialize n.
* gm2-compiler/M2Optimize.mod (DeleteUnReachableProcedures):
Commented out.
* gm2-compiler/M2Options.mod: Commented out string garbage
debugging procedures. (SetDebugging) Commented out.
* gm2-compiler/M2Printf.mod (IsDigit): Commented out.
* gm2-compiler/P1SymBuild.mod (CheckProcedure): Removed.
(CheckFileName) Commented out. (BuildHiddenType) Remove Sym.
Use Assert to check return value.
* gm2-compiler/P2SymBuild.def (SeenBoolean): Remove sym parameter.
(SeenZType): Remove sym parameter. (SeenRType): Remove sym
parameter. (SeenCType): Remove sym parameter.
* gm2-compiler/P2SymBuild.mod (SeenBoolean): Remove sym parameter.
(SeenZType): Remove sym parameter. (SeenRType): Remove sym
parameter. (SeenCType): Remove sym parameter.
(StartBuildEnumeration): Remove name. (FailParameter) Use default
ELSE and Assert. (BuildNulParam) Removed. (BuildFieldRecord)
Remove name. Assign Field to NulSym. (BuildVarientSelector)
Remove Parent.
* gm2-compiler/SymbolTable.def (GCFieldVarient): Removed.
(FillInUnboundedFields): Remove field.
* gm2-compiler/gm2lcc.mod (CollectObjects): remove s.
(WriteModuleName) Removed.
* gm2-compiler/gm2lorder.mod (InitRuntimeModules) Remove l.
* gm2-gcc/m2expr.c (divFloorOverflowPosPos) Remove unused
parameters. (divFloorOverflowPosNeg) Remove unused parameters.
(divFloorOverflowNegPos) Remove unused parameters.
2021-07-28 Gaius Mulley <gaius.mulley@southwales.ac.uk>
* Make-lang.in: Added Output.mod to the list of ppg
modules.
* Make-lang.in: Added Output.def to the list of ppg
modules.
* gm2-compiler/Output.def: (New file).
* gm2-compiler/Output.mod: (New file).
* bnf/gm2l.bnf: (DescribeError) no longer has any parameters.
Removed unused rules.
* bnf/gm2m.bnf: (DescribeError) no longer has any parameters.
Removed unused rules.
* bnf/m2-1.bnf: (DescribeError) no longer has any parameters.
Removed unused rules.
* bnf/m2-2.bnf: (DescribeError) no longer has any parameters.
Removed unused rules.
* bnf/m2-3.bnf: (DescribeError) no longer has any parameters.
Removed unused rules.
* bnf/m2-c.bnf: (DescribeError) no longer has any parameters.
Removed unused rules.
* bnf/m2-h.bnf: (DescribeError) no longer has any parameters.
Removed unused rules.
* bnf/m2.bnf: (DescribeError) no longer has any parameters.
Removed unused rules.
* bnf/mc-1.bnf: (DescribeError) no longer has any parameters.
Removed unused rules.
* bnf/mc-2.bnf: (DescribeError) no longer has any parameters.
Removed unused rules.
* bnf/mc-3.bnf: (DescribeError) no longer has any parameters.
Removed unused rules.
* bnf/mc-4.bnf: (DescribeError) no longer has any parameters.
Removed unused rules.
* bnf/mc-5.bnf: (DescribeError) no longer has any parameters.
Removed unused rules.
* gm2-compiler/M2ALU.mod: (InitialiseArrayOfCharWithString)
isChar set to FALSE.
* gm2-compiler/M2ALU.def: (DisplayModules) exported.
* gm2-compiler/M2Depth.def: (DisplayGraph) exported.
* gm2-compiler/M2Depth.mod: (DisplayGraph) added comment.
* gm2-compiler/M2Options.mod: (SetProfiling) commented out.
* gm2-compiler/M2Quads.mod: (BuildAddAdrFunction) vartok removed.
(BuildAbsFunction) combinedtok removed. (BuildRotateFunction)
paramtok removed.
* gm2-compiler/P0SymBuild.mod: (pc) commented out.
(FlushImports) removed sym and reformatted. (DeclareModules)
reformatted. (MoveNext) commented out.
* gm2-compiler/SymbolKey.mod: (stop) commented out.
* gm2-compiler/ppg.mod: (Output) imported. (ArgName)
declared. (ParametersUsed) declared. (PrettyFollow)
use the Output module to delay emitting text. (WriteCodeHunkList)
use the Output module to delay emitting text. (WriteIndent)
use the Output module to delay emitting text. (WriteIndent)
(CheckWrite) use the Output module to delay emitting text.
(WriteIndent) use the Output module to delay emitting text.
(NewLine) use the Output module to delay emitting text.
(IndentString) use the Output module to delay emitting text.
(DescribeError) remove parameters. (SyntaxError) call
DescribeError without parameters. (KeyWord) use the
Output module to delay emitting text. (PrettyPara)
use the Output module to delay emitting text. (WriteKeyTexinfo)
use the Output module to delay emitting text.
(PrettyCommentFactor) use the Output module to delay emitting
text. (PrettyCommentTerm) use the Output module to delay emitting
text. (PrettyCommentProduction) use the Output module to delay emitting
text. (PrettyPrintProduction) use the Output module to delay emitting
text. (EmitFileLineTag) use the Output module to delay emitting
text. (CodeThenDo) use the Output module to delay emitting
text. (CodeElseEnd) use the Output module to delay emitting
text. (EmitNonVarCode) use the Output module to delay emitting
text. (FlushCode) use the Output module to delay emitting
text. (CodeFactor) use the Output module to delay emitting
text. (CodeProduction) use the Output module to delay emitting
text. (WriteElement) use the Output module to delay emitting
text. (EmitIsInSet) use the Output module to delay emitting
text. (EmitIsInSubSet) use the Output module to delay emitting
text. (EmitIsInFirst) use the Output module to delay emitting
text. (RecoverFactor) use the Output module to delay emitting
text. (RecoverTerm) use the Output module to delay emitting
text. (EmitUsed) use the Output module to delay emitting
text. (EmitStopParameters) use the Output module to delay emitting
text. (EmitSet) use the Output module to delay emitting
text. (EmitSetName) use the Output module to delay emitting
text. (EmitStopParametersAndSet) use the Output module to delay emitting
text. (EmitSetAsParameters) use the Output module to delay emitting
text. (EmitStopParametersAndFollow) use the Output module to delay emitting
text. (RecoverProduction) use the Output module to delay emitting
text. (WriteUpto) use the Output module to delay emitting
text. (CheckForVar) use the Output module to delay emitting
text. (EmitFDLNotice) use the Output module to delay emitting
text. (DescribeElement) use the Output module to delay emitting
text. (EmitInTestStop) use the Output module to delay emitting
text. (DescribeStopElement) use the Output module to delay emitting
text. (EmitDescribeStop) use the Output module to delay emitting
text. (EmitDescribeError) use the Output module to delay emitting
text. (EmitSetTypes) use the Output module to delay emitting
text. (ParseArgs) open output filename.
* gm2-gcc/m2decl.c: (m2decl_DeclareKnownVariable) change format
specifier to generate quoted declaration. Call internal_error
and use quoted format specifier.
* gm2-gcc/m2except.c: (ASSERT) removed. (ERROR) removed.
(m2except_BuildThrow) rewritten.
* gm2-gcc/m2expr.c: (m2expr_GetSizeOfInBits) use quoted format
specifier for error. (m2type_BuildSetTypeFromSubrange) add
attribute unused for the name of the subrange and add comment
about dwarf-5 set type.
* gm2-libs/StrLib.def: (StrLen) renamed parameters.
* gm2-libs/StrLib.mod: (StrLen) renamed parameters.
* init/ppginit: Add SFIO and Output to the list of modules.
* gm2-compiler/Output.def: (New file).
* gm2-compiler/Output.mod: (New file).
2021-07-07 Gaius Mulley <gaius.mulley@southwales.ac.uk>
* COPYING.FDL: New file.
* COPYING.RUNTIME: New file.
* COPYING3: New file.
* COPYING3.LIB: New file.
* ChangeLog-2001: New file.
* ChangeLog-2002: New file.
* ChangeLog-2003: New file.
* ChangeLog-2004: New file.
* ChangeLog-2005: New file.
* ChangeLog-2006: New file.
* ChangeLog-2007: New file.
* ChangeLog-2008: New file.
* ChangeLog-2009: New file.
* ChangeLog-2010: New file.
* ChangeLog-2011: New file.
* ChangeLog-2012: New file.
* ChangeLog-2013: New file.
* ChangeLog-2014: New file.
* ChangeLog-2015: New file.
* ChangeLog-2016: New file.
* ChangeLog-2017: New file.
* ChangeLog-2018: New file.
* ChangeLog-2019: New file.
* ChangeLog-2020: New file.
* Make-lang.in: New file.
* NEWS: New file.
* README: New file.
* aclocal.m4: New file.
* bnf/README: New file.
* bnf/gm2l.bnf: New file.
* bnf/gm2m.bnf: New file.
* bnf/m2-1.bnf: New file.
* bnf/m2-2.bnf: New file.
* bnf/m2-3.bnf: New file.
* bnf/m2-c.bnf: New file.
* bnf/m2-h.bnf: New file.
* bnf/m2.bnf: New file.
* bnf/mc-1.bnf: New file.
* bnf/mc-2.bnf: New file.
* bnf/mc-3.bnf: New file.
* bnf/mc-4.bnf: New file.
* bnf/mc-5.bnf: New file.
* config-lang.in: New file.
* config-make.in: New file.
* configure: New file.
* configure.ac: New file.
* el/gm2-mode.el: New file.
* gm2-compiler/CLexBuf.def: New file.
* gm2-compiler/CLexBuf.mod: New file.
* gm2-compiler/FifoQueue.def: New file.
* gm2-compiler/FifoQueue.mod: New file.
* gm2-compiler/Lists.def: New file.
* gm2-compiler/Lists.mod: New file.
* gm2-compiler/M2ALU.def: New file.
* gm2-compiler/M2ALU.mod: New file.
* gm2-compiler/M2AsmUtil.def: New file.
* gm2-compiler/M2AsmUtil.mod: New file.
* gm2-compiler/M2Base.def: New file.
* gm2-compiler/M2Base.mod: New file.
* gm2-compiler/M2BasicBlock.def: New file.
* gm2-compiler/M2BasicBlock.mod: New file.
* gm2-compiler/M2Batch.def: New file.
* gm2-compiler/M2Batch.mod: New file.
* gm2-compiler/M2Bitset.def: New file.
* gm2-compiler/M2Bitset.mod: New file.
* gm2-compiler/M2CaseList.def: New file.
* gm2-compiler/M2CaseList.mod: New file.
* gm2-compiler/M2Check.def: New file.
* gm2-compiler/M2Check.mod: New file.
* gm2-compiler/M2Code.def: New file.
* gm2-compiler/M2Code.mod: New file.
* gm2-compiler/M2ColorString.def: New file.
* gm2-compiler/M2ColorString.mod: New file.
* gm2-compiler/M2Comp.def: New file.
* gm2-compiler/M2Comp.mod: New file.
* gm2-compiler/M2Configure.def: New file.
* gm2-compiler/M2Configure.mod: New file.
* gm2-compiler/M2Const.def: New file.
* gm2-compiler/M2Const.mod: New file.
* gm2-compiler/M2Debug.def: New file.
* gm2-compiler/M2Debug.mod: New file.
* gm2-compiler/M2DebugStack.def: New file.
* gm2-compiler/M2DebugStack.mod: New file.
* gm2-compiler/M2Defaults.def: New file.
* gm2-compiler/M2Defaults.mod: New file.
* gm2-compiler/M2Depth.def: New file.
* gm2-compiler/M2Depth.mod: New file.
* gm2-compiler/M2DriverOptions.def: New file.
* gm2-compiler/M2DriverOptions.mod: New file.
* gm2-compiler/M2Emit.def: New file.
* gm2-compiler/M2Emit.mod: New file.
* gm2-compiler/M2Error.def: New file.
* gm2-compiler/M2Error.mod: New file.
* gm2-compiler/M2EvalSym.def: New file.
* gm2-compiler/M2FileName.def: New file.
* gm2-compiler/M2FileName.mod: New file.
* gm2-compiler/M2GCCDeclare.def: New file.
* gm2-compiler/M2GCCDeclare.mod: New file.
* gm2-compiler/M2GenGCC.def: New file.
* gm2-compiler/M2GenGCC.mod: New file.
* gm2-compiler/M2Lex.def: New file.
* gm2-compiler/M2Lex.mod: New file.
* gm2-compiler/M2LexBuf.def: New file.
* gm2-compiler/M2LexBuf.mod: New file.
* gm2-compiler/M2MetaError.def: New file.
* gm2-compiler/M2MetaError.mod: New file.
* gm2-compiler/M2Optimize.def: New file.
* gm2-compiler/M2Optimize.mod: New file.
* gm2-compiler/M2Options.def: New file.
* gm2-compiler/M2Options.mod: New file.
* gm2-compiler/M2Pass.def: New file.
* gm2-compiler/M2Pass.mod: New file.
* gm2-compiler/M2Preprocess.def: New file.
* gm2-compiler/M2Preprocess.mod: New file.
* gm2-compiler/M2Printf.def: New file.
* gm2-compiler/M2Printf.mod: New file.
* gm2-compiler/M2Quads.def: New file.
* gm2-compiler/M2Quads.mod: New file.
* gm2-compiler/M2Quiet.def: New file.
* gm2-compiler/M2Quiet.mod: New file.
* gm2-compiler/M2Range.def: New file.
* gm2-compiler/M2Range.mod: New file.
* gm2-compiler/M2Reserved.def: New file.
* gm2-compiler/M2Reserved.mod: New file.
* gm2-compiler/M2SSA.def: New file.
* gm2-compiler/M2SSA.mod: New file.
* gm2-compiler/M2Scope.def: New file.
* gm2-compiler/M2Scope.mod: New file.
* gm2-compiler/M2Search.def: New file.
* gm2-compiler/M2Search.mod: New file.
* gm2-compiler/M2Size.def: New file.
* gm2-compiler/M2Size.mod: New file.
* gm2-compiler/M2StackAddress.def: New file.
* gm2-compiler/M2StackAddress.mod: New file.
* gm2-compiler/M2StackWord.def: New file.
* gm2-compiler/M2StackWord.mod: New file.
* gm2-compiler/M2Students.def: New file.
* gm2-compiler/M2Students.mod: New file.
* gm2-compiler/M2Swig.def: New file.
* gm2-compiler/M2Swig.mod: New file.
* gm2-compiler/M2System.def: New file.
* gm2-compiler/M2System.mod: New file.
* gm2-compiler/M2Version.def: New file.
* gm2-compiler/NameKey.def: New file.
* gm2-compiler/NameKey.mod: New file.
* gm2-compiler/ObjectFiles.def: New file.
* gm2-compiler/ObjectFiles.mod: New file.
* gm2-compiler/P0SymBuild.def: New file.
* gm2-compiler/P0SymBuild.mod: New file.
* gm2-compiler/P0SyntaxCheck.def: New file.
* gm2-compiler/P1Build.def: New file.
* gm2-compiler/P1SymBuild.def: New file.
* gm2-compiler/P1SymBuild.mod: New file.
* gm2-compiler/P2Build.def: New file.
* gm2-compiler/P2SymBuild.def: New file.
* gm2-compiler/P2SymBuild.mod: New file.
* gm2-compiler/P3Build.def: New file.
* gm2-compiler/P3SymBuild.def: New file.
* gm2-compiler/P3SymBuild.mod: New file.
* gm2-compiler/PCBuild.def: New file.
* gm2-compiler/PCSymBuild.def: New file.
* gm2-compiler/PCSymBuild.mod: New file.
* gm2-compiler/PHBuild.def: New file.
* gm2-compiler/README: New file.
* gm2-compiler/Sets.def: New file.
* gm2-compiler/Sets.mod: New file.
* gm2-compiler/SymbolConversion.def: New file.
* gm2-compiler/SymbolConversion.mod: New file.
* gm2-compiler/SymbolKey.def: New file.
* gm2-compiler/SymbolKey.mod: New file.
* gm2-compiler/SymbolTable.def: New file.
* gm2-compiler/SymbolTable.mod: New file.
* gm2-compiler/bnflex.def: New file.
* gm2-compiler/bnflex.mod: New file.
* gm2-compiler/cflex.def: New file.
* gm2-compiler/gm2.mod: New file.
* gm2-compiler/gm2lcc.mod: New file.
* gm2-compiler/gm2lgen.mod: New file.
* gm2-compiler/gm2lorder.mod: New file.
* gm2-compiler/m2flex.def: New file.
* gm2-compiler/ppg.mod: New file.
* gm2-gcc/README: New file.
* gm2-gcc/dynamicstrings.h: New file.
* gm2-gcc/gcc-consolidation.h: New file.
* gm2-gcc/init.c: New file.
* gm2-gcc/init.def: New file.
* gm2-gcc/init.h: New file.
* gm2-gcc/m2assert.c: New file.
* gm2-gcc/m2assert.h: New file.
* gm2-gcc/m2block.c: New file.
* gm2-gcc/m2block.def: New file.
* gm2-gcc/m2block.h: New file.
* gm2-gcc/m2builtins.c: New file.
* gm2-gcc/m2builtins.def: New file.
* gm2-gcc/m2builtins.h: New file.
* gm2-gcc/m2color.c: New file.
* gm2-gcc/m2color.def: New file.
* gm2-gcc/m2color.h: New file.
* gm2-gcc/m2convert.c: New file.
* gm2-gcc/m2convert.def: New file.
* gm2-gcc/m2convert.h: New file.
* gm2-gcc/m2decl.c: New file.
* gm2-gcc/m2decl.def: New file.
* gm2-gcc/m2decl.h: New file.
* gm2-gcc/m2except.c: New file.
* gm2-gcc/m2except.def: New file.
* gm2-gcc/m2except.h: New file.
* gm2-gcc/m2expr.c: New file.
* gm2-gcc/m2expr.def: New file.
* gm2-gcc/m2expr.h: New file.
* gm2-gcc/m2linemap.c: New file.
* gm2-gcc/m2linemap.def: New file.
* gm2-gcc/m2linemap.h: New file.
* gm2-gcc/m2misc.c: New file.
* gm2-gcc/m2misc.def: New file.
* gm2-gcc/m2misc.h: New file.
* gm2-gcc/m2options.h: New file.
* gm2-gcc/m2range.h: New file.
* gm2-gcc/m2search.h: New file.
* gm2-gcc/m2statement.c: New file.
* gm2-gcc/m2statement.def: New file.
* gm2-gcc/m2statement.h: New file.
* gm2-gcc/m2top.c: New file.
* gm2-gcc/m2top.def: New file.
* gm2-gcc/m2top.h: New file.
* gm2-gcc/m2tree.c: New file.
* gm2-gcc/m2tree.def: New file.
* gm2-gcc/m2tree.h: New file.
* gm2-gcc/m2treelib.c: New file.
* gm2-gcc/m2treelib.def: New file.
* gm2-gcc/m2treelib.h: New file.
* gm2-gcc/m2type.c: New file.
* gm2-gcc/m2type.def: New file.
* gm2-gcc/m2type.h: New file.
* gm2-gcc/rtegraph.c: New file.
* gm2-gcc/rtegraph.h: New file.
* gm2-ici/M2Emit.mod: New file.
* gm2-ici/README: New file.
* gm2-ici/m2linemap.c: New file.
* gm2-internals.texi: New file.
* gm2-lang.c: New file.
* gm2-lang.h: New file.
* gm2-libiberty/README: New file.
* gm2-libiberty/choosetemp.def: New file.
* gm2-libiberty/pexecute.def: New file.
* gm2-libs-ch/README: New file.
* gm2-libs-ch/RTcodummy.c: New file.
* gm2-libs-ch/RTintdummy.c: New file.
* gm2-libs-ch/Selective.c: New file.
* gm2-libs-ch/SysExceptions.c: New file.
* gm2-libs-ch/UnixArgs.c: New file.
* gm2-libs-ch/cgetopt.c: New file.
* gm2-libs-ch/choosetemp.c: New file.
* gm2-libs-ch/dtoa.c: New file.
* gm2-libs-ch/errno.c: New file.
* gm2-libs-ch/host.c: New file.
* gm2-libs-ch/ldtoa.c: New file.
* gm2-libs-ch/pthdummy.c: New file.
* gm2-libs-ch/termios.c: New file.
* gm2-libs-ch/tools.c: New file.
* gm2-libs-ch/wrapc.c: New file.
* gm2-libs-ch/xlibc.c: New file.
* gm2-libs-coroutines/Debug.def: New file.
* gm2-libs-coroutines/Debug.mod: New file.
* gm2-libs-coroutines/Executive.def: New file.
* gm2-libs-coroutines/Executive.mod: New file.
* gm2-libs-coroutines/KeyBoardLEDs.def: New file.
* gm2-libs-coroutines/README.texi: New file.
* gm2-libs-coroutines/SYSTEM.def: New file.
* gm2-libs-coroutines/SYSTEM.mod: New file.
* gm2-libs-coroutines/TimerHandler.def: New file.
* gm2-libs-coroutines/TimerHandler.mod: New file.
* gm2-libs-iso/COROUTINES.def: New file.
* gm2-libs-iso/COROUTINES.mod: New file.
* gm2-libs-iso/ChanConsts.def: New file.
* gm2-libs-iso/ChanConsts.h: New file.
* gm2-libs-iso/ChanConsts.mod: New file.
* gm2-libs-iso/CharClass.def: New file.
* gm2-libs-iso/CharClass.mod: New file.
* gm2-libs-iso/ClientSocket.def: New file.
* gm2-libs-iso/ClientSocket.mod: New file.
* gm2-libs-iso/ComplexMath.def: New file.
* gm2-libs-iso/ComplexMath.mod: New file.
* gm2-libs-iso/ConvStringLong.def: New file.
* gm2-libs-iso/ConvStringLong.mod: New file.
* gm2-libs-iso/ConvStringReal.def: New file.
* gm2-libs-iso/ConvStringReal.mod: New file.
* gm2-libs-iso/ConvTypes.def: New file.
* gm2-libs-iso/ConvTypes.mod: New file.
* gm2-libs-iso/EXCEPTIONS.def: New file.
* gm2-libs-iso/EXCEPTIONS.mod: New file.
* gm2-libs-iso/ErrnoCategory.c: New file.
* gm2-libs-iso/ErrnoCategory.def: New file.
* gm2-libs-iso/GeneralUserExceptions.def: New file.
* gm2-libs-iso/GeneralUserExceptions.mod: New file.
* gm2-libs-iso/IOChan.def: New file.
* gm2-libs-iso/IOChan.mod: New file.
* gm2-libs-iso/IOConsts.def: New file.
* gm2-libs-iso/IOConsts.mod: New file.
* gm2-libs-iso/IOLink.def: New file.
* gm2-libs-iso/IOLink.mod: New file.
* gm2-libs-iso/IOResult.def: New file.
* gm2-libs-iso/IOResult.mod: New file.
* gm2-libs-iso/LongComplexMath.def: New file.
* gm2-libs-iso/LongComplexMath.mod: New file.
* gm2-libs-iso/LongConv.def: New file.
* gm2-libs-iso/LongConv.mod: New file.
* gm2-libs-iso/LongIO.def: New file.
* gm2-libs-iso/LongIO.mod: New file.
* gm2-libs-iso/LongMath.def: New file.
* gm2-libs-iso/LongMath.mod: New file.
* gm2-libs-iso/LongStr.def: New file.
* gm2-libs-iso/LongStr.mod: New file.
* gm2-libs-iso/LongWholeIO.def: New file.
* gm2-libs-iso/LongWholeIO.mod: New file.
* gm2-libs-iso/LowLong.def: New file.
* gm2-libs-iso/LowLong.mod: New file.
* gm2-libs-iso/LowReal.def: New file.
* gm2-libs-iso/LowReal.mod: New file.
* gm2-libs-iso/LowShort.def: New file.
* gm2-libs-iso/LowShort.mod: New file.
* gm2-libs-iso/M2EXCEPTION.def: New file.
* gm2-libs-iso/M2EXCEPTION.mod: New file.
* gm2-libs-iso/M2RTS.def: New file.
* gm2-libs-iso/M2RTS.mod: New file.
* gm2-libs-iso/MemStream.def: New file.
* gm2-libs-iso/MemStream.mod: New file.
* gm2-libs-iso/Preemptive.def: New file.
* gm2-libs-iso/Preemptive.mod: New file.
* gm2-libs-iso/Processes.def: New file.
* gm2-libs-iso/Processes.mod: New file.
* gm2-libs-iso/ProgramArgs.def: New file.
* gm2-libs-iso/ProgramArgs.mod: New file.
* gm2-libs-iso/README.texi: New file.
* gm2-libs-iso/RTco.def: New file.
* gm2-libs-iso/RTdata.def: New file.
* gm2-libs-iso/RTdata.mod: New file.
* gm2-libs-iso/RTentity.def: New file.
* gm2-libs-iso/RTentity.mod: New file.
* gm2-libs-iso/RTfio.def: New file.
* gm2-libs-iso/RTfio.mod: New file.
* gm2-libs-iso/RTgen.def: New file.
* gm2-libs-iso/RTgen.mod: New file.
* gm2-libs-iso/RTgenif.def: New file.
* gm2-libs-iso/RTgenif.mod: New file.
* gm2-libs-iso/RTio.def: New file.
* gm2-libs-iso/RTio.mod: New file.
* gm2-libs-iso/RandomNumber.def: New file.
* gm2-libs-iso/RandomNumber.mod: New file.
* gm2-libs-iso/RawIO.def: New file.
* gm2-libs-iso/RawIO.mod: New file.
* gm2-libs-iso/RealConv.def: New file.
* gm2-libs-iso/RealConv.mod: New file.
* gm2-libs-iso/RealIO.def: New file.
* gm2-libs-iso/RealIO.mod: New file.
* gm2-libs-iso/RealMath.def: New file.
* gm2-libs-iso/RealMath.mod: New file.
* gm2-libs-iso/RealStr.def: New file.
* gm2-libs-iso/RealStr.mod: New file.
* gm2-libs-iso/RndFile.def: New file.
* gm2-libs-iso/RndFile.mod: New file.
* gm2-libs-iso/SIOResult.def: New file.
* gm2-libs-iso/SIOResult.mod: New file.
* gm2-libs-iso/SLongIO.def: New file.
* gm2-libs-iso/SLongIO.mod: New file.
* gm2-libs-iso/SLongWholeIO.def: New file.
* gm2-libs-iso/SLongWholeIO.mod: New file.
* gm2-libs-iso/SRawIO.def: New file.
* gm2-libs-iso/SRawIO.mod: New file.
* gm2-libs-iso/SRealIO.def: New file.
* gm2-libs-iso/SRealIO.mod: New file.
* gm2-libs-iso/SShortIO.def: New file.
* gm2-libs-iso/SShortIO.mod: New file.
* gm2-libs-iso/SShortWholeIO.def: New file.
* gm2-libs-iso/SShortWholeIO.mod: New file.
* gm2-libs-iso/STextIO.def: New file.
* gm2-libs-iso/STextIO.mod: New file.
* gm2-libs-iso/SWholeIO.def: New file.
* gm2-libs-iso/SWholeIO.mod: New file.
* gm2-libs-iso/SYSTEM.def: New file.
* gm2-libs-iso/SYSTEM.mod: New file.
* gm2-libs-iso/Semaphores.def: New file.
* gm2-libs-iso/Semaphores.mod: New file.
* gm2-libs-iso/SeqFile.def: New file.
* gm2-libs-iso/SeqFile.mod: New file.
* gm2-libs-iso/ServerSocket.def: New file.
* gm2-libs-iso/ServerSocket.mod: New file.
* gm2-libs-iso/ShortComplexMath.def: New file.
* gm2-libs-iso/ShortComplexMath.mod: New file.
* gm2-libs-iso/ShortIO.def: New file.
* gm2-libs-iso/ShortIO.mod: New file.
* gm2-libs-iso/ShortWholeIO.def: New file.
* gm2-libs-iso/ShortWholeIO.mod: New file.
* gm2-libs-iso/SimpleCipher.def: New file.
* gm2-libs-iso/SimpleCipher.mod: New file.
* gm2-libs-iso/StdChans.def: New file.
* gm2-libs-iso/StdChans.mod: New file.
* gm2-libs-iso/Storage.def: New file.
* gm2-libs-iso/Storage.mod: New file.
* gm2-libs-iso/StreamFile.def: New file.
* gm2-libs-iso/StreamFile.mod: New file.
* gm2-libs-iso/StringChan.def: New file.
* gm2-libs-iso/StringChan.mod: New file.
* gm2-libs-iso/Strings.def: New file.
* gm2-libs-iso/Strings.mod: New file.
* gm2-libs-iso/SysClock.def: New file.
* gm2-libs-iso/SysClock.mod: New file.
* gm2-libs-iso/TERMINATION.def: New file.
* gm2-libs-iso/TERMINATION.mod: New file.
* gm2-libs-iso/TermFile.def: New file.
* gm2-libs-iso/TermFile.mod: New file.
* gm2-libs-iso/TextIO.def: New file.
* gm2-libs-iso/TextIO.mod: New file.
* gm2-libs-iso/WholeConv.def: New file.
* gm2-libs-iso/WholeConv.mod: New file.
* gm2-libs-iso/WholeIO.def: New file.
* gm2-libs-iso/WholeIO.mod: New file.
* gm2-libs-iso/WholeStr.def: New file.
* gm2-libs-iso/WholeStr.mod: New file.
* gm2-libs-iso/wrapsock.c: New file.
* gm2-libs-iso/wrapsock.def: New file.
* gm2-libs-iso/wraptime.c: New file.
* gm2-libs-iso/wraptime.def: New file.
* gm2-libs-min/M2RTS.def: New file.
* gm2-libs-min/M2RTS.mod: New file.
* gm2-libs-min/SYSTEM.def: New file.
* gm2-libs-min/SYSTEM.mod: New file.
* gm2-libs-min/libc.c: New file.
* gm2-libs-min/libc.def: New file.
* gm2-libs-pim/BitBlockOps.def: New file.
* gm2-libs-pim/BitBlockOps.mod: New file.
* gm2-libs-pim/BitByteOps.def: New file.
* gm2-libs-pim/BitByteOps.mod: New file.
* gm2-libs-pim/BitWordOps.def: New file.
* gm2-libs-pim/BitWordOps.mod: New file.
* gm2-libs-pim/BlockOps.def: New file.
* gm2-libs-pim/BlockOps.mod: New file.
* gm2-libs-pim/Break.c: New file.
* gm2-libs-pim/Break.def: New file.
* gm2-libs-pim/CardinalIO.def: New file.
* gm2-libs-pim/CardinalIO.mod: New file.
* gm2-libs-pim/Conversions.def: New file.
* gm2-libs-pim/Conversions.mod: New file.
* gm2-libs-pim/DebugPMD.def: New file.
* gm2-libs-pim/DebugPMD.mod: New file.
* gm2-libs-pim/DebugTrace.def: New file.
* gm2-libs-pim/DebugTrace.mod: New file.
* gm2-libs-pim/Delay.def: New file.
* gm2-libs-pim/Delay.mod: New file.
* gm2-libs-pim/Display.def: New file.
* gm2-libs-pim/Display.mod: New file.
* gm2-libs-pim/ErrorCode.def: New file.
* gm2-libs-pim/ErrorCode.mod: New file.
* gm2-libs-pim/FileSystem.def: New file.
* gm2-libs-pim/FileSystem.mod: New file.
* gm2-libs-pim/FloatingUtilities.def: New file.
* gm2-libs-pim/FloatingUtilities.mod: New file.
* gm2-libs-pim/InOut.def: New file.
* gm2-libs-pim/InOut.mod: New file.
* gm2-libs-pim/Keyboard.def: New file.
* gm2-libs-pim/Keyboard.mod: New file.
* gm2-libs-pim/LongIO.def: New file.
* gm2-libs-pim/LongIO.mod: New file.
* gm2-libs-pim/NumberConversion.def: New file.
* gm2-libs-pim/NumberConversion.mod: New file.
* gm2-libs-pim/README.texi: New file.
* gm2-libs-pim/Random.def: New file.
* gm2-libs-pim/Random.mod: New file.
* gm2-libs-pim/RealConversions.def: New file.
* gm2-libs-pim/RealConversions.mod: New file.
* gm2-libs-pim/RealInOut.def: New file.
* gm2-libs-pim/RealInOut.mod: New file.
* gm2-libs-pim/Strings.def: New file.
* gm2-libs-pim/Strings.mod: New file.
* gm2-libs-pim/Termbase.def: New file.
* gm2-libs-pim/Termbase.mod: New file.
* gm2-libs-pim/Terminal.def: New file.
* gm2-libs-pim/Terminal.mod: New file.
* gm2-libs-pim/TimeDate.def: New file.
* gm2-libs-pim/TimeDate.mod: New file.
* gm2-libs/ASCII.def: New file.
* gm2-libs/ASCII.mod: New file.
* gm2-libs/Args.def: New file.
* gm2-libs/Args.mod: New file.
* gm2-libs/Assertion.def: New file.
* gm2-libs/Assertion.mod: New file.
* gm2-libs/Break.def: New file.
* gm2-libs/Break.mod: New file.
* gm2-libs/Builtins.def: New file.
* gm2-libs/Builtins.mod: New file.
* gm2-libs/COROUTINES.def: New file.
* gm2-libs/COROUTINES.mod: New file.
* gm2-libs/CmdArgs.def: New file.
* gm2-libs/CmdArgs.mod: New file.
* gm2-libs/Debug.def: New file.
* gm2-libs/Debug.mod: New file.
* gm2-libs/DynamicStrings.def: New file.
* gm2-libs/DynamicStrings.mod: New file.
* gm2-libs/Environment.def: New file.
* gm2-libs/Environment.mod: New file.
* gm2-libs/FIO.def: New file.
* gm2-libs/FIO.mod: New file.
* gm2-libs/FormatStrings.def: New file.
* gm2-libs/FormatStrings.mod: New file.
* gm2-libs/FpuIO.def: New file.
* gm2-libs/FpuIO.mod: New file.
* gm2-libs/GetOpt.def: New file.
* gm2-libs/GetOpt.mod: New file.
* gm2-libs/IO.def: New file.
* gm2-libs/IO.mod: New file.
* gm2-libs/Indexing.def: New file.
* gm2-libs/Indexing.mod: New file.
* gm2-libs/LMathLib0.def: New file.
* gm2-libs/LMathLib0.mod: New file.
* gm2-libs/LegacyReal.def: New file.
* gm2-libs/LegacyReal.mod: New file.
* gm2-libs/M2EXCEPTION.def: New file.
* gm2-libs/M2EXCEPTION.mod: New file.
* gm2-libs/M2RTS.def: New file.
* gm2-libs/M2RTS.mod: New file.
* gm2-libs/MathLib0.def: New file.
* gm2-libs/MathLib0.mod: New file.
* gm2-libs/MemUtils.def: New file.
* gm2-libs/MemUtils.mod: New file.
* gm2-libs/NumberIO.def: New file.
* gm2-libs/NumberIO.mod: New file.
* gm2-libs/OptLib.def: New file.
* gm2-libs/OptLib.mod: New file.
* gm2-libs/PushBackInput.def: New file.
* gm2-libs/PushBackInput.mod: New file.
* gm2-libs/README.texi: New file.
* gm2-libs/RTExceptions.def: New file.
* gm2-libs/RTExceptions.mod: New file.
* gm2-libs/RTint.def: New file.
* gm2-libs/RTint.mod: New file.
* gm2-libs/SArgs.def: New file.
* gm2-libs/SArgs.mod: New file.
* gm2-libs/SCmdArgs.def: New file.
* gm2-libs/SCmdArgs.mod: New file.
* gm2-libs/SEnvironment.def: New file.
* gm2-libs/SEnvironment.mod: New file.
* gm2-libs/SFIO.def: New file.
* gm2-libs/SFIO.mod: New file.
* gm2-libs/SMathLib0.def: New file.
* gm2-libs/SMathLib0.mod: New file.
* gm2-libs/SYSTEM.def: New file.
* gm2-libs/SYSTEM.mod: New file.
* gm2-libs/Scan.def: New file.
* gm2-libs/Scan.mod: New file.
* gm2-libs/Selective.def: New file.
* gm2-libs/StdIO.def: New file.
* gm2-libs/StdIO.mod: New file.
* gm2-libs/Storage.def: New file.
* gm2-libs/Storage.mod: New file.
* gm2-libs/StrCase.def: New file.
* gm2-libs/StrCase.mod: New file.
* gm2-libs/StrIO.def: New file.
* gm2-libs/StrIO.mod: New file.
* gm2-libs/StrLib.def: New file.
* gm2-libs/StrLib.mod: New file.
* gm2-libs/StringConvert.def: New file.
* gm2-libs/StringConvert.mod: New file.
* gm2-libs/SysExceptions.def: New file.
* gm2-libs/SysStorage.def: New file.
* gm2-libs/SysStorage.mod: New file.
* gm2-libs/TimeString.def: New file.
* gm2-libs/TimeString.mod: New file.
* gm2-libs/UnixArgs.def: New file.
* gm2-libs/cbuiltin.def: New file.
* gm2-libs/cgetopt.def: New file.
* gm2-libs/config-host: New file.
* gm2-libs/config-host.in: New file.
* gm2-libs/cxxabi.def: New file.
* gm2-libs/dtoa.def: New file.
* gm2-libs/errno.def: New file.
* gm2-libs/gdbif.def: New file.
* gm2-libs/gdbif.mod: New file.
* gm2-libs/gm2-libs-host.h.in: New file.
* gm2-libs/ldtoa.def: New file.
* gm2-libs/libc.def: New file.
* gm2-libs/libm.def: New file.
* gm2-libs/sckt.def: New file.
* gm2-libs/termios.def: New file.
* gm2-libs/wrapc.def: New file.
* gm2config.h.in: New file.
* gm2spec.c: New file.
* gm2version.h: New file.
* images/LICENSE.IMG: New file.
* images/gnu.eps: New file.
* images/gnupng: New file.
* init/README: New file.
* init/gm2-gccinit: New file.
* init/gm2lccinit: New file.
* init/gm2lgeninit: New file.
* init/gm2linit: New file.
* init/gm2lorderinit: New file.
* init/gm2minit: New file.
* init/mcinit: New file.
* init/ppginit: New file.
* lang-options.h: New file.
* lang-specs.h: New file.
* lang.opt: New file.
* m2-link-support.h: New file.
* m2-tree.def: New file.
* m2-tree.h: New file.
* m2.flex: New file.
* m2pp.c: New file.
* m2pp.h: New file.
* mc-boot-ch/GBuiltins.c: New file.
* mc-boot-ch/GRTco.c: New file.
* mc-boot-ch/GSYSTEM.c: New file.
* mc-boot-ch/GSelective.c: New file.
* mc-boot-ch/GSysExceptions.c: New file.
* mc-boot-ch/GUnixArgs.c: New file.
* mc-boot-ch/Gcbuiltin.c: New file.
* mc-boot-ch/Gdtoa.c: New file.
* mc-boot-ch/Gerrno.c: New file.
* mc-boot-ch/Gldtoa.c: New file.
* mc-boot-ch/Glibc.c: New file.
* mc-boot-ch/Glibm.c: New file.
* mc-boot-ch/Gmcrts.c: New file.
* mc-boot-ch/Gmcrts.h: New file.
* mc-boot-ch/Gnetwork.h: New file.
* mc-boot-ch/Gpth.c: New file.
* mc-boot-ch/Gtermios.c: New file.
* mc-boot-ch/Gwrapc.c: New file.
* mc-boot-ch/README: New file.
* mc-boot-ch/network.c: New file.
* mc-boot/GASCII.c: New file.
* mc-boot/GASCII.h: New file.
* mc-boot/GArgs.c: New file.
* mc-boot/GArgs.h: New file.
* mc-boot/GAssertion.c: New file.
* mc-boot/GAssertion.h: New file.
* mc-boot/GBreak.c: New file.
* mc-boot/GBreak.h: New file.
* mc-boot/GCOROUTINES.h: New file.
* mc-boot/GCmdArgs.c: New file.
* mc-boot/GCmdArgs.h: New file.
* mc-boot/GDebug.c: New file.
* mc-boot/GDebug.h: New file.
* mc-boot/GDynamicStrings.c: New file.
* mc-boot/GDynamicStrings.h: New file.
* mc-boot/GEnvironment.c: New file.
* mc-boot/GEnvironment.h: New file.
* mc-boot/GFIO.c: New file.
* mc-boot/GFIO.h: New file.
* mc-boot/GFormatStrings.c: New file.
* mc-boot/GFormatStrings.h: New file.
* mc-boot/GFpuIO.c: New file.
* mc-boot/GFpuIO.h: New file.
* mc-boot/GIO.c: New file.
* mc-boot/GIO.h: New file.
* mc-boot/GIndexing.c: New file.
* mc-boot/GIndexing.h: New file.
* mc-boot/GM2EXCEPTION.c: New file.
* mc-boot/GM2EXCEPTION.h: New file.
* mc-boot/GM2RTS.c: New file.
* mc-boot/GM2RTS.h: New file.
* mc-boot/GMemUtils.c: New file.
* mc-boot/GMemUtils.h: New file.
* mc-boot/GNumberIO.c: New file.
* mc-boot/GNumberIO.h: New file.
* mc-boot/GPushBackInput.c: New file.
* mc-boot/GPushBackInput.h: New file.
* mc-boot/GRTExceptions.c: New file.
* mc-boot/GRTExceptions.h: New file.
* mc-boot/GRTco.h: New file.
* mc-boot/GRTint.c: New file.
* mc-boot/GRTint.h: New file.
* mc-boot/GSArgs.c: New file.
* mc-boot/GSArgs.h: New file.
* mc-boot/GSFIO.c: New file.
* mc-boot/GSFIO.h: New file.
* mc-boot/GSYSTEM.h: New file.
* mc-boot/GSelective.h: New file.
* mc-boot/GStdIO.c: New file.
* mc-boot/GStdIO.h: New file.
* mc-boot/GStorage.c: New file.
* mc-boot/GStorage.h: New file.
* mc-boot/GStrCase.c: New file.
* mc-boot/GStrCase.h: New file.
* mc-boot/GStrIO.c: New file.
* mc-boot/GStrIO.h: New file.
* mc-boot/GStrLib.c: New file.
* mc-boot/GStrLib.h: New file.
* mc-boot/GStringConvert.c: New file.
* mc-boot/GStringConvert.h: New file.
* mc-boot/GSysExceptions.h: New file.
* mc-boot/GSysStorage.c: New file.
* mc-boot/GSysStorage.h: New file.
* mc-boot/GTimeString.c: New file.
* mc-boot/GTimeString.h: New file.
* mc-boot/GUnixArgs.h: New file.
* mc-boot/Galists.c: New file.
* mc-boot/Galists.h: New file.
* mc-boot/Gdecl.c: New file.
* mc-boot/Gdecl.h: New file.
* mc-boot/Gdtoa.h: New file.
* mc-boot/Gerrno.h: New file.
* mc-boot/Gkeyc.c: New file.
* mc-boot/Gkeyc.h: New file.
* mc-boot/Gldtoa.h: New file.
* mc-boot/Glibc.h: New file.
* mc-boot/Glibm.h: New file.
* mc-boot/Glists.c: New file.
* mc-boot/Glists.h: New file.
* mc-boot/GmcComment.c: New file.
* mc-boot/GmcComment.h: New file.
* mc-boot/GmcComp.c: New file.
* mc-boot/GmcComp.h: New file.
* mc-boot/GmcDebug.c: New file.
* mc-boot/GmcDebug.h: New file.
* mc-boot/GmcError.c: New file.
* mc-boot/GmcError.h: New file.
* mc-boot/GmcFileName.c: New file.
* mc-boot/GmcFileName.h: New file.
* mc-boot/GmcLexBuf.c: New file.
* mc-boot/GmcLexBuf.h: New file.
* mc-boot/GmcMetaError.c: New file.
* mc-boot/GmcMetaError.h: New file.
* mc-boot/GmcOptions.c: New file.
* mc-boot/GmcOptions.h: New file.
* mc-boot/GmcPreprocess.c: New file.
* mc-boot/GmcPreprocess.h: New file.
* mc-boot/GmcPretty.c: New file.
* mc-boot/GmcPretty.h: New file.
* mc-boot/GmcPrintf.c: New file.
* mc-boot/GmcPrintf.h: New file.
* mc-boot/GmcQuiet.c: New file.
* mc-boot/GmcQuiet.h: New file.
* mc-boot/GmcReserved.c: New file.
* mc-boot/GmcReserved.h: New file.
* mc-boot/GmcSearch.c: New file.
* mc-boot/GmcSearch.h: New file.
* mc-boot/GmcStack.c: New file.
* mc-boot/GmcStack.h: New file.
* mc-boot/GmcStream.c: New file.
* mc-boot/GmcStream.h: New file.
* mc-boot/Gmcflex.h: New file.
* mc-boot/Gmcp1.c: New file.
* mc-boot/Gmcp1.h: New file.
* mc-boot/Gmcp2.c: New file.
* mc-boot/Gmcp2.h: New file.
* mc-boot/Gmcp3.c: New file.
* mc-boot/Gmcp3.h: New file.
* mc-boot/Gmcp4.c: New file.
* mc-boot/Gmcp4.h: New file.
* mc-boot/Gmcp5.c: New file.
* mc-boot/Gmcp5.h: New file.
* mc-boot/GnameKey.c: New file.
* mc-boot/GnameKey.h: New file.
* mc-boot/Gpth.h: New file.
* mc-boot/GsymbolKey.c: New file.
* mc-boot/GsymbolKey.h: New file.
* mc-boot/Gtermios.h: New file.
* mc-boot/Gtop.c: New file.
* mc-boot/Gvarargs.c: New file.
* mc-boot/Gvarargs.h: New file.
* mc-boot/Gwlists.c: New file.
* mc-boot/Gwlists.h: New file.
* mc-boot/Gwrapc.h: New file.
* mc-boot/README: New file.
* mc/Indexing.def: New file.
* mc/Indexing.mod: New file.
* mc/README: New file.
* mc/alists.def: New file.
* mc/alists.mod: New file.
* mc/decl.def: New file.
* mc/decl.mod: New file.
* mc/decl.mod-extra: New file.
* mc/keyc.def: New file.
* mc/keyc.mod: New file.
* mc/lists.def: New file.
* mc/lists.mod: New file.
* mc/m2flex.def: New file.
* mc/mc.flex: New file.
* mc/mcComment.def: New file.
* mc/mcComment.h: New file.
* mc/mcComment.mod: New file.
* mc/mcComp.def: New file.
* mc/mcComp.mod: New file.
* mc/mcDebug.def: New file.
* mc/mcDebug.mod: New file.
* mc/mcError.def: New file.
* mc/mcError.mod: New file.
* mc/mcFileName.def: New file.
* mc/mcFileName.mod: New file.
* mc/mcLexBuf.def: New file.
* mc/mcLexBuf.h: New file.
* mc/mcLexBuf.mod: New file.
* mc/mcMetaError.def: New file.
* mc/mcMetaError.mod: New file.
* mc/mcOptions.def: New file.
* mc/mcOptions.mod: New file.
* mc/mcPreprocess.def: New file.
* mc/mcPreprocess.mod: New file.
* mc/mcPretty.def: New file.
* mc/mcPretty.mod: New file.
* mc/mcPrintf.def: New file.
* mc/mcPrintf.mod: New file.
* mc/mcQuiet.def: New file.
* mc/mcQuiet.mod: New file.
* mc/mcReserved.def: New file.
* mc/mcReserved.h: New file.
* mc/mcReserved.mod: New file.
* mc/mcSearch.def: New file.
* mc/mcSearch.mod: New file.
* mc/mcStack.def: New file.
* mc/mcStack.mod: New file.
* mc/mcStream.def: New file.
* mc/mcStream.mod: New file.
* mc/mcflex.def: New file.
* mc/mcp1.def: New file.
* mc/mcp2.def: New file.
* mc/mcp3.def: New file.
* mc/mcp4.def: New file.
* mc/mcp5.def: New file.
* mc/nameKey.def: New file.
* mc/nameKey.mod: New file.
* mc/symbolKey.def: New file.
* mc/symbolKey.mod: New file.
* mc/top.mod: New file.
* mc/varargs.def: New file.
* mc/varargs.mod: New file.
* mc/wlists.def: New file.
* mc/wlists.mod: New file.
* patches/gcc/11.1.0/01-patches: New file.
* patches/gcc/11.1.0/02-patches: New file.
* patches/gcc/11.1.0/03-patches: New file.
* patches/gcc/11.1.0/04-patches: New file.
* patches/gcc/11.1.0/05-patches: New file.
* patches/gcc/11.1.0/06-patches: New file.
* patches/gcc/11.1.0/07-patches: New file.
* patches/gcc/11.1.0/08-patches: New file.
* patches/gcc/11.1.0/09-patches: New file.
* patches/gcc/11.1.0/10-patches: New file.
* patches/gcc/11.1.0/11-patches: New file.
* patches/gcc/11.1.0/12-patches: New file.
* patches/gcc/11.1.0/13-patches: New file.
* patches/gcc/11.1.0/14-patches: New file.
* patches/gcc/11.1.0/15-patches: New file.
* patches/gcc/11.1.0/16-patches: New file.
* patches/gcc/11.1.0/17-patches: New file.
* patches/gcc/11.1.0/18-patches: New file.
* patches/gcc/11.1.0/19-patches: New file.
* patches/gcc/11.1.0/20-patches: New file.
* patches/gcc/11.1.0/21-patches: New file.
* patches/gcc/11.1.0/22-patches: New file.
* patches/gcc/11.1.0/23-patches: New file.
* patches/gcc/3.3.6/01.waldek_patch_gcc: New file.
* patches/gcc/3.3.6/02.gaius_patch_gcc: New file.
* patches/gcc/4.1.0/01.gaius_patch_gcc: New file.
* patches/gcc/4.1.1/01.gaius_patch_gcc: New file.
* patches/gcc/4.1.2/01-patches: New file.
* patches/gcc/4.1.2/02-patches: New file.
* patches/gcc/4.1.2/ChangeLog: New file.
* patches/gcc/4.1.2/old/01.gaius_patch_gcc: New file.
* patches/gcc/4.1.2/old/02.gaius_rs6000_lang: New file.
* patches/gcc/4.1.2/old/03.michael_i386: New file.
* patches/gcc/4.1.2/old/04.gaius_patch_gcc: New file.
* patches/gcc/4.1.2/old/05.gaius_patch_gcc: New file.
* patches/gcc/4.1.2/old/06.gaius_patch_tree: New file.
* patches/gcc/4.1.2/old/07.michael_i386: New file.
* patches/gcc/4.1.2/old/08.gaius_ipa_type_escape.c: New file.
* patches/gcc/4.1.2/old/09.gaius_patch_config: New file.
* patches/gcc/4.1.2/old/10.michael_snowleopard1: New file.
* patches/gcc/4.1.2/old/11.michael_snowleopard2: New file.
* patches/gcc/4.1.2/old/12.gaius_patch_tree_flow_inline_h: New file.
* patches/gcc/4.7.1/01-patches: New file.
* patches/gcc/4.7.1/02-patches: New file.
* patches/gcc/4.7.3/01-patches: New file.
* patches/gcc/4.7.3/02-patches: New file.
* patches/gcc/4.7.3/03-patches: New file.
* patches/gcc/4.7.3/04-patches: New file.
* patches/gcc/4.7.3/05-patches: New file.
* patches/gcc/4.7.3/06-patches: New file.
* patches/gcc/4.7.3/07-patches: New file.
* patches/gcc/4.7.3/08-patches: New file.
* patches/gcc/4.7.3/09-patches: New file.
* patches/gcc/4.7.3/10-patches: New file.
* patches/gcc/4.7.3/11-patches: New file.
* patches/gcc/4.7.3/12-patches: New file.
* patches/gcc/4.7.4/01-patches: New file.
* patches/gcc/4.7.4/02-patches: New file.
* patches/gcc/4.7.4/03-patches: New file.
* patches/gcc/4.7.4/04-patches: New file.
* patches/gcc/4.7.4/05-patches: New file.
* patches/gcc/4.7.4/06-patches: New file.
* patches/gcc/4.7.4/07-patches: New file.
* patches/gcc/4.7.4/08-patches: New file.
* patches/gcc/4.7.4/09-patches: New file.
* patches/gcc/4.7.4/10-patches: New file.
* patches/gcc/4.7.4/11-patches: New file.
* patches/gcc/4.7.4/12-patches: New file.
* patches/gcc/5.2.0/01-patches: New file.
* patches/gcc/5.2.0/02-patches: New file.
* patches/gcc/5.2.0/03-patches: New file.
* patches/gcc/5.2.0/04-patches: New file.
* patches/gcc/5.2.0/05-patches: New file.
* patches/gcc/5.2.0/06-patches: New file.
* patches/gcc/5.2.0/07-patches: New file.
* patches/gcc/5.2.0/08-patches: New file.
* patches/gcc/5.2.0/09-patches: New file.
* patches/gcc/5.2.0/10-patches: New file.
* patches/gcc/5.2.0/11-patches: New file.
* patches/gcc/5.2.0/12-patches: New file.
* patches/gcc/6.4.0/01-patches: New file.
* patches/gcc/6.4.0/02-patches: New file.
* patches/gcc/6.4.0/03-patches: New file.
* patches/gcc/6.4.0/04-patches: New file.
* patches/gcc/6.4.0/05-patches: New file.
* patches/gcc/6.4.0/06-patches: New file.
* patches/gcc/6.4.0/07-patches: New file.
* patches/gcc/6.4.0/08-patches: New file.
* patches/gcc/6.4.0/09-patches: New file.
* patches/gcc/6.4.0/10-patches: New file.
* patches/gcc/6.4.0/11-patches: New file.
* patches/gcc/trunc/01-patches: New file.
* patches/gcc/trunc/02-patches: New file.
* patches/gcc/trunc/03-patches: New file.
* patches/gcc/trunc/04-patches: New file.
* patches/gcc/trunc/05-patches: New file.
* patches/gcc/trunc/06-patches: New file.
* patches/gcc/trunc/07-patches: New file.
* patches/gcc/trunc/08-patches: New file.
* patches/gcc/trunc/09-patches: New file.
* patches/gcc/trunc/10-patches: New file.
* patches/gcc/trunc/11-patches: New file.
* patches/gcc/trunk/01-patches: New file.
* patches/gcc/trunk/02-patches: New file.
* patches/gcc/trunk/03-patches: New file.
* patches/gcc/trunk/04-patches: New file.
* patches/gcc/trunk/05-patches: New file.
* patches/gcc/trunk/06-patches: New file.
* patches/gcc/trunk/07-patches: New file.
* patches/gcc/trunk/08-patches: New file.
* patches/gcc/trunk/09-patches: New file.
* patches/gcc/trunk/10-patches: New file.
* patches/gcc/trunk/11-patches: New file.
* patches/gcc/trunk/12-patches: New file.
* patches/gcc/trunk/13-patches: New file.
* patches/gcc/trunk/15-patches: New file.
* patches/gcc/trunk/23-patches: New file.
* patches/gcc/trunk/24-patches: New file.
* patches/gcc/trunk/25-patches: New file.
* patches/gdb/6.3/01.waldek_patch_gdb: New file.
* patches/gdb/6.3/02.gaius_patch_gdb: New file.
* plugin/README: New file.
* plugin/m2rte.c: New file.
* tools-src/README: New file.
* tools-src/array2index.py: New file.
* tools-src/boilerplate.py: New file.
* tools-src/buildpg: New file.
* tools-src/buildsyntax: New file.
* tools-src/calcpath: New file.
* tools-src/createUlmSys: New file.
* tools-src/def2texi.py: New file.
* tools-src/gensum.py: New file.
* tools-src/incfile: New file.
* tools-src/makeSystem: New file.
* tools-src/makeconfigure: New file.
* tools-src/makeversion: New file.
* tools-src/mklink.c: New file.
* tools-src/tidydates.py: New file.
* version.c: New file.
* www/Makefile.in: New file.
* www/README: New file.
* www/gm2-logo.ms: New file.
* www/gm2.css: New file.
* www/tools/createhtml.py: New file.
* www/tools/texi2tr/html/about.tpl: New file.
* www/tools/texi2tr/html/community.html: New file.
* www/tools/texi2tr/html/community.tpl: New file.
* www/tools/texi2tr/html/development.html: New file.
* www/tools/texi2tr/html/development.tpl: New file.
* www/tools/texi2tr/html/download.tpl: New file.
* www/tools/texi2tr/html/footer.ht: New file.
* www/tools/texi2tr/html/header.ht: New file.
* www/tools/texi2tr/html/heading.ht: New file.
* www/tools/texi2tr/html/homepage.tpl: New file.
* www/tools/texi2tr/html/index.html: New file.
* www/tools/texi2tr/html/license.tpl: New file.
* www/tools/texi2tr/html/news.html: New file.
* www/tools/texi2tr/html/news.tpl: New file.
* www/tools/texi2tr/html/platforms.tpl: New file.
* www/tools/texi2tr/html/release.tpl: New file.
* www/tools/texi2tr/html/texi2tr.css: New file.
* www/tools/texi2tr/html/title.ht: New file.
* www/tools/texi2tr/html/users.tpl: New file.
* www/tools/texi2tr/png/200px-Heckert_GNU_white.png: New file.
* www/tools/texi2tr/png/debian-swirl48x48.png: New file.
* www/tools/texi2tr/png/develop.png: New file.
* www/tools/texi2tr/png/install.png: New file.
* www/tools/texi2tr/png/library.png: New file.
* www/tools/texi2tr/png/menu-left-tab.png: New file.
* www/tools/texi2tr/png/menu-right-tab.png: New file.
* www/tools/texi2tr/png/menu-selected-left-tab.png: New file.
* www/tools/texi2tr/png/menu-selected-right-tab.png: New file.
* www/tools/texi2tr/png/next.png: New file.
* www/tools/texi2tr/png/note.png: New file.
* www/tools/texi2tr/png/prev.png: New file.
* www/tools/texi2tr/png/release.png: New file.
* www/tools/texi2tr/png/snapshot.png: New file.
* www/tools/texi2tr/png/terminal.png: New file.
* www/tools/texi2tr/png/users.png: New file.
* www/tools/texi2tr/src/config.py: New file.
* www/tools/texi2tr/src/navigation.py: New file.
* www/tools/texi2tr/src/outputdev.py: New file.
* www/tools/texi2tr/src/texi2tr.py: New file.
2021-07-02 Gaius Mulley <gaius.mulley@southwales.ac.uk>
* doc/gm2.texi (Obtaining): added. (Obtaining) New using
node added.
* www/tools/createhtml.py: __RELEASE__ substitution
implemented.
* www/tools/texi2tr/html/users.tpl (User guide):
points to __RELEASE__/using.html. (Libaries)
point to __RELEASE__/Libraries.html.
2021-07-01 Gaius Mulley <gaius.mulley@southwales.ac.uk>
* www/Makefile.in: moved {news,community,development}.html
into .tpl and adjusted the rules.
* www/tools/createhtml.py: (__WEBRELEASE__) substitution
implemented. (usage) New function. Handle the -w option.
* www/tools/texi2tr/html/news.tpl: (New file).
* www/tools/texi2tr/html/development.tpl: (New file).
* www/tools/texi2tr/html/community.tpl: (New file).
* www/Makefile.in: remove development.html rule.
* www/tools/texi2tr/html/users.tpl: (using) reference use
__WEBRELEASE__. (obtaining) reference use __WEBRELEASE__.
(libraries) reference use __WEBRELEASE__.
* www/tools/texi2tr/html/title.ht: use template for HOME_HREF
and 12_HREF.
* www/Makefile.in: create copy of title.ht in build directory
and include build directory in template path for texi2tr.
* www/Makefile.in: corrected install rule.
* www/Makefile.in: added -w option to invocation of createhtml.py.
2021-06-30 Gaius Mulley <gaius.mulley@southwales.ac.uk>
* www/Makefile.in: copy $(RELEASE)/*.{html,png} files into
WWWROOT/www/gm2/$(RELEASE).
* www/tools/createhtml.py: add 11_HREF substitution.
* www/tools/texi2tr/html/release.tpl: added note about GCC_11.
* www/tools/texi2tr/html/texi2tr.css: updated to include new
style for release tag.
* www/tools/texi2tr/src/outputdev.py: (setSubDirectory)
New method.
* www/tools/texi2tr/src/texi2tr.py: set subDirectory.
Join subdirectory to node. Permit -s subdirectory option.
2021-06-27 Gaius Mulley <gaius.mulley@southwales.ac.uk>
* Make-lang.in: renamed getopt.c to cgetopt.c.
* gm2-compiler/P2SymBuild.mod: (BuildProcedureType)
call CheckForExportedImplementation. Fixes a bug report by
Derek Wyss
(https://lists.nongnu.org/archive/html/gm2/2021-06/msg00005.html).
* gm2-compiler/SymbolTable.mod: (CheckForImplementedExports)
reformatted. (UnImplementedSymbolError) detect procedure types
and issue a message about undeclared procedure types. Also
provide a generic error for any non procedure, proc type or type.
2021-06-24 Gaius Mulley <gaius.mulley@southwales.ac.uk>
* website branch created.
2021-06-22 Gaius Mulley <gaius.mulley@southwales.ac.uk>
* m2/gm2-compiler/M2ColorString.mod: import open_quote and
close_quote from m2color.
* m2/gm2-gcc/m2color.c: (open_quote) New function implemented.
(close_quote) New function implemented, both functions import
open and close quotes from gcc/intl.c to pick up whether the
host has utf-8 capability.
* m2/gm2-gcc/m2color.def: (open_quote) New function defined.
(close_quote) New function defined.
* m2/gm2-gcc/m2color.h: (open_quote) and (close_quote) provide C
prototypes for external functions.
2021-06-21 Gaius Mulley <gaius.mulley@southwales.ac.uk>
* tools-src/calcpath: (New file).
* Make-lang.in: (m2/gm2-libs/gm2-libs-host.h) use calcpath
to determine the srcdir of the new subdirectory.
(m2/gm2config.h) use calcpath
to determine the srcdir of the new subdirectory.
Fixes an error and based on a patch reported by Segher Boessenkool
<segher@kernel.crashing.org>.
* Make-lang.in: (m2/gm2-libs/gm2-libs-host.h) Restore tabs.
* Make-lang.in: (m2/gm2config.h) Restore tabs.
* Make-lang.in: Replaced getopt.c by cgetopt.c.
* gm2-libs/getopt.def: Renamed gm2-libs/cgetopt.def.
* gm2-libs-ch/getopt.c: Renamed gm2-libs-ch/cgetopt.c.
Replaced getopt_ by cgetopt_.
Fixes an error reported by Segher Boessenkool
<segher@kernel.crashing.org>.
* tools-src/calcpath: (Corrected header comment).
* tools-src/calcpath: (Redirect error echo to stderr).
2021-06-19 Matthias Klose <doko@ubuntu.com>
* Make-lang.in: introduce parallel linking.
* Make-lang.in (m2.serial): New target.
(cc1gm2): Depend on $(m2.prev).
(stageN/m2/cc1gm2): Call LLINKER, also call LINK_PROGRESS.
2021-06-19 Gaius Mulley <gaius.mulley@southwales.ac.uk>
* Make-lang.in: commented out libgcc-support from %.o rules.
* Make-lang.in: removed libgcc-support from %.o rules.
Fixes make install as it no longer rebuilds the executables.
2021-06-17 Gaius Mulley <gaius.mulley@southwales.ac.uk>
* Make-lang.in: removed gm2m from the tools to be installed.
* tools-src/makeSystem: write SYSTEM.o to /dev/null.
* patches/gcc/trunk/01-patches: (rebuilt).
* patches/gcc/trunk/02-patches: (rebuilt). Add objects
containing a date string into the list of objects to be ignored.
* Make-lang.in: added header dependancies to m2rte.
* patches/gcc/trunk/24-patches: (rebuilt). Corrected
missing text.
2021-06-16 Gaius Mulley <gaius.mulley@southwales.ac.uk>
* patches/gcc/trunk/01-patches: (Rebuilt). Cast value
since on some hosts value is declared as a long long int.
* tools-src/makeSystem: remove SYSTEM.o after creating definition
module.
* Make-lang.in: rewritten m2.info rule.
* Make-lang.in: added $(M2LINK) as a dependancy to all link
rules. Added GCC header dependancies to object build rules.
2021-06-15 Gaius Mulley <gaius.mulley@southwales.ac.uk>
* patches/gcc/trunk/01-patches: (Rebuilt). Disable libgm2
by default and do not configure it unless Modula-2 was specified.
* patches/gcc/trunk/02-patches: (Rebuilt). Disable libgm2
by default and do not configure it unless Modula-2 was specified.
* patches/gcc/trunk/08-patches: (Rebuilt). add libstdc++-v3
as a dependant for gm2tools.
2021-06-14 Gaius Mulley <gaius.mulley@southwales.ac.uk>
* Make-lang.in: corrected many include paths to pick up
gm2-libs-host.h.
* gm2-gcc/rtegraph.c: remove include <mpfr.h> use "mpfr.h" instead.
* gm2-ici/m2linemap.c: remove include <stdlib.h> use config.h system.h.
* gm2-libs-ch/Selective.c: remove system includes and use gcc
config.h system.h instead.
* gm2-libs-ch/SysExceptions.c: remove system includes and use gcc
config.h system.h instead.
* gm2-libs-ch/choosetemp.c: remove system includes and use gcc
config.h system.h instead.
* gm2-libs-ch/dtoa.c: remove system includes and use gcc
config.h system.h instead.
* gm2-libs-ch/errno.c: remove system includes and use gcc
config.h system.h instead.
* gm2-libs-ch/getopt.c: remove system includes and use gcc
config.h system.h instead.
* gm2-libs-ch/host.c: remove system includes and use gcc
config.h system.h instead.
* gm2-libs-ch/ldtoa.c: remove system includes and use gcc
config.h system.h instead.
* gm2-libs-ch/termios.c: remove system includes and use gcc
config.h system.h instead.
* gm2-libs-ch/tools.c: remove system includes and use gcc
config.h system.h instead.
* gm2-libs-ch/wrapc.c: remove system includes and use gcc
config.h system.h instead.
* gm2-libs-ch/xlibc.c: remove system includes and use gcc
config.h system.h instead.
* gm2-libs/gm2-libs-host.h.in: remove PACKAGE_BUGREPORT,
PACKAGE_NAME, PACKAGE_STRING, PACKAGE_TARNAME, PACKAGE_VERSION and
PACKAGE_URL.
* mc-boot-ch/GSelective.c: remove system includes and use gcc
config.h system.h instead.
* mc-boot-ch/GSysExceptions.c: remove system includes and use gcc
config.h system.h instead.
* mc-boot-ch/Gcbuiltin.c: remove system includes and use gcc
config.h system.h instead.
* mc-boot-ch/Gdtoa.c: remove system includes and use gcc
config.h system.h instead.
* mc-boot-ch/Gerrno.c: remove system includes and use gcc
config.h system.h instead.
* mc-boot-ch/Gldtoa.c: remove system includes and use gcc
config.h system.h instead.
* mc-boot-ch/Glibc.c: remove system includes and use gcc
config.h system.h instead.
* mc-boot-ch/Glibm.c: remove system includes and use gcc
config.h system.h instead.
* mc-boot-ch/Gmcrts.c: remove system includes and use gcc
config.h system.h instead.
* mc-boot-ch/Gpth.c: remove system includes and use gcc
config.h system.h instead.
* mc-boot-ch/Gtermios.c: remove system includes and use gcc
config.h system.h instead.
* mc-boot-ch/Gwrapc.c: remove system includes and use gcc
config.h system.h instead.
* mc-boot-ch/network.c: remove system includes and use gcc
config.h system.h instead.
* analyzer branch created.
* removed all analyzer patches and analyzer testsuite tests
on master for now.
2021-06-12 Gaius Mulley <gaius.mulley@southwales.ac.uk>
* Make-lang.in: remove duplicate --gcc-config-system from
mc. Documentation rules now refer to gm2.texi contained in ../gcc.
* NEWS: (updated gm2 into the gcc tree).
* config-lang.in: removed examples.
* el/gm2-mode.el: fixed date.
* gm2-compiler/M2Base.mod: (InitSystem) no longer has a parameter.
* gm2-compiler/M2LexBuf.mod: improved formatting.
* gm2-compiler/M2Quads.mod: (PushTFADrwtok) corrected end name.
* gm2-compiler/M2SSA.def: (EnableSSA) disabled.
* gm2-compiler/M2System.def: (InitSystem) no longer has a parameter.
* gm2-compiler/M2System.mod: (InitSystem) no longer has a parameter.
* gm2-compiler/P1SymBuild.mod:
(P1StartBuildImplementationModule) removed unused variable and
tidied up formatting.
* gm2-gcc/m2block.c: added comment explaining why
commented out code should remain.
* gm2-gcc/m2builtins.c: removed commented out code.
* gm2-gcc/m2expr.c: removed commented out code.
2021-06-11 Gaius Mulley <gaius.mulley@southwales.ac.uk>
* patches/gcc/trunk/23-patches: (New file). Patch for hwint.h.
* patches/gcc/trunk/24-patches: (new file). Patch for
install.texi.
* patches/gcc/trunk/24-patches: (new file). Patch for
sourcebuild.texi.
* m2/Make-lang.in: (m2.html) renamed documentation m2.texi.
(m2.dvi) renamed documentation m2.texi,
(m2.pdf) renamed documentation m2.texi.
(MC_ARGS) add --gcc-config-system. (m2/gm2-libs-boot/%.o)
use --gcc-config-system. Add --gcc-config-system to all bootstrap
rules to use GCC config.h and system.h rather than installed
headers. Alter all include search paths to find config.h and
system.h and libiberty.
* bnf/gm2l.bnf: (DisplayUsage) New procedure called when
-h or --help is used.
* gm2-compiler/gm2lcc.mod: (DisplayHelp) New procedure called
when -h or --help is used.
* gm2-compiler/gm2lgen.mod: (DisplayHelp) New procedure called
when -h or --help is used. Tidied up formatting.
* gm2-compiler/gm2lorder.mod: Tidied up formatting.
* gm2-compiler/ppg.mod: (DisplayHelp) New procedure called
when -h or --help is used.
* gm2-libs-ch/choosetemp.c: use "libiberty.h" rather than
<libiberty.h>.
* gm2.texi: removed subsection.
* gm2spec.c: remove dependance upon installed headers.
* mc-boot: (all files in this directory rebuilt).
* mc/README: removed old done markers.
* mc/decl.mod: (doCapC) detect getGccConfigSystem and use TOUPPER
rather than toupper.
* mc/keyc.mod: import getGccConfigSystem and issue include
config.h include system.h if this switch is on. Also use
safe-ctype.h rather than ctype.h. Avoid system headers if this
switch is on. Add true and false to the macros to be avoided.
Add new to the list of keywords to be avoided.
* mc/mcOptions.def: (getGccConfigSystem) New procedure function.
* mc/mcOptions.mod: Updated year and implemented
(getGccConfigSystem). Update help to include --gcc-config-system.
(handleOption) detect --gcc-config-system.
* tools-src/mklink.c: allow to be build by a c++ compiler.
Remove dependance upon installed headers, use config.h and system.h.
2021-06-07 Gaius Mulley <gaius.mulley@southwales.ac.uk>
* gm2-ici/README: added gm2m to list of tools.
* Make-lang.in: (GM2_LINK_TOOLS) only set to gm2m.
(HAVE_STPCPY) removed. (m2/gm2config.h) removed debugging
diagnostic. Removed commented out rules and tidied comments
to use GNU style. (check_module-2) Removed redundant
equivalence rule.
* bnf/gm2m.bnf: (ParseArgs) use printf1 and use correct format
specifier (%s).
* gm2-compiler/M2GCCDeclare.mod: tidied up long comment.
* m2/gm2-gcc/m2linemap.def: change definition module to
definition for "C" and explicitly export qualified all
identifiers.
* gm2-libiberty/pexecute.def: change to definition module for
"C".
* patches/gcc/trunk/[01-22]-patches: (rebuilt).
* Make-lang.in: (GM2_LINK_TOOLS_INSTALL) new definition.
(GM2_LINK_TOOLS) defined to allow bootstrapping gm2tools.
2021-05-31 Gaius Mulley <gaius.mulley@southwales.ac.uk>
* Make-lang.in: renamed gm2-tools directory to gm2-ici.
Updated all gm2-tool rules.
* config-lang.in: mkdir gm2-ici and gm2-ici-boot. Remove
mkdir gm2-tools and gm2-tools-boot.
2021-05-30 Gaius Mulley <gaius.mulley@southwales.ac.uk>
* gm2-gcc/gcc-consolidation.h: include realmpfr.h.
remove include stdio.h.
* gm2-gcc/init.c: remove include stdio.h. include
config.h and system.h.
* m2/gm2-lang.c: remove include mpfr.h.
2021-05-28 Gaius Mulley <gaius.mulley@southwales.ac.uk>
* patches/gcc/trunk/22-patches: rebuilt after tidying up
the code.
* gm2-gcc/m2decl.c: (m2decl_DeclareKnownVariable) tidied up
safety checks with calls to gcc_assert.
2021-05-27 Gaius Mulley <gaius.mulley@southwales.ac.uk>
* patches/gcc/trunk/14-patches: (removed brig patch).
* patches/gcc/trunk/23-patches: (renamed as 14-patches).
* patches/gcc/trunk/{01-22}-patches: rebuilt.
* Make-lang.in: removed reference to version.o
* gm2-compiler/M2SSA.def: (New file).
* gm2-compiler/M2SSA.mod: (New file).
* patches/gcc/trunk/{01-22}-patches: rebuilt.
2021-05-26 Gaius Mulley <gaius.mulley@southwales.ac.uk>
* Make-lang.in: added entries for M2SSA.def and M2SSA.mod.
* bnf/m2-2.bnf: (Qualident) pass tok to RequestSym.
* bnf/m2-3.bnf: (Qualident) rewritten to generate a virtual
token for the complete qualident.
* bnf/m2-c.bnf: (Qualident) rewritten to generate a virtual
token for the complete qualident.
* bnf/m2-h.bnf: (Qualident) rewritten to generate a virtual
token for the complete qualident.
* gm2-compiler/M2Base.def: (IsNeededAtRunTime) introduce
extra parameter, tok.
* gm2-compiler/M2Base.mod: ImportFrom changed to include
location position. RequestSym changed to include location
position. FromModuleGetSym changed to include location
position. (IsCompatible) short circuit the same types.
* gm2-compiler/M2Code.mod: (DetermineSubExpTemporaries) New
procedure. (Code) call DetermineSubExpTemporaries after
dependant types have been created.
* gm2-compiler/M2GCCDeclare.def: (DeclareLocalVariable)
New procedure.
* gm2-compiler/M2GCCDeclare.def: (DeclareLocalVariables)
changed parameter names to be more informative.
(DeclareLocalVariable) New procedure. Updated formatting to
use GNU coding standard spacing.
* gm2-compiler/M2GenGCC.mod: (Replace) New procedure.
(CodeFunctValue) check for SSA variable and call Replace if
necessary. (checkDeclare) New procedure. (CodeBinaryCheck)
check if SSA variable needs to be replaced. (CodeUnaryCheck)
check if SSA variable needs to be replaced. (CodeBecomes)
check if SSA variable needs to be replaced.
* gm2-compiler/M2Quads.mod: Updated some of the procedures
to adhere to GNU coding standard spacing. Change all calls to
RequestSym to pass location reference. (BuildCaseEquality)
no longer use GetTokenNo but the location of the expression on
the expression stack.
* gm2-compiler/M2Scope.mod: added developer
debugging information.
* gm2-compiler/M2System.def: (InitSystem) pass location rather
than tokenno.
* gm2-compiler/P1SymBuild.mod: use tokenno on the expression
stack rather than GetTokenNo when building import/export lists.
* gm2-compiler/P2SymBuild.mod: (BuildImportOuterModule)
(BuildImportInnerModule) change GetExported to pass token number
stored on the expression stack. (BuildVarientSelector)
pass token number on the expression stack rather than GetTokenNo.
* gm2-compiler/P3SymBuild.mod: (StartBuildInnerModule) use
expression stack tokenno when calling RequestSym.
(CheckImportListOuterModule) use expression stack tokenno when
calling RequestSym. (StartBuildProcedure) use expression stack
tokenno when calling RequestSym. (BuildConst) use expression stack
tokenno when calling RequestSym.
(BuildVarAtAddress) use expression stack tokenno when calling
RequestSym.
* gm2-compiler/PCSymBuild.mod: (PCStartBuildInnerModule) use
expression stack tokenno when calling RequestSym.
(PCStartBuildProcedure) use expression stack
tokenno when calling RequestSym. (BuildConst) use expression stack
tokenno when calling RequestSym. (StartDesConst) use expression stack
tokenno when calling RequestSym.
* gm2-compiler/SymbolConversion.mod: (AddTemporaryKnown)
New procedure.
* gm2-compiler/SymbolTable.def: (PutVariableSSA) New
procedure. (IsVariableSSA) New procedure function.
(GetDeclareSym) introduce token position parameter.
(FromModuleGetSym) introduce token position parameter.
(RequestSym) introduce token position parameter.
(PutExportQualified) introduce token position parameter.
(PutExportUnQualified) introduce token position parameter.
(PutExportUnImplemented) introduce token position parameter.
(GetExported) introduce token position parameter.
(GetFromOuterModule) introduce token position parameter.
(UnknownReported) New procedure.
* gm2-compiler/SymbolTable.mod: (PutVariableSSA) Implement
new procedure. (IsVariableSSA) New procedure function.
(GetDeclareSym) introduce token position parameter.
(FromModuleGetSym) introduce token position parameter.
(RequestSym) introduce token position parameter.
(PutExportQualified) introduce token position parameter.
(PutExportUnQualified) introduce token position parameter.
(PutExportUnImplemented) introduce token position parameter.
(GetExported) introduce token position parameter.
(GetFromOuterModule) introduce token position parameter.
(UnknownReported) Implement new procedure.
* gm2-gcc/init.c: call M2_M2SSA_init before module
compilation.
* gm2-gcc/m2decl.c: attempt to create a nameless temporary
if necessary.
* gm2-gcc/m2statement.c: GNU coding standard formatting
changes.
* init/gm2-gccinit: add M2SSA to list of compiler modules.
2021-05-06 Gaius Mulley <gaius.mulley@southwales.ac.uk>
* gm2-compiler/M2GenGCC.mod: remove GetTokenNo
from import. (UseBuiltin) introduce new parameter tokenno
and use this instead of GetTokenNo (). Change all calls to
UseBuiltin to pass the tokenno across. Fixes a bug (a bad error
position) seen if a constant is created by a folded builtin
procedure function.
2021-04-29 Gaius Mulley <gaius.mulley@southwales.ac.uk>
* NEWS: version 1.9.5.
* gm2-libs/config-host.in: updated to 1.9.5.
* version.c: 1.9.5.
2021-04-28 Gaius Mulley <gaius.mulley@southwales.ac.uk>
* Make-lang.in: added gmp.h header file include directories to
the m2rte plugin compile rule.
* mc-boot/GDynamicStrings.c: regenerated.
* mc-boot/GEnvironment.c: regenerated.
* mc-boot/GFIO.c: regenerated.
* mc-boot/GFormatStrings.c: regenerated.
* mc-boot/GIO.c: regenerated.
* mc-boot/GIndexing.c: regenerated.
* mc-boot/GM2EXCEPTION.c: regenerated.
* mc-boot/GPushBackInput.c: regenerated.
* mc-boot/GRTExceptions.c: regenerated.
* mc-boot/GRTint.c: regenerated.
* mc-boot/GSArgs.c: regenerated.
* mc-boot/GSFIO.c: regenerated.
* mc-boot/GStdIO.c: regenerated.
* mc-boot/GStringConvert.c: regenerated.
* mc-boot/GSysStorage.c: regenerated.
* mc-boot/GTimeString.c: regenerated.
* mc-boot/Galists.c: regenerated.
* mc-boot/Gdecl.c: regenerated.
* mc-boot/Gkeyc.c: regenerated.
* mc-boot/Glists.c: regenerated.
* mc-boot/GmcComment.c: regenerated.
* mc-boot/GmcComp.c: regenerated.
* mc-boot/GmcDebug.c: regenerated.
* mc-boot/GmcError.c: regenerated.
* mc-boot/GmcLexBuf.c: regenerated.
* mc-boot/GmcMetaError.c: regenerated.
* mc-boot/GmcOptions.c: regenerated.
* mc-boot/GmcPretty.c: regenerated.
* mc-boot/GmcPrintf.c: regenerated.
* mc-boot/GmcSearch.c: regenerated.
* mc-boot/GmcStack.c: regenerated.
* mc-boot/GmcStream.c: regenerated.
* mc-boot/Gmcp1.c: regenerated.
* mc-boot/Gmcp2.c: regenerated.
* mc-boot/Gmcp3.c: regenerated.
* mc-boot/Gmcp4.c: regenerated.
* mc-boot/Gmcp5.c: regenerated.
* mc-boot/GnameKey.c: regenerated.
* mc-boot/GsymbolKey.c: regenerated.
* mc-boot/Gvarargs.c: regenerated.
* mc-boot/Gwlists.c: regenerated.
* mc/keyc.mod: redefine NULL for OpenBSD.
* testsuite/gm2/analyzer/fail/callbyref3badreturn.mod: added dg-warning.
* testsuite/gm2/analyzer/fail/testnoreturn.mod: added dg-warning.
2021-04-26 Gaius Mulley <gaius.mulley@southwales.ac.uk>
* gm2-compiler/M2Quads.mod: improve formatting.
* gm2-compiler/SymbolTable.mod: improve formatting.
* patches/gcc/trunk/19-patches: (New file).
* patches/gcc/trunk/20-patches: (New file).
* patches/gcc/trunk/21-patches: (New file).
* patches/gcc/trunk/22-patches: (New file).
* patches/gcc/trunk/23-patches: (New file).
2021-04-18 Gaius Mulley <gaius.mulley@southwales.ac.uk>
* patches/gcc/trunk/16-patch: (on_deallocator_call)
defends against skip_reference returning NULL.
2021-04-17 Gaius Mulley <gaius.mulley@southwales.ac.uk>
* bnf/m2-1.bnf: calls to BuildNumber pass tokenpos.
* bnf/m2-2.bnf: calls to BuildNumber pass tokenpos.
* bnf/m2-3.bnf: calls to BuildNumber pass tokenpos.
* bnf/m2-c.bnf: calls to BuildNumber pass tokenpos.
* bnf/m2-h.bnf: calls to BuildNumber pass tokenpos.
* bnf/m2.bnf: calls to BuildNumber pass tokenpos.
* gm2-compiler/M2Base.mod: improved formatting.
* gm2-compiler/M2GCCDeclare.def: (TryDeclareConstructor)
removed unused quad parameter.
* gm2-compiler/M2GCCDeclare.mod: (TryDeclareConstructor)
removed unused quad parameter.
* gm2-compiler/M2GenGCC.mod: Removed unused quad parameter
to TryDeclareConstructor.
* gm2-compiler/M2Quads.def: (BuildEndFor) use endpostok.
Tightened up the accuracy of the tokens used in subexpressions.
* gm2-compiler/M2Quads.mod: (BuildEndFor) use endpostok.
Tightened up the accuracy of the tokens used in subexpressions.
2021-04-16 Gaius Mulley <gaius.mulley@southwales.ac.uk>
* patches/gcc/trunk/16-patch: (remade patch with
ability to track SysStorage and Storage heaps).
* testsuite/gm2/analyzer/fail: (new tests added).
* gm2-compiler/M2Quads.mod: (BuildDesignatorPointer)
use ptrtok position and check for NIL dereference.
Create virtual token for resulting subexpression.
* gm2-compiler/M2Quads.def: (BuildDesignatorPointer)
pass ptrtok position.
* bnf/m2-3.bnf: pass token number to BuildDesignatorPointer.
2021-04-14 Gaius Mulley <gaius.mulley@southwales.ac.uk>
* bnf/m2-3.bnf: cosmetic formatting changes.
* gm2-compiler/M2Quads.mod: (BuildAssignmentWithoutBounds)
introduce a tok position and use it. (MoveWithMode) use token
position. (doBuildAssignment) use token position and use GenQuadO
with the token position parameter.
(AssignHighField) pass token position to
BuildAssignmentWithoutBounds. Changed all calls to
BuildAssignmentWithoutBounds passing in the becomes token
position. (BuildReturn) use GenQuadO with the token position of
the RETURN keyword. (BuildStaticArray) create virtual token
position for subexpression. (BuildDynamicArray) create virtual
token for subexpression. (ConvertBooleanToVariable)
introduce token position and use it instead of GetTokenNo ().
(BuildBooleanVariable) use token number on the stack associated
with the operand. (PushTFADrwtok) replaces PushTFADrw.
(PushTFDtok) replaces PushTFD. (PushTFDrwtok) replaces PushTFDrw.
Changed all calls to replacement procedures.
* patches/gcc/trunk/16-patch: (remade patch).
* patches/gcc/trunk/17-patch: (remade patch).
* patches/gcc/trunk/18-patch: (remade patch).
* patches/gcc/trunk/19-patch: (New patch).
* gm2-lang.c: (gm2_langhook_new_dispose_storage_substitution)
New function. (LANG_HOOKS_NEW_DISPOSE_STORAGE_SUBSTITUTION)
defined to gm2_langhook_new_dispose_storage_substitution.
2021-04-10 Gaius Mulley <gaius.mulley@southwales.ac.uk>
* gm2-libs/RTint.mod: guard against NEW (v) failing.
* patches/gcc/trunk/16-patch: (remade patch).
2021-04-09 Gaius Mulley <gaius.mulley@southwales.ac.uk>
* patches/gcc/trunk/16-patch: (remade patch).
2021-04-08 Gaius Mulley <gaius.mulley@southwales.ac.uk>
* bnf/m2-3.bnf: (AssignmentOrProcedureCall) pass function token
number to BuildProcedureCall.
* gm2-compiler/M2Quads.mod: (BuildProcedureCall) use functok
and generate combinedtok.
(BuildNewProcedure) use functok and combinedtok for
accurate token position for generated results.
(BuildDisposeProcedure) use functok and combinedtok for
accurate token position for generated results.
(BuildRealFunctionCall) pass tokno to BuildRealFunctionCall.
(BuildPseudoProcedureCall) pass tokno to lower level procedures.
* gm2-lang.c: remove #if 1 debugging aids.
* patches/gcc/trunk/{17,18}-patch: (New files).
* patches/gcc/trunk/{16,17,18-patch}: (remade patches).
2021-04-07 Gaius Mulley <gaius.mulley@southwales.ac.uk>
* patches/gcc/trunk/16-patches: added analyzer patch.
2021-03-05 Gaius Mulley <gaius.mulley@southwales.ac.uk>
* Make-lang.in: invoke all shell scripts using sh.
2021-03-04 Gaius Mulley <gaius.mulley@southwales.ac.uk>
* gm2-tools/M2Emit.mod: (InternalError) call abort.
* Make-lang.in: invoke all shell scripts with the appropriate
interpreter.
2021-02-16 Gaius Mulley <gaius.mulley@southwales.ac.uk>
* gm2-compiler/M2ALU.mod: changed calls to InternalError to use
a single parameter.
* gm2-compiler/M2Base.mod: changed calls to InternalError to
use a single parameter.
* gm2-compiler/M2Check.mod: changed calls to InternalError to
use a single parameter.
* gm2-compiler/M2Error.mod: changed calls to InternalError to
use a single parameter.
* gm2-compiler/M2GCCDeclare.mod: changed calls to InternalError
to use a single parameter.
* gm2-compiler/M2GenGCC.mod: changed calls to InternalError to
use a single parameter.
* gm2-compiler/M2MetaError.mod: changed calls to InternalError
to use a single parameter.
* gm2-compiler/M2Quads.mod: changed calls to InternalError to
use a single parameter.
* gm2-compiler/M2Range.mod: changed calls to InternalError to
use a single parameter.
* gm2-compiler/P2SymBuild.mod: changed calls to InternalError
to use a single parameter.
* gm2-compiler/P3SymBuild.mod: changed calls to InternalError
to use a single parameter.
* gm2-compiler/PCSymBuild.mod: changed calls to InternalError
to use a single parameter.
* gm2-compiler/Sets.mod: changed calls to InternalError to use
a single parameter.
* gm2-compiler/SymbolConversion.mod: changed calls to
InternalError to use a single parameter.
* gm2-compiler/SymbolTable.mod: changed calls to InternalError
to use a single parameter.
* gm2-tools/M2Emit.mod: changed calls to InternalError to use
a single parameter.
2021-02-15 Gaius Mulley <gaius.mulley@southwales.ac.uk>
* gm2-compiler/Lists.mod: all calls to InternalError changed
to use single parameter.
* gm2-compiler/M2ALU.mod: all calls to InternalError changed
to use single parameter.
* gm2-compiler/M2AsmUtil.mod: all calls to InternalError
changed to use single parameter.
* gm2-compiler/M2Base.mod: all calls to InternalError changed
to use single parameter.
* gm2-compiler/M2Batch.mod: all calls to InternalError changed
to use single parameter.
* gm2-compiler/M2CaseList.mod: all calls to InternalError
changed to use single parameter.
* gm2-compiler/M2Check.mod: all calls to InternalError changed
to use single parameter.
* gm2-compiler/M2Const.mod: all calls to InternalError changed
to use single parameter.
* gm2-compiler/M2Debug.mod: all calls to InternalError changed
to use single parameter.
* gm2-compiler/M2DebugStack.mod: all calls to InternalError
changed to use single parameter.
* gm2-compiler/M2Emit.def: all calls to InternalError changed
to use single parameter.
* gm2-compiler/M2Emit.mod: all calls to InternalError changed
to use single parameter.
* gm2-compiler/M2Error.def: all calls to InternalError changed
to use single parameter.
* gm2-compiler/M2Error.mod: all calls to InternalError changed
to use single parameter.
* gm2-compiler/M2GCCDeclare.mod: all calls to InternalError
changed to use single parameter.
* gm2-compiler/M2GenGCC.mod: all calls to InternalError
changed to use single parameter.
* gm2-compiler/M2MetaError.mod: all calls to InternalError
changed to use single parameter.
* gm2-compiler/M2Optimize.mod: all calls to InternalError
changed to use single parameter.
* gm2-compiler/M2Pass.mod: all calls to InternalError changed
to use single parameter.
* gm2-compiler/M2Quads.mod: all calls to InternalError changed
to use single parameter.
* gm2-compiler/M2Range.mod: all calls to InternalError changed
to use single parameter.
* gm2-compiler/M2StackAddress.mod: all calls to InternalError
changed to use single parameter.
* gm2-compiler/M2StackWord.mod: all calls to InternalError
changed to use single parameter.
* gm2-compiler/M2Swig.mod: all calls to InternalError changed
to use single parameter.
* gm2-compiler/M2System.mod: all calls to InternalError
changed to use single parameter.
* gm2-compiler/P2SymBuild.mod: all calls to InternalError
changed to use single parameter.
* gm2-compiler/PCSymBuild.mod: all calls to InternalError
changed to use single parameter.
* gm2-compiler/Sets.mod: all calls to InternalError changed to
use single parameter.
* gm2-compiler/SymbolConversion.mod: all calls to
InternalErrorchanged to use single parameter.
* gm2-compiler/SymbolTable.mod: all calls to InternalError
changed to use single parameter.
* gm2-tools/M2Emit.mod: all calls to InternalError changed to
use single parameter.
2021-02-10 Gaius Mulley <gaius.mulley@southwales.ac.uk>
* mc-boot/Gmcp5.c: (SubDesignator) check to see if expression
is NIL.
* bnf/mc-5.bnf: (SubDesignator) check to see if expression
is NIL.
* gm2-gcc/rtegraph.c: (DEBUGGING) includes complete functions
rather than just the body of a function.
* gm2-compiler/M2Check.mod: (isTrue) commented out.
(checkTypeEquivalence) completed comment. (checkTypeEquivalence)
removed unused parameter tInfo and added comments.
(checkSubrange) completed comment and check for result known
at beginning. (checkGenericTypeEquivalence) completed comment.
(checkSystemEquivalence) completed comment and removed unused
tInfo parameter. (checkEnumerationEquivalence) removed unused
tInfo parameter. (checkPointerType) completed comment and removed
unused tInfo parameter. (checkValueEquivalence) completed comment and
removed unused tInfo parameter. (visit) removed.
(checkSkipEquivalence) removed unused parameter tInfo.
(checkRecordEquivalence) removed unused parameter tInfo.
(getCompatible) removed.
2021-01-29 Gaius Mulley <gaius.mulley@southwales.ac.uk>
* gm2-compiler/M2GenGCC.mod: (ToSubrange) removed unused export.
* gm2-gcc/m2convert.c: (ToSubrange) removed.
* gm2-gcc/m2convert.h: (ToSubrange) removed.
* gm2-libs/SArgs.mod: Reverted change.
2021-01-27 Gaius Mulley <gaius.mulley@southwales.ac.uk>
* gm2-compiler/M2BasicBlock.def: (KillBasicBlock) use
optional return.
* gm2-compiler/M2BasicBlock.mod: (KillBasicBlock) parameter
is VAR and the parameter is assigned to NIL. (FreeBasicBlocks)
New procedure. (BasicBlock) declared without unnecessary
forward type. (InitBasicBlocks) formatting.
* gm2-compiler/M2Code.mod: (Percent) formatting.
(SecondDeclareAndOptimize) remove unnecessary variable bb.
Use FreeBasicBlocks on functional basic block evaluations.
* gm2-compiler/M2GenGCC.mod: (IsExported) Reformatted.
* gm2-compiler/M2LexBuf.mod: (GetToken) call GetToken
without using the return result to advance token position.
* gm2-compiler/m2flex.def: (GetToken) declared with optional
return result.
* gm2-gcc/gcc-consolidation.h: corrected dates.
* gm2-gcc/init.c: corrected dates.
* gm2-gcc/init.def: corrected dates.
* gm2-gcc/init.h: corrected dates.
* gm2-gcc/m2assert.c: corrected dates.
* gm2-gcc/m2assert.h: corrected dates.
* gm2-gcc/m2block.c: corrected dates.
* gm2-gcc/m2block.def: corrected dates.
* gm2-gcc/m2block.h: corrected dates.
* gm2-gcc/m2builtins.c: corrected dates.
* gm2-gcc/m2builtins.def: corrected dates.
* gm2-gcc/m2builtins.h: corrected dates.
* gm2-gcc/m2color.c: corrected dates.
* gm2-gcc/m2color.def: corrected dates.
* gm2-gcc/m2color.h: corrected dates.
* gm2-gcc/m2convert.c: corrected dates.
* gm2-gcc/m2convert.def: corrected dates.
* gm2-gcc/m2convert.h: corrected dates.
* gm2-gcc/m2decl.c: corrected dates.
* gm2-gcc/m2decl.def: corrected dates.
* gm2-gcc/m2decl.h: corrected dates.
* gm2-gcc/m2except.c: corrected dates.
* gm2-gcc/m2except.def: corrected dates.
* gm2-gcc/m2except.h: corrected dates.
* gm2-gcc/m2expr.c: corrected dates.
* gm2-gcc/m2expr.def: corrected dates.
* gm2-gcc/m2expr.h: corrected dates.
* gm2-gcc/m2linemap.c: corrected dates.
* gm2-gcc/m2linemap.def: corrected dates.
* gm2-gcc/m2linemap.h: corrected dates.
* gm2-gcc/m2misc.c: corrected dates.
* gm2-gcc/m2misc.def: corrected dates.
* gm2-gcc/m2misc.h: corrected dates.
* gm2-gcc/m2options.h: corrected dates.
* gm2-gcc/m2range.h: corrected dates.
* gm2-gcc/m2search.h: corrected dates.
* gm2-gcc/m2statement.c: corrected dates.
* gm2-gcc/m2statement.def: corrected dates.
* gm2-gcc/m2statement.h: corrected dates.
* gm2-gcc/m2top.c: corrected dates.
* gm2-gcc/m2top.def: corrected dates.
* gm2-gcc/m2top.h: corrected dates.
* gm2-gcc/m2tree.c: corrected dates.
* gm2-gcc/m2tree.def: corrected dates.
* gm2-gcc/m2tree.h: corrected dates.
* gm2-gcc/m2treelib.c: corrected dates.
* gm2-gcc/m2treelib.def: corrected dates.
* gm2-gcc/m2treelib.h: corrected dates.
* gm2-gcc/m2type.c: corrected dates.
* gm2-gcc/m2type.def: corrected dates.
* gm2-gcc/m2type.h: corrected dates.
* gm2-gcc/rtegraph.c: corrected dates.
* gm2-gcc/rtegraph.h: corrected dates.
* patches/gcc/trunk: rebuilt all patches.
* gm2-compiler/M2Base.mod: (InitBuiltins) check builtins to
ensure source file was found. (GetBaseTypeMinMax) remove unused
local variable. (GetBaseTypeMinMax) reformatted.
(InitBaseProcedures): check rtexceptions to determine whether
source file was found.
* gm2-compiler/M2Code.mod: (CodeBlock) KillScopeBlock no
longer returns a value.
* gm2-compiler/M2GCCDeclare.mod:
(DeclareTypesConstantsProcedures) KillScopeBlock no longer returns
a value.
* gm2-compiler/M2Scope.def: (KillScopeBlock) remove
return result and pass sb by reference.
* gm2-compiler/M2Scope.mod: assign parameter to NIL.
* gm2-compiler/M2Swig.mod: (DetermineParameter) KillBasicBlock
no longer returns a value.
* gm2-gcc/m2type.c: (build_set_type) commented out.
(convert_type_to_range) commented out.
* gm2-libs/SArgs.mod: convert pointer to non void * pointer before
performing arithmetic.
* gcc/m2/gm2-compiler/M2Optimize.mod: (DisplayReachable)
exported.
* gcc/m2/gm2-compiler/M2Optimize.def: (DisplayReachable)
exported.
2021-01-25 Gaius Mulley <gaius.mulley@southwales.ac.uk>
* gcc/m2/Make-lang.in: supply subdirectory parameter to makeversion.
Invoke makeversion without changing into a subdirectory.
* gcc/m2/tools-src/makeversion: added subdirectory argument.
All output files are placed into the supplied subdirectory.
* gcc/m2/patches/gcc/trunk/15-patches: (New file) git front end
patch.
2021-01-16 Gaius Mulley <gaius.mulley@southwales.ac.uk>
* patches/gcc/trunk/02-patches: (corrected path depth).
* gcc/m2/Make-lang.in: added dependancies $(PLUGIN_HEADERS) alongside
$(TARGET_H).
* gcc/m2/config-lang.in: corrected dates.
* gcc/m2/configure.ac: corrected dates.
* gcc/m2/gm2-internals.texi: corrected dates.
* gcc/m2/gm2-lang.c: corrected dates.
* gcc/m2/gm2-lang.h: corrected dates.
* gcc/m2/gm2.texi: corrected dates.
* gcc/m2/gnu.texi: corrected dates.
* gcc/m2/lang-options.h: corrected dates.
* gcc/m2/lang-specs.h: corrected dates.
* gcc/m2/lang.opt: corrected dates.
* gcc/m2/m2-link-support.h: corrected dates.
* gcc/m2/m2-tree.def: corrected dates.
* gcc/m2/m2.flex: corrected dates.
* gcc/m2/mc-boot-ch/GRTco.c: corrected dates.
* gcc/m2/mc/mc.flex: corrected dates.
* gcc/m2/mc/mcComment.h: corrected dates.
* gcc/m2/mc/mcLexBuf.h: corrected dates.
* gcc/m2/mc/mcReserved.h: corrected dates.
* gcc/m2/tools-src/array2index.py: corrected dates.
* gcc/m2/tools-src/buildpg: corrected dates.
* gcc/m2/tools-src/buildsyntax: corrected dates.
* gcc/m2/tools-src/createUlmSys: corrected dates.
* gcc/m2/tools-src/def2texi.py: corrected dates.
* gcc/m2/tools-src/incfile: corrected dates.
* gcc/m2/tools-src/makeSystem: corrected dates.
* gcc/m2/tools-src/makeconfigure: corrected dates.
* gcc/m2/tools-src/makeversion: corrected dates.
* gcc/m2/tools-src/tidydates.py: corrected dates.
* gcc/m2/www/gm2-logo.ms: corrected dates.
* gcc/m2/www/tools/texi2tr/src/config.py: corrected dates.
* gcc/m2/www/tools/texi2tr/src/navigation.py: corrected dates.
* gcc/m2/www/tools/texi2tr/src/outputdev.py: corrected dates.
* gcc/m2/www/tools/texi2tr/src/texi2tr.py: corrected dates.
* gcc/m2/www/Makefile.in: regenerted.
* libgm2/Makefile.in: regenerted.
* libgm2/libm2cor/Makefile.in: regenerted.
* libgm2/libm2iso/Makefile.in: regenerted.
* libgm2/libm2log/Makefile.in: regenerted.
* libgm2/libm2min/Makefile.in: regenerted.
* libgm2/libm2pim/Makefile.in: regenerted.
2021-01-14 Gaius Mulley <gaius.mulley@southwales.ac.uk>
* bnf/gm2m.bnf: removed unused local variables.
* gm2-compiler/M2CaseList.mod: removed unused local variables.
* gm2-compiler/M2Check.mod: removed unused local variables.
* gm2-compiler/M2DebugStack.mod: removed unused local variables.
* gm2-compiler/M2Range.mod: removed unused local variables.
* gm2-compiler/M2Students.mod: removed unused local variables.
* gm2-compiler/Sets.mod: removed unused local variables.
* gm2-libs/IO.mod: removed unused local variables.
2021-01-13 Gaius Mulley <gaius.mulley@southwales.ac.uk>
* gm2-compiler/M2CaseList.mod: (DisposeRanges) remove
unused variable tag. (SubBitRange) remove dummy. Use
MetaErrorT0.
* gm2-compiler/M2GenGCC.mod: Use tokenno rather than
CurrentQuadToken when passed as a parameter. (CodeMakeAdr)
Initialize location before use.
* bnf/gm2l.bnf: altered grammar to include <* noreturn *>
attribute.
* bnf/gm2m.bnf: altered grammar to include <* noreturn *>
attribute.
* Make-lang.in: updated dates and also the bootstrap path
for mc.
* bnf/m2-1.bnf: altered grammar to include <* noreturn *>
attribute.
* bnf/m2-2.bnf: altered grammar to include <* noreturn *>
attribute.
* bnf/m2-3.bnf: altered grammar to include <* noreturn *>
attribute.
* bnf/m2-c.bnf: altered grammar to include <* noreturn *>
attribute.
* bnf/m2-h.bnf: altered grammar to include <* noreturn *>
attribute.
* bnf/m2.bnf: altered grammar to include <* noreturn *>
attribute.
* bnf/mc-1.bnf: altered grammar to include <* noreturn *>
attribute.
* bnf/mc-2.bnf: altered grammar to include <* noreturn *>
attribute.
* bnf/mc-3.bnf: altered grammar to include <* noreturn *>
attribute.
* bnf/mc-4.bnf: altered grammar to include <* noreturn *>
attribute.
* bnf/mc-5.bnf: altered grammar to include <* noreturn *>
attribute.
* gm2-compiler/M2BasicBlock.mod: (ConvertQuads2BasicBlock) removed
unused variable.
* gm2-compiler/M2Error.def: (InternalError) added <* noreturn *>.
* gm2-compiler/M2Error.mod: (InternalError) added <* noreturn *>.
* gm2-compiler/M2Quads.mod: (CheckCompatibleWithBecomes) improved
error messages and tidied up formatting.
* gm2-compiler/M2StackAddress.mod: (PushAddress) removed unused variable.
* gm2-compiler/P0SymBuild.mod: (pc) added comment.
* gm2-compiler/P1SymBuild.mod: (CheckFileName) corrected type of basename.
(P1StartBuildDefinitionModule) removed unused variable. (BuildImportInnerModule)
removed unused variable. (BuildExportInnerModule) removed unused variable.
* gm2-compiler/SymbolTable.mod: (IsLegal) removed useless comparison.
* gm2-compiler/gm2lgen.mod: (GenExternals) removed unused variable.
(GenInitializationCalls) removed unused variable. (GenFinalizationCalls)
removed unused variable.
* gm2-libs/M2RTS.def: (Terminate) added <* noreturn *>. (HALT)
added <* noreturn *>. (Halt) added <* noreturn *>. (ErrorMessage)
added <* noreturn *>.
* gm2-libs/M2RTS.mod: (Terminate) added <* noreturn *>. (HALT)
added <* noreturn *>. (Halt) added <* noreturn *>. (ErrorMessage)
added <* noreturn *>.
* gm2-libs/libc.def: (abort) <* noreturn *>. (exit) <* noreturn *>.
* mc-boot/GASCII.c: (rebuilt).
* mc-boot/GASCII.h: (rebuilt).
* mc-boot/GArgs.c: (rebuilt).
* mc-boot/GArgs.h: (rebuilt).
* mc-boot/GAssertion.c: (rebuilt).
* mc-boot/GAssertion.h: (rebuilt).
* mc-boot/GBreak.c: (rebuilt).
* mc-boot/GBreak.h: (rebuilt).
* mc-boot/GCOROUTINES.h: (rebuilt).
* mc-boot/GCmdArgs.c: (rebuilt).
* mc-boot/GCmdArgs.h: (rebuilt).
* mc-boot/GDebug.c: (rebuilt).
* mc-boot/GDebug.h: (rebuilt).
* mc-boot/GDynamicStrings.c: (rebuilt).
* mc-boot/GDynamicStrings.h: (rebuilt).
* mc-boot/GEnvironment.c: (rebuilt).
* mc-boot/GEnvironment.h: (rebuilt).
* mc-boot/GFIO.c: (rebuilt).
* mc-boot/GFIO.h: (rebuilt).
* mc-boot/GFormatStrings.c: (rebuilt).
* mc-boot/GFormatStrings.h: (rebuilt).
* mc-boot/GFpuIO.c: (rebuilt).
* mc-boot/GFpuIO.h: (rebuilt).
* mc-boot/GIO.c: (rebuilt).
* mc-boot/GIO.h: (rebuilt).
* mc-boot/GIndexing.c: (rebuilt).
* mc-boot/GIndexing.h: (rebuilt).
* mc-boot/GM2EXCEPTION.c: (rebuilt).
* mc-boot/GM2EXCEPTION.h: (rebuilt).
* mc-boot/GM2RTS.c: (rebuilt).
* mc-boot/GM2RTS.h: (rebuilt).
* mc-boot/GMemUtils.c: (rebuilt).
* mc-boot/GMemUtils.h: (rebuilt).
* mc-boot/GNumberIO.c: (rebuilt).
* mc-boot/GNumberIO.h: (rebuilt).
* mc-boot/GPushBackInput.c: (rebuilt).
* mc-boot/GPushBackInput.h: (rebuilt).
* mc-boot/GRTExceptions.c: (rebuilt).
* mc-boot/GRTExceptions.h: (rebuilt).
* mc-boot/GRTco.h: (rebuilt).
* mc-boot/GRTint.c: (rebuilt).
* mc-boot/GRTint.h: (rebuilt).
* mc-boot/GSArgs.c: (rebuilt).
* mc-boot/GSArgs.h: (rebuilt).
* mc-boot/GSFIO.c: (rebuilt).
* mc-boot/GSFIO.h: (rebuilt).
* mc-boot/GSYSTEM.h: (rebuilt).
* mc-boot/GSelective.h: (rebuilt).
* mc-boot/GStdIO.c: (rebuilt).
* mc-boot/GStdIO.h: (rebuilt).
* mc-boot/GStorage.c: (rebuilt).
* mc-boot/GStorage.h: (rebuilt).
* mc-boot/GStrCase.c: (rebuilt).
* mc-boot/GStrCase.h: (rebuilt).
* mc-boot/GStrIO.c: (rebuilt).
* mc-boot/GStrIO.h: (rebuilt).
* mc-boot/GStrLib.c: (rebuilt).
* mc-boot/GStrLib.h: (rebuilt).
* mc-boot/GStringConvert.c: (rebuilt).
* mc-boot/GStringConvert.h: (rebuilt).
* mc-boot/GSysExceptions.h: (rebuilt).
* mc-boot/GSysStorage.c: (rebuilt).
* mc-boot/GSysStorage.h: (rebuilt).
* mc-boot/GTimeString.c: (rebuilt).
* mc-boot/GTimeString.h: (rebuilt).
* mc-boot/GUnixArgs.h: (rebuilt).
* mc-boot/Galists.c: (rebuilt).
* mc-boot/Galists.h: (rebuilt).
* mc-boot/Gdecl.c: (rebuilt).
* mc-boot/Gdecl.h: (rebuilt).
* mc-boot/Gdtoa.h: (rebuilt).
* mc-boot/Gerrno.h: (rebuilt).
* mc-boot/Gkeyc.c: (rebuilt).
* mc-boot/Gkeyc.h: (rebuilt).
* mc-boot/Gldtoa.h: (rebuilt).
* mc-boot/Glibc.h: (rebuilt).
* mc-boot/Glibm.h: (rebuilt).
* mc-boot/Glists.h: (rebuilt).
* mc-boot/GmcComment.c: (rebuilt).
* mc-boot/GmcComment.h: (rebuilt).
* mc-boot/GmcComp.c: (rebuilt).
* mc-boot/GmcComp.h: (rebuilt).
* mc-boot/GmcDebug.c: (rebuilt).
* mc-boot/GmcDebug.h: (rebuilt).
* mc-boot/GmcError.c: (rebuilt).
* mc-boot/GmcError.h: (rebuilt).
* mc-boot/GmcFileName.h: (rebuilt).
* mc-boot/GmcLexBuf.c: (rebuilt).
* mc-boot/GmcLexBuf.h: (rebuilt).
* mc-boot/GmcMetaError.c: (rebuilt).
* mc-boot/GmcMetaError.h: (rebuilt).
* mc-boot/GmcOptions.h: (rebuilt).
* mc-boot/GmcPreprocess.h: (rebuilt).
* mc-boot/GmcPretty.h: (rebuilt).
* mc-boot/GmcPrintf.h: (rebuilt).
* mc-boot/GmcQuiet.h: (rebuilt).
* mc-boot/GmcReserved.h: (rebuilt).
* mc-boot/GmcSearch.h: (rebuilt).
* mc-boot/GmcStack.c: (rebuilt).
* mc-boot/GmcStack.h: (rebuilt).
* mc-boot/GmcStream.c: (rebuilt).
* mc-boot/GmcStream.h: (rebuilt).
* mc-boot/Gmcflex.h: (rebuilt).
* mc-boot/Gmcp1.c: (rebuilt).
* mc-boot/Gmcp1.h: (rebuilt).
* mc-boot/Gmcp2.c: (rebuilt).
* mc-boot/Gmcp2.h: (rebuilt).
* mc-boot/Gmcp3.c: (rebuilt).
* mc-boot/Gmcp3.h: (rebuilt).
* mc-boot/Gmcp4.c: (rebuilt).
* mc-boot/Gmcp4.h: (rebuilt).
* mc-boot/Gmcp5.c: (rebuilt).
* mc-boot/Gmcp5.h: (rebuilt).
* mc-boot/GnameKey.c: (rebuilt).
* mc-boot/GnameKey.h: (rebuilt).
* mc-boot/GsymbolKey.c: (rebuilt).
* mc-boot/GsymbolKey.h: (rebuilt).
* mc-boot/Gtermios.h: (rebuilt).
* mc-boot/Gtop.c: (rebuilt).
* mc-boot/Gvarargs.c: (rebuilt).
* mc-boot/Gvarargs.h: (rebuilt).
* mc-boot/Gwlists.c: (rebuilt).
* mc-boot/Gwlists.h: (rebuilt).
* mc-boot/Gwrapc.h: (rebuilt).
* mc/decl.def: (setNoReturn) new procedure.
* mc/decl.mod: (doProcedureHeadingC) added extra parameter for heading.
(setNoReturn) new procedure.
2021-01-12 Gaius Mulley <gaius.mulley@southwales.ac.uk>
* gm2-compiler/M2Quads.mod: (BuildOddFunction) combinedok initialize
before use during error case. (BuildMinFunction) rewritten to
initialize all tokens before use when an error condition occurs.
(BuildConstFunctionCall) initialize paramtok and combinedtok before
use.
* m2pp.c: (pl) renamed as ptcl and declared as external.
* m2pp.h: (ptcl) declared as external.
2021-01-11 Gaius Mulley <gaius.mulley@southwales.ac.uk>
* configure.ac: avoid comparing SYSTEM.o between stages during
bootstrap checks.
2021-01-09 Gaius Mulley <gaius.mulley@southwales.ac.uk>
* lang.opt: commented out descriptions for options which are
used by C.
* updated all dates for the New Year.
* tools-src/boilerplate.py: detect GCC with runtime exceptions
licence.
* New year ChangeLog file.
---------------------------
New file: gcc/m2/gm2-lang.h
---------------------------
/* Language-dependent hooks for GNU Modula-2.
Copyright (C) 2003-2022 Free Software Foundation, Inc.
Contributed by Gaius Mulley <gaius@glam.ac.uk>
This file is part of GNU CC.
GNU CC 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 CC 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 CC; see the file COPYING. If not, write to
the Free Software Foundation, 51 Franklin Street, Fifth Floor,
Boston, MA 02110-1301, USA. */
#if !defined(GM2_LANG_H)
# define GM2_LANG_H
#if defined(GM2_LANG_C)
# define EXTERN
#else
# define EXTERN extern
#endif
#include "config.h"
#include "system.h"
#include "ansidecl.h"
#include "coretypes.h"
#include "opts.h"
#include "tree.h"
#include "gimple.h"
EXTERN enum gimplify_status gm2_gimplify_expr (tree *, tree *, tree *);
EXTERN bool gm2_mark_addressable (tree);
EXTERN tree gm2_type_for_size (unsigned int bits, int unsignedp);
EXTERN tree gm2_type_for_mode (enum machine_mode mode, int unsignedp);
EXTERN bool gm2_langhook_init (void);
EXTERN bool gm2_langhook_handle_option (size_t scode, const char *arg,
int value,
int kind ATTRIBUTE_UNUSED,
location_t loc ATTRIBUTE_UNUSED,
const struct cl_option_handlers *handlers ATTRIBUTE_UNUSED);
EXTERN void gm2_langhook_init_options (unsigned int decoded_options_count,
struct cl_decoded_option *decoded_options);
EXTERN void gm2_genericize (tree fndecl);
EXTERN tree convert_loc (location_t location, tree type, tree expr);
#undef EXTERN
#endif
-----------------------------
New file: gcc/m2/gm2version.h
-----------------------------
/* gm2version provides access to the gm2 front end version number.
Copyright (C) 2008-2022 Free Software Foundation, Inc.
Contributed by Gaius Mulley <gaius.mulley@southwales.ac.uk>.
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
<http://www.gnu.org/licenses/>. */
extern void gm2_version (int need_to_exit);
-------------------------------
New file: gcc/m2/lang-options.h
-------------------------------
/* Definitions for switches for Modula-2.
Copyright (C) 2001-2022 Free Software Foundation, Inc.
Contributed by Gaius Mulley <gaius@glam.ac.uk>.
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 COPYING. If not,
see <https://www.gnu.org/licenses/>. */
#define LINK_COMMAND_SPEC ""
/* This is the contribution to the `documented_lang_options' array in
toplev.c for gm2. */
DEFINE_LANG_NAME ("Modula-2")
{ "-I",
N_("specifies a library path (C syntax)") },
{ "-fiso",
N_("use ISO dialect of Modula-2") },
{ "-fpim",
N_("use PIM [234] dialect of Modula-2") },
{ "-fpim2",
N_("use PIM 2 dialect of Modula-2") },
{ "-fpim3",
N_("use PIM 3 dialect of Modula-2") },
{ "-fpim4",
N_("use PIM 4 dialect of Modula-2") },
{ "-fpositive-mod-floor-div",
N_("force positive result from MOD and DIV result floor") },
{ "-flibs=ulm",
N_("use the University of Ulm libraries and PIM dialect of Modula-2") },
{ "-flibs=min",
N_("use a minimal SYSTEM, M2RTS and libc and no other system libraries") },
{ "-flibs=logitech",
N_("use the Logitech compatible (PIM dialect) set of libraries") },
{ "-flibs=pim-coroutine",
N_("use the PIM dialect libraries which include coroutine support") },
{ "-fnil",
N_("turns on runtime checking to detect accessing data through a NIL value pointer") },
{ "-fno-nil",
N_("turns off runtime checking to detect accessing data through a NIL value pointer") },
{ "-fwholediv",
N_("generate code to detect whole number division by zero or modulus by zero") },
{ "-fno-wholediv",
N_("do not generate code to detect whole number division by zero or modulus by zero") },
{ "-findex",
N_("generate code to check whether array index values are out of bounds") },
{ "-fno-index",
N_("do not generate code to check whether array index values are out of bounds") },
{ "-frange",
N_("generate code to check the assignment range, return value range, set range and constructor range") },
{ "-fno-range",
N_("do not generate code to check the assignment range, return value range, set range and constructor range") },
{ "-freturn",
N_("turns on runtime checking for functions which finish without executing a RETURN statement") },
{ "-fno-return",
N_("turns off runtime checking for functions which finish without executing a RETURN statement") },
{ "-fcase",
N_("turns on runtime checking to check whether a CASE statement requires an ELSE clause when on was not specified") },
{ "-fno-case",
N_("turns off runtime checking to check whether a CASE statement requires an ELSE clause when on was not specified") },
{ "-fsoft-check-all",
N_("turns on all runtime checking (an abbreviation for -fnil -frange -findex -fwholediv -fcase -freturn-ffloatvalue)") },
{ "-fno-soft-check-all",
N_("turns off all runtime checking (an abbreviation for -fno-nil -fno-range -fno-index -fno-wholediv -fno-case -fno-return -fno-floatvalue)") },
{ "-fexceptions",
N_("turns on all exception generating code (this is on by default)") },
{ "-fno-exceptions",
N_("turns off all exception generating code, this flag should be used with -flibs=min") },
{ "-fauto-init",
N_("automatically initializes all pointers to NIL") },
{ "-Wstudents",
N_("extra compile time semantic checking, typically tries to catch bad style") },
{ "-Wpedantic",
N_("compiler checks nested WITH statements (referencing same type) and multiple identical imports") },
{ "-Wpedantic-param-names",
N_("compiler checks to force definition module procedure parameter names with their implementation module counterpart") },
{ "-Wpedantic-cast",
N_("compiler warns if a cast is being used on types of differing sizes") },
{ "-fextended-opaque",
N_("allows opaque types to be implemented as any type (a GNU Modula-2 extension)") },
{ "-Wverbose-unbounded",
N_("inform user which parameters will be passed by reference") },
{ "-Wunused-variable",
N_("compiler warns if a variable is declared and not used") },
{ "-Wno-unused-variable",
N_("turns off compiler warning if a variable is declared and not used") },
{ "-Wunused-parameter",
N_("compiler warns if a parameter is declared and not used") },
{ "-Wno-unused-parameter",
N_("turns off compiler warning if a parameter is declared and not used") },
{ "-fxcode",
N_("issue all errors and warnings in the Xcode format") },
{ "-fuselist",
N_("use ordered list of modules when linking") },
{ "-fmakelist",
N_("created ordered list of modules") },
{ "-fm2-whole-program",
N_("compile all implementation and program modules as a single unit") },
{ "-fm2-statistics",
N_("display statistics about the amount of source lines compiled and symbols used") },
{ "-fm2-g",
N_("generate extra nops to improve debugging, producing an instruction for every code related keyword") },
{ "-fm2-lower-case",
N_("generate error messages which render keywords in lower case") },
{ "-fmodules",
N_("display list of modules and location") },
{ "-fno-pthread",
N_("do not link against -lpthread") },
{ "-fruntime-modules=",
N_("specify the list of runtime modules and their initialization order") },
{ "-fclean",
N_("cleans all the project objects in the current directory using make") },
{ "-fmakeall",
N_("build a project using make") },
{ "-fmakeall0",
N_("do not build a project using make (internal)") },
{ "-fmake-I=",
N_("build project path (internal)") },
{ "-ftarget-ar=",
N_("full path to target archiver") },
{ "-ftarget-ranlib=",
N_("full path to target ranlib") },
{ "-fcpp",
N_("use cpp to preprocess the module") },
{ "-fq",
N_("debugging information - dump the list of quadruples") },
{ "-fsources",
N_("display the location of module source files as they are compiled") },
{ "-funbounded-by-reference",
N_("optimize non var unbounded parameters by passing it by reference, providing it is not written to within the callee procedure.") },
{ "-fdef=",
N_("recognise the specified suffix as a definition module filename") },
{ "-fmod=",
N_("recognise the specified suffix as implementation and module filenames") },
{ "-fdump-system-exports",
N_("display all inbuilt system items") },
{ "-fswig",
N_("generate a swig interface file") },
{ "-fshared",
N_("generate a shared library from the module") },
{ "-fmakeinit",
N_("generate the start up C code for the module, a file _m2_modulename.c is created") },
{ "-fobject-path=",
N_("set the object path") },
{ "-fonlylink",
N_("only link the module and do not compile module (internal)"),
{ "--version",
N_("display the GNU Modula-2 version") },
{ "-fversion",
N_("display the GNU Modula-2 version") },
{ "-fm2-version",
N_("display the GNU Modula-2 version") },
{ "-O",
N_("optimize code") },
{ "-flocation=",
N_("set all location values to unknown,builtin,integer value (internal debugging)") },
{ "-x",
N_("specify the language") },
{ "-fdebug-function-line-numbers",
N_("turn on the Modula-2 function line number generation (internal switch)") },
{ "-ffloatvalue",
N_("generate code to detect floating point overflow and underflow") },
{ "-fno-floatvalue",
N_("do not generate code to detect floating point overflow and underflow") },
{ "-fwholevalue",
N_("generate code to detect whole number overflow and underflow") },
{ "-fno-wholevalue",
N_("do not generate code to detect whole number overflow and underflow") },
{ "-fm2-plugin",
N_("insert semantic plugin to detect runtime errors at compile time") },
{ "-fno-m2-plugin",
N_("do not insert semantic plugin to detect runtime errors at compile time") },
{ "-fsave-temps",
N_("save temporary files after the preprocessor phase") },
{ "-fsave-temps=",
N_("save temporary files and place them in the directory specified") },
-----------------------------
New file: gcc/m2/lang-specs.h
-----------------------------
/* Definitions for specs for GNU Modula-2.
Copyright (C) 2001-2022 Free Software Foundation, Inc.
Contributed by Gaius Mulley.
This file is part of GCC.
GCC 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.
GCC 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 GCC; see the file COPYING3. If not see
<http://www.gnu.org/licenses/>. */
/* This is the contribution to the `default_compilers' array in gcc.c for
GNU Modula-2. */
#include "m2-link-support.h"
#if !defined(MODULA_PROJECT_SUPPORT)
# define MODULA_PROJECT_SUPPORT " "
#endif
#if !defined(MODULA_LINK_SUPPORT)
# define MODULA_LINK_SUPPORT " "
#endif
#if !defined(M2CPP)
# define M2CPP " "
#endif
{".mod", "@modula-2", 0, 0, 0},
// {".m2l", "@modula-2-linker", 0, 0, 0},
{"@modula-2",
"%{c:" MODULA_PROJECT_SUPPORT "}"
"%{c|S:cc1gm2 " M2CPP
" %(cc1_options) %{f*} %{+e*} %{I*} "
" %{MD} %{MMD} %{M} %{MM} %{MA} %{MT*} %{MF*} %V"
" %{save-temps*}"
" %i %{!fsyntax-only:%(invoke_as)}}"
MODULA_LINK_SUPPORT ,
0, 0, 0},
----------------------------------
New file: gcc/m2/m2-link-support.h
----------------------------------
/* Link support specs for GNU Modula-2.
Copyright (C) 2019-2022 Free Software Foundation, Inc.
Contributed by Gaius Mulley <gaius.mulley@southwales.ac.uk>.
This file is part of GCC.
GCC 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.
GCC 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 GCC; see the file COPYING3. If not see
<http://www.gnu.org/licenses/>. */
/* The subprograms used by Modula-2 to facilitate linking are:
gm2l - parses the top level module and all other dependent
modules. It creates a dependency tree and emits a list
of dependent modules.
gm2lcc - generates a link command for all dependent modules or
display module object filesystem location.
gm2m - parses the top level module and all other dependent
module and generates a Makefile from the import tree.
gm2lgen - generate a C or C++ scaffold from the list of modules.
gm2lorder - manipulate the dependent list of modules to force
critcal runtime modules to be initialized at the
beginning of the init sequence. */
/* AS run the assembler with default options. */
#define AS(INPUT,OUTPUT) "as %a %Y " INPUT " -o " OUTPUT
/* GM2CC_OPTIONS a list of all CC options used by gm2 during the
link scaffold generation. */
#define GM2CC_OPTIONS "%{i*} %{v*} %{m*} %{g*} %{O*} %{fPIC} %{fpic} \
%{+e*} %{I*} %{MD} %{MMD} %{M} %{MM} %{MA} \
%{MT*} %{MF*} -quiet "
/* SCAFFOLDNAME is the basename of the scaffold C or C++ program
which may be automatically generated by the linking process. */
#define SCAFFOLDNAME "%b_m2"
/* RM_IF_NOSAVETEMP remove the next file if save-temps is absent. */
#define RM_IF_NOSAVETEMP "%{!save-temps*:%d}"
/* GM2CC compile the link scaffold either with the C or C++
compiler. */
#define GM2CC(INPUT,OUTPUT) \
"%{!fno-exceptions:cc1plus;:cc1} %1" GM2CC_OPTIONS " " INPUT " \
-o " RM_IF_NOSAVETEMP SCAFFOLDNAME ".s \n\
" AS(SCAFFOLDNAME ".s",OUTPUT) " "
/* GM2LCC invoke the sub program gm2lcc with the object path options
and user supplied objects. It will search for Modula-2 object
if they are not already present on the command line. The
current module is contained in OBJECT and LST is a list of all
the dependant modules. */
#define GM2LCC(OBJECT,LST) \
"gm2lcc %{fshared} %{fpic} %{fPIC} %{B*} %{L*} %{ftarget-ar=*} \
%{ftarget-ranlib=*} \
%{fobject-path=*} %{v} --exec --startup \
" SCAFFOLDNAME "%O \
%{!fshared:--ar %:objects() %:noobjects() -o " \
RM_IF_NOSAVETEMP "%w%g.a } \
" OBJECT " \
%{fshared:%w%{o:%{o*}}%:nolink() %:objects() %:noobjects() \
%:linkargs() } " LST " "
/* GM2LORDER run the gm2lorder sub program. It generates a module
list LST by parsing INPUT and all dependant modules. */
#define GM2LORDER(INPUT,LST) \
"gm2lorder %{fruntime-modules=*} " INPUT " -o " LST " \n"
/* GM2LGEN run the gm2lgen sub program which generates a C or C++
scaffold (SCAFFOLDSRC). It then compiles SCAFFOLDSRC and links
it with all dependant modules in LST. MAINOBJECT is the main
module object name containing the scaffold. */
#define GM2LGEN(LST,SCAFFOLDSRC,MAINOBJECT) \
"gm2lgen %{fshared} %{fshared:--terminate --exit} \
%{!fno-exceptions:-fcpp} " LST " -o " SCAFFOLDSRC " \n\
" GM2L_COMBINE(LST,SCAFFOLDSRC,MAINOBJECT)
/* GM2L_COMBINE compiles the scaffold SCAFFOLDSRC and links all dependant
modules in LST. MAINOBJECT is the main module object containing
the scaffold. */
#define GM2L_COMBINE(LST,SCAFFOLDSRC,MAINOBJECT) \
GM2CC(SCAFFOLDSRC,MAINOBJECT) " \n\
rm -f %w%d%g.a \n\
" GM2LCC("--mainobject " MAINOBJECT,LST)
/* Pass the preprocessor options on the command line together with
the exec prefix. */
#define M2CPP "%{fcpp:-fcppbegin %:exec_prefix(cc1)" \
" -E -lang-asm -traditional-cpp " \
" %(cpp_unique_options) -fcppend}"
/* Generate a list of topologically sorted dependent modules. */
#define GM2L(INPUT,OUTPUT) \
"gm2l %{v} " M2CPP " %{I*} %{fdef=*} %{fmod=*} " OUTPUT " " INPUT " "
/* General GNU options. */
#define GENERAL_OPTIONS "%{i*} %{f*} %{+e*} %{I*} %{MD} %{MMD} %{M} \
%{MM} %{MA} %{MT*} %{MF*} %V"
/* Run the compiler using standard GNU options. */
#define CC1GM2 "cc1gm2 " M2CPP " %(cc1_options) " GENERAL_OPTIONS
/* Generate a swig interface file and exit. */
#define SWIG "%{fswig:" CC1GM2 "%i \n\
%:exit()}"
/* Generate a basename.lst containing a list of all dependent modules
for the project and exit. */
#define MAKELIST "%{fmakelist:" GM2L("%i","%{!pipe:-o %g.l}") " |\n\
gm2lorder %{fruntime-modules=*} %{!pipe:%g.l} \
-o %b.lst \n\
%:exit()}"
/* Generate a scaffold from basename.lst and store the output source
into SCAFFOLDNAME.cpp and exit. */
#define MAKEINIT "%{fmakeinit:gm2lgen %{fshared} \
%{fshared:--terminate --exit} \
%{!fno-exceptions:-fcpp} %b.lst -o " \
SCAFFOLDNAME ".cpp \n\
%:exit()}"
/* Display the filesystem location of the all object files in the
project list. */
#define REPORT_OBJECTS "gm2lcc %{fshared} %{fpic} %{fPIC} %{B*} %{L*} \
%{ftarget-ar=*} %{ftarget-ranlib=*} \
%{fobject-path=*} %{v} -c "
/* Generate a list of modules used within a project and report the
object file location and exit. */
#define MODULES \
"%{fmodules:%{fuselist:" REPORT_OBJECTS " %b.lst}" \
"%{!fuselist:" GM2L("%i","%{!pipe:-o %g.l}") " |\n\
gm2lorder %{fruntime-modules=*} \
%{!pipe:%g.l} -o %g.lst \n\
" REPORT_OBJECTS " %g.lst} \n\
%:exit()}"
/* MODULA_PROJECT_SUPPORT contains a list of all project support
sub components. */
#define MODULA_PROJECT_SUPPORT SWIG MAKELIST MAKEINIT MODULES
/* GM2 invoke cc1gm2 placing assembler output into OUTPUT given
source file, INPUT. */
#define GM2(INPUT,OUTPUT) CC1GM2 " -o " OUTPUT " " INPUT
/* GEN_SCAFFOLD_SRC generates the string SCAFFOLDNAME ".cpp"
marking it for deletion if -fmakeinit is absent. */
#define GEN_SCAFFOLD_SRC \
"%{fmakeinit:" SCAFFOLDNAME ".cpp;:" \
RM_IF_NOSAVETEMP SCAFFOLDNAME ".cpp}"
/* M2LINK compile main module (providing absense of -fonlylink)
and link all project dependent modules. */
#define M2LINK \
"%{!S:%{!gm2gcc:%{!fonlylink:" GM2("%i",RM_IF_NOSAVETEMP "%g.s") " \n\
" AS("%g.s","%w%b%O") " } \n\
%{!fuselist:" GM2L("%i"," -o %g.l ") " \n\
" GM2LORDER("%g.l","%g.lst") " \n\
" GM2LGEN("%{fuselist:%b.lst;:%g.lst}",\
GEN_SCAFFOLD_SRC,\
RM_IF_NOSAVETEMP SCAFFOLDNAME "%O") "}}\n\
}"
/* MODULA_LINK_SUPPORT only invoke link subprocesses if no -c option. */
#define MODULA_LINK_SUPPORT "%{!c:" M2LINK "}"
-----------------------
New file: gcc/m2/m2pp.h
-----------------------
/* m2pp.h pretty print trees, output in Modula-2 where possible.
Copyright (C) 2007-2022 Free Software Foundation, Inc.
Contributed by Gaius Mulley <gaius@glam.ac.uk>.
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
<http://www.gnu.org/licenses/>. */
#if !defined(M2PP_H)
# define M2PP_H
# if defined(M2PP_C)
# define EXTERN
# else
# define EXTERN extern
# endif
EXTERN void pf (tree t);
EXTERN void pe (tree t);
EXTERN void pt (tree t);
EXTERN void ptl (tree t);
EXTERN void pv (tree t);
EXTERN void ptcl (tree t);
# undef EXTERN
#endif
-------------------
New file: gcc/m2/m2-tree.h
-------------------
/* m2-tree.h create language specific tree nodes for Modula-2.
Copyright (C) 2001-2022 Free Software Foundation, Inc.
Contributed by Gaius Mulley <gaius@glam.ac.uk>.
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
<http://www.gnu.org/licenses/>. */
#ifndef GCC_GM2_TREE_H
#define GCC_GM2_TREE_H
#include "ggc.h"
#include "function.h"
#include "hashtab.h"
#include "vec.h"
/* Currently disabled, as Modula-2 uses WORD (unsigned int) for a set
type. */
#if 0
/* Modula-2 language-specific tree codes. */
#define DEFTREECODE(SYM, NAME, TYPE, LENGTH) SYM,
enum m2_tree_code {
M2_DUMMY_TREE_CODE = LAST_C_TREE_CODE,
#include "gm2-tree.def"
LAST_M2_TREE_CODE
};
#undef DEFTREECODE
#endif
/* These macros provide convenient access to the various _STMT nodes
created when parsing template declarations. */
#define TRY_STMTS(NODE) TREE_OPERAND (TRY_BLOCK_CHECK (NODE), 0)
#define TRY_HANDLERS(NODE) TREE_OPERAND (TRY_BLOCK_CHECK (NODE), 1)
/* Nonzero if this try block is a function try block. */
#define FN_TRY_BLOCK_P(NODE) TREE_LANG_FLAG_3 (TRY_BLOCK_CHECK (NODE))
#define HANDLER_PARMS(NODE) TREE_OPERAND (HANDLER_CHECK (NODE), 0)
#define HANDLER_BODY(NODE) TREE_OPERAND (HANDLER_CHECK (NODE), 1)
#define HANDLER_TYPE(NODE) TREE_TYPE (HANDLER_CHECK (NODE))
/* STMT_EXPR accessor. */
#define STMT_EXPR_STMT(NODE) TREE_OPERAND (STMT_EXPR_CHECK (NODE), 0)
/* EXPR_STMT accessor. This gives the expression associated with an
expression statement. */
#define EXPR_STMT_EXPR(NODE) TREE_OPERAND (EXPR_STMT_CHECK (NODE), 0)
#endif
----------------------------
New file: gcc/m2/gm2-lang.cc
----------------------------
/* gm2-lang.cc language-dependent hooks for GNU Modula-2.
Copyright (C) 2002-2022 Free Software Foundation, Inc.
Contributed by Gaius Mulley <gaius@glam.ac.uk>.
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 COPYING. If not, write to the
Free Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
02110-1301, USA. */
#include "gm2-gcc/gcc-consolidation.h"
#include "langhooks-def.h" /* FIXME: for lhd_set_decl_assembler_name. */
#include "tree-pass.h" /* FIXME: only for PROP_gimple_any. */
#include "toplev.h"
#include "debug.h"
#include "opts.h"
#define GM2_LANG_C
#include "gm2-lang.h"
#include "m2block.h"
#include "dynamicstrings.h"
#include "m2options.h"
#include "gm2version.h"
#include "m2convert.h"
#include "m2linemap.h"
#include "init.h"
#include "m2-tree.h"
#include "convert.h"
#include "rtegraph.h"
static void write_globals (void);
static int insideCppArgs = FALSE;
#define EXPR_STMT_EXPR(NODE) TREE_OPERAND (EXPR_STMT_CHECK (NODE), 0)
/* start of new stuff. */
/* Language-dependent contents of a type. */
struct GTY (()) lang_type
{
char dummy;
};
/* Language-dependent contents of a decl. */
struct GTY (()) lang_decl
{
char dummy;
};
/* Language-dependent contents of an identifier. This must include a
tree_identifier. */
struct GTY (()) lang_identifier
{
struct tree_identifier common;
};
/* The resulting tree type. */
union GTY ((desc ("TREE_CODE (&%h.generic) == IDENTIFIER_NODE"),
chain_next ("CODE_CONTAINS_STRUCT (TREE_CODE (&%h.generic), "
"TS_COMMON) ? ((union lang_tree_node *) TREE_CHAIN "
"(&%h.generic)) : NULL"))) lang_tree_node
{
union tree_node GTY ((tag ("0"),
desc ("tree_node_structure (&%h)"))) generic;
struct lang_identifier GTY ((tag ("1"))) identifier;
};
/* We don't use language_function. */
struct GTY (()) language_function
{
/* While we are parsing the function, this contains information about
the statement-tree that we are building. */
/* struct stmt_tree_s stmt_tree; */
tree stmt_tree;
};
/* end of new stuff. */
/* Language hooks. */
bool
gm2_langhook_init (void)
{
build_common_tree_nodes (false);
/* I don't know why this has to be done explicitly. */
void_list_node = build_tree_list (NULL_TREE, void_type_node);
build_common_builtin_nodes ();
/* The default precision for floating point numbers. This is used
for floating point constants with abstract type. This may eventually
be controllable by a command line option. */
mpfr_set_default_prec (256);
/* GNU Modula-2 uses exceptions. */
using_eh_for_cleanups ();
return true;
}
/* The option mask. */
static unsigned int
gm2_langhook_option_lang_mask (void)
{
return CL_ModulaX2;
}
/* Initialize the options structure. */
static void
gm2_langhook_init_options_struct (struct gcc_options *opts)
{
/* Default to avoiding range issues for complex multiply and divide. */
opts->x_flag_complex_method = 2;
/* The builtin math functions should not set errno. */
opts->x_flag_errno_math = 0;
opts->frontend_set_flag_errno_math = true;
/* Exceptions are used to handle recovering from panics. */
opts->x_flag_exceptions = 1;
opts->x_flag_non_call_exceptions = 1;
init_FrontEndInit ();
}
/* Infrastructure for a VEC of bool values. */
/* This array determines whether the filename is associated with the
C preprocessor. */
static vec<bool> filename_cpp;
void
gm2_langhook_init_options (unsigned int decoded_options_count,
struct cl_decoded_option *decoded_options)
{
unsigned int i;
bool in_cpp_args = false;
// filename_cpp = ggc_vec_alloc<bool> (decoded_options_count);
for (i = 1; i < decoded_options_count; i++)
{
switch (decoded_options[i].opt_index)
{
case OPT_fcppbegin:
in_cpp_args = true;
break;
case OPT_fcppend:
in_cpp_args = false;
break;
case OPT_SPECIAL_input_file:
case OPT_SPECIAL_program_name:
filename_cpp.safe_push (in_cpp_args);
}
}
filename_cpp.safe_push (false);
}
static bool
is_cpp_filename (unsigned int i)
{
gcc_assert (i < filename_cpp.length ());
return filename_cpp[i];
}
/* Handle gm2 specific options. Return 0 if we didn't do anything. */
bool
gm2_langhook_handle_option (
size_t scode, const char *arg, HOST_WIDE_INT value, int kind ATTRIBUTE_UNUSED,
location_t loc ATTRIBUTE_UNUSED,
const struct cl_option_handlers *handlers ATTRIBUTE_UNUSED)
{
enum opt_code code = (enum opt_code)scode;
/* ignore file names. */
if (code == N_OPTS)
return 1;
switch (code)
{
case OPT_I:
if (insideCppArgs)
{
const struct cl_option *option = &cl_options[scode];
const char *opt = (const char *)option->opt_text;
M2Options_CppArg (opt, arg, TRUE);
}
else
M2Options_SetSearchPath (arg);
return 1;
case OPT_fiso:
M2Options_SetISO (value);
return 1;
case OPT_fpim:
M2Options_SetPIM (value);
return 1;
case OPT_fpim2:
M2Options_SetPIM2 (value);
return 1;
case OPT_fpim3:
M2Options_SetPIM3 (value);
return 1;
case OPT_fpim4:
M2Options_SetPIM4 (value);
return 1;
case OPT_fpositive_mod_floor_div:
M2Options_SetPositiveModFloor (value);
return 1;
case OPT_flibs_:
/* handled in the gm2 driver. */
return 1;
case OPT_fnil:
M2Options_SetNilCheck (value);
return 1;
case OPT_fwholediv:
M2Options_SetWholeDiv (value);
return 1;
case OPT_findex:
M2Options_SetIndex (value);
return 1;
case OPT_frange:
M2Options_SetRange (value);
return 1;
case OPT_ffloatvalue:
M2Options_SetFloatValueCheck (value);
return 1;
case OPT_fwholevalue:
M2Options_SetWholeValueCheck (value);
return 1;
case OPT_freturn:
M2Options_SetReturnCheck (value);
return 1;
case OPT_fcase:
M2Options_SetCaseCheck (value);
return 1;
case OPT_fd:
M2Options_SetCompilerDebugging (value);
return 1;
case OPT_fdebug_trace_quad:
M2Options_SetDebugTraceQuad (value);
return 1;
case OPT_fdebug_trace_api:
M2Options_SetDebugTraceAPI (value);
return 1;
case OPT_fdebug_function_line_numbers:
M2Options_SetDebugFunctionLineNumbers (value);
return 1;
case OPT_fauto_init:
M2Options_SetAutoInit (value);
return 1;
case OPT_fsoft_check_all:
M2Options_SetCheckAll (value);
return 1;
case OPT_fexceptions:
M2Options_SetExceptions (value);
return 1;
case OPT_Wstudents:
M2Options_SetStudents (value);
return 1;
case OPT_Wpedantic:
M2Options_SetPedantic (value);
return 1;
case OPT_Wpedantic_param_names:
M2Options_SetPedanticParamNames (value);
return 1;
case OPT_Wpedantic_cast:
M2Options_SetPedanticCast (value);
return 1;
case OPT_fextended_opaque:
M2Options_SetExtendedOpaque (value);
return 1;
case OPT_Wverbose_unbounded:
M2Options_SetVerboseUnbounded (value);
return 1;
case OPT_Wunused_variable:
M2Options_SetUnusedVariableChecking (value);
return 1;
case OPT_Wunused_parameter:
M2Options_SetUnusedParameterChecking (value);
return 1;
case OPT_fm2_strict_type:
M2Options_SetStrictTypeChecking (value);
return 1;
case OPT_Wall:
M2Options_SetWall (value);
return 1;
case OPT_fxcode:
M2Options_SetXCode (value);
return 1;
case OPT_fm2_lower_case:
M2Options_SetLowerCaseKeywords (value);
return 1;
case OPT_fuselist:
/* handled in the driver. */
return 1;
case OPT_fmakelist:
/* handled in the driver. */
return 1;
case OPT_fmodules:
/* handled in the driver. */
return 1;
case OPT_fruntime_modules_:
/* handled in the driver. */
return 1;
case OPT_fno_pthread:
/* handled in the driver. */
return 1;
case OPT_fno_m2_plugin:
/* handled in the driver. */
return 1;
case OPT_ftarget_ar_:
/* handled in the driver. */
return 1;
case OPT_ftarget_ranlib_:
/* handled in the driver. */
return 1;
case OPT_fcpp:
M2Options_SetCpp (value);
return 1;
case OPT_fcppbegin:
insideCppArgs = TRUE;
return 1;
case OPT_fcppend:
insideCppArgs = FALSE;
return 1;
case OPT_fcppprog_:
M2Options_CppProg (arg);
return 1;
case OPT_fq:
M2Options_SetQuadDebugging (value);
return 1;
case OPT_fsources:
M2Options_SetSources (value);
return 1;
case OPT_funbounded_by_reference:
M2Options_SetUnboundedByReference (value);
return 1;
case OPT_fdef_:
M2Options_setdefextension (arg);
return 1;
case OPT_fmod_:
M2Options_setmodextension (arg);
return 1;
case OPT_fdump_system_exports:
M2Options_SetDumpSystemExports (value);
return 1;
case OPT_fswig:
M2Options_SetSwig (value);
return 1;
case OPT_fshared:
/* handled by the linker. */
return 1;
case OPT_fmakeinit:
/* handled by the linker. */
return 1;
case OPT_fm2_statistics:
M2Options_SetStatistics (value);
return 1;
case OPT_fm2_g:
M2Options_SetM2g (value);
return 1;
case OPT_fobject_path_:
/* handled by the linker. */
return 1;
case OPT_fonlylink:
/* handled by the driver. */
return 1;
case OPT_version:
M2Options_DisplayVersion (FALSE);
return 1;
case OPT_fm2_version:
M2Options_DisplayVersion (FALSE);
return 1;
case OPT_O:
M2Options_SetOptimizing (value);
return 1;
case OPT_quiet:
M2Options_SetQuiet (value);
return 1;
case OPT_fm2_whole_program:
M2Options_SetWholeProgram (value);
return 1;
case OPT_flocation_:
if (strcmp (arg, "builtins") == 0)
{
M2Options_SetForcedLocation (BUILTINS_LOCATION);
return 1;
}
else if (strcmp (arg, "unknown") == 0)
{
M2Options_SetForcedLocation (UNKNOWN_LOCATION);
return 1;
}
else if ((arg != NULL) && (ISDIGIT (arg[0])))
{
M2Options_SetForcedLocation (atoi (arg));
return 1;
}
else
return 0;
case OPT_save_temps:
M2Options_SetSaveTemps (value);
return 1;
case OPT_save_temps_:
M2Options_SetSaveTempsDir (arg);
return 1;
default:
if (insideCppArgs)
{
const struct cl_option *option = &cl_options[scode];
const char *opt = (const char *)option->opt_text;
M2Options_CppArg (opt, arg, TRUE);
return 1;
}
return 0;
}
return 0;
}
/* Run after parsing options. */
static bool
gm2_langhook_post_options (const char **pfilename)
{
const char *filename = *pfilename;
flag_excess_precision = EXCESS_PRECISION_FAST;
M2Options_SetCC1Quiet (quiet_flag);
M2Options_FinaliseOptions ();
main_input_filename = filename;
/* Returning false means that the backend should be used. */
return false;
}
/* Call the compiler for every source filename on the command line. */
static void
gm2_parse_input_files (const char **filenames, unsigned int filename_count)
{
unsigned int i;
gcc_assert (filename_count > 0);
for (i = 0; i < filename_count; i++)
if (!is_cpp_filename (i))
{
main_input_filename = filenames[i];
init_PerCompilationInit (filenames[i]);
}
}
static void
gm2_langhook_parse_file (void)
{
gm2_parse_input_files (in_fnames, num_in_fnames);
write_globals ();
}
static tree
gm2_langhook_type_for_size (unsigned int bits, int unsignedp)
{
return gm2_type_for_size (bits, unsignedp);
}
static tree
gm2_langhook_type_for_mode (machine_mode mode, int unsignedp)
{
tree type;
if (VECTOR_MODE_P (mode))
{
tree inner;
inner = gm2_langhook_type_for_mode (GET_MODE_INNER (mode), unsignedp);
if (inner != NULL_TREE)
return build_vector_type_for_mode (inner, mode);
return NULL_TREE;
}
scalar_int_mode imode;
scalar_float_mode fmode;
complex_mode cmode;
if (is_int_mode (mode, &imode))
return gm2_langhook_type_for_size (GET_MODE_BITSIZE (imode), unsignedp);
else if (is_float_mode (mode, &fmode))
{
switch (GET_MODE_BITSIZE (fmode))
{
case 32:
return float_type_node;
case 64:
return double_type_node;
default:
// We have to check for long double in order to support
// i386 excess precision.
if (fmode == TYPE_MODE (long_double_type_node))
return long_double_type_node;
}
}
else if (is_complex_float_mode (mode, &cmode))
{
switch (GET_MODE_BITSIZE (cmode))
{
case 64:
return complex_float_type_node;
case 128:
return complex_double_type_node;
default:
// We have to check for long double in order to support
// i386 excess precision.
if (cmode == TYPE_MODE (complex_long_double_type_node))
return complex_long_double_type_node;
}
}
#if HOST_BITS_PER_WIDE_INT >= 64
/* The middle-end and some backends rely on TImode being supported
for 64-bit HWI. */
if (mode == TImode)
{
type = build_nonstandard_integer_type (GET_MODE_BITSIZE (TImode),
unsignedp);
if (type && TYPE_MODE (type) == TImode)
return type;
}
#endif
return NULL_TREE;
}
/* Record a builtin function. We just ignore builtin functions. */
static tree
gm2_langhook_builtin_function (tree decl)
{
return decl;
}
/* Return true if we are in the global binding level. */
static bool
gm2_langhook_global_bindings_p (void)
{
return current_function_decl == NULL_TREE;
}
/* Push a declaration into the current binding level. We can't
usefully implement this since we don't want to convert from tree back
to one of our internal data structures. I think the only way this is
used is to record a decl which is to be returned by getdecls, and we
could implement it for that purpose if necessary. */
static tree
gm2_langhook_pushdecl (tree decl ATTRIBUTE_UNUSED)
{
gcc_unreachable ();
}
/* This hook is used to get the current list of declarations as
trees. We don't support that; instead we use write_globals. This
can't simply crash because it is called by -gstabs. */
static tree
gm2_langhook_getdecls (void)
{
return NULL;
}
static void
m2_write_global_declarations (tree globals)
{
tree decl = globals;
int n = 0;
while (decl != NULL)
{
n++;
decl = TREE_CHAIN (decl);
}
if (n > 0)
{
int i = 0;
tree vec[n];
decl = globals;
while (decl != NULL)
{
vec[i] = decl;
decl = TREE_CHAIN (decl);
i++;
}
wrapup_global_declarations (vec, n);
}
}
/* Write out globals. */
static void
write_globals (void)
{
tree t;
unsigned i;
m2block_finishGlobals ();
/* Process all file scopes in this compilation, and the
external_scope, through wrapup_global_declarations and
check_global_declarations. */
FOR_EACH_VEC_ELT (*all_translation_units, i, t)
m2_write_global_declarations (BLOCK_VARS (DECL_INITIAL (t)));
}
/* Gimplify an EXPR_STMT node. */
static void
gimplify_expr_stmt (tree *stmt_p)
{
gcc_assert (EXPR_STMT_EXPR (*stmt_p) != NULL_TREE);
*stmt_p = EXPR_STMT_EXPR (*stmt_p);
}
/* Genericize a TRY_BLOCK. */
static void
genericize_try_block (tree *stmt_p)
{
tree body = TRY_STMTS (*stmt_p);
tree cleanup = TRY_HANDLERS (*stmt_p);
*stmt_p = build2 (TRY_CATCH_EXPR, void_type_node, body, cleanup);
}
/* Genericize a HANDLER by converting to a CATCH_EXPR. */
static void
genericize_catch_block (tree *stmt_p)
{
tree type = HANDLER_TYPE (*stmt_p);
tree body = HANDLER_BODY (*stmt_p);
/* FIXME should the caught type go in TREE_TYPE? */
*stmt_p = build2 (CATCH_EXPR, void_type_node, type, body);
}
/* Convert the tree representation of FNDECL from m2 frontend trees
to GENERIC. */
extern void pf (tree);
void
gm2_genericize (tree fndecl)
{
tree t;
struct cgraph_node *cgn;
#if 0
pf (fndecl);
#endif
/* Fix up the types of parms passed by invisible reference. */
for (t = DECL_ARGUMENTS (fndecl); t; t = DECL_CHAIN (t))
if (TREE_ADDRESSABLE (TREE_TYPE (t)))
{
/* If a function's arguments are copied to create a thunk, then
DECL_BY_REFERENCE will be set -- but the type of the argument will be
a pointer type, so we will never get here. */
gcc_assert (!DECL_BY_REFERENCE (t));
gcc_assert (DECL_ARG_TYPE (t) != TREE_TYPE (t));
TREE_TYPE (t) = DECL_ARG_TYPE (t);
DECL_BY_REFERENCE (t) = 1;
TREE_ADDRESSABLE (t) = 0;
relayout_decl (t);
}
/* Dump all nested functions now. */
cgn = cgraph_node::get_create (fndecl);
for (cgn = first_nested_function (cgn);
cgn != NULL; cgn = next_nested_function (cgn))
gm2_genericize (cgn->decl);
}
/* gm2 gimplify expression, currently just change THROW in the same
way as C++ */
static int
gm2_langhook_gimplify_expr (tree *expr_p, gimple_seq *pre_p ATTRIBUTE_UNUSED,
gimple_seq *post_p ATTRIBUTE_UNUSED)
{
enum tree_code code = TREE_CODE (*expr_p);
switch (code)
{
case THROW_EXPR:
/* FIXME communicate throw type to back end, probably by moving
THROW_EXPR into ../tree.def. */
*expr_p = TREE_OPERAND (*expr_p, 0);
return GS_OK;
case EXPR_STMT:
gimplify_expr_stmt (expr_p);
return GS_OK;
case TRY_BLOCK:
genericize_try_block (expr_p);
return GS_OK;
case HANDLER:
genericize_catch_block (expr_p);
return GS_OK;
default:
return GS_UNHANDLED;
}
}
/* FIXME: This is a hack to preserve trees that we create from the
garbage collector. */
static GTY (()) tree gm2_gc_root;
static tree personality_decl = NULL_TREE;
static void
gm2_preserve_from_gc (tree t)
{
gm2_gc_root = tree_cons (NULL_TREE, t, gm2_gc_root);
}
/* Return a decl for the exception personality function. The
function itself is implemented in libgo/runtime/go-unwind.c. */
static tree
gm2_langhook_eh_personality (void)
{
if (personality_decl == NULL_TREE)
{
personality_decl = build_personality_function ("gxx");
gm2_preserve_from_gc (personality_decl);
}
return personality_decl;
}
/* Functions called directly by the generic backend. */
tree
convert_loc (location_t location, tree type, tree expr)
{
if (type == error_mark_node || expr == error_mark_node
|| TREE_TYPE (expr) == error_mark_node)
return error_mark_node;
if (type == TREE_TYPE (expr))
return expr;
gcc_assert (TYPE_MAIN_VARIANT (type) != NULL);
if (TYPE_MAIN_VARIANT (type) == TYPE_MAIN_VARIANT (TREE_TYPE (expr)))
return fold_convert (type, expr);
expr = m2convert_GenericToType (location, type, expr);
switch (TREE_CODE (type))
{
case VOID_TYPE:
case BOOLEAN_TYPE:
return fold_convert (type, expr);
case INTEGER_TYPE:
return fold (convert_to_integer (type, expr));
case POINTER_TYPE:
return fold (convert_to_pointer (type, expr));
case REAL_TYPE:
return fold (convert_to_real (type, expr));
case COMPLEX_TYPE:
return fold (convert_to_complex (type, expr));
case ENUMERAL_TYPE:
return fold (convert_to_integer (type, expr));
default:
error_at (location, "cannot convert expression, only base types can be converted");
break;
}
return error_mark_node;
}
/* Functions called directly by the generic backend. */
tree
convert (tree type, tree expr)
{
return convert_loc (m2linemap_UnknownLocation (), type, expr);
}
/* Mark EXP saying that we need to be able to take the address of it;
it should not be allocated in a register. Returns true if
successful. */
bool
gm2_mark_addressable (tree exp)
{
tree x = exp;
while (TRUE)
switch (TREE_CODE (x))
{
case COMPONENT_REF:
if (DECL_PACKED (TREE_OPERAND (x, 1)))
return false;
x = TREE_OPERAND (x, 0);
break;
case ADDR_EXPR:
case ARRAY_REF:
case REALPART_EXPR:
case IMAGPART_EXPR:
x = TREE_OPERAND (x, 0);
break;
case COMPOUND_LITERAL_EXPR:
case CONSTRUCTOR:
case STRING_CST:
case VAR_DECL:
case CONST_DECL:
case PARM_DECL:
case RESULT_DECL:
case FUNCTION_DECL:
TREE_ADDRESSABLE (x) = 1;
return true;
default:
return true;
}
/* never reach here. */
gcc_unreachable ();
}
/* Return an integer type with BITS bits of precision, that is
unsigned if UNSIGNEDP is nonzero, otherwise signed. */
tree
gm2_type_for_size (unsigned int bits, int unsignedp)
{
tree type;
if (unsignedp)
{
if (bits == INT_TYPE_SIZE)
type = unsigned_type_node;
else if (bits == CHAR_TYPE_SIZE)
type = unsigned_char_type_node;
else if (bits == SHORT_TYPE_SIZE)
type = short_unsigned_type_node;
else if (bits == LONG_TYPE_SIZE)
type = long_unsigned_type_node;
else if (bits == LONG_LONG_TYPE_SIZE)
type = long_long_unsigned_type_node;
else
type = make_unsigned_type (bits);
}
else
{
if (bits == INT_TYPE_SIZE)
type = integer_type_node;
else if (bits == CHAR_TYPE_SIZE)
type = signed_char_type_node;
else if (bits == SHORT_TYPE_SIZE)
type = short_integer_type_node;
else if (bits == LONG_TYPE_SIZE)
type = long_integer_type_node;
else if (bits == LONG_LONG_TYPE_SIZE)
type = long_long_integer_type_node;
else
type = make_signed_type (bits);
}
return type;
}
/* Allow the analyzer to understand Storage ALLOCATE/DEALLOCATE. */
bool
gm2_langhook_new_dispose_storage_substitution (void)
{
return true;
}
#undef LANG_HOOKS_NAME
#undef LANG_HOOKS_INIT
#undef LANG_HOOKS_INIT_OPTIONS
#undef LANG_HOOKS_OPTION_LANG_MASK
#undef LANG_HOOKS_INIT_OPTIONS_STRUCT
#undef LANG_HOOKS_HANDLE_OPTION
#undef LANG_HOOKS_POST_OPTIONS
#undef LANG_HOOKS_PARSE_FILE
#undef LANG_HOOKS_TYPE_FOR_MODE
#undef LANG_HOOKS_TYPE_FOR_SIZE
#undef LANG_HOOKS_BUILTIN_FUNCTION
#undef LANG_HOOKS_GLOBAL_BINDINGS_P
#undef LANG_HOOKS_PUSHDECL
#undef LANG_HOOKS_GETDECLS
#undef LANG_HOOKS_GIMPLIFY_EXPR
#undef LANG_HOOKS_EH_PERSONALITY
#undef LANG_HOOKS_NEW_DISPOSE_STORAGE_SUBSTITUTION
#define LANG_HOOKS_NAME "GNU Modula-2"
#define LANG_HOOKS_INIT gm2_langhook_init
#define LANG_HOOKS_INIT_OPTIONS gm2_langhook_init_options
#define LANG_HOOKS_OPTION_LANG_MASK gm2_langhook_option_lang_mask
#define LANG_HOOKS_INIT_OPTIONS_STRUCT gm2_langhook_init_options_struct
#define LANG_HOOKS_HANDLE_OPTION gm2_langhook_handle_option
#define LANG_HOOKS_POST_OPTIONS gm2_langhook_post_options
#define LANG_HOOKS_PARSE_FILE gm2_langhook_parse_file
#define LANG_HOOKS_TYPE_FOR_MODE gm2_langhook_type_for_mode
#define LANG_HOOKS_TYPE_FOR_SIZE gm2_langhook_type_for_size
#define LANG_HOOKS_BUILTIN_FUNCTION gm2_langhook_builtin_function
#define LANG_HOOKS_GLOBAL_BINDINGS_P gm2_langhook_global_bindings_p
#define LANG_HOOKS_PUSHDECL gm2_langhook_pushdecl
#define LANG_HOOKS_GETDECLS gm2_langhook_getdecls
#define LANG_HOOKS_GIMPLIFY_EXPR gm2_langhook_gimplify_expr
#define LANG_HOOKS_EH_PERSONALITY gm2_langhook_eh_personality
#define LANG_HOOKS_NEW_DISPOSE_STORAGE_SUBSTITUTION \
gm2_langhook_new_dispose_storage_substitution
struct lang_hooks lang_hooks = LANG_HOOKS_INITIALIZER;
#include "gt-m2-gm2-lang.h"
#include "gtype-m2.h"
---------------------------
New file: gcc/m2/gm2spec.cc
---------------------------
/* gm2spec.cc specific flags and argument handling within GNU Modula-2.
Copyright (C) 2007-2022 Free Software Foundation, Inc.
Contributed by Gaius Mulley <gaius@glam.ac.uk>.
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
<http://www.gnu.org/licenses/>. */
#include "config.h"
#include "system.h"
#include "coretypes.h"
#include "tm.h"
#include "xregex.h"
#include "obstack.h"
#include "intl.h"
#include "prefix.h"
#include "opt-suggestions.h"
#include "gcc.h"
#include "opts.h"
#include "vec.h"
#include "m2/gm2version.h"
#include "m2/gm2config.h"
#ifdef HAVE_DIRENT_H
#include <dirent.h>
#else
#ifdef HAVE_SYS_NDIR_H
#include <sys/ndir.h>
#endif
#ifdef HAVE_SYS_DIR_H
#include <sys/dir.h>
#endif
#ifdef HAVE_NDIR_H
#include <ndir.h>
#endif
#endif
#ifndef MATH_LIBRARY
#define MATH_LIBRARY "m"
#endif
#ifndef LIBSTDCXX
#define LIBSTDCXX "stdc++"
#endif
#ifndef DIR_SEPARATOR
#define DIR_SEPARATOR '/'
#endif
/* Most every one is fine with LIBRARY_PATH. For some, it conflicts. */
#ifndef LIBRARY_PATH_ENV
#define LIBRARY_PATH_ENV "LIBRARY_PATH"
#endif
#ifndef GM2_PREFIX_ENV
#define GM2_PREFIX_ENV "GM2_PREFIX"
#endif
#ifndef GM2_LIBEXEC_ENV
#define GM2_LIBEXEC_ENV "GM2_LIBEXEC"
#endif
#ifndef GM2IPATH_ENV
#define GM2IPATH_ENV "GM2IPATH"
#endif
#ifndef GM2OPATH_ENV
#define GM2OPATH_ENV "GM2OPATH"
#endif
int lang_specific_extra_outfiles = 0;
/* DEBUGGING will print all the options at various stages with their
error code, full name etc. */
#undef DEBUGGING
/* LOCAL_DEBUGGING allows the compiler driver to automatically set a -B
prefix (assuming one it not user supplied). It sets the -Bprefix with
the given path to argv[0]. This allows subprograms to be found in the
build tree (without having to be installed). It is only meant as an
aid to development, not a user feature :-). It allows developers to
lazily type: ./gm2 -c hello.c rather than ./gm2 -B./ -c hello.c
or /somedirectory/development/build/gcc/gm2 -c hello.c. */
#undef LOCAL_DEBUGGING
#define DEFAULT_DIALECT "pim"
typedef enum { iso, pim, min, logitech, pimcoroutine, maxlib } libs;
/* These are the library names which are installed as part of gm2 and reflect
-flibs=name. The -flibs= option provides the user with a short cut to add
libraries without having to know the include and link path. */
static const char *library_name[maxlib]
= { "m2iso", "m2pim", "m2min", "m2log", "m2cor" };
/* They match the installed archive name for example libm2iso.a,
libm2pim.a, libm2min.a, libm2log.a and libm2cor.a. They also match a
subdirectory name where the definition modules are kept. The driver
checks the argument to -flibs= for an entry in library_name or
alternatively the existance of the subdirectory (to allow for third
party libraries to coexist). */
static const char *library_abbrev[maxlib]
= { "iso", "pim", "min", "log", "cor" };
/* Users may specifiy -flibs=pim,iso etc which are mapped onto
-flibs=m2pim,m2iso respectively. This provides a match between
the dialect of Modula-2 and the library set. */
int lang_specific_pre_link (void);
static void add_exec_prefix (void);
#if defined(LOCAL_DEBUGGING)
static void add_B_prefix (unsigned int *in_decoded_options_count,
struct cl_decoded_option **in_decoded_options);
#endif
static const char *get_objects (int argc, const char *argv[]);
static const char *get_link_args (int argc, const char *argv[]);
static const char *add_exec_dir (int argc, const char *argv[]);
static const char *add_exec_name (int argc, const char *argv[]);
static int is_object (const char *s);
static void remember_object (const char *s);
static void remember_link_arg (const char *opt, const char *s);
static void scan_for_link_args (unsigned int *in_decoded_options_count,
struct cl_decoded_option **in_decoded_options);
static void add_link_from_include (struct cl_decoded_option **in_options,
int include);
static void add_lib (size_t opt_index, const char *lib, int joined);
static void check_gm2_root (void);
static const char *add_include (const char *libpath, const char *library);
static const char *gen_gm2_prefix (const char *gm2_root);
static const char *gen_gm2_libexec (const char *path);
static const char *get_libexec (void);
static void insert_option (unsigned int *in_decoded_options_count,
struct cl_decoded_option **in_decoded_options,
unsigned int position);
static const char *gen_link_path (const char *libpath, const char *dialect);
typedef struct object_list
{
char *name;
struct object_list *next;
} object_list;
static object_list *head_objects = NULL;
static object_list *head_link_args = NULL;
static int inclPos = -1;
static int linkPos = -1;
static bool seen_fonlylink = false;
static bool seen_fmakeall0 = false;
static bool seen_fmakeall = false;
static bool seen_B = false;
static const char *B_path = NULL;
static const char *multilib_dir = NULL;
/* By default, the suffix for target object files is ".o". */
#ifdef TARGET_OBJECT_SUFFIX
#define HAVE_TARGET_OBJECT_SUFFIX
#else
#define TARGET_OBJECT_SUFFIX ".o"
#endif
/* fe_generate_option, wrap up arg and pass it to fe_save_switch. */
static void
fe_generate_option (size_t opt_index, const char *arg, bool joined)
{
const struct cl_option *option = &cl_options[opt_index];
char *opt;
if (joined)
{
const char *old = option->opt_text;
opt = (char *)xmalloc (strlen (old) + strlen (arg) + 1);
strcpy (opt, old);
strcat (opt, arg);
}
else
opt = xstrdup (option->opt_text);
if (arg == NULL || joined)
fe_save_switch (opt, 0, NULL, true, false);
else
{
const char **x = (const char **)XCNEWVEC (const char **, 2);
x[0] = xstrdup (arg);
x[1] = NULL;
gcc_assert (opt_index != OPT_l);
fe_save_switch (opt, 1, x, true, false);
}
}
#if defined(LOCAL_DEBUGGING)
/* Find_executable_path, if argv0 references an executable filename
then use this path. */
static const char *
find_executable_path (const char *argv0)
{
if (access (argv0, X_OK) == 0)
{
const char *n = strrchr (argv0, DIR_SEPARATOR);
/* Strip off the program name from argv0, but leave the DIR_SEPARATOR. */
if (n != NULL)
{
char *copy = xstrdup (argv0);
char *n = strrchr (copy, DIR_SEPARATOR);
n[1] = (char)0;
return copy;
}
}
return NULL;
}
/* add_B_prefix, adds the -Bprefix option so that we can tell
subcomponents of gm2 where to pick up its executables. But we can
only do this if the user explicitly gives the path to argv[0]. */
static void
add_B_prefix (unsigned int *in_decoded_options_count ATTRIBUTE_UNUSED,
struct cl_decoded_option **in_decoded_options)
{
if ((*in_decoded_options)[0].arg != NULL)
{
const char *arg = (*in_decoded_options)[0].arg;
const char *path = find_executable_path (arg);
if (path == NULL || (strcmp (path, "") == 0))
path = gen_gm2_libexec (get_libexec ());
if (path != NULL && (strcmp (path, "") != 0))
{
#if defined(DEBUGGING)
unsigned int i;
printf ("going to add -B%s\n", path);
for (i = 0; i < *in_decoded_options_count; i++)
print_option ("before add -B", i, *in_decoded_options);
#endif
fe_handle_opt_b (xstrdup (path));
fe_generate_option (OPT_B, xstrdup (path), 1);
#if defined(DEBUGGING)
for (i = 0; i < *in_decoded_options_count; i++)
print_option ("after add -B", i, *in_decoded_options);
#endif
}
}
}
#endif
/* add_exec_prefix, adds the -ftarget-ar= option so that we can tell
gm2lcc where to pick up the `ar' utility. */
static void
add_exec_prefix (void)
{
const char *ar = AR_PATH;
const char *ranlib = RANLIB_PATH;
fe_generate_option (OPT_ftarget_ar_, ar, true);
fe_generate_option (OPT_ftarget_ranlib_, ranlib, true);
}
static const char *
get_libexec (void)
{
const char *libexec = getenv (GM2_LIBEXEC_ENV);
if (libexec == NULL || (strcmp (libexec, "") == 0))
return STANDARD_LIBEXEC_PREFIX;
else
return libexec;
}
static int
is_object (const char *s)
{
return (strlen (s) > strlen (TARGET_OBJECT_SUFFIX)
&& (strcmp (s + strlen (s) - strlen (TARGET_OBJECT_SUFFIX),
TARGET_OBJECT_SUFFIX)
== 0));
}
static void
remember_object (const char *s)
{
object_list *n = (object_list *)xmalloc (sizeof (object_list));
n->name = xstrdup (s);
n->next = head_objects;
head_objects = n;
#if defined(DEBUGGING)
fprintf (stderr, "remembering object: %s\n", s);
#endif
}
static void
remember_link_arg (const char *opt, const char *s)
{
object_list *n = (object_list *)xmalloc (sizeof (object_list));
n->name = (char *)xmalloc (strlen (opt) + strlen (s) + 1);
strcpy (n->name, opt);
strcat (n->name, s);
n->next = head_link_args;
head_link_args = n;
}
/* add_link_from_include, adds option to (**in_argv)[pos] using the
include path. */
static void
add_link_from_include (struct cl_decoded_option **in_options, int include)
{
struct cl_decoded_option *options = *in_options;
const char *arg = options[include].arg;
fe_generate_option (OPT_fobject_path_, arg, true);
}
/* add_lib, add lib to the end of the command line. */
static void
add_lib (size_t opt_index, const char *lib, int joined)
{
if (lib == NULL || (strcmp (lib, "") == 0))
return;
fe_generate_option (opt_index, lib, joined);
}
/* insert_option, inserts an option at position on the command line. */
static void
insert_option (unsigned int *in_decoded_options_count,
struct cl_decoded_option **in_decoded_options,
unsigned int position)
{
struct cl_decoded_option *new_decoded_options;
unsigned int i;
(*in_decoded_options_count)++;
gcc_assert (position <= (*in_decoded_options_count));
new_decoded_options
= XNEWVEC (struct cl_decoded_option, (*in_decoded_options_count) + 1);
for (i = 0; i < position; i++)
new_decoded_options[i] = (*in_decoded_options)[i];
memset (&new_decoded_options[position], 0,
sizeof (struct cl_decoded_option));
for (i = position; i < (*in_decoded_options_count) - 1; i++)
new_decoded_options[i + 1] = (*in_decoded_options)[i];
*in_decoded_options = new_decoded_options;
}
/* add_library, adds a library to the command line at arg position.
It returns the number of arguments added. If libraryname is NULL or
empty then zero is returned. */
static int
add_library (const char *libraryname, unsigned int *in_decoded_options_count,
struct cl_decoded_option **in_decoded_options,
unsigned int position)
{
if (libraryname == NULL || (strcmp (libraryname, "") == 0))
return 0;
insert_option (in_decoded_options_count, in_decoded_options, position);
#if defined(DEBUGGING)
printf ("going to add -l%s at position=%d count=%d\n", libraryname,
position, *in_decoded_options_count);
print_options ("before add_library", *in_decoded_options_count, *in_decoded_options);
#endif
generate_option (OPT_l, libraryname, 1, CL_DRIVER,
&(*in_decoded_options)[position]);
#if defined(DEBUGGING)
print_options ("after add_library", *in_decoded_options_count, *in_decoded_options);
#endif
return 1;
}
/* build_archive_path returns a string containing the a path to the
archive defined by libpath and dialectLib. */
static const char *
build_archive_path (const char *libpath, const char *library)
{
if (library != NULL)
{
const char *libdir = (const char *)library;
if (libdir != NULL)
{
int machine_length = 0;
char dir_sep[2];
dir_sep[0] = DIR_SEPARATOR;
dir_sep[1] = (char)0;
if (multilib_dir != NULL)
{
machine_length = strlen (multilib_dir);
machine_length += strlen (dir_sep);
}
int l = strlen (libpath) + 1 + strlen ("m2") + 1
+ strlen (libdir) + 1 + machine_length + 1;
char *s = (char *)xmalloc (l);
strcpy (s, libpath);
strcat (s, dir_sep);
if (machine_length > 0)
{
strcat (s, multilib_dir);
strcat (s, dir_sep);
}
strcat (s, "m2");
strcat (s, dir_sep);
strcat (s, libdir);
return s;
}
}
return NULL;
}
/* safe_strdup, safely duplicates a string. */
static char *
safe_strdup (const char *s)
{
if (s != NULL)
return xstrdup (s);
return NULL;
}
/* add_default_combination, adds the correct link path and then the
library name. */
static void
add_default_combination (const char *libpath, const char *library,
unsigned int *in_decoded_options_count,
struct cl_decoded_option **in_decoded_options,
unsigned int position)
{
if (library != NULL)
{
add_lib (OPT_L, build_archive_path (libpath, library), true);
add_library (safe_strdup (library), in_decoded_options_count,
in_decoded_options, position);
}
}
/* gen_link_path, generates a link path for the chosen dialect. */
static const char *
gen_link_path (const char *libpath, const char *dialect)
{
return add_include (libpath, dialect);
}
/* add_default_archives, adds the default archives to the end of the
current command line. */
static int
add_default_archives (const char *libpath, const char *libraries,
unsigned int *in_decoded_options_count,
struct cl_decoded_option **in_decoded_options,
unsigned int position)
{
const char *prev;
const char *l = libraries;
const char *e;
char *c;
unsigned int libcount = 0;
do
{
if (libpath == NULL)
prev = NULL;
else
prev = xstrdup (libpath);
e = index (l, ',');
if (e == NULL)
{
c = xstrdup (l);
l = NULL;
}
else
{
c = xstrndup (l, e - l);
l = e + 1;
}
add_default_combination (libpath, c, in_decoded_options_count,
in_decoded_options, position + libcount);
libcount++;
prev = gen_link_path (libpath, c);
fe_generate_option (OPT_L, prev, true);
free (c);
}
while ((l != NULL) && (l[0] != (char)0));
return libcount;
}
/* build_include_path, builds the component of the include path
referenced by the, which, libs. */
static const char *
build_include_path (const char *libpath, const char *library)
{
char dir_sep[2];
char *gm2libs;
unsigned int machine_length = 0;
dir_sep[0] = DIR_SEPARATOR;
dir_sep[1] = (char)0;
if (multilib_dir != NULL)
{
machine_length = strlen (multilib_dir);
machine_length += strlen (dir_sep);
}
gm2libs = (char *)alloca (strlen (libpath) + strlen (dir_sep) + strlen ("m2")
+ strlen (dir_sep) + strlen (library) + 1
+ machine_length + 1);
strcpy (gm2libs, libpath);
strcat (gm2libs, dir_sep);
if (machine_length > 0)
{
strcat (gm2libs, multilib_dir);
strcat (gm2libs, dir_sep);
}
strcat (gm2libs, "m2");
strcat (gm2libs, dir_sep);
strcat (gm2libs, library);
return xstrdup (gm2libs);
}
/* add_include add the correct include path given the libpath and
library. The new path is returned. */
static const char *
add_include (const char *libpath, const char *library)
{
if (library == NULL)
return NULL;
else
return build_include_path (libpath, library);
}
/* add_default_includes, add the appropriate default include paths
depending upon the style of libraries chosen. */
static void
add_default_includes (const char *libpath, const char *libraries)
{
const char *l = libraries;
const char *e;
const char *c;
const char *path;
do
{
e = index (l, ',');
if (e == NULL)
{
c = xstrdup (l);
l = NULL;
}
else
{
c = xstrndup (l, e - l);
l = e + 1;
}
path = add_include (libpath, c);
fe_generate_option (OPT_I, path, true);
}
while ((l != NULL) && (l[0] != (char)0));
}
/* build_fobject_path, returns a string containing the a path to the
objects defined by libpath and dialectLib. */
static char *
build_fobject_path (const char *prev, const char *libpath, const char *library)
{
char sepstr[2];
char *gm2objs;
const char *libName = library;
unsigned int machine_length = 0;
sepstr[0] = DIR_SEPARATOR;
sepstr[1] = (char)0;
if (multilib_dir != NULL)
{
machine_length = strlen (multilib_dir);
if (machine_length > 0)
machine_length += strlen (sepstr);
}
if (prev == NULL)
{
gm2objs = (char *)alloca (
strlen (libpath) + strlen (sepstr)
+ machine_length
+ strlen ("m2") + strlen (sepstr)
+ strlen (libName) + 1 + strlen (libpath) + strlen (sepstr)
+ strlen ("m2") + strlen (sepstr) + strlen (libName) + 1);
strcpy (gm2objs, "");
}
else
{
gm2objs = (char *)alloca (
strlen (prev) + strlen (":") + strlen (libpath) + strlen (sepstr)
+ machine_length
+ strlen ("m2") + strlen (sepstr) + strlen (libName) + 1
+ strlen (libpath) + strlen (sepstr) + strlen ("m2")
+ strlen (sepstr) + strlen (libName) + 1);
strcpy (gm2objs, prev);
strcat (gm2objs, ":");
}
strcat (gm2objs, libpath);
strcat (gm2objs, sepstr);
if (machine_length > 0)
{
strcat (gm2objs, multilib_dir);
strcat (gm2objs, sepstr);
}
strcat (gm2objs, "m2");
strcat (gm2objs, sepstr);
strcat (gm2objs, libName);
return xstrdup (gm2objs);
}
/* add_fobject_path, add all required path to satisfy the link for library. */
static void
add_fobject_path (const char *prev, const char *libpath, const char *library)
{
if (library != NULL)
fe_generate_option (OPT_fobject_path_,
build_fobject_path (prev, libpath, library), true);
}
/* add_default_fobjects, add the appropriate default include paths
depending upon the libraries chosen. */
static void
add_default_fobjects (const char *prev, const char *libpath,
const char *libraries)
{
const char *l = libraries;
const char *e;
const char *c;
do
{
e = index (l, ',');
if (e == NULL)
{
c = xstrdup (l);
l = NULL;
}
else
{
c = xstrndup (l, e - l);
l = e + 1;
}
add_fobject_path (prev, libpath, c);
}
while ((l != NULL) && (l[0] != (char)0));
}
static void
scan_for_link_args (unsigned int *in_decoded_options_count,
struct cl_decoded_option **in_decoded_options)
{
struct cl_decoded_option *decoded_options = *in_decoded_options;
unsigned int i;
for (i = 0; i < *in_decoded_options_count; i++)
{
const char *arg = decoded_options[i].arg;
size_t opt = decoded_options[i].opt_index;
if (opt == OPT_l)
remember_link_arg ("-l", arg);
else if (opt == OPT_L)
remember_link_arg ("-L", arg);
}
}
/* purge_include_options, remove any -I option found from
in_decoded_options. */
static void
purge_include_options (unsigned int *in_decoded_options_count,
struct cl_decoded_option **in_decoded_options)
{
struct cl_decoded_option *decoded_options = *in_decoded_options;
unsigned int i, j;
for (i = 0; i < *in_decoded_options_count; i++)
{
size_t opt = decoded_options[i].opt_index;
if (opt == OPT_I)
{
for (j = i; j + 1 < *in_decoded_options_count; j++)
decoded_options[j] = decoded_options[j + 1];
(*in_decoded_options_count)--;
}
}
}
/* convert_include_into_link, convert the include path options into
link path options. */
static void
convert_include_into_link (struct cl_decoded_option **in_decoded_options,
unsigned int *in_decoded_options_count)
{
unsigned int i;
for (i = 1; i < *in_decoded_options_count; i++)
{
size_t opt = (*in_decoded_options)[i].opt_index;
if (opt == OPT_I)
add_link_from_include (in_decoded_options, i);
}
}
/* build_path, implements export PATH=$(prefix)/bin:$PATH. */
static void
build_path (const char *prefix)
{
int l = strlen ("PATH=") + strlen (prefix) + 1 + strlen ("bin") + 1;
char *s;
char dir_sep[2];
const char *path;
path = getenv ("PATH");
if (path != NULL && (strcmp (path, "") != 0))
l += strlen (":") + strlen (path);
s = (char *)xmalloc (l);
dir_sep[0] = DIR_SEPARATOR;
dir_sep[1] = (char)0;
strcpy (s, "PATH=");
strcat (s, prefix);
strcat (s, dir_sep);
strcat (s, "bin");
if (path != NULL && (strcmp (path, "") != 0))
{
strcat (s, ":");
strcat (s, path);
}
fe_putenv (s);
}
/* gen_gm2_prefix, return the prefix string. */
static const char *
gen_gm2_prefix (const char *prefix)
{
int l = strlen (prefix) + 1 + strlen ("lib") + 1 + strlen ("gcc") + 1
+ strlen (DEFAULT_TARGET_MACHINE) + 1
+ strlen (DEFAULT_TARGET_VERSION) + 1;
char *s = (char *)xmalloc (l);
char dir_sep[2];
dir_sep[0] = DIR_SEPARATOR;
dir_sep[1] = (char)0;
strcpy (s, prefix);
strcat (s, dir_sep);
strcat (s, "lib");
strcat (s, dir_sep);
strcat (s, "gcc");
strcat (s, dir_sep);
strcat (s, DEFAULT_TARGET_MACHINE);
strcat (s, dir_sep);
strcat (s, DEFAULT_TARGET_VERSION);
return s;
}
/* gen_gm2_libexec, return a libexec string. */
static const char *
gen_gm2_libexec (const char *libexec)
{
int l = strlen (libexec) + 1 + strlen (DEFAULT_TARGET_MACHINE) + 1
+ strlen (DEFAULT_TARGET_VERSION) + 1;
char *s = (char *)xmalloc (l);
char dir_sep[2];
dir_sep[0] = DIR_SEPARATOR;
dir_sep[1] = (char)0;
strcpy (s, libexec);
strcat (s, dir_sep);
strcat (s, DEFAULT_TARGET_MACHINE);
strcat (s, dir_sep);
strcat (s, DEFAULT_TARGET_VERSION);
return s;
}
/* build_library_path, implements export
LIBRARY_PATH=$(gm2_root)/lib/gcc/\ $(default_target_machine)/\
$(default_target_version)
where gm2_root, default_target_machine and default_target_version
are C strings. */
static void
build_library_path (const char *prefix)
{
const char *path = gen_gm2_prefix (prefix);
int l = strlen ("LIBRARY_PATH=") + strlen (prefix) + 1;
char *s = (char *)xmalloc (l);
strcpy (s, "LIBRARY_PATH=");
strcat (s, path);
fe_putenv (s);
}
/* build_compiler_path, implements export
COMPILER_PATH=$(GM2_LIBEXEC)/libexec/gcc/\
$(default_target_machine)/\ $(default_target_version). */
static void
build_compiler_path (const char *path)
{
const char *libexec = gen_gm2_libexec (path);
int l = strlen ("COMPILER_PATH=") + strlen (libexec) + 1;
char *s = (char *)xmalloc (l);
strcpy (s, "COMPILER_PATH=");
strcat (s, libexec);
fe_putenv (s);
}
/* check_gm2_root, checks to see whether GM2_PREFIX or GM2_LIBEXEC
has been defined, if it has and also COMPILER_PATH and LIBRARY_PATH
are both unset then it sets COMPILER_PATH and LIBRARY_PATH using
GM2_PREFIX and GM2_LIBEXEC as its prefix. */
static void
check_gm2_root (void)
{
const char *library_path;
const char *compiler_path;
const char *gm2_prefix;
const char *gm2_libexec;
library_path = fe_getenv (LIBRARY_PATH_ENV);
compiler_path = fe_getenv ("COMPILER_PATH");
gm2_prefix = fe_getenv (GM2_PREFIX_ENV);
gm2_libexec = fe_getenv (GM2_LIBEXEC_ENV);
if ((library_path == NULL || (strcmp (library_path, "") == 0))
&& (compiler_path == NULL || (strcmp (compiler_path, "") == 0)))
{
#if defined(DEBUGGING)
fprintf (stderr, "STANDARD_LIBEXEC_PREFIX = %s\n",
STANDARD_LIBEXEC_PREFIX);
fprintf (stderr, "STANDARD_BINDIR_PREFIX = %s\n",
STANDARD_BINDIR_PREFIX);
fprintf (stderr, "TOOLDIR_BASE_PREFIX = %s\n", TOOLDIR_BASE_PREFIX);
fprintf (stderr, "DEFAULT_TARGET_VERSION = %s\n",
DEFAULT_TARGET_VERSION);
fprintf (stderr, "DEFAULT_TARGET_MACHINE = %s\n",
DEFAULT_TARGET_MACHINE);
#endif
if (gm2_prefix != NULL && (strcmp (gm2_prefix, "") != 0))
{
build_path (gm2_prefix);
build_library_path (gm2_prefix);
}
if (gm2_libexec != NULL && (strcmp (gm2_libexec, "") != 0))
build_compiler_path (gm2_libexec);
}
else if (gm2_prefix != NULL && !seen_fmakeall0)
/* No need to issue a warning if seen_fmakeall0 as the parent will
have set COMPILER_PATH and LIBRARY_PATH because of GM2_ROOT.
Also users should not be using -fmakeall0 as it is an internal
option. */
error ("it is not advisible to set %qs as well as either %qs or %qs",
GM2_PREFIX_ENV, LIBRARY_PATH_ENV, "COMPILER_PATH");
}
/* library_installed returns true if directory library is found under
libpath. */
static bool
library_installed (const char *libpath, const char *library)
{
#if defined(HAVE_OPENDIR) && defined(HAVE_DIRENT_H)
const char *complete = build_archive_path (libpath, library);
DIR *directory = opendir (complete);
if (directory == NULL || (errno == ENOENT))
return false;
/* Directory exists and therefore the library also exists. */
closedir (directory);
return true;
#else
return false;
#endif
}
/* check_valid check to see that the library is valid.
It check the library against the default library set in gm2 and
also against any additional libraries installed in the prefix tree. */
static bool
check_valid_library (const char *libpath, const char *library)
{
/* firstly check against the default libraries (which might not be
installed yet). */
for (int i = 0; i < maxlib; i++)
if (strcmp (library, library_name[i]) == 0)
return true;
/* secondly check whether it is installed (a third party library). */
return library_installed (libpath, library);
}
/* check_valid_list check to see that the libraries specified are valid.
It checks against the default library set in gm2 and also against
any additional libraries installed in the libpath tree. */
static bool
check_valid_list (const char *libpath, const char *libraries)
{
const char *start = libraries;
const char *end;
const char *copy;
do
{
end = index (start, ',');
if (end == NULL)
{
copy = xstrdup (start);
start = NULL;
}
else
{
copy = xstrndup (start, end - start);
start = end + 1;
}
if (! check_valid_library (libpath, copy))
{
error ("library specified %sq is either not installed or does not exist",
copy);
return false;
}
}
while ((start != NULL) && (start[0] != (char)0));
return true;
}
/* add_env_option append multiple options, one for each element in
the path. */
static void
add_env_option (const char *path, size_t option)
{
if (path != NULL)
{
const char *p = path;
const char *s = path;
char *arg;
int i, l, n;
l = strlen (path);
i = 0;
n = 0;
while (i < l)
{
if (path[i] == ':')
{
arg = (char *)xmalloc (n + 1);
strncpy (arg, s, n);
arg[n] = (char)0;
fe_generate_option (option, arg, true);
n++;
s = &p[i];
n = 0;
}
else
{
n++;
i++;
}
}
if (n > 0)
{
arg = (char *)xmalloc (n + 1);
strncpy (arg, s, n);
arg[n] = (char)0;
fe_generate_option (option, arg, true);
}
}
}
/* add_word returns a new string which has the contents of lib appended to list.
If list is NULL then lib is duplicated and returned otherwise the list is
appended by "," and the contents of lib. */
static const char *
add_word (const char *list, const char *lib)
{
char *copy;
if (list == NULL)
return xstrdup (lib);
copy = (char *) xmalloc (strlen (list) + strlen (lib) + 1 + 1);
strcpy (copy, list);
strcat (copy, ",");
strcat (copy, lib);
return copy;
}
/* convert_abbreviation checks abbreviation against known library abbreviations.
If an abbreviations is found it converts the element to the full
library name, otherwise the user supplied name is added to the full_libraries list.
A new string is returned. */
static const char *
convert_abbreviation (const char *full_libraries, const char *abbreviation)
{
for (int i = 0; i < maxlib; i++)
if (strcmp (abbreviation, library_abbrev[i]) == 0)
return add_word (full_libraries, library_name[i]);
/* No abbreviation found therefore assume user specified full library name. */
return add_word (full_libraries, abbreviation);
}
/* convert_abbreviations checks each element in the library list to see if an
a known library abbreviation was used. If found it converts the element to the full
library name, otherwise the element is copied into the list.
A new string is returned. */
static const char *
convert_abbreviations (const char *libraries)
{
const char *start = libraries;
const char *end;
const char *full_libraries = NULL;
do
{
end = index (start, ',');
if (end == NULL)
{
full_libraries = convert_abbreviation (full_libraries, start);
start = NULL;
}
else
{
full_libraries = convert_abbreviation (full_libraries, xstrndup (start, end - start));
start = end + 1;
}
}
while ((start != NULL) && (start[0] != (char)0));
return full_libraries;
}
/* lang_specific_driver is invoked if we are compiling/linking a
Modula-2 file. It checks for module paths and linking requirements
which are language specific. */
void
lang_specific_driver (struct cl_decoded_option **in_decoded_options,
unsigned int *in_decoded_options_count,
int *in_added_libraries)
{
unsigned int i;
/* Nonzero if we saw a `-xfoo' language specification on the command
line. This function will add a -xmodula-2 if the user has not
already placed one onto the command line. */
bool seen_x_flag = false;
const char *language = NULL;
const char *libraries = NULL;
const char *dialect = DEFAULT_DIALECT;
bool seen_module_extension = -1;
bool linking = true;
bool seen_source = false;
bool seen_fexceptions = true;
const char *libpath;
const char *gm2ipath;
const char *gm2opath;
/* By default, we add the math library if we have one. */
bool need_math = (strcmp (MATH_LIBRARY, "") == 0);
/* True if we should add -lpthread to the command-line. */
bool need_pthread = true;
/* True if we should add -fplugin=m2rte to the command-line. */
bool need_plugin = true;
/* True if we should add -shared-libgcc to the command-line. */
bool shared_libgcc = true;
/* The total number of arguments with the new stuff. */
unsigned int argc = *in_decoded_options_count;
/* Initially scan the options for key values. */
for (i = 1; i < argc; i++)
{
if ((*in_decoded_options)[i].errors & CL_ERR_MISSING_ARG)
continue; /* Avoid examining arguments of options missing them. */
switch ((*in_decoded_options)[i].opt_index)
{
case OPT_fuselist:
/* Modula-2 link time option, which is used to direct the specs. */
(*in_decoded_options)[i].errors = 0;
break;
case OPT_fexceptions:
seen_fexceptions = ((*in_decoded_options)[i].value);
break;
case OPT_fonlylink:
seen_fonlylink = true;
break;
#if 0
case OPT_fmakeall:
seen_fmakeall = true;
break;
case OPT_fmakeall0:
seen_fmakeall0 = true;
break;
#endif
case OPT_B:
seen_B = true;
B_path = (*in_decoded_options)[i].arg;
break;
case OPT_fno_pthread:
need_pthread = false;
break;
case OPT_fno_m2_plugin:
need_plugin = false;
break;
default:
if (((*in_decoded_options)[i].orig_option_with_args_text != NULL)
&& (strncmp ((*in_decoded_options)[i].orig_option_with_args_text,
"-m", 2) == 0))
multilib_dir = xstrdup ((*in_decoded_options)[i].orig_option_with_args_text
+ 2);
}
}
/* -fmakeall implies that the first invoked driver only does the link
and should leave all compiles to the makefile otherwise we will try
and link two main applications. */
if (seen_fmakeall && (!seen_fonlylink))
fe_generate_option (OPT_fonlylink, NULL, false);
check_gm2_root ();
libpath = fe_getenv (LIBRARY_PATH_ENV);
if (libpath == NULL || (strcmp (libpath, "") == 0))
libpath = LIBSUBDIR;
gm2ipath = fe_getenv (GM2IPATH_ENV);
gm2opath = fe_getenv (GM2OPATH_ENV);
#if defined(DEBUGGING)
print_options ("at beginning", *in_decoded_options_count, *in_decoded_options);
#endif
i = 1;
for (i = 1; i < *in_decoded_options_count; i++)
{
const char *arg = (*in_decoded_options)[i].arg;
size_t opt = (*in_decoded_options)[i].opt_index;
#if defined(DEBUGGING)
print_option ("in for", i, *in_decoded_options);
printf ("argument: %s, %ld\n", arg, opt);
#endif
if ((opt == OPT_c) || (opt == OPT_S))
linking = false;
if (opt == OPT_I)
{
fe_generate_option (OPT_I, arg, true);
inclPos = i;
}
if (opt == OPT_fobject_path_)
linkPos = i;
if (opt == OPT_fiso)
dialect = "iso";
if (opt == OPT_fpim2)
dialect = "pim2";
if (opt == OPT_fpim3)
dialect = "pim3";
if (opt == OPT_fpim4)
dialect = "pim4";
if (opt == OPT_fpim)
dialect = "pim";
if (opt == OPT_flibs_)
libraries = xstrdup (arg);
if (opt == OPT_fmod_)
seen_module_extension = true;
if (opt == OPT_version)
gm2_version (true);
if (opt == OPT_fm2_version)
gm2_version (false);
if (opt == OPT_x)
{
seen_x_flag = true;
language = arg;
}
if (opt == OPT_SPECIAL_input_file)
{
if (is_object (arg))
remember_object (arg);
else
seen_source = true;
}
}
if (linking && (!seen_source))
linking = false;
if (language != NULL && (strcmp (language, "modula-2") != 0))
return;
#if defined(DEBUGGING)
print_options ("in the middle", *in_decoded_options_count, *in_decoded_options);
#endif
/* If the libraries have not been specified by the user and the
dialect has been specified then select the appropriate libraries. */
if (libraries == NULL)
{
if (strncmp (dialect, "pim", 3) == 0)
libraries = xstrdup ("m2pim");
else if (strcmp (dialect, "iso") == 0)
libraries = xstrdup ("m2iso,m2pim");
}
libraries = convert_abbreviations (libraries);
if (! check_valid_list (libpath, libraries))
return;
if (inclPos != -1 && linkPos == -1)
{
#if defined(DEBUGGING)
printf ("inclPos = %d, linkPos = %d\n", inclPos, linkPos);
#endif
linkPos = 1;
convert_include_into_link (in_decoded_options, in_decoded_options_count);
}
add_env_option (gm2ipath, OPT_I);
add_default_includes (libpath, libraries);
add_exec_prefix ();
#if defined(LOCAL_DEBUGGING)
if (!seen_B)
add_B_prefix (in_decoded_options_count, in_decoded_options);
#endif
#if defined(DEBUGGING)
print_options ("after B prefix", *in_decoded_options_count, *in_decoded_options);
#endif
if (linkPos == -1)
{
linkPos = 1;
if (inclPos == -1)
add_default_fobjects (NULL, libpath, libraries);
else
{
struct cl_decoded_option *options = *in_decoded_options;
const char *prev = options[inclPos].arg;
add_default_fobjects (prev, libpath, libraries);
}
}
if ((!seen_x_flag) && seen_module_extension)
fe_generate_option (OPT_x, "modula-2", false);
if (need_plugin)
fe_generate_option (OPT_fplugin_, "m2rte", true);
if (linking)
{
add_env_option (gm2opath, OPT_fobject_path_);
(*in_added_libraries) += add_default_archives (
libpath, libraries, in_decoded_options_count, in_decoded_options,
*in_decoded_options_count);
if (need_math)
(*in_added_libraries)
+= add_library (MATH_LIBRARY, in_decoded_options_count,
in_decoded_options, *in_decoded_options_count);
if (need_pthread)
(*in_added_libraries)
+= add_library ("pthread", in_decoded_options_count,
in_decoded_options, *in_decoded_options_count);
if (seen_fexceptions)
(*in_added_libraries)
+= add_library (LIBSTDCXX, in_decoded_options_count,
in_decoded_options, *in_decoded_options_count);
/* There is no point adding -shared-libgcc if we don't have a shared
libgcc. */
#if !defined(ENABLE_SHARED_LIBGCC)
shared_libgcc = false;
#endif
if (shared_libgcc)
{
fe_generate_option (OPT_shared_libgcc, NULL, false);
(*in_added_libraries)
+= add_library ("gcc_eh", in_decoded_options_count,
in_decoded_options, *in_decoded_options_count);
}
}
scan_for_link_args (in_decoded_options_count, in_decoded_options);
#if defined(DEBUGGING)
print_options ("before include purge", *in_decoded_options_count, *in_decoded_options);
#endif
purge_include_options (in_decoded_options_count, in_decoded_options);
#if defined(DEBUGGING)
print_options ("after include purge", *in_decoded_options_count, *in_decoded_options);
#endif
}
/* lang_specific_pre_link - does nothing. */
int
lang_specific_pre_link (void)
{
return 0;
}
/* get_objects returns a string containing all objects specified on
the command line. */
static const char *
get_objects (int argc ATTRIBUTE_UNUSED, const char *argv[] ATTRIBUTE_UNUSED)
{
char *result = (char *)xmalloc (1);
int len = 0;
int flen;
object_list *o;
*result = (char)0;
for (o = head_objects; o != NULL; o = o->next)
{
len = strlen (result);
flen = strlen (o->name);
result = (char *)xrealloc (result, len + flen + 1 + 1);
strcat (result, o->name);
strcat (result, " ");
}
return result;
}
/* remove_objects return an empty string, but also remove all objects
from the command line. */
extern void fe_mark_compiled (const char *);
static const char *
remove_objects (int argc ATTRIBUTE_UNUSED, const char *argv[] ATTRIBUTE_UNUSED)
{
object_list *o;
for (o = head_objects; o != NULL; o = o->next)
fe_mark_compiled (o->name);
return NULL;
}
/* get_link_args returns a string containing all arguments related to
the link stage. */
static const char *
get_link_args (int argc ATTRIBUTE_UNUSED, const char *argv[] ATTRIBUTE_UNUSED)
{
char *result = (char *)xmalloc (1);
int len = 0;
int alen;
object_list *o;
*result = (char)0;
for (o = head_link_args; o != NULL; o = o->next)
{
len = strlen (result);
alen = strlen (o->name);
result = (char *)xrealloc (result, len + alen + 1 + 1);
strcat (result, o->name);
strcat (result, " ");
}
return result;
}
/* add_exec_dir prepends the exec path to the given executable filename. */
static const char *
add_exec_dir (int argc, const char *argv[])
{
if (argc == 1 && argv[0] != NULL)
{
const char *path;
if (seen_B)
path = xstrdup (B_path);
else
path = gen_gm2_libexec (get_libexec ());
if (path != NULL)
{
char *opt = (char *)xmalloc (strlen ("-fcppprog=") + strlen (path)
+ 1 + strlen (argv[0]) + 1);
char *sep = (char *)alloca (2);
sep[0] = DIR_SEPARATOR;
sep[1] = (char)0;
strcpy (opt, "-fcppprog=");
strcat (opt, path);
strcat (opt, sep);
strcat (opt, argv[0]);
return opt;
}
}
return "-fcppprog=none";
}
/* add_exec_name generate binary name. */
static const char *
add_exec_name (int argc, const char *argv[])
{
if (argc == 1 && argv[0] != NULL)
return argv[0];
return xstrdup ("");
}
/* no_link tell gcc.c not to invoke its linker. */
static const char *
no_link (int argc ATTRIBUTE_UNUSED, const char *argv[] ATTRIBUTE_UNUSED)
{
allow_linker = false;
return xstrdup ("");
}
/* exit_callback invoke exit. */
static const char *
exit_callback (int argc ATTRIBUTE_UNUSED, const char *argv[] ATTRIBUTE_UNUSED)
{
exit (0);
}
/* lang_register_spec_functions register the Modula-2 associated spec
functions. */
void
lang_register_spec_functions (void)
{
fe_add_spec_function ("objects", get_objects);
fe_add_spec_function ("nolink", no_link);
fe_add_spec_function ("noobjects", remove_objects);
fe_add_spec_function ("linkargs", get_link_args);
fe_add_spec_function ("exec_prefix", add_exec_dir);
fe_add_spec_function ("exec_name", add_exec_name);
fe_add_spec_function ("exit", exit_callback);
}
-------------------------
New file: gcc/m2/lang.opt
-------------------------
; Options for the Modula-2 front end.
;
; Copyright (C) 2016-2022 Free Software Foundation, Inc.
; Contributed by Gaius Mulley <gaius.mulley@southwales.ac.uk>.
;
; 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 COPYING. If not,
; see <https://www.gnu.org/licenses/>. *)
; See the GCC internals manual for a description of this file's format.
; Please try to keep this file in ASCII collating order.
Language
Modula-2
I
Modula-2 Joined Separate
; Documented in c.opt
L
Modula-2 Joined Separate
; Not documented
M
Modula-2
; Documented in c.opt
O
Modula-2
; Documented in c.opt
fiso
Modula-2
use ISO dialect of Modula-2
fpim
Modula-2
use PIM [234] dialect of Modula-2
fpim2
Modula-2
use PIM 2 dialect of Modula-2
fpim3
Modula-2
use PIM 3 dialect of Modula-2
fpim4
Modula-2
use PIM 4 dialect of Modula-2
fpositive-mod-floor-div
Modula-2
force positive result from MOD and DIV result floor
flibs=
Modula-2 Joined
specify the library order, currently legal entries include: log, min, pim, iso or their directory name equivalent m2log, m2min, m2pim, m2iso.
fauto-init
Modula-2
automatically initializes all pointers to NIL
flocation=
Modula-2 Joined
set all location values to a specific value (internal)
fbounds
Modula-2
turns on runtime subrange, array index and indirection via NIL pointer checking
freturn
Modula-2
turns on runtime checking for functions which finish without executing a RETURN statement
fnil
Modula-2
turns on runtime checking to detect accessing data through a NIL value pointer
fcase
Modula-2
turns on runtime checking to check whether a CASE statement requires an ELSE clause when on was not specified
ffloatvalue
Modula-2
turns on runtime checking to check whether a floating point number is about to exceed range
fwholevalue
Modula-2
turns on runtime checking to check whether a whole number is about to exceed range
fsoft-check-all
Modula-2
turns on all software runtime checking (an abbreviation for -fnil -frange -findex -fwholediv -fcase -freturn -fwholediv -ffloatvalue)
frange
Modula-2
turns on all range checking for numerical values
findex
Modula-2
turns on all range checking for numerical values
fwholediv
Modula-2
turns on all division and modulus by zero checking for ordinal values
fexceptions
Modula-2
; Documented in common.opt
fextended-opaque
Modula-2
allows opaque types to be implemented as any type (a GNU Modula-2 extension)
fuselist
Modula-2
use ordered list of modules when linking
fmakelist
Modula-2
create a topologically ordered list of modules
fmodules
Modula-2
display the list of modules and their location
fno-pthread
Modula-2
do not link against the pthread library
fm2-plugin
Modula-2
insert plugin to identify runtime errors at compiletime
fno-m2-plugin
Modula-2
do not insert plugin to identify runtime errors at compiletime
fonlylink
Modula-2
only link the module and do not compile module
ftarget-ar=
Modula-2 Joined
full path to target archiver
ftarget-ranlib=
Modula-2 Joined
full path to target ranlib
fruntime-modules=
Modula-2 Joined
specify the list of runtime modules and their initialization order
fcpp
Modula-2
use cpp to preprocess the module
fq
Modula-2
internal compiler debugging information, dump the list of quadruples
fsources
Modula-2
display the location of module source files as they are compiled
funbounded-by-reference
Modula-2
optimize non var unbounded parameters by passing it by reference, providing it is not written to within the callee procedure.
fdef=
Modula-2 Joined
recognise the specified suffix as a definition module filename
fmod=
Modula-2 Joined
recognise the specified suffix as implementation and module filenames
fxcode
Modula-2
issue all errors and warnings in the Xcode format
fdebug-builtins
Modula-2
call a real function, rather than the builtin equivalent
fdump-system-exports
Modula-2
display all inbuilt system items
fd
Modula-2
turn on internal debugging of the compiler
fdebug-trace-quad
Modula-2
turn on quadruple tracing (internal switch)
fdebug-trace-api
Modula-2
turn on the Modula-2 api tracing (internal switch)
fdebug-function-line-numbers
Modula-2
turn on the Modula-2 function line number generation (internal switch)
fm2-statistics
Modula-2
display statistics about the amount of source lines compiled and symbols used
fm2-g
Modula-2
generate extra nops to improve debugging, producing an instruction for every code related keyword
fm2-lower-case
Modula-2
generate error messages which render keywords in lower case
fm2-strict-type
Modula-2
experimental flag to turn on the new strict type checker
fswig
Modula-2
create a swig interface file for the module
fshared
Modula-2
generate a shared library from the module
fmakeinit
Modula-2
generate the start up C code for the module, a file _m2_modulename.c is created
fobject-path=
Modula-2 Joined
set the object path
fm2-whole-program
Modula-2
compile all implementation modules and program module at once
fversion
Modula-2
; Documented in common.opt
fm2-version
Modula-2
display the GNU Modula-2 version
Wstudents
Modula-2
extra compile time semantic checking, typically tries to catch bad style
Wpedantic
Modula-2
; Documented in common.opt
Wpedantic-param-names
Modula-2
compiler checks to force definition module procedure parameter names with their implementation module counterpart
Wpedantic-cast
Modula-2
compiler warns if a cast is being used on types of differing sizes
Wverbose-unbounded
Modula-2
inform user which parameters will be passed by reference
Wall
Modula-2
; Documented in c.opt
Wunused-variable
Modula-2
; Documented in c.opt
Wunused-parameter
Modula-2
; Documented in c.opt
version
Modula-2
; Documented in c.opt
v
Modula-2
; Documented in c.opt
lang-asm
Modula-2
; Documented in c.opt
traditional-cpp
Modula-2
; Documented in c.opt
iprefix
Modula-2
; Documented in c.opt
isystem
Modula-2
; Documented in c.opt
idirafter
Modula-2
; Documented in c.opt
imultilib
Modula-2
; Documented in c.opt
fobjc-std=objc1
Modula-2
; Documented in c.opt
fcppend
Modula-2
passed to the preprocessor if -fcpp is used
fcppbegin
Modula-2
passed to the preprocessor if -fcpp is used
fcppprog=
Modula-2 Joined
passed to the preprocessor if -fcpp is used
E
Modula-2
; Documented in c.opt (passed to the preprocessor if -fcpp is used)
D
Modula-2
; Documented in c.opt
x
Modula-2 Joined
specify the language from the compiler driver
-save-temps
Modula-2 Alias(save-temps)
save-temps
Modula-2
save temporary preprocessed files
save-temps=
Modula-2 Joined
save temporary preprocessed files
; This comment is to ensure we retain the blank line above.
-------------------------------
New file: gcc/m2/lang-options.h
-------------------------------
/* Definitions for switches for Modula-2.
Copyright (C) 2001-2022 Free Software Foundation, Inc.
Contributed by Gaius Mulley <gaius@glam.ac.uk>.
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 COPYING. If not,
see <https://www.gnu.org/licenses/>. */
#define LINK_COMMAND_SPEC ""
/* This is the contribution to the `documented_lang_options' array in
toplev.c for gm2. */
DEFINE_LANG_NAME ("Modula-2")
{ "-I",
N_("specifies a library path (C syntax)") },
{ "-fiso",
N_("use ISO dialect of Modula-2") },
{ "-fpim",
N_("use PIM [234] dialect of Modula-2") },
{ "-fpim2",
N_("use PIM 2 dialect of Modula-2") },
{ "-fpim3",
N_("use PIM 3 dialect of Modula-2") },
{ "-fpim4",
N_("use PIM 4 dialect of Modula-2") },
{ "-fpositive-mod-floor-div",
N_("force positive result from MOD and DIV result floor") },
{ "-flibs=ulm",
N_("use the University of Ulm libraries and PIM dialect of Modula-2") },
{ "-flibs=min",
N_("use a minimal SYSTEM, M2RTS and libc and no other system libraries") },
{ "-flibs=logitech",
N_("use the Logitech compatible (PIM dialect) set of libraries") },
{ "-flibs=pim-coroutine",
N_("use the PIM dialect libraries which include coroutine support") },
{ "-fnil",
N_("turns on runtime checking to detect accessing data through a NIL value pointer") },
{ "-fno-nil",
N_("turns off runtime checking to detect accessing data through a NIL value pointer") },
{ "-fwholediv",
N_("generate code to detect whole number division by zero or modulus by zero") },
{ "-fno-wholediv",
N_("do not generate code to detect whole number division by zero or modulus by zero") },
{ "-findex",
N_("generate code to check whether array index values are out of bounds") },
{ "-fno-index",
N_("do not generate code to check whether array index values are out of bounds") },
{ "-frange",
N_("generate code to check the assignment range, return value range, set range and constructor range") },
{ "-fno-range",
N_("do not generate code to check the assignment range, return value range, set range and constructor range") },
{ "-freturn",
N_("turns on runtime checking for functions which finish without executing a RETURN statement") },
{ "-fno-return",
N_("turns off runtime checking for functions which finish without executing a RETURN statement") },
{ "-fcase",
N_("turns on runtime checking to check whether a CASE statement requires an ELSE clause when on was not specified") },
{ "-fno-case",
N_("turns off runtime checking to check whether a CASE statement requires an ELSE clause when on was not specified") },
{ "-fsoft-check-all",
N_("turns on all runtime checking (an abbreviation for -fnil -frange -findex -fwholediv -fcase -freturn-ffloatvalue)") },
{ "-fno-soft-check-all",
N_("turns off all runtime checking (an abbreviation for -fno-nil -fno-range -fno-index -fno-wholediv -fno-case -fno-return -fno-floatvalue)") },
{ "-fexceptions",
N_("turns on all exception generating code (this is on by default)") },
{ "-fno-exceptions",
N_("turns off all exception generating code, this flag should be used with -flibs=min") },
{ "-fauto-init",
N_("automatically initializes all pointers to NIL") },
{ "-Wstudents",
N_("extra compile time semantic checking, typically tries to catch bad style") },
{ "-Wpedantic",
N_("compiler checks nested WITH statements (referencing same type) and multiple identical imports") },
{ "-Wpedantic-param-names",
N_("compiler checks to force definition module procedure parameter names with their implementation module counterpart") },
{ "-Wpedantic-cast",
N_("compiler warns if a cast is being used on types of differing sizes") },
{ "-fextended-opaque",
N_("allows opaque types to be implemented as any type (a GNU Modula-2 extension)") },
{ "-Wverbose-unbounded",
N_("inform user which parameters will be passed by reference") },
{ "-Wunused-variable",
N_("compiler warns if a variable is declared and not used") },
{ "-Wno-unused-variable",
N_("turns off compiler warning if a variable is declared and not used") },
{ "-Wunused-parameter",
N_("compiler warns if a parameter is declared and not used") },
{ "-Wno-unused-parameter",
N_("turns off compiler warning if a parameter is declared and not used") },
{ "-fxcode",
N_("issue all errors and warnings in the Xcode format") },
{ "-fuselist",
N_("use ordered list of modules when linking") },
{ "-fmakelist",
N_("created ordered list of modules") },
{ "-fm2-whole-program",
N_("compile all implementation and program modules as a single unit") },
{ "-fm2-statistics",
N_("display statistics about the amount of source lines compiled and symbols used") },
{ "-fm2-g",
N_("generate extra nops to improve debugging, producing an instruction for every code related keyword") },
{ "-fm2-lower-case",
N_("generate error messages which render keywords in lower case") },
{ "-fmodules",
N_("display list of modules and location") },
{ "-fno-pthread",
N_("do not link against -lpthread") },
{ "-fruntime-modules=",
N_("specify the list of runtime modules and their initialization order") },
{ "-fclean",
N_("cleans all the project objects in the current directory using make") },
{ "-fmakeall",
N_("build a project using make") },
{ "-fmakeall0",
N_("do not build a project using make (internal)") },
{ "-fmake-I=",
N_("build project path (internal)") },
{ "-ftarget-ar=",
N_("full path to target archiver") },
{ "-ftarget-ranlib=",
N_("full path to target ranlib") },
{ "-fcpp",
N_("use cpp to preprocess the module") },
{ "-fq",
N_("debugging information - dump the list of quadruples") },
{ "-fsources",
N_("display the location of module source files as they are compiled") },
{ "-funbounded-by-reference",
N_("optimize non var unbounded parameters by passing it by reference, providing it is not written to within the callee procedure.") },
{ "-fdef=",
N_("recognise the specified suffix as a definition module filename") },
{ "-fmod=",
N_("recognise the specified suffix as implementation and module filenames") },
{ "-fdump-system-exports",
N_("display all inbuilt system items") },
{ "-fswig",
N_("generate a swig interface file") },
{ "-fshared",
N_("generate a shared library from the module") },
{ "-fmakeinit",
N_("generate the start up C code for the module, a file _m2_modulename.c is created") },
{ "-fobject-path=",
N_("set the object path") },
{ "-fonlylink",
N_("only link the module and do not compile module (internal)"),
{ "--version",
N_("display the GNU Modula-2 version") },
{ "-fversion",
N_("display the GNU Modula-2 version") },
{ "-fm2-version",
N_("display the GNU Modula-2 version") },
{ "-O",
N_("optimize code") },
{ "-flocation=",
N_("set all location values to unknown,builtin,integer value (internal debugging)") },
{ "-x",
N_("specify the language") },
{ "-fdebug-function-line-numbers",
N_("turn on the Modula-2 function line number generation (internal switch)") },
{ "-ffloatvalue",
N_("generate code to detect floating point overflow and underflow") },
{ "-fno-floatvalue",
N_("do not generate code to detect floating point overflow and underflow") },
{ "-fwholevalue",
N_("generate code to detect whole number overflow and underflow") },
{ "-fno-wholevalue",
N_("do not generate code to detect whole number overflow and underflow") },
{ "-fm2-plugin",
N_("insert semantic plugin to detect runtime errors at compile time") },
{ "-fno-m2-plugin",
N_("do not insert semantic plugin to detect runtime errors at compile time") },
{ "-fsave-temps",
N_("save temporary files after the preprocessor phase") },
{ "-fsave-temps=",
N_("save temporary files and place them in the directory specified") },
-----------------------------
New file: gcc/m2/lang-specs.h
-----------------------------
/* Definitions for specs for GNU Modula-2.
Copyright (C) 2001-2022 Free Software Foundation, Inc.
Contributed by Gaius Mulley.
This file is part of GCC.
GCC 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.
GCC 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 GCC; see the file COPYING3. If not see
<http://www.gnu.org/licenses/>. */
/* This is the contribution to the `default_compilers' array in gcc.c for
GNU Modula-2. */
#include "m2-link-support.h"
#if !defined(MODULA_PROJECT_SUPPORT)
# define MODULA_PROJECT_SUPPORT " "
#endif
#if !defined(MODULA_LINK_SUPPORT)
# define MODULA_LINK_SUPPORT " "
#endif
#if !defined(M2CPP)
# define M2CPP " "
#endif
{".mod", "@modula-2", 0, 0, 0},
// {".m2l", "@modula-2-linker", 0, 0, 0},
{"@modula-2",
"%{c:" MODULA_PROJECT_SUPPORT "}"
"%{c|S:cc1gm2 " M2CPP
" %(cc1_options) %{f*} %{+e*} %{I*} "
" %{MD} %{MMD} %{M} %{MM} %{MA} %{MT*} %{MF*} %V"
" %{save-temps*}"
" %i %{!fsyntax-only:%(invoke_as)}}"
MODULA_LINK_SUPPORT ,
0, 0, 0},
----------------------------------
New file: gcc/m2/m2-link-support.h
----------------------------------
/* Link support specs for GNU Modula-2.
Copyright (C) 2019-2022 Free Software Foundation, Inc.
Contributed by Gaius Mulley <gaius.mulley@southwales.ac.uk>.
This file is part of GCC.
GCC 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.
GCC 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 GCC; see the file COPYING3. If not see
<http://www.gnu.org/licenses/>. */
/* The subprograms used by Modula-2 to facilitate linking are:
gm2l - parses the top level module and all other dependent
modules. It creates a dependency tree and emits a list
of dependent modules.
gm2lcc - generates a link command for all dependent modules or
display module object filesystem location.
gm2m - parses the top level module and all other dependent
module and generates a Makefile from the import tree.
gm2lgen - generate a C or C++ scaffold from the list of modules.
gm2lorder - manipulate the dependent list of modules to force
critcal runtime modules to be initialized at the
beginning of the init sequence. */
/* AS run the assembler with default options. */
#define AS(INPUT,OUTPUT) "as %a %Y " INPUT " -o " OUTPUT
/* GM2CC_OPTIONS a list of all CC options used by gm2 during the
link scaffold generation. */
#define GM2CC_OPTIONS "%{i*} %{v*} %{m*} %{g*} %{O*} %{fPIC} %{fpic} \
%{+e*} %{I*} %{MD} %{MMD} %{M} %{MM} %{MA} \
%{MT*} %{MF*} -quiet "
/* SCAFFOLDNAME is the basename of the scaffold C or C++ program
which may be automatically generated by the linking process. */
#define SCAFFOLDNAME "%b_m2"
/* RM_IF_NOSAVETEMP remove the next file if save-temps is absent. */
#define RM_IF_NOSAVETEMP "%{!save-temps*:%d}"
/* GM2CC compile the link scaffold either with the C or C++
compiler. */
#define GM2CC(INPUT,OUTPUT) \
"%{!fno-exceptions:cc1plus;:cc1} %1" GM2CC_OPTIONS " " INPUT " \
-o " RM_IF_NOSAVETEMP SCAFFOLDNAME ".s \n\
" AS(SCAFFOLDNAME ".s",OUTPUT) " "
/* GM2LCC invoke the sub program gm2lcc with the object path options
and user supplied objects. It will search for Modula-2 object
if they are not already present on the command line. The
current module is contained in OBJECT and LST is a list of all
the dependant modules. */
#define GM2LCC(OBJECT,LST) \
"gm2lcc %{fshared} %{fpic} %{fPIC} %{B*} %{L*} %{ftarget-ar=*} \
%{ftarget-ranlib=*} \
%{fobject-path=*} %{v} --exec --startup \
" SCAFFOLDNAME "%O \
%{!fshared:--ar %:objects() %:noobjects() -o " \
RM_IF_NOSAVETEMP "%w%g.a } \
" OBJECT " \
%{fshared:%w%{o:%{o*}}%:nolink() %:objects() %:noobjects() \
%:linkargs() } " LST " "
/* GM2LORDER run the gm2lorder sub program. It generates a module
list LST by parsing INPUT and all dependant modules. */
#define GM2LORDER(INPUT,LST) \
"gm2lorder %{fruntime-modules=*} " INPUT " -o " LST " \n"
/* GM2LGEN run the gm2lgen sub program which generates a C or C++
scaffold (SCAFFOLDSRC). It then compiles SCAFFOLDSRC and links
it with all dependant modules in LST. MAINOBJECT is the main
module object name containing the scaffold. */
#define GM2LGEN(LST,SCAFFOLDSRC,MAINOBJECT) \
"gm2lgen %{fshared} %{fshared:--terminate --exit} \
%{!fno-exceptions:-fcpp} " LST " -o " SCAFFOLDSRC " \n\
" GM2L_COMBINE(LST,SCAFFOLDSRC,MAINOBJECT)
/* GM2L_COMBINE compiles the scaffold SCAFFOLDSRC and links all dependant
modules in LST. MAINOBJECT is the main module object containing
the scaffold. */
#define GM2L_COMBINE(LST,SCAFFOLDSRC,MAINOBJECT) \
GM2CC(SCAFFOLDSRC,MAINOBJECT) " \n\
rm -f %w%d%g.a \n\
" GM2LCC("--mainobject " MAINOBJECT,LST)
/* Pass the preprocessor options on the command line together with
the exec prefix. */
#define M2CPP "%{fcpp:-fcppbegin %:exec_prefix(cc1)" \
" -E -lang-asm -traditional-cpp " \
" %(cpp_unique_options) -fcppend}"
/* Generate a list of topologically sorted dependent modules. */
#define GM2L(INPUT,OUTPUT) \
"gm2l %{v} " M2CPP " %{I*} %{fdef=*} %{fmod=*} " OUTPUT " " INPUT " "
/* General GNU options. */
#define GENERAL_OPTIONS "%{i*} %{f*} %{+e*} %{I*} %{MD} %{MMD} %{M} \
%{MM} %{MA} %{MT*} %{MF*} %V"
/* Run the compiler using standard GNU options. */
#define CC1GM2 "cc1gm2 " M2CPP " %(cc1_options) " GENERAL_OPTIONS
/* Generate a swig interface file and exit. */
#define SWIG "%{fswig:" CC1GM2 "%i \n\
%:exit()}"
/* Generate a basename.lst containing a list of all dependent modules
for the project and exit. */
#define MAKELIST "%{fmakelist:" GM2L("%i","%{!pipe:-o %g.l}") " |\n\
gm2lorder %{fruntime-modules=*} %{!pipe:%g.l} \
-o %b.lst \n\
%:exit()}"
/* Generate a scaffold from basename.lst and store the output source
into SCAFFOLDNAME.cpp and exit. */
#define MAKEINIT "%{fmakeinit:gm2lgen %{fshared} \
%{fshared:--terminate --exit} \
%{!fno-exceptions:-fcpp} %b.lst -o " \
SCAFFOLDNAME ".cpp \n\
%:exit()}"
/* Display the filesystem location of the all object files in the
project list. */
#define REPORT_OBJECTS "gm2lcc %{fshared} %{fpic} %{fPIC} %{B*} %{L*} \
%{ftarget-ar=*} %{ftarget-ranlib=*} \
%{fobject-path=*} %{v} -c "
/* Generate a list of modules used within a project and report the
object file location and exit. */
#define MODULES \
"%{fmodules:%{fuselist:" REPORT_OBJECTS " %b.lst}" \
"%{!fuselist:" GM2L("%i","%{!pipe:-o %g.l}") " |\n\
gm2lorder %{fruntime-modules=*} \
%{!pipe:%g.l} -o %g.lst \n\
" REPORT_OBJECTS " %g.lst} \n\
%:exit()}"
/* MODULA_PROJECT_SUPPORT contains a list of all project support
sub components. */
#define MODULA_PROJECT_SUPPORT SWIG MAKELIST MAKEINIT MODULES
/* GM2 invoke cc1gm2 placing assembler output into OUTPUT given
source file, INPUT. */
#define GM2(INPUT,OUTPUT) CC1GM2 " -o " OUTPUT " " INPUT
/* GEN_SCAFFOLD_SRC generates the string SCAFFOLDNAME ".cpp"
marking it for deletion if -fmakeinit is absent. */
#define GEN_SCAFFOLD_SRC \
"%{fmakeinit:" SCAFFOLDNAME ".cpp;:" \
RM_IF_NOSAVETEMP SCAFFOLDNAME ".cpp}"
/* M2LINK compile main module (providing absense of -fonlylink)
and link all project dependent modules. */
#define M2LINK \
"%{!S:%{!gm2gcc:%{!fonlylink:" GM2("%i",RM_IF_NOSAVETEMP "%g.s") " \n\
" AS("%g.s","%w%b%O") " } \n\
%{!fuselist:" GM2L("%i"," -o %g.l ") " \n\
" GM2LORDER("%g.l","%g.lst") " \n\
" GM2LGEN("%{fuselist:%b.lst;:%g.lst}",\
GEN_SCAFFOLD_SRC,\
RM_IF_NOSAVETEMP SCAFFOLDNAME "%O") "}}\n\
}"
/* MODULA_LINK_SUPPORT only invoke link subprocesses if no -c option. */
#define MODULA_LINK_SUPPORT "%{!c:" M2LINK "}"
-------------------------------
New file: gcc/m2/config-lang.in
-------------------------------
# Top level configure fragment for GNU Modula-2.
# Copyright (C) 2000-2022 Free Software Foundation, Inc.
# This file is part of GCC.
# GCC 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.
# GCC 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 GCC; see the file COPYING3. If not see
# <http://www.gnu.org/licenses/>.
# Configure looks for the existence of this file to auto-config each language.
# We define several parameters used by configure:
#
# language - name of language as it would appear in $(LANGUAGES)
# compilers - value to add to $(COMPILERS)
# stagestuff - files to add to $(STAGESTUFF)
language="m2"
compilers="cc1gm2\$(exeext) gm2l\$(exeext) gm2lcc\$(exeext) \
gm2lgen\$(exeext) gm2lsub\$(exeext) gm2cc\$(exeext) \
gm2lorder\$(exeext)"
stagestuff="gm2\$(exeext) cc1gm2\$(exeext) gm2l\$(exeext) \
gm2lcc\$(exeext) gm2lgen\$(exeext) gm2lsub\$(exeext) cc1gm2-cross\$(exeext)"
target_libs="target-libstdc++-v3 target-libgm2"
# The Modula-2 frontend needs C++ to compile the main, so we need to build the C++
# compiler during stage 1.
lang_requires_boot_languages=c++
# Do not build by default.
build_by_default="no"
gtfiles="\$(srcdir)/m2/gm2-lang.cc \
\$(srcdir)/m2/gm2-lang.h \
\$(srcdir)/m2/gm2-gcc/rtegraph.cc \
\$(srcdir)/m2/gm2-gcc/m2block.cc \
\$(srcdir)/m2/gm2-gcc/m2builtins.cc \
\$(srcdir)/m2/gm2-gcc/m2decl.cc \
\$(srcdir)/m2/gm2-gcc/m2except.cc \
\$(srcdir)/m2/gm2-gcc/m2expr.cc \
\$(srcdir)/m2/gm2-gcc/m2statement.cc \
\$(srcdir)/m2/gm2-gcc/m2type.cc"
outputs=" \
m2/config-make \
m2/www/Makefile \
"
mkdir -p m2/gm2-compiler-boot
mkdir -p m2/gm2-libs-boot
mkdir -p m2/gm2-ppg-boot
mkdir -p m2/gm2-pge-boot
mkdir -p m2/gm2-pg-boot
mkdir -p m2/gm2-ici-boot
mkdir -p m2/gm2-ici
mkdir -p m2/gm2-libiberty
mkdir -p m2/gm2-gcc
mkdir -p m2/gm2-auto
mkdir -p m2/gm2-compiler
mkdir -p m2/gm2-libs
mkdir -p m2/gm2-libs-iso
mkdir -p m2/gm2-compiler-paranoid
mkdir -p m2/gm2-libs-paranoid
mkdir -p m2/gm2-compiler-verify
mkdir -p m2/boot-bin
mkdir -p m2/gm2-libs-pim
mkdir -p m2/gm2-libs-coroutines
mkdir -p m2/gm2-libs-min
mkdir -p m2/mc-boot
mkdir -p m2/mc-boot-ch
mkdir -p m2/mc-boot-gen
mkdir -p plugin
mkdir -p stage1/m2 stage2/m2 stage3/m2 stage4/m2
-------------------------------
New file: gcc/m2/config-make.in
-------------------------------
# Target libraries are put under this directory:
TARGET_SUBDIR = @target_subdir@
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH] Modula-2: merge proposal/review: 7/9 07.patch-set-05
2022-05-18 13:45 [PATCH] Modula-2: merge proposal/review: 7/9 07.patch-set-05 Gaius Mulley
@ 2022-05-18 20:46 ` Joseph Myers
2022-05-19 9:43 ` Gaius Mulley
0 siblings, 1 reply; 3+ messages in thread
From: Joseph Myers @ 2022-05-18 20:46 UTC (permalink / raw)
To: Gaius Mulley; +Cc: gcc-patches
On Wed, 18 May 2022, Gaius Mulley via Gcc-patches wrote:
> /* This is the contribution to the `documented_lang_options' array in
> toplev.c for gm2. */
I'm not sure what this is (an unused file?), but documented_lang_options
was removed in 2003. And in general, comments referring to .c files,
throughout the front end, need to be updated to refer to the current names
of those files (C++ sources have been renamed from .c to .cc in GCC).
--
Joseph S. Myers
joseph@codesourcery.com
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH] Modula-2: merge proposal/review: 7/9 07.patch-set-05
2022-05-18 20:46 ` Joseph Myers
@ 2022-05-19 9:43 ` Gaius Mulley
0 siblings, 0 replies; 3+ messages in thread
From: Gaius Mulley @ 2022-05-19 9:43 UTC (permalink / raw)
To: Joseph Myers; +Cc: gcc-patches
Joseph Myers <joseph@codesourcery.com> writes:
> On Wed, 18 May 2022, Gaius Mulley via Gcc-patches wrote:
>
>> /* This is the contribution to the `documented_lang_options' array in
>> toplev.c for gm2. */
>
> I'm not sure what this is (an unused file?), but documented_lang_options
> was removed in 2003. And in general, comments referring to .c files,
> throughout the front end, need to be updated to refer to the current names
> of those files (C++ sources have been renamed from .c to .cc in GCC).
ah yes - many thanks for spotting this - I will git rm lang-options.h.
Also thanks for the suggestion to check for other comments mentioning .c
files. I've found about 4 in gcc/m2/gm2-gcc/*.{h,cc} - which I'll
change immediately,
regards,
Gaius
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2022-05-19 9:44 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-05-18 13:45 [PATCH] Modula-2: merge proposal/review: 7/9 07.patch-set-05 Gaius Mulley
2022-05-18 20:46 ` Joseph Myers
2022-05-19 9:43 ` Gaius Mulley
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).