mirror of
https://github.com/Dummi26/mers.git
synced 2025-03-10 14:13:52 +01:00
add flag to change exit
behavior to RuntimeError
This commit is contained in:
parent
8e07f240cc
commit
8868746e17
@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "mers_lib"
|
name = "mers_lib"
|
||||||
version = "0.9.11"
|
version = "0.9.12"
|
||||||
edition = "2021"
|
edition = "2021"
|
||||||
license = "MIT OR Apache-2.0"
|
license = "MIT OR Apache-2.0"
|
||||||
description = "library to use the mers language in other projects"
|
description = "library to use the mers language in other projects"
|
||||||
|
@ -14,7 +14,7 @@ use crate::{
|
|||||||
|
|
||||||
use super::{
|
use super::{
|
||||||
gen::{
|
gen::{
|
||||||
function::{func, func_end},
|
function::{func, func_err},
|
||||||
IntR, OneOrNone,
|
IntR, OneOrNone,
|
||||||
},
|
},
|
||||||
Config,
|
Config,
|
||||||
@ -60,8 +60,15 @@ impl Config {
|
|||||||
// )
|
// )
|
||||||
.add_var(
|
.add_var(
|
||||||
"exit",
|
"exit",
|
||||||
func_end(|code: IntR<INT_MIN, INT_MAX>, _| {
|
func_err(|code: IntR<INT_MIN, INT_MAX>, i| {
|
||||||
|
if i.global
|
||||||
|
.allow_process_exit_via_exit
|
||||||
|
.load(std::sync::atomic::Ordering::Relaxed)
|
||||||
|
{
|
||||||
std::process::exit(code.0.try_into().unwrap_or(255));
|
std::process::exit(code.0.try_into().unwrap_or(255));
|
||||||
|
} else {
|
||||||
|
format!("Program exited with status code {}", code.0).into()
|
||||||
|
}
|
||||||
}),
|
}),
|
||||||
)
|
)
|
||||||
.add_var(
|
.add_var(
|
||||||
|
@ -2,7 +2,7 @@ use std::{
|
|||||||
collections::HashMap,
|
collections::HashMap,
|
||||||
fmt::Debug,
|
fmt::Debug,
|
||||||
io::{Read, Write},
|
io::{Read, Write},
|
||||||
sync::{Arc, Mutex, RwLock},
|
sync::{atomic::AtomicBool, Arc, Mutex, RwLock},
|
||||||
time::Instant,
|
time::Instant,
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -135,6 +135,7 @@ pub struct RunLocalGlobalInfo {
|
|||||||
pub object_fields_rev: Arc<Mutex<Vec<String>>>,
|
pub object_fields_rev: Arc<Mutex<Vec<String>>>,
|
||||||
pub stdin: Arc<Mutex<Option<Box<dyn Read + Send + Sync>>>>,
|
pub stdin: Arc<Mutex<Option<Box<dyn Read + Send + Sync>>>>,
|
||||||
pub stdout: Arc<Mutex<Option<(Box<dyn Write + Send + Sync>, Box<dyn Write + Send + Sync>)>>>,
|
pub stdout: Arc<Mutex<Option<(Box<dyn Write + Send + Sync>, Box<dyn Write + Send + Sync>)>>>,
|
||||||
|
pub allow_process_exit_via_exit: Arc<AtomicBool>,
|
||||||
}
|
}
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
#[allow(unused)]
|
#[allow(unused)]
|
||||||
@ -144,6 +145,7 @@ struct RunLocalGlobalInfoDebug<'a> {
|
|||||||
pub object_fields_rev: &'a Arc<Mutex<Vec<String>>>,
|
pub object_fields_rev: &'a Arc<Mutex<Vec<String>>>,
|
||||||
pub stdin: bool,
|
pub stdin: bool,
|
||||||
pub stdout: bool,
|
pub stdout: bool,
|
||||||
|
pub allow_process_exit_via_exit: bool,
|
||||||
}
|
}
|
||||||
impl Debug for RunLocalGlobalInfo {
|
impl Debug for RunLocalGlobalInfo {
|
||||||
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
||||||
@ -155,7 +157,10 @@ impl Debug for RunLocalGlobalInfo {
|
|||||||
object_fields: &self.object_fields,
|
object_fields: &self.object_fields,
|
||||||
object_fields_rev: &self.object_fields_rev,
|
object_fields_rev: &self.object_fields_rev,
|
||||||
stdin: self.stdin.lock().unwrap().is_some(),
|
stdin: self.stdin.lock().unwrap().is_some(),
|
||||||
stdout: self.stdout.lock().unwrap().is_some()
|
stdout: self.stdout.lock().unwrap().is_some(),
|
||||||
|
allow_process_exit_via_exit: self
|
||||||
|
.allow_process_exit_via_exit
|
||||||
|
.load(std::sync::atomic::Ordering::Relaxed),
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@ -168,6 +173,7 @@ impl RunLocalGlobalInfo {
|
|||||||
object_fields_rev: Default::default(),
|
object_fields_rev: Default::default(),
|
||||||
stdin: Arc::new(Mutex::new(None)),
|
stdin: Arc::new(Mutex::new(None)),
|
||||||
stdout: Arc::new(Mutex::new(None)),
|
stdout: Arc::new(Mutex::new(None)),
|
||||||
|
allow_process_exit_via_exit: Arc::new(AtomicBool::new(true)),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -247,6 +253,7 @@ impl info::Local for RunLocal {
|
|||||||
object_fields_rev: Default::default(),
|
object_fields_rev: Default::default(),
|
||||||
stdin: Default::default(),
|
stdin: Default::default(),
|
||||||
stdout: Default::default(),
|
stdout: Default::default(),
|
||||||
|
allow_process_exit_via_exit: Arc::new(AtomicBool::new(false)),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
fn init_var(&mut self, id: Self::VariableIdentifier, value: Self::VariableData) {
|
fn init_var(&mut self, id: Self::VariableIdentifier, value: Self::VariableData) {
|
||||||
|
Loading…
Reference in New Issue
Block a user