This commit is contained in:
Truffle 2026-06-29 10:02:40 +00:00 committed by GitHub
commit d56a7c27e6
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 24 additions and 2 deletions

View File

@ -62,8 +62,14 @@ func interpolate(d *dataTreeNavigator, context Context, str string) (string, err
i++
continue
case '\\':
// skip the escaped backslash
i++
// A backslash pair is only an interpolation escape when it
// guards an opening paren ("\\(" -> literal "\("). The lexer
// (processEscapeCharacters) has already decoded string escapes,
// so a standalone pair must pass through unchanged rather than
// be halved a second time (#2561).
if i+2 < len(runes) && runes[i+2] == '(' {
i++ // skip the second backslash; '(' is emitted as literal text next
}
default:
log.Debugf("Ignoring non-escaping backslash @ %v[%d]", str, i)
}

View File

@ -29,6 +29,22 @@ var stringsOperatorScenarios = []expressionScenario{
"D0, P[], (!!str)::\\\n",
},
},
{
skipDoc: true,
description: "Interpolation - backslashes are not halved (#2561)",
expression: `"\\\\"`,
expected: []string{
"D0, P[], (!!str)::\\\\\n",
},
},
{
skipDoc: true,
description: "Interpolation - odd backslash run preserved (#2561)",
expression: `"\\\\\\"`,
expected: []string{
"D0, P[], (!!str)::\\\\\\\n",
},
},
{
skipDoc: true,
description: "Interpolation - nested",