news@planck.uucp (Usenet News) (07/27/90)
In my zeal to limit my example and the size of the posting concerning implict array subtype conversion, I inadvertently changed the nature of my problem slightly. I have defined a dynamic length string as follows: type STRING_RECORD (Len : NATURAL) is record S : Standard.STRING(1..Len); end record; type STRING is access STRING_RECORD; Then, I declare some variables: A : Standard.STRING(7..7); B : Standard.STRING(1..1); C : STRING; The following is accepted by the compiler (Verdix Sun 4 Self, version 6.0.2(g)) because of implicit array subtype conversion: A := "X"; B := A; However, the following is not. Why? I don't see the difference in the assignment of the string because both B and C.S are constrained. C := new STRING_RECORD'(Len => A'length, S => A); -- Terry J. Westley Arvin/Calspan Advanced Technology Center P.O. Box 400, Buffalo, NY 14225 acsu.buffalo.edu!planck!hercules!westley
eachus@linus.mitre.org (Robert I. Eachus) (07/31/90)
In article <1990Jul27.135108.11518@planck.uucp> acsu.buffalo.edu!planck!hercules!westley asks: > However, the following is not. Why? I don't see the difference in the > assignment of the string because both B and C.S are constrained. This is a language bug, not a compiler bug... Sliding occurs on assignment, but not in aggregate component matching. One of the "utility" functions I keep around for when this occurs allows me to say: C := new STRING_RECORD'(Len => A'length, S => Slide(A)); where slide is defined as: function Slide (S: in String; To: in Natural := 1) return String is Temp: String(To..To + S'LENGTH - 1) := S; begin return Temp; end Slide; silly, but that's the way the language currently works. Complete question, included for completeness: In my zeal to limit my example and the size of the posting concerning implict array subtype conversion, I inadvertently changed the nature of my problem slightly. I have defined a dynamic length string as follows: type STRING_RECORD (Len : NATURAL) is record S : Standard.STRING(1..Len); end record; type STRING is access STRING_RECORD; Then, I declare some variables: A : Standard.STRING(7..7); B : Standard.STRING(1..1); C : STRING; The following is accepted by the compiler (Verdix Sun 4 Self, version 6.0.2(g)) because of implicit array subtype conversion: A := "X"; B := A; However, the following is not. Why? I don't see the difference in the assignment of the string because both B and C.S are constrained. C := new STRING_RECORD'(Len => A'length, S => A); -- Robert I. Eachus with STANDARD_DISCLAIMER; use STANDARD_DISCLAIMER; function MESSAGE (TEXT: in CLEVER_IDEAS) return BETTER_IDEAS is...