mlua_sys/
lib.rs

1//! Low level bindings to Lua 5.4/5.3/5.2/5.1 (including LuaJIT) and Roblox Luau.
2
3#![allow(non_camel_case_types, non_snake_case, dead_code)]
4#![allow(clippy::missing_safety_doc)]
5#![doc(test(attr(deny(warnings))))]
6#![cfg_attr(docsrs, feature(doc_cfg))]
7
8use std::os::raw::c_int;
9
10#[cfg(any(feature = "lua54", doc))]
11pub use lua54::*;
12
13#[cfg(any(feature = "lua53", doc))]
14pub use lua53::*;
15
16#[cfg(any(feature = "lua52", doc))]
17pub use lua52::*;
18
19#[cfg(any(feature = "lua51", feature = "luajit", doc))]
20pub use lua51::*;
21
22#[cfg(any(feature = "luau", doc))]
23pub use luau::*;
24
25#[cfg(any(feature = "lua54", feature = "lua53", feature = "lua52"))]
26#[doc(hidden)]
27pub const LUA_MAX_UPVALUES: c_int = 255;
28
29#[cfg(any(feature = "lua51", feature = "luajit"))]
30#[doc(hidden)]
31pub const LUA_MAX_UPVALUES: c_int = 60;
32
33#[cfg(feature = "luau")]
34#[doc(hidden)]
35pub const LUA_MAX_UPVALUES: c_int = 200;
36
37// I believe `luaL_traceback` < 5.4 requires this much free stack to not error.
38// 5.4 uses `luaL_Buffer`
39#[doc(hidden)]
40pub const LUA_TRACEBACK_STACK: c_int = 11;
41
42// Copied from https://github.com/rust-lang/rust/blob/master/library/std/src/sys/pal/common/alloc.rs
43// The minimum alignment guaranteed by the architecture. This value is used to
44// add fast paths for low alignment values.
45#[cfg(any(
46    target_arch = "x86",
47    target_arch = "arm",
48    target_arch = "m68k",
49    target_arch = "csky",
50    target_arch = "mips",
51    target_arch = "mips32r6",
52    target_arch = "powerpc",
53    target_arch = "powerpc64",
54    target_arch = "sparc",
55    target_arch = "wasm32",
56    target_arch = "hexagon",
57    all(target_arch = "riscv32", not(any(target_os = "espidf", target_os = "zkvm"))),
58    all(target_arch = "xtensa", not(target_os = "espidf")),
59))]
60#[doc(hidden)]
61pub const SYS_MIN_ALIGN: usize = 8;
62#[cfg(any(
63    target_arch = "x86_64",
64    target_arch = "aarch64",
65    target_arch = "arm64ec",
66    target_arch = "loongarch64",
67    target_arch = "mips64",
68    target_arch = "mips64r6",
69    target_arch = "s390x",
70    target_arch = "sparc64",
71    target_arch = "riscv64",
72    target_arch = "wasm64",
73))]
74#[doc(hidden)]
75pub const SYS_MIN_ALIGN: usize = 16;
76// The allocator on the esp-idf and zkvm platforms guarantee 4 byte alignment.
77#[cfg(any(
78    all(target_arch = "riscv32", any(target_os = "espidf", target_os = "zkvm")),
79    all(target_arch = "xtensa", target_os = "espidf"),
80))]
81#[doc(hidden)]
82pub const SYS_MIN_ALIGN: usize = 4;
83
84#[macro_use]
85mod macros;
86
87#[cfg(any(feature = "lua54", doc))]
88#[cfg_attr(docsrs, doc(cfg(feature = "lua54")))]
89pub mod lua54;
90
91#[cfg(any(feature = "lua53", doc))]
92#[cfg_attr(docsrs, doc(cfg(feature = "lua53")))]
93pub mod lua53;
94
95#[cfg(any(feature = "lua52", doc))]
96#[cfg_attr(docsrs, doc(cfg(feature = "lua52")))]
97pub mod lua52;
98
99#[cfg(any(feature = "lua51", feature = "luajit", doc))]
100#[cfg_attr(docsrs, doc(cfg(any(feature = "lua51", feature = "luajit"))))]
101pub mod lua51;
102
103#[cfg(any(feature = "luau", doc))]
104#[cfg_attr(docsrs, doc(cfg(feature = "luau")))]
105pub mod luau;