core-foundation.time ;
IN: core-foundation.run-loop
-: kCFRunLoopRunFinished 1 ; inline
-: kCFRunLoopRunStopped 2 ; inline
-: kCFRunLoopRunTimedOut 3 ; inline
-: kCFRunLoopRunHandledSource 4 ; inline
+CONSTANT: kCFRunLoopRunFinished 1
+CONSTANT: kCFRunLoopRunStopped 2
+CONSTANT: kCFRunLoopRunTimedOut 3
+CONSTANT: kCFRunLoopRunHandledSource 4
TYPEDEF: void* CFRunLoopRef
TYPEDEF: void* CFRunLoopSourceRef
: CFRunLoopDefaultMode ( -- alien )
#! Ugly, but we don't have static NSStrings
- \ CFRunLoopDefaultMode get-global dup expired? [
- drop
+ \ CFRunLoopDefaultMode [
"kCFRunLoopDefaultMode" <CFString>
- dup \ CFRunLoopDefaultMode set-global
- ] when ;
+ ] initialize-alien ;
TUPLE: run-loop fds sources timers ;
: <run-loop> ( -- run-loop )
V{ } clone V{ } clone V{ } clone \ run-loop boa ;
-SYMBOL: expiry-check
-
: run-loop ( -- run-loop )
- \ run-loop get-global not expiry-check get expired? or
- [
- 31337 <alien> expiry-check set-global
- <run-loop> dup \ run-loop set-global
- ] [ \ run-loop get-global ] if ;
+ \ run-loop [ <run-loop> ] initialize-alien ;
: add-source-to-run-loop ( source -- )
[ run-loop sources>> push ]
: (reset-timer) ( timer counter -- )
yield {
{ [ dup 0 = ] [ now ((reset-timer)) ] }
- { [ run-queue deque-empty? not ] [ 1- (reset-timer) ] }
+ { [ run-queue deque-empty? not ] [ 1 - (reset-timer) ] }
{ [ sleep-queue heap-empty? ] [ 5 minutes hence ((reset-timer)) ] }
[ sleep-queue heap-peek nip micros>timestamp ((reset-timer)) ]
} cond ;