basic/source/comp/io.cxx      |    2 ++
 basic/source/comp/scanner.cxx |    5 +++--
 basic/source/comp/token.cxx   |    9 +++++++++
 basic/source/inc/scanner.hxx  |    1 +
 4 files changed, 15 insertions(+), 2 deletions(-)

New commits:
commit 634b211632847dcb04b31f478296e5e6d732ac73
Author: Noel Power <noel.po...@novell.com>
Date:   Tue Feb 21 12:22:32 2012 +0000

    allow keyword Append to be used as a variable. bnc#745930
    
    statements like
      Dim AppEnd As Integer
    will generate compiler errors because Append is a special symbol/keyword in 
libreoffice basic. This restriction though is too strict because 'Append' is 
only such a keyword when used within the 'Open' statement ( where it refers to 
one of the possible values for a paramater ).

diff --git a/basic/source/comp/io.cxx b/basic/source/comp/io.cxx
index df02a4e..efd34f2 100644
--- a/basic/source/comp/io.cxx
+++ b/basic/source/comp/io.cxx
@@ -178,6 +178,7 @@ void SbiParser::Input()
 
 void SbiParser::Open()
 {
+    bInStatement = true;
     SbiExpression aFileName( this );
     SbiToken eTok;
     TestToken( FOR );
@@ -273,6 +274,7 @@ void SbiParser::Open()
     aGen.Gen( _OPEN, nMode, nFlags );
     delete pLen;
     delete pChan;
+    bInStatement = false;
 }
 
 // NAME file AS file
diff --git a/basic/source/comp/scanner.cxx b/basic/source/comp/scanner.cxx
index 872bdd7..a664e57 100644
--- a/basic/source/comp/scanner.cxx
+++ b/basic/source/comp/scanner.cxx
@@ -53,9 +53,10 @@ SbiScanner::SbiScanner( const ::rtl::OUString& rBuf, 
StarBASIC* p ) : aBuf( rBuf
     bSymbol  =
     bCompatible =
     bVBASupportOn =
-    bPrevLineExtentsComment = sal_False;
+    bInStatement =
+    bPrevLineExtentsComment = false;
     bHash    =
-    bErrors  = sal_True;
+    bErrors  = true;
 }
 
 SbiScanner::~SbiScanner()
diff --git a/basic/source/comp/token.cxx b/basic/source/comp/token.cxx
index 63c9867..0ed6636 100644
--- a/basic/source/comp/token.cxx
+++ b/basic/source/comp/token.cxx
@@ -401,6 +401,15 @@ special:
         return eCurTok = SYMBOL;
     else if( tp->t == TEXT )
         return eCurTok = SYMBOL;
+    // maybe we can expand this for other statements that have parameters
+    // that are keywords ( and those keywords are only used within such
+    // statements )
+    // what's happening here is that if we come across 'append' ( and we are
+    // not in the middle of parsing a special statement ( like 'Open')
+    // we just treat keyword 'append' as a normal 'SYMBOL'.
+    // Also we accept Dim APPEND
+    else if ( ( !bInStatement || eCurTok == DIM ) && tp->t == APPEND )
+        return eCurTok = SYMBOL;
 
     // #i92642: Special LINE token handling -> SbiParser::Line()
 
diff --git a/basic/source/inc/scanner.hxx b/basic/source/inc/scanner.hxx
index 926706c..9e33f7a 100644
--- a/basic/source/inc/scanner.hxx
+++ b/basic/source/inc/scanner.hxx
@@ -73,6 +73,7 @@ protected:
     bool   bVBASupportOn;               // sal_True: OPTION VBASupport 1 
otherwise default False
     bool   bPrevLineExtentsComment;     // sal_True: Previous line is comment 
and ends on "... _"
 
+    bool   bInStatement;
     void   GenError( SbError );
 public:
     SbiScanner( const ::rtl::OUString&, StarBASIC* = NULL );
_______________________________________________
Libreoffice-commits mailing list
Libreoffice-commits@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to