File: embind_lib_with_asyncify.cpp

package info (click to toggle)
emscripten 3.1.69%2Bdfsg-3
  • links: PTS, VCS
  • area: main
  • in suites: trixie
  • size: 121,860 kB
  • sloc: ansic: 636,110; cpp: 425,974; javascript: 78,401; python: 58,404; sh: 49,154; pascal: 5,237; makefile: 3,366; asm: 2,415; lisp: 1,869
file content (66 lines) | stat: -rw-r--r-- 1,278 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
#include <assert.h>

#include <string>

#include <emscripten.h>
#include <emscripten/bind.h>

using namespace emscripten;

EM_JS(int, sleep_and_return, (int x), {
	return Asyncify.handleSleep(wakeUp => setTimeout(wakeUp, 10, x));
});

void delayed_throw() {
	sleep_and_return(0);
	EM_ASM({ throw new Error('my message'); });
}

int foo() {
	return sleep_and_return(10);
}

class Bar {
public:
	Bar(): x(sleep_and_return(20)) {}

	int getX() const {
		return x;
	}

	int method() {
		return sleep_and_return(30);
	}

	int method_without_async_calls() {
		return 40;
	}

	void void_method_without_async_calls() {}

	void void_method_with_async_calls() {
		sleep_and_return(0);
	}

	static int static_method() {
		return sleep_and_return(50);
	}

private:
	int x;
};

EMSCRIPTEN_BINDINGS(embind_async) {
	function("delayed_throw", &delayed_throw);
	function("foo", &foo);

	class_<Bar>("Bar")
		.constructor<>()
		.function("method", &Bar::method)
		.function("method_without_async_calls", &Bar::method_without_async_calls)
		.function("void_method_without_async_calls", &Bar::void_method_without_async_calls)
		.function("void_method_with_async_calls", &Bar::void_method_with_async_calls)
		.class_function("static_method", &Bar::static_method)
		.property("x", &Bar::getX)
		;
}