Author: gert
Date: 2008-01-27 11:06:24 -0500 (Sun, 27 Jan 2008)
New Revision: 94055

Modified:
   trunk/mcs/class/System/Microsoft.CSharp/CSharpCodeGenerator.cs
   trunk/mcs/class/System/Microsoft.CSharp/ChangeLog
   trunk/mcs/class/System/Microsoft.VisualBasic/ChangeLog
   trunk/mcs/class/System/Microsoft.VisualBasic/VBCodeGenerator.cs
   trunk/mcs/class/System/System.CodeDom.Compiler/ChangeLog
   trunk/mcs/class/System/System.CodeDom.Compiler/CodeGenerator.cs
   trunk/mcs/class/System/Test/Microsoft.CSharp/ChangeLog
   
trunk/mcs/class/System/Test/Microsoft.CSharp/CodeGeneratorFromExpressionTest.cs
   trunk/mcs/class/System/Test/Microsoft.VisualBasic/ChangeLog
   
trunk/mcs/class/System/Test/Microsoft.VisualBasic/CodeGeneratorFromExpressionTest.cs
Log:
* CSharpCodeGenerator.cs: Avoid ArgumentNullException when
CodeDelegateInvokeExpression.TargetObject is null. 
* VBCodeGenerator.cs: In GenerateDelegateInvokeExpression, only emit
RaiseEvent statement on 2.0 profile if TargetObject is a
CodeEventReferenceExpression. Spaces to tabs and code formatting.
* CodeGenerator.cs: Fixed ArgumentException argument names. Indent
expression list.
* CodeGeneratorFromExpressionTest.cs: Copied some tests from VB, and
improved existing tests.
* CodeGeneratorFromExpressionTest.cs: Numbered tests. Fixed test for
DelegateInvokeExpression to pass on MS 2.0 and improved coverage.


Modified: trunk/mcs/class/System/Microsoft.CSharp/CSharpCodeGenerator.cs
===================================================================
--- trunk/mcs/class/System/Microsoft.CSharp/CSharpCodeGenerator.cs      
2008-01-27 16:04:40 UTC (rev 94054)
+++ trunk/mcs/class/System/Microsoft.CSharp/CSharpCodeGenerator.cs      
2008-01-27 16:06:24 UTC (rev 94055)
@@ -289,7 +289,8 @@
 
                protected override void GenerateDelegateInvokeExpression 
(CodeDelegateInvokeExpression expression)
                {
-                       GenerateExpression (expression.TargetObject);
+                       if (expression.TargetObject != null)
+                               GenerateExpression (expression.TargetObject);
                        Output.Write ('(');
                        OutputExpressionList (expression.Parameters);
                        Output.Write (')');

Modified: trunk/mcs/class/System/Microsoft.CSharp/ChangeLog
===================================================================
--- trunk/mcs/class/System/Microsoft.CSharp/ChangeLog   2008-01-27 16:04:40 UTC 
(rev 94054)
+++ trunk/mcs/class/System/Microsoft.CSharp/ChangeLog   2008-01-27 16:06:24 UTC 
(rev 94055)
@@ -1,3 +1,8 @@
+2008-01-27  Gert Driesen  <[EMAIL PROTECTED]>
+
+       * CSharpCodeGenerator.cs: Avoid ArgumentNullException when
+       CodeDelegateInvokeExpression.TargetObject is null.
+
 2008-01-16  Gert Driesen  <[EMAIL PROTECTED]>
 
        * CSharpCodeGenerator.cs: Cosmetic changes to the code emitted for

Modified: trunk/mcs/class/System/Microsoft.VisualBasic/ChangeLog
===================================================================
--- trunk/mcs/class/System/Microsoft.VisualBasic/ChangeLog      2008-01-27 
16:04:40 UTC (rev 94054)
+++ trunk/mcs/class/System/Microsoft.VisualBasic/ChangeLog      2008-01-27 
16:06:24 UTC (rev 94055)
@@ -1,3 +1,9 @@
+2008-01-27  Gert Driesen  <[EMAIL PROTECTED]>
+
+       * VBCodeGenerator.cs: In GenerateDelegateInvokeExpression, only emit
+       RaiseEvent statement on 2.0 profile if TargetObject is a
+       CodeEventReferenceExpression. Spaces to tabs and code formatting.
+
 2008-01-16  Gert Driesen  <[EMAIL PROTECTED]>
 
        * VBCodeGenerator.cs: Implement support for type parameters.

Modified: trunk/mcs/class/System/Microsoft.VisualBasic/VBCodeGenerator.cs
===================================================================
--- trunk/mcs/class/System/Microsoft.VisualBasic/VBCodeGenerator.cs     
2008-01-27 16:04:40 UTC (rev 94054)
+++ trunk/mcs/class/System/Microsoft.VisualBasic/VBCodeGenerator.cs     
2008-01-27 16:06:24 UTC (rev 94055)
@@ -57,7 +57,7 @@
        internal class VBCodeGenerator : CodeGenerator
        {
 #if NET_2_0
-               private string[] Keywords = new string[] {
+               private string [] Keywords = new string [] {
                        "AddHandler", "AddressOf", "Alias", "And",
                        "AndAlso", "Ansi", "As", "Assembly",
                        "Auto", "Boolean", "ByRef", "Byte", 
@@ -95,7 +95,7 @@
                        "Xor" 
                };
 #else
-               private string[] Keywords = new string[] {
+               private string [] Keywords = new string [] {
                        "AddHandler", "AddressOf", "Alias", "And",
                        "AndAlso", "Ansi", "As", "Assembly",
                        "Auto", "Boolean", "ByRef", "Byte", 
@@ -173,9 +173,9 @@
 
                                output.Write ("(Not (");
                                GenerateExpression (reverse ? e.Right : e.Left);
-                               output.Write (") Is ");
-                               GenerateExpression (reverse ? e.Left : e.Right);
-                               output.Write (')');
+                               output.Write (") Is ");
+                               GenerateExpression (reverse ? e.Left : e.Right);
+                               output.Write (')');
                        } else {
                                base.GenerateBinaryOperatorExpression (e);
                        }
@@ -199,12 +199,9 @@
                                OutputExpressionList (initializers);
                                --Indent;
                                output.Write ("}");
-
-                       } 
-                       else {
+                       } else {
                                CodeTypeReference arrayType = 
createType.ArrayElementType;
-                               while (arrayType != null) 
-                               {
+                               while (arrayType != null) {
                                        createType = arrayType;
                                        arrayType = arrayType.ArrayElementType;
                                }
@@ -239,14 +236,14 @@
                        output.Write (")");
                }
 
-               private bool AsBool(object datavalue)
+               private bool AsBool (object datavalue)
                {
-                       return datavalue != null && datavalue is bool && 
(bool)datavalue;
+                       return datavalue != null && datavalue is bool && (bool) 
datavalue;
                }
                
-               private string OnOff(bool datavalue)
+               private string OnOff (bool datavalue)
                {
-                       return datavalue?"On":"Off";
+                       return datavalue ? "On" : "Off";
                }
 
                protected override void GenerateCompileUnitStart 
(CodeCompileUnit compileUnit)
@@ -261,8 +258,8 @@
                        GenerateComment (new CodeComment (" </autogenerated>"));
                        GenerateComment (new CodeComment 
("------------------------------------------------------------------------------"));
                        Output.WriteLine ();
-                       if (AsBool(compileUnit.UserData["AllowLateBound"])) {
-                               Output.WriteLine("Option Explicit 
{0}",OnOff(AsBool(compileUnit.UserData["RequireVariableDeclaration"])));
+                       if (AsBool (compileUnit.UserData ["AllowLateBound"])) {
+                               Output.WriteLine("Option Explicit {0}", OnOff 
(AsBool (compileUnit.UserData ["RequireVariableDeclaration"])));
                                Output.WriteLine("Option Strict Off");
                        } else {
                                Output.WriteLine("Option Explicit On"); // 
Strict On implies Explicit On
@@ -382,8 +379,13 @@
                {
                        CodeEventReferenceExpression ev = 
expression.TargetObject as CodeEventReferenceExpression;
                        
+#if ONLY_1_1
                        Output.Write ("RaiseEvent ");
+#endif
                        if (ev != null) {
+#if NET_2_0
+                               Output.Write ("RaiseEvent ");
+#endif
                                if (ev.TargetObject != null && 
!(ev.TargetObject is CodeThisReferenceExpression)) {
                                        GenerateExpression (ev.TargetObject);
                                        Output.Write (".");
@@ -516,13 +518,13 @@
                        string text = comment.Text;
 
                        for (int i = 0; i < text.Length; i++) {
-                               output.Write (text[i]);
+                               output.Write (text [i]);
                                if (text[i] == '\r') {
-                                       if (i < (text.Length - 1) && text[i + 
1] == '\n') {
+                                       if (i < (text.Length - 1) && text [i + 
1] == '\n') {
                                                continue;
                                        }
                                        output.Write (commentChars);
-                               } else if (text[i] == '\n') {
+                               } else if (text [i] == '\n') {
                                        output.Write (commentChars);
                                }
                        }
@@ -589,7 +591,6 @@
 
                        CodeStatementCollection finallies = 
statement.FinallyStatements;
                        if (finallies.Count > 0) {
-
                                output.WriteLine ("Finally");
                                ++Indent;
                                GenerateStatements (finallies);
@@ -600,7 +601,7 @@
                }
 
                protected override void GenerateAssignStatement 
(CodeAssignStatement statement)
-               {                       
+               {
                        TextWriter output = Output;
                        GenerateExpression (statement.Left);
                        output.Write (" = ");
@@ -676,8 +677,7 @@
                        OutputTypeNamePair (statement.Type, statement.Name);
 
                        CodeExpression initExpression = 
statement.InitExpression;
-                       if (initExpression != null) 
-                       {
+                       if (initExpression != null) {
                                output.Write (" = ");
                                GenerateExpression (initExpression);
                        }
@@ -702,13 +702,12 @@
 
                protected override void GenerateEvent (CodeMemberEvent 
eventRef, CodeTypeDeclaration declaration)
                {
-                       if (IsCurrentDelegate || IsCurrentEnum) {
+                       if (IsCurrentDelegate || IsCurrentEnum)
                                return;
-                       }
 
                        TextWriter output = Output;
 
-                       OutputAttributes (eventRef.CustomAttributes, null, 
+                       OutputAttributes (eventRef.CustomAttributes, null,
                                LineHandling.ContinueLine);
 
                        OutputMemberAccessModifier (eventRef.Attributes);
@@ -732,9 +731,8 @@
 
                protected override void GenerateField (CodeMemberField field)
                {
-                       if (IsCurrentDelegate || IsCurrentInterface) {
+                       if (IsCurrentDelegate || IsCurrentInterface)
                                return;
-                       }
 
                        TextWriter output = Output;
 
@@ -768,7 +766,7 @@
                protected override void GenerateEntryPointMethod 
(CodeEntryPointMethod method, CodeTypeDeclaration declaration)
                {
 #if NET_2_0
-                       OutputAttributes (method.CustomAttributes, null, 
+                       OutputAttributes (method.CustomAttributes, null,
                                LineHandling.ContinueLine);
 #endif
 
@@ -782,9 +780,8 @@
                [MonoTODO ("partially implemented")]
                protected override void GenerateMethod (CodeMemberMethod 
method, CodeTypeDeclaration declaration)
                {
-                       if (IsCurrentDelegate || IsCurrentEnum) {
+                       if (IsCurrentDelegate || IsCurrentEnum)
                                return;
-                       }
 
                        bool isSub = method.ReturnType.BaseType == 
typeof(void).FullName;
 
@@ -855,9 +852,8 @@
 
                protected override void GenerateProperty (CodeMemberProperty 
property, CodeTypeDeclaration declaration)
                {
-                       if (IsCurrentDelegate || IsCurrentEnum) {
+                       if (IsCurrentDelegate || IsCurrentEnum)
                                return;
-                       }
 
                        TextWriter output = Output;
 
@@ -944,9 +940,8 @@
 
                protected override void GenerateConstructor (CodeConstructor 
constructor, CodeTypeDeclaration declaration)
                {
-                       if (IsCurrentDelegate || IsCurrentEnum || 
IsCurrentInterface) {
+                       if (IsCurrentDelegate || IsCurrentEnum || 
IsCurrentInterface)
                                return;
-                       }
 
                        OutputAttributes (constructor.CustomAttributes, null,
                                LineHandling.ContinueLine);
@@ -984,9 +979,8 @@
                
                protected override void GenerateTypeConstructor 
(CodeTypeConstructor constructor)
                {
-                       if (IsCurrentDelegate || IsCurrentEnum || 
IsCurrentInterface) {
+                       if (IsCurrentDelegate || IsCurrentEnum || 
IsCurrentInterface)
                                return;
-                       }
 
 #if NET_2_0
                        OutputAttributes (constructor.CustomAttributes, null,
@@ -1236,12 +1230,12 @@
                protected override void OutputFieldScopeModifier 
(MemberAttributes attributes)
                {
                        switch (attributes & MemberAttributes.ScopeMask) {
-                               case MemberAttributes.Static:
-                                       Output.Write ("Shared ");
-                                       break;
-                               case MemberAttributes.Const:
-                                       Output.Write ("Const ");
-                                       break;
+                       case MemberAttributes.Static:
+                               Output.Write ("Shared ");
+                               break;
+                       case MemberAttributes.Const:
+                               Output.Write ("Const ");
+                               break;
                        }
                }
 
@@ -1269,79 +1263,77 @@
                protected override void OutputMemberAccessModifier 
(MemberAttributes attributes)
                {
                        switch (attributes & MemberAttributes.AccessMask) {
-                               case MemberAttributes.Assembly:
-                               case MemberAttributes.FamilyAndAssembly:
-                                       Output.Write ("Friend "); 
-                                       break;
-                               case MemberAttributes.Family:
-                                       Output.Write ("Protected ");
-                                       break;
-                               case MemberAttributes.FamilyOrAssembly:
-                                       Output.Write ("Protected Friend ");
-                                       break;
-                               case MemberAttributes.Private:
-                                       Output.Write ("Private ");
-                                       break;
-                               case MemberAttributes.Public:
-                                       Output.Write ("Public ");
-                                       break;
+                       case MemberAttributes.Assembly:
+                       case MemberAttributes.FamilyAndAssembly:
+                               Output.Write ("Friend "); 
+                               break;
+                       case MemberAttributes.Family:
+                               Output.Write ("Protected ");
+                               break;
+                       case MemberAttributes.FamilyOrAssembly:
+                               Output.Write ("Protected Friend ");
+                               break;
+                       case MemberAttributes.Private:
+                               Output.Write ("Private ");
+                               break;
+                       case MemberAttributes.Public:
+                               Output.Write ("Public ");
+                               break;
                        }
                }
 
                private void OutputVTableModifier (MemberAttributes attributes)
                {
-                       if ((attributes & MemberAttributes.VTableMask) == 
MemberAttributes.New) {
+                       if ((attributes & MemberAttributes.VTableMask) == 
MemberAttributes.New)
                                Output.Write ("Shadows ");
-                       }
                }
 
                protected override void OutputMemberScopeModifier 
(MemberAttributes attributes)
                {
                        switch (attributes & MemberAttributes.ScopeMask) {
-                               case MemberAttributes.Abstract:
-                                       Output.Write ("MustOverride ");
-                                       break;
-                               case MemberAttributes.Final:
-                                       // do nothing
-                                       break;
-                               case MemberAttributes.Static:
-                                       Output.Write ("Shared ");
-                                       break;
-                               case MemberAttributes.Override:
-                                       Output.Write ("Overrides ");
-                                       break;
-                               case MemberAttributes.Overloaded:
-                                       // based on 
http://gendotnet.com/Code%20Gen%20Articles/codedom.htm
-                                       Output.Write ("Overloads ");
+                       case MemberAttributes.Abstract:
+                               Output.Write ("MustOverride ");
+                               break;
+                       case MemberAttributes.Final:
+                               // do nothing
+                               break;
+                       case MemberAttributes.Static:
+                               Output.Write ("Shared ");
+                               break;
+                       case MemberAttributes.Override:
+                               Output.Write ("Overrides ");
+                               break;
+                       case MemberAttributes.Overloaded:
+                               // based on 
http://gendotnet.com/Code%20Gen%20Articles/codedom.htm
+                               Output.Write ("Overloads ");
 
-                                       MemberAttributes access_ovl = 
attributes & MemberAttributes.AccessMask;
-                                       if (access_ovl == 
MemberAttributes.Public || access_ovl == MemberAttributes.Family) {
-                                               Output.Write ("Overridable ");
-                                       }
-                                       break;
-                               default:
-                                       //
-                                       // FUNNY! if the scope value is
-                                       // rubbish (0 or >Const), and access
-                                       // is public, protected make it
-                                       // "virtual".
-                                       //
-                                       // i'm not sure whether this is 100%
-                                       // correct, but it seems to be MS
-                                       // behavior.
-                                       //
-                                       // On MS.NET 2.0, internal properties
-                                       // are also marked "virtual".
-                                       //
-                                       MemberAttributes access = attributes & 
MemberAttributes.AccessMask;
-                                       if (access == MemberAttributes.Public 
|| 
+                               MemberAttributes access_ovl = attributes & 
MemberAttributes.AccessMask;
+                               if (access_ovl == MemberAttributes.Public || 
access_ovl == MemberAttributes.Family)
+                                       Output.Write ("Overridable ");
+                               break;
+                       default:
+                               //
+                               // FUNNY! if the scope value is
+                               // rubbish (0 or >Const), and access
+                               // is public, protected make it
+                               // "virtual".
+                               //
+                               // i'm not sure whether this is 100%
+                               // correct, but it seems to be MS
+                               // behavior.
+                               //
+                               // On MS.NET 2.0, internal properties
+                               // are also marked "virtual".
+                               //
+                               MemberAttributes access = attributes & 
MemberAttributes.AccessMask;
+                               if (access == MemberAttributes.Public || 
 #if NET_2_0
-                                               access == 
MemberAttributes.Family || access == MemberAttributes.Assembly)
+                                       access == MemberAttributes.Family || 
access == MemberAttributes.Assembly)
 #else
-                                               access == 
MemberAttributes.Family)
+                                       access == MemberAttributes.Family)
 #endif
-                                               Output.Write ("Overridable ");
-                                       break;
+                                       Output.Write ("Overridable ");
+                               break;
                        }
                }
 
@@ -1413,25 +1405,25 @@
 #endif
                        
                        switch (attributes & TypeAttributes.VisibilityMask) {
-                               case TypeAttributes.Public:
-                               case TypeAttributes.NestedPublic:
-                                       output.Write ("Public ");
-                                       break;
-                               case TypeAttributes.NestedPrivate:
-                                       output.Write ("Private ");
-                                       break;
+                       case TypeAttributes.Public:
+                       case TypeAttributes.NestedPublic:
+                               output.Write ("Public ");
+                               break;
+                       case TypeAttributes.NestedPrivate:
+                               output.Write ("Private ");
+                               break;
 #if NET_2_0
-                               case TypeAttributes.NotPublic:
-                               case TypeAttributes.NestedFamANDAssem:
-                               case TypeAttributes.NestedAssembly:
-                                       output.Write ("Friend ");
-                                       break; 
-                               case TypeAttributes.NestedFamily:
-                                       output.Write ("Protected ");
-                                       break;
-                               case TypeAttributes.NestedFamORAssem:
-                                       output.Write ("Protected Friend ");
-                                       break;
+                       case TypeAttributes.NotPublic:
+                       case TypeAttributes.NestedFamANDAssem:
+                       case TypeAttributes.NestedAssembly:
+                               output.Write ("Friend ");
+                               break; 
+                       case TypeAttributes.NestedFamily:
+                               output.Write ("Protected ");
+                               break;
+                       case TypeAttributes.NestedFamORAssem:
+                               output.Write ("Protected Friend ");
+                               break;
 #endif
                        }
 
@@ -1505,9 +1497,8 @@
                protected override void OutputTypeNamePair (CodeTypeReference 
typeRef, String name)
                {
 #if NET_2_0
-                       if (name.Length == 0) {
+                       if (name.Length == 0)
                                name = "__exception";
-                       }
 #endif
                        Output.Write (CreateEscapedIdentifier(name) + " As " + 
GetTypeOutput (typeRef));
                }
@@ -1522,12 +1513,10 @@
                        StringBuilder mySBuilder = new 
StringBuilder(value.Length);
                        mySBuilder.Append ("\"");
                        bool inQuotes = true;
-                       for (int MyCounter = 0; MyCounter < value.Length; 
MyCounter++)
-                       {
+                       for (int MyCounter = 0; MyCounter < value.Length; 
MyCounter++) {
                                if (value[MyCounter] == 34) //quotation mark
                                {
-                                       if (!inQuotes)
-                                       {
+                                       if (!inQuotes) {
                                                mySBuilder.Append ("&\"");
                                                inQuotes = true;
                                        }
@@ -1536,8 +1525,7 @@
                                }
                                else if (value[MyCounter] >= 32) //standard 
ansi/unicode characters
                                {
-                                       if (!inQuotes)
-                                       {
+                                       if (!inQuotes) {
                                                mySBuilder.Append ("&\"");
                                                inQuotes = true;
                                        }
@@ -1545,15 +1533,14 @@
                                }
                                else //special chars, e.g. line break
                                {
-                                       if (inQuotes)
-                                       { 
+                                       if (inQuotes) {
                                                mySBuilder.Append ("\"");
                                                inQuotes = false;
                                        }
                                        mySBuilder.Append 
("&Microsoft.VisualBasic.ChrW(");
                                        mySBuilder.Append 
((int)value[MyCounter]); 
                                        mySBuilder.Append (")");
-                               }                       
+                               }
                        }
                        if (inQuotes)
                                mySBuilder.Append ("\"");
@@ -1595,7 +1582,7 @@
                        arrayType = type.ArrayElementType;
                        if (arrayType != null)
                                output = GetTypeOutput (arrayType);
-                       else { 
+                       else {
                                switch (type.BaseType) {
                                case "System.DateTime":
                                        output = "Date";
@@ -1691,9 +1678,8 @@
                                        continue;
                                }
 
-                               if (p != property && p.Name == property.Name && 
p.PrivateImplementationType == null) {
+                               if (p != property && p.Name == property.Name && 
p.PrivateImplementationType == null)
                                        return true;
-                               }
                        }
                        return false;
                }
@@ -1711,9 +1697,8 @@
                                        continue;
                                }
 
-                               if (!(m is CodeTypeConstructor) && !(m is 
CodeConstructor) && m != method && m.Name == method.Name && 
m.PrivateImplementationType == null) {
+                               if (!(m is CodeTypeConstructor) && !(m is 
CodeConstructor) && m != method && m.Name == method.Name && 
m.PrivateImplementationType == null)
                                        return true;
-                               }
                        }
                        return false;
                }
@@ -1721,9 +1706,8 @@
                private string GetEventName (CodeMemberEvent evt)
                {
 #if NET_2_0
-                       if (evt.PrivateImplementationType == null) {
+                       if (evt.PrivateImplementationType == null)
                                return evt.Name;
-                       }
 
                        string baseType = 
evt.PrivateImplementationType.BaseType.Replace ('.', '_');
                        return baseType + "_" + evt.Name;
@@ -1734,9 +1718,8 @@
 
                private string GetMethodName (CodeMemberMethod method)
                {
-                       if (method.PrivateImplementationType == null) {
+                       if (method.PrivateImplementationType == null)
                                return method.Name;
-                       }
 
                        string baseType = 
method.PrivateImplementationType.BaseType.Replace ('.', '_');
                        return baseType + "_" + method.Name;
@@ -1744,9 +1727,8 @@
 
                private string GetPropertyName (CodeMemberProperty property)
                {
-                       if (property.PrivateImplementationType == null) {
+                       if (property.PrivateImplementationType == null)
                                return property.Name;
-                       }
 
                        string baseType = 
property.PrivateImplementationType.BaseType.Replace ('.', '_');
                        return baseType + "_" + property.Name;

Modified: trunk/mcs/class/System/System.CodeDom.Compiler/ChangeLog
===================================================================
--- trunk/mcs/class/System/System.CodeDom.Compiler/ChangeLog    2008-01-27 
16:04:40 UTC (rev 94054)
+++ trunk/mcs/class/System/System.CodeDom.Compiler/ChangeLog    2008-01-27 
16:06:24 UTC (rev 94055)
@@ -1,3 +1,8 @@
+2008-01-27  Gert Driesen  <[EMAIL PROTECTED]>
+
+       * CodeGenerator.cs: Fixed ArgumentException argument names. Indent
+       expression list.
+
 2007-12-15  Marek Habersack  <[EMAIL PROTECTED]>
 
        * Compiler.cs: added support for the default collection of

Modified: trunk/mcs/class/System/System.CodeDom.Compiler/CodeGenerator.cs
===================================================================
--- trunk/mcs/class/System/System.CodeDom.Compiler/CodeGenerator.cs     
2008-01-27 16:04:40 UTC (rev 94054)
+++ trunk/mcs/class/System/System.CodeDom.Compiler/CodeGenerator.cs     
2008-01-27 16:06:24 UTC (rev 94055)
@@ -278,7 +278,7 @@
                protected void GenerateExpression (CodeExpression e)
                {
                        if (e == null)
-                               throw new ArgumentNullException ("Value cannot 
be null.");
+                               throw new ArgumentNullException ("e");
 
                        CodeArgumentReferenceExpression argref = e as 
CodeArgumentReferenceExpression;
                        if (argref != null) {
@@ -401,7 +401,7 @@
                                return;
                        }
 
-                       throw new ArgumentException ("Element type " + e + " is 
not supported.");
+                       throw new ArgumentException ("Element type " + e + " is 
not supported.", "e");
                }
 
                protected abstract void GenerateExpressionStatement 
(CodeExpressionStatement statement);
@@ -763,6 +763,7 @@
                protected virtual void OutputExpressionList 
(CodeExpressionCollection expressions,
                                                             bool 
newLineBetweenItems)
                {
+                       ++Indent;
                        IEnumerator enumerator = expressions.GetEnumerator();
                        if (enumerator.MoveNext()) {
                                CodeExpression expression = 
(CodeExpression)enumerator.Current;
@@ -781,6 +782,7 @@
                                        GenerateExpression (expression);
                                }
                        }
+                       --Indent;
                }
 
                protected virtual void OutputFieldScopeModifier 
(MemberAttributes attributes)

Modified: trunk/mcs/class/System/Test/Microsoft.CSharp/ChangeLog
===================================================================
--- trunk/mcs/class/System/Test/Microsoft.CSharp/ChangeLog      2008-01-27 
16:04:40 UTC (rev 94054)
+++ trunk/mcs/class/System/Test/Microsoft.CSharp/ChangeLog      2008-01-27 
16:06:24 UTC (rev 94055)
@@ -1,3 +1,8 @@
+2008-01-27  Gert Driesen  <[EMAIL PROTECTED]>
+
+       * CodeGeneratorFromExpressionTest.cs: Copied some tests from VB, and
+       improved existing tests.
+
 2008-01-16  Gert Driesen  <[EMAIL PROTECTED]>
 
        * CodeGeneratorFromCompileUnitTest.cs: Avoid using "", and use

Modified: 
trunk/mcs/class/System/Test/Microsoft.CSharp/CodeGeneratorFromExpressionTest.cs
===================================================================
--- 
trunk/mcs/class/System/Test/Microsoft.CSharp/CodeGeneratorFromExpressionTest.cs 
    2008-01-27 16:04:40 UTC (rev 94054)
+++ 
trunk/mcs/class/System/Test/Microsoft.CSharp/CodeGeneratorFromExpressionTest.cs 
    2008-01-27 16:06:24 UTC (rev 94055)
@@ -9,6 +9,7 @@
 using System;
 using System.CodeDom;
 using System.CodeDom.Compiler;
+using System.Globalization;
 using System.IO;
 using System.Text;
 
@@ -38,21 +39,35 @@
                }
 
                [Test]
-               [ExpectedException (typeof (ArgumentException))]
                public void DefaultExpressionTest ()
                {
                        using (StringWriter sw = new StringWriter ()) {
-                               Generate (new CodeExpression (), sw);
-                               sw.Close ();
+                               try {
+                                       Generate (new CodeExpression (), sw);
+                                       Assert.Fail ("#1");
+                               } catch (ArgumentException ex) {
+                                       // Element type 
System.CodeDom.CodeExpression is not supported
+                                       Assert.AreEqual (typeof 
(ArgumentException), ex.GetType (), "#2");
+                                       Assert.IsNull (ex.InnerException, "#3");
+                                       Assert.IsNotNull (ex.Message, "#4");
+                                       Assert.AreEqual ("e", ex.ParamName, 
"#5");
+                               }
                        }
                }
 
                [Test]
-               [ExpectedException (typeof (ArgumentNullException))]
                public void NullExpressionTest ()
                {
                        using (StringWriter sw = new StringWriter ()) {
-                               Generate (null, sw);
+                               try {
+                                       Generate (null, sw);
+                                       Assert.Fail ("#1");
+                               } catch (ArgumentNullException ex) {
+                                       Assert.AreEqual (typeof 
(ArgumentNullException), ex.GetType (), "#2");
+                                       Assert.IsNull (ex.InnerException, "#3");
+                                       Assert.IsNotNull (ex.Message, "#4");
+                                       Assert.AreEqual ("e", ex.ParamName, 
"#5");
+                               }
                        }
                }
 
@@ -350,6 +365,202 @@
                        }
                }
 
+               [Test]
+               public void ArrayCreateExpressionTest ()
+               {
+                       StringBuilder sb;
+
+                       sb = new StringBuilder ();
+                       using (StringWriter sw = new StringWriter (sb)) {
+                               Assert.AreEqual (
+                                       string.Format 
(CultureInfo.InvariantCulture,
+                                               "new int[] {{{0}        5}}",
+                                               Environment.NewLine),
+                                       Generate (new CodeArrayCreateExpression 
(
+                                                       typeof (int),
+                                                       new CodeExpression [] {
+                                                               new 
CodePrimitiveExpression (5)
+                                                               })
+                                               , sw), "#1");
+                       }
+
+                       sb = new StringBuilder ();
+                       using (StringWriter sw = new StringWriter (sb)) {
+                               Assert.AreEqual ("new int[5]",
+                                       Generate (new CodeArrayCreateExpression 
(
+                                                       typeof (int),
+                                                       new 
CodePrimitiveExpression (5))
+                                               , sw), "#2");
+                       }
+
+                       sb = new StringBuilder ();
+                       using (StringWriter sw = new StringWriter (sb)) {
+                               Assert.AreEqual (
+                                       string.Format 
(CultureInfo.InvariantCulture,
+                                               "new string[] {{{0}" +
+                                               "        \"a\",{0}" +
+                                               "        \"b\",{0}" +
+                                               "        \"c\"}}",
+                                               Environment.NewLine),
+                                       Generate (new CodeArrayCreateExpression 
(
+                                                       typeof (string),
+                                                       new CodeExpression [] {
+                                                               new 
CodePrimitiveExpression ("a"),
+                                                               new 
CodePrimitiveExpression ("b"),
+                                                               new 
CodePrimitiveExpression ("c"),
+                                                               })
+                                               , sw));
+                               sw.Close ();
+                       }
+               }
+
+               [Test]
+               public void EscapedIdentifierTest ()
+               {
+                       StringBuilder sb;
+                       string code;
+
+                       sb = new StringBuilder ();
+                       using (StringWriter sw = new StringWriter (sb)) {
+                               code = Generate (new 
CodeVariableReferenceExpression ("using"), sw);
+                               Assert.AreEqual ("@using", code, "#1");
+                               sw.Close ();
+                       }
+
+                       sb = new StringBuilder ();
+                       using (StringWriter sw = new StringWriter (sb)) {
+                               code = Generate (new 
CodeTypeReferenceExpression ("using"), sw);
+                               Assert.AreEqual ("@using", code, "#2");
+                               sw.Close ();
+                       }
+
+                       sb = new StringBuilder ();
+                       using (StringWriter sw = new StringWriter (sb)) {
+                               code = Generate (new 
CodePropertyReferenceExpression (null, "using"), sw);
+                               Assert.AreEqual ("@using", code, "#3");
+                               sw.Close ();
+                       }
+
+                       sb = new StringBuilder ();
+                       using (StringWriter sw = new StringWriter (sb)) {
+                               code = Generate (new 
CodeMethodReferenceExpression (null, "using"), sw);
+                               Assert.AreEqual ("@using", code, "#4");
+                               sw.Close ();
+                       }
+
+                       sb = new StringBuilder ();
+                       using (StringWriter sw = new StringWriter (sb)) {
+                               code = Generate (new 
CodeFieldReferenceExpression (null, "using"), sw);
+                               Assert.AreEqual ("@using", code, "#5");
+                               sw.Close ();
+                       }
+
+                       sb = new StringBuilder ();
+                       using (StringWriter sw = new StringWriter (sb)) {
+                               code = Generate (new 
CodeEventReferenceExpression (null, "using"), sw);
+                               Assert.AreEqual ("@using", code, "#6");
+                               sw.Close ();
+                       }
+               }
+
+               [Test]
+               public void EventReferenceTest ()
+               {
+                       StringBuilder sb;
+                       string code;
+
+                       sb = new StringBuilder ();
+                       using (StringWriter sw = new StringWriter (sb)) {
+                               code = Generate (new 
CodeEventReferenceExpression (null, null), sw);
+                               Assert.AreEqual (string.Empty, code, "#1");
+                       }
+
+                       sb = new StringBuilder ();
+                       using (StringWriter sw = new StringWriter (sb)) {
+                               code = Generate (new 
CodeEventReferenceExpression (null, "abc"), sw);
+                               Assert.AreEqual ("abc", code, "#2");
+                       }
+
+                       sb = new StringBuilder ();
+                       using (StringWriter sw = new StringWriter (sb)) {
+                               code = Generate (new 
CodeEventReferenceExpression (new CodeThisReferenceExpression (), null), sw);
+                               Assert.AreEqual ("this.", code, "#3");
+                       }
+
+                       sb = new StringBuilder ();
+                       using (StringWriter sw = new StringWriter (sb)) {
+                               code = Generate (new 
CodeEventReferenceExpression (new CodeThisReferenceExpression (), "abc"), sw);
+                               Assert.AreEqual ("this.abc", code, "#4");
+                       }
+
+                       sb = new StringBuilder ();
+                       using (StringWriter sw = new StringWriter (sb)) {
+                               code = Generate (new 
CodeEventReferenceExpression (new CodePrimitiveExpression ("primitive"), null), 
sw);
+                               Assert.AreEqual ("\"primitive\".", code, "#5");
+                       }
+
+                       sb = new StringBuilder ();
+                       using (StringWriter sw = new StringWriter (sb)) {
+                               code = Generate (new 
CodeEventReferenceExpression (new CodePrimitiveExpression ("primitive"), 
"abc"), sw);
+                               Assert.AreEqual ("\"primitive\".abc", code, 
"#6");
+                       }
+               }
+
+               [Test]
+               public void DelegateInvokeTest ()
+               {
+                       StringBuilder sb;
+                       string code;
+
+                       sb = new StringBuilder ();
+                       using (StringWriter sw = new StringWriter (sb)) {
+                               code = Generate (new 
CodeDelegateInvokeExpression (null, new CodePrimitiveExpression ("abc")), sw);
+                               Assert.AreEqual ("(\"abc\")", code, "#1");
+                       }
+
+                       sb = new StringBuilder ();
+                       using (StringWriter sw = new StringWriter (sb)) {
+                               code = Generate (new 
CodeDelegateInvokeExpression (new CodeThisReferenceExpression (), new 
CodePrimitiveExpression ("abc")), sw);
+                               Assert.AreEqual ("this(\"abc\")", code, "#2");
+                       }
+
+                       sb = new StringBuilder ();
+                       using (StringWriter sw = new StringWriter (sb)) {
+                               code = Generate (new 
CodeDelegateInvokeExpression (new CodePrimitiveExpression ("primitive"), new 
CodePrimitiveExpression ("abc")), sw);
+                               Assert.AreEqual ("\"primitive\"(\"abc\")", 
code, "#3");
+                       }
+
+                       sb = new StringBuilder ();
+                       using (StringWriter sw = new StringWriter (sb)) {
+                               code = Generate (new 
CodeDelegateInvokeExpression (new CodeEventReferenceExpression (new 
CodeThisReferenceExpression (), "Click"), new CodePrimitiveExpression ("abc")), 
sw);
+                               Assert.AreEqual ("this.Click(\"abc\")", code, 
"#4");
+                       }
+
+                       sb = new StringBuilder ();
+                       using (StringWriter sw = new StringWriter (sb)) {
+                               code = Generate (new 
CodeDelegateInvokeExpression (new CodeEventReferenceExpression (new 
CodeThisReferenceExpression (), null), new CodePrimitiveExpression ("abc")), 
sw);
+                               Assert.AreEqual ("this.(\"abc\")", code, "#5");
+                       }
+
+                       sb = new StringBuilder ();
+                       using (StringWriter sw = new StringWriter (sb)) {
+                               code = Generate (new 
CodeDelegateInvokeExpression (new CodeEventReferenceExpression (new 
CodePrimitiveExpression ("primitive"), "Click"), new CodePrimitiveExpression 
("abc")), sw);
+                               Assert.AreEqual 
("\"primitive\".Click(\"abc\")", code, "#6");
+                       }
+
+                       sb = new StringBuilder ();
+                       using (StringWriter sw = new StringWriter (sb)) {
+                               code = Generate (new 
CodeDelegateInvokeExpression (new CodeEventReferenceExpression (new 
CodePrimitiveExpression ("primitive"), null), new CodePrimitiveExpression 
("abc")), sw);
+                               Assert.AreEqual ("\"primitive\".(\"abc\")", 
code, "#7");
+                       }
+
+                       sb = new StringBuilder ();
+                       using (StringWriter sw = new StringWriter (sb)) {
+                               code = Generate (new 
CodeDelegateInvokeExpression (), sw);
+                               Assert.AreEqual ("()", code, "#8");
+                       }
+               }
+
                private string Generate (CodeExpression expression, 
StringWriter sw)
                {
                        generator.GenerateCodeFromExpression (expression, sw, 
options);

Modified: trunk/mcs/class/System/Test/Microsoft.VisualBasic/ChangeLog
===================================================================
--- trunk/mcs/class/System/Test/Microsoft.VisualBasic/ChangeLog 2008-01-27 
16:04:40 UTC (rev 94054)
+++ trunk/mcs/class/System/Test/Microsoft.VisualBasic/ChangeLog 2008-01-27 
16:06:24 UTC (rev 94055)
@@ -1,3 +1,8 @@
+2008-01-27  Gert Driesen  <[EMAIL PROTECTED]>
+
+       * CodeGeneratorFromExpressionTest.cs: Numbered tests. Fixed test for
+       DelegateInvokeExpression to pass on MS 2.0 and improved coverage.
+
 2008-01-16  Gert Driesen  <[EMAIL PROTECTED]>
 
        * CodeGeneratorFromNamespaceTest.cs: Added tests for type parameters.

Modified: 
trunk/mcs/class/System/Test/Microsoft.VisualBasic/CodeGeneratorFromExpressionTest.cs
===================================================================
--- 
trunk/mcs/class/System/Test/Microsoft.VisualBasic/CodeGeneratorFromExpressionTest.cs
        2008-01-27 16:04:40 UTC (rev 94054)
+++ 
trunk/mcs/class/System/Test/Microsoft.VisualBasic/CodeGeneratorFromExpressionTest.cs
        2008-01-27 16:06:24 UTC (rev 94055)
@@ -377,7 +377,7 @@
                                                        new CodeExpression [] {
                                                                new 
CodePrimitiveExpression (5)
                                                                })
-                                               , sw));
+                                               , sw), "#1");
                                sw.Close ();
                        }
 
@@ -387,11 +387,10 @@
                                        Generate (new CodeArrayCreateExpression(
                                                        typeof(int), 
                                                        new 
CodePrimitiveExpression (5))
-                                               , sw));
+                                               , sw), "#2");
                                sw.Close ();
                        }
 
-
                        sb = new StringBuilder ();
                        using (StringWriter sw = new StringWriter (sb)) {
                                Assert.AreEqual ("New String() {\"a\", \"b\", 
\"c\"}", 
@@ -402,7 +401,7 @@
                                                                new 
CodePrimitiveExpression ("b"),
                                                                new 
CodePrimitiveExpression ("c"),
                                                                })
-                                               , sw));
+                                               , sw), "#3");
                                sw.Close ();
                        }
                }
@@ -472,14 +471,14 @@
                        using (StringWriter sw = new StringWriter (sb)) {
                                code = Generate (new 
CodeEventReferenceExpression (null, "abc"), sw);
                                Assert.AreEqual ("abcEvent", code, "#02");
-                       }                       
+                       }
                        
                        sb = new StringBuilder ();
                        using (StringWriter sw = new StringWriter (sb)) {
                                code = Generate (new 
CodeEventReferenceExpression (new CodeThisReferenceExpression (), null), sw);
                                Assert.AreEqual ("Me.Event", code, "#03");
                        }
-                                               
+                       
                        sb = new StringBuilder ();
                        using (StringWriter sw = new StringWriter (sb)) {
                                code = Generate (new 
CodeEventReferenceExpression (new CodeThisReferenceExpression (), "abc"), sw);
@@ -508,20 +507,56 @@
                        sb = new StringBuilder ();
                        using (StringWriter sw = new StringWriter (sb)) {
                                code = Generate (new 
CodeDelegateInvokeExpression (null, new CodePrimitiveExpression ("abc")), sw);
-                               Assert.AreEqual ("RaiseEvent (\"abc\")", code, 
"#02");
-                       }                       
-                                               
+#if NET_2_0
+                               Assert.AreEqual ("(\"abc\")", code, "#01");
+#else
+                               Assert.AreEqual ("RaiseEvent (\"abc\")", code, 
"#01");
+#endif
+                       }
+
                        sb = new StringBuilder ();
                        using (StringWriter sw = new StringWriter (sb)) {
                                code = Generate (new 
CodeDelegateInvokeExpression (new CodeThisReferenceExpression (), new 
CodePrimitiveExpression ("abc")), sw);
-                               Assert.AreEqual ("RaiseEvent Me(\"abc\")", 
code, "#04");
+#if NET_2_0
+                               Assert.AreEqual ("Me(\"abc\")", code, "#02");
+#else
+                               Assert.AreEqual ("RaiseEvent Me(\"abc\")", 
code, "#02");
+#endif
                        }
-                       
+
                        sb = new StringBuilder ();
                        using (StringWriter sw = new StringWriter (sb)) {
                                code = Generate (new 
CodeDelegateInvokeExpression (new CodePrimitiveExpression ("primitive"), new 
CodePrimitiveExpression ("abc")), sw);
-                               Assert.AreEqual ("RaiseEvent 
\"primitive\"(\"abc\")", code, "#06");
+#if NET_2_0
+                               Assert.AreEqual ("\"primitive\"(\"abc\")", 
code, "#03");
+#else
+                               Assert.AreEqual ("RaiseEvent 
\"primitive\"(\"abc\")", code, "#03");
+#endif
                        }
+
+                       sb = new StringBuilder ();
+                       using (StringWriter sw = new StringWriter (sb)) {
+                               code = Generate (new 
CodeDelegateInvokeExpression (new CodeEventReferenceExpression (new 
CodeThisReferenceExpression (), "Click"), new CodePrimitiveExpression ("abc")), 
sw);
+                               Assert.AreEqual ("RaiseEvent Click(\"abc\")", 
code, "#04");
+                       }
+
+                       sb = new StringBuilder ();
+                       using (StringWriter sw = new StringWriter (sb)) {
+                               code = Generate (new 
CodeDelegateInvokeExpression (new CodeEventReferenceExpression (new 
CodeThisReferenceExpression (), null), new CodePrimitiveExpression ("abc")), 
sw);
+                               Assert.AreEqual ("RaiseEvent (\"abc\")", code, 
"#05");
+                       }
+
+                       sb = new StringBuilder ();
+                       using (StringWriter sw = new StringWriter (sb)) {
+                               code = Generate (new 
CodeDelegateInvokeExpression (new CodeEventReferenceExpression (new 
CodePrimitiveExpression ("primitive"), "Click"), new CodePrimitiveExpression 
("abc")), sw);
+                               Assert.AreEqual ("RaiseEvent 
\"primitive\".Click(\"abc\")", code, "#06");
+                       }
+
+                       sb = new StringBuilder ();
+                       using (StringWriter sw = new StringWriter (sb)) {
+                               code = Generate (new 
CodeDelegateInvokeExpression (new CodeEventReferenceExpression (new 
CodePrimitiveExpression ("primitive"), null), new CodePrimitiveExpression 
("abc")), sw);
+                               Assert.AreEqual ("RaiseEvent 
\"primitive\".(\"abc\")", code, "#07");
+                       }
                }
        }
 }

_______________________________________________
Mono-patches maillist  -  [email protected]
http://lists.ximian.com/mailman/listinfo/mono-patches

Reply via email to