summaryrefslogtreecommitdiff
path: root/basic
diff options
context:
space:
mode:
authorArnaud Versini <Arnaud.Versini@libreoffice.org>2017-04-23 13:45:04 +0200
committerNoel Grandin <noel.grandin@collabora.co.uk>2017-04-23 21:26:47 +0200
commit4a27349879ce40150c994ed49fdc8d0a6bd33d7c (patch)
tree21e864ec3f971b929a8054a0f04b4db3c7a4c0bd /basic
parentf3281c0954bd6111386b1ed75d3bdc180fc90d6f (diff)
BASIC: Make TokenLabelInfo a singleton, never modified and simplify it.
Change-Id: Ie233aebc39f5b181087a64d3cf2053ef4ecbab91 Reviewed-on: https://gerrit.libreoffice.org/36829 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
Diffstat (limited to 'basic')
-rw-r--r--basic/source/comp/token.cxx33
-rw-r--r--basic/source/inc/token.hxx18
2 files changed, 20 insertions, 31 deletions
diff --git a/basic/source/comp/token.cxx b/basic/source/comp/token.cxx
index b4de0f0d024a..4dc5d395340f 100644
--- a/basic/source/comp/token.cxx
+++ b/basic/source/comp/token.cxx
@@ -18,6 +18,8 @@
*/
+#include <array>
+
#include "basiccharclass.hxx"
#include "token.hxx"
@@ -182,31 +184,36 @@ static const TokenTable aTokTable_Basic [] = {
{ NIL, "" }
};
+// #i109076
+class TokenLabelInfo
+{
+ std::array<bool,VBASUPPORT+1> m_pTokenCanBeLabelTab;
+
+public:
+ TokenLabelInfo();
+
+ bool canTokenBeLabel( SbiToken eTok )
+ { return m_pTokenCanBeLabelTab[eTok]; }
+};
+
+class StaticTokenLabelInfo: public ::rtl::Static< TokenLabelInfo, StaticTokenLabelInfo >{};
// #i109076
TokenLabelInfo::TokenLabelInfo()
{
- m_pTokenCanBeLabelTab.reset( new bool[VBASUPPORT+1] );
- for( int i = 0 ; i <= VBASUPPORT ; ++i )
- {
- m_pTokenCanBeLabelTab[i] = false;
- }
+ m_pTokenCanBeLabelTab.fill(false);
+
// Token accepted as label by VBA
- SbiToken eLabelToken[] = { ACCESS, ALIAS, APPEND, BASE, BINARY, CLASSMODULE,
+ static const SbiToken eLabelToken[] = { ACCESS, ALIAS, APPEND, BASE, BINARY, CLASSMODULE,
COMPARE, COMPATIBLE, DEFERR, ERROR_, BASIC_EXPLICIT, LIB, LINE, LPRINT, NAME,
TOBJECT, OUTPUT, PROPERTY, RANDOM, READ, STEP, STOP, TEXT, VBASUPPORT, NIL };
SbiToken eTok;
- for( SbiToken* pTok = eLabelToken ; (eTok = *pTok) != NIL ; ++pTok )
+ for( const SbiToken* pTok = eLabelToken ; (eTok = *pTok) != NIL ; ++pTok )
{
m_pTokenCanBeLabelTab[eTok] = true;
}
}
-TokenLabelInfo::~TokenLabelInfo()
-{
-}
-
-
// the constructor detects the length of the token table
SbiTokenizer::SbiTokenizer( const OUString& rSrc, StarBASIC* pb )
@@ -542,7 +549,7 @@ special:
bool SbiTokenizer::MayBeLabel( bool bNeedsColon )
{
- if( eCurTok == SYMBOL || m_aTokenLabelInfo.canTokenBeLabel( eCurTok ) )
+ if( eCurTok == SYMBOL || StaticTokenLabelInfo::get().canTokenBeLabel( eCurTok ) )
{
return !bNeedsColon || DoesColonFollow();
}
diff --git a/basic/source/inc/token.hxx b/basic/source/inc/token.hxx
index 3ac72d52429f..6f850b814d89 100644
--- a/basic/source/inc/token.hxx
+++ b/basic/source/inc/token.hxx
@@ -114,25 +114,7 @@ enum SbiToken {
#undef SbiTokenSHAREDTMPUNDEF
#endif
-// #i109076
-class TokenLabelInfo
-{
- std::unique_ptr<bool[]> m_pTokenCanBeLabelTab;
-
-public:
- TokenLabelInfo();
- TokenLabelInfo( const TokenLabelInfo& rInfo )
- : m_pTokenCanBeLabelTab( nullptr )
- { (void)rInfo; }
- ~TokenLabelInfo();
-
- bool canTokenBeLabel( SbiToken eTok )
- { return m_pTokenCanBeLabelTab[eTok]; }
-};
-
class SbiTokenizer : public SbiScanner {
- TokenLabelInfo m_aTokenLabelInfo;
-
protected:
SbiToken eCurTok;
SbiToken ePush;