Project now builds

This commit is contained in:
François Autin 2023-04-05 13:49:32 +02:00
parent b96808b55f
commit 2756477e67
No known key found for this signature in database
GPG Key ID: 343F5D382E1DD77C
2 changed files with 5 additions and 4 deletions

View File

@ -44,7 +44,7 @@ pub const SC_DEBUG: u8 = 34;
pub const CONSOLE_OUTPUT: u8 = 1;
// todo : returns new types, not just machine errors and machine ok
pub fn call(exception: ExceptionType, machine: &mut Machine, system: &mut System) -> Result<MachineOk, MachineError> {
pub fn call(exception: &ExceptionType, machine: &mut Machine, system: &mut System) -> Result<MachineOk, MachineError> {
match exception {
ExceptionType::NoException => todo!(),
@ -66,10 +66,10 @@ fn syscall(machine: &mut Machine, system: &mut System) -> Result<MachineOk, Mach
SC_SHUTDOWN => Ok(MachineOk::Shutdown),
SC_EXIT => {
let th = match &system.get_thread_manager().g_current_thread {
Some(th) => th,
Some(th) => th.clone(),
None => Err("Current thread is None")?
};
system.get_thread_manager().thread_finish(machine, *th);
system.get_thread_manager().thread_finish(machine, th);
Ok(MachineOk::Ok)
},
SC_EXEC => todo!(),

View File

@ -34,6 +34,7 @@ use super::error::MachineOk;
/// Textual names of the exceptions that can be generated by user program
/// execution, for debugging purpose.
/// todo: is this really supposed to stand in machine.rs?
#[derive(Debug)]
pub enum ExceptionType {
/// Everything ok
NoException,
@ -229,7 +230,7 @@ impl Machine {
pub fn raise_exception(&mut self, exception: ExceptionType, address : u64, system: &mut System) -> Result<MachineOk, MachineError>{
self.set_status(MachineStatus::SystemMode);
// Handle the interruption
match exception::call(exception, self, system) {
match exception::call(&exception, self, system) {
Ok(MachineOk::Shutdown) => {
self.set_status(MachineStatus::UserMode);
return Ok(MachineOk::Shutdown);