[interop][SwiftToCxx] incorporate argument labels into Stdlib API names in C++

This allows easier use and more wider API exposure from the Swift stdlib

In the future, all functions and method should incorporate argument labels, but it's not yet clear how
This commit is contained in:
Alex Lorenz
2023-03-03 14:14:43 -08:00
parent a0e1810f62
commit 13a63f4b05
6 changed files with 97 additions and 54 deletions

View File

@@ -0,0 +1,43 @@
// RUN: %empty-directory(%t)
// RUN: split-file %s %t
// RUN: %target-swift-frontend -typecheck %t/print-string.swift -typecheck -module-name Stringer -enable-experimental-cxx-interop -emit-clang-header-path %t/Stringer.h
// RUN: %target-interop-build-clangxx -std=gnu++20 -c %t/string-conversions.cpp -I %t -o %t/swift-stdlib-execution.o
// RUN: %target-build-swift %t/print-string.swift -o %t/swift-stdlib-execution -Xlinker %t/swift-stdlib-execution.o -module-name Stringer -Xfrontend -entry-point-function-name -Xfrontend swiftMain %target-cxx-lib
// RUN: %target-codesign %t/swift-stdlib-execution
// RUN: %target-run %t/swift-stdlib-execution | %FileCheck %s
// REQUIRES: executable_test
//--- print-string.swift
@_expose(Cxx)
public func printString(_ s: String) {
print("'''\(s)'''")
}
//--- string-conversions.cpp
#include <cassert>
#include "Stringer.h"
int main() {
using namespace Swift;
using namespace Stringer;
{
auto s = String("Hello world");
assert(s.getCount() == 11);
printString(s);
s.append(String("!test"));
printString(s);
printString(s.lowercased());
printString(s.uppercased());
}
// CHECK: '''Hello world'''
// CHECK: '''Hello world!test'''
// CHECK: '''hello world!test'''
// CHECK: '''HELLO WORLD!TEST'''
return 0;
}