Enable C++ reflection, fixing many minor bugs in the process.
Change-Id: Icc694578b649b1fed9ea26654f2b0449ea14089c
diff --git a/llvm-rs-cc.cpp b/llvm-rs-cc.cpp
index 08e25e7..1e60c6e 100644
--- a/llvm-rs-cc.cpp
+++ b/llvm-rs-cc.cpp
@@ -280,6 +280,10 @@
if (Args->hasArg(OPT_reflect_cpp)) {
Opts.mBitcodeStorage = slang::BCST_CPP_CODE;
+ // mJavaReflectionPathBase isn't set for C++ reflected builds
+ // set it to mOutputDir so we can use the path sanely from
+ // RSReflectionBase later on
+ Opts.mJavaReflectionPathBase = Opts.mOutputDir;
}
Opts.mOutputDepDir =
diff --git a/slang_rs_reflection_base.cpp b/slang_rs_reflection_base.cpp
index c29c89d..a4a0d35 100644
--- a/slang_rs_reflection_base.cpp
+++ b/slang_rs_reflection_base.cpp
@@ -105,14 +105,18 @@
write("");
}
+// remove path plus .rs from filename to generate class name
string RSReflectionBase::stripRS(const string &s) const {
- size_t pos = s.rfind(".rs");
+ string tmp(s);
+ size_t pos = tmp.rfind(".rs");
if(pos != string::npos) {
- string tmp(s);
tmp.erase(pos);
- return tmp;
}
- return s;
+ pos = tmp.rfind("/");
+ if (pos != string::npos) {
+ tmp.erase(0, pos+1);
+ }
+ return tmp;
}
void RSReflectionBase::write(const std::string &t) {
@@ -134,7 +138,7 @@
}
bool RSReflectionBase::writeFile(const string &filename, const vector< string > &txt) {
- FILE *pfin = fopen(filename.c_str(), "wt");
+ FILE *pfin = fopen((mOutputPath + filename).c_str(), "wt");
if (pfin == NULL) {
fprintf(stderr, "Error: could not write file %s\n", filename.c_str());
return false;
diff --git a/slang_rs_reflection_base.h b/slang_rs_reflection_base.h
index 474a738..1f96723 100644
--- a/slang_rs_reflection_base.h
+++ b/slang_rs_reflection_base.h
@@ -65,7 +65,7 @@
std::string stripRS(const std::string &s) const;
- static bool writeFile(const std::string &filename, const std::vector< std::string > &txt);
+ bool writeFile(const std::string &filename, const std::vector< std::string > &txt);
private:
diff --git a/slang_rs_reflection_cpp.cpp b/slang_rs_reflection_cpp.cpp
index 65ce7d9..b8eb976 100644
--- a/slang_rs_reflection_cpp.cpp
+++ b/slang_rs_reflection_cpp.cpp
@@ -67,11 +67,11 @@
mText.clear();
- RSReflectionBase::writeFile(mClassName + ".h", header);
- RSReflectionBase::writeFile(mClassName + ".cpp", cpp);
+ writeFile(mClassName + ".h", header);
+ writeFile(mClassName + ".cpp", cpp);
- return false;
+ return true;
}
typedef std::vector<std::pair<std::string, std::string> > ArgTy;