Accept all SET types in INCL.

This commit is contained in:
David Brown 2016-09-30 18:42:59 +01:00
parent 1fa182c7ce
commit 2e02f9204c
18 changed files with 22 additions and 64 deletions

View file

@ -1879,7 +1879,7 @@ void OPB_StPar0 (OPT_Node *par0, int16 fctno)
case 15: case 16:
if (OPB_NotVar(x)) {
OPB_err(112);
} else if (x->typ != OPT_settyp) {
} else if (x->typ->form != 7) {
OPB_err(111);
x->typ = OPT_settyp;
} else if (x->readonly) {
@ -2044,7 +2044,7 @@ void OPB_StPar1 (OPT_Node *par0, OPT_Node x, int8 fctno)
if (x->class == 8 || x->class == 9) {
OPB_err(126);
} else if (f == 4) {
if ((x->class == 7 && (0 > x->conval->intval || x->conval->intval > (int64)OPM_MaxSet))) {
if ((x->class == 7 && (0 > x->conval->intval || x->conval->intval >= (int64)__ASHL(p->typ->size, 3)))) {
OPB_err(202);
}
p = NewOp__54(19, fctno, p, x);

View file

@ -82,7 +82,6 @@ export int64 OPM_SymRInt64 (void);
export void OPM_SymRLReal (LONGREAL *lr);
export void OPM_SymRReal (REAL *r);
export void OPM_SymRSet (uint32 *s);
export void OPM_SymRSet64 (uint64 *s);
export void OPM_SymWCh (CHAR ch);
export void OPM_SymWInt (int64 i);
export void OPM_SymWLReal (LONGREAL lr);
@ -759,11 +758,6 @@ int64 OPM_SymRInt64 (void)
return _o_result;
}
void OPM_SymRSet64 (uint64 *s)
{
Files_ReadNum(&OPM_oldSF, Files_Rider__typ, (void*)&*s, 8);
}
void OPM_SymRSet (uint32 *s)
{
Files_ReadNum(&OPM_oldSF, Files_Rider__typ, (void*)&*s, 4);

View file

@ -50,7 +50,6 @@ import int64 OPM_SymRInt64 (void);
import void OPM_SymRLReal (LONGREAL *lr);
import void OPM_SymRReal (REAL *r);
import void OPM_SymRSet (uint32 *s);
import void OPM_SymRSet64 (uint64 *s);
import void OPM_SymWCh (CHAR ch);
import void OPM_SymWInt (int64 i);
import void OPM_SymWLReal (LONGREAL lr);

View file

@ -1879,7 +1879,7 @@ void OPB_StPar0 (OPT_Node *par0, int16 fctno)
case 15: case 16:
if (OPB_NotVar(x)) {
OPB_err(112);
} else if (x->typ != OPT_settyp) {
} else if (x->typ->form != 7) {
OPB_err(111);
x->typ = OPT_settyp;
} else if (x->readonly) {
@ -2044,7 +2044,7 @@ void OPB_StPar1 (OPT_Node *par0, OPT_Node x, int8 fctno)
if (x->class == 8 || x->class == 9) {
OPB_err(126);
} else if (f == 4) {
if ((x->class == 7 && (0 > x->conval->intval || x->conval->intval > (int64)OPM_MaxSet))) {
if ((x->class == 7 && (0 > x->conval->intval || x->conval->intval >= (int64)__ASHL(p->typ->size, 3)))) {
OPB_err(202);
}
p = NewOp__54(19, fctno, p, x);

View file

@ -82,7 +82,6 @@ export int64 OPM_SymRInt64 (void);
export void OPM_SymRLReal (LONGREAL *lr);
export void OPM_SymRReal (REAL *r);
export void OPM_SymRSet (uint32 *s);
export void OPM_SymRSet64 (uint64 *s);
export void OPM_SymWCh (CHAR ch);
export void OPM_SymWInt (int64 i);
export void OPM_SymWLReal (LONGREAL lr);
@ -759,11 +758,6 @@ int64 OPM_SymRInt64 (void)
return _o_result;
}
void OPM_SymRSet64 (uint64 *s)
{
Files_ReadNum(&OPM_oldSF, Files_Rider__typ, (void*)&*s, 8);
}
void OPM_SymRSet (uint32 *s)
{
Files_ReadNum(&OPM_oldSF, Files_Rider__typ, (void*)&*s, 4);

View file

@ -50,7 +50,6 @@ import int64 OPM_SymRInt64 (void);
import void OPM_SymRLReal (LONGREAL *lr);
import void OPM_SymRReal (REAL *r);
import void OPM_SymRSet (uint32 *s);
import void OPM_SymRSet64 (uint64 *s);
import void OPM_SymWCh (CHAR ch);
import void OPM_SymWInt (int64 i);
import void OPM_SymWLReal (LONGREAL lr);

View file

@ -1879,7 +1879,7 @@ void OPB_StPar0 (OPT_Node *par0, int16 fctno)
case 15: case 16:
if (OPB_NotVar(x)) {
OPB_err(112);
} else if (x->typ != OPT_settyp) {
} else if (x->typ->form != 7) {
OPB_err(111);
x->typ = OPT_settyp;
} else if (x->readonly) {
@ -2044,7 +2044,7 @@ void OPB_StPar1 (OPT_Node *par0, OPT_Node x, int8 fctno)
if (x->class == 8 || x->class == 9) {
OPB_err(126);
} else if (f == 4) {
if ((x->class == 7 && (0 > x->conval->intval || x->conval->intval > (int64)OPM_MaxSet))) {
if ((x->class == 7 && (0 > x->conval->intval || x->conval->intval >= (int64)__ASHL(p->typ->size, 3)))) {
OPB_err(202);
}
p = NewOp__54(19, fctno, p, x);

View file

@ -82,7 +82,6 @@ export int64 OPM_SymRInt64 (void);
export void OPM_SymRLReal (LONGREAL *lr);
export void OPM_SymRReal (REAL *r);
export void OPM_SymRSet (uint32 *s);
export void OPM_SymRSet64 (uint64 *s);
export void OPM_SymWCh (CHAR ch);
export void OPM_SymWInt (int64 i);
export void OPM_SymWLReal (LONGREAL lr);
@ -759,11 +758,6 @@ int64 OPM_SymRInt64 (void)
return _o_result;
}
void OPM_SymRSet64 (uint64 *s)
{
Files_ReadNum(&OPM_oldSF, Files_Rider__typ, (void*)&*s, 8);
}
void OPM_SymRSet (uint32 *s)
{
Files_ReadNum(&OPM_oldSF, Files_Rider__typ, (void*)&*s, 4);

View file

@ -50,7 +50,6 @@ import int64 OPM_SymRInt64 (void);
import void OPM_SymRLReal (LONGREAL *lr);
import void OPM_SymRReal (REAL *r);
import void OPM_SymRSet (uint32 *s);
import void OPM_SymRSet64 (uint64 *s);
import void OPM_SymWCh (CHAR ch);
import void OPM_SymWInt (int64 i);
import void OPM_SymWLReal (LONGREAL lr);

View file

@ -1879,7 +1879,7 @@ void OPB_StPar0 (OPT_Node *par0, int16 fctno)
case 15: case 16:
if (OPB_NotVar(x)) {
OPB_err(112);
} else if (x->typ != OPT_settyp) {
} else if (x->typ->form != 7) {
OPB_err(111);
x->typ = OPT_settyp;
} else if (x->readonly) {
@ -2044,7 +2044,7 @@ void OPB_StPar1 (OPT_Node *par0, OPT_Node x, int8 fctno)
if (x->class == 8 || x->class == 9) {
OPB_err(126);
} else if (f == 4) {
if ((x->class == 7 && (0 > x->conval->intval || x->conval->intval > (int64)OPM_MaxSet))) {
if ((x->class == 7 && (0 > x->conval->intval || x->conval->intval >= (int64)__ASHL(p->typ->size, 3)))) {
OPB_err(202);
}
p = NewOp__54(19, fctno, p, x);

View file

@ -82,7 +82,6 @@ export int64 OPM_SymRInt64 (void);
export void OPM_SymRLReal (LONGREAL *lr);
export void OPM_SymRReal (REAL *r);
export void OPM_SymRSet (uint32 *s);
export void OPM_SymRSet64 (uint64 *s);
export void OPM_SymWCh (CHAR ch);
export void OPM_SymWInt (int64 i);
export void OPM_SymWLReal (LONGREAL lr);
@ -759,11 +758,6 @@ int64 OPM_SymRInt64 (void)
return _o_result;
}
void OPM_SymRSet64 (uint64 *s)
{
Files_ReadNum(&OPM_oldSF, Files_Rider__typ, (void*)&*s, 8);
}
void OPM_SymRSet (uint32 *s)
{
Files_ReadNum(&OPM_oldSF, Files_Rider__typ, (void*)&*s, 4);

View file

@ -50,7 +50,6 @@ import int64 OPM_SymRInt64 (void);
import void OPM_SymRLReal (LONGREAL *lr);
import void OPM_SymRReal (REAL *r);
import void OPM_SymRSet (uint32 *s);
import void OPM_SymRSet64 (uint64 *s);
import void OPM_SymWCh (CHAR ch);
import void OPM_SymWInt (int64 i);
import void OPM_SymWLReal (LONGREAL lr);

View file

@ -1879,7 +1879,7 @@ void OPB_StPar0 (OPT_Node *par0, int16 fctno)
case 15: case 16:
if (OPB_NotVar(x)) {
OPB_err(112);
} else if (x->typ != OPT_settyp) {
} else if (x->typ->form != 7) {
OPB_err(111);
x->typ = OPT_settyp;
} else if (x->readonly) {
@ -2044,7 +2044,7 @@ void OPB_StPar1 (OPT_Node *par0, OPT_Node x, int8 fctno)
if (x->class == 8 || x->class == 9) {
OPB_err(126);
} else if (f == 4) {
if ((x->class == 7 && (0 > x->conval->intval || x->conval->intval > (int64)OPM_MaxSet))) {
if ((x->class == 7 && (0 > x->conval->intval || x->conval->intval >= (int64)__ASHL(p->typ->size, 3)))) {
OPB_err(202);
}
p = NewOp__54(19, fctno, p, x);

View file

@ -82,7 +82,6 @@ export int64 OPM_SymRInt64 (void);
export void OPM_SymRLReal (LONGREAL *lr);
export void OPM_SymRReal (REAL *r);
export void OPM_SymRSet (uint32 *s);
export void OPM_SymRSet64 (uint64 *s);
export void OPM_SymWCh (CHAR ch);
export void OPM_SymWInt (int64 i);
export void OPM_SymWLReal (LONGREAL lr);
@ -759,11 +758,6 @@ int64 OPM_SymRInt64 (void)
return _o_result;
}
void OPM_SymRSet64 (uint64 *s)
{
Files_ReadNum(&OPM_oldSF, Files_Rider__typ, (void*)&*s, 8);
}
void OPM_SymRSet (uint32 *s)
{
Files_ReadNum(&OPM_oldSF, Files_Rider__typ, (void*)&*s, 4);

View file

@ -50,7 +50,6 @@ import int64 OPM_SymRInt64 (void);
import void OPM_SymRLReal (LONGREAL *lr);
import void OPM_SymRReal (REAL *r);
import void OPM_SymRSet (uint32 *s);
import void OPM_SymRSet64 (uint64 *s);
import void OPM_SymWCh (CHAR ch);
import void OPM_SymWInt (int64 i);
import void OPM_SymWLReal (LONGREAL lr);

View file

@ -811,11 +811,11 @@ MODULE OPB; (* RC 6.3.89 / 21.2.94 *) (* object model 17.1.93 *)
ELSE err(201); x^.conval^.setval := {l..k}
END ;
x^.obj := NIL
ELSE BindNodes(OPT.Nupto, OPT.settyp, x, y)
ELSE BindNodes(OPT.Nupto, OPT.settyp, x, y) (* todo choose appropriate set type ? *)
END
ELSE err(93)
END ;
x^.typ := OPT.settyp
x^.typ := OPT.settyp (* todo choose appropriate set type ? *)
END SetRange;
PROCEDURE SetElem*(VAR x: OPT.Node);
@ -829,9 +829,9 @@ MODULE OPB; (* RC 6.3.89 / 21.2.94 *) (* object model 17.1.93 *)
ELSE err(202)
END ;
x^.obj := NIL
ELSE Convert(x, OPT.settyp)
ELSE Convert(x, OPT.settyp) (* todo choose appropriate set type ? *)
END ;
x^.typ := OPT.settyp
x^.typ := OPT.settyp (* todo choose appropriate set type ? *)
END SetElem;
PROCEDURE CheckAssign(x: OPT.Struct; ynode: OPT.Node); (* x := y *)
@ -1027,7 +1027,7 @@ MODULE OPB; (* RC 6.3.89 / 21.2.94 *) (* object model 17.1.93 *)
|OPT.inclfn,
OPT.exclfn: (*INCL, EXCL*)
IF NotVar(x) THEN err(112)
ELSIF x^.typ # OPT.settyp THEN err(111); x^.typ := OPT.settyp
ELSIF x.typ.form # OPT.Set THEN err(111); x^.typ := OPT.settyp
ELSIF x^.readonly THEN err(76)
END
|OPT.lenfn: (*LEN*)
@ -1124,8 +1124,8 @@ MODULE OPB; (* RC 6.3.89 / 21.2.94 *) (* object model 17.1.93 *)
OPT.exclfn: (*INCL, EXCL*)
IF (x^.class = OPT.Ntype) OR (x^.class = OPT.Nproc) THEN err(126)
ELSIF f = OPT.Int THEN
IF (x^.class = OPT.Nconst) & ((0 > x^.conval^.intval) OR (x^.conval^.intval > OPM.MaxSet)) THEN err(202)
END ;
IF (x^.class = OPT.Nconst) & ((0 > x^.conval^.intval) OR (x^.conval^.intval >= p.typ.size*8)) THEN err(202)
END;
p := NewOp(OPT.Nassign, fctno, p, x)
ELSE err(111)
END ;

View file

@ -552,7 +552,7 @@ MODULE OPM; (* RC 6.3.89 / 28.6.89, J.Templ 10.7.89 / 22.7.96 *)
END FPrint;
PROCEDURE FPrintSet*(VAR fp: LONGINT; set: SET);
PROCEDURE FPrintSet*(VAR fp: LONGINT; set: SET); (*SYSTEM.SET64);*)
BEGIN FPrint(fp, SYSTEM.VAL(LONGINT, set))
END FPrintSet;
@ -603,12 +603,7 @@ MODULE OPM; (* RC 6.3.89 / 28.6.89, J.Templ 10.7.89 / 22.7.96 *)
BEGIN Files.ReadNum(oldSF, k); RETURN k
END SymRInt64;
(* todo - combine RSet64 and RSet *)
PROCEDURE SymRSet64*(VAR s: SYSTEM.SET64);
BEGIN Files.ReadNum(oldSF, s)
END SymRSet64;
PROCEDURE SymRSet*(VAR s: SET);
PROCEDURE SymRSet*(VAR s: SET); (*SYSTEM.SET64);*)
BEGIN Files.ReadNum(oldSF, s)
END SymRSet;
@ -653,7 +648,7 @@ MODULE OPM; (* RC 6.3.89 / 28.6.89, J.Templ 10.7.89 / 22.7.96 *)
BEGIN Files.WriteNum(newSF, i)
END SymWInt;
(* todo
(*
PROCEDURE SymWSet*(s: SYSTEM.SET64);
BEGIN Files.WriteNum(newSF, SYSTEM.VAL(SYSTEM.INT64, s))
END SymWSet;

View file

@ -15,9 +15,7 @@ TYPE
ext*: ConstExt; (* string or code for code proc *)
intval*: SYSTEM.INT64; (* constant value or adr, proc par size, text position or least case label *)
intval2*: LONGINT; (* string length, proc var size or larger case label *)
(* todo
setval*: SYSTEM.SET64; (* constant value, procedure body present or "ELSE" present in case *)
*)
(*setval*: SYSTEM.SET64;*) (* constant value, procedure body present or "ELSE" present in case *)
setval*: SET; (* constant value, procedure body present or "ELSE" present in case *)
realval*: LONGREAL (* real or longreal constant value *)
END;