Files
swift-mirror/lib/SwiftDemangle/MangleHack.cpp
Joe Groff 0cd5aa8c7c Change mangling for the Swift module from 'Ss' to 's'.
'Ss' appears in manglings tens of thousands of times in the standard library and is also incredibly frequent in other modules. This alone is enough to shrink the standard library by 59KB.

Swift SVN r32409
2015-10-02 22:39:44 +00:00

63 lines
2.0 KiB
C++

//===-- MangleHack.cpp - Swift Mangle Hack for various clients ------------===//
//
// This source file is part of the Swift.org open source project
//
// Copyright (c) 2014 - 2015 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;
}