Implement new features #6

Merged
n3tael merged 9 commits from bedohswe/labast:master into master 2024-06-20 20:39:40 +00:00
2 changed files with 28 additions and 0 deletions
Showing only changes of commit 906a72a195 - Show all commits

View File

@ -145,6 +145,10 @@ pub fn execute(stack: &mut Stack, mut origin_stack: Option<&mut Stack>, mod_name
let arg = instruction.arg.clone();
instructions::modules::exec(stack, arg, mod_name.clone())
},
"call" => {
let arg = instruction.arg.clone();
instructions::modules::call(stack, arg)
},
"native" => {
let arg = instruction.arg.clone();
instructions::native::native(stack, arg)

View File

@ -34,3 +34,27 @@ pub fn exec(mut stack: &mut Stack, arg: String, mod_name: String) {
stack.memory.push(*item);
}
}
pub fn call(mut stack: &mut Stack, mod_name: String) {
let len: u16 = stack.memory.pop();
let mut rev: String = String::new();
for _i in 0..len {
rev.push(stack.memory.pop() as u8 as char);
}
let tocall: String = rev.chars().rev().collect::<String>();
if mod_name == tocall {
Review

строки 46-59 это буквально код функции exec (за ислюкчением того что вместо arg, tocall)

так что можно просто вызвать функцию exec:

exec(&mut stack, tocall, mod_name);
строки 46-59 это буквально код функции `exec` (за ислюкчением того что вместо `arg`, `tocall`) так что можно просто вызвать функцию `exec`: ```rust exec(&mut stack, tocall, mod_name); ```
eprintln!("{}", RunError::ExecuteItself(tocall.to_string()));
std::process::exit(2);
}
let lines = fs::read_to_string(&tocall).expect(&format!("{}", RunError::FailToReadFile));
let mut temp_stack = Stack::new(stack.memory.size());
parse(&mut temp_stack, &lines);
execute(&mut temp_stack, Some(&mut stack), tocall.clone());
for item in temp_stack.memory.iter() {
stack.memory.push(*item);
}
}