[cfe-dev] String Interpolation for ObjC

Uli Kusterer via cfe-dev cfe-dev at lists.llvm.org
Wed Jul 26 10:43:51 PDT 2017


Hi,

 I have an idea on how one could add string interpolation to Swift. I wrote a tiny preprocessor as a proof-of-concept: https://github.com/uliwitness/ocpre

 Since that doesn't actually parse the code, it can only handle object types so far, so I'm thinking I should try to add it to the Clang ObjC compiler proper, instead. But I've never done this, never even built clang. Is there a tutorial somewhere on how to do this, and pointers on where I would start hooking into string escape sequence parsing, and which other parts I'd have to touch?

 My approach is basically a simple code transformation. I'd turn strings containing escape sequences and subexpressions:

	NSLog( "This is \(NSFullUserName()), who is \([myDatabase ageForUser: NSUserName()]) years old." );

into

	NSLog( "This is %1$@, who is %1$d years old.", (NSFullUserName()), ([myDatabase ageForUser: NSUserName()]) );

and that's it. So this *should* be a comparatively simple change, and, moreover should need no changes to any existing libraries, client source code etc. It would just work with existing variadic functions.

Not quite sure how one would localize the format strings (which my preprocessor does), as it's kinda unusual for clang to generate strings files, but maybe one can just generate the code for the main file and output a status message with the generated string key and value, and then one could use that message's text to generate the initial strings file so it will actually work at runtime. But even support for interpolation at the level Swift has right now is an improvement, I suppose.

Cheers,
-- Uli Kusterer
"The Witnesses of TeachText are everywhere..."
http://orangejuiceliberationfront.com








More information about the cfe-dev mailing list