From 9b07bbdf56e0b5c6395e82c9714b24bbc2c1b30a Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Tue, 13 Nov 2018 16:28:36 +0100 Subject: [PATCH] Do not use backslash for escaping outside of string literals in argfiles This fixes CLI tests testArgfileWithEscaping and testApiVersionLessThanLanguageUsingArgfile on Windows #KT-28180 Fixed --- .../arguments/preprocessCommandLineArguments.kt | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/compiler/cli/cli-common/src/org/jetbrains/kotlin/cli/common/arguments/preprocessCommandLineArguments.kt b/compiler/cli/cli-common/src/org/jetbrains/kotlin/cli/common/arguments/preprocessCommandLineArguments.kt index b763caa1bfe..b349a4d811a 100644 --- a/compiler/cli/cli-common/src/org/jetbrains/kotlin/cli/common/arguments/preprocessCommandLineArguments.kt +++ b/compiler/cli/cli-common/src/org/jetbrains/kotlin/cli/common/arguments/preprocessCommandLineArguments.kt @@ -61,22 +61,19 @@ private fun Reader.parseNextArgument(): String? { while (r != null) { if (r.isWhitespace()) break - when (r) { - DOUBLE_QUOTE, SINGLE_QUOTE -> { - consumeRestOfEscapedSequence(sb, r) - return sb.toString() - } - BACKSLASH -> nextChar()?.apply(sb::append) - else -> sb.append(r) + if (r == DOUBLE_QUOTE || r == SINGLE_QUOTE) { + consumeRestOfQuotedSequence(sb, r) + return sb.toString() } + sb.append(r) r = nextChar() } return sb.toString().takeIf { it.isNotEmpty() } } -private fun Reader.consumeRestOfEscapedSequence(sb: StringBuilder, quote: Char) { +private fun Reader.consumeRestOfQuotedSequence(sb: StringBuilder, quote: Char) { var ch = nextChar() while (ch != null && ch != quote) { if (ch == BACKSLASH) nextChar()?.apply(sb::append) else sb.append(ch)