<html><head><meta http-equiv="Content-Type" content="text/html charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><br class=""><div><blockquote type="cite" class=""><div class="">On Dec 11, 2015, at 11:25 PM, Travis Tilley via swift-evolution &lt;<a href="mailto:swift-evolution@swift.org" class="">swift-evolution@swift.org</a>&gt; wrote:</div><br class="Apple-interchange-newline"><div class=""><div dir="ltr" class=""><div class="gmail_default" style="font-family:verdana,sans-serif">You'd have to ask Chris Latter and&nbsp;Dmitri Gribenko, who are responsible for the lines in Lexer.cpp that prevent it:&nbsp;</div><div class="gmail_default" style="font-family:verdana,sans-serif"><br class=""></div><div class="gmail_default" style="font-family:verdana,sans-serif"><table class="" style="border-collapse:collapse;border-spacing:0px;color:rgb(51,51,51);font-family:Helvetica,arial,nimbussansl,liberationsans,freesans,clean,sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol';font-size:13px;line-height:18.2px"><tbody class=""><tr class="" style="border-top-width:1px;border-top-style:solid;border-top-color:rgb(233,233,233)"><td class="" rowspan="3" style="padding:8px 10px;width:350px;min-width:350px;max-width:350px;vertical-align:top"><a href="https://github.com/apple/swift/commit/22610d5db8faa75354c42066fc586aa996a96ebf" class="" style="color:rgb(64,120,192);text-decoration:none;font-stretch:normal;font-size:11px;line-height:normal;font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace;float:right;background-color:transparent"><br class="">22610d5</a><img alt="@lattner" class="" height="32" src="https://avatars0.githubusercontent.com/u/15152540?v=3&amp;s=64" width="32" style="border: 0px; display: inline-block; overflow: hidden; line-height: 1; vertical-align: middle; border-radius: 3px; float: left; margin-right: 5px;"><span class="" style="max-width:230px;display:inline-block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;line-height:1.1;vertical-align:top;font-weight:bold"><a href="https://github.com/apple/swift/commit/22610d5db8faa75354c42066fc586aa996a96ebf" class="" title="substantially improve error recovery for erroneous character and string literals.
Before we'd emit multiple diagnostics and confuse the lexer in some really common
cases (e.g. malformed escapes).


Swift SVN r5242" style="color:rgb(51,51,51);text-decoration:none;background-color:transparent">substantially improve error recovery for erroneous character and stri…</a></span><div class="" style="color:rgb(118,118,118);font-size:12px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;line-height:1.1"><a href="https://github.com/lattner" class="" rel="contributor" style="color:rgb(118,118,118);text-decoration:none;background-color:transparent">lattner</a>&nbsp;authored&nbsp;on May 20, 2013</div></td></tr><tr class="" style="border-top-width:1px;border-top-style:solid;border-top-color:rgb(233,233,233)"><td class="" style="padding:0px 1px;width:2px;background-color:rgb(121,55,56)"></td><td class="" id="L1147" style="padding: 0px 10px; width: 50px; min-width: 50px; white-space: nowrap; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 12px; line-height: 18px; vertical-align: top; text-align: right; border-style: solid; border-color: rgb(238, 238, 238); border-width: 0px 1px 0px 0px; background-color: rgb(253, 253, 253);">1147</td><td class="" id="LC1147" style="padding:0px 10px;vertical-align:top;font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace;font-size:12px;white-space:pre;overflow:visible;word-wrap:normal"></td></tr><tr class=""><td class="" style="padding:0px 1px;width:2px;background-color:rgb(121,55,56)"></td><td class="" id="L1148" style="padding: 0px 10px; width: 50px; min-width: 50px; white-space: nowrap; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 12px; line-height: 18px; vertical-align: top; text-align: right; border-style: solid; border-color: rgb(238, 238, 238); border-width: 0px 1px 0px 0px; background-color: rgb(253, 253, 253);">1148</td><td class="" id="LC1148" style="padding:0px 10px;vertical-align:top;font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace;font-size:12px;white-space:pre;overflow:visible;word-wrap:normal">    <span class="" style="color:rgb(150,152,150)">// String literals cannot have \n or \r in them.</span></td></tr><tr class="" style="border-top-width:1px;border-top-style:solid;border-top-color:rgb(233,233,233)"><td class="" rowspan="2" style="padding:8px 10px;width:350px;min-width:350px;max-width:350px;vertical-align:top"><a href="https://github.com/apple/swift/commit/3bee330e5068eb6ed4e825ff77b9e7615758eb47" class="" style="color:rgb(64,120,192);text-decoration:none;font-stretch:normal;font-size:11px;line-height:normal;font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace;float:right;background-color:transparent">3bee330</a><img alt="@gribozavr" class="" height="32" src="https://avatars1.githubusercontent.com/u/1120569?v=3&amp;s=64" width="32" style="border: 0px; display: inline-block; overflow: hidden; line-height: 1; vertical-align: middle; border-radius: 3px; float: left; margin-right: 5px;"><span class="" style="max-width:230px;display:inline-block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;line-height:1.1;vertical-align:top;font-weight:bold"><a href="https://github.com/apple/swift/commit/3bee330e5068eb6ed4e825ff77b9e7615758eb47" class="" title="Lexer: don't inf loop on an unterminated string literal near EOF


Swift SVN r7474" style="color:rgb(51,51,51);text-decoration:none;background-color:transparent">Lexer: don't inf loop on an unterminated string literal near EOF</a></span><div class="" style="color:rgb(118,118,118);font-size:12px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;line-height:1.1"><a href="https://github.com/gribozavr" class="" rel="contributor" style="color:rgb(118,118,118);text-decoration:none;background-color:transparent">gribozavr</a>&nbsp;authored&nbsp;on Aug 22, 2013</div></td></tr><tr class="" style="border-top-width:1px;border-top-style:solid;border-top-color:rgb(233,233,233)"><td class="" style="padding:0px 1px;width:2px;background-color:rgb(121,55,56)"></td><td class="" id="L1149" style="padding: 0px 10px; width: 50px; min-width: 50px; white-space: nowrap; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 12px; line-height: 18px; vertical-align: top; text-align: right; border-style: solid; border-color: rgb(238, 238, 238); border-width: 0px 1px 0px 0px; background-color: rgb(253, 253, 253);">1149</td><td class="" id="LC1149" style="padding:0px 10px;vertical-align:top;font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace;font-size:12px;white-space:pre;overflow:visible;word-wrap:normal">    <span class="" style="color:rgb(167,29,93)">if</span> (*CurPtr == <span class="" style="color:rgb(24,54,145)"><span class="">'</span><span class="">\r</span><span class="">'</span></span> || *CurPtr == <span class="" style="color:rgb(24,54,145)"><span class="">'</span><span class="">\n</span><span class="">'</span></span> || CurPtr == BufferEnd) {</td></tr><tr class="" style="border-top-width:1px;border-top-style:solid;border-top-color:rgb(233,233,233)"><td class="" rowspan="4" style="padding:8px 10px;width:350px;min-width:350px;max-width:350px;vertical-align:top"><a href="https://github.com/apple/swift/commit/22610d5db8faa75354c42066fc586aa996a96ebf" class="" style="color:rgb(64,120,192);text-decoration:none;font-stretch:normal;font-size:11px;line-height:normal;font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace;float:right;background-color:transparent">22610d5</a><img alt="@lattner" class="" height="32" src="https://avatars0.githubusercontent.com/u/15152540?v=3&amp;s=64" width="32" style="border: 0px; display: inline-block; overflow: hidden; line-height: 1; vertical-align: middle; border-radius: 3px; float: left; margin-right: 5px;"><span class="" style="max-width:230px;display:inline-block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;line-height:1.1;vertical-align:top;font-weight:bold"><a href="https://github.com/apple/swift/commit/22610d5db8faa75354c42066fc586aa996a96ebf" class="" title="substantially improve error recovery for erroneous character and string literals.
Before we'd emit multiple diagnostics and confuse the lexer in some really common
cases (e.g. malformed escapes).


Swift SVN r5242" style="color:rgb(51,51,51);text-decoration:none;background-color:transparent">substantially improve error recovery for erroneous character and stri…</a></span><div class="" style="color:rgb(118,118,118);font-size:12px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;line-height:1.1"><a href="https://github.com/lattner" class="" rel="contributor" style="color:rgb(118,118,118);text-decoration:none;background-color:transparent">lattner</a>&nbsp;authored&nbsp;on May 20, 2013</div></td></tr><tr class="" style="border-top-width:1px;border-top-style:solid;border-top-color:rgb(233,233,233)"><td class="" style="padding:0px 1px;width:2px;background-color:rgb(121,55,56)"></td><td class="" id="L1150" style="padding: 0px 10px; width: 50px; min-width: 50px; white-space: nowrap; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 12px; line-height: 18px; vertical-align: top; text-align: right; border-style: solid; border-color: rgb(238, 238, 238); border-width: 0px 1px 0px 0px; background-color: rgb(253, 253, 253);">1150</td><td class="" id="LC1150" style="padding:0px 10px;vertical-align:top;font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace;font-size:12px;white-space:pre;overflow:visible;word-wrap:normal">      <span class="" style="color:rgb(0,134,179)">diagnose</span>(TokStart, diag::lex_unterminated_string);</td></tr><tr class=""><td class="" style="padding:0px 1px;width:2px;background-color:rgb(121,55,56)"></td><td class="" id="L1151" style="padding: 0px 10px; width: 50px; min-width: 50px; white-space: nowrap; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 12px; line-height: 18px; vertical-align: top; text-align: right; border-style: solid; border-color: rgb(238, 238, 238); border-width: 0px 1px 0px 0px; background-color: rgb(253, 253, 253);">1151</td><td class="" id="LC1151" style="padding:0px 10px;vertical-align:top;font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace;font-size:12px;white-space:pre;overflow:visible;word-wrap:normal">      <span class="" style="color:rgb(167,29,93)">return</span> <span class="" style="color:rgb(0,134,179)">formToken</span>(tok::unknown, TokStart);</td></tr><tr class=""><td class="" style="padding:0px 1px;width:2px;background-color:rgb(121,55,56)"></td><td class="" id="L1152" style="padding: 0px 10px; width: 50px; min-width: 50px; white-space: nowrap; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 12px; line-height: 18px; vertical-align: top; text-align: right; border-style: solid; border-color: rgb(238, 238, 238); border-width: 0px 1px 0px 0px; background-color: rgb(253, 253, 253);">1152</td><td class="" id="LC1152" style="padding:0px 10px;vertical-align:top;font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace;font-size:12px;white-space:pre;overflow:visible;word-wrap:normal">    }</td></tr><tr class="" style="border-top-width:1px;border-top-style:solid;border-top-color:rgb(233,233,233)"><td class="" rowspan="2" style="padding:8px 10px;width:350px;min-width:350px;max-width:350px;vertical-align:top"><a href="https://github.com/apple/swift/commit/2f44c0038c5a53e6ee4bb8f0a0fec4c3bd5d79a2" class="" style="color:rgb(64,120,192);text-decoration:none;font-stretch:normal;font-size:11px;line-height:normal;font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace;float:right;background-color:transparent">2f44c00</a><img alt="@lattner" class="" height="32" src="https://avatars0.githubusercontent.com/u/15152540?v=3&amp;s=64" width="32" style="border: 0px; display: inline-block; overflow: hidden; line-height: 1; vertical-align: middle; border-radius: 3px; float: left; margin-right: 5px;"><span class="" style="max-width:230px;display:inline-block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;line-height:1.1;vertical-align:top;font-weight:bold"><a href="https://github.com/apple/swift/commit/2f44c0038c5a53e6ee4bb8f0a0fec4c3bd5d79a2" class="" title="Initial stab at implementing string literal interpolation for simple expressions,
e.g. &quot;foo is \(i+j)&quot;.  This implements rdar://11223686

Doug implemented all the hard parts of this.  I ripped out support for nested string
literals (i.e. string literals within an interpolated string), which simplified the
approach and defined away some problems with his patch in progress.  I plan a few refinements
on top of this basic patch.



Swift SVN r1738" style="color:rgb(51,51,51);text-decoration:none;background-color:transparent">Initial stab at implementing string literal interpolation for simple …</a></span><div class="" style="color:rgb(118,118,118);font-size:12px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;line-height:1.1"><a href="https://github.com/lattner" class="" rel="contributor" style="color:rgb(118,118,118);text-decoration:none;background-color:transparent">lattner</a>&nbsp;authored&nbsp;on May 4, 2012</div></td></tr><tr class="" style="border-top-width:1px;border-top-style:solid;border-top-color:rgb(233,233,233)"><td class="" style="padding:0px 1px;width:2px;background-color:rgb(121,55,56)"></td><td class="" id="L1153" style="padding: 0px 10px; width: 50px; min-width: 50px; white-space: nowrap; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 12px; line-height: 18px; vertical-align: top; text-align: right; border-style: solid; border-color: rgb(238, 238, 238); border-width: 0px 1px 0px 0px; background-color: rgb(253, 253, 253);">1153</td><td class="" id="LC1153" style="padding:0px 10px;vertical-align:top;font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace;font-size:12px;white-space:pre;overflow:visible;word-wrap:normal">    </td></tr></tbody></table></div><div class="gmail_extra"><br class=""><div class="gmail_quote"><br class=""></div><div class="gmail_quote">On Sat, Dec 12, 2015 at 2:02 AM, Alex Gordon <span dir="ltr" class="">&lt;<a href="mailto:alextgordon@gmail.com" target="_blank" class="">alextgordon@gmail.com</a>&gt;</span> wrote:<br class=""><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr" class=""><div class="">What is the reason that normal strings "..." don't support newlines? It's not traditionally seen in C-inspired languages, but it's hardly unusual outside that sphere[*]. Ruby and HTML are probably the most common examples, but apparently OCaml and Lisps also allow it?</div></div></blockquote></div></div></div></div></blockquote><div><br class=""></div><div>Among other reasons, Swift’s current behavior makes it straight-forward for the compiler to recover and handle the common error when you’ve forgotten to close a “. &nbsp;If \n’s were allowed in simple string literals, then everything to the end of the file is included in the string, and the only mistake is the missing “. &nbsp;This may seem like a minor thing, but matters a lot in an IDE context where you may have typed</div><div><br class=""></div><div>&nbsp;let x = “foo</div><div><br class=""></div><div>and just haven’t finished typing, and the entire buffer changes color or something.</div><div><br class=""></div><div>-Chris</div><div><br class=""></div></div></body></html>