mlua_sys/
lib.rs

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