mirror of
https://github.com/vishapoberon/compiler.git
synced 2026-04-05 23:22:25 +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)
|
||||
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
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue