Clean up more of the RSCCOptions class.
Pass a bunch of arguments using the class directly. Move the documentation
next to the actual option declarations, rather than as part of a huge call
to "compile()". Convert from bitfields to bool.
Change-Id: I666dea469717f1f0ae59e0220a6146c96fc0fb7c
diff --git a/slang_rs.cpp b/slang_rs.cpp
index 277516d..979bb67 100644
--- a/slang_rs.cpp
+++ b/slang_rs.cpp
@@ -32,6 +32,7 @@
#include "llvm/Support/Path.h"
#include "os_sep.h"
+#include "rs_cc_options.h"
#include "slang_rs_backend.h"
#include "slang_rs_context.h"
#include "slang_rs_export_type.h"
@@ -270,19 +271,11 @@
bool SlangRS::compile(
const std::list<std::pair<const char*, const char*> > &IOFiles,
const std::list<std::pair<const char*, const char*> > &DepFiles,
- const std::vector<std::string> &IncludePaths,
- const std::vector<std::string> &AdditionalDepTargets,
- Slang::OutputType OutputType, BitCodeStorageType BitcodeStorage,
- bool AllowRSPrefix, bool OutputDep,
- unsigned int TargetAPI, bool EmitDebug,
- llvm::CodeGenOpt::Level OptimizationLevel,
- const std::string &JavaReflectionPathBase,
- const std::string &JavaReflectionPackageName,
- const std::string &RSPackageName) {
+ const RSCCOptions &Opts) {
if (IOFiles.empty())
return true;
- if (OutputDep && (DepFiles.size() != IOFiles.size())) {
+ if (Opts.mEmitDependency && (DepFiles.size() != IOFiles.size())) {
getDiagnostics().Report(mDiagErrorInvalidOutputDepParameter);
return false;
}
@@ -293,19 +286,19 @@
std::list<std::pair<const char*, const char*> >::const_iterator
IOFileIter = IOFiles.begin(), DepFileIter = DepFiles.begin();
- setIncludePaths(IncludePaths);
- setOutputType(OutputType);
- if (OutputDep) {
- setAdditionalDepTargets(AdditionalDepTargets);
+ setIncludePaths(Opts.mIncludePaths);
+ setOutputType(Opts.mOutputType);
+ if (Opts.mEmitDependency) {
+ setAdditionalDepTargets(Opts.mAdditionalDepTargets);
}
- setDebugMetadataEmission(EmitDebug);
+ setDebugMetadataEmission(Opts.mDebugEmission);
- setOptimizationLevel(OptimizationLevel);
+ setOptimizationLevel(Opts.mOptimizationLevel);
- mAllowRSPrefix = AllowRSPrefix;
+ mAllowRSPrefix = Opts.mAllowRSPrefix;
- mTargetAPI = TargetAPI;
+ mTargetAPI = Opts.mTargetAPI;
if (mTargetAPI < SLANG_MINIMUM_TARGET_API ||
mTargetAPI > SLANG_MAXIMUM_TARGET_API) {
getDiagnostics().Report(mDiagErrorTargetAPIRange) << mTargetAPI
@@ -315,7 +308,7 @@
// Skip generation of warnings a second time if we are doing more than just
// a single pass over the input file.
- bool SuppressAllWarnings = (OutputType != Slang::OT_Dependency);
+ bool SuppressAllWarnings = (Opts.mOutputType != Slang::OT_Dependency);
for (unsigned i = 0, e = IOFiles.size(); i != e; i++) {
InputFile = IOFileIter->first;
@@ -334,29 +327,29 @@
if (Slang::compile() > 0)
return false;
- if (!JavaReflectionPackageName.empty()) {
- mRSContext->setReflectJavaPackageName(JavaReflectionPackageName);
+ if (!Opts.mJavaReflectionPackageName.empty()) {
+ mRSContext->setReflectJavaPackageName(Opts.mJavaReflectionPackageName);
}
const std::string &RealPackageName =
mRSContext->getReflectJavaPackageName();
- if (OutputType != Slang::OT_Dependency) {
+ if (Opts.mOutputType != Slang::OT_Dependency) {
- if (BitcodeStorage == BCST_CPP_CODE) {
- RSReflectionCpp R(mRSContext, JavaReflectionPathBase, getInputFileName(),
- getOutputFileName());
+ if (Opts.mBitcodeStorage == BCST_CPP_CODE) {
+ RSReflectionCpp R(mRSContext, Opts.mJavaReflectionPathBase,
+ getInputFileName(), getOutputFileName());
if (!R.reflect()) {
return false;
}
} else {
- if (!RSPackageName.empty()) {
- mRSContext->setRSPackageName(RSPackageName);
+ if (!Opts.mRSPackageName.empty()) {
+ mRSContext->setRSPackageName(Opts.mRSPackageName);
}
RSReflectionJava R(mRSContext, &mGeneratedFileNames,
- JavaReflectionPathBase, getInputFileName(),
+ Opts.mJavaReflectionPathBase, getInputFileName(),
getOutputFileName(),
- BitcodeStorage == BCST_JAVA_CODE);
+ Opts.mBitcodeStorage == BCST_JAVA_CODE);
if (!R.reflect()) {
// TODO Is this needed or will the error message have been printed
// already? and why not for the C++ case?
@@ -371,14 +364,14 @@
I != E;
I++) {
std::string ReflectedName = RSSlangReflectUtils::ComputePackagedPath(
- JavaReflectionPathBase.c_str(),
+ Opts.mJavaReflectionPathBase.c_str(),
(RealPackageName + OS_PATH_SEPARATOR_STR + *I).c_str());
appendGeneratedFileName(ReflectedName + ".java");
}
- if ((OutputType == Slang::OT_Bitcode) &&
- (BitcodeStorage == BCST_JAVA_CODE) &&
- !generateJavaBitcodeAccessor(JavaReflectionPathBase,
+ if ((Opts.mOutputType == Slang::OT_Bitcode) &&
+ (Opts.mBitcodeStorage == BCST_JAVA_CODE) &&
+ !generateJavaBitcodeAccessor(Opts.mJavaReflectionPathBase,
RealPackageName.c_str(),
mRSContext->getLicenseNote())) {
return false;
@@ -386,7 +379,7 @@
}
}
- if (OutputDep) {
+ if (Opts.mEmitDependency) {
BCOutputFile = DepFileIter->first;
DepOutputFile = DepFileIter->second;