| (* M2Batch.def implements a queue for modules pending compilation. |
| |
| Copyright (C) 2001-2025 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/>. *) |
| |
| DEFINITION MODULE M2Batch ; |
| |
| (* |
| Author : Gaius Mulley |
| Title : M2Batch |
| Date : 29/5/87 |
| Description: Implements a queue modules pending compilation. |
| MakeSource enters modules for later compilation. |
| GetSource collects the next module to be compiled. |
| *) |
| |
| FROM DynamicStrings IMPORT String ; |
| FROM NameKey IMPORT Name ; |
| EXPORT QUALIFIED MakeDefinitionSource, |
| MakeImplementationSource, |
| MakeProgramSource, |
| GetSource, GetModuleNo, IsModuleKnown, |
| AssociateDefinition, GetDefinitionModuleFile, |
| AssociateModule, GetModuleFile, Get, |
| ForeachSourceModuleDo, IsSourceSeen, IsModuleSeen, |
| LookupModule, LookupOuterModule, DisplayModules ; |
| |
| TYPE |
| DoProcedure = PROCEDURE (CARDINAL) ; |
| |
| |
| (* |
| MakeDefinitionSource - is given a Name, n, which is used to create a Definition |
| module. |
| The Definition Module will be placed onto the |
| compilation pending queue if it has not yet been |
| compiled. |
| If the module has been compiled then no action is |
| taken. The Module Sym is returned. |
| *) |
| |
| PROCEDURE MakeDefinitionSource (tok: CARDINAL; n: Name) : CARDINAL ; |
| |
| |
| (* |
| MakeImplementationSource - is given a Name, n, which is used to create an |
| implementation module. |
| The implementation Module will be placed onto |
| the compilation pending |
| queue if it has not yet been compiled. |
| If the module has been compiled then no |
| action is taken. The Module Sym is returned. |
| *) |
| |
| PROCEDURE MakeImplementationSource (tok: CARDINAL; n: Name) : CARDINAL ; |
| |
| |
| (* |
| MakeProgramSource - is given a Name, n, which is used to create a program module. |
| The program module will be placed onto the compilation |
| pending queue if it has not yet been compiled. |
| If the module has been compiled then no action is taken. |
| The Module Sym is returned. |
| *) |
| |
| PROCEDURE MakeProgramSource (tok: CARDINAL; n: Name) : CARDINAL ; |
| |
| |
| (* |
| GetSource - returns with the symbol Sym of the next module to be compiled. |
| If Sym returns with value NulSym then no module should be |
| compiled. |
| *) |
| |
| PROCEDURE GetSource () : CARDINAL ; |
| |
| |
| (* |
| GetModuleNo - returns with symbol number of the module which was |
| the nth module to be read in Pass 1. |
| The modules are numbered from 1..n |
| *) |
| |
| PROCEDURE GetModuleNo (nth: CARDINAL) : CARDINAL ; |
| |
| |
| (* |
| IsModuleKnown - returns TRUE if the Name, n, matches a module. |
| *) |
| |
| PROCEDURE IsModuleKnown (n: Name) : BOOLEAN ; |
| |
| |
| (* |
| AssociateDefinition - associate the source file, filename, with the definition module, |
| Sym. |
| *) |
| |
| PROCEDURE AssociateDefinition (filename: String; Sym: CARDINAL) : String ; |
| |
| |
| (* |
| GetDefinitionModuleFile - returns the filename associated with the definition module, Sym. |
| It may return a temporary preprocessed file. |
| *) |
| |
| PROCEDURE GetDefinitionModuleFile (Sym: CARDINAL) : String ; |
| |
| |
| (* |
| AssociateModule - associate the source file, filename, with the implementation/program |
| module, Sym. |
| *) |
| |
| PROCEDURE AssociateModule (filename: String; Sym: CARDINAL) : String ; |
| |
| |
| (* |
| GetModuleFile - returns the filename associated with the implementation/program module, Sym. |
| It may return a temporary preprocessed file. |
| *) |
| |
| PROCEDURE GetModuleFile (Sym: CARDINAL) : String ; |
| |
| |
| (* |
| ForeachSourceModuleDo - call each procedure, p, for which there is a known |
| source file. |
| *) |
| |
| PROCEDURE ForeachSourceModuleDo (p: DoProcedure) ; |
| |
| |
| (* |
| IsSourceSeen - returns TRUE if the source for module, sym, has been seen. |
| *) |
| |
| PROCEDURE IsSourceSeen (sym: CARDINAL) : BOOLEAN ; |
| |
| |
| (* |
| IsModuleSeen - returns TRUE if the source for module, name, has been seen. |
| *) |
| |
| PROCEDURE IsModuleSeen (n: Name) : BOOLEAN ; |
| |
| |
| (* |
| LookupModule - looks up a module in the current scope, if a module does not exist |
| then it creates a DefImp module. |
| *) |
| |
| PROCEDURE LookupModule (tok: CARDINAL; n: Name) : CARDINAL ; |
| |
| |
| (* |
| LookupOuterModule - looks up a module in the order of: current scope, then outer scope, finally if a |
| module does not exist then it creates a DefImp module. |
| *) |
| |
| PROCEDURE LookupOuterModule (tok: CARDINAL; n: Name) : CARDINAL ; |
| |
| |
| (* |
| Get - returns the module symbol matching name, n. |
| *) |
| |
| PROCEDURE Get (n: Name) : CARDINAL ; |
| |
| |
| (* |
| DisplayModules - a debugging routine to textually emit the names of modules in the DoneQ. |
| *) |
| |
| PROCEDURE DisplayModules ; |
| |
| |
| END M2Batch. |