added a way to create env function that have access to the executor
This commit is contained in:
parent
58b1b2f94b
commit
7399a6d2ef
4 changed files with 14 additions and 6 deletions
|
@ -1,4 +1,4 @@
|
|||
use crate::{executor::{MemoryData, MemoryRustFunction}, parser::ASTPart};
|
||||
use crate::{executor::{Executor, MemoryData, MemoryRustFunction}, parser::ASTPart};
|
||||
|
||||
fn to_printed(from: &ASTPart) -> String {
|
||||
match from {
|
||||
|
@ -10,7 +10,7 @@ fn to_printed(from: &ASTPart) -> String {
|
|||
}
|
||||
}
|
||||
|
||||
fn ugass(args: Vec<ASTPart>) -> ASTPart {
|
||||
fn ugass(_exec: &mut Executor, args: Vec<ASTPart>) -> ASTPart {
|
||||
let mut out = String::new();
|
||||
for arg in &args {
|
||||
out.push_str(&to_printed(arg));
|
||||
|
@ -20,8 +20,14 @@ fn ugass(args: Vec<ASTPart>) -> ASTPart {
|
|||
return ASTPart::NOOP;
|
||||
}
|
||||
|
||||
fn print_memory(exec: &mut Executor, _args: Vec<ASTPart>) -> ASTPart {
|
||||
println!("Memory dump: {:?}", exec.memory);
|
||||
return ASTPart::NOOP;
|
||||
}
|
||||
|
||||
pub fn generate() -> Vec<MemoryData> {
|
||||
let mut out: Vec<MemoryData> = vec![];
|
||||
out.push(MemoryData::RustFunction(MemoryRustFunction { key: String::from("ugass"), func: ugass }));
|
||||
out.push(MemoryData::RustFunction(MemoryRustFunction { key: String::from("printMemory"), func: print_memory }));
|
||||
return out;
|
||||
}
|
|
@ -45,7 +45,7 @@ pub struct MemoryFunction {
|
|||
#[derive(Debug, Clone, PartialEq)]
|
||||
pub struct MemoryRustFunction {
|
||||
pub key: String,
|
||||
pub func: fn(Vec<ASTPart>) -> ASTPart
|
||||
pub func: fn(&mut Executor, Vec<ASTPart>) -> ASTPart
|
||||
}
|
||||
|
||||
pub struct Executor {
|
||||
|
@ -458,7 +458,7 @@ impl Executor {
|
|||
return ASTPart::NOOP;
|
||||
},
|
||||
ASTPart::RustFunction(func) => {
|
||||
let res = (func.func)(call.args.clone());
|
||||
let res = (func.func)(self, call.args.clone());
|
||||
return res;
|
||||
},
|
||||
_ => {
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
use core::panic;
|
||||
|
||||
use crate::lexer::{Token, TokenType};
|
||||
use crate::{executor::Executor, lexer::{Token, TokenType}};
|
||||
|
||||
#[derive(Debug, Clone, PartialEq)]
|
||||
pub enum ASTPart {
|
||||
|
@ -120,7 +120,7 @@ pub struct AstContinue {
|
|||
}
|
||||
#[derive(Debug, Clone, PartialEq)]
|
||||
pub struct AstRustFunction {
|
||||
pub func: fn(Vec<ASTPart>) -> ASTPart,
|
||||
pub func: fn(&mut Executor, Vec<ASTPart>) -> ASTPart,
|
||||
pub pos: usize
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue