Browse Source

Use InvariantCulture for string comparisons - fixes problems with Turkish locale settings.

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@492 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
Daniel Grunwald 20 years ago
parent
commit
6af13353d5
  1. 2
      src/Libraries/NRefactory/Project/Src/Lexer/CSharp/Lexer.cs
  2. 5
      src/Libraries/NRefactory/Project/Src/Lexer/LookupTable.cs
  3. 5
      src/Libraries/NRefactory/Project/Src/Lexer/Special/PreProcessingDirective.cs
  4. 35
      src/Libraries/NRefactory/Project/Src/Lexer/VBNet/Lexer.cs
  5. 6
      src/Libraries/NRefactory/Project/Src/Output/CodeDOM/CodeDOMOutputVisitor.cs
  6. 3
      src/Libraries/NRefactory/Project/Src/Parser/AST/General/TypeReference.cs
  7. 1447
      src/Libraries/NRefactory/Project/Src/Parser/VBNet/Parser.cs
  8. 23
      src/Libraries/NRefactory/Project/Src/Parser/VBNet/VBNET.ATG

2
src/Libraries/NRefactory/Project/Src/Lexer/CSharp/Lexer.cs

@ -160,7 +160,7 @@ namespace ICSharpCode.NRefactory.Parser.CSharp @@ -160,7 +160,7 @@ namespace ICSharpCode.NRefactory.Parser.CSharp
ReaderRead(); // skip 'x'
sb.Length = 0; // Remove '0' from 0x prefix from the stringvalue
while (IsHex((char)ReaderPeek())) {
sb.Append(Char.ToUpper((char)ReaderRead()));
sb.Append(Char.ToUpper((char)ReaderRead(), CultureInfo.InvariantCulture));
}
ishex = true;
prefix = "0x";

5
src/Libraries/NRefactory/Project/Src/Lexer/LookupTable.cs

@ -8,6 +8,7 @@ @@ -8,6 +8,7 @@
using System;
using System.Collections;
using System.Drawing;
using System.Globalization;
namespace ICSharpCode.NRefactory.Parser
{
@ -38,7 +39,7 @@ namespace ICSharpCode.NRefactory.Parser @@ -38,7 +39,7 @@ namespace ICSharpCode.NRefactory.Parser
Node next = root;
if (!casesensitive) {
keyword = keyword.ToUpper();
keyword = keyword.ToUpper(CultureInfo.InvariantCulture);
}
for (int i = 0; i < keyword.Length; ++i) {
@ -60,7 +61,7 @@ namespace ICSharpCode.NRefactory.Parser @@ -60,7 +61,7 @@ namespace ICSharpCode.NRefactory.Parser
Node next = root;
if (!casesensitive) {
keyword = keyword.ToUpper();
keyword = keyword.ToUpper(CultureInfo.InvariantCulture);
}
++length;

5
src/Libraries/NRefactory/Project/Src/Lexer/Special/PreProcessingDirective.cs

@ -8,6 +8,7 @@ @@ -8,6 +8,7 @@
using System;
using System.Drawing;
using System.Collections.Generic;
using System.Globalization;
namespace ICSharpCode.NRefactory.Parser
{
@ -23,11 +24,11 @@ namespace ICSharpCode.NRefactory.Parser @@ -23,11 +24,11 @@ namespace ICSharpCode.NRefactory.Parser
public static PreProcessingDirective VBToCSharp(PreProcessingDirective dir)
{
string cmd = dir.Cmd.ToLower();
string cmd = dir.Cmd.ToLower(CultureInfo.InvariantCulture);
string arg = dir.Arg;
switch (cmd) {
case "#end":
if (arg.ToLower().StartsWith("region")) {
if (arg.ToLower(CultureInfo.InvariantCulture).StartsWith("region")) {
cmd = "#endregion";
arg = "";
}

35
src/Libraries/NRefactory/Project/Src/Lexer/VBNet/Lexer.cs

@ -29,7 +29,7 @@ namespace ICSharpCode.NRefactory.Parser.VB @@ -29,7 +29,7 @@ namespace ICSharpCode.NRefactory.Parser.VB
if (curToken == null) { // first call of NextToken()
curToken = Next();
specialTracker.InformToken(curToken.kind);
// Console.WriteLine("Tok:" + Tokens.GetTokenString(curToken.kind) + " --- " + curToken.val);
Console.WriteLine("Tok:" + Tokens.GetTokenString(curToken.kind) + " --- " + curToken.val);
return curToken;
}
@ -48,7 +48,7 @@ namespace ICSharpCode.NRefactory.Parser.VB @@ -48,7 +48,7 @@ namespace ICSharpCode.NRefactory.Parser.VB
curToken.next = new Token(Tokens.EOF, curToken.col, curToken.line, "\n");
specialTracker.InformToken(curToken.next.kind);
}
// Console.WriteLine("Tok:" + Tokens.GetTokenString(curToken.kind) + " --- " + curToken.val);
Console.WriteLine("Tok:" + Tokens.GetTokenString(curToken.kind) + " --- " + curToken.val);
return curToken;
}
@ -152,7 +152,7 @@ namespace ICSharpCode.NRefactory.Parser.VB @@ -152,7 +152,7 @@ namespace ICSharpCode.NRefactory.Parser.VB
}
// handle 'REM' comments
if (s.ToUpper() == "REM") {
if (s.Equals("REM", StringComparison.InvariantCultureIgnoreCase)) {
ReadComment();
if (!lineEnd) {
lineEnd = true;
@ -175,7 +175,7 @@ namespace ICSharpCode.NRefactory.Parser.VB @@ -175,7 +175,7 @@ namespace ICSharpCode.NRefactory.Parser.VB
return ReadOperator('&');
}
ch = (char)ReaderPeek();
if (Char.ToUpper(ch) == 'H' || Char.ToUpper(ch) == 'O') {
if (Char.ToUpper(ch, CultureInfo.InvariantCulture) == 'H' || Char.ToUpper(ch, CultureInfo.InvariantCulture) == 'O') {
return ReadDigit('&', Col - 1);
}
return ReadOperator('&');
@ -234,6 +234,11 @@ namespace ICSharpCode.NRefactory.Parser.VB @@ -234,6 +234,11 @@ namespace ICSharpCode.NRefactory.Parser.VB
return sb.ToString();
}
char PeekUpperChar()
{
return Char.ToUpper((char)ReaderPeek(), CultureInfo.InvariantCulture);
}
Token ReadDigit(char ch, int x)
{
sb.Length = 0;
@ -267,22 +272,22 @@ namespace ICSharpCode.NRefactory.Parser.VB @@ -267,22 +272,22 @@ namespace ICSharpCode.NRefactory.Parser.VB
digit += (char)ReaderRead();
}
}
} else if (ch == '&' && Char.ToUpper((char)ReaderPeek()) == 'H') {
} else if (ch == '&' && PeekUpperChar() == 'H') {
const string hex = "0123456789ABCDEF";
sb.Append((char)ReaderRead()); // skip 'H'
while (ReaderPeek() != -1 && hex.IndexOf(Char.ToUpper((char)ReaderPeek())) != -1) {
while (ReaderPeek() != -1 && hex.IndexOf(PeekUpperChar()) != -1) {
ch = (char)ReaderRead();
sb.Append(ch);
digit += Char.ToUpper(ch);
digit += Char.ToUpper(ch, CultureInfo.InvariantCulture);
}
ishex = true;
} else if (ReaderPeek() != -1 && ch == '&' && Char.ToUpper((char)ReaderPeek()) == 'O') {
} else if (ReaderPeek() != -1 && ch == '&' && PeekUpperChar() == 'O') {
const string okt = "01234567";
sb.Append((char)ReaderRead()); // skip 'O'
while (ReaderPeek() != -1 && okt.IndexOf(Char.ToUpper((char)ReaderPeek())) != -1) {
while (ReaderPeek() != -1 && okt.IndexOf(PeekUpperChar()) != -1) {
ch = (char)ReaderRead();
sb.Append(ch);
digit += Char.ToUpper(ch);
digit += Char.ToUpper(ch, CultureInfo.InvariantCulture);
}
isokt = true;
} else {
@ -293,15 +298,15 @@ namespace ICSharpCode.NRefactory.Parser.VB @@ -293,15 +298,15 @@ namespace ICSharpCode.NRefactory.Parser.VB
}
}
if (ReaderPeek() != -1 && ("%&SILU".IndexOf(Char.ToUpper((char)ReaderPeek())) != -1 || ishex || isokt)) {
if (ReaderPeek() != -1 && ("%&SILU".IndexOf(PeekUpperChar()) != -1 || ishex || isokt)) {
ch = (char)ReaderPeek();
sb.Append(ch);
ch = Char.ToUpper(ch);
ch = Char.ToUpper(ch, CultureInfo.InvariantCulture);
bool unsigned = ch == 'U';
if (unsigned) {
ch = (char)ReaderPeek();
sb.Append(ch);
ch = Char.ToUpper(ch);
ch = Char.ToUpper(ch, CultureInfo.InvariantCulture);
if (ch != 'I' && ch != 'L' && ch != 'S') {
errors.Error(Line, Col, "Invalid type character: U" + ch);
}
@ -379,7 +384,7 @@ namespace ICSharpCode.NRefactory.Parser.VB @@ -379,7 +384,7 @@ namespace ICSharpCode.NRefactory.Parser.VB
}
}
if (ReaderPeek() != -1 && Char.ToUpper((char)ReaderPeek()) == 'E') { // read exponent
if (ReaderPeek() != -1 && PeekUpperChar() == 'E') { // read exponent
isdouble = true;
digit += (char)ReaderRead();
if (ReaderPeek() != -1 && (ReaderPeek() == '-' || ReaderPeek() == '+')) {
@ -391,7 +396,7 @@ namespace ICSharpCode.NRefactory.Parser.VB @@ -391,7 +396,7 @@ namespace ICSharpCode.NRefactory.Parser.VB
}
if (ReaderPeek() != -1) {
switch (char.ToUpper((char)ReaderPeek())) {
switch (PeekUpperChar()) {
case 'R':
case '#':
ReaderRead();

6
src/Libraries/NRefactory/Project/Src/Output/CodeDOM/CodeDOMOutputVisitor.cs

@ -66,7 +66,7 @@ namespace ICSharpCode.NRefactory.Parser @@ -66,7 +66,7 @@ namespace ICSharpCode.NRefactory.Parser
};
static Hashtable typeConversionTable = new Hashtable();
static Hashtable typeConversionTableVB = new Hashtable();
static Hashtable typeConversionTableVB = new Hashtable(StringComparer.InvariantCultureIgnoreCase);
static CodeDOMVisitor()
{
@ -88,8 +88,8 @@ namespace ICSharpCode.NRefactory.Parser @@ -88,8 +88,8 @@ namespace ICSharpCode.NRefactory.Parser
if (typeConversionTable[type] != null) {
return typeConversionTable[type].ToString();
}
if (typeConversionTableVB[type.ToUpper()] != null) {
return typeConversionTableVB[type.ToUpper()].ToString();
if (typeConversionTableVB[type] != null) {
return typeConversionTableVB[type].ToString();
}
return type;
}

3
src/Libraries/NRefactory/Project/Src/Parser/AST/General/TypeReference.cs

@ -10,6 +10,7 @@ using System.Diagnostics; @@ -10,6 +10,7 @@ using System.Diagnostics;
using System.Collections;
using System.Collections.Generic;
using System.Text;
using System.Globalization;
namespace ICSharpCode.NRefactory.Parser.AST
{
@ -180,7 +181,7 @@ namespace ICSharpCode.NRefactory.Parser.AST @@ -180,7 +181,7 @@ namespace ICSharpCode.NRefactory.Parser.AST
if (types.ContainsKey(type)) {
return types[type];
}
string lowerType = type.ToLower();
string lowerType = type.ToLower(CultureInfo.InvariantCulture);
if (vbtypes.ContainsKey(lowerType)) {
return vbtypes[lowerType];
}

1447
src/Libraries/NRefactory/Project/Src/Parser/VBNet/Parser.cs

File diff suppressed because it is too large Load Diff

23
src/Libraries/NRefactory/Project/Src/Parser/VBNet/VBNET.ATG

@ -118,7 +118,7 @@ bool IsObjectCreation() { @@ -118,7 +118,7 @@ bool IsObjectCreation() {
*/
bool IsGlobalAttrTarget () {
Token pt = Peek(1);
return la.kind == Tokens.LessThan && ( pt.val.ToLower() == "assembly" || pt.val.ToLower() == "module");
return la.kind == Tokens.LessThan && ( string.Equals(pt.val, "assembly", StringComparison.InvariantCultureIgnoreCase) || string.Equals(pt.val, "module", StringComparison.InvariantCultureIgnoreCase));
}
/*
@ -1345,17 +1345,12 @@ OverloadableOperator<out OverloadableOperatorType operatorType> @@ -1345,17 +1345,12 @@ OverloadableOperator<out OverloadableOperatorType operatorType>
Identifier
(.
string opName = t.val;
switch(opName.ToLower())
{
case "istrue":
operatorType = OverloadableOperatorType.IsTrue;
break;
case "isfalse":
operatorType = OverloadableOperatorType.IsFalse;
break;
default:
Error("Invalid operator. Possible operators are '+', '-', 'Not', 'IsTrue', 'IsFalse'.");
break;
if (string.Equals(opName, "istrue", StringComparison.InvariantCultureIgnoreCase)) {
operatorType = OverloadableOperatorType.IsTrue;
} else if (string.Equals(opName, "isfalse", StringComparison.InvariantCultureIgnoreCase)) {
operatorType = OverloadableOperatorType.IsFalse;
} else {
Error("Invalid operator. Possible operators are '+', '-', 'Not', 'IsTrue', 'IsFalse'.");
}
.)
.
@ -2032,7 +2027,7 @@ TypeArgumentList<List<TypeReference> typeArguments> @@ -2032,7 +2027,7 @@ TypeArgumentList<List<TypeReference> typeArguments>
GlobalAttributeSection =
(. Point startPos = t.Location; .)
"<" ("Assembly" | "Module")
(. string attributeTarget = t.val.ToLower();
(. string attributeTarget = t.val.ToLower(System.Globalization.CultureInfo.InvariantCulture);
List<ASTAttribute> attributes = new List<ASTAttribute>();
ASTAttribute attribute;
.)
@ -2112,7 +2107,7 @@ AttributeSection<out AttributeSection section> @@ -2112,7 +2107,7 @@ AttributeSection<out AttributeSection section>
| "Return" (. attributeTarget = "return";.)
| Identifier
(.
string val = t.val.ToLower();
string val = t.val.ToLower(System.Globalization.CultureInfo.InvariantCulture);
if (val != "field" || val != "method" ||
val != "module" || val != "param" ||
val != "property" || val != "type")

Loading…
Cancel
Save