[m-users.] string_writer / stream and writing strings with %s in them

Sean Charles (emacstheviking) objitsu at gmail.com
Sun Feb 13 09:07:05 AEDT 2022


Yes.

I had a good old rethink about how I was going about it and it seems to be back on track now.
Thanks again Zoltan.


> On 12 Feb 2022, at 16:20, Sean Charles (emacstheviking) <objitsu at gmail.com> wrote:
> 
> I am looking for some insights / advice on the best way to handle what has temporarily become something of a recusrsive horror story this afternoon! In my transpiler, there may or may not be strings containing C style printf() format controls. This caught me out
> 
> Uncaught Mercury exception:
> Software Error: string.format: The first conversion specifier, which uses specifier character `s', is missing its input.
> 
> once so I implemented:
> 
>     % C_String :: Escapes any % with %% in the string.
>     %
> :- func c_string(ps::in) = (string::out).
> 
> c_string(ps(_,X)) = string.format("""%s""", [s(c_string_(X))]).
> 
>     % TODO: is this a typeclasss ie.  things to be escaped ??
> :- func c_string_(string::in) = (string::out).
> 
> 
> 
> Which works but....as I tested my way through, the problem is compounded by the recursive nature of the rendering stage, resulting in strings like this:
> 
>    printf("Hello %%%%%s", "World");
> 
> caused by each successive handler making sure it escapes strings before returning up the stack. 
> When I print the code out I am using string.format() and of course that blew up mightily until I started using %%s in --my-- strings of source code.
> 
> I currently use stream.string_writer.format() for generating the final output.
> 
> I wondered what strategy the Mercury compiler uses as it must have addressed the same issue at some point? I've tried reading the code to no avail!  I am rethinking through my approach, so far it has all worked great but then.. strings with %s and any other string escape for the C grade is going to have the same issues.
> 
> Thanks,
> Sean.
> 

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mercurylang.org/archives/users/attachments/20220212/6ad72ee0/attachment.html>


More information about the users mailing list