On Fri, Jul 5, 2019 at 8:14 PM Ben Grasset <operato...@gmail.com> wrote:

> On Fri, Jul 5, 2019 at 8:08 PM Ryan Joseph <generic...@gmail.com> wrote:
>
>> ah! Your code works but mine doesn’t! maybe the line ending are messing
>> it up? I get "String constant too long while ansistrings are disabled”.\
>>
>
> No, that makes no sense whatsoever.
>
> Another example:
>
> {$mode objfpc}
> { explicitly set H- ! }
> {$H-}
> { using CRLF while my file is actually LF, just for fun }
> {$MULTILINESTRINGLINEENDING CRLF}
>
> program test;
>
> var lines: ansistring = `
>   #version 150
>
>   uniform sampler2D textures[8];
>   in vec2 vertexTexCoord;
>   in vec4 vertexColor;
>   in float vertexUVMap;
>   out vec4 fragColor;
>
>   void main()
>   {
>     if (vertexUVMap == 255) {
>       fragColor = vertexColor;
>     } else {
>       fragColor = texture(textures[int(vertexUVMap)], vertexTexCoord.st);
>       if (vertexColor.a < fragColor.a) {
>         fragColor.a = vertexColor.a;
>       }
>     }
>   }`;
>
> begin
>   WriteLn(lines);
> end.
>
> I'm not even sure which code (that is actually a complete program with a
> begin and end) you're talking about.
>

I just noticed, in fact: the compiler actually completely ignores {$H+} and
{$H-} for "typed" string constants *and* variables, in all cases. Even with
{$H-}, and with not "ansistring", but "string", my above example still
works (i.e. the compiler implicitly "uptypes" it to an ansistring if it
needs to, basically). Only for "true constant" strings does it care about
{$H+} and {$H-} at all.

I'm unsure whether or not this is intentional behaviour.
_______________________________________________
fpc-devel maillist  -  fpc-devel@lists.freepascal.org
https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel

Reply via email to