From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on polar.synack.me X-Spam-Level: X-Spam-Status: No, score=-0.8 required=5.0 tests=BAYES_00,INVALID_DATE autolearn=no autolearn_force=no version=3.4.4 Path: utzoo!utgpu!news-server.csri.toronto.edu!cs.utexas.edu!know!samsung!xylogics!merk!alliant!linus!linus!eachus From: eachus@linus.mitre.org (Robert I. Eachus) Newsgroups: comp.lang.ada Subject: Re: implicit array subtype conversion Message-ID: Date: 30 Jul 90 18:11:53 GMT References: <1990Jul27.135108.11518@planck.uucp> Sender: usenet@linus.mitre.org Organization: The Mitre Corporation, Bedford, MA List-Id: 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...