mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
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
44 lines
1.3 KiB
C++
44 lines
1.3 KiB
C++
// 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;
|
|
}
|