RE: [sv-bc] Is string allowed to be assigned to any data type?

From: Rich, Dave <Dave_Rich_at_.....>
Date: Mon Jan 28 2008 - 21:06:44 PST
As far as I know, the only thing defined by the LRM is: "A string or a
string literal can be assigned directly to a string variable." Any other
type without a cast should be a compiler error.

Dave


> -----Original Message-----
> From: Surya Pratik Saha [mailto:spsaha@cal.interrasystems.com]
> Sent: Monday, January 28, 2008 8:44 PM
> To: Rich, Dave
> Cc: sv-ec@eda.org; sv-bc@eda.org
> Subject: Re: [sv-bc] Is string allowed to be assigned to any data
type?
> 
> Thanks Dave,
> I understand clearly now. However, if string is used in LHS side, and
> anything non-string type is used in RHS side without casting, is it
not
> run time error either?
> 
> Regards
> Surya
> 
> 
> 
> -------- Original Message  --------
> Subject: Re:[sv-bc] Is string allowed to be assigned to any data type?
> From: Rich, Dave <Dave_Rich@mentor.com>
> To: Surya Pratik Saha <spsaha@cal.interrasystems.com>
> Cc: sv-ec@eda.org, sv-bc@eda.org
> Date: Tuesday, January 29, 2008 6:01:26 AM
> > The section on the string data type says this:
> >
> > "A single character of a string variable is of type byte."
> >
> > So a[0] is not a string type. It is a byte which is a fixed-sized
> > integral type. The rules for bit-stream casting with a fixed sized
type
> > and an unpacked type require that the source type have the exact
number
> > of bits as the destination type. If that can be checked at compile
time,
> > the compiler is free to do that. But if the source involves a
dynamic
> > type, run-time might be the only time to perform that check.
> >
> > a[0] = byte'(b);
> >
> > would be valid only if b had exactly one character, and that check
could
> > only be performed at run-time.
> >
> > If you never want this to be an error, then use the streaming
operator.
> >
> > a[0] = {<<{b}};
> >
> > The only wrinkle in this is whether a string is considered a packed
or
> > unpacked type. It certainly doesn't qualify as a packed type.
> >
> > Dave
> >
> >
> >
> >> -----Original Message-----
> >> From: Surya Pratik Saha [mailto:spsaha@cal.interrasystems.com]
> >> Sent: Sunday, January 27, 2008 5:57 AM
> >> To: Rich, Dave
> >> Cc: sv-ec@eda.org; sv-bc@eda.org
> >> Subject: Re: [sv-bc] Is string allowed to be assigned to any data
> >>
> > type?
> >
> >> Hi Dave,
> >> I did not see anything in the LRM mentioning that restriction.
> >>
> >> How do I impose a cast here?
> >> Is
> >> a[0] = byte'(b);
> >> valid assignment then?
> >>
> >> Also without cast, will it be a run time error or compilation time
> >> error. LRM does not clearly say assigning integral type to a string
> >> variable without cast is run time error or compilation time error.
> >>
> > What
> >
> >> is your comment on that?
> >>
> >> Regards
> >> Surya
> >>
> >>
> >>
> >> -------- Original Message --------
> >> Subject: Re:[sv-bc] Is string allowed to be assigned to any data
type?
> >> From: Rich, Dave <Dave_Rich@mentor.com>
> >> To: Surya Pratik Saha <spsaha@cal.interrasystems.com>,
sv-ec@eda.org,
> >> sv-bc@eda.org
> >> Date: Saturday, January 26, 2008 11:17:43 PM
> >>
> >>> A single element of a string is a byte, which is an integral type.
> >>> It's not legal to assign a string to an integral type without a
> >>>
> > cast.
> >
> >>> With a cast, b would have to be exactly one character, or you will
> >>>
> > get
> >
> >>> a run time error.
> >>>
> >>> Dave
> >>>
> >>>
> >>>
> >
------------------------------------------------------------------------
> >
> >>> *From:* owner-sv-bc@server.eda.org
> >>>
> > [mailto:owner-sv-bc@server.eda.org]
> >
> >>> *On Behalf Of *Surya Pratik Saha
> >>> *Sent:* Saturday, January 26, 2008 4:21 AM
> >>> *To:* sv-ec@server.eda.org; sv-bc@server.eda.org
> >>> *Subject:* [sv-bc] Is string allowed to be assigned to any data
> >>>
> > type?
> >
> >>> Hi,
> >>> As per SV 1800 LRM:
> >>> *A string or a string literal can be assigned directly to a string
> >>> variable. Integral types can be assigned to a string variable, but
> >>> require a cast.
> >>> *
> >>> This imposes some restriction when LHS of an assignment is a
string
> >>> type. But is any data type allowed to be LHS when RHS is a string.
I
> >>> did not see anything in the LRM, though following e.g. is marked
as
> >>> illegal:
> >>> *string b = "";
> >>> string a = {"Hi", b};
> >>> a[0] = b; // invalid, requires a cast*
> >>>
> >>> It is not at all clear why the assignment is invalid, how it can
be
> >>> made valid by casting on which side. Most of the simulators pass
the
> >>> case though. Is there any mantis or clarification for that?
> >>>
> >>> --
> >>> Regards
> >>> Surya
> >>>
> >>> --
> >>> This message has been scanned for viruses and
> >>> dangerous content by *MailScanner* <http://www.mailscanner.info/>,
> >>>
> > and
> >
> >> is
> >>
> >>> believed to be clean.
> >>>
> >>
> >>
> >
> >
> >
> >
> >
> >
> >
> 
> 
> 


-- 
This message has been scanned for viruses and
dangerous content by MailScanner, and is
believed to be clean.
Received on Mon Jan 28 21:07:13 2008

This archive was generated by hypermail 2.1.8 : Mon Jan 28 2008 - 21:07:48 PST