diff --git a/src/Context.cpp b/src/Context.cpp index 89bf0606..4686e663 100644 --- a/src/Context.cpp +++ b/src/Context.cpp @@ -199,7 +199,17 @@ py::object CContext::Evaluate(const std::string& src, CScriptPtr script = engine.Compile(src, name, line, col); - return script->Run(); + boost::python::api::object result = script->Run(); + + while (v8::platform::PumpMessageLoop( + CPlatform::GetPlatform(), + v8::Isolate::GetCurrent(), + v8::platform::MessageLoopBehavior::kDoNotWait + )) { + v8::Isolate::GetCurrent()->PerformMicrotaskCheckpoint(); + } + + return result; } py::object CContext::EvaluateW(const std::wstring& src, @@ -210,5 +220,15 @@ py::object CContext::EvaluateW(const std::wstring& src, CScriptPtr script = engine.CompileW(src, name, line, col); - return script->Run(); + boost::python::api::object result = script->Run(); + + while (v8::platform::PumpMessageLoop( + CPlatform::GetPlatform(), + v8::Isolate::GetCurrent(), + v8::platform::MessageLoopBehavior::kDoNotWait + )) { + v8::Isolate::GetCurrent()->PerformMicrotaskCheckpoint(); + } + + return result; } diff --git a/src/Platform.cpp b/src/Platform.cpp index 844cc605..34c121c5 100644 --- a/src/Platform.cpp +++ b/src/Platform.cpp @@ -20,3 +20,8 @@ void CPlatform::Init() inited = true; } + +v8::Platform *CPlatform::GetPlatform(void) +{ + return CPlatform::platform.get(); +} diff --git a/src/Platform.h b/src/Platform.h index ecdc1a38..d5cea0c6 100644 --- a/src/Platform.h +++ b/src/Platform.h @@ -29,4 +29,5 @@ class CPlatform CPlatform(std::string argv0) : argv(argv0) {}; ~CPlatform() {}; void Init(); + static v8::Platform *GetPlatform(void); };