| (* PCSymBuild.def pass C symbol creation. |
| |
| 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 PCSymBuild ; |
| |
| (* |
| Title : PCSymBuild |
| Author : Gaius Mulley |
| System : UNIX (GNU Modula-2) |
| Description: provides scope mainstance for Pass C it also resolves |
| the import/export symbols and assigns types to constructors. |
| *) |
| |
| |
| (* |
| CheckNotVar - checks to see that the top of stack is not a variable. |
| *) |
| |
| PROCEDURE CheckNotVar (tok: CARDINAL) ; |
| |
| |
| (* |
| StartBuildDefinitionModule - Creates a definition module and starts |
| a new scope. |
| |
| The Stack is expected: |
| |
| Entry Exit |
| |
| Ptr -> <- Ptr |
| +------------+ +-----------+ |
| | NameStart | | NameStart | |
| |------------| |-----------| |
| |
| *) |
| |
| PROCEDURE PCStartBuildDefModule ; |
| |
| |
| (* |
| EndBuildDefinitionModule - Destroys the definition module scope and |
| checks for correct name. |
| |
| The Stack is expected: |
| |
| Entry Exit |
| |
| Ptr -> |
| +------------+ +-----------+ |
| | NameEnd | | | |
| |------------| |-----------| |
| | NameStart | | | <- Ptr |
| |------------| |-----------| |
| *) |
| |
| PROCEDURE PCEndBuildDefModule ; |
| |
| |
| (* |
| StartBuildImplementationModule - Creates an implementation module and starts |
| a new scope. |
| |
| The Stack is expected: |
| |
| Entry Exit |
| |
| Ptr -> <- Ptr |
| +------------+ +-----------+ |
| | NameStart | | NameStart | |
| |------------| |-----------| |
| |
| *) |
| |
| PROCEDURE PCStartBuildImpModule ; |
| |
| |
| (* |
| EndBuildImplementationModule - Destroys the implementation module scope and |
| checks for correct name. |
| |
| The Stack is expected: |
| |
| Entry Exit |
| |
| Ptr -> |
| +------------+ +-----------+ |
| | NameEnd | | | |
| |------------| |-----------| |
| | NameStart | | | <- Ptr |
| |------------| |-----------| |
| *) |
| |
| PROCEDURE PCEndBuildImpModule ; |
| |
| |
| (* |
| StartBuildProgramModule - Creates a program module and starts |
| a new scope. |
| |
| The Stack is expected: |
| |
| Entry Exit |
| |
| Ptr -> <- Ptr |
| +------------+ +-----------+ |
| | NameStart | | NameStart | |
| |------------| |-----------| |
| |
| *) |
| |
| PROCEDURE PCStartBuildProgModule ; |
| |
| |
| (* |
| EndBuildProgramModule - Destroys the program module scope and |
| checks for correct name. |
| |
| The Stack is expected: |
| |
| Entry Exit |
| |
| Ptr -> |
| +------------+ +-----------+ |
| | NameEnd | | | |
| |------------| |-----------| |
| | NameStart | | | <- Ptr |
| |------------| |-----------| |
| *) |
| |
| PROCEDURE PCEndBuildProgModule ; |
| |
| |
| (* |
| StartBuildInnerModule - Creates an Inner module and starts |
| a new scope. |
| |
| The Stack is expected: |
| |
| Entry Exit |
| |
| Ptr -> <- Ptr |
| +------------+ +-----------+ |
| | NameStart | | NameStart | |
| |------------| |-----------| |
| |
| *) |
| |
| PROCEDURE PCStartBuildInnerModule ; |
| |
| |
| (* |
| EndBuildInnermModule - Destroys the Inner module scope and |
| checks for correct name. |
| |
| The Stack is expected: |
| |
| Entry Exit |
| |
| Ptr -> |
| +------------+ +-----------+ |
| | NameEnd | | | |
| |------------| |-----------| |
| | NameStart | | | <- Ptr |
| |------------| |-----------| |
| *) |
| |
| PROCEDURE PCEndBuildInnerModule ; |
| |
| |
| (* |
| BuildProcedureHeading - Builds a procedure heading for the definition |
| module procedures. |
| |
| Operation only performed if compiling a |
| definition module. |
| |
| The Stack: |
| |
| Entry Exit |
| |
| Ptr -> |
| +------------+ |
| | ProcSym | Empty |
| |------------| |
| |
| *) |
| |
| PROCEDURE PCBuildProcedureHeading ; |
| |
| |
| (* |
| StartBuildProcedure - Builds a Procedure. |
| |
| The Stack: |
| |
| Entry Exit |
| |
| <- Ptr |
| +------------+ |
| Ptr -> | ProcSym | |
| +------------+ |------------| |
| | Name | | Name | |
| |------------| |------------| |
| *) |
| |
| PROCEDURE PCStartBuildProcedure ; |
| |
| |
| (* |
| EndBuildProcedure - Ends building a Procedure. |
| It checks the start procedure name matches the end |
| procedure name. |
| |
| The Stack: |
| |
| |
| Entry Exit |
| |
| Ptr -> |
| +------------+ |
| | NameEnd | |
| |------------| |
| | ProcSym | |
| |------------| |
| | NameStart | |
| |------------| |
| Empty |
| *) |
| |
| PROCEDURE PCEndBuildProcedure ; |
| |
| |
| (* |
| EndBuildForward - Ends building a forward declaration. |
| |
| The Stack: |
| |
| Entry Exit |
| |
| Ptr -> |
| +------------+ |
| | ProcSym | |
| |------------| |
| | NameStart | |
| |------------| |
| Empty |
| *) |
| |
| PROCEDURE PCEndBuildForward ; |
| |
| |
| (* |
| BuildImportOuterModule - Builds imported identifiers into an outer module |
| from a definition module. |
| |
| The Stack is expected: |
| |
| Entry OR Entry |
| |
| Ptr -> Ptr -> |
| +------------+ +-----------+ |
| | # | | # | |
| |------------| |-----------| |
| | Id1 | | Id1 | |
| |------------| |-----------| |
| . . . . |
| . . . . |
| . . . . |
| |------------| |-----------| |
| | Id# | | Id# | |
| |------------| |-----------| |
| | ImportTok | | Ident | |
| |------------| |-----------| |
| |
| IMPORT Id1, .. Id# ; FROM Ident IMPORT Id1 .. Id# ; |
| |
| |
| Exit |
| |
| All above stack discarded |
| *) |
| |
| PROCEDURE PCBuildImportOuterModule ; |
| |
| |
| (* |
| BuildImportInnerModule - Builds imported identifiers into an inner module |
| from the last level of module. |
| |
| The Stack is expected: |
| |
| Entry OR Entry |
| |
| Ptr -> Ptr -> |
| +------------+ +-----------+ |
| | # | | # | |
| |------------| |-----------| |
| | Id1 | | Id1 | |
| |------------| |-----------| |
| . . . . |
| . . . . |
| . . . . |
| |------------| |-----------| |
| | Id# | | Id# | |
| |------------| |-----------| |
| | ImportTok | | Ident | |
| |------------| |-----------| |
| |
| IMPORT Id1, .. Id# ; FROM Ident IMPORT Id1 .. Id# ; |
| |
| |
| Error Condition |
| Exit |
| |
| All above stack discarded |
| *) |
| |
| PROCEDURE PCBuildImportInnerModule ; |
| |
| |
| (* |
| BuildNulName - Pushes a NulKey onto the top of the stack. |
| The Stack: |
| |
| |
| Entry Exit |
| |
| <- Ptr |
| Empty +------------+ |
| | NulKey | |
| |------------| |
| *) |
| |
| PROCEDURE BuildNulName ; |
| |
| |
| (* |
| BuildConst - builds a constant. |
| Stack |
| |
| Entry Exit |
| |
| Ptr -> <- Ptr |
| +------------+ +------------+ |
| | Name | | Sym | |
| |------------+ |------------| |
| *) |
| |
| PROCEDURE BuildConst ; |
| |
| |
| (* |
| StartDesConst - |
| *) |
| |
| PROCEDURE StartDesConst ; |
| |
| |
| (* |
| EndDesConst - |
| *) |
| |
| PROCEDURE EndDesConst ; |
| |
| |
| (* |
| BuildRelationConst - builds a relationship binary operation. |
| *) |
| |
| PROCEDURE BuildRelationConst ; |
| |
| |
| (* |
| BuildUnaryConst - builds a unary operator node. |
| *) |
| |
| PROCEDURE BuildUnaryConst ; |
| |
| |
| (* |
| BuildBinaryConst - builds a binary operator node. |
| *) |
| |
| PROCEDURE BuildBinaryConst ; |
| |
| |
| (* |
| PushConstFunctionType - |
| *) |
| |
| PROCEDURE PushConstFunctionType ; |
| |
| |
| (* |
| PushIntegerType - pushes a ztype or char leaf. |
| *) |
| |
| PROCEDURE PushIntegerType ; |
| |
| |
| (* |
| PushRType - |
| *) |
| |
| PROCEDURE PushRType ; |
| |
| |
| (* |
| PushStringType - |
| *) |
| |
| PROCEDURE PushStringType ; |
| |
| |
| (* |
| SkipConst - returns an alias to constant, sym, if one exists. |
| Otherwise sym is returned. |
| *) |
| |
| PROCEDURE SkipConst (sym: CARDINAL) : CARDINAL ; |
| |
| |
| (* |
| PushConstType - pushes a constant to the expression stack. |
| *) |
| |
| PROCEDURE PushConstType ; |
| |
| |
| (* |
| PushConstAttributeType - |
| *) |
| |
| PROCEDURE PushConstAttributeType ; |
| |
| |
| (* |
| PushConstAttributePairType - |
| *) |
| |
| PROCEDURE PushConstAttributePairType ; |
| |
| |
| (* |
| PushConstructorCastType - |
| *) |
| |
| PROCEDURE PushConstructorCastType ; |
| |
| |
| (* |
| PushInConstructor - |
| *) |
| |
| PROCEDURE PushInConstructor ; |
| |
| |
| (* |
| PopInConstructor - |
| *) |
| |
| PROCEDURE PopInConstructor ; |
| |
| |
| (* |
| ResolveConstTypes - resolves the types of all designator declared constants. |
| *) |
| |
| PROCEDURE ResolveConstTypes ; |
| |
| |
| END PCSymBuild. |