diff --git a/docs/markdown/Syntax.md b/docs/markdown/Syntax.md index 01c8c6e95..30eedf814 100644 --- a/docs/markdown/Syntax.md +++ b/docs/markdown/Syntax.md @@ -131,7 +131,8 @@ int main (int argc, char ** argv) { }''' ``` -This can also be combined with the string formatting functionality +These are raw strings that do not support the escape sequences listed above. +These strings can also be combined with the string formatting functionality described below. #### String formatting diff --git a/docs/markdown/snippets/more-escape-sequences.md b/docs/markdown/snippets/more-escape-sequences.md index 2894079d9..ad78ce283 100644 --- a/docs/markdown/snippets/more-escape-sequences.md +++ b/docs/markdown/snippets/more-escape-sequences.md @@ -1,17 +1,15 @@ -## String escape character update +## String escape character sequence update -The strings (both single-quoted and triple-quoted) in meson has been taught the -same set of escape sequences as in Python. It is therefore now possible to use -arbitrary bytes in strings, like for example NUL (`\0`) and other ASCII control -characters. See the chapter about *Strings* in *Syntax* for more details. +Single-quoted strings in meson have been taught the same set of escape +sequences as in Python. It is therefore now possible to use arbitrary bytes in +strings, like for example `NUL` (`\0`) and other ASCII control characters. See +the chapter about [*Strings* in *Syntax*](Syntax.md#strings) for more +details. Potential backwards compatibility issue: Any valid escape sequence according to the new rules will be interpreted as an escape sequence instead of the literal -characters. Previously only single-quote strings supported escape sequences and -the supported sequences were `\'`, `\\` and `\n`. +characters. Previously only the following escape sequences were supported in +single-quote strings: `\'`, `\\` and `\n`. -The most likely breakage is usage of backslash-n in triple-quoted strings. It -is now written in the same way as in single-quoted strings: `\\n` instead of -`\n`. In general it is now recommended to escape any usage of backslash. -However, backslash-c (`\c`), for example, is still backslash-c because it isn't -a valid escape sequence. +Note that the behaviour of triple-quoted (multiline) strings has not changed. +They behave like raw strings and do not support any escape sequences. diff --git a/test cases/common/32 multiline string/meson.build b/test cases/common/32 multiline string/meson.build index 1f952f183..262cb15d3 100644 --- a/test cases/common/32 multiline string/meson.build +++ b/test cases/common/32 multiline string/meson.build @@ -23,3 +23,13 @@ quote2 = '\'' if quote1 != quote2 error('Single quote quoting is broken.') endif + +cc = meson.get_compiler('c') +prog = ''' +int main(int argc, char **argv) { + int num = 1; + printf("%d\n", num); + return 0; +}''' + +assert(cc.compiles(prog), 'multline test compile failed') diff --git a/test cases/common/42 string operations/meson.build b/test cases/common/42 string operations/meson.build index 9dfa8665d..65961428c 100644 --- a/test cases/common/42 string operations/meson.build +++ b/test cases/common/42 string operations/meson.build @@ -87,6 +87,8 @@ bs_nl = '''\ bs_bs_n = '''\\n''' bs_bs_nl = '''\\ ''' +bs_bs = '''\\''' +bs = '''\''' assert('\c' == bs_c, 'Single backslash broken') assert('\\c' == bs_c, 'Double backslash broken') @@ -97,3 +99,5 @@ assert('\\n' == bs_n, 'Double backslash broken before n') assert('\\\n' == bs_nl, 'Three backslash broken before n') assert('\\\\n' == bs_bs_n, 'Four backslash broken before n') assert('\\\\\n' == bs_bs_nl, 'Five backslash broken before n') +assert('\\\\' == bs_bs, 'Double-backslash broken') +assert('\\' == bs, 'Backslash broken')