diff --git a/src/main.rs b/src/main.rs index 4dc19ec..614c0c6 100644 --- 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) {