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