@@ -249,7 +249,34 @@ export function makeWasi(options: WasiOptions) {
249249 path_filestat_get : ( ) : number => WASI_ENOSYS ,
250250 fd_prestat_get : ( ) : number => WASI_EBADF ,
251251 fd_prestat_dir_name : ( ) : number => WASI_ENOSYS ,
252- poll_oneoff : ( ) : number => WASI_ENOSYS ,
252+ poll_oneoff : (
253+ inPtr : number ,
254+ outPtr : number ,
255+ nsubscriptions : number ,
256+ neventsPtr : number ,
257+ ) : number => {
258+ // Test polyfill: emit a clock event for the first clock subscription
259+ // (so std::thread::sleep / time.sleep don't panic), but skip the
260+ // actual block to keep tests fast.
261+ try {
262+ const dv = new DataView ( buf ( ) ) ;
263+ for ( let i = 0 ; i < nsubscriptions ; i ++ ) {
264+ const o = inPtr + i * 48 ;
265+ const userdata = dv . getBigUint64 ( o , true ) ;
266+ const tag = dv . getUint8 ( o + 8 ) ;
267+ if ( tag !== 0 ) continue ;
268+ const u8 = new Uint8Array ( buf ( ) ) ;
269+ u8 . fill ( 0 , outPtr , outPtr + 32 ) ;
270+ dv . setBigUint64 ( outPtr , userdata , true ) ;
271+ dv . setInt32 ( neventsPtr , 1 , true ) ;
272+ return WASI_ESUCCESS ;
273+ }
274+ dv . setInt32 ( neventsPtr , 0 , true ) ;
275+ return WASI_ESUCCESS ;
276+ } catch {
277+ return WASI_ENOSYS ;
278+ }
279+ } ,
253280 sched_yield : ( ) : number => WASI_ESUCCESS ,
254281 } ;
255282}
0 commit comments