From 9d537c6a480bbb8835aaae5c8a5918004442c3c6 Mon Sep 17 00:00:00 2001 From: Hannes Schulze Date: Sat, 4 Apr 2026 00:06:40 +0200 Subject: referenced interfaces --- lib/Wayland/Display.lean | 5 +++-- lib/Wayland/Native.lean | 6 +++--- 2 files changed, 6 insertions(+), 5 deletions(-) (limited to 'lib/Wayland') diff --git a/lib/Wayland/Display.lean b/lib/Wayland/Display.lean index 0a049b3..7bf55c5 100644 --- a/lib/Wayland/Display.lean +++ b/lib/Wayland/Display.lean @@ -281,13 +281,14 @@ private def MessageDesc.toNative (msg : MessageDesc) : Native.Message := /-- Ensure the given interface (and all of its dependencies) are registered in the display's `TypeMap`. -/ private def DisplayM.ensureInterface (ι : InterfaceName) [iface : ResolvedInterface ι] : DisplayM σ Unit := do let typeMap := (← read).typeMap - for ⟨ι', iface'⟩ in iface.referencedInterfaces do - if !(← typeMap.contains ι') then + if not (← typeMap.isComplete ι) then + for ⟨ι', iface'⟩ in iface.referencedInterfaces do typeMap.register { name := ι' version := iface'.version requests := iface'.requests.map MessageDesc.toNative events := iface'.events.map MessageDesc.toNative } + (setComplete := if ι' == ι then 1 else 0) /-- Get the `wl_display` instance within the display monad. -/ def DisplayM.getDisplay : DisplayM σ (Object "wl_display") := do diff --git a/lib/Wayland/Native.lean b/lib/Wayland/Native.lean index f8d4c53..430472b 100644 --- a/lib/Wayland/Native.lean +++ b/lib/Wayland/Native.lean @@ -73,11 +73,11 @@ opaque EventLoop.poll : (eventLoop : @& (EventLoop M)) → IO (Option M) @[extern "waylean_type_map_new"] opaque TypeMap.new : IO TypeMap -@[extern "waylean_type_map_contains"] -opaque TypeMap.contains : (typeMap : @& TypeMap) → (ifaceName : @& String) → IO Bool +@[extern "waylean_type_map_is_complete"] +opaque TypeMap.isComplete : (typeMap : @& TypeMap) → (ifaceName : @& String) → IO Bool @[extern "waylean_type_map_register"] -opaque TypeMap.register : (typeMap : @& TypeMap) → (ifaceDesc : @& Interface) → IO Unit +opaque TypeMap.register : (typeMap : @& TypeMap) → (ifaceDesc : @& Interface) → (setComplete : UInt32) → IO Unit @[extern "waylean_argument_buffer_new"] opaque ArgumentBuffer.new : IO ArgumentBuffer -- cgit v1.3.1