blob: a25ea87d5b6e8f23ce8b4149f068b26559e89bcb [file] [log] [blame]
(* 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.