Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -142,7 +142,7 @@ jobs:
run: |
toolchain_path="/opt/swiftwasm"
./build-exec mkdir -p "$toolchain_path"
curl -v -L ${{ matrix.development-toolchain-download }} | ./build-exec tar xz --strip-component 1 -C "$toolchain_path"
curl -L ${{ matrix.development-toolchain-download }} | ./build-exec tar xz --strip-component 1 -C "$toolchain_path"
echo "toolchain-path=$toolchain_path" >> $GITHUB_OUTPUT
./build-exec "$toolchain_path/usr/bin/swift" sdk install "${{ matrix.wasi-swift-sdk-download }}" --checksum "${{ matrix.wasi-swift-sdk-checksum }}"
wasi_sdk_path=$(./build-exec "$toolchain_path/usr/bin/swift" sdk configure --show-configuration "${{ matrix.wasi-swift-sdk-id }}" wasm32-unknown-wasi | grep sdkRootPath: | cut -d: -f2)
Expand Down
10 changes: 2 additions & 8 deletions Package.swift
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,7 @@ import PackageDescription

import class Foundation.ProcessInfo

let DarwinPlatforms: [Platform]
#if swift(<5.9)
DarwinPlatforms = [.macOS, .iOS, .watchOS, .tvOS]
#else
DarwinPlatforms = [.macOS, .iOS, .watchOS, .tvOS, .visionOS]
#endif
let DarwinPlatforms: [Platform] = [.macOS, .iOS, .watchOS, .tvOS, .visionOS]

let package = Package(
name: "WasmKit",
Expand Down Expand Up @@ -120,8 +115,7 @@ let package = Package(

.target(name: "WITExtractor"),
.testTarget(name: "WITExtractorTests", dependencies: ["WITExtractor", "WIT"]),
],
swiftLanguageVersions: [.v5]
]
)

if ProcessInfo.processInfo.environment["SWIFTCI_USE_LOCAL_DEPS"] == nil {
Expand Down
2 changes: 1 addition & 1 deletion Sources/WAT/Location.swift
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/// A location in a WAT source file.
public struct Location: Equatable, CustomDebugStringConvertible {
public struct Location: Equatable, CustomDebugStringConvertible, Sendable {
let index: Lexer.Index
let source: String.UnicodeScalarView

Expand Down
2 changes: 1 addition & 1 deletion Sources/WAT/WAT.swift
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import WasmParser

/// Options for encoding a WebAssembly module into a binary format.
public struct EncodeOptions {
public struct EncodeOptions: Sendable {
/// Whether to include the name section.
public var nameSection: Bool

Expand Down
72 changes: 36 additions & 36 deletions Sources/WIT/AST.swift
Original file line number Diff line number Diff line change
Expand Up @@ -33,13 +33,13 @@ struct Version: Equatable, Hashable, CustomStringConvertible {
}
}

public enum ASTItemSyntax: Equatable, Hashable {
public enum ASTItemSyntax: Equatable, Hashable, Sendable {
case interface(SyntaxNode<InterfaceSyntax>)
case world(SyntaxNode<WorldSyntax>)
case use(SyntaxNode<TopLevelUseSyntax>)
}

public struct PackageNameSyntax: Equatable, Hashable, CustomStringConvertible {
public struct PackageNameSyntax: Equatable, Hashable, CustomStringConvertible, Sendable {
public var namespace: Identifier
public var name: Identifier
var version: Version?
Expand Down Expand Up @@ -81,27 +81,27 @@ public struct WorldSyntax: Equatable, Hashable, SyntaxNodeProtocol {
public var items: [WorldItemSyntax]
}

public enum WorldItemSyntax: Equatable, Hashable {
public enum WorldItemSyntax: Equatable, Hashable, Sendable {
case `import`(ImportSyntax)
case export(ExportSyntax)
case use(SyntaxNode<UseSyntax>)
case type(SyntaxNode<TypeDefSyntax>)
case include(IncludeSyntax)
}

public struct ImportSyntax: Equatable, Hashable {
public struct ImportSyntax: Equatable, Hashable, Sendable {
public var documents: DocumentsSyntax
public var attributes: [AttributeSyntax]
public var kind: ExternKindSyntax
}

public struct ExportSyntax: Equatable, Hashable {
public struct ExportSyntax: Equatable, Hashable, Sendable {
public var documents: DocumentsSyntax
public var attributes: [AttributeSyntax]
public var kind: ExternKindSyntax
}

public enum ExternKindSyntax: Equatable, Hashable {
public enum ExternKindSyntax: Equatable, Hashable, Sendable {
case interface(Identifier, [InterfaceItemSyntax])
case path(UsePathSyntax)
case function(Identifier, FunctionSyntax)
Expand Down Expand Up @@ -131,7 +131,7 @@ public struct TypeDefSyntax: Equatable, Hashable, SyntaxNodeProtocol {
public var body: TypeDefBodySyntax
}

public enum TypeDefBodySyntax: Equatable, Hashable {
public enum TypeDefBodySyntax: Equatable, Hashable, Sendable {
case flags(FlagsSyntax)
case resource(ResourceSyntax)
case record(RecordSyntax)
Expand All @@ -141,11 +141,11 @@ public enum TypeDefBodySyntax: Equatable, Hashable {
case alias(TypeAliasSyntax)
}

public struct TypeAliasSyntax: Equatable, Hashable {
public struct TypeAliasSyntax: Equatable, Hashable, Sendable {
public let typeRepr: TypeReprSyntax
}

public indirect enum TypeReprSyntax: Equatable, Hashable {
public indirect enum TypeReprSyntax: Equatable, Hashable, Sendable {
case bool
case u8
case u16
Expand All @@ -169,7 +169,7 @@ public indirect enum TypeReprSyntax: Equatable, Hashable {
case stream(StreamSyntax)
}

public enum HandleSyntax: Equatable, Hashable {
public enum HandleSyntax: Equatable, Hashable, Sendable {
case own(resource: Identifier)
case borrow(resource: Identifier)

Expand All @@ -181,65 +181,65 @@ public enum HandleSyntax: Equatable, Hashable {
}
}

public struct ResourceSyntax: Equatable, Hashable {
public struct ResourceSyntax: Equatable, Hashable, Sendable {
var functions: [ResourceFunctionSyntax]
}

public enum ResourceFunctionSyntax: Equatable, Hashable {
public enum ResourceFunctionSyntax: Equatable, Hashable, Sendable {
case method(SyntaxNode<NamedFunctionSyntax>)
case `static`(SyntaxNode<NamedFunctionSyntax>)
case constructor(SyntaxNode<NamedFunctionSyntax>)
}

public struct RecordSyntax: Equatable, Hashable {
public struct RecordSyntax: Equatable, Hashable, Sendable {
public var fields: [FieldSyntax]
}

public struct FieldSyntax: Equatable, Hashable {
public struct FieldSyntax: Equatable, Hashable, Sendable {
public var documents: DocumentsSyntax
public var name: Identifier
public var type: TypeReprSyntax
var textRange: TextRange
}

public struct FlagsSyntax: Equatable, Hashable {
public struct FlagsSyntax: Equatable, Hashable, Sendable {
public var flags: [FlagSyntax]
}

public struct FlagSyntax: Equatable, Hashable {
public struct FlagSyntax: Equatable, Hashable, Sendable {
public var documents: DocumentsSyntax
public var name: Identifier
}

public struct VariantSyntax: Equatable, Hashable {
public struct VariantSyntax: Equatable, Hashable, Sendable {
public var cases: [CaseSyntax]
var textRange: TextRange
}

public struct CaseSyntax: Equatable, Hashable {
public struct CaseSyntax: Equatable, Hashable, Sendable {
public var documents: DocumentsSyntax
public var name: Identifier
public var type: TypeReprSyntax?
var textRange: TextRange
}

public struct EnumSyntax: Equatable, Hashable {
public struct EnumSyntax: Equatable, Hashable, Sendable {
public var cases: [EnumCaseSyntax]
var textRange: TextRange
}

public struct EnumCaseSyntax: Equatable, Hashable {
public struct EnumCaseSyntax: Equatable, Hashable, Sendable {
public var documents: DocumentsSyntax
public var name: Identifier
var textRange: TextRange
}

public struct ResultSyntax: Equatable, Hashable {
public struct ResultSyntax: Equatable, Hashable, Sendable {
public let ok: TypeReprSyntax?
public let error: TypeReprSyntax?
}

public struct StreamSyntax: Equatable, Hashable {
public struct StreamSyntax: Equatable, Hashable, Sendable {
var element: TypeReprSyntax?
var end: TypeReprSyntax?
}
Expand All @@ -256,20 +256,20 @@ public struct UnionSyntax: Equatable, Hashable, SyntaxNodeProtocol {
var textRange: TextRange
}

public struct UnionCaseSyntax: Equatable, Hashable {
public struct UnionCaseSyntax: Equatable, Hashable, Sendable {
public var documents: DocumentsSyntax
public var type: TypeReprSyntax
var textRange: TextRange
}

public struct ParameterSyntax: Equatable, Hashable {
public struct ParameterSyntax: Equatable, Hashable, Sendable {
public var name: Identifier
public var type: TypeReprSyntax
var textRange: TextRange
}
public typealias ParameterList = [ParameterSyntax]

public enum ResultListSyntax: Equatable, Hashable {
public enum ResultListSyntax: Equatable, Hashable, Sendable {
case named(ParameterList)
case anon(TypeReprSyntax)

Expand All @@ -281,7 +281,7 @@ public enum ResultListSyntax: Equatable, Hashable {
}
}

public struct FunctionSyntax: Equatable, Hashable {
public struct FunctionSyntax: Equatable, Hashable, Sendable {
public var parameters: ParameterList
public var results: ResultListSyntax
var textRange: TextRange
Expand All @@ -293,7 +293,7 @@ public struct UseSyntax: Equatable, Hashable, SyntaxNodeProtocol {
public var names: [UseNameSyntax]
}

public enum UsePathSyntax: Equatable, Hashable {
public enum UsePathSyntax: Equatable, Hashable, Sendable {
case id(Identifier)
case package(id: PackageNameSyntax, name: Identifier)

Expand All @@ -305,23 +305,23 @@ public enum UsePathSyntax: Equatable, Hashable {
}
}

public struct UseNameSyntax: Equatable, Hashable {
public struct UseNameSyntax: Equatable, Hashable, Sendable {
public var name: Identifier
public var asName: Identifier?
}

public struct IncludeSyntax: Equatable, Hashable {
public struct IncludeSyntax: Equatable, Hashable, Sendable {
var attributes: [AttributeSyntax]
var from: UsePathSyntax
var names: [IncludeNameSyntax]
}

public struct IncludeNameSyntax: Equatable, Hashable {
public struct IncludeNameSyntax: Equatable, Hashable, Sendable {
var name: Identifier
var asName: Identifier
}

public struct Identifier: Equatable, Hashable, CustomStringConvertible {
public struct Identifier: Equatable, Hashable, CustomStringConvertible, Sendable {
public var text: String
var textRange: TextRange

Expand All @@ -330,28 +330,28 @@ public struct Identifier: Equatable, Hashable, CustomStringConvertible {
}
}

public struct DocumentsSyntax: Equatable, Hashable {
public struct DocumentsSyntax: Equatable, Hashable, Sendable {
var comments: [String]
}

public enum AttributeSyntax: Equatable, Hashable {
public enum AttributeSyntax: Equatable, Hashable, Sendable {
case since(SinceAttributeSyntax)
case unstable(UnstableAttributeSyntax)
case deprecated(DeprecatedAttributeSyntax)
}

public struct SinceAttributeSyntax: Equatable, Hashable {
public struct SinceAttributeSyntax: Equatable, Hashable, Sendable {
let version: Version
let feature: Identifier?
let textRange: TextRange
}

public struct UnstableAttributeSyntax: Equatable, Hashable {
public struct UnstableAttributeSyntax: Equatable, Hashable, Sendable {
let textRange: TextRange
let feature: Identifier
}

public struct DeprecatedAttributeSyntax: Equatable, Hashable {
public struct DeprecatedAttributeSyntax: Equatable, Hashable, Sendable {
let textRange: TextRange
let version: Version
}
2 changes: 1 addition & 1 deletion Sources/WIT/Diagnostics.swift
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ struct DiagnosticError: Error {
let diagnostic: Diagnostic
}

public struct Diagnostic {
public struct Diagnostic: Sendable {

public let message: String
var textRange: TextRange?
Expand Down
2 changes: 1 addition & 1 deletion Sources/WIT/PackageResolver.swift
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import Foundation

/// A unit of WIT package managing a collection of WIT source files
public final class PackageUnit: Hashable, CustomStringConvertible {
public final class PackageUnit: Hashable, CustomStringConvertible, Sendable {
public let packageName: PackageNameSyntax
public let sourceFiles: [SyntaxNode<SourceFileSyntax>]

Expand Down
6 changes: 3 additions & 3 deletions Sources/WIT/Semantics/RequestEvaluator.swift
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ internal class Evaluator {

// Check cyclical request
if activeRequestsSet.contains(requestAsHashable) {
throw CyclicalRequestError(activeRequests: activeRequests + [request])
throw CyclicalRequestError(activeRequestDescriptions: activeRequests.map { "\($0)" } + ["\(request)"])
}

// Push the given request as an active request
Expand Down Expand Up @@ -64,11 +64,11 @@ internal class Evaluator {

extension Evaluator {
struct CyclicalRequestError: Error, CustomStringConvertible {
let activeRequests: [any EvaluationRequest]
let activeRequestDescriptions: [String]

var description: String {
var description = "==== Cycle detected! ====\n"
for (index, request) in activeRequests.enumerated() {
for (index, request) in activeRequestDescriptions.enumerated() {
let indent = String(repeating: " ", count: index)
description += "\(indent)\\- \(request)\n"
}
Expand Down
6 changes: 3 additions & 3 deletions Sources/WIT/SyntaxNode.swift
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
/// An AST node that can be wrapped by ``SyntaxNode`` as a reference
public protocol SyntaxNodeProtocol {}
public protocol SyntaxNodeProtocol: Sendable {}

/// An AST node with reference semantics to provide identity of a node.
@dynamicMemberLookup
public struct SyntaxNode<Syntax: SyntaxNodeProtocol>: Equatable, Hashable {
class Ref {
public struct SyntaxNode<Syntax: SyntaxNodeProtocol>: Equatable, Hashable, Sendable {
final class Ref: Sendable {
fileprivate let syntax: Syntax
init(syntax: Syntax) {
self.syntax = syntax
Expand Down
2 changes: 1 addition & 1 deletion Sources/WasmKit/Component/ComponentTypes.swift
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/// Error type raised from Component Model operations
public struct ComponentError<Content>: Error {
public struct ComponentError<Content: Sendable>: Error {
/// The content of the error
public let content: Content

Expand Down
5 changes: 1 addition & 4 deletions Sources/WasmKit/Execution/Errors.swift
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,9 @@ import WasmTypes
import struct WasmParser.Import

/// The backtrace of the trap.
struct Backtrace: CustomStringConvertible {
struct Backtrace: CustomStringConvertible, Sendable {
/// A symbol in the backtrace.
struct Symbol {
/// The function that the symbol represents.
let function: Function

/// The name of the symbol.
let name: String?
}
Expand Down
1 change: 0 additions & 1 deletion Sources/WasmKit/Execution/Execution.swift
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,6 @@ struct Execution {
let symbolName = store.nameRegistry.symbolicate(.wasm(function))
symbols.append(
Backtrace.Symbol(
function: Function(handle: .wasm(function), store: store),
name: symbolName
)
)
Expand Down
Loading