aboutsummaryrefslogtreecommitdiff
path: root/gcc/m2
diff options
context:
space:
mode:
authorGaius Mulley <gaiusmod2@gmail.com>2024-01-19 17:16:38 +0000
committerGaius Mulley <gaiusmod2@gmail.com>2024-01-19 17:16:38 +0000
commite04376b336502016456eaf4e90c3ea792c77c8df (patch)
tree8a8e5d875bcd4be3eda5a28d39b83f67ae0a93ec /gcc/m2
parent81417a42470cc6e448370341a2fc8a17a7c52c85 (diff)
downloadgcc-e04376b336502016456eaf4e90c3ea792c77c8df.zip
gcc-e04376b336502016456eaf4e90c3ea792c77c8df.tar.gz
gcc-e04376b336502016456eaf4e90c3ea792c77c8df.tar.bz2
modula2: tidyup gcc/m2/gm2-compiler/M2GenGCC.mod remove unused parameters/vars
This patch removes unused parameters and local variables from M2GenGCC.mod. It required ForeachScopeBlockDo2 to be implemented and exported affecting any module indirectly calling ConvertQuadsToTree. gcc/m2/ChangeLog: * gm2-compiler/M2BasicBlock.mod (InitBasicBlocks): Rename ForeachScopeBlockDo to ForeachScopeBlockDo3. * gm2-compiler/M2Code.mod: Import ForeachScopeBlockDo2. (OptimizeScopeBlock): Call ForeachScopeBlockDo3 for procedures with three parameters and ForeachScopeBlockDo2 for two parameters. (CodeBlock): Ditto. * gm2-compiler/M2GCCDeclare.mod (DeclareTypesConstantsProcedures): Rename ForeachScopeBlockDo to ForeachScopeBlockDo3. * gm2-compiler/M2GenGCC.def (ConvertQuadsToTree): Remove Scope parameter. * gm2-compiler/M2GenGCC.mod (ConvertQuadsToTree): Remove Scope parameter. (MaybeDebugBuiltinMemcpy): Remove parameter tok. (MaybeDebugBuiltinMemset): Remove. (MakeCopyUse): Remove tokenno from call to MaybeDebugBuiltinMemcpy. (PerformFoldBecomes): Remove desloc and exprloc. (checkArrayElements): Remove location. Remove virtpos as a parameter to MaybeDebugBuiltinMemcpy. (NoWalkProcedure): Add attribute unused. (CheckElementSetTypes): Remove parameter p. Remove CurrentQuadToken in call to MaybeDebugBuiltinMemcpy. Remove NoWalkProcedure from call to CheckElementSetTypes. Remove tokenno from call to MaybeDebugBuiltinMemcpy. * gm2-compiler/M2Optimize.mod (RemoveProcedures): Replace two parameter indirect procedure iterator with ForeachScopeBlockDo2. * gm2-compiler/M2SSA.mod: Remove ForeachScopeBlockDo. * gm2-compiler/M2Scope.def (ForeachScopeBlockDo2): New declaration. (ForeachScopeBlockDo): Rename ... (ForeachScopeBlockDo3): ... to this. (ScopeProcedure2): New declaration. * gm2-compiler/M2Scope.mod (ForeachScopeBlockDo2): New procedure. (ForeachScopeBlockDo): Rename ... (ForeachScopeBlockDo3): ... to this. Signed-off-by: Gaius Mulley <gaiusmod2@gmail.com>
Diffstat (limited to 'gcc/m2')
-rw-r--r--gcc/m2/gm2-compiler/M2BasicBlock.mod5
-rw-r--r--gcc/m2/gm2-compiler/M2Code.mod24
-rw-r--r--gcc/m2/gm2-compiler/M2GCCDeclare.mod4
-rw-r--r--gcc/m2/gm2-compiler/M2GenGCC.def2
-rw-r--r--gcc/m2/gm2-compiler/M2GenGCC.mod64
-rw-r--r--gcc/m2/gm2-compiler/M2Optimize.mod12
-rw-r--r--gcc/m2/gm2-compiler/M2SSA.mod2
-rw-r--r--gcc/m2/gm2-compiler/M2Scope.def21
-rw-r--r--gcc/m2/gm2-compiler/M2Scope.mod40
9 files changed, 97 insertions, 77 deletions
diff --git a/gcc/m2/gm2-compiler/M2BasicBlock.mod b/gcc/m2/gm2-compiler/M2BasicBlock.mod
index 007fe77..f4b9cb0 100644
--- a/gcc/m2/gm2-compiler/M2BasicBlock.mod
+++ b/gcc/m2/gm2-compiler/M2BasicBlock.mod
@@ -37,8 +37,7 @@ FROM M2Quads IMPORT IsReferenced, IsConditional, IsUnConditional, IsCall,
GetNextQuad, GetQuad, QuadOperator,
SubQuad, DisplayQuadRange ;
-FROM M2Scope IMPORT ScopeBlock, ForeachScopeBlockDo ;
-FROM M2GenGCC IMPORT ConvertQuadsToTree ;
+FROM M2Scope IMPORT ScopeBlock, ForeachScopeBlockDo3 ;
CONST
@@ -68,7 +67,7 @@ VAR
PROCEDURE InitBasicBlocks (sb: ScopeBlock) : BasicBlock ;
BEGIN
HeadOfBasicBlock := NIL ;
- ForeachScopeBlockDo (sb, ConvertQuads2BasicBlock) ;
+ ForeachScopeBlockDo3 (sb, ConvertQuads2BasicBlock) ;
RETURN HeadOfBasicBlock
END InitBasicBlocks ;
diff --git a/gcc/m2/gm2-compiler/M2Code.mod b/gcc/m2/gm2-compiler/M2Code.mod
index 1c7ff83..010e1d0 100644
--- a/gcc/m2/gm2-compiler/M2Code.mod
+++ b/gcc/m2/gm2-compiler/M2Code.mod
@@ -61,7 +61,9 @@ FROM M2GCCDeclare IMPORT FoldConstants, StartDeclareScope,
DeclareProcedure, InitDeclarations,
DeclareModuleVariables, MarkExported ;
-FROM M2Scope IMPORT ScopeBlock, InitScopeBlock, KillScopeBlock, ForeachScopeBlockDo ;
+FROM M2Scope IMPORT ScopeBlock, InitScopeBlock, KillScopeBlock,
+ ForeachScopeBlockDo2, ForeachScopeBlockDo3 ;
+
FROM m2top IMPORT StartGlobalContext, EndGlobalContext, SetFlagUnitAtATime ;
FROM M2Error IMPORT FlushErrors, FlushWarnings ;
FROM M2Swig IMPORT GenerateSwigFile ;
@@ -402,15 +404,15 @@ BEGIN
InitOptimizeVariables ;
OptimTimes := 1 ;
Current := CountQuads () ;
- ForeachScopeBlockDo (sb, InitialDeclareAndOptimize) ;
- ForeachScopeBlockDo (sb, ScopeBlockVariableAnalysis) ;
+ ForeachScopeBlockDo3 (sb, InitialDeclareAndOptimize) ;
+ ForeachScopeBlockDo3 (sb, ScopeBlockVariableAnalysis) ;
REPEAT
- ForeachScopeBlockDo (sb, SecondDeclareAndOptimize) ;
+ ForeachScopeBlockDo3 (sb, SecondDeclareAndOptimize) ;
Previous := Current ;
Current := CountQuads () ;
INC (OptimTimes)
UNTIL (OptimTimes=MaxOptimTimes) OR (Current=Previous) ;
- ForeachScopeBlockDo (sb, LoopAnalysis)
+ ForeachScopeBlockDo3 (sb, LoopAnalysis)
END OptimizeScopeBlock ;
@@ -476,30 +478,30 @@ BEGIN
THEN
n := GetSymName(scope) ;
printf1('before coding procedure %a\n', n) ;
- ForeachScopeBlockDo(sb, DisplayQuadRange) ;
+ ForeachScopeBlockDo3 (sb, DisplayQuadRange) ;
printf0('===============\n')
END ;
- ForeachScopeBlockDo(sb, ConvertQuadsToTree)
+ ForeachScopeBlockDo2 (sb, ConvertQuadsToTree)
ELSIF IsModuleWithinProcedure(scope)
THEN
IF DisplayQuadruples
THEN
n := GetSymName(scope) ;
printf1('before coding module %a within procedure\n', n) ;
- ForeachScopeBlockDo(sb, DisplayQuadRange) ;
+ ForeachScopeBlockDo3 (sb, DisplayQuadRange) ;
printf0('===============\n')
END ;
- ForeachScopeBlockDo(sb, ConvertQuadsToTree) ;
+ ForeachScopeBlockDo2 (sb, ConvertQuadsToTree) ;
ForeachProcedureDo(scope, CodeBlock)
ELSE
IF DisplayQuadruples
THEN
n := GetSymName(scope) ;
printf1('before coding module %a\n', n) ;
- ForeachScopeBlockDo(sb, DisplayQuadRange) ;
+ ForeachScopeBlockDo3 (sb, DisplayQuadRange) ;
printf0('===============\n')
END ;
- ForeachScopeBlockDo(sb, ConvertQuadsToTree) ;
+ ForeachScopeBlockDo2 (sb, ConvertQuadsToTree) ;
IF WholeProgram
THEN
ForeachSourceModuleDo(CodeProcedures)
diff --git a/gcc/m2/gm2-compiler/M2GCCDeclare.mod b/gcc/m2/gm2-compiler/M2GCCDeclare.mod
index 594178f..643374d 100644
--- a/gcc/m2/gm2-compiler/M2GCCDeclare.mod
+++ b/gcc/m2/gm2-compiler/M2GCCDeclare.mod
@@ -144,7 +144,7 @@ FROM M2System IMPORT IsPseudoSystemFunction, IsSystemType,
FROM M2Bitset IMPORT Bitset, Bitnum ;
FROM SymbolConversion IMPORT AddModGcc, Mod2Gcc, GccKnowsAbout, Poison, RemoveMod2Gcc ;
FROM M2GenGCC IMPORT ResolveConstantExpressions ;
-FROM M2Scope IMPORT ScopeBlock, InitScopeBlock, KillScopeBlock, ForeachScopeBlockDo ;
+FROM M2Scope IMPORT ScopeBlock, InitScopeBlock, KillScopeBlock, ForeachScopeBlockDo3 ;
FROM M2ALU IMPORT Addn, Sub, Equ, GreEqu, Gre, Less, PushInt, PushCard, ConvertToType,
PushIntegerTree, PopIntegerTree, PopRealTree, ConvertToInt, PopSetTree,
@@ -2865,7 +2865,7 @@ BEGIN
PushBinding (scope) ;
REPEAT
copy := DupGroup (copy) ;
- ForeachScopeBlockDo (sb, DeclareTypesConstantsProceduresInRange)
+ ForeachScopeBlockDo3 (sb, DeclareTypesConstantsProceduresInRange)
UNTIL EqualGroup (copy, GlobalGroup) ;
KillGroup (copy) ;
PopBinding (scope) ;
diff --git a/gcc/m2/gm2-compiler/M2GenGCC.def b/gcc/m2/gm2-compiler/M2GenGCC.def
index bb755a3f..3e4705e 100644
--- a/gcc/m2/gm2-compiler/M2GenGCC.def
+++ b/gcc/m2/gm2-compiler/M2GenGCC.def
@@ -45,7 +45,7 @@ EXPORT QUALIFIED ConvertQuadsToTree, ResolveConstantExpressions,
the GCC tree structure.
*)
-PROCEDURE ConvertQuadsToTree (Scope: CARDINAL; Start, End: CARDINAL) ;
+PROCEDURE ConvertQuadsToTree (Start, End: CARDINAL) ;
(*
diff --git a/gcc/m2/gm2-compiler/M2GenGCC.mod b/gcc/m2/gm2-compiler/M2GenGCC.mod
index 2261cb0..ced4724 100644
--- a/gcc/m2/gm2-compiler/M2GenGCC.mod
+++ b/gcc/m2/gm2-compiler/M2GenGCC.mod
@@ -415,7 +415,7 @@ END IsExportedGcc ;
the GCC tree structure.
*)
-PROCEDURE ConvertQuadsToTree (Scope: CARDINAL; Start, End: CARDINAL) ;
+PROCEDURE ConvertQuadsToTree (Start, End: CARDINAL) ;
BEGIN
REPEAT
CodeStatement (Start) ;
@@ -1311,7 +1311,9 @@ END GetSizeOfHighFromUnbounded ;
(*
- MaybeDebugBuiltinAlloca -
+ MaybeDebugBuiltinAlloca - if DebugBuiltins is set
+ then call Builtins.alloca_trace
+ else call Builtins.alloca.
*)
PROCEDURE MaybeDebugBuiltinAlloca (location: location_t; tok: CARDINAL; high: Tree) : Tree ;
@@ -1339,10 +1341,12 @@ END MaybeDebugBuiltinAlloca ;
(*
- MaybeDebugBuiltinMemcpy -
+ MaybeDebugBuiltinMemcpy - if DebugBuiltins is set
+ then call memcpy
+ else call Builtins.memcpy.
*)
-PROCEDURE MaybeDebugBuiltinMemcpy (location: location_t; tok: CARDINAL; src, dest, nbytes: Tree) : Tree ;
+PROCEDURE MaybeDebugBuiltinMemcpy (location: location_t; src, dest, nbytes: Tree) : Tree ;
VAR
call,
func: Tree ;
@@ -1360,28 +1364,6 @@ END MaybeDebugBuiltinMemcpy ;
(*
- MaybeDebugBuiltinMemset -
-*)
-
-PROCEDURE MaybeDebugBuiltinMemset (location: location_t; tok: CARDINAL;
- ptr, bytevalue, nbytes: Tree) : Tree ;
-VAR
- call,
- func: Tree ;
-BEGIN
- IF DebugBuiltins
- THEN
- func := Mod2Gcc (Memset) ;
- call := BuildCall3 (location, func, GetPointerType (), ptr, bytevalue, nbytes) ;
- ELSE
- call := BuiltinMemSet (location, ptr, bytevalue, nbytes)
- END ;
- SetLastFunction (call) ;
- RETURN BuildFunctValue (location, call)
-END MaybeDebugBuiltinMemset ;
-
-
-(*
MakeCopyUse - make a copy of the unbounded array and alter all references
from the old unbounded array to the new unbounded array.
The parameter, param, contains a RECORD
@@ -1411,7 +1393,7 @@ BEGIN
Addr := GetAddressOfUnbounded (location, param) ;
NewArray := MaybeDebugBuiltinAlloca (location, tokenno, High) ;
- NewArray := MaybeDebugBuiltinMemcpy (location, tokenno, NewArray, Addr, High) ;
+ NewArray := MaybeDebugBuiltinMemcpy (location, NewArray, Addr, High) ;
(* now assign param.Addr := ADR(NewArray) *)
@@ -2784,7 +2766,6 @@ VAR
exprpos, becomespos,
virtpos : CARDINAL ;
op : QuadOperator ;
- desloc, exprloc : location_t ;
BEGIN
GetQuadOtok (quad, becomespos, op,
des, op2, expr, overflowChecking,
@@ -3106,9 +3087,8 @@ END PrepareCopyString ;
PROCEDURE checkArrayElements (des, expr: CARDINAL; virtpos, despos, exprpos: CARDINAL) : BOOLEAN ;
VAR
- e1, e3 : Tree ;
- t1, t3 : CARDINAL ;
- location: location_t ;
+ e1, e3: Tree ;
+ t1, t3: CARDINAL ;
BEGIN
t1 := GetType (des) ;
t3 := GetType (expr) ;
@@ -3304,7 +3284,7 @@ BEGIN
expr, des)
END ;
AddStatement (location,
- MaybeDebugBuiltinMemcpy (location, virtpos,
+ MaybeDebugBuiltinMemcpy (location,
BuildAddr (location, Mod2Gcc (des), FALSE),
BuildAddr (location, exprt, FALSE),
length))
@@ -3319,7 +3299,7 @@ BEGIN
THEN
checkDeclare (des) ;
AddStatement (location,
- MaybeDebugBuiltinMemcpy (location, virtpos,
+ MaybeDebugBuiltinMemcpy (location,
BuildAddr(location, Mod2Gcc (des), FALSE),
BuildAddr(location, Mod2Gcc (expr), FALSE),
BuildSize(location, Mod2Gcc (des), FALSE)))
@@ -3624,7 +3604,7 @@ END CodeBinary ;
NoWalkProcedure -
*)
-PROCEDURE NoWalkProcedure (param: CARDINAL) ;
+PROCEDURE NoWalkProcedure (param: CARDINAL <* unused *>) ;
BEGIN
END NoWalkProcedure ;
@@ -3688,12 +3668,12 @@ END CheckBinaryExpressionTypes ;
(*
CheckElementSetTypes - returns TRUE if all expression checks pass.
- If the expression check fails quad is removed,
- the walk procedure (des) is called and NoChange is
- set to FALSE.
+ If the expression check fails quad is removed,
+ the walk procedure (des) is called and NoChange is
+ set to FALSE.
*)
-PROCEDURE CheckElementSetTypes (quad: CARDINAL; p: WalkAction) : BOOLEAN ;
+PROCEDURE CheckElementSetTypes (quad: CARDINAL) : BOOLEAN ;
VAR
lefttype,
righttype,
@@ -6472,7 +6452,7 @@ BEGIN
(* does not work t := BuildCoerce(Mod2Gcc(op1), Mod2Gcc(op2), Mod2Gcc(op3)) *)
checkDeclare (op1) ;
AddStatement (location,
- MaybeDebugBuiltinMemcpy(location, CurrentQuadToken,
+ MaybeDebugBuiltinMemcpy(location,
BuildAddr(location, Mod2Gcc(op1), FALSE),
BuildAddr(location, Mod2Gcc(op3), FALSE),
FindSize(CurrentQuadToken, op2)))
@@ -7371,7 +7351,7 @@ BEGIN
IF IsConst(op1) AND IsConst(op2)
THEN
InternalError ('should not get to here (if we do we should consider calling FoldIfIn)')
- ELSIF CheckElementSetTypes (quad, NoWalkProcedure)
+ ELSIF CheckElementSetTypes (quad)
THEN
IF IsConst(op1)
THEN
@@ -7438,7 +7418,7 @@ BEGIN
IF IsConst(op1) AND IsConst(op2)
THEN
InternalError ('should not get to here (if we do we should consider calling FoldIfIn)')
- ELSIF CheckElementSetTypes (quad, NoWalkProcedure)
+ ELSIF CheckElementSetTypes (quad)
THEN
IF IsConst(op1)
THEN
@@ -7576,7 +7556,7 @@ BEGIN
op3, op1)
END ;
AddStatement (location,
- MaybeDebugBuiltinMemcpy (location, tokenno,
+ MaybeDebugBuiltinMemcpy (location,
Mod2Gcc (op1),
BuildAddr (location, newstr, FALSE),
length))
diff --git a/gcc/m2/gm2-compiler/M2Optimize.mod b/gcc/m2/gm2-compiler/M2Optimize.mod
index 1a653c0..29fda9a 100644
--- a/gcc/m2/gm2-compiler/M2Optimize.mod
+++ b/gcc/m2/gm2-compiler/M2Optimize.mod
@@ -38,7 +38,8 @@ FROM NumberIO IMPORT WriteCard ;
FROM M2Error IMPORT InternalError ;
FROM M2Batch IMPORT GetModuleNo ;
FROM M2Quiet IMPORT qprintf1 ;
-FROM M2Scope IMPORT ScopeBlock, InitScopeBlock, KillScopeBlock, ForeachScopeBlockDo ;
+FROM M2Scope IMPORT ScopeBlock, InitScopeBlock, KillScopeBlock,
+ ForeachScopeBlockDo2, ForeachScopeBlockDo3 ;
FROM SymbolTable IMPORT GetSymName,
GetProcedureQuads, GetModuleQuads,
@@ -336,13 +337,13 @@ BEGIN
IF IsProcedure(scope)
THEN
PutProcedureReachable(scope) ;
- ForeachScopeBlockDo(sb, KnownReachable)
+ ForeachScopeBlockDo2 (sb, KnownReachable)
ELSIF IsModuleWithinProcedure(scope)
THEN
- ForeachScopeBlockDo(sb, KnownReachable) ;
+ ForeachScopeBlockDo2 (sb, KnownReachable) ;
ForeachProcedureDo(scope, CheckExportedReachable)
ELSE
- ForeachScopeBlockDo(sb, KnownReachable) ;
+ ForeachScopeBlockDo2 (sb, KnownReachable) ;
ForeachProcedureDo(scope, CheckExportedReachable)
END ;
ForeachInnerModuleDo(scope, RemoveProcedures) ;
@@ -351,8 +352,7 @@ BEGIN
END RemoveProcedures ;
-PROCEDURE KnownReachable (Scope: CARDINAL;
- Start, End: CARDINAL) ;
+PROCEDURE KnownReachable (Start, End: CARDINAL) ;
VAR
Op : QuadOperator ;
Op1, Op2, Op3: CARDINAL ;
diff --git a/gcc/m2/gm2-compiler/M2SSA.mod b/gcc/m2/gm2-compiler/M2SSA.mod
index c984c62..e59428c 100644
--- a/gcc/m2/gm2-compiler/M2SSA.mod
+++ b/gcc/m2/gm2-compiler/M2SSA.mod
@@ -31,7 +31,7 @@ FROM NumberIO IMPORT WriteCard ;
FROM M2Error IMPORT InternalError ;
FROM M2Batch IMPORT GetModuleNo ;
FROM M2Quiet IMPORT qprintf1 ;
-FROM M2Scope IMPORT ScopeBlock, InitScopeBlock, KillScopeBlock, ForeachScopeBlockDo ;
+FROM M2Scope IMPORT ScopeBlock, InitScopeBlock, KillScopeBlock ;
FROM M2StackWord IMPORT StackOfWord, InitStackWord, KillStackWord, PushWord, PopWord, PeepWord ;
FROM M2Options IMPORT CompilerDebugging ;
FROM Lists IMPORT InitList, KillList, List, IncludeItemIntoList, IsItemInList ;
diff --git a/gcc/m2/gm2-compiler/M2Scope.def b/gcc/m2/gm2-compiler/M2Scope.def
index bdb063d..917229f 100644
--- a/gcc/m2/gm2-compiler/M2Scope.def
+++ b/gcc/m2/gm2-compiler/M2Scope.def
@@ -31,13 +31,10 @@ DEFINITION MODULE M2Scope ;
which were generated within a scope.
*)
-EXPORT QUALIFIED ScopeBlock, ScopeProcedure,
- InitScopeBlock, KillScopeBlock,
- ForeachScopeBlockDo ;
-
TYPE
ScopeBlock ;
- ScopeProcedure = PROCEDURE (CARDINAL, CARDINAL, CARDINAL) ;
+ ScopeProcedure2 = PROCEDURE (CARDINAL, CARDINAL) ;
+ ScopeProcedure3 = PROCEDURE (CARDINAL, CARDINAL, CARDINAL) ;
(*
@@ -55,11 +52,19 @@ PROCEDURE KillScopeBlock (VAR sb: ScopeBlock) ;
(*
- ForeachScopeBlockDo - calls a procedure, p, for each block of contigeous quadruples
- defining an outer scope, sb.
+ ForeachScopeBlockDo2 - calls a procedure p for each block of contigeous quadruples
+ defining an outer scope sb.
+*)
+
+PROCEDURE ForeachScopeBlockDo2 (sb: ScopeBlock; p: ScopeProcedure2) ;
+
+
+(*
+ ForeachScopeBlockDo3 - calls a procedure p for each block of contigeous quadruples
+ defining an outer scope sb.
*)
-PROCEDURE ForeachScopeBlockDo (sb: ScopeBlock; p: ScopeProcedure) ;
+PROCEDURE ForeachScopeBlockDo3 (sb: ScopeBlock; p: ScopeProcedure3) ;
END M2Scope.
diff --git a/gcc/m2/gm2-compiler/M2Scope.mod b/gcc/m2/gm2-compiler/M2Scope.mod
index 570bb04..f157ad4 100644
--- a/gcc/m2/gm2-compiler/M2Scope.mod
+++ b/gcc/m2/gm2-compiler/M2Scope.mod
@@ -410,10 +410,44 @@ END KillScopeBlock ;
(*
- ForeachScopeBlockDo -
+ ForeachScopeBlockDo2 - calls a procedure p for each block of contigeous quadruples
+ defining an outer scope sb.
*)
-PROCEDURE ForeachScopeBlockDo (sb: ScopeBlock; p: ScopeProcedure) ;
+PROCEDURE ForeachScopeBlockDo2 (sb: ScopeBlock; p: ScopeProcedure2) ;
+BEGIN
+ IF DisplayQuadruples
+ THEN
+ printf0 ("ForeachScopeBlockDo\n")
+ END ;
+ WHILE sb#NIL DO
+ WITH sb^ DO
+ IF DisplayQuadruples
+ THEN
+ DisplayScope (sb)
+ END ;
+ enter (sb) ;
+ IF (low # 0) AND (high # 0)
+ THEN
+ p (low, high)
+ END ;
+ leave (sb)
+ END ;
+ sb := sb^.next
+ END ;
+ IF DisplayQuadruples
+ THEN
+ printf0 ("end ForeachScopeBlockDo\n\n")
+ END ;
+END ForeachScopeBlockDo2 ;
+
+
+(*
+ ForeachScopeBlockDo3 - calls a procedure p for each block of contigeous quadruples
+ defining an outer scope sb.
+*)
+
+PROCEDURE ForeachScopeBlockDo3 (sb: ScopeBlock; p: ScopeProcedure3) ;
BEGIN
IF DisplayQuadruples
THEN
@@ -438,7 +472,7 @@ BEGIN
THEN
printf0 ("end ForeachScopeBlockDo\n\n")
END ;
-END ForeachScopeBlockDo ;
+END ForeachScopeBlockDo3 ;
(*