diff options
Diffstat (limited to 'slang_rs_context.cpp')
-rw-r--r-- | slang_rs_context.cpp | 18 |
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; |