summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--basic/qa/basic_coverage/test_tdf125637.vb54
-rw-r--r--basic/qa/cppunit/test_scanner.cxx3
-rw-r--r--basic/source/comp/scanner.cxx16
-rw-r--r--basic/source/inc/scanner.hxx1
4 files changed, 62 insertions, 12 deletions
diff --git a/basic/qa/basic_coverage/test_tdf125637.vb b/basic/qa/basic_coverage/test_tdf125637.vb
new file mode 100644
index 000000000000..58fd1db3b377
--- /dev/null
+++ b/basic/qa/basic_coverage/test_tdf125637.vb
@@ -0,0 +1,54 @@
+'
+' This file is part of the LibreOffice project.
+'
+' This Source Code Form is subject to the terms of the Mozilla Public
+' License, v. 2.0. If a copy of the MPL was not distributed with this
+' file, You can obtain one at http://mozilla.org/MPL/2.0/.
+'
+
+Option Explicit
+
+Dim passCount As Integer
+Dim failCount As Integer
+Dim result As String
+
+Function doUnitTest() As String
+ result = verify_tdf125637()
+ If failCount <> 0 Or passCount = 0 Then
+ doUnitTest = 0
+ Else
+ doUnitTest = 1
+ End If
+End Function
+
+Function verify_tdf125637() As String
+
+ passCount = 0
+ failCount = 0
+
+ result = "Test Results" & Chr$(10) & "============" & Chr$(10)
+
+ ' tdf#125637 - correctly hand names ending with an underscore character at the end of the line
+ Dim test As Long
+ Dim test_ As Long
+ test_ = 1234
+ test = test_
+
+ ' Without the fix in place, this test would have failed with:
+ ' - Expected: 1234
+ ' - Actual : 0
+ TestLog_ASSERT test, 1234, "Assignment of the variable failed (tdf#125637)"
+
+ result = result & Chr$(10) & "Tests passed: " & passCount & Chr$(10) & "Tests failed: " & failCount & Chr$(10)
+ verify_tdf125637 = result
+
+End Function
+
+Sub TestLog_ASSERT(actual As Variant, expected As Variant, testName As String)
+ If expected = actual Then
+ passCount = passCount + 1
+ Else
+ result = result & Chr$(10) & "Failed: " & testName & " returned " & actual & ", expected " & expected
+ failCount = failCount + 1
+ End If
+End Sub
diff --git a/basic/qa/cppunit/test_scanner.cxx b/basic/qa/cppunit/test_scanner.cxx
index 5663c44d027e..01d16e714db6 100644
--- a/basic/qa/cppunit/test_scanner.cxx
+++ b/basic/qa/cppunit/test_scanner.cxx
@@ -297,7 +297,8 @@ void ScannerTest::testAlphanum()
CPPUNIT_ASSERT_EQUAL(size_t(2), symbols.size());
CPPUNIT_ASSERT_EQUAL(OUString("joxclk_"), symbols[0].text);
CPPUNIT_ASSERT_EQUAL(SbxVARIANT, symbols[0].type);
- CPPUNIT_ASSERT_EQUAL(OUString("joxclk "), source7); // Change the trailing '_' to a ' '
+ // tdf#125637 - don't change underscore to space
+ CPPUNIT_ASSERT_EQUAL(OUString("joxclk_"), source7);
CPPUNIT_ASSERT_EQUAL(cr, symbols[1].text);
CPPUNIT_ASSERT_EQUAL(SbxVARIANT, symbols[1].type);
diff --git a/basic/source/comp/scanner.cxx b/basic/source/comp/scanner.cxx
index f74259d7bbbf..8196d2c7f6e8 100644
--- a/basic/source/comp/scanner.cxx
+++ b/basic/source/comp/scanner.cxx
@@ -51,6 +51,7 @@ SbiScanner::SbiScanner(const OUString& rBuf, StarBASIC* p)
, bCompatible(false)
, bVBASupportOn(false)
, bPrevLineExtentsComment(false)
+ , bClosingUnderscore(false)
, bInStatement(false)
{
}
@@ -286,19 +287,11 @@ bool SbiScanner::NextSym()
if(nCol < aLine.getLength() && bCompatible && aSym.equalsIgnoreAsciiCase("go"))
scanGoto();
- // replace closing '_' by space when end of line is following
- // (wrong line continuation otherwise)
+ // tdf#125637 - check for closing underscore
if (nCol == aLine.getLength() && aLine[nCol - 1] == '_')
{
- // We are going to modify a potentially shared string, so force
- // a copy, so that aSym is not modified by the following operation
- OUString aSymCopy( aSym.getStr(), aSym.getLength() );
- aSym = aSymCopy;
-
- // HACK: modifying a potentially shared string here!
- const_cast<sal_Unicode*>(aLine.getStr())[nLineIdx - 1] = ' ';
+ bClosingUnderscore = true;
}
-
// type recognition?
// don't test the exclamation mark
// if there's a symbol behind it
@@ -685,7 +678,7 @@ PrevLineCommentLbl:
eoln:
- if( nCol && aLine[--nLineIdx] == '_' )
+ if (nCol && aLine[--nLineIdx] == '_' && !bClosingUnderscore)
{
nLineIdx = -1;
bool bRes = NextSym();
@@ -706,6 +699,7 @@ eoln:
nCol2 = nOldCol2;
aSym = "\n";
nColLock = 0;
+ bClosingUnderscore = false;
return true;
}
}
diff --git a/basic/source/inc/scanner.hxx b/basic/source/inc/scanner.hxx
index 339b4421b829..e5575e99fbaf 100644
--- a/basic/source/inc/scanner.hxx
+++ b/basic/source/inc/scanner.hxx
@@ -61,6 +61,7 @@ protected:
bool bCompatible; // true: OPTION compatible
bool bVBASupportOn; // true: OPTION VBASupport 1 otherwise default False
bool bPrevLineExtentsComment; // true: Previous line is comment and ends on "... _"
+ bool bClosingUnderscore; // true: Closing underscore followed by end of line
bool bInStatement;
void GenError( ErrCode );