From 026466efac656fd82a2c1d260336e5aa8793b144 Mon Sep 17 00:00:00 2001 From: ~karx Date: Sun, 7 Feb 2021 17:18:15 +0000 Subject: [PATCH] Make variable notation explicit --- src/main.rs | 37 ++++++++++++++++++++++++++++--------- 1 file changed, 28 insertions(+), 9 deletions(-) diff --git a/src/main.rs b/src/main.rs index fdab93e..ecf0972 100644 --- a/src/main.rs +++ b/src/main.rs @@ -28,19 +28,38 @@ impl Program { return Program{ data: op_list, pc: 0, vars: HashMap::new() }; } - fn args_or_vars<'a>(&self, arguments: &'a str) -> String { - let mut deconstructed: Vec = arguments.chars().collect(); + fn args_or_vars(&self, arguments: &str) -> String { + let mut builder = String::from(""); + let argument_vec: Vec = arguments.chars().collect(); - for (index, char) in arguments.chars().enumerate() { - let value = self.vars.get(&char); + for index in 0..argument_vec.len() { + let current_char = argument_vec[index]; + let str_to_push: String; - match value { - Some(content) => deconstructed[index] = *content, - None => {} + if index > 0 { + if argument_vec[index-1] == '$' { + continue; + } } + + if current_char == '$' { + let variable = argument_vec[index+1]; + + let key = self.vars.get(&variable); + match key { + Some(value) => str_to_push = value.to_string(), + None => panic!("NotFoundError: Variable {} has not been defined", variable) + } + + } else { + str_to_push = current_char.to_string(); + } + + + builder.push_str(&str_to_push); } - deconstructed.into_iter().collect() + builder } fn add_var(&mut self, arguments: &str) { @@ -60,7 +79,7 @@ impl Program { 'm' => println!("{}", eval::do_math(self.args_or_vars(arguments), '*')), 'd' => println!("{}", eval::do_math(self.args_or_vars(arguments), '/')), 'l' => self.add_var(arguments), - _ => panic!("SyntaxError at opcode {}!", self.pc) + _ => panic!("SyntaxError: No such opcode: {}", self.pc) } }