Allow redefinition of macros.
Example:
#define A 3
#define A 4
This used to do strange things, but now works as it should.
diff --git a/libacc/acc.cpp b/libacc/acc.cpp
index 475e308..483a1ac 100644
--- a/libacc/acc.cpp
+++ b/libacc/acc.cpp
@@ -3292,6 +3292,7 @@
intptr_t loc; // local variable index
char* glo; // global variable index
String mTokenString;
+ bool mbSuppressMacroExpansion;
char* dptr; // Macro state: Points to macro text during macro playback.
int dch; // Macro state: Saves old value of ch during a macro playback.
char* pGlobalBase;
@@ -3726,14 +3727,16 @@
inp();
}
tok = mTokenTable.intern(mTokenString.getUnwrapped(), mTokenString.len());
- // Is this a macro?
- char* pMacroDefinition = mTokenTable[tok].mpMacroDefinition;
- if (pMacroDefinition) {
- // Yes, it is a macro
- dptr = pMacroDefinition;
- dch = ch;
- inp();
- next();
+ if (! mbSuppressMacroExpansion) {
+ // Is this a macro?
+ char* pMacroDefinition = mTokenTable[tok].mpMacroDefinition;
+ if (pMacroDefinition) {
+ // Yes, it is a macro
+ dptr = pMacroDefinition;
+ dch = ch;
+ inp();
+ next();
+ }
}
} else {
inp();
@@ -3809,7 +3812,9 @@
}
void doDefine() {
+ mbSuppressMacroExpansion = true;
next();
+ mbSuppressMacroExpansion = false;
tokenid_t name = tok;
String* pName = new String();
if (ch == '(') {
@@ -4957,6 +4962,7 @@
mCompileResult = 0;
mLineNumber = 1;
mbBumpLine = false;
+ mbSuppressMacroExpansion = false;
}
void setArchitecture(const char* architecture) {