Am 09.04.2021 um 04:20 schrieb Ryan Joseph via fpc-devel:

On Apr 8, 2021, at 3:53 PM, Sven Barth <pascaldra...@googlemail.com> wrote:

1. you should not blindly assume that the def is a stringdef if it's not an 
arraydef; at least use an internalerror to protect against problems here
2. if it's really a stringdef and the return type is st_shortstring you should indeed use 
SHORTSTRING (it's only constant strings which are a bit more, let's say 
"dynamic")
3. do an internalerror for st_longstring as those are currently not implemented
4. due to 2. you can move the case of newtype=nil into the if-clause with the 
arraydef

Otherwise, yes, the check for the string type is correct.
I didn't know how constant strings we identified until just now so I can correct that. 
Can we make "(def.typ=arraydef) and (ado_isconststring in 
tarraydef(def).arrayoptions)" into a function in defutils.pas and call it 
is_constant_string? That  would have been easily visible to me and lead me in the right 
direction from the start. I also had problems with array literals like [1,2,3] which 
there is no clear utility function for and prompted me to make is_array_literal() which 
is private right now (and probably not very correct in design). Moving that to a public 
space would be sensible also I think.

That is because before the introduction of type helpers such functions weren't really needed. Other mechanisms caught such constants, but for both type helpers and these implicit specializations it's hard to do it another way.

Regards,
Sven
_______________________________________________
fpc-devel maillist  -  fpc-devel@lists.freepascal.org
https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel

Reply via email to