Add support to #pragma rs java_package_name.
Change-Id: Ieb3582511238e1a13056221dfd6e6b3c1f87fe6a
diff --git a/slang_rs_context.cpp b/slang_rs_context.cpp
index 2043d97..57405f7 100644
--- a/slang_rs_context.cpp
+++ b/slang_rs_context.cpp
@@ -21,14 +21,15 @@
namespace slang {
-RSContext::RSContext(Preprocessor* PP, const TargetInfo* Target) :
+RSContext::RSContext(Preprocessor* PP, const TargetInfo* Target) :
mPP(PP),
mTarget(Target),
mTargetData(NULL),
mLLVMContext(llvm::getGlobalContext()),
mRSExportVarPragma(NULL),
mRSExportFuncPragma(NULL),
- mRSExportTypePragma(NULL)
+ mRSExportTypePragma(NULL),
+ mRSJavaPackageNamePragma(NULL)
{
/* For #pragma rs export_var */
mRSExportVarPragma = RSPragmaHandler::CreatePragmaExportVarHandler(this);
@@ -45,6 +46,11 @@
if(mRSExportTypePragma != NULL)
PP->AddPragmaHandler("rs", mRSExportTypePragma);
+ /* For #pragma rs java_package_name */
+ mRSJavaPackageNamePragma = RSPragmaHandler::CreatePragmaJavaPackageNameHandler(this);
+ if(mRSJavaPackageNamePragma != NULL)
+ PP->AddPragmaHandler("rs", mRSJavaPackageNamePragma);
+
mTargetData = new llvm::TargetData(Slang::TargetDescription);
return;
@@ -56,7 +62,7 @@
/* TODO: some check on variable */
RSExportType* ET = RSExportType::CreateFromDecl(this, VD);
- if(!ET)
+ if(!ET)
return false;
RSExportVar* EV = new RSExportVar(this, VD, ET);
@@ -70,7 +76,7 @@
bool RSContext::processExportFunc(const FunctionDecl* FD) {
assert(!FD->getName().empty() && "Function name should not be empty");
-
+
if(!FD->isThisDeclarationADefinition())
return false;
@@ -107,7 +113,7 @@
for(DeclContext::lookup_const_iterator I = R.first;
I != R.second;
- I++)
+ I++)
{
NamedDecl* const ND = *I;
ASTLocation* LastLoc = new ASTLocation(ND);
@@ -169,7 +175,7 @@
if(!processExportType(Ctx, EI->getKey()))
printf("RSContext::processExport : failed to export type '%s'\n", EI->getKey().str().c_str());
-
+
return;
}
@@ -184,9 +190,15 @@
}
}
-bool RSContext::reflectToJava(const char* OutputClassPath, const std::string& InputFileName, const std::string& OutputBCFileName) {
+bool RSContext::reflectToJava(const char* OutputPackageName, const std::string& InputFileName, const std::string& OutputBCFileName) {
+ if(OutputPackageName == NULL)
+ if(!mReflectJavaPackageName.empty())
+ OutputPackageName = mReflectJavaPackageName.c_str();
+ else
+ return true; /* no package name, just return */
+
RSReflection* R = new RSReflection(this);
- bool ret = R->reflect(OutputClassPath, InputFileName, OutputBCFileName);
+ bool ret = R->reflect(OutputPackageName, InputFileName, OutputBCFileName);
if(!ret)
printf("RSContext::reflectToJava : failed to do reflection (%s)\n", R->getLastError());
delete R;
@@ -194,14 +206,12 @@
}
RSContext::~RSContext() {
- if(mRSExportVarPragma != NULL)
- delete mRSExportVarPragma;
- if(mRSExportFuncPragma != NULL)
- delete mRSExportFuncPragma;
- if(mRSExportTypePragma != NULL)
- delete mRSExportTypePragma;
- if(mTargetData != NULL)
- delete mTargetData;
+ delete mRSExportVarPragma;
+ delete mRSExportFuncPragma;
+ delete mRSExportTypePragma;
+ delete mRSJavaPackageNamePragma;
+
+ delete mTargetData;
}
} /* namespace slang */