diff options
Diffstat (limited to 'patches/vba/vba-fix-logical-precedence-order.diff')
-rw-r--r-- | patches/vba/vba-fix-logical-precedence-order.diff | 161 |
1 files changed, 0 insertions, 161 deletions
diff --git a/patches/vba/vba-fix-logical-precedence-order.diff b/patches/vba/vba-fix-logical-precedence-order.diff deleted file mode 100644 index f486a0d69..000000000 --- a/patches/vba/vba-fix-logical-precedence-order.diff +++ /dev/null @@ -1,161 +0,0 @@ -diff --git basic/source/comp/exprtree.cxx basic/source/comp/exprtree.cxx -index e7025f7..dc3ec80 100644 ---- basic/source/comp/exprtree.cxx -+++ basic/source/comp/exprtree.cxx -@@ -582,13 +582,19 @@ SbiExprNode* SbiExpression::Unary() - { - case MINUS: - eTok = NEG; -- case NOT: - pParser->Next(); -- // process something like "Do While Not "foo"="" " -+ pNd = new SbiExprNode( pParser, Unary(), eTok, NULL ); -+ break; -+ case NOT: - if( pParser->IsVBASupportOn() ) -- pNd = new SbiExprNode( pParser, Like(), eTok, NULL ); -- else -+ { -+ pNd = Operand(); -+ } -+ else -+ { -+ pParser->Next(); - pNd = new SbiExprNode( pParser, Unary(), eTok, NULL ); -+ } - break; - case PLUS: - pParser->Next(); -@@ -733,9 +739,114 @@ 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::VBA_And() -+{ -+ SbiExprNode* pNd = VBA_Not(); -+ if( m_eMode != EXPRMODE_EMPTY_PAREN ) -+ { -+ for( ;; ) -+ { -+ SbiToken eTok = pParser->Peek(); -+ if( eTok != AND ) -+ break; -+ eTok = pParser->Next(); -+ pNd = new SbiExprNode( pParser, pNd, eTok, VBA_Not() ); -+ } -+ } -+ return pNd; -+} -+ -+SbiExprNode* SbiExpression::VBA_Or() -+{ -+ SbiExprNode* pNd = VBA_And(); -+ if( m_eMode != EXPRMODE_EMPTY_PAREN ) -+ { -+ for( ;; ) -+ { -+ SbiToken eTok = pParser->Peek(); -+ if( eTok != OR ) -+ break; -+ eTok = pParser->Next(); -+ pNd = new SbiExprNode( pParser, pNd, eTok, VBA_And() ); -+ } -+ } -+ return pNd; -+} -+ -+SbiExprNode* SbiExpression::VBA_Xor() -+{ -+ SbiExprNode* pNd = VBA_Or(); -+ if( m_eMode != EXPRMODE_EMPTY_PAREN ) -+ { -+ for( ;; ) -+ { -+ SbiToken eTok = pParser->Peek(); -+ if( eTok != XOR ) -+ break; -+ eTok = pParser->Next(); -+ pNd = new SbiExprNode( pParser, pNd, eTok, VBA_Or() ); -+ } -+ } -+ return pNd; -+ -+} -+ -+SbiExprNode* SbiExpression::VBA_Eqv() -+{ -+ SbiExprNode* pNd = VBA_Xor(); -+ if( m_eMode != EXPRMODE_EMPTY_PAREN ) -+ { -+ for( ;; ) -+ { -+ SbiToken eTok = pParser->Peek(); -+ if( eTok != EQV ) -+ break; -+ eTok = pParser->Next(); -+ pNd = new SbiExprNode( pParser, pNd, eTok, VBA_Xor() ); -+ } -+ } -+ return pNd; -+} -+ -+SbiExprNode* SbiExpression::VBA_Imp() -+{ -+ SbiExprNode* pNd = VBA_Eqv(); -+ if( m_eMode != EXPRMODE_EMPTY_PAREN ) -+ { -+ for( ;; ) -+ { -+ SbiToken eTok = pParser->Peek(); -+ if( eTok != IMP ) -+ break; -+ eTok = pParser->Next(); -+ pNd = new SbiExprNode( pParser, pNd, eTok, VBA_Eqv() ); -+ } -+ } -+ return pNd; -+ -+} -+ - SbiExprNode* SbiExpression::Like() - { -- SbiExprNode* pNd = Comp(); -+ SbiExprNode* pNd = pParser->IsVBASupportOn() ? VBA_Imp() : Comp(); - if( m_eMode != EXPRMODE_EMPTY_PAREN ) - { - short nCount = 0; -diff --git basic/source/inc/expr.hxx basic/source/inc/expr.hxx -index 96604cb..d76dc14 100644 ---- basic/source/inc/expr.hxx -+++ basic/source/inc/expr.hxx -@@ -188,6 +188,12 @@ protected: - SbiExprNode* AddSub(); - SbiExprNode* Cat(); - SbiExprNode* Like(); -+ SbiExprNode* VBA_Not(); -+ SbiExprNode* VBA_And(); -+ SbiExprNode* VBA_Or(); -+ SbiExprNode* VBA_Xor(); -+ SbiExprNode* VBA_Eqv(); -+ SbiExprNode* VBA_Imp(); - SbiExprNode* Comp(); - SbiExprNode* Boolean(); - public: |