diff --git a/ion/src/simulator/web/Makefile b/ion/src/simulator/web/Makefile index 6ed2f3151..98b634e8f 100644 --- a/ion/src/simulator/web/Makefile +++ b/ion/src/simulator/web/Makefile @@ -16,6 +16,7 @@ LDFLAGS += --pre-js ion/src/simulator/web/preamble_env.js ion_src += $(addprefix ion/src/simulator/web/, \ clipboard_helper.cpp \ exports.cpp \ + journal.cpp \ keyboard_callback.cpp \ window_callback.cpp \ ) @@ -24,7 +25,6 @@ ion_src += $(addprefix ion/src/simulator/shared/, \ dummy/language.cpp \ dummy/haptics_enabled.cpp \ haptics.cpp \ - journal.cpp \ ) ion_src += ion/src/shared/collect_registers.cpp diff --git a/ion/src/simulator/web/journal.cpp b/ion/src/simulator/web/journal.cpp new file mode 100644 index 000000000..85a988c95 --- /dev/null +++ b/ion/src/simulator/web/journal.cpp @@ -0,0 +1,58 @@ +#include "../shared/journal.h" +#include "../shared/journal/queue_journal.h" +#include + +namespace Ion { +namespace Simulator { +namespace Journal { + +using Ion::Events::Event; +using Ion::Events::None; + +class LogJournal : public Ion::Events::Journal { +public: + void pushEvent(Event e) override { + static bool lastEventWasNone = false; + if (e != None) { + EM_ASM({ + if (typeof Module.onIonEvent === "function") { + Module.onIonEvent($0); + } + }, static_cast(e)); + lastEventWasNone = true; + } else { + if (!lastEventWasNone) { + EM_ASM({ + if (typeof Module.onEpsilonIdle === "function") { + Module.onEpsilonIdle(); + } + }); + } + lastEventWasNone = true; + } + } + Event popEvent() override { + return None; + } + bool isEmpty() override { + return true; + } +}; + +void init() { + Events::logTo(logJournal()); +} + +Events::Journal * replayJournal() { + static QueueJournal journal; + return &journal; +} + +Ion::Events::Journal * logJournal() { + static LogJournal journal; + return &journal; +} + +} +} +}