xref: /llvm-project/clang/lib/Basic/MakeSupport.cpp (revision 8dfdb80f72c080585517f10862b3b08d745b9155)
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 Langmuir void 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