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