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), }