diff options
author | Andreas Bregas <ab@openoffice.org> | 2010-09-17 14:52:48 +0200 |
---|---|---|
committer | Andreas Bregas <ab@openoffice.org> | 2010-09-17 14:52:48 +0200 |
commit | b5146e34196527bce91ea4059480cd921d4d7ee3 (patch) | |
tree | aab984d748756c3f6ef6ab5b79af2adfdf883145 /basic | |
parent | 39d31f1c3b54d7581b0f825ab3693873235d0486 (diff) |
mib19: #163649# Change operator precedence for NOT in VBA mode
Diffstat (limited to 'basic')
-rw-r--r-- | basic/source/comp/exprtree.cxx | 31 | ||||
-rw-r--r-- | basic/source/inc/expr.hxx | 1 |
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: |