line |
stmt |
bran |
cond |
sub |
pod |
time |
code |
1
|
|
|
|
|
|
|
#include |
2
|
|
|
|
|
|
|
#include "pl_eventloop.h" |
3
|
|
|
|
|
|
|
#include "c_eventloop.h" |
4
|
|
|
|
|
|
|
|
5
|
262
|
|
|
|
|
|
int pl_register_eventloop(Duk* duk) |
6
|
|
|
|
|
|
|
{ |
7
|
|
|
|
|
|
|
/* Register our event loop dispatcher, otherwise calls to */ |
8
|
|
|
|
|
|
|
/* dispatch_function_in_event_loop will not work. */ |
9
|
262
|
|
|
|
|
|
eventloop_register(duk->ctx); |
10
|
262
|
|
|
|
|
|
return 0; |
11
|
|
|
|
|
|
|
} |
12
|
|
|
|
|
|
|
|
13
|
3
|
|
|
|
|
|
int pl_run_function_in_event_loop(Duk* duk, const char* func) |
14
|
|
|
|
|
|
|
{ |
15
|
3
|
|
|
|
|
|
duk_context* ctx = duk->ctx; |
16
|
3
|
|
|
|
|
|
duk_int_t rc = 0; |
17
|
|
|
|
|
|
|
|
18
|
|
|
|
|
|
|
/* Start a zero timer which will call our function from the event loop. */ |
19
|
3
|
|
|
|
|
|
duk_push_sprintf(ctx, "setTimeout(function() { %s(); }, 0);", func); |
20
|
3
|
|
|
|
|
|
rc = duk_peval(ctx); |
21
|
3
|
50
|
|
|
|
|
if (rc != DUK_EXEC_SUCCESS) { |
22
|
0
|
|
|
|
|
|
croak("Could not eval JS event loop dispatcher for %s: %d - %s\n", |
23
|
|
|
|
|
|
|
func, rc, duk_safe_to_string(ctx, -1)); |
24
|
|
|
|
|
|
|
} |
25
|
3
|
|
|
|
|
|
duk_pop(ctx); /* pop result / error */ |
26
|
|
|
|
|
|
|
|
27
|
|
|
|
|
|
|
/* Launch eventloop; this call only returns after the eventloop terminates. */ |
28
|
3
|
|
|
|
|
|
rc = duk_safe_call(ctx, eventloop_run, duk, 0 /*nargs*/, 1 /*nrets*/); |
29
|
3
|
50
|
|
|
|
|
if (rc != DUK_EXEC_SUCCESS) { |
30
|
0
|
|
|
|
|
|
croak("JS event loop run failed: %d - %s\n", |
31
|
|
|
|
|
|
|
rc, duk_safe_to_string(ctx, -1)); |
32
|
|
|
|
|
|
|
} |
33
|
3
|
|
|
|
|
|
duk_pop(ctx); |
34
|
|
|
|
|
|
|
|
35
|
3
|
|
|
|
|
|
return 0; |
36
|
|
|
|
|
|
|
} |