diff --git a/bootstrap/unix-44/OPB.c b/bootstrap/unix-44/OPB.c index d099cad7..0b88b1ea 100644 --- a/bootstrap/unix-44/OPB.c +++ b/bootstrap/unix-44/OPB.c @@ -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); diff --git a/bootstrap/unix-44/OPM.c b/bootstrap/unix-44/OPM.c index 1457a09c..1ef195b4 100644 --- a/bootstrap/unix-44/OPM.c +++ b/bootstrap/unix-44/OPM.c @@ -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); diff --git a/bootstrap/unix-44/OPM.h b/bootstrap/unix-44/OPM.h index 12db4754..dd3c0c27 100644 --- a/bootstrap/unix-44/OPM.h +++ b/bootstrap/unix-44/OPM.h @@ -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); diff --git a/bootstrap/unix-48/OPB.c b/bootstrap/unix-48/OPB.c index d099cad7..0b88b1ea 100644 --- a/bootstrap/unix-48/OPB.c +++ b/bootstrap/unix-48/OPB.c @@ -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); diff --git a/bootstrap/unix-48/OPM.c b/bootstrap/unix-48/OPM.c index 1457a09c..1ef195b4 100644 --- a/bootstrap/unix-48/OPM.c +++ b/bootstrap/unix-48/OPM.c @@ -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); diff --git a/bootstrap/unix-48/OPM.h b/bootstrap/unix-48/OPM.h index 12db4754..dd3c0c27 100644 --- a/bootstrap/unix-48/OPM.h +++ b/bootstrap/unix-48/OPM.h @@ -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); diff --git a/bootstrap/unix-88/OPB.c b/bootstrap/unix-88/OPB.c index d099cad7..0b88b1ea 100644 --- a/bootstrap/unix-88/OPB.c +++ b/bootstrap/unix-88/OPB.c @@ -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); diff --git a/bootstrap/unix-88/OPM.c b/bootstrap/unix-88/OPM.c index 0c2ad2b1..41d574f6 100644 --- a/bootstrap/unix-88/OPM.c +++ b/bootstrap/unix-88/OPM.c @@ -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); diff --git a/bootstrap/unix-88/OPM.h b/bootstrap/unix-88/OPM.h index 12db4754..dd3c0c27 100644 --- a/bootstrap/unix-88/OPM.h +++ b/bootstrap/unix-88/OPM.h @@ -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); diff --git a/bootstrap/windows-48/OPB.c b/bootstrap/windows-48/OPB.c index d099cad7..0b88b1ea 100644 --- a/bootstrap/windows-48/OPB.c +++ b/bootstrap/windows-48/OPB.c @@ -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); diff --git a/bootstrap/windows-48/OPM.c b/bootstrap/windows-48/OPM.c index 1457a09c..1ef195b4 100644 --- a/bootstrap/windows-48/OPM.c +++ b/bootstrap/windows-48/OPM.c @@ -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); diff --git a/bootstrap/windows-48/OPM.h b/bootstrap/windows-48/OPM.h index 12db4754..dd3c0c27 100644 --- a/bootstrap/windows-48/OPM.h +++ b/bootstrap/windows-48/OPM.h @@ -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); diff --git a/bootstrap/windows-88/OPB.c b/bootstrap/windows-88/OPB.c index d099cad7..0b88b1ea 100644 --- a/bootstrap/windows-88/OPB.c +++ b/bootstrap/windows-88/OPB.c @@ -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); diff --git a/bootstrap/windows-88/OPM.c b/bootstrap/windows-88/OPM.c index 0c2ad2b1..41d574f6 100644 --- a/bootstrap/windows-88/OPM.c +++ b/bootstrap/windows-88/OPM.c @@ -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); diff --git a/bootstrap/windows-88/OPM.h b/bootstrap/windows-88/OPM.h index 12db4754..dd3c0c27 100644 --- a/bootstrap/windows-88/OPM.h +++ b/bootstrap/windows-88/OPM.h @@ -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); diff --git a/src/compiler/OPB.Mod b/src/compiler/OPB.Mod index b29f6b49..c1a317d2 100644 --- a/src/compiler/OPB.Mod +++ b/src/compiler/OPB.Mod @@ -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 ; diff --git a/src/compiler/OPM.Mod b/src/compiler/OPM.Mod index a2beb450..a18953a7 100644 --- a/src/compiler/OPM.Mod +++ b/src/compiler/OPM.Mod @@ -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; diff --git a/src/compiler/OPT.Mod b/src/compiler/OPT.Mod index e55c7d3c..a3960ac2 100644 --- a/src/compiler/OPT.Mod +++ b/src/compiler/OPT.Mod @@ -15,10 +15,8 @@ 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*: SET; (* 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;