| //===--- MangleHack.cpp - Swift Mangle Hack for various clients -----------===// |
| // |
| // This source file is part of the Swift.org open source project |
| // |
| // Copyright (c) 2014 - 2016 Apple Inc. and the Swift project authors |
| // Licensed under Apache License v2.0 with Runtime Library Exception |
| // |
| // See http://swift.org/LICENSE.txt for license information |
| // See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors |
| // |
| //===----------------------------------------------------------------------===// |
| // |
| // Implementations of mangler hacks for Interface Builder |
| // |
| // We don't have the time to disentangle the real mangler from the compiler |
| // right now. |
| // |
| //===----------------------------------------------------------------------===// |
| |
| #include "swift/Strings.h" |
| #include "swift/SwiftDemangle/MangleHack.h" |
| #include <cassert> |
| #include <cstring> |
| #include <cstdio> |
| |
| const char * |
| _swift_mangleSimpleClass(const char *module, const char *class_) { |
| size_t moduleLength = strlen(module); |
| size_t classLength = strlen(class_); |
| char *value = nullptr; |
| if (strcmp(module, swift::STDLIB_NAME) == 0) { |
| int result = asprintf(&value, "_TtCs%zu%s", classLength, class_); |
| assert(result > 0); |
| (void)result; |
| } else { |
| int result = asprintf(&value, "_TtC%zu%s%zu%s", moduleLength, module, |
| classLength, class_); |
| assert(result > 0); |
| (void)result; |
| } |
| assert(value); |
| return value; |
| } |
| |
| const char * |
| _swift_mangleSimpleProtocol(const char *module, const char *protocol) { |
| size_t moduleLength = strlen(module); |
| size_t protocolLength = strlen(protocol); |
| char *value = nullptr; |
| if (strcmp(module, swift::STDLIB_NAME) == 0) { |
| int result = asprintf(&value, "_TtPs%zu%s_", protocolLength, protocol); |
| assert(result > 0); |
| (void)result; |
| } else { |
| int result = asprintf(&value, "_TtP%zu%s%zu%s_", moduleLength, module, |
| protocolLength, protocol); |
| assert(result > 0); |
| (void)result; |
| } |
| assert(value); |
| return value; |
| } |