mirror of
https://github.com/vishapoberon/compiler.git
synced 2026-04-06 02:52:24 +00:00
ARRAY OF SYSTEM.BYTE now accepted for any value param with [1] sysflag
This commit is contained in:
parent
20943d67db
commit
e8ef46a4d9
1 changed files with 14 additions and 13 deletions
27
src/compiler/OPB.Mod
Normal file → Executable file
27
src/compiler/OPB.Mod
Normal file → Executable 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)
|
ELSE node := OPT.NewNode(OPT.Nvar); err(127)
|
||||||
END ;
|
END ;
|
||||||
node^.obj := obj; node^.typ := obj^.typ;
|
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
|
RETURN node
|
||||||
END NewLeaf;
|
END NewLeaf;
|
||||||
|
|
||||||
|
|
@ -849,17 +859,6 @@ MODULE OPB; (* RC 6.3.89 / 21.2.94 *) (* object model 17.1.93 *)
|
||||||
p, q: OPT.Struct;
|
p, q: OPT.Struct;
|
||||||
BEGIN
|
BEGIN
|
||||||
y := ynode^.typ; f := x^.form; g := y^.form;
|
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 ;
|
IF (ynode^.class = OPT.Ntype) OR (ynode^.class = OPT.Nproc) & (f # OPT.ProcTyp) THEN err(126) END ;
|
||||||
CASE f OF
|
CASE f OF
|
||||||
OPT.Undef,
|
OPT.Undef,
|
||||||
|
|
@ -1340,10 +1339,12 @@ MODULE OPB; (* RC 6.3.89 / 21.2.94 *) (* object model 17.1.93 *)
|
||||||
END StFct;
|
END StFct;
|
||||||
|
|
||||||
PROCEDURE DynArrParCheck(ftyp, atyp: OPT.Struct; fvarpar: BOOLEAN);
|
PROCEDURE DynArrParCheck(ftyp, atyp: OPT.Struct; fvarpar: BOOLEAN);
|
||||||
VAR f: INTEGER;
|
VAR f, sysflag: INTEGER;
|
||||||
BEGIN (* ftyp^.comp = OPT.DynArr *)
|
BEGIN (* ftyp^.comp = OPT.DynArr *)
|
||||||
|
sysflag := ftyp.sysflag;
|
||||||
f := atyp^.comp; ftyp := ftyp^.BaseTyp; atyp := atyp^.BaseTyp;
|
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 ~(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
|
IF OPM.verbose IN OPM.Options THEN err(-301) END
|
||||||
END
|
END
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue