From fd726d710fb7cd24092fffc184f3f327020b7126 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Marjam=C3=A4ki?= Date: Tue, 15 May 2007 11:19:52 +0000 Subject: [PATCH] Building statement list; bug fixes --- main.cpp | 49 +++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 41 insertions(+), 8 deletions(-) diff --git a/main.cpp b/main.cpp index 6d377f455..d845dfb18 100644 --- a/main.cpp +++ b/main.cpp @@ -569,9 +569,11 @@ void CreateStatementList() // Declaring variables.. if (IsName(tok->str)) { - for (TOKEN *tok2 = tok->next; tok2; tok2 = tok2->next) + const char *str1 = getstr(tok, 1); + bool decl = IsName(str1) || str1[0]=='*'; + for (TOKEN *tok2 = decl ? tok->next : NULL; tok2; tok2 = tok2->next) { - if (tok2->str[0] == ';') + if (tok2->str[0] == ';' || tok2->str[0] == '.') break; const char *str1 = getstr(tok2, 1); @@ -593,21 +595,52 @@ void CreateStatementList() if (tok2->str[0]==';') break; - if (match(tok2,"var =")) + if (!IsName(tok2->str)) + continue; + + + // Get variable name.. + std::ostringstream varname; + varname << tok2->str; + bool isname = true; + TOKEN *eq = NULL; + for (TOKEN *tok3 = tok2->next; tok3; tok3 = tok3->next) { - TOKEN *rs = tok2->next->next; + if (tok3->str[0]==';' || tok3->str[0]=='*' || tok3->str[0]==',') + break; + + if (strcmp(tok3->str,"=")==0) + { + eq = tok3; + break; + } + + if (isname && IsName(tok3->str)) + break; + isname = IsName(tok3->str); + + varname << tok3->str; + } + + + // Equal with.. + if (eq != NULL) + { + TOKEN *rs = eq->next; if ( match(rs,"new type ;") ) - AppendStatement(STATEMENT::NEW, tok2->str); + AppendStatement(STATEMENT::NEW, varname.str()); else if ( match(rs, "new type (") ) - AppendStatement(STATEMENT::NEW, tok2->str); + AppendStatement(STATEMENT::NEW, varname.str()); else if ( match(rs, "new type [") ) - AppendStatement(STATEMENT::NEWARRAY, tok2->str); + AppendStatement(STATEMENT::NEWARRAY, varname.str()); else - AppendStatement(STATEMENT::ASSIGN, tok2->str); + AppendStatement(STATEMENT::ASSIGN, varname.str()); + + tok2 = eq; } }