Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
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
8 changes: 1 addition & 7 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 @@ -121,7 +116,6 @@ 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/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/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
4 changes: 2 additions & 2 deletions Sources/WasmParser/WasmParser.swift
Original file line number Diff line number Diff line change
Expand Up @@ -175,7 +175,7 @@ public struct ExpressionParser {
let WASM_MAGIC: [UInt8] = [0x00, 0x61, 0x73, 0x6D]

/// Flags for enabling/disabling WebAssembly features
public struct WasmFeatureSet: OptionSet {
public struct WasmFeatureSet: OptionSet, Sendable {
/// The raw value of the feature set
public let rawValue: Int

Expand Down Expand Up @@ -206,7 +206,7 @@ public struct WasmFeatureSet: OptionSet {
/// An error that occurs during parsing of a WebAssembly binary
public struct WasmParserError: Swift.Error {
@usableFromInline
struct Message {
struct Message: Sendable {
let text: String

init(_ text: String) {
Expand Down
2 changes: 1 addition & 1 deletion Sources/WasmParser/WasmTypes.swift
Original file line number Diff line number Diff line change
Expand Up @@ -189,7 +189,7 @@ public struct Global: Equatable {
/// <https://webassembly.github.io/spec/core/syntax/modules.html#element-segments>
public struct ElementSegment: Equatable {
@usableFromInline
struct Flag: OptionSet {
struct Flag: OptionSet, Sendable {
@usableFromInline let rawValue: UInt32

@inlinable
Expand Down
Loading
Loading