luaur-compiler 0.1.2

Luau source-to-bytecode compiler (Rust).
Documentation
use crate::records::compiler::Compiler;
use crate::records::reg_scope::RegScope;
use luaur_ast::records::ast_expr::AstExpr;
use luaur_ast::records::ast_expr_call::AstExprCall;
use luaur_ast::records::ast_expr_varargs::AstExprVarargs;
use luaur_ast::rtti;

impl Compiler {
    pub fn compile_expr_temp_mult_ret(&mut self, node: *mut AstExpr, target: u8) -> bool {
        unsafe {
            let expr = rtti::ast_node_as::<AstExprCall>(node as *mut _);
            if !expr.is_null() {
                if self.options.optimization_level >= 2 && !self.is_expr_mult_ret(node) {
                    self.compile_expr_temp(node, target);
                    return false;
                }
                let mut rs = self.reg_scope_compiler_i32(target as u32);
                self.compile_expr_call(expr, target, 0, true, true);
                return true;
            } else {
                let expr = rtti::ast_node_as::<AstExprVarargs>(node as *mut _);
                if !expr.is_null() {
                    let mut rs = self.reg_scope_compiler_i32(target as u32);
                    self.compile_expr_varargs(expr, target, 0, true);
                    return true;
                } else {
                    self.compile_expr_temp(node, target);
                    return false;
                }
            }
        }
    }
}