summaryrefslogtreecommitdiff
path: root/basic
diff options
context:
space:
mode:
authorAndreas Bregas <ab@openoffice.org>2010-09-17 14:52:48 +0200
committerAndreas Bregas <ab@openoffice.org>2010-09-17 14:52:48 +0200
commitb5146e34196527bce91ea4059480cd921d4d7ee3 (patch)
treeaab984d748756c3f6ef6ab5b79af2adfdf883145 /basic
parent39d31f1c3b54d7581b0f825ab3693873235d0486 (diff)
mib19: #163649# Change operator precedence for NOT in VBA mode
Diffstat (limited to 'basic')
-rw-r--r--basic/source/comp/exprtree.cxx31
-rw-r--r--basic/source/inc/expr.hxx1
2 files changed, 30 insertions, 2 deletions
diff --git a/basic/source/comp/exprtree.cxx b/basic/source/comp/exprtree.cxx
index 7a4ea5965558..69f9ea553529 100644
--- a/basic/source/comp/exprtree.cxx
+++ b/basic/source/comp/exprtree.cxx
@@ -578,10 +578,20 @@ SbiExprNode* SbiExpression::Unary()
{
case MINUS:
eTok = NEG;
- case NOT:
pParser->Next();
pNd = new SbiExprNode( pParser, Unary(), eTok, NULL );
break;
+ case NOT:
+ if( pParser->IsVBASupportOn() )
+ {
+ pNd = Operand();
+ }
+ else
+ {
+ pParser->Next();
+ pNd = new SbiExprNode( pParser, Unary(), eTok, NULL );
+ }
+ break;
case PLUS:
pParser->Next();
pNd = Unary();
@@ -725,9 +735,26 @@ SbiExprNode* SbiExpression::Comp()
return pNd;
}
+SbiExprNode* SbiExpression::VBA_Not()
+{
+ SbiExprNode* pNd = NULL;
+
+ SbiToken eTok = pParser->Peek();
+ if( eTok == NOT )
+ {
+ pParser->Next();
+ pNd = new SbiExprNode( pParser, VBA_Not(), eTok, NULL );
+ }
+ else
+ {
+ pNd = Comp();
+ }
+ return pNd;
+}
+
SbiExprNode* SbiExpression::Like()
{
- SbiExprNode* pNd = Comp();
+ SbiExprNode* pNd = pParser->IsVBASupportOn() ? VBA_Not() : Comp();
if( m_eMode != EXPRMODE_EMPTY_PAREN )
{
short nCount = 0;
diff --git a/basic/source/inc/expr.hxx b/basic/source/inc/expr.hxx
index 851d0d6f1fe5..3795321f0578 100644
--- a/basic/source/inc/expr.hxx
+++ b/basic/source/inc/expr.hxx
@@ -188,6 +188,7 @@ protected:
SbiExprNode* AddSub();
SbiExprNode* Cat();
SbiExprNode* Like();
+ SbiExprNode* VBA_Not();
SbiExprNode* Comp();
SbiExprNode* Boolean();
public: