Skip to content

Commit 4a2c905

Browse files
committed
Remove undefined defines
1 parent 0104a5b commit 4a2c905

File tree

9 files changed

+39
-6
lines changed

9 files changed

+39
-6
lines changed

bindgen/defines/DefineFinder.cpp

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,3 +65,13 @@ DefineFinder::getFinalIdentifier(const clang::Token &token) const {
6565
// TODO: token is another definition. Find the original value
6666
return nullptr;
6767
}
68+
69+
void DefineFinder::MacroUndefined(const clang::Token &MacroNameTok,
70+
const clang::MacroDefinition &MD) {
71+
clang::SourceManager &sm = compiler.getSourceManager();
72+
if (sm.isWrittenInMainFile(MacroNameTok.getLocation()) &&
73+
!MD.getMacroInfo()->isFunctionLike()) {
74+
std::string macroName = MacroNameTok.getIdentifierInfo()->getName();
75+
ir.removeDefine(macroName);
76+
}
77+
}

bindgen/defines/DefineFinder.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,9 @@ class DefineFinder : public clang::PPCallbacks {
1212
void MacroDefined(const clang::Token &MacroNameTok,
1313
const clang::MacroDirective *MD) override;
1414

15+
void MacroUndefined(const clang::Token &MacroNameTok,
16+
const clang::MacroDefinition &MD) override;
17+
1518
private:
1619
IR &ir;
1720
const clang::CompilerInstance &compiler;

bindgen/ir/Define.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
11
#include "Define.h"
22

33
Define::Define(std::string name) : name(std::move(name)) {}
4+
5+
std::string Define::getName() { return name; }

bindgen/ir/Define.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,10 @@ class Define {
77
public:
88
explicit Define(std::string name);
99

10+
std::string getName();
11+
1012
protected:
11-
const std::string name;
13+
std::string name;
1214
};
1315

1416
#endif // SCALA_NATIVE_BINDGEN_DEFINE_H

bindgen/ir/IR.cpp

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -247,3 +247,13 @@ bool IR::existsFunctionWithName(std::string functionName) {
247247
}
248248
return false;
249249
}
250+
251+
void IR::removeDefine(const std::string &name) {
252+
for (auto it = literalDefines.begin(), end = literalDefines.end();
253+
it != end; ++it) {
254+
if ((*it).getName() == name) {
255+
literalDefines.erase(it);
256+
return;
257+
}
258+
}
259+
}

bindgen/ir/IR.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,8 @@ class IR {
4646

4747
void generate(const std::string &excludePrefix);
4848

49+
void removeDefine(const std::string &name);
50+
4951
private:
5052
/**
5153
* Generates type defs for enums, structs and unions

bindgen/ir/LiteralDefine.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
#include "Define.h"
55
#include <llvm/Support/raw_ostream.h>
66

7-
class LiteralDefine : Define {
7+
class LiteralDefine : public Define {
88
public:
99
LiteralDefine(std::string name, std::string literal);
1010

tests/samples/Define.h

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,15 @@ extern int a;
1010
#define MY_A a // unsupported
1111

1212
#ifdef NOT_DEFINED
13-
#define SHOULD_NOT_BE_DEFINED 0
13+
#define SHOULD_NOT_BE_DEFINED "Because NOT_DEFINED is not defined"
1414
#endif
1515

16+
#define DEFINED_ONLY_IN_HEADER "Defined only inside the header file"
17+
1618
#if INT == 0
17-
#define SHOULD_NOT_BE_DEFINED 1
19+
#define SHOULD_NOT_BE_DEFINED "Because INT is 42"
1820
#else
19-
#define SHOULD_BE_DEFINED 2
21+
#define SHOULD_BE_DEFINED "Because INT is not equal to 0"
2022
#endif
23+
24+
#undef DEFINED_ONLY_IN_HEADER

tests/samples/Define.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,5 +7,5 @@ object DefineDefines {
77
val STRING: native.CString = c"Hello, World!"
88
val INT = 42
99
val FLOAT = 5.6
10-
val SHOULD_BE_DEFINED = 2
10+
val SHOULD_BE_DEFINED: native.CString = c"Because INT is not equal to 0"
1111
}

0 commit comments

Comments
 (0)