mirror of
https://github.com/SpaceManiac/SpacemanDMM.git
synced 2025-12-23 05:36:47 +00:00
Pass a Context to the debugger
This commit is contained in:
parent
12ae126d9c
commit
572e95e070
3 changed files with 31 additions and 7 deletions
|
|
@ -174,6 +174,16 @@ impl Context {
|
|||
panic!("there were parse errors");
|
||||
}
|
||||
}
|
||||
|
||||
/// Clone the file list of this Context but not its error list.
|
||||
pub fn clone_file_list(&self) -> Context {
|
||||
Context {
|
||||
files: self.files.clone(),
|
||||
reverse_files: self.reverse_files.clone(),
|
||||
errors: Default::default(),
|
||||
print_severity: Default::default(),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
|
|
|
|||
|
|
@ -37,7 +37,7 @@ use self::dap_types::*;
|
|||
use self::launched::Launched;
|
||||
use self::extools::Extools;
|
||||
|
||||
pub fn start_server(dreamseeker_exe: String, objtree: Arc<ObjectTree>) -> std::io::Result<u16> {
|
||||
pub fn start_server(dreamseeker_exe: String, objtree: Arc<ObjectTree>, ctx: dm::Context) -> std::io::Result<u16> {
|
||||
use std::net::*;
|
||||
|
||||
let listener = TcpListener::bind((Ipv4Addr::LOCALHOST, 0))?;
|
||||
|
|
@ -51,7 +51,11 @@ pub fn start_server(dreamseeker_exe: String, objtree: Arc<ObjectTree>) -> std::i
|
|||
drop(listener);
|
||||
|
||||
let mut input = std::io::BufReader::new(stream.try_clone().unwrap());
|
||||
let mut debugger = Debugger::new(dreamseeker_exe, objtree, Box::new(stream));
|
||||
let db = DebugDatabase {
|
||||
files: Arc::new(ctx),
|
||||
objtree,
|
||||
};
|
||||
let mut debugger = Debugger::new(dreamseeker_exe, db, Box::new(stream));
|
||||
jrpc_io::run_with_read(&mut input, |message| debugger.handle_input(message));
|
||||
})?;
|
||||
|
||||
|
|
@ -84,13 +88,23 @@ pub fn debugger_main<I: Iterator<Item=String>>(mut args: I) {
|
|||
Arc::new(parser.parse_object_tree())
|
||||
};
|
||||
|
||||
let mut debugger = Debugger::new(dreamseeker_exe, objtree, Box::new(std::io::stdout()));
|
||||
let db = DebugDatabase {
|
||||
files: Arc::new(ctx),
|
||||
objtree,
|
||||
};
|
||||
let mut debugger = Debugger::new(dreamseeker_exe, db, Box::new(std::io::stdout()));
|
||||
jrpc_io::run_forever(|message| debugger.handle_input(message));
|
||||
}
|
||||
|
||||
#[derive(Clone)]
|
||||
struct DebugDatabase {
|
||||
files: Arc<dm::Context>,
|
||||
objtree: Arc<ObjectTree>,
|
||||
}
|
||||
|
||||
struct Debugger {
|
||||
dreamseeker_exe: String,
|
||||
objtree: Arc<ObjectTree>,
|
||||
db: DebugDatabase,
|
||||
launched: Option<Launched>,
|
||||
extools: Option<Extools>,
|
||||
|
||||
|
|
@ -99,10 +113,10 @@ struct Debugger {
|
|||
}
|
||||
|
||||
impl Debugger {
|
||||
fn new(dreamseeker_exe: String, objtree: Arc<ObjectTree>, stream: OutStream) -> Self {
|
||||
fn new(dreamseeker_exe: String, db: DebugDatabase, stream: OutStream) -> Self {
|
||||
Debugger {
|
||||
dreamseeker_exe,
|
||||
objtree,
|
||||
db,
|
||||
launched: None,
|
||||
extools: None,
|
||||
|
||||
|
|
|
|||
|
|
@ -1578,7 +1578,7 @@ handle_method_call! {
|
|||
// debugger entry point
|
||||
on StartDebugger(&mut self, params) {
|
||||
extras::StartDebuggerResult {
|
||||
port: debugger::start_server(params.dreamseeker_exe, self.objtree.clone()).map_err(invalid_request)?,
|
||||
port: debugger::start_server(params.dreamseeker_exe, self.objtree.clone(), self.context.clone_file_list()).map_err(invalid_request)?,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue