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;
use std::sync::Arc;

pub fn try_get_global_binding(globals: &mut GlobalTypes, name: &str) -> Option<Binding> {
    let name = CString::new(name).ok()?;
    let ast_name = unsafe {
        (*(Arc::as_ptr(&globals.global_names.names)
            as *mut luaur_ast::records::ast_name_table::AstNameTable))
            .get_or_add(name.as_ptr(), name.as_bytes().len())
    };
    globals
        .global_scope
        .bindings
        .get(&Symbol::from_global(ast_name))
        .cloned()
}