From 886f20ad55e87dc33b0e0d002aa89e852b3ae321 Mon Sep 17 00:00:00 2001 From: "Michael D. Lowis" Date: Tue, 4 May 2021 16:49:38 -0400 Subject: [PATCH] restructured parser for readability --- cerise/oberon0/OSP.Mod | 38 +++++++++++++++++++++++++++++--------- 1 file changed, 29 insertions(+), 9 deletions(-) diff --git a/cerise/oberon0/OSP.Mod b/cerise/oberon0/OSP.Mod index 9f37943..5afc26c 100644 --- a/cerise/oberon0/OSP.Mod +++ b/cerise/oberon0/OSP.Mod @@ -594,7 +594,8 @@ MODULE OSP; (* NW 23.9.93 / 9,5.2017 OSPX*) PROCEDURE ProcedureDecl; CONST marksize = 4; - VAR proc, obj: OSG.Object; + VAR + proc, obj: OSG.Object; procid: OSS.Ident; nofpar: INTEGER; locblksize, parblksize: LONGINT; @@ -602,22 +603,40 @@ MODULE OSP; (* NW 23.9.93 / 9,5.2017 OSPX*) PROCEDURE FPSection(VAR adr: LONGINT; VAR nofpar: INTEGER); VAR obj, first: OSG.Object; tp: OSG.Type; parsize: LONGINT; BEGIN - IF sym = OSS.var THEN OSS.Get(sym); IdentList(OSG.Par, first) - ELSE IdentList(OSG.Var, first) + IF sym = OSS.var THEN + OSS.Get(sym); + IdentList(OSG.Par, first) + ELSE + IdentList(OSG.Var, first) END ; IF sym = OSS.ident THEN - find(obj); OSS.Get(sym); - IF obj.class = OSG.Typ THEN tp := obj.type ELSE OSS.Mark("type?"); tp := OSG.intType END - ELSE OSS.Mark("ident?"); tp := OSG.intType + find(obj); + OSS.Get(sym); + IF obj.class = OSG.Typ THEN + tp := obj.type + ELSE + OSS.Mark("type?"); + tp := OSG.intType + END + ELSE + OSS.Mark("ident?"); + tp := OSG.intType END ; IF first.class = OSG.Var THEN parsize := tp.size; - IF tp.form >= OSG.Array THEN OSS.Mark("no struct params") END ; - ELSE parsize := WordSize + IF tp.form >= OSG.Array THEN + OSS.Mark("no struct params") + END ; + ELSE + parsize := WordSize END ; obj := first; WHILE obj # NIL DO - INC(nofpar); obj.type := tp; obj.lev := level; obj.val := adr; adr := adr + parsize; + INC(nofpar); + obj.type := tp; + obj.lev := level; + obj.val := adr; + adr := adr + parsize; obj := obj.next END END FPSection; @@ -673,6 +692,7 @@ MODULE OSP; (* NW 23.9.93 / 9,5.2017 OSPX*) ProcedureDecl; Check(OSS.semicolon, "; expected") END ; + proc.val := OSG.pc * 4; OSG.Enter(parblksize, locblksize, proc.comd); IF sym = OSS.begin THEN -- 2.49.0