Preprocessor: Began work on the macro handling
This commit is contained in:
parent
4d0cd99e97
commit
7495190312
|
@ -407,3 +407,37 @@ std::string Preprocessor::getcode(const std::string &filedata, std::string cfg)
|
||||||
return ret.str();
|
return ret.str();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
static std::string Preprocessor::expandMacros( std::string code )
|
||||||
|
{
|
||||||
|
std::list<std::string> macros;
|
||||||
|
|
||||||
|
// Get macros..
|
||||||
|
std::string::size_type defpos = 0;
|
||||||
|
while ((defpos = code.find("#define", defpos)) != std::string::npos)
|
||||||
|
{
|
||||||
|
// Get macro..
|
||||||
|
std::string::size_type endpos = code.find("\n", defpos + 6);
|
||||||
|
while (endpos != std::string::npos && code[endpos-1] == '\\')
|
||||||
|
endpos = code.find("\n", endpos + 1);
|
||||||
|
if (endpos == std::string::npos)
|
||||||
|
{
|
||||||
|
code.erase( defpos );
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
macros.push_back( code.substr( defpos, endpos - defpos ) );
|
||||||
|
code.erase( defpos, endpos + 1 - defpos );
|
||||||
|
}
|
||||||
|
|
||||||
|
// Expand macros..
|
||||||
|
for (std::list<std::string>::const_iterator it = macros.begin(); it != macros.end(); ++it)
|
||||||
|
{
|
||||||
|
const std::string ¯o(*it);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
return code;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
@ -88,6 +88,8 @@ private:
|
||||||
static std::string getdef(std::string line, bool def);
|
static std::string getdef(std::string line, bool def);
|
||||||
|
|
||||||
static bool match_cfg_def( std::string cfg, const std::string &def );
|
static bool match_cfg_def( std::string cfg, const std::string &def );
|
||||||
|
|
||||||
|
static std::string expandMacros( const std::string &code );
|
||||||
};
|
};
|
||||||
|
|
||||||
//---------------------------------------------------------------------------
|
//---------------------------------------------------------------------------
|
||||||
|
|
|
@ -64,6 +64,9 @@ private:
|
||||||
TEST_CASE( multiline );
|
TEST_CASE( multiline );
|
||||||
|
|
||||||
TEST_CASE( if_defined ); // "#if defined(AAA)" => "#ifdef AAA"
|
TEST_CASE( if_defined ); // "#if defined(AAA)" => "#ifdef AAA"
|
||||||
|
|
||||||
|
// Macros..
|
||||||
|
TEST_CASE( macro1 );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -458,6 +461,19 @@ private:
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void macro1()
|
||||||
|
{
|
||||||
|
const char filedata[] = "#define AAA(aa) f(aa)\n"
|
||||||
|
"AAA(5);\n";
|
||||||
|
|
||||||
|
// Expected result..
|
||||||
|
std::string expected( "\nf(5);\n" );
|
||||||
|
|
||||||
|
// Compare result..
|
||||||
|
//ASSERT_EQUALS( expected, Preprocessor::expandMacros(filedata) );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
REGISTER_TEST( TestPreprocessor )
|
REGISTER_TEST( TestPreprocessor )
|
||||||
|
|
Loading…
Reference in New Issue