Skip to content

Commit ac56b0d

Browse files
committed
Add Event type to WASIAbi
To test Swift Concurrency with WebAssembly System Interface, an Event API is missing from WasmKit runtime, as specified in the standard specification https://github.com/WebAssembly/WASI/blob/main/legacy/preview1/docs.md#-event-record This change adds Event with the ABI as prescribed in the standard, allowing Swift Concurrency tests to utilize timer events.
1 parent fabd82b commit ac56b0d

File tree

1 file changed

+47
-0
lines changed

1 file changed

+47
-0
lines changed

Sources/WASI/WASI.swift

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -517,6 +517,53 @@ enum WASIAbi {
517517
}
518518
}
519519

520+
struct Event: Equatable, GuestPointee {
521+
struct FdReadWrite: Equatable, GuestPointee {
522+
struct Flags: OptionSet, GuestPointee {
523+
let rawValue: UInt16
524+
static let hangup = Self(rawValue: 1)
525+
}
526+
let nBytes: FileSize
527+
let flags: Flags
528+
static let sizeInGuest: UInt32 = 16
529+
static let alignInGuest: UInt32 = 8
530+
531+
static func readFromGuest(_ pointer: UnsafeGuestRawPointer) -> Self {
532+
var pointer = pointer
533+
return .init(nBytes: FileSize.readFromGuest(&pointer), flags: Flags.readFromGuest(&pointer))
534+
}
535+
static func writeToGuest(at pointer: UnsafeGuestRawPointer, value: Self) {
536+
var pointer = pointer
537+
FileSize.writeToGuest(at: &pointer, value: value.nBytes)
538+
Flags.writeToGuest(at: &pointer, value: value.flags)
539+
}
540+
}
541+
542+
let userData: UserData
543+
let error: Errno
544+
let eventType: EventType
545+
let fdReadWrite: FdReadWrite
546+
static let sizeInGuest: UInt32 = 32
547+
static let alignInGuest: UInt32 = 8
548+
549+
static func readFromGuest(_ pointer: UnsafeGuestRawPointer) -> Self {
550+
var pointer = pointer
551+
return .init(
552+
userData: .readFromGuest(&pointer),
553+
error: .readFromGuest(&pointer),
554+
eventType: .readFromGuest(&pointer),
555+
fdReadWrite: .readFromGuest(&pointer)
556+
)
557+
}
558+
static func writeToGuest(at pointer: UnsafeGuestRawPointer, value: Self) {
559+
var pointer = pointer
560+
UserData.writeToGuest(at: &pointer, value: value.userData)
561+
Errno.writeToGuest(at: &pointer, value: value.error)
562+
EventType.writeToGuest(at: &pointer, value: value.eventType)
563+
FdReadWrite.writeToGuest(at: &pointer, value: value.fdReadWrite)
564+
}
565+
}
566+
520567
enum ClockId: UInt32 {
521568
/// The clock measuring real time. Time value zero corresponds with
522569
/// 1970-01-01T00:00:00Z.

0 commit comments

Comments
 (0)