Skip to main content

luaur_analysis/functions/
try_get_global_binding.rs

1use crate::records::binding::Binding;
2use crate::records::global_types::GlobalTypes;
3use crate::records::symbol::Symbol;
4use std::ffi::CString;
5use std::sync::Arc;
6
7pub fn try_get_global_binding(globals: &mut GlobalTypes, name: &str) -> Option<Binding> {
8    let name = CString::new(name).ok()?;
9    let ast_name = unsafe {
10        (*(Arc::as_ptr(&globals.global_names.names)
11            as *mut luaur_ast::records::ast_name_table::AstNameTable))
12            .get_or_add(name.as_ptr(), name.as_bytes().len())
13    };
14    globals
15        .global_scope
16        .bindings
17        .get(&Symbol::from_global(ast_name))
18        .cloned()
19}