Add ability to add functions

This commit is contained in:
~karx 2021-02-08 14:59:55 +00:00
parent 520c7f9262
commit 1a811c650f
1 changed files with 13 additions and 0 deletions

View File

@ -10,6 +10,7 @@ struct Program {
data: Vec<String>, data: Vec<String>,
pc: usize, pc: usize,
vars: HashMap<char, String>, vars: HashMap<char, String>,
funcs: HashMap<char, String>
} }
impl Program { impl Program {
@ -28,6 +29,7 @@ impl Program {
data: op_list, data: op_list,
pc: 0, pc: 0,
vars: HashMap::new(), vars: HashMap::new(),
funcs: HashMap::new()
}; };
} }
@ -78,6 +80,16 @@ impl Program {
self.vars.insert(name, value); self.vars.insert(name, value);
} }
fn add_func(&mut self, arguments: &str) {
let argument_vec: Vec<char> = 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) { fn parse(&mut self, instruction: &String) {
// Opcode is the first character, arguments are everything after the first char // Opcode is the first character, arguments are everything after the first char
let opcode = instruction.chars().collect::<Vec<char>>()[0]; let opcode = instruction.chars().collect::<Vec<char>>()[0];
@ -90,6 +102,7 @@ impl Program {
'm' => println!("{}", eval::do_math(self.args_or_vars(arguments), '*')), 'm' => println!("{}", eval::do_math(self.args_or_vars(arguments), '*')),
'd' => println!("{}", eval::do_math(self.args_or_vars(arguments), '/')), 'd' => println!("{}", eval::do_math(self.args_or_vars(arguments), '/')),
'l' => self.add_var(arguments), 'l' => self.add_var(arguments),
'f' => self.add_func(arguments),
'#' => {} // Do nothing for comments '#' => {} // Do nothing for comments
_ => panic!("SyntaxError: No such opcode: {}", self.pc), _ => panic!("SyntaxError: No such opcode: {}", self.pc),
} }