ARRAY OF SYSTEM.BYTE now accepted for any value param with [1] sysflag

This commit is contained in:
Dave Brown 2019-11-11 13:01:48 +00:00
parent 20943d67db
commit e8ef46a4d9

27
src/compiler/OPB.Mod Normal file → Executable file
View file

@ -34,6 +34,16 @@ MODULE OPB; (* RC 6.3.89 / 21.2.94 *) (* object model 17.1.93 *)
ELSE node := OPT.NewNode(OPT.Nvar); err(127)
END ;
node^.obj := obj; node^.typ := obj^.typ;
(* Array and record value parameters with copy disabled are readonly *)
(*
IF (obj.mode = OPT.Var)
& (obj.typ.comp IN {OPT.Array, OPT.DynArr})
& (obj.typ.sysflag # 0) THEN
node.readonly := TRUE;
END ;
*)
RETURN node
END NewLeaf;
@ -849,17 +859,6 @@ MODULE OPB; (* RC 6.3.89 / 21.2.94 *) (* object model 17.1.93 *)
p, q: OPT.Struct;
BEGIN
y := ynode^.typ; f := x^.form; g := y^.form;
(*
IF OPM.verbose IN OPM.Options THEN
OPM.LogWLn; OPM.LogWStr("PROCEDURE CheckAssign"); OPM.LogWLn;
END;
IF OPM.verbose IN OPM.Options THEN
OPM.LogWStr("y.form = "); OPM.LogWNum(y.form, 0); OPM.LogWLn;
OPM.LogWStr("f = "); OPM.LogWNum(f, 0); OPM.LogWLn;
OPM.LogWStr("g = "); OPM.LogWNum(g, 0); OPM.LogWLn;
OPM.LogWStr("ynode.typ.syze = "); OPM.LogWNum(ynode.typ.size, 0); OPM.LogWLn;
END;
*)
IF (ynode^.class = OPT.Ntype) OR (ynode^.class = OPT.Nproc) & (f # OPT.ProcTyp) THEN err(126) END ;
CASE f OF
OPT.Undef,
@ -1340,10 +1339,12 @@ MODULE OPB; (* RC 6.3.89 / 21.2.94 *) (* object model 17.1.93 *)
END StFct;
PROCEDURE DynArrParCheck(ftyp, atyp: OPT.Struct; fvarpar: BOOLEAN);
VAR f: INTEGER;
VAR f, sysflag: INTEGER;
BEGIN (* ftyp^.comp = OPT.DynArr *)
sysflag := ftyp.sysflag;
f := atyp^.comp; ftyp := ftyp^.BaseTyp; atyp := atyp^.BaseTyp;
IF fvarpar & (ftyp = OPT.bytetyp) THEN (* ok, but ... *)
IF (fvarpar OR (sysflag # 0)) & (ftyp = OPT.bytetyp) THEN (* ok, but ... *)
(* Allow any parameter type, but give warning in verbose mode *)
IF ~(f IN {OPT.Array, OPT.DynArr}) OR ~((atyp.form IN {OPT.Byte..OPT.Char, OPT.Int}) & (atyp.size = 1)) THEN
IF OPM.verbose IN OPM.Options THEN err(-301) END
END