[Search for users]
[Overall Top Noters]
[List of all Conferences]
[Download this site]
Title: | DEC Pascal Bug Reports |
Notice: | New kit announcement in TURRIS::Pascal conference |
Moderator: | TLE::GARRISON |
|
Created: | Wed Sep 09 1992 |
Last Modified: | Fri May 30 1997 |
Last Successful Update: | Fri Jun 06 1997 |
Number of topics: | 838 |
Total number of notes: | 3659 |
831.0. "PASCAL-E-VARCOMFRML - PASCAL-E-NCATOA" by COPCLU::JORN (New European Champions...) Thu Mar 13 1997 09:34
Hi there,
The following testprogram has an error similar to the one mentioned in note
#23 in this conference, however this is compiled on OpenVMS AXP running V6.2.
This compiles fine on VAX running V6.1 and Pascal V5.1, but not on AXP running
Pascal V5.5. The compiler error is:
STR$RIGHT(STR_ARRAY[I],STRENG,START);
.........................^
%PASCAL-E-VARCOMFRML, Variable is not compatible with formal parameter DESTINATI
ON_STRING
-PASCAL-E-NCATOA, - cannot reformat content of actual's CLASS_NCA descript
or as CLASS_A
at line number 45 in file DKA200:[JORN]DMU.PAS;1
STR$LEFT(STR_ARRAY[I],STR_ARRAY[I],SLUT);
..........................^
%PASCAL-E-VARCOMFRML, Variable is not compatible with formal parameter DESTINATI
ON_STRING
-PASCAL-E-NCATOA, - cannot reformat content of actual's CLASS_NCA descript
or as CLASS_A
at line number 58 in file DKA200:[JORN]DMU.PAS;1
STR$LEFT(STR_ARRAY[I],STR_ARRAY[I],SLUT);
..........................^
%PASCAL-E-VARCOMFRML, Variable is not compatible with formal parameter DESTINATI
ON_STRING
-PASCAL-E-NCATOA, - cannot reformat content of actual's CLASS_NCA descript
or as CLASS_A
at line number 64 in file DKA200:[JORN]DMU.PAS;1
%PASCAL-E-ENDDIAGS, PASCAL completed with 6 diagnostics
Any ideas for a workaround or fix for this ??
Cheers,
Jorn.
--------------------------------------------------------------------
Testprogram follows:
[inherit ('SYS$LIBRARY:PASCAL$STR_ROUTINES')]module strenge;
VAR LAENGDE : INTEGER;
I : INTEGER;
LANG,
START : INTEGER;
SLUT : INTEGER;
PROCEDURE LAENGDEN(INDTEKST:PACKED ARRAY[I..U:INTEGER] OF CHAR;
VAR LANG,ST:INTEGER);EXTERNAL;
[GLOBAL] PROCEDURE ADDERE_STRENGE(
STR_ARRAY:ARRAY[M..S:INTEGER] OF PACKED ARRAY[M1..S2:INTEGER] OF
CHAR;
VAR NYSTRENG:PACKED ARRAY[M3..S3:INTEGER] OF CHAR);
BEGIN
LAENGDE:=1;
NYSTRENG:=' ';
FOR I := 1 TO S DO
BEGIN
LAENGDEN(STR_ARRAY[I],LANG,START);
STR$REPLACE(NYSTRENG,NYSTRENG,LAENGDE,(LAENGDE+LANG),
(SUBSTR(STR_ARRAY[I],START,LANG)));
LAENGDE:=LAENGDE+LANG+1;
END;
END;
[GLOBAL] PROCEDURE DELE_STRENG(
VAR STR_ARRAY:ARRAY[M..S:INTEGER] OF PACKED ARRAY[M1..S2:INTEGER] OF
CHAR;
STRENG:PACKED ARRAY[M3..S3:INTEGER] OF CHAR);
VAR
I,J : INTEGER;
ST : INTEGER;
BEGIN
LAENGDEN(STRENG,LANG,START);
STRENG:=SUBSTR(STRENG,START,LANG);
START:=1;
FOR I := 1 TO S DO
BEGIN
STR$RIGHT(STR_ARRAY[I],STRENG,START);
LAENGDEN(STR_ARRAY[I],LANG,ST);
STR_ARRAY[I]:=SUBSTR(STR_ARRAY[I],ST,LANG);
IF ST > 1 THEN START:=START+(ST-1);
J:=LANG;
IF LANG = S2 THEN
BEGIN
SLUT:=0;
REPEAT
IF STR_ARRAY[1,J]=' ' THEN
SLUT:=J;
J:=J-1;
UNTIL SLUT > 0;
STR$LEFT(STR_ARRAY[I],STR_ARRAY[I],SLUT);
START:=START+SLUT;
END
ELSE
BEGIN
SLUT:=J;
STR$LEFT(STR_ARRAY[I],STR_ARRAY[I],SLUT);
START:=START+SLUT;
END;
END;
END;
END.
T.R | Title | User | Personal Name | Date | Lines |
---|
831.1 | | TLE::REAGAN | All of this chaos makes perfect sense | Thu Mar 13 1997 14:46 | 52 |
| This is due to the face that on the VAX, we use CLASS_A descriptors
for the ARRAY [M..S:INTEGER] OF PACKED ARRAY [M1..S2:INTEGER] OF CHAR
parameter. On the VAX, with only byte-padding, there are no padding
holes between each slice of the 1st dimension. On Alpha, with
natural alignment, there could be padding holes (not in this case
since the ultimate array component is CHAR, but imagine if it was
INTEGER).
The compiler's ability to map between CLASS_NCA descriptors and
the CLASS_S descriptors for STR$RIGHT, et al. is insufficient.
The compiler should be able to deal with such a concept in this
case since you can describe the slice'd CLASS_NCA array with a
CLASS_S attribute.
As a workaround, you can put explicit %STDESCR foreign mechanism
speficiers in the code. I did:
(hiyall)$ diff note831.pas
************
File HIYALL$:[REAGAN]NOTE831.PAS;3
45 STR$RIGHT(%STDESCR STR_ARRAY[I],STRENG,START);
46 LAENGDEN(STR_ARRAY[I],LANG,ST);
******
File HIYALL$:[REAGAN]NOTE831.PAS;2
45 STR$RIGHT(STR_ARRAY[I],STRENG,START);
46 LAENGDEN(STR_ARRAY[I],LANG,ST);
************
************
File HIYALL$:[REAGAN]NOTE831.PAS;3
58 STR$LEFT(%STDESCR STR_ARRAY[I],STR_ARRAY[I],SLUT);
59 START:=START+SLUT;
******
File HIYALL$:[REAGAN]NOTE831.PAS;2
58 STR$LEFT(STR_ARRAY[I],STR_ARRAY[I],SLUT);
59 START:=START+SLUT;
************
************
File HIYALL$:[REAGAN]NOTE831.PAS;3
64 STR$LEFT(%STDESCR STR_ARRAY[I],STR_ARRAY[I],SLUT);
65 START:=START+SLUT;
******
File HIYALL$:[REAGAN]NOTE831.PAS;2
64 STR$LEFT(STR_ARRAY[I],STR_ARRAY[I],SLUT);
65 START:=START+SLUT;
************
and the code then compiled just fine. I can't think of any workaround
that doesn't require code changes.
-John
|
831.2 | Thanx | COPCLU::JORN | New European Champions... | Fri Mar 14 1997 09:56 | 7 |
| John,
Thanks for having a look at it, explanation seems reasonable. I will
forward the information to the customer.
Jorn.
|
831.3 | | TLE::REAGAN | All of this chaos makes perfect sense | Thu May 29 1997 15:10 | 4 |
| OK, I've fixed the compiler so the program in .0 works as expected
on OpenVMS Alpha just like it does on OpenVMS VAX.
-John
|