sandwich

A funny programming language written in Rust
git clone https://tilde.team/~karx/sandwich.git
Log | Files | Refs | README | LICENSE

commit f9414fca23c25de2263031cd1abe135e8d3b6b36
parent 96bdc3c5f4097a9db149d14940c5ac3ecbdcc0ec
Author: ~karx <karx@tilde.team>
Date:   Tue, 16 Mar 2021 12:41:50 -0500

Implement importing of specific names

Diffstat:
Msrc/main.rs | 42++++++++++++++++++++++++++++++++++++------
1 file changed, 36 insertions(+), 6 deletions(-)

diff --git a/src/main.rs b/src/main.rs @@ -149,14 +149,44 @@ impl Program { let contents = fs::read_to_string(filename).expect("Something went wrong reading the file"); let mut prog = Program::from_string(contents); prog.run(); - - for (key, value) in prog.vars.iter() { - self.vars.insert(*key, value.to_string()); - } - for (key, value) in prog.funcs.iter() { - self.funcs.insert(*key, value.to_string()); + if argument_vec.len() > 1 { + for name in argument_vec[1..].iter() { + let kind = name.chars().nth(0).unwrap(); + let name_to_import = name.chars().nth(1).unwrap(); + if kind == 'v' { + let key = prog.vars.get(&name_to_import); + match key { + Some(value) => self.vars.insert(name_to_import, value.to_string()), + None => panic!("ValueError: variable {} has not been defined in {}!", name_to_import, filename) + }; + } else if kind == 'f' { + let key = prog.funcs.get(&name_to_import); + match key { + Some(value) => {self.funcs.insert(name_to_import, value.to_string());()}, + None => panic!("ValueError: function {} has not been defined in {}!", name_to_import, filename) + } + } else { + continue; + } + } + } else { + // implied catch-all + for (key, value) in prog.vars.iter() { + self.vars.insert(*key, value.to_string()); + } + + for (key, value) in prog.funcs.iter() { + self.funcs.insert(*key, value.to_string()); + } } + // for (key, value) in prog.vars.iter() { + // self.vars.insert(*key, value.to_string()); + // } + + // for (key, value) in prog.funcs.iter() { + // self.funcs.insert(*key, value.to_string()); + // } } fn parse(&mut self, instruction: &String) {