fix a scoping issue

This commit is contained in:
Tove 2025-02-20 00:52:25 +01:00
parent 80252e4335
commit 473ad86d9e
Signed by: TudbuT
GPG key ID: B3CF345217F202D3
3 changed files with 20 additions and 14 deletions

View file

@ -138,7 +138,11 @@ impl RustAppBuilder {
.arg(format!("spl@{}", env!("CARGO_PKG_VERSION")))
.current_dir(format!("{tmp}/spl-{name}"))
.stdout(Stdio::null())
.stderr(if output { Stdio::inherit() } else { Stdio::null() })
.stderr(if output {
Stdio::inherit()
} else {
Stdio::null()
})
.spawn()
.unwrap()
.wait()?;

View file

@ -266,7 +266,7 @@ pub struct FrameInfo {
#[derive(Clone, Debug)]
pub struct Frame {
parent: Option<Arc<Frame>>,
pub variables: Mut<HashMap<String, AMObject>>,
pub variables: Mut<HashMap<String, Arc<Mut<AMObject>>>>,
pub functions: Mut<HashMap<String, AFunc>>,
pub origin: FrameInfo,
pub redirect_to_base: bool,
@ -364,8 +364,8 @@ impl Frame {
pub fn set_var(&self, name: String, obj: AMObject, stack: &Stack) -> OError {
let mut frame = self;
loop {
if let Some(x) = frame.variables.lock().get_mut(&name) {
*x = obj;
if let Some(x) = frame.variables.lock_ro().get(&name) {
*(x.lock()) = obj;
return Ok(());
}
if let Some(ref x) = frame.parent {
@ -380,7 +380,7 @@ impl Frame {
let mut frame = self;
loop {
if let Some(x) = frame.variables.lock_ro().get(&name) {
return Ok(x.clone());
return Ok(x.lock_ro().clone());
}
if let Some(ref x) = frame.parent {
frame = x;
@ -555,14 +555,15 @@ impl Stack {
if frame.redirect_to_base {
frame = self.frames.first().unwrap().clone();
}
let tmpname = name.clone();
let variable = Arc::new(Mut::new(Value::Null.spl()));
let var = variable.clone();
frame.functions.lock().insert(
name.clone(),
Arc::new(Func {
ret_count: 1,
origin: Arc::new(Frame::dummy()),
to_call: FuncImpl::NativeDyn(Arc::new(Box::new(move |stack| {
stack.push(stack.get_var(tmpname.clone())?);
stack.push(var.lock_ro().clone());
Ok(())
}))),
run_as_base: false,
@ -570,7 +571,7 @@ impl Stack {
name: name.clone(),
}),
);
let tmpname = name.clone();
let var = variable.clone();
frame.functions.lock().insert(
"=".to_owned() + &name,
Arc::new(Func {
@ -578,14 +579,15 @@ impl Stack {
origin: Arc::new(Frame::dummy()),
to_call: FuncImpl::NativeDyn(Arc::new(Box::new(move |stack| {
let v = stack.pop();
stack.set_var(tmpname.clone(), v)
*(var.lock()) = v;
Ok(())
}))),
run_as_base: false,
fname: Some("RUNTIME".to_owned()),
name: "=".to_owned() + &name,
}),
);
frame.variables.lock().insert(name, Value::Null.spl());
frame.variables.lock().insert(name, variable);
}
pub fn pop_until(&mut self, obj: AMObject) -> Vec<AMObject> {

View file

@ -1,5 +1,5 @@
use std::{
collections::{HashMap, LinkedList, VecDeque},
collections::{HashMap, VecDeque},
env::{self, args, vars},
fs,
io::{stdin, stdout, Write},
@ -10,7 +10,7 @@ use std::{
time::{Duration, SystemTime},
};
use readformat::{readf, readf1};
use readformat::readf;
use crate::{dyn_fns, mutex::Mut, runtime::*, sasm::sasm_write, *};
@ -1014,7 +1014,7 @@ pub fn time(stack: &mut Stack) -> OError {
Ok(())
}
pub fn thread_yield(stack: &mut Stack) -> OError {
pub fn thread_yield(_stack: &mut Stack) -> OError {
thread::yield_now();
Ok(())
}
@ -1182,7 +1182,7 @@ pub fn chdir(stack: &mut Stack) -> OError {
Ok(())
}
pub fn json_parse(stack: &mut Stack) -> OError {
pub fn json_parse(_stack: &mut Stack) -> OError {
/*
require_on_stack!(input, Str, stack, "json_parse");
let objstr = readf1("{{}}", &input);