mirror of
https://github.com/apple/swift.git
synced 2025-12-21 12:14:44 +01:00
Improve the version/flags extract from interface file by moving away from using Regex and limiting the search to the beginning of the file. Switch away from Regex will give 5-10% improvement in time and instruction counts, and limiting the search lines can save a lot of time if the swiftinterface is large. For example, the extract time for Swift stdlib is 10x faster after the patch. Current strategey for limiting the line to search is by only parsing the first comment block.
39 lines
1.5 KiB
Swift
39 lines
1.5 KiB
Swift
/// Test requiring the flag -experimental-spi-only-imports to use @_spiOnly.
|
|
|
|
// RUN: %empty-directory(%t)
|
|
// RUN: split-file %s %t
|
|
|
|
/// Build dummy dependency.
|
|
// RUN: %target-swift-frontend -emit-module %t/Empty.swift \
|
|
// RUN: -module-name Empty -emit-module-path %t/Empty.swiftmodule
|
|
|
|
/// Attribute is rejected without the flag.
|
|
// RUN: %target-swift-frontend -emit-module %t/Client.swift -I %t \
|
|
// RUN: -module-name Client -emit-module-path %t/Client.swiftmodule -verify
|
|
|
|
/// Attribute is accepted with the flag.
|
|
// RUN: %target-swift-frontend -emit-module %t/Client.swift -I %t \
|
|
// RUN: -module-name Client -emit-module-path %t/Client.swiftmodule \
|
|
// RUN: -experimental-spi-only-imports
|
|
|
|
/// Attribute is accepted without the flag in Swift 6.
|
|
// RUN: %target-swift-frontend -emit-module %t/Client.swift -I %t \
|
|
// RUN: -module-name Client -emit-module-path %t/Client.swiftmodule \
|
|
// RUN: -swift-version 6
|
|
|
|
/// Attribute is accepted without the flag when in a swiftinterface.
|
|
// RUN: %target-swift-typecheck-module-from-interface(%t/Client.private.swiftinterface) \
|
|
// RUN: -I %t -module-name Client
|
|
|
|
//--- Empty.swift
|
|
//--- Client.swift
|
|
|
|
@_spiOnly import Empty // expected-error {{'@_spiOnly' requires setting the frontend flag '-experimental-spi-only-imports'}}
|
|
|
|
//--- Client.private.swiftinterface
|
|
// swift-interface-format-version: 1.0
|
|
// swift-compiler-version: Swift version 5.8-dev effective-4.1.50
|
|
// swift-module-flags: -swift-version 4 -module-name Client
|
|
import Swift
|
|
@_spiOnly import Empty
|