emscripten/tests/emterpreter_async_bad.cpp

51 строка
1.1 KiB
C++

#include<stdio.h>
#include<emscripten.h>
#include<assert.h>
extern "C" {
void EMSCRIPTEN_KEEPALIVE finish(int result) {
REPORT_RESULT();
}
int counter = 0;
void __attribute__((noinline)) run_loop() {
// infinite main loop, turned async using emterpreter
while (1) {
printf("frame: %d\n", ++counter);
emscripten_sleep(100);
if (counter == 10) {
finish(123); // this should not happen, we should fail!
break;
}
}
}
void __attribute__((noinline)) middle() {
run_loop();
printf("after run_loop, counter: %d\n", counter);
assert(counter == 10);
assert(0); // we should never get here!
}
int main() {
EM_ASM({
window.onerror = function(err) {
assert(err.toString().indexOf('This error happened during an emterpreter-async save or load of the stack') > 0, 'expect good error message');
// manually REPORT_RESULT; we can't call back into native code at this point, assertions would trigger
xhr = new XMLHttpRequest();
xhr.open("GET", "http://localhost:8888/report_result?1");
xhr.onload = xhr.onerror = function() {
window.close();
};
xhr.send();
};
});
middle();
}
}