fix a scoping issue
This commit is contained in:
parent
80252e4335
commit
473ad86d9e
3 changed files with 20 additions and 14 deletions
|
|
@ -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()?;
|
||||
|
|
|
|||
|
|
@ -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> {
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue