diff options
author | Noel Power <noel.power@novell.com> | 2012-02-21 12:22:32 +0000 |
---|---|---|
committer | Noel Power <noel.power@novell.com> | 2012-02-21 12:26:29 +0000 |
commit | 634b211632847dcb04b31f478296e5e6d732ac73 (patch) | |
tree | 0ab0b225061a8535befeb8242ad3d2827dec06b9 /basic | |
parent | 136f53f58e89b13e4d89571fef25b8ba6679e6b4 (diff) |
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 ).
Diffstat (limited to 'basic')
-rw-r--r-- | basic/source/comp/io.cxx | 2 | ||||
-rw-r--r-- | basic/source/comp/scanner.cxx | 5 | ||||
-rw-r--r-- | basic/source/comp/token.cxx | 9 | ||||
-rw-r--r-- | basic/source/inc/scanner.hxx | 1 |
4 files changed, 15 insertions, 2 deletions
diff --git a/basic/source/comp/io.cxx b/basic/source/comp/io.cxx index df02a4e2383f..efd34f2cb00e 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 872bdd7d9a85..a664e571f307 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 63c98678fcdc..0ed663678a57 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 926706cc2af5..9e33f7a8e386 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 ); |