Skip to main content

luaur_analysis/functions/
try_get_global_binding_ref.rs

1use crate::records::binding::Binding;
2use crate::records::global_types::GlobalTypes;
3use crate::records::symbol::Symbol;
4use std::ffi::CString;
5
6pub fn try_get_global_binding_ref(globals: &mut GlobalTypes, name: &str) -> *mut Binding {
7    let name = match CString::new(name) {
8        Ok(name) => name,
9        Err(_) => return core::ptr::null_mut(),
10    };
11
12    let ast_name = globals.global_names.names.get(name.as_ptr());
13    if ast_name.value.is_null() {
14        return core::ptr::null_mut();
15    }
16
17    if let Some(binding) = globals
18        .global_scope
19        .bindings
20        .get(&Symbol::from_global(ast_name))
21    {
22        binding as *const Binding as *mut Binding
23    } else {
24        core::ptr::null_mut()
25    }
26}