mirror of
https://github.com/momo5502/emulator.git
synced 2026-01-11 16:46:16 +00:00
Display application success in playground
This commit is contained in:
@@ -75,7 +75,9 @@ function runEmulation(file, options, persist) {
|
||||
FS.mkdir("/root");
|
||||
FS.mount(IDBFS, {}, "/root");
|
||||
FS.syncfs(true, function (_) {
|
||||
Module.callMain(mainArguments);
|
||||
setTimeout(() => {
|
||||
Module.callMain(mainArguments);
|
||||
}, 0);
|
||||
});
|
||||
},
|
||||
print: logLine,
|
||||
|
||||
@@ -10,6 +10,10 @@ function getStateName(state: State) {
|
||||
return "Paused";
|
||||
case State.Running:
|
||||
return "Running";
|
||||
case State.Failed:
|
||||
return "Failed";
|
||||
case State.Success:
|
||||
return "Success";
|
||||
default:
|
||||
return "";
|
||||
}
|
||||
@@ -17,12 +21,16 @@ function getStateName(state: State) {
|
||||
|
||||
function getStateColor(state: State) {
|
||||
switch (state) {
|
||||
case State.Stopped:
|
||||
case State.Failed:
|
||||
return "bg-orange-600";
|
||||
case State.Paused:
|
||||
return "bg-amber-500";
|
||||
case State.Running:
|
||||
case State.Success:
|
||||
return "bg-lime-600";
|
||||
case State.Stopped:
|
||||
return "bg-yellow-800";
|
||||
case State.Running:
|
||||
return "bg-sky-500";
|
||||
default:
|
||||
return "";
|
||||
}
|
||||
@@ -31,10 +39,14 @@ function getStateColor(state: State) {
|
||||
function getStateEmoji(state: State) {
|
||||
switch (state) {
|
||||
case State.Stopped:
|
||||
return "🔴";
|
||||
return "🟤";
|
||||
case State.Paused:
|
||||
return "🟡";
|
||||
case State.Running:
|
||||
return "🔵";
|
||||
case State.Failed:
|
||||
return "🔴";
|
||||
case State.Success:
|
||||
return "🟢";
|
||||
default:
|
||||
return "";
|
||||
|
||||
@@ -9,6 +9,20 @@ export enum EmulationState {
|
||||
Stopped,
|
||||
Paused,
|
||||
Running,
|
||||
Success,
|
||||
Failed,
|
||||
}
|
||||
|
||||
export function isFinalState(state: EmulationState) {
|
||||
switch (state) {
|
||||
case EmulationState.Stopped:
|
||||
case EmulationState.Success:
|
||||
case EmulationState.Failed:
|
||||
return true;
|
||||
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
function base64Encode(uint8Array: Uint8Array): string {
|
||||
@@ -50,6 +64,7 @@ export class Emulator {
|
||||
terminateReject: (reason?: any) => void;
|
||||
worker: Worker;
|
||||
state: EmulationState = EmulationState.Stopped;
|
||||
exit_status: number | null = null;
|
||||
|
||||
constructor(logHandler: LogHandler, stateChangeHandler: StateChangeHandler) {
|
||||
this.logHandler = logHandler;
|
||||
@@ -142,8 +157,10 @@ export class Emulator {
|
||||
} else if (event.data.message == "event") {
|
||||
this._onEvent(decodeEvent(event.data.data));
|
||||
} else if (event.data.message == "end") {
|
||||
this._setState(EmulationState.Stopped);
|
||||
this.terminateResolve(0);
|
||||
this._setState(
|
||||
this.exit_status === 0 ? EmulationState.Success : EmulationState.Failed,
|
||||
);
|
||||
this.terminateResolve(this.exit_status);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -154,6 +171,11 @@ export class Emulator {
|
||||
event.event as fbDebugger.GetStateResponseT,
|
||||
);
|
||||
break;
|
||||
case fbDebugger.Event.ApplicationExit:
|
||||
this._handle_application_exit(
|
||||
event.event as fbDebugger.ApplicationExitT,
|
||||
);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -162,6 +184,10 @@ export class Emulator {
|
||||
this.stateChangeHandler(this.state);
|
||||
}
|
||||
|
||||
_handle_application_exit(info: fbDebugger.ApplicationExitT) {
|
||||
this.exit_status = info.exitStatus;
|
||||
}
|
||||
|
||||
_handle_state_response(response: fbDebugger.GetStateResponseT) {
|
||||
switch (response.state) {
|
||||
case fbDebugger.State.None:
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
|
||||
/* eslint-disable @typescript-eslint/no-unused-vars, @typescript-eslint/no-explicit-any, @typescript-eslint/no-non-null-assertion */
|
||||
|
||||
export { ApplicationExit, ApplicationExitT } from './debugger/application-exit.js';
|
||||
export { DebugEvent, DebugEventT } from './debugger/debug-event.js';
|
||||
export { Event } from './debugger/event.js';
|
||||
export { GetStateRequest, GetStateRequestT } from './debugger/get-state-request.js';
|
||||
|
||||
86
page/src/fb/debugger/application-exit.ts
Normal file
86
page/src/fb/debugger/application-exit.ts
Normal file
@@ -0,0 +1,86 @@
|
||||
// automatically generated by the FlatBuffers compiler, do not modify
|
||||
|
||||
/* eslint-disable @typescript-eslint/no-unused-vars, @typescript-eslint/no-explicit-any, @typescript-eslint/no-non-null-assertion */
|
||||
|
||||
import * as flatbuffers from 'flatbuffers';
|
||||
|
||||
|
||||
|
||||
export class ApplicationExit implements flatbuffers.IUnpackableObject<ApplicationExitT> {
|
||||
bb: flatbuffers.ByteBuffer|null = null;
|
||||
bb_pos = 0;
|
||||
__init(i:number, bb:flatbuffers.ByteBuffer):ApplicationExit {
|
||||
this.bb_pos = i;
|
||||
this.bb = bb;
|
||||
return this;
|
||||
}
|
||||
|
||||
static getRootAsApplicationExit(bb:flatbuffers.ByteBuffer, obj?:ApplicationExit):ApplicationExit {
|
||||
return (obj || new ApplicationExit()).__init(bb.readInt32(bb.position()) + bb.position(), bb);
|
||||
}
|
||||
|
||||
static getSizePrefixedRootAsApplicationExit(bb:flatbuffers.ByteBuffer, obj?:ApplicationExit):ApplicationExit {
|
||||
bb.setPosition(bb.position() + flatbuffers.SIZE_PREFIX_LENGTH);
|
||||
return (obj || new ApplicationExit()).__init(bb.readInt32(bb.position()) + bb.position(), bb);
|
||||
}
|
||||
|
||||
exitStatus():number|null {
|
||||
const offset = this.bb!.__offset(this.bb_pos, 4);
|
||||
return offset ? this.bb!.readUint32(this.bb_pos + offset) : null;
|
||||
}
|
||||
|
||||
mutate_exit_status(value:number):boolean {
|
||||
const offset = this.bb!.__offset(this.bb_pos, 4);
|
||||
|
||||
if (offset === 0) {
|
||||
return false;
|
||||
}
|
||||
|
||||
this.bb!.writeUint32(this.bb_pos + offset, value);
|
||||
return true;
|
||||
}
|
||||
|
||||
static startApplicationExit(builder:flatbuffers.Builder) {
|
||||
builder.startObject(1);
|
||||
}
|
||||
|
||||
static addExitStatus(builder:flatbuffers.Builder, exitStatus:number) {
|
||||
builder.addFieldInt32(0, exitStatus, null);
|
||||
}
|
||||
|
||||
static endApplicationExit(builder:flatbuffers.Builder):flatbuffers.Offset {
|
||||
const offset = builder.endObject();
|
||||
return offset;
|
||||
}
|
||||
|
||||
static createApplicationExit(builder:flatbuffers.Builder, exitStatus:number|null):flatbuffers.Offset {
|
||||
ApplicationExit.startApplicationExit(builder);
|
||||
if (exitStatus !== null)
|
||||
ApplicationExit.addExitStatus(builder, exitStatus);
|
||||
return ApplicationExit.endApplicationExit(builder);
|
||||
}
|
||||
|
||||
unpack(): ApplicationExitT {
|
||||
return new ApplicationExitT(
|
||||
this.exitStatus()
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
unpackTo(_o: ApplicationExitT): void {
|
||||
_o.exitStatus = this.exitStatus();
|
||||
}
|
||||
}
|
||||
|
||||
export class ApplicationExitT implements flatbuffers.IGeneratedObject {
|
||||
constructor(
|
||||
public exitStatus: number|null = null
|
||||
){}
|
||||
|
||||
|
||||
pack(builder:flatbuffers.Builder): flatbuffers.Offset {
|
||||
return ApplicationExit.createApplicationExit(builder,
|
||||
this.exitStatus
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -4,6 +4,7 @@
|
||||
|
||||
import * as flatbuffers from 'flatbuffers';
|
||||
|
||||
import { ApplicationExit, ApplicationExitT } from '../debugger/application-exit.js';
|
||||
import { Event, unionToEvent, unionListToEvent } from '../debugger/event.js';
|
||||
import { GetStateRequest, GetStateRequestT } from '../debugger/get-state-request.js';
|
||||
import { GetStateResponse, GetStateResponseT } from '../debugger/get-state-response.js';
|
||||
@@ -104,7 +105,7 @@ unpackTo(_o: DebugEventT): void {
|
||||
export class DebugEventT implements flatbuffers.IGeneratedObject {
|
||||
constructor(
|
||||
public eventType: Event = Event.NONE,
|
||||
public event: GetStateRequestT|GetStateResponseT|PauseRequestT|ReadMemoryRequestT|ReadMemoryResponseT|ReadRegisterRequestT|ReadRegisterResponseT|RunRequestT|WriteMemoryRequestT|WriteMemoryResponseT|WriteRegisterRequestT|WriteRegisterResponseT|null = null
|
||||
public event: ApplicationExitT|GetStateRequestT|GetStateResponseT|PauseRequestT|ReadMemoryRequestT|ReadMemoryResponseT|ReadRegisterRequestT|ReadRegisterResponseT|RunRequestT|WriteMemoryRequestT|WriteMemoryResponseT|WriteRegisterRequestT|WriteRegisterResponseT|null = null
|
||||
){}
|
||||
|
||||
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
|
||||
/* eslint-disable @typescript-eslint/no-unused-vars, @typescript-eslint/no-explicit-any, @typescript-eslint/no-non-null-assertion */
|
||||
|
||||
import { ApplicationExit, ApplicationExitT } from '../debugger/application-exit.js';
|
||||
import { GetStateRequest, GetStateRequestT } from '../debugger/get-state-request.js';
|
||||
import { GetStateResponse, GetStateResponseT } from '../debugger/get-state-response.js';
|
||||
import { PauseRequest, PauseRequestT } from '../debugger/pause-request.js';
|
||||
@@ -29,13 +30,14 @@ export enum Event {
|
||||
WriteRegisterRequest = 9,
|
||||
WriteRegisterResponse = 10,
|
||||
ReadRegisterRequest = 11,
|
||||
ReadRegisterResponse = 12
|
||||
ReadRegisterResponse = 12,
|
||||
ApplicationExit = 13
|
||||
}
|
||||
|
||||
export function unionToEvent(
|
||||
type: Event,
|
||||
accessor: (obj:GetStateRequest|GetStateResponse|PauseRequest|ReadMemoryRequest|ReadMemoryResponse|ReadRegisterRequest|ReadRegisterResponse|RunRequest|WriteMemoryRequest|WriteMemoryResponse|WriteRegisterRequest|WriteRegisterResponse) => GetStateRequest|GetStateResponse|PauseRequest|ReadMemoryRequest|ReadMemoryResponse|ReadRegisterRequest|ReadRegisterResponse|RunRequest|WriteMemoryRequest|WriteMemoryResponse|WriteRegisterRequest|WriteRegisterResponse|null
|
||||
): GetStateRequest|GetStateResponse|PauseRequest|ReadMemoryRequest|ReadMemoryResponse|ReadRegisterRequest|ReadRegisterResponse|RunRequest|WriteMemoryRequest|WriteMemoryResponse|WriteRegisterRequest|WriteRegisterResponse|null {
|
||||
accessor: (obj:ApplicationExit|GetStateRequest|GetStateResponse|PauseRequest|ReadMemoryRequest|ReadMemoryResponse|ReadRegisterRequest|ReadRegisterResponse|RunRequest|WriteMemoryRequest|WriteMemoryResponse|WriteRegisterRequest|WriteRegisterResponse) => ApplicationExit|GetStateRequest|GetStateResponse|PauseRequest|ReadMemoryRequest|ReadMemoryResponse|ReadRegisterRequest|ReadRegisterResponse|RunRequest|WriteMemoryRequest|WriteMemoryResponse|WriteRegisterRequest|WriteRegisterResponse|null
|
||||
): ApplicationExit|GetStateRequest|GetStateResponse|PauseRequest|ReadMemoryRequest|ReadMemoryResponse|ReadRegisterRequest|ReadRegisterResponse|RunRequest|WriteMemoryRequest|WriteMemoryResponse|WriteRegisterRequest|WriteRegisterResponse|null {
|
||||
switch(Event[type]) {
|
||||
case 'NONE': return null;
|
||||
case 'PauseRequest': return accessor(new PauseRequest())! as PauseRequest;
|
||||
@@ -50,15 +52,16 @@ export function unionToEvent(
|
||||
case 'WriteRegisterResponse': return accessor(new WriteRegisterResponse())! as WriteRegisterResponse;
|
||||
case 'ReadRegisterRequest': return accessor(new ReadRegisterRequest())! as ReadRegisterRequest;
|
||||
case 'ReadRegisterResponse': return accessor(new ReadRegisterResponse())! as ReadRegisterResponse;
|
||||
case 'ApplicationExit': return accessor(new ApplicationExit())! as ApplicationExit;
|
||||
default: return null;
|
||||
}
|
||||
}
|
||||
|
||||
export function unionListToEvent(
|
||||
type: Event,
|
||||
accessor: (index: number, obj:GetStateRequest|GetStateResponse|PauseRequest|ReadMemoryRequest|ReadMemoryResponse|ReadRegisterRequest|ReadRegisterResponse|RunRequest|WriteMemoryRequest|WriteMemoryResponse|WriteRegisterRequest|WriteRegisterResponse) => GetStateRequest|GetStateResponse|PauseRequest|ReadMemoryRequest|ReadMemoryResponse|ReadRegisterRequest|ReadRegisterResponse|RunRequest|WriteMemoryRequest|WriteMemoryResponse|WriteRegisterRequest|WriteRegisterResponse|null,
|
||||
accessor: (index: number, obj:ApplicationExit|GetStateRequest|GetStateResponse|PauseRequest|ReadMemoryRequest|ReadMemoryResponse|ReadRegisterRequest|ReadRegisterResponse|RunRequest|WriteMemoryRequest|WriteMemoryResponse|WriteRegisterRequest|WriteRegisterResponse) => ApplicationExit|GetStateRequest|GetStateResponse|PauseRequest|ReadMemoryRequest|ReadMemoryResponse|ReadRegisterRequest|ReadRegisterResponse|RunRequest|WriteMemoryRequest|WriteMemoryResponse|WriteRegisterRequest|WriteRegisterResponse|null,
|
||||
index: number
|
||||
): GetStateRequest|GetStateResponse|PauseRequest|ReadMemoryRequest|ReadMemoryResponse|ReadRegisterRequest|ReadRegisterResponse|RunRequest|WriteMemoryRequest|WriteMemoryResponse|WriteRegisterRequest|WriteRegisterResponse|null {
|
||||
): ApplicationExit|GetStateRequest|GetStateResponse|PauseRequest|ReadMemoryRequest|ReadMemoryResponse|ReadRegisterRequest|ReadRegisterResponse|RunRequest|WriteMemoryRequest|WriteMemoryResponse|WriteRegisterRequest|WriteRegisterResponse|null {
|
||||
switch(Event[type]) {
|
||||
case 'NONE': return null;
|
||||
case 'PauseRequest': return accessor(index, new PauseRequest())! as PauseRequest;
|
||||
@@ -73,6 +76,7 @@ export function unionListToEvent(
|
||||
case 'WriteRegisterResponse': return accessor(index, new WriteRegisterResponse())! as WriteRegisterResponse;
|
||||
case 'ReadRegisterRequest': return accessor(index, new ReadRegisterRequest())! as ReadRegisterRequest;
|
||||
case 'ReadRegisterResponse': return accessor(index, new ReadRegisterResponse())! as ReadRegisterResponse;
|
||||
case 'ApplicationExit': return accessor(index, new ApplicationExit())! as ApplicationExit;
|
||||
default: return null;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,7 +2,7 @@ import React from "react";
|
||||
|
||||
import { Output } from "@/components/output";
|
||||
|
||||
import { Emulator, EmulationState } from "./emulator";
|
||||
import { Emulator, EmulationState, isFinalState } from "./emulator";
|
||||
import { Filesystem, setupFilesystem } from "./filesystem";
|
||||
|
||||
import "./App.css";
|
||||
@@ -108,7 +108,7 @@ export class Playground extends React.Component<
|
||||
}
|
||||
|
||||
_onEmulatorStateChanged(s: EmulationState, persistFs: boolean) {
|
||||
if (s == EmulationState.Stopped && persistFs) {
|
||||
if (isFinalState(s) && persistFs) {
|
||||
this.setState({ filesystemPromise: null, filesystem: null });
|
||||
this.initFilesys(true);
|
||||
} else {
|
||||
@@ -192,7 +192,7 @@ export class Playground extends React.Component<
|
||||
(l) => this.logLines(l),
|
||||
(s) => this._onEmulatorStateChanged(s, persistFs),
|
||||
);
|
||||
new_emulator.onTerminate().then(() => this.setState({ emulator: null }));
|
||||
//new_emulator.onTerminate().then(() => this.setState({ emulator: null }));
|
||||
|
||||
this.setState({ emulator: new_emulator, application: userFile });
|
||||
|
||||
@@ -213,7 +213,10 @@ export class Playground extends React.Component<
|
||||
</Button>
|
||||
|
||||
<Button
|
||||
disabled={!this.state.emulator}
|
||||
disabled={
|
||||
!this.state.emulator ||
|
||||
isFinalState(this.state.emulator.getState())
|
||||
}
|
||||
size="sm"
|
||||
variant="secondary"
|
||||
className="fancy"
|
||||
@@ -223,7 +226,10 @@ export class Playground extends React.Component<
|
||||
</Button>
|
||||
<Button
|
||||
size="sm"
|
||||
disabled={!this.state.emulator}
|
||||
disabled={
|
||||
!this.state.emulator ||
|
||||
isFinalState(this.state.emulator.getState())
|
||||
}
|
||||
variant="secondary"
|
||||
className="fancy"
|
||||
onClick={this.toggleEmulatorState}
|
||||
|
||||
@@ -9,10 +9,15 @@
|
||||
#include "snapshot.hpp"
|
||||
#include "analysis.hpp"
|
||||
|
||||
#include <utils/finally.hpp>
|
||||
#include <utils/interupt_handler.hpp>
|
||||
|
||||
#include <cstdio>
|
||||
|
||||
#ifdef OS_EMSCRIPTEN
|
||||
#include <event_handler.hpp>
|
||||
#endif
|
||||
|
||||
namespace
|
||||
{
|
||||
struct analysis_options : analysis_settings
|
||||
@@ -132,6 +137,13 @@ namespace
|
||||
win_emu.stop();
|
||||
}};
|
||||
|
||||
std::optional<NTSTATUS> exit_status{};
|
||||
#ifdef OS_EMSCRIPTEN
|
||||
const auto _1 = utils::finally([&] {
|
||||
debugger::handle_exit(exit_status); //
|
||||
});
|
||||
#endif
|
||||
|
||||
try
|
||||
{
|
||||
if (options.use_gdb)
|
||||
@@ -182,7 +194,7 @@ namespace
|
||||
throw;
|
||||
}
|
||||
|
||||
const auto exit_status = win_emu.process.exit_status;
|
||||
exit_status = win_emu.process.exit_status;
|
||||
if (!exit_status.has_value())
|
||||
{
|
||||
do_post_emulation_work(c);
|
||||
|
||||
@@ -230,4 +230,11 @@ namespace debugger
|
||||
suspend_execution(2ms);
|
||||
}
|
||||
}
|
||||
|
||||
void handle_exit(std::optional<NTSTATUS> exit_status)
|
||||
{
|
||||
Debugger::ApplicationExitT response{};
|
||||
response.exit_status = exit_status;
|
||||
send_event(response);
|
||||
}
|
||||
}
|
||||
@@ -18,4 +18,5 @@ namespace debugger
|
||||
};
|
||||
|
||||
void handle_events(event_context& c);
|
||||
void handle_exit(std::optional<NTSTATUS> exit_status);
|
||||
}
|
||||
|
||||
@@ -59,6 +59,10 @@ table ReadRegisterResponse {
|
||||
data: [ubyte];
|
||||
}
|
||||
|
||||
table ApplicationExit {
|
||||
exit_status: uint32 = null;
|
||||
}
|
||||
|
||||
union Event {
|
||||
PauseRequest,
|
||||
RunRequest,
|
||||
@@ -72,6 +76,7 @@ union Event {
|
||||
WriteRegisterResponse,
|
||||
ReadRegisterRequest,
|
||||
ReadRegisterResponse,
|
||||
ApplicationExit,
|
||||
}
|
||||
|
||||
table DebugEvent {
|
||||
|
||||
@@ -63,6 +63,10 @@ struct ReadRegisterResponse;
|
||||
struct ReadRegisterResponseBuilder;
|
||||
struct ReadRegisterResponseT;
|
||||
|
||||
struct ApplicationExit;
|
||||
struct ApplicationExitBuilder;
|
||||
struct ApplicationExitT;
|
||||
|
||||
struct DebugEvent;
|
||||
struct DebugEventBuilder;
|
||||
struct DebugEventT;
|
||||
@@ -114,11 +118,12 @@ enum Event : uint8_t {
|
||||
Event_WriteRegisterResponse = 10,
|
||||
Event_ReadRegisterRequest = 11,
|
||||
Event_ReadRegisterResponse = 12,
|
||||
Event_ApplicationExit = 13,
|
||||
Event_MIN = Event_NONE,
|
||||
Event_MAX = Event_ReadRegisterResponse
|
||||
Event_MAX = Event_ApplicationExit
|
||||
};
|
||||
|
||||
inline const Event (&EnumValuesEvent())[13] {
|
||||
inline const Event (&EnumValuesEvent())[14] {
|
||||
static const Event values[] = {
|
||||
Event_NONE,
|
||||
Event_PauseRequest,
|
||||
@@ -132,13 +137,14 @@ inline const Event (&EnumValuesEvent())[13] {
|
||||
Event_WriteRegisterRequest,
|
||||
Event_WriteRegisterResponse,
|
||||
Event_ReadRegisterRequest,
|
||||
Event_ReadRegisterResponse
|
||||
Event_ReadRegisterResponse,
|
||||
Event_ApplicationExit
|
||||
};
|
||||
return values;
|
||||
}
|
||||
|
||||
inline const char * const *EnumNamesEvent() {
|
||||
static const char * const names[14] = {
|
||||
static const char * const names[15] = {
|
||||
"NONE",
|
||||
"PauseRequest",
|
||||
"RunRequest",
|
||||
@@ -152,13 +158,14 @@ inline const char * const *EnumNamesEvent() {
|
||||
"WriteRegisterResponse",
|
||||
"ReadRegisterRequest",
|
||||
"ReadRegisterResponse",
|
||||
"ApplicationExit",
|
||||
nullptr
|
||||
};
|
||||
return names;
|
||||
}
|
||||
|
||||
inline const char *EnumNameEvent(Event e) {
|
||||
if (::flatbuffers::IsOutRange(e, Event_NONE, Event_ReadRegisterResponse)) return "";
|
||||
if (::flatbuffers::IsOutRange(e, Event_NONE, Event_ApplicationExit)) return "";
|
||||
const size_t index = static_cast<size_t>(e);
|
||||
return EnumNamesEvent()[index];
|
||||
}
|
||||
@@ -215,6 +222,10 @@ template<> struct EventTraits<Debugger::ReadRegisterResponse> {
|
||||
static const Event enum_value = Event_ReadRegisterResponse;
|
||||
};
|
||||
|
||||
template<> struct EventTraits<Debugger::ApplicationExit> {
|
||||
static const Event enum_value = Event_ApplicationExit;
|
||||
};
|
||||
|
||||
template<typename T> struct EventUnionTraits {
|
||||
static const Event enum_value = Event_NONE;
|
||||
};
|
||||
@@ -267,6 +278,10 @@ template<> struct EventUnionTraits<Debugger::ReadRegisterResponseT> {
|
||||
static const Event enum_value = Event_ReadRegisterResponse;
|
||||
};
|
||||
|
||||
template<> struct EventUnionTraits<Debugger::ApplicationExitT> {
|
||||
static const Event enum_value = Event_ApplicationExit;
|
||||
};
|
||||
|
||||
struct EventUnion {
|
||||
Event type;
|
||||
void *value;
|
||||
@@ -393,6 +408,14 @@ struct EventUnion {
|
||||
return type == Event_ReadRegisterResponse ?
|
||||
reinterpret_cast<const Debugger::ReadRegisterResponseT *>(value) : nullptr;
|
||||
}
|
||||
Debugger::ApplicationExitT *AsApplicationExit() {
|
||||
return type == Event_ApplicationExit ?
|
||||
reinterpret_cast<Debugger::ApplicationExitT *>(value) : nullptr;
|
||||
}
|
||||
const Debugger::ApplicationExitT *AsApplicationExit() const {
|
||||
return type == Event_ApplicationExit ?
|
||||
reinterpret_cast<const Debugger::ApplicationExitT *>(value) : nullptr;
|
||||
}
|
||||
};
|
||||
|
||||
bool VerifyEvent(::flatbuffers::Verifier &verifier, const void *obj, Event type);
|
||||
@@ -1200,6 +1223,61 @@ inline ::flatbuffers::Offset<ReadRegisterResponse> CreateReadRegisterResponseDir
|
||||
|
||||
::flatbuffers::Offset<ReadRegisterResponse> CreateReadRegisterResponse(::flatbuffers::FlatBufferBuilder &_fbb, const ReadRegisterResponseT *_o, const ::flatbuffers::rehasher_function_t *_rehasher = nullptr);
|
||||
|
||||
struct ApplicationExitT : public ::flatbuffers::NativeTable {
|
||||
typedef ApplicationExit TableType;
|
||||
::flatbuffers::Optional<uint32_t> exit_status = ::flatbuffers::nullopt;
|
||||
};
|
||||
|
||||
struct ApplicationExit FLATBUFFERS_FINAL_CLASS : private ::flatbuffers::Table {
|
||||
typedef ApplicationExitT NativeTableType;
|
||||
typedef ApplicationExitBuilder Builder;
|
||||
enum FlatBuffersVTableOffset FLATBUFFERS_VTABLE_UNDERLYING_TYPE {
|
||||
VT_EXIT_STATUS = 4
|
||||
};
|
||||
::flatbuffers::Optional<uint32_t> exit_status() const {
|
||||
return GetOptional<uint32_t, uint32_t>(VT_EXIT_STATUS);
|
||||
}
|
||||
bool mutate_exit_status(uint32_t _exit_status) {
|
||||
return SetField<uint32_t>(VT_EXIT_STATUS, _exit_status);
|
||||
}
|
||||
bool Verify(::flatbuffers::Verifier &verifier) const {
|
||||
return VerifyTableStart(verifier) &&
|
||||
VerifyField<uint32_t>(verifier, VT_EXIT_STATUS, 4) &&
|
||||
verifier.EndTable();
|
||||
}
|
||||
ApplicationExitT *UnPack(const ::flatbuffers::resolver_function_t *_resolver = nullptr) const;
|
||||
void UnPackTo(ApplicationExitT *_o, const ::flatbuffers::resolver_function_t *_resolver = nullptr) const;
|
||||
static ::flatbuffers::Offset<ApplicationExit> Pack(::flatbuffers::FlatBufferBuilder &_fbb, const ApplicationExitT* _o, const ::flatbuffers::rehasher_function_t *_rehasher = nullptr);
|
||||
};
|
||||
|
||||
struct ApplicationExitBuilder {
|
||||
typedef ApplicationExit Table;
|
||||
::flatbuffers::FlatBufferBuilder &fbb_;
|
||||
::flatbuffers::uoffset_t start_;
|
||||
void add_exit_status(uint32_t exit_status) {
|
||||
fbb_.AddElement<uint32_t>(ApplicationExit::VT_EXIT_STATUS, exit_status);
|
||||
}
|
||||
explicit ApplicationExitBuilder(::flatbuffers::FlatBufferBuilder &_fbb)
|
||||
: fbb_(_fbb) {
|
||||
start_ = fbb_.StartTable();
|
||||
}
|
||||
::flatbuffers::Offset<ApplicationExit> Finish() {
|
||||
const auto end = fbb_.EndTable(start_);
|
||||
auto o = ::flatbuffers::Offset<ApplicationExit>(end);
|
||||
return o;
|
||||
}
|
||||
};
|
||||
|
||||
inline ::flatbuffers::Offset<ApplicationExit> CreateApplicationExit(
|
||||
::flatbuffers::FlatBufferBuilder &_fbb,
|
||||
::flatbuffers::Optional<uint32_t> exit_status = ::flatbuffers::nullopt) {
|
||||
ApplicationExitBuilder builder_(_fbb);
|
||||
if(exit_status) { builder_.add_exit_status(*exit_status); }
|
||||
return builder_.Finish();
|
||||
}
|
||||
|
||||
::flatbuffers::Offset<ApplicationExit> CreateApplicationExit(::flatbuffers::FlatBufferBuilder &_fbb, const ApplicationExitT *_o, const ::flatbuffers::rehasher_function_t *_rehasher = nullptr);
|
||||
|
||||
struct DebugEventT : public ::flatbuffers::NativeTable {
|
||||
typedef DebugEvent TableType;
|
||||
Debugger::EventUnion event{};
|
||||
@@ -1255,6 +1333,9 @@ struct DebugEvent FLATBUFFERS_FINAL_CLASS : private ::flatbuffers::Table {
|
||||
const Debugger::ReadRegisterResponse *event_as_ReadRegisterResponse() const {
|
||||
return event_type() == Debugger::Event_ReadRegisterResponse ? static_cast<const Debugger::ReadRegisterResponse *>(event()) : nullptr;
|
||||
}
|
||||
const Debugger::ApplicationExit *event_as_ApplicationExit() const {
|
||||
return event_type() == Debugger::Event_ApplicationExit ? static_cast<const Debugger::ApplicationExit *>(event()) : nullptr;
|
||||
}
|
||||
void *mutable_event() {
|
||||
return GetPointer<void *>(VT_EVENT);
|
||||
}
|
||||
@@ -1318,6 +1399,10 @@ template<> inline const Debugger::ReadRegisterResponse *DebugEvent::event_as<Deb
|
||||
return event_as_ReadRegisterResponse();
|
||||
}
|
||||
|
||||
template<> inline const Debugger::ApplicationExit *DebugEvent::event_as<Debugger::ApplicationExit>() const {
|
||||
return event_as_ApplicationExit();
|
||||
}
|
||||
|
||||
struct DebugEventBuilder {
|
||||
typedef DebugEvent Table;
|
||||
::flatbuffers::FlatBufferBuilder &fbb_;
|
||||
@@ -1684,6 +1769,32 @@ inline ::flatbuffers::Offset<ReadRegisterResponse> CreateReadRegisterResponse(::
|
||||
_data);
|
||||
}
|
||||
|
||||
inline ApplicationExitT *ApplicationExit::UnPack(const ::flatbuffers::resolver_function_t *_resolver) const {
|
||||
auto _o = std::unique_ptr<ApplicationExitT>(new ApplicationExitT());
|
||||
UnPackTo(_o.get(), _resolver);
|
||||
return _o.release();
|
||||
}
|
||||
|
||||
inline void ApplicationExit::UnPackTo(ApplicationExitT *_o, const ::flatbuffers::resolver_function_t *_resolver) const {
|
||||
(void)_o;
|
||||
(void)_resolver;
|
||||
{ auto _e = exit_status(); _o->exit_status = _e; }
|
||||
}
|
||||
|
||||
inline ::flatbuffers::Offset<ApplicationExit> ApplicationExit::Pack(::flatbuffers::FlatBufferBuilder &_fbb, const ApplicationExitT* _o, const ::flatbuffers::rehasher_function_t *_rehasher) {
|
||||
return CreateApplicationExit(_fbb, _o, _rehasher);
|
||||
}
|
||||
|
||||
inline ::flatbuffers::Offset<ApplicationExit> CreateApplicationExit(::flatbuffers::FlatBufferBuilder &_fbb, const ApplicationExitT *_o, const ::flatbuffers::rehasher_function_t *_rehasher) {
|
||||
(void)_rehasher;
|
||||
(void)_o;
|
||||
struct _VectorArgs { ::flatbuffers::FlatBufferBuilder *__fbb; const ApplicationExitT* __o; const ::flatbuffers::rehasher_function_t *__rehasher; } _va = { &_fbb, _o, _rehasher}; (void)_va;
|
||||
auto _exit_status = _o->exit_status;
|
||||
return Debugger::CreateApplicationExit(
|
||||
_fbb,
|
||||
_exit_status);
|
||||
}
|
||||
|
||||
inline DebugEventT *DebugEvent::UnPack(const ::flatbuffers::resolver_function_t *_resolver) const {
|
||||
auto _o = std::unique_ptr<DebugEventT>(new DebugEventT());
|
||||
UnPackTo(_o.get(), _resolver);
|
||||
@@ -1766,6 +1877,10 @@ inline bool VerifyEvent(::flatbuffers::Verifier &verifier, const void *obj, Even
|
||||
auto ptr = reinterpret_cast<const Debugger::ReadRegisterResponse *>(obj);
|
||||
return verifier.VerifyTable(ptr);
|
||||
}
|
||||
case Event_ApplicationExit: {
|
||||
auto ptr = reinterpret_cast<const Debugger::ApplicationExit *>(obj);
|
||||
return verifier.VerifyTable(ptr);
|
||||
}
|
||||
default: return true;
|
||||
}
|
||||
}
|
||||
@@ -1833,6 +1948,10 @@ inline void *EventUnion::UnPack(const void *obj, Event type, const ::flatbuffers
|
||||
auto ptr = reinterpret_cast<const Debugger::ReadRegisterResponse *>(obj);
|
||||
return ptr->UnPack(resolver);
|
||||
}
|
||||
case Event_ApplicationExit: {
|
||||
auto ptr = reinterpret_cast<const Debugger::ApplicationExit *>(obj);
|
||||
return ptr->UnPack(resolver);
|
||||
}
|
||||
default: return nullptr;
|
||||
}
|
||||
}
|
||||
@@ -1888,6 +2007,10 @@ inline ::flatbuffers::Offset<void> EventUnion::Pack(::flatbuffers::FlatBufferBui
|
||||
auto ptr = reinterpret_cast<const Debugger::ReadRegisterResponseT *>(value);
|
||||
return CreateReadRegisterResponse(_fbb, ptr, _rehasher).Union();
|
||||
}
|
||||
case Event_ApplicationExit: {
|
||||
auto ptr = reinterpret_cast<const Debugger::ApplicationExitT *>(value);
|
||||
return CreateApplicationExit(_fbb, ptr, _rehasher).Union();
|
||||
}
|
||||
default: return 0;
|
||||
}
|
||||
}
|
||||
@@ -1942,6 +2065,10 @@ inline EventUnion::EventUnion(const EventUnion &u) : type(u.type), value(nullptr
|
||||
value = new Debugger::ReadRegisterResponseT(*reinterpret_cast<Debugger::ReadRegisterResponseT *>(u.value));
|
||||
break;
|
||||
}
|
||||
case Event_ApplicationExit: {
|
||||
value = new Debugger::ApplicationExitT(*reinterpret_cast<Debugger::ApplicationExitT *>(u.value));
|
||||
break;
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
@@ -2009,6 +2136,11 @@ inline void EventUnion::Reset() {
|
||||
delete ptr;
|
||||
break;
|
||||
}
|
||||
case Event_ApplicationExit: {
|
||||
auto ptr = reinterpret_cast<Debugger::ApplicationExitT *>(value);
|
||||
delete ptr;
|
||||
break;
|
||||
}
|
||||
default: break;
|
||||
}
|
||||
value = nullptr;
|
||||
|
||||
Reference in New Issue
Block a user