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 21 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
ReaderRead(); // skip 'x' ReaderRead(); // skip 'x'
sb.Length = 0; // Remove '0' from 0x prefix from the stringvalue sb.Length = 0; // Remove '0' from 0x prefix from the stringvalue
while (IsHex((char)ReaderPeek())) { while (IsHex((char)ReaderPeek())) {
sb.Append(Char.ToUpper((char)ReaderRead())); sb.Append(Char.ToUpper((char)ReaderRead(), CultureInfo.InvariantCulture));
} }
ishex = true; ishex = true;
prefix = "0x"; prefix = "0x";

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

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

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

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

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

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

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

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

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

@ -10,6 +10,7 @@ using System.Diagnostics;
using System.Collections; using System.Collections;
using System.Collections.Generic; using System.Collections.Generic;
using System.Text; using System.Text;
using System.Globalization;
namespace ICSharpCode.NRefactory.Parser.AST namespace ICSharpCode.NRefactory.Parser.AST
{ {
@ -180,7 +181,7 @@ namespace ICSharpCode.NRefactory.Parser.AST
if (types.ContainsKey(type)) { if (types.ContainsKey(type)) {
return types[type]; return types[type];
} }
string lowerType = type.ToLower(); string lowerType = type.ToLower(CultureInfo.InvariantCulture);
if (vbtypes.ContainsKey(lowerType)) { if (vbtypes.ContainsKey(lowerType)) {
return vbtypes[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() {
*/ */
bool IsGlobalAttrTarget () { bool IsGlobalAttrTarget () {
Token pt = Peek(1); 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>
Identifier Identifier
(. (.
string opName = t.val; string opName = t.val;
switch(opName.ToLower()) if (string.Equals(opName, "istrue", StringComparison.InvariantCultureIgnoreCase)) {
{ operatorType = OverloadableOperatorType.IsTrue;
case "istrue": } else if (string.Equals(opName, "isfalse", StringComparison.InvariantCultureIgnoreCase)) {
operatorType = OverloadableOperatorType.IsTrue; operatorType = OverloadableOperatorType.IsFalse;
break; } else {
case "isfalse": Error("Invalid operator. Possible operators are '+', '-', 'Not', 'IsTrue', 'IsFalse'.");
operatorType = OverloadableOperatorType.IsFalse;
break;
default:
Error("Invalid operator. Possible operators are '+', '-', 'Not', 'IsTrue', 'IsFalse'.");
break;
} }
.) .)
. .
@ -2032,7 +2027,7 @@ TypeArgumentList<List<TypeReference> typeArguments>
GlobalAttributeSection = GlobalAttributeSection =
(. Point startPos = t.Location; .) (. Point startPos = t.Location; .)
"<" ("Assembly" | "Module") "<" ("Assembly" | "Module")
(. string attributeTarget = t.val.ToLower(); (. string attributeTarget = t.val.ToLower(System.Globalization.CultureInfo.InvariantCulture);
List<ASTAttribute> attributes = new List<ASTAttribute>(); List<ASTAttribute> attributes = new List<ASTAttribute>();
ASTAttribute attribute; ASTAttribute attribute;
.) .)
@ -2112,7 +2107,7 @@ AttributeSection<out AttributeSection section>
| "Return" (. attributeTarget = "return";.) | "Return" (. attributeTarget = "return";.)
| Identifier | Identifier
(. (.
string val = t.val.ToLower(); string val = t.val.ToLower(System.Globalization.CultureInfo.InvariantCulture);
if (val != "field" || val != "method" || if (val != "field" || val != "method" ||
val != "module" || val != "param" || val != "module" || val != "param" ||
val != "property" || val != "type") val != "property" || val != "type")

Loading…
Cancel
Save