luaur-analysis 0.1.3

Luau type checker and type inference (Rust).
Documentation
use crate::records::binding::Binding;
use crate::records::global_types::GlobalTypes;
use crate::records::symbol::Symbol;
use std::ffi::CString;

pub fn try_get_global_binding_ref(globals: &mut GlobalTypes, name: &str) -> *mut Binding {
    let name = match CString::new(name) {
        Ok(name) => name,
        Err(_) => return core::ptr::null_mut(),
    };

    let ast_name = globals.global_names.names.get(name.as_ptr());
    if ast_name.value.is_null() {
        return core::ptr::null_mut();
    }

    if let Some(binding) = globals
        .global_scope
        .bindings
        .get(&Symbol::from_global(ast_name))
    {
        binding as *const Binding as *mut Binding
    } else {
        core::ptr::null_mut()
    }
}