Skip to content

Commit

Permalink
Adrian Pop, adrpo@ida.liu.se
Browse files Browse the repository at this point in the history
2004-10-29
-------------------------------------------------------------->
/modelica/modeq/absyn_builder/parse.cpp
-------------------------------------------------------------->
- RML_BEGIN_LABEL(Parser__parse)
  + added delete parse; delete lex;

- get_string(...)
  + changed static buf, static size to not static in order not to
    interfere to other local buf in the runtime.

- RML_BEGIN_LABEL(Parser__parsestring), RML_BEGIN_LABEL(Parser__parsestringexp)
  + added getStringHolder to be able to delete [] the temp value
    we get from get_string(...);


git-svn-id: https://openmodelica.org/svn/OpenModelica/trunk@1328 f25d12d1-65f4-0310-ae8a-bbce733d8d8e
  • Loading branch information
adrpo committed Oct 29, 2004
1 parent 48015ab commit 02c8906
Showing 1 changed file with 54 additions and 10 deletions.
64 changes: 54 additions & 10 deletions modeq/absyn_builder/parse.cpp
Expand Up @@ -46,6 +46,7 @@ extern "C"
modelica_lexer *lex=0;
modelica_parser *parse=0;
ANTLR_USE_NAMESPACE(antlr)ASTFactory my_factory( "MyAST", MyAST::factory );

try
{
std::ifstream stream(filename);
Expand Down Expand Up @@ -110,6 +111,11 @@ extern "C"
std::cerr << "Error walking AST while building RML data: "
<< e.getMessage() << " AST: == NULL" << std::endl;
}

/* adrpo added 2004-10-27 */
if (parse) delete parse;
if (lex) delete lex;

throw e;
}

Expand All @@ -120,10 +126,18 @@ extern "C"

rmlA0 = ast ? ast : mk_nil();

/* adrpo added 2004-10-27 */
if (parse) delete parse;
if (lex) delete lex;

RML_TAILCALLK(rmlSC);
}
else
{
/* adrpo added 2004-10-27 */
if (parse) delete parse;
if (lex) delete lex;

std::cerr << "Error building AST" << std::endl;
}
}
Expand Down Expand Up @@ -160,6 +174,10 @@ extern "C"
}
//std::cerr << "Exiting Parse" << std::endl;

/* adrpo added 2004-10-27 */
if (parse) delete parse;
if (lex) delete lex;

RML_TAILCALLK(rmlFC);
}
RML_END_LABEL
Expand All @@ -168,10 +186,11 @@ extern "C"

char *get_string(std::ostringstream& s)
{
static char *buf=0;
static unsigned int size=0;
char *buf=0;
unsigned int size=0;
string str = s.str();
if (str.length() >= size) {
if (str.length() >= size)
{
size = 2*str.length();
if (buf)
delete [] buf;
Expand Down Expand Up @@ -200,6 +219,11 @@ extern "C"
* ast is initialized */
void* ast = mk_nil();

/* adrpo added 2004-10-27
* I use this to delete [] the temp allocation of get_string(...)
*/
char* getStringHolder = NULL;

try
{
ANTLR_USE_NAMESPACE(antlr)ASTFactory my_factory( "MyAST", MyAST::factory );
Expand Down Expand Up @@ -247,7 +271,7 @@ extern "C"
<< "]: error: " << e.getMessage() << std::endl;
// std::cerr << stringStream.str().c_str();
rmlA0 = mk_nil(); a0set=true;
rmlA1 = mk_scon(get_string(stringStream)); a1set=true;
rmlA1 = mk_scon((getStringHolder = get_string(stringStream))); a1set=true;
}
catch (ANTLR_USE_NAMESPACE(antlr)CharStreamException &e)
{
Expand All @@ -261,28 +285,34 @@ extern "C"
<< "]: error: illegal token" << std::endl;
// std::cerr << stringStream.str().c_str();
rmlA0 = mk_nil(); a0set=true;
rmlA1 = mk_scon(get_string(stringStream)); a1set=true;
rmlA1 = mk_scon((getStringHolder = get_string(stringStream))); a1set=true;
}
catch (ANTLR_USE_NAMESPACE(antlr)ANTLRException &e)
{
// std::cerr << "ANTLRException: " << e.getMessage() << std::endl;
stringStream << "[-,-]: internal error: " << e.getMessage() << std::endl;
rmlA0 = mk_nil(); a0set=true;
rmlA1 = mk_scon(get_string(stringStream)); a1set=true;
rmlA1 = mk_scon((getStringHolder = get_string(stringStream))); a1set=true;
}
catch (std::exception &e)
{
// std::cerr << "Error while parsing: " << e.what() << "\n";
stringStream << "[-,-]: internal error: " << e.what() << std::endl;
rmlA0 = mk_nil(); a0set=true;
rmlA1 = mk_scon(get_string(stringStream)); a1set=true;
rmlA1 = mk_scon((getStringHolder = get_string(stringStream))); a1set=true;
}
catch (...)
{
// std::cerr << "Error while parsing\n";
rmlA0 = mk_nil(); a0set=true;
rmlA1 = mk_scon("[-,-]: internal error"); a1set=true;
}

/* adrpo added 2004-10-27
* no need for getStringHolder temp value allocated from get_string
*/
if (getStringHolder) delete [] getStringHolder;

if (! a0set)
{
rmlA0 = mk_nil(); a0set=true;
Expand All @@ -307,6 +337,13 @@ extern "C"
* ast is initialized */
void* ast = mk_nil();


/* adrpo added 2004-10-27
* I use this to delete [] the temp allocation of get_string(...)
*/
char* getStringHolder = NULL;


try
{
std::istringstream stream(str);
Expand Down Expand Up @@ -354,22 +391,29 @@ extern "C"
//std::cerr << "Error while parsing expression:\n" << e.getMessage() << "\n";
stringStream << "[-,-]: internal error: " << e.getMessage() << std::endl;
rmlA0 = mk_nil();
rmlA1 = mk_scon(get_string(stringStream));
rmlA1 = mk_scon((getStringHolder = get_string(stringStream)));
}
catch (std::exception &e)
{
//std::cerr << "Error while parsing expression:\n" << e.what() << "\n";
stringStream << "[-,-]: internal error: " << e.what() << std::endl;
rmlA0 = mk_nil();
rmlA1 = mk_scon(get_string(stringStream));
rmlA1 = mk_scon((getStringHolder = get_string(stringStream)));
}
catch (...)
{
//std::cerr << "Error while parsing expression\n";
stringStream << "Error while parsing expression. Unknown exception in parse.cpp." << std::endl;
rmlA0 = mk_nil();
rmlA1 = mk_scon(get_string(stringStream));
rmlA1 = mk_scon((getStringHolder = get_string(stringStream)));
}

/* adrpo added 2004-10-27
* no need for getStringHolder temp value allocated from get_string
*/
if (getStringHolder) delete [] getStringHolder;


RML_TAILCALLK(rmlSC);
}
RML_END_LABEL
Expand Down

0 comments on commit 02c8906

Please sign in to comment.