summaryrefslogtreecommitdiff
path: root/basic
diff options
context:
space:
mode:
authorJens-Heiner Rechtien <hr@openoffice.org>2008-11-20 14:05:36 +0000
committerJens-Heiner Rechtien <hr@openoffice.org>2008-11-20 14:05:36 +0000
commita12f1034e075f6e19afa7054fae83054bb803901 (patch)
tree8aeaff2dbfdd3fd8dba9ed269b1ff90d4f438470 /basic
parent9f214741a1f602fa2c484dbe7a9a8e159cf98343 (diff)
CWS-TOOLING: integrate CWS ab64_DEV300
Diffstat (limited to 'basic')
-rw-r--r--basic/source/classes/eventatt.cxx4
-rw-r--r--basic/source/comp/exprnode.cxx9
-rw-r--r--basic/source/comp/exprtree.cxx164
-rw-r--r--basic/source/inc/expr.hxx9
4 files changed, 118 insertions, 68 deletions
diff --git a/basic/source/classes/eventatt.cxx b/basic/source/classes/eventatt.cxx
index 5107eb22a3..d9269cf084 100644
--- a/basic/source/classes/eventatt.cxx
+++ b/basic/source/classes/eventatt.cxx
@@ -7,7 +7,7 @@
* OpenOffice.org - a multi-platform office productivity suite
*
* $RCSfile: eventatt.cxx,v $
- * $Revision: 1.35 $
+ * $Revision: 1.35.40.1 $
*
* This file is part of OpenOffice.org.
*
@@ -566,7 +566,7 @@ void RTL_Impl_CreateUnoDialog( StarBASIC* pBasic, SbxArray& rPar, BOOL bWrite )
OSL_TRACE("About to try get a hold of ThisComponent");
Reference< frame::XModel > xModel = getModelFromBasic( pStartedBasic ) ;
- Reference< XScriptListener > xScriptListener = new BasicScriptListener_Impl( pBasic, xModel );
+ Reference< XScriptListener > xScriptListener = new BasicScriptListener_Impl( pStartedBasic, xModel );
Sequence< Any > aArgs( 4 );
aArgs[ 0 ] <<= xModel;
diff --git a/basic/source/comp/exprnode.cxx b/basic/source/comp/exprnode.cxx
index ff5ae1eb68..80fda09ff7 100644
--- a/basic/source/comp/exprnode.cxx
+++ b/basic/source/comp/exprnode.cxx
@@ -7,7 +7,7 @@
* OpenOffice.org - a multi-platform office productivity suite
*
* $RCSfile: exprnode.cxx,v $
- * $Revision: 1.19 $
+ * $Revision: 1.19.40.1 $
*
* This file is part of OpenOffice.org.
*
@@ -39,6 +39,13 @@
//////////////////////////////////////////////////////////////////////////
+SbiExprNode::SbiExprNode( void )
+{
+ pLeft = NULL;
+ pRight = NULL;
+ eNodeType = SbxDUMMY;
+}
+
SbiExprNode::SbiExprNode( SbiParser* p, SbiExprNode* l, SbiToken t, SbiExprNode* r )
{
BaseInit( p );
diff --git a/basic/source/comp/exprtree.cxx b/basic/source/comp/exprtree.cxx
index 6e53f0781e..f22ef6cede 100644
--- a/basic/source/comp/exprtree.cxx
+++ b/basic/source/comp/exprtree.cxx
@@ -7,7 +7,7 @@
* OpenOffice.org - a multi-platform office productivity suite
*
* $RCSfile: exprtree.cxx,v $
- * $Revision: 1.24 $
+ * $Revision: 1.24.40.1 $
*
* This file is part of OpenOffice.org.
*
@@ -513,8 +513,15 @@ SbiExprNode* SbiExpression::Operand()
pParser->Next();
pRes = new SbiExprNode( pParser, pParser->GetSym() ); break;
case LPAREN:
- nParenLevel++;
pParser->Next();
+ if( nParenLevel == 0 && m_eMode == EXPRMODE_LPAREN_PENDING && pParser->Peek() == RPAREN )
+ {
+ m_eMode = EXPRMODE_EMPTY_PAREN;
+ pRes = new SbiExprNode(); // Dummy node
+ pParser->Next();
+ break;
+ }
+ nParenLevel++;
pRes = Boolean();
if( pParser->Peek() != RPAREN )
{
@@ -589,9 +596,12 @@ SbiExprNode* SbiExpression::Unary()
SbiExprNode* SbiExpression::Exp()
{
SbiExprNode* pNd = Unary();
- while( pParser->Peek() == EXPON ) {
- SbiToken eTok = pParser->Next();
- pNd = new SbiExprNode( pParser, pNd, eTok, Unary() );
+ if( m_eMode != EXPRMODE_EMPTY_PAREN )
+ {
+ while( pParser->Peek() == EXPON ) {
+ SbiToken eTok = pParser->Next();
+ pNd = new SbiExprNode( pParser, pNd, eTok, Unary() );
+ }
}
return pNd;
}
@@ -599,13 +609,16 @@ SbiExprNode* SbiExpression::Exp()
SbiExprNode* SbiExpression::MulDiv()
{
SbiExprNode* pNd = Exp();
- for( ;; )
+ if( m_eMode != EXPRMODE_EMPTY_PAREN )
{
- SbiToken eTok = pParser->Peek();
- if( eTok != MUL && eTok != DIV )
- break;
- eTok = pParser->Next();
- pNd = new SbiExprNode( pParser, pNd, eTok, Exp() );
+ for( ;; )
+ {
+ SbiToken eTok = pParser->Peek();
+ if( eTok != MUL && eTok != DIV )
+ break;
+ eTok = pParser->Next();
+ pNd = new SbiExprNode( pParser, pNd, eTok, Exp() );
+ }
}
return pNd;
}
@@ -613,9 +626,12 @@ SbiExprNode* SbiExpression::MulDiv()
SbiExprNode* SbiExpression::IntDiv()
{
SbiExprNode* pNd = MulDiv();
- while( pParser->Peek() == IDIV ) {
- SbiToken eTok = pParser->Next();
- pNd = new SbiExprNode( pParser, pNd, eTok, MulDiv() );
+ if( m_eMode != EXPRMODE_EMPTY_PAREN )
+ {
+ while( pParser->Peek() == IDIV ) {
+ SbiToken eTok = pParser->Next();
+ pNd = new SbiExprNode( pParser, pNd, eTok, MulDiv() );
+ }
}
return pNd;
}
@@ -623,9 +639,12 @@ SbiExprNode* SbiExpression::IntDiv()
SbiExprNode* SbiExpression::Mod()
{
SbiExprNode* pNd = IntDiv();
- while( pParser->Peek() == MOD ) {
- SbiToken eTok = pParser->Next();
- pNd = new SbiExprNode( pParser, pNd, eTok, IntDiv() );
+ if( m_eMode != EXPRMODE_EMPTY_PAREN )
+ {
+ while( pParser->Peek() == MOD ) {
+ SbiToken eTok = pParser->Next();
+ pNd = new SbiExprNode( pParser, pNd, eTok, IntDiv() );
+ }
}
return pNd;
}
@@ -633,13 +652,16 @@ SbiExprNode* SbiExpression::Mod()
SbiExprNode* SbiExpression::AddSub()
{
SbiExprNode* pNd = Mod();
- for( ;; )
+ if( m_eMode != EXPRMODE_EMPTY_PAREN )
{
- SbiToken eTok = pParser->Peek();
- if( eTok != PLUS && eTok != MINUS )
- break;
- eTok = pParser->Next();
- pNd = new SbiExprNode( pParser, pNd, eTok, Mod() );
+ for( ;; )
+ {
+ SbiToken eTok = pParser->Peek();
+ if( eTok != PLUS && eTok != MINUS )
+ break;
+ eTok = pParser->Next();
+ pNd = new SbiExprNode( pParser, pNd, eTok, Mod() );
+ }
}
return pNd;
}
@@ -647,13 +669,16 @@ SbiExprNode* SbiExpression::AddSub()
SbiExprNode* SbiExpression::Cat()
{
SbiExprNode* pNd = AddSub();
- for( ;; )
+ if( m_eMode != EXPRMODE_EMPTY_PAREN )
{
- SbiToken eTok = pParser->Peek();
- if( eTok != CAT )
- break;
- eTok = pParser->Next();
- pNd = new SbiExprNode( pParser, pNd, eTok, AddSub() );
+ for( ;; )
+ {
+ SbiToken eTok = pParser->Peek();
+ if( eTok != CAT )
+ break;
+ eTok = pParser->Next();
+ pNd = new SbiExprNode( pParser, pNd, eTok, AddSub() );
+ }
}
return pNd;
}
@@ -661,24 +686,27 @@ SbiExprNode* SbiExpression::Cat()
SbiExprNode* SbiExpression::Comp()
{
SbiExprNode* pNd = Cat();
- short nCount = 0;
- for( ;; )
+ if( m_eMode != EXPRMODE_EMPTY_PAREN )
{
- SbiToken eTok = pParser->Peek();
- if( m_eMode == EXPRMODE_ARRAY_OR_OBJECT )
- break;
- if( eTok != EQ && eTok != NE && eTok != LT
- && eTok != GT && eTok != LE && eTok != GE )
- break;
- eTok = pParser->Next();
- pNd = new SbiExprNode( pParser, pNd, eTok, Cat() );
- nCount++;
- }
- // Mehrere Operatoren hintereinander gehen nicht
- if( nCount > 1 )
- {
- pParser->Error( SbERR_SYNTAX );
- bError = TRUE;
+ short nCount = 0;
+ for( ;; )
+ {
+ SbiToken eTok = pParser->Peek();
+ if( m_eMode == EXPRMODE_ARRAY_OR_OBJECT )
+ break;
+ if( eTok != EQ && eTok != NE && eTok != LT
+ && eTok != GT && eTok != LE && eTok != GE )
+ break;
+ eTok = pParser->Next();
+ pNd = new SbiExprNode( pParser, pNd, eTok, Cat() );
+ nCount++;
+ }
+ // Mehrere Operatoren hintereinander gehen nicht
+ if( nCount > 1 )
+ {
+ pParser->Error( SbERR_SYNTAX );
+ bError = TRUE;
+ }
}
return pNd;
}
@@ -686,16 +714,19 @@ SbiExprNode* SbiExpression::Comp()
SbiExprNode* SbiExpression::Like()
{
SbiExprNode* pNd = Comp();
- short nCount = 0;
- while( pParser->Peek() == LIKE ) {
- SbiToken eTok = pParser->Next();
- pNd = new SbiExprNode( pParser, pNd, eTok, Comp() ), nCount++;
- }
- // Mehrere Operatoren hintereinander gehen nicht
- if( nCount > 1 )
+ if( m_eMode != EXPRMODE_EMPTY_PAREN )
{
- pParser->Error( SbERR_SYNTAX );
- bError = TRUE;
+ short nCount = 0;
+ while( pParser->Peek() == LIKE ) {
+ SbiToken eTok = pParser->Next();
+ pNd = new SbiExprNode( pParser, pNd, eTok, Comp() ), nCount++;
+ }
+ // Mehrere Operatoren hintereinander gehen nicht
+ if( nCount > 1 )
+ {
+ pParser->Error( SbERR_SYNTAX );
+ bError = TRUE;
+ }
}
return pNd;
}
@@ -703,14 +734,17 @@ SbiExprNode* SbiExpression::Like()
SbiExprNode* SbiExpression::Boolean()
{
SbiExprNode* pNd = Like();
- for( ;; )
+ if( m_eMode != EXPRMODE_EMPTY_PAREN )
{
- SbiToken eTok = pParser->Peek();
- if( eTok != AND && eTok != OR && eTok != XOR
- && eTok != EQV && eTok != IMP && eTok != IS )
- break;
- eTok = pParser->Next();
- pNd = new SbiExprNode( pParser, pNd, eTok, Like() );
+ for( ;; )
+ {
+ SbiToken eTok = pParser->Peek();
+ if( eTok != AND && eTok != OR && eTok != XOR
+ && eTok != EQV && eTok != IMP && eTok != IS )
+ break;
+ eTok = pParser->Next();
+ pNd = new SbiExprNode( pParser, pNd, eTok, Like() );
+ }
}
return pNd;
}
@@ -932,6 +966,12 @@ SbiParameters::SbiParameters( SbiParser* p, BOOL bStandaloneExpression, BOOL bPa
bAssumeArrayMode = true;
eTok = NIL;
}
+ else if( eModeAfter == EXPRMODE_EMPTY_PAREN )
+ {
+ bBracket = TRUE;
+ delete pExpr;
+ return;
+ }
}
else
pExpr = new SbiExpression( pParser );
diff --git a/basic/source/inc/expr.hxx b/basic/source/inc/expr.hxx
index e86f6caed8..948ba9f5d2 100644
--- a/basic/source/inc/expr.hxx
+++ b/basic/source/inc/expr.hxx
@@ -7,7 +7,7 @@
* OpenOffice.org - a multi-platform office productivity suite
*
* $RCSfile: expr.hxx,v $
- * $Revision: 1.15 $
+ * $Revision: 1.15.40.1 $
*
* This file is part of OpenOffice.org.
*
@@ -67,9 +67,10 @@ enum SbiExprMode { // Expression context:
EXPRMODE_STANDALONE, // a param1, param2 OR a( param1, param2 ) = 42
EXPRMODE_LPAREN_PENDING, // start of parameter list with bracket, special handling
EXPRMODE_LPAREN_NOT_NEEDED, // pending LPAREN has not been used
- EXPRMODE_ARRAY_OR_OBJECT // '=' or '(' or '.' found after ')' on ParenLevel 0, stopping
+ EXPRMODE_ARRAY_OR_OBJECT, // '=' or '(' or '.' found after ')' on ParenLevel 0, stopping
// expression, assuming array syntax a(...)[(...)] = ?
// or a(...).b(...)
+ EXPRMODE_EMPTY_PAREN // It turned out that the paren don't contain anything: a()
};
enum SbiNodeType {
@@ -77,7 +78,8 @@ enum SbiNodeType {
SbxSTRVAL, // aStrVal = Wert, before #i59791/#i45570: nStringId = Wert
SbxVARVAL, // aVar = Wert
SbxTYPEOF, // TypeOf ObjExpr Is Type
- SbxNODE // Node
+ SbxNODE, // Node
+ SbxDUMMY
};
enum RecursiveMode
@@ -117,6 +119,7 @@ class SbiExprNode { // Operatoren (und Operanden)
void GenElement( SbiOpcode ); // Element
void BaseInit( SbiParser* p ); // Hilfsfunktion fuer Ctor, AB 17.12.95
public:
+ SbiExprNode( void );
SbiExprNode( SbiParser*, double, SbxDataType );
SbiExprNode( SbiParser*, const String& );
SbiExprNode( SbiParser*, const SbiSymDef&, SbxDataType, SbiExprList* = NULL );