ENH: Handle errors and optimize a bit

This commit is contained in:
Andy Cedilnik 2005-06-13 10:00:59 -04:00
parent 84f12f9298
commit d36f3c5543
2 changed files with 28 additions and 4 deletions

View File

@ -27,7 +27,14 @@ cmCommandArgumentParserHelper::cmCommandArgumentParserHelper()
{ {
m_FileLine = -1; m_FileLine = -1;
m_FileName = 0; m_FileName = 0;
m_EmptyVariable[0] = 0; m_EmptyVariable[0] = 0;
strcpy(m_DCURLYVariable, "${");
strcpy(m_RCURLYVariable, "}");
strcpy(m_ATVariable, "@");
strcpy(m_DOLLARVariable, "$");
strcpy(m_LCURLYVariable, "{");
strcpy(m_BSLASHVariable, "\\");
} }
@ -234,8 +241,8 @@ int cmCommandArgumentParserHelper::ParseString(const char* str, int verb)
cmCommandArgument_yylex_destroy(yyscanner); cmCommandArgument_yylex_destroy(yyscanner);
if ( res != 0 ) if ( res != 0 )
{ {
std::cerr << "CAL_Parser returned: " << res << std::endl; //str << "CAL_Parser returned: " << res << std::endl;
std::cerr << "When parsing: [" << str << "]" << std::endl; //std::cerr << "When parsing: [" << str << "]" << std::endl;
return 0; return 0;
} }
@ -296,7 +303,10 @@ int cmCommandArgumentParserHelper::LexInput(char* buf, int maxlen)
void cmCommandArgumentParserHelper::Error(const char* str) void cmCommandArgumentParserHelper::Error(const char* str)
{ {
unsigned long pos = static_cast<unsigned long>(this->InputBufferPos); unsigned long pos = static_cast<unsigned long>(this->InputBufferPos);
fprintf(stderr, "Argument Parser Error: %s (%lu / Line: %d)\n", str, pos, this->CurrentLine); //fprintf(stderr, "Argument Parser Error: %s (%lu / Line: %d)\n", str, pos, this->CurrentLine);
cmOStringStream ostr;
ostr << str << " (" << pos << ")";
/*
int cc; int cc;
std::cerr << "String: ["; std::cerr << "String: [";
for ( cc = 0; cc < 30 && *(this->InputBuffer.c_str() + this->InputBufferPos + cc); for ( cc = 0; cc < 30 && *(this->InputBuffer.c_str() + this->InputBufferPos + cc);
@ -305,6 +315,8 @@ void cmCommandArgumentParserHelper::Error(const char* str)
std::cerr << *(this->InputBuffer.c_str() + this->InputBufferPos + cc); std::cerr << *(this->InputBuffer.c_str() + this->InputBufferPos + cc);
} }
std::cerr << "]" << std::endl; std::cerr << "]" << std::endl;
*/
m_Error = ostr.str();
} }
void cmCommandArgumentParserHelper::UpdateCombine(const char* str1, const char* str2) void cmCommandArgumentParserHelper::UpdateCombine(const char* str1, const char* str2)

View File

@ -77,6 +77,16 @@ public:
void SetLineFile(long line, const char* file); void SetLineFile(long line, const char* file);
void SetEscapeQuotes(bool b) { m_EscapeQuotes = b; } void SetEscapeQuotes(bool b) { m_EscapeQuotes = b; }
const char* GetError() { return m_Error.c_str(); }
char m_EmptyVariable[1];
char m_DCURLYVariable[3];
char m_RCURLYVariable[3];
char m_ATVariable[3];
char m_DOLLARVariable[3];
char m_LCURLYVariable[3];
char m_BSLASHVariable[3];
private: private:
cmStdString::size_type InputBufferPos; cmStdString::size_type InputBufferPos;
cmStdString InputBuffer; cmStdString InputBuffer;
@ -98,13 +108,15 @@ private:
void CleanupParser(); void CleanupParser();
std::set<char*> m_Variables; std::set<char*> m_Variables;
char m_EmptyVariable[1];
const cmMakefile* m_Makefile; const cmMakefile* m_Makefile;
std::string m_Result; std::string m_Result;
const char* m_FileName; const char* m_FileName;
long m_FileLine; long m_FileLine;
bool m_EscapeQuotes; bool m_EscapeQuotes;
std::string m_Error;
}; };
#endif #endif