1*12c85518Srobert //===-- MakeSuport.cpp --------------------------------------------------*-===// 2*12c85518Srobert // 3*12c85518Srobert // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4*12c85518Srobert // See https://llvm.org/LICENSE.txt for license information. 5*12c85518Srobert // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6*12c85518Srobert // 7*12c85518Srobert //===----------------------------------------------------------------------===// 8*12c85518Srobert 9*12c85518Srobert #include "clang/Basic/MakeSupport.h" 10*12c85518Srobert quoteMakeTarget(StringRef Target,SmallVectorImpl<char> & Res)11*12c85518Srobertvoid clang::quoteMakeTarget(StringRef Target, SmallVectorImpl<char> &Res) { 12*12c85518Srobert for (unsigned i = 0, e = Target.size(); i != e; ++i) { 13*12c85518Srobert switch (Target[i]) { 14*12c85518Srobert case ' ': 15*12c85518Srobert case '\t': 16*12c85518Srobert // Escape the preceding backslashes 17*12c85518Srobert for (int j = i - 1; j >= 0 && Target[j] == '\\'; --j) 18*12c85518Srobert Res.push_back('\\'); 19*12c85518Srobert 20*12c85518Srobert // Escape the space/tab 21*12c85518Srobert Res.push_back('\\'); 22*12c85518Srobert break; 23*12c85518Srobert case '$': 24*12c85518Srobert Res.push_back('$'); 25*12c85518Srobert break; 26*12c85518Srobert case '#': 27*12c85518Srobert Res.push_back('\\'); 28*12c85518Srobert break; 29*12c85518Srobert default: 30*12c85518Srobert break; 31*12c85518Srobert } 32*12c85518Srobert 33*12c85518Srobert Res.push_back(Target[i]); 34*12c85518Srobert } 35*12c85518Srobert } 36