commit 026466efac656fd82a2c1d260336e5aa8793b144
parent 088741aba433b60d4077d074d9f5e1112076a674
Author: ~karx <karx@tilde.team>
Date: Sun, 7 Feb 2021 17:18:15 +0000
Make variable notation explicit
Diffstat:
1 file changed, 28 insertions(+), 9 deletions(-)
diff --git 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<char> = arguments.chars().collect();
+ fn args_or_vars(&self, arguments: &str) -> String {
+ let mut builder = String::from("");
+ let argument_vec: Vec<char> = 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)
}
}