Implement importing of specific names

This commit is contained in:
~karx 2021-03-16 12:41:50 -05:00 committed by Yash
parent d11d5ce755
commit dab95136c4
No known key found for this signature in database
GPG Key ID: A794DA2529474BA5
1 changed files with 36 additions and 6 deletions

View File

@ -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) {