aboutsummaryrefslogtreecommitdiffstats
path: root/slang_rs_context.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'slang_rs_context.cpp')
-rw-r--r--slang_rs_context.cpp18
1 files changed, 15 insertions, 3 deletions
diff --git a/slang_rs_context.cpp b/slang_rs_context.cpp
index cd4c8af..9edf383 100644
--- a/slang_rs_context.cpp
+++ b/slang_rs_context.cpp
@@ -51,7 +51,7 @@ RSContext::RSContext(clang::Preprocessor &PP,
mTargetData(NULL),
mLLVMContext(llvm::getGlobalContext()),
mExportAllNonStaticVars(true),
- mExportAllNonStaticFuncs(false),
+ mExportAllNonStaticFuncs(true),
mLicenseNote(NULL) {
// For #pragma rs export_var
PP.AddPragmaHandler(
@@ -105,11 +105,18 @@ bool RSContext::processExportVar(const clang::VarDecl *VD) {
return true;
}
+static bool isSpecialRSFunc(const llvm::StringRef& Name) {
+ static llvm::StringRef FuncInit("init");
+ static llvm::StringRef FuncRoot("root");
+ return Name.equals(FuncInit) || Name.equals(FuncRoot);
+}
+
bool RSContext::processExportFunc(const clang::FunctionDecl *FD) {
assert(!FD->getName().empty() && "Function name should not be empty");
- if (!FD->isThisDeclarationADefinition())
- return false;
+ if (!FD->isThisDeclarationADefinition()) {
+ return true;
+ }
if (FD->getStorageClass() != clang::SC_None) {
fprintf(stderr, "RSContext::processExportFunc : cannot export extern or "
@@ -117,6 +124,11 @@ bool RSContext::processExportFunc(const clang::FunctionDecl *FD) {
return false;
}
+ // Do not reflect specialized RS functions like init/root.
+ if (isSpecialRSFunc(FD->getName())) {
+ return true;
+ }
+
RSExportFunc *EF = RSExportFunc::Create(this, FD);
if (EF == NULL)
return false;