aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Szymon Tomasz Stefanek2015-08-27 16:18:24 +0200
committerGravatar Szymon Tomasz Stefanek2015-08-27 16:18:24 +0200
commited0b43d99fefed68fccbf4877e2a27da7a2ad4d4 (patch)
tree7e0093f9c4022a61d6925173ad288f1e7e99d20b
parentMore work on theme packing (diff)
downloadKVIrc-ed0b43d99fefed68fccbf4877e2a27da7a2ad4d4.tar.gz
KVIrc-ed0b43d99fefed68fccbf4877e2a27da7a2ad4d4.tar.bz2
KVIrc-ed0b43d99fefed68fccbf4877e2a27da7a2ad4d4.zip
Fix a bug in KVS parser related to local/global variables
-rw-r--r--src/kvirc/kvs/KviKvsHash.h2
-rw-r--r--src/kvirc/kvs/KviKvsScript.cpp3
-rw-r--r--src/kvirc/kvs/parser/KviKvsParser.cpp19
3 files changed, 17 insertions, 7 deletions
diff --git a/src/kvirc/kvs/KviKvsHash.h b/src/kvirc/kvs/KviKvsHash.h
index ff9b545e3..c8638d83b 100644
--- a/src/kvirc/kvs/KviKvsHash.h
+++ b/src/kvirc/kvs/KviKvsHash.h
@@ -107,6 +107,8 @@ public:
*/
bool isEmpty() const { return m_pDict->isEmpty(); };
+ void clear(){ m_pDict->clear(); };
+
/**
* \brief Returns the size of the hash
* \return kvs_uint_t
diff --git a/src/kvirc/kvs/KviKvsScript.cpp b/src/kvirc/kvs/KviKvsScript.cpp
index e24e661dd..89514e0dd 100644
--- a/src/kvirc/kvs/KviKvsScript.cpp
+++ b/src/kvirc/kvs/KviKvsScript.cpp
@@ -254,7 +254,8 @@ bool KviKvsScript::parse(KviWindow * pOutput, int iRunFlags)
// parse never blocks
int iFlags = iRunFlags & AssumeLocals ? KviKvsParser::AssumeLocals : 0;
- if(iRunFlags & Pedantic)iFlags |= KviKvsParser::Pedantic;
+ if(iRunFlags & Pedantic)
+ iFlags |= KviKvsParser::Pedantic;
switch(m_pData->m_eType)
{
diff --git a/src/kvirc/kvs/parser/KviKvsParser.cpp b/src/kvirc/kvs/parser/KviKvsParser.cpp
index cfc152897..055eae9e7 100644
--- a/src/kvirc/kvs/parser/KviKvsParser.cpp
+++ b/src/kvirc/kvs/parser/KviKvsParser.cpp
@@ -45,7 +45,8 @@ KviKvsParser::KviKvsParser(KviKvsScript * pScript,KviWindow * pOutputWindow)
KviKvsParser::~KviKvsParser()
{
- if(m_pGlobals)delete m_pGlobals;
+ if(m_pGlobals)
+ delete m_pGlobals;
}
void KviKvsParser::init()
@@ -136,7 +137,8 @@ KviKvsTreeNodeInstruction * KviKvsParser::parse(const QChar * pBuffer,int iFlags
m_iFlags = iFlags;
m_bError = false;
- if(m_pGlobals)m_pGlobals->clear(); // this shouldn't be needed since this is a one time parser
+ if(m_pGlobals)
+ m_pGlobals->clear(); // this shouldn't be needed since this is a one time parser
m_pBuffer = pBuffer;
m_ptr = pBuffer;
@@ -154,7 +156,8 @@ KviKvsTreeNodeInstruction * KviKvsParser::parseAsExpression(const QChar * pBuffe
m_iFlags = iFlags;
m_bError = false;
- if(m_pGlobals)m_pGlobals->clear(); // this shouldn't be needed since this is a one time parser
+ if(m_pGlobals)
+ m_pGlobals->clear(); // this shouldn't be needed since this is a one time parser
m_pBuffer = pBuffer;
m_ptr = pBuffer;
@@ -175,7 +178,8 @@ KviKvsTreeNodeInstruction * KviKvsParser::parseAsParameter(const QChar * pBuffer
m_iFlags = iFlags;
m_bError = false;
- if(m_pGlobals)m_pGlobals->clear(); // this shouldn't be needed since this is a one time parser
+ if(m_pGlobals)
+ m_pGlobals->clear(); // this shouldn't be needed since this is a one time parser
m_pBuffer = pBuffer;
m_ptr = pBuffer;
@@ -2746,16 +2750,19 @@ KviKvsTreeNodeVariable * KviKvsParser::parsePercent(bool bInObjScope)
if(bInObjScope)
return new KviKvsTreeNodeObjectField(pBegin,szIdentifier);
+ // Check if explicitly declared as global
if(m_pGlobals)
{
- if(m_pGlobals->find(szIdentifier))return new KviKvsTreeNodeGlobalVariable(pBegin,szIdentifier);
+ if(m_pGlobals->find(szIdentifier))
+ return new KviKvsTreeNodeGlobalVariable(pBegin,szIdentifier);
}
if(m_iFlags & AssumeLocals)
return new KviKvsTreeNodeLocalVariable(pBegin,szIdentifier);
- if(pIdBegin->category() & QChar::Letter_Uppercase)
+ if(pIdBegin->category() == QChar::Letter_Uppercase)
{
+ //qDebug("Variable %s is global",szIdentifier.toUtf8().data());
//if(m_iFlags & Pedantic)
// warning(pIdBegin,__tr2qs_ctx("Declaring global variables with an uppercase letter is deprecated. Global variables should be declared with 'global'","kvs"));
return new KviKvsTreeNodeGlobalVariable(pBegin,szIdentifier);