luaur-compiler 0.1.3

Luau source-to-bytecode compiler (Rust).
Documentation
use luaur_ast::records::ast_expr_global::AstExprGlobal;
use luaur_ast::records::ast_node::AstNode;
use luaur_ast::records::ast_visitor::AstVisitor;

#[derive(Debug)]
pub struct FenvVisitor<'a> {
    pub(crate) getfenv_used: &'a mut bool,
    pub(crate) setfenv_used: &'a mut bool,
}

impl<'a> AstVisitor for FenvVisitor<'a> {
    fn visit_expr_global(&mut self, node: *mut core::ffi::c_void) -> bool {
        let node = unsafe { luaur_ast::rtti::ast_node_as::<AstExprGlobal>(node as *mut AstNode) };
        if let Some(node) = unsafe { node.as_ref() } {
            let name = unsafe { core::ffi::CStr::from_ptr(node.name.value).to_string_lossy() };
            if name == "getfenv" {
                *self.getfenv_used = true;
            }
            if name == "setfenv" {
                *self.setfenv_used = true;
            }
        }
        false
    }
}