void Option::Load(const IniSetting::Map& ini, Hdf &config) { LoadRootHdf(ini, config, "IncludeRoots", IncludeRoots); LoadRootHdf(ini, config, "AutoloadRoots", AutoloadRoots); Config::Bind(PackageFiles, ini, config, "PackageFiles", PackageFiles); Config::Bind(IncludeSearchPaths, ini, config, "IncludeSearchPaths"); Config::Bind(PackageDirectories, ini, config, "PackageDirectories"); Config::Bind(PackageExcludeDirs, ini, config, "PackageExcludeDirs"); Config::Bind(PackageExcludeFiles, ini, config, "PackageExcludeFiles"); Config::Bind(PackageExcludePatterns, ini, config, "PackageExcludePatterns"); Config::Bind(PackageExcludeStaticDirs, ini, config, "PackageExcludeStaticDirs"); Config::Bind(PackageExcludeStaticFiles, ini, config, "PackageExcludeStaticFiles"); Config::Bind(PackageExcludeStaticFiles, ini, config, "PackageExcludeStaticPatterns"); Config::Bind(CachePHPFile, ini, config, "CachePHPFile"); Config::Bind(ParseOnDemandDirs, ini, config, "ParseOnDemandDirs"); { std::string tmp; #define READ_CG_OPTION(name) \ tmp = Config::GetString(ini, config, "CodeGeneration."#name); \ if (!tmp.empty()) { \ name = OptionStrings.add(tmp.c_str()); \ } READ_CG_OPTION(IdPrefix); READ_CG_OPTION(LambdaPrefix); } Config::Bind(RuntimeOption::DynamicInvokeFunctions, ini, config, "DynamicInvokeFunctions", RuntimeOption::DynamicInvokeFunctions); Config::Bind(VolatileClasses, ini, config, "VolatileClasses"); for (auto& str : Config::GetVector(ini, config, "ConstantFunctions")) { std::string func; std::string value; if (folly::split('|', str, func, value)) { ConstantFunctions[func] = value; } else { std::cerr << folly::format("Invalid ConstantFunction: '{}'\n", str); } } // build map from function names to sections auto function_sections_callback = [&] (const IniSetting::Map &ini_fs, const Hdf &hdf_fs, const std::string &ini_fs_key) { auto function_callback = [&] (const IniSetting::Map &ini_f, const Hdf &hdf_f, const std::string &ini_f_key) { FunctionSections[Config::GetString(ini_f, hdf_f, "", "", false)] = hdf_fs.exists() && !hdf_fs.isEmpty() ? hdf_fs.getName() : ini_fs_key; }; Config::Iterate(function_callback, ini_fs, hdf_fs, "", false); }; Config::Iterate(function_sections_callback, ini, config, "FunctionSections"); { // Repo { // Repo Central Config::Bind(RepoCentralPath, ini, config, "Repo.Central.Path"); } Config::Bind(RepoDebugInfo, ini, config, "Repo.DebugInfo", false); } { // AutoloadMap Config::Bind(AutoloadClassMap, ini, config, "AutoloadMap.class"); Config::Bind(AutoloadFuncMap, ini, config, "AutoloadMap.function"); Config::Bind(AutoloadConstMap, ini, config, "AutoloadMap.constant"); Config::Bind(AutoloadRoot, ini, config, "AutoloadMap.root"); } Config::Bind(HHBBC::options.HardTypeHints, ini, config, "HardTypeHints", true); Config::Bind(HHBBC::options.HardReturnTypeHints, ini, config, "HardReturnTypeHints", false); Config::Bind(HardConstProp, ini, config, "HardConstProp", true); Config::Bind(HHBBC::options.ElideAutoloadInvokes, ini, config, "ElideAutoloadInvokes", true); Config::Bind(APCProfile, ini, config, "APCProfile"); Config::Bind(RuntimeOption::EnableHipHopSyntax, ini, config, "EnableHipHopSyntax", RuntimeOption::EnableHipHopSyntax); Config::Bind(RuntimeOption::EvalPromoteEmptyObject, ini, config, "PromoteEmptyObject", RuntimeOption::EvalPromoteEmptyObject); Config::Bind(RuntimeOption::EnableZendCompat, ini, config, "EnableZendCompat", RuntimeOption::EnableZendCompat); Config::Bind(RuntimeOption::EvalJitEnableRenameFunction, ini, config, "JitEnableRenameFunction", RuntimeOption::EvalJitEnableRenameFunction); Config::Bind(EnableHipHopExperimentalSyntax, ini, config, "EnableHipHopExperimentalSyntax"); Config::Bind(EnableShortTags, ini, config, "EnableShortTags", true); { // Hack Config::Bind(RuntimeOption::IntsOverflowToInts, ini, config, "Hack.Lang.IntsOverflowToInts", RuntimeOption::IntsOverflowToInts); Config::Bind(RuntimeOption::StrictArrayFillKeys, ini, config, "Hack.Lang.StrictArrayFillKeys", RuntimeOption::StrictArrayFillKeys); Config::Bind(RuntimeOption::DisallowDynamicVarEnvFuncs, ini, config, "Hack.Lang.DisallowDynamicVarEnvFuncs", RuntimeOption::DisallowDynamicVarEnvFuncs); } Config::Bind(EnableAspTags, ini, config, "EnableAspTags"); Config::Bind(RuntimeOption::EnableXHP, ini, config, "EnableXHP", RuntimeOption::EnableXHP); if (RuntimeOption::EnableHipHopSyntax) { // If EnableHipHopSyntax is true, it forces EnableXHP to true // regardless of how it was set in the config RuntimeOption::EnableXHP = true; } Config::Bind(ParserThreadCount, ini, config, "ParserThreadCount", 0); if (ParserThreadCount <= 0) { ParserThreadCount = Process::GetCPUCount(); } // Just to silence warnings until we remove them from various config files (void)Config::GetByte(ini, config, "EnableEval", 0); (void)Config::GetBool(ini, config, "AllDynamic", true); Config::Bind(AllVolatile, ini, config, "AllVolatile"); Config::Bind(GenerateDocComments, ini, config, "GenerateDocComments", true); Config::Bind(DumpAst, ini, config, "DumpAst", false); Config::Bind(WholeProgram, ini, config, "WholeProgram", true); Config::Bind(UseHHBBC, ini, config, "UseHHBBC", UseHHBBC); // Temporary, during file-cache migration. Config::Bind(FileCache::UseNewCache, ini, config, "UseNewCache", false); }
void Option::Load(const IniSetting::Map& ini, Hdf &config) { LoadRootHdf(ini, config, "IncludeRoots", IncludeRoots); LoadRootHdf(ini, config, "AutoloadRoots", AutoloadRoots); Config::Bind(PackageFiles, ini, config, "PackageFiles", PackageFiles); Config::Bind(IncludeSearchPaths, ini, config, "IncludeSearchPaths"); Config::Bind(PackageDirectories, ini, config, "PackageDirectories"); Config::Bind(PackageExcludeDirs, ini, config, "PackageExcludeDirs"); Config::Bind(PackageExcludeFiles, ini, config, "PackageExcludeFiles"); Config::Bind(PackageExcludePatterns, ini, config, "PackageExcludePatterns"); Config::Bind(PackageExcludeStaticDirs, ini, config, "PackageExcludeStaticDirs"); Config::Bind(PackageExcludeStaticFiles, ini, config, "PackageExcludeStaticFiles"); Config::Bind(PackageExcludeStaticFiles, ini, config, "PackageExcludeStaticPatterns"); Config::Bind(CachePHPFile, ini, config, "CachePHPFile"); Config::Bind(ParseOnDemandDirs, ini, config, "ParseOnDemandDirs"); { std::string tmp; #define READ_CG_OPTION(name) \ tmp = Config::GetString(ini, config, "CodeGeneration."#name); \ if (!tmp.empty()) { \ name = OptionStrings.add(tmp.c_str()); \ } READ_CG_OPTION(IdPrefix); READ_CG_OPTION(LambdaPrefix); } Config::Bind(DynamicInvokeFunctions, ini, config, "DynamicInvokeFunctions"); Config::Bind(VolatileClasses, ini, config, "VolatileClasses"); // build map from function names to sections for (Hdf hdf = config["FunctionSections"].firstChild(); hdf.exists(); hdf = hdf.next()) { for (Hdf hdfFunc = hdf.firstChild(); hdfFunc.exists(); hdfFunc = hdfFunc.next()) { FunctionSections[Config::GetString(ini, hdfFunc, "", "", false)] = hdf.getName(); } } { // Repo { // Repo Central Config::Bind(RepoCentralPath, ini, config, "Repo.Central.Path"); } Config::Bind(RepoDebugInfo, ini, config, "Repo.DebugInfo", false); } { // AutoloadMap Config::Bind(AutoloadClassMap, ini, config, "AutoloadMap.class"); Config::Bind(AutoloadFuncMap, ini, config, "AutoloadMap.function"); Config::Bind(AutoloadConstMap, ini, config, "AutoloadMap.constant"); Config::Bind(AutoloadRoot, ini, config, "AutoloadMap.root"); } Config::Bind(HardTypeHints, ini, config, "HardTypeHints", true); Config::Bind(HardReturnTypeHints, ini, config, "HardReturnTypeHints", false); Config::Bind(HardConstProp, ini, config, "HardConstProp", true); Config::Bind(EnableHipHopSyntax, ini, config, "EnableHipHopSyntax"); Config::Bind(EnableZendCompat, ini, config, "EnableZendCompat"); Config::Bind(JitEnableRenameFunction, ini, config, "JitEnableRenameFunction"); Config::Bind(EnableHipHopExperimentalSyntax, ini, config, "EnableHipHopExperimentalSyntax"); Config::Bind(EnableShortTags, ini, config, "EnableShortTags", true); { // Hack Config::Bind(IntsOverflowToInts, ini, config, "Hack.Lang.IntsOverflowToInts", EnableHipHopSyntax); Config::Bind(StrictArrayFillKeys, ini, config, "Hack.Lang.StrictArrayFillKeys"); Config::Bind(DisallowDynamicVarEnvFuncs, ini, config, "Hack.Lang.DisallowDynamicVarEnvFuncs"); } Config::Bind(EnableAspTags, ini, config, "EnableAspTags"); Config::Bind(EnableXHP, ini, config, "EnableXHP", false); if (EnableHipHopSyntax) { // If EnableHipHopSyntax is true, it forces EnableXHP to true // regardless of how it was set in the config EnableXHP = true; } Config::Bind(ParserThreadCount, ini, config, "ParserThreadCount", 0); if (ParserThreadCount <= 0) { ParserThreadCount = Process::GetCPUCount(); } // Just to silence warnings until we remove them from various config files (void)Config::GetByte(ini, config, "EnableEval", 0); (void)Config::GetBool(ini, config, "AllDynamic", true); Config::Bind(AllVolatile, ini, config, "AllVolatile"); Config::Bind(GenerateDocComments, ini, config, "GenerateDocComments", true); Config::Bind(DumpAst, ini, config, "DumpAst", false); Config::Bind(WholeProgram, ini, config, "WholeProgram", true); Config::Bind(UseHHBBC, ini, config, "UseHHBBC", UseHHBBC); // Temporary, during file-cache migration. Config::Bind(FileCache::UseNewCache, ini, config, "UseNewCache", false); }