示例#1
0
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);
}
示例#2
0
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);
}
示例#3
0
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");

  Config::Bind(IdPrefix, ini, config, "CodeGeneration.IdPrefix", IdPrefix);
  Config::Bind(LambdaPrefix, ini, config,
               "CodeGeneration.LambdaPrefix", LambdaPrefix);

  Config::Bind(RuntimeOption::DynamicInvokeFunctions,
               ini, config, "DynamicInvokeFunctions",
               RuntimeOption::DynamicInvokeFunctions);
  Config::Bind(VolatileClasses, ini, config, "VolatileClasses");
  Config::Bind(FlattenTraits, ini, config, "FlattenTraits", true);

  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(RuntimeOption::EvalHardTypeHints, ini, config,
               "HardTypeHints", RuntimeOption::EvalHardTypeHints);

  static bool HardReturnTypeHints;
  Config::Bind(HardReturnTypeHints, ini, config, "HardReturnTypeHints", true);

  // This option takes precedence over RuntimeOption. We test to see if the
  // option has been set (by the user) or not.
  auto is_set = [&](const std::string& key) {
    auto a = Config::GetBool(ini, config, key, true);
    auto b = Config::GetBool(ini, config, key, false);
    return a == b;
  };

  if (!is_set("CheckReturnTypeHints") || is_set("HardReturnTypeHints")) {
    // Note that the actual value does not matter, since HHBBC only cares about
    // whether the value is 3 or not.
    RuntimeOption::EvalCheckReturnTypeHints = HardReturnTypeHints ? 3 : 2;
  }

  Config::Bind(HHBBC::options.HardConstProp, ini, config,
               "HardConstProp", HHBBC::options.HardConstProp);
  Config::Bind(HHBBC::options.ElideAutoloadInvokes, ini, config,
               "ElideAutoloadInvokes", HHBBC::options.ElideAutoloadInvokes);

  Config::Bind(APCProfile, ini, config, "APCProfile");

  Config::Bind(RuntimeOption::EvalThisTypeHintLevel, ini, config,
               "ThisTypeHintLevel", RuntimeOption::EvalThisTypeHintLevel);

  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);
  Config::Bind(RuntimeOption::EvalHackArrCompatNotices,
               ini, config, "HackArrCompatNotices",
               RuntimeOption::EvalHackArrCompatNotices);
  Config::Bind(RuntimeOption::EvalHackArrCompatIsArrayNotices,
               ini, config, "HackArrCompatIsArrayNotices",
               RuntimeOption::EvalHackArrCompatIsArrayNotices);
  Config::Bind(RuntimeOption::EvalHackArrCompatPromoteNotices,
               ini, config, "HackArrCompatPromoteNotices",
               RuntimeOption::EvalHackArrCompatPromoteNotices);
  Config::Bind(RuntimeOption::EvalHackArrCompatTypeHintNotices,
               ini, config, "HackArrCompatTypeHintNotices",
               RuntimeOption::EvalHackArrCompatTypeHintNotices);
  Config::Bind(RuntimeOption::EvalHackArrCompatDVCmpNotices,
               ini, config, "HackArrCompatDVCmpNotices",
               RuntimeOption::EvalHackArrCompatDVCmpNotices);
  Config::Bind(RuntimeOption::EvalNoticeOnAllDynamicCalls,
               ini, config, "NoticeOnAllDynamicCalls",
               RuntimeOption::EvalNoticeOnAllDynamicCalls);
  Config::Bind(RuntimeOption::EvalNoticeOnBuiltinDynamicCalls,
               ini, config, "NoticeOnBuiltinDynamicCalls",
               RuntimeOption::EvalNoticeOnBuiltinDynamicCalls);

  {
    // 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(RuntimeOption::EvalUseHHBBC, ini, config, "UseHHBBC",
               RuntimeOption::EvalUseHHBBC);

  // Temporary, during file-cache migration.
  Config::Bind(FileCache::UseNewCache, ini, config, "UseNewCache", false);
}