From 1a811c650f8943ee1df22b40308f6891f14ce6a5 Mon Sep 17 00:00:00 2001 From: ~karx Date: Mon, 8 Feb 2021 14:59:55 +0000 Subject: [PATCH] Add ability to add functions --- src/main.rs | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/main.rs b/src/main.rs index d15ef1d..29273ef 100644 --- a/src/main.rs +++ b/src/main.rs @@ -10,6 +10,7 @@ struct Program { data: Vec, pc: usize, vars: HashMap, + funcs: HashMap } impl Program { @@ -28,6 +29,7 @@ impl Program { data: op_list, pc: 0, vars: HashMap::new(), + funcs: HashMap::new() }; } @@ -78,6 +80,16 @@ impl Program { self.vars.insert(name, value); } + fn add_func(&mut self, arguments: &str) { + let argument_vec: Vec = arguments.chars().collect(); + let name = argument_vec[0]; + let body: String = argument_vec[1..].into_iter().collect(); + + self.funcs.insert(name, body); + + println!("{:?}", self.funcs); + } + fn parse(&mut self, instruction: &String) { // Opcode is the first character, arguments are everything after the first char let opcode = instruction.chars().collect::>()[0]; @@ -90,6 +102,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), + 'f' => self.add_func(arguments), '#' => {} // Do nothing for comments _ => panic!("SyntaxError: No such opcode: {}", self.pc), }