Skip to main content

luaur_analysis/methods/
frontend_frontend_frontend_alt_b.rs

1//! C++ `Frontend::Frontend(FileResolver*, ConfigResolver*, const
2//! FrontendOptions& options)` (`Analysis/src/Frontend.cpp:448-459`).
3use crate::enums::solver_mode::SolverMode;
4use crate::records::config_resolver::ConfigResolver;
5use crate::records::file_resolver::FileResolver;
6use crate::records::frontend::Frontend;
7use crate::records::frontend_options::FrontendOptions;
8use luaur_common::FFlag;
9
10impl Frontend {
11    /// Owned constructor delegating to the `SolverMode`-taking ctor. The only
12    /// difference from C++ ctor #1 is the solver mode is derived from the
13    /// `LuauSolverV2` fast flag: `useNewLuauSolver(FFlag::LuauSolverV2 ?
14    /// SolverMode::New : SolverMode::Old)`.
15    ///
16    /// As with the other ctor, the returned value's self-referential pointers
17    /// are wired by [`Frontend::wire_self_pointers`] after placement.
18    pub fn frontend_file_resolver_config_resolver_frontend_options(
19        file_resolver: *mut FileResolver,
20        config_resolver: *mut ConfigResolver,
21        options: &FrontendOptions,
22    ) -> Self {
23        let mode = if FFlag::LuauSolverV2.get() {
24            SolverMode::New
25        } else {
26            SolverMode::Old
27        };
28
29        Frontend::frontend_solver_mode_file_resolver_config_resolver_frontend_options(
30            mode,
31            file_resolver,
32            config_resolver,
33            options.clone(),
34        )
35    }
36}