[svn] r7515: nemerle/trunk/tools/reflector-addon: reflector-addon.build reflector-addon.nproj src/Assembly...

pbludov svnadmin at nemerle.org
Mon Mar 5 06:50:58 CET 2007


Log:
reflector-addon: updated to match the version of Reflector itself.

Author: pbludov
Date: Mon Mar  5 06:50:50 2007
New Revision: 7515

Added:
   nemerle/trunk/tools/reflector-addon/src/OptionsPage.n
Modified:
   nemerle/trunk/tools/reflector-addon/reflector-addon.build
   nemerle/trunk/tools/reflector-addon/reflector-addon.nproj
   nemerle/trunk/tools/reflector-addon/src/AssemblyInfo.n
   nemerle/trunk/tools/reflector-addon/src/CodeModel/LanguageWriterBase.n
   nemerle/trunk/tools/reflector-addon/src/CodeModel/VisitorBase.n
   nemerle/trunk/tools/reflector-addon/src/CustomAttributeWrapper.n
   nemerle/trunk/tools/reflector-addon/src/Helper.n
   nemerle/trunk/tools/reflector-addon/src/Language.n
   nemerle/trunk/tools/reflector-addon/src/LanguageWriter.n
   nemerle/trunk/tools/reflector-addon/src/LanguageWriterConfiguration.n
   nemerle/trunk/tools/reflector-addon/src/Package.n

Modified: nemerle/trunk/tools/reflector-addon/reflector-addon.build
==============================================================================
--- nemerle/trunk/tools/reflector-addon/reflector-addon.build	(original)
+++ nemerle/trunk/tools/reflector-addon/reflector-addon.build	Mon Mar  5 06:50:50 2007
@@ -1,22 +1,25 @@
 <?xml version="1.0"?>
 <project name="reflector-addon" default="build">
 
-    <property name='configuration' value="Debug"/>
+    <property name="configuration" value="Debug"/>
+    <property name="reflectorVersion" value="REFLECTOR_VER_50"/>
 
-    <property name='boot.dir' value="${path::get-full-path('../../boot')}"/>
-    <property name='build.dir' value="${path::get-full-path('bin')}/${configuration}"/>
-    <property name='lib.dir' value="${path::get-full-path('lib')}"/>
+    <property name="boot.dir" value="${path::get-full-path('../../boot')}"/>
+    <property name="build.dir" value="${path::get-full-path('bin')}/${configuration}"/>
+    <property name="lib.dir" value="${path::get-full-path('lib')}"/>
 
     <target name="build">
         <mkdir dir="${build.dir}" />
-        <ncc output='${build.dir}/Reflector.NemerleLanguage.dll' target='dll'>
+        <ncc output="${build.dir}/Reflector.NemerleLanguage.dll" target="dll">
 			<references>
-                <include name='${lib.dir}/Reflector.exe' />
+                <include name="${lib.dir}/Reflector.exe" />
+				<include name="System.Windows.Forms.dll" /> 
 			</references>
-			<sources basedir='src'>
-				<include name='*.n' />
-                <include name='CodeModel/*.n' />
+			<sources basedir="src">
+				<include name="*.n" />
+                <include name="CodeModel/*.n" />
 			</sources>
+			<arg line="-def:${reflectorVersion}"/>
 		</ncc>
     </target>
 
@@ -27,10 +30,12 @@
 
     <target name="clean">
 		<delete>
-			<fileset basedir='${build.dir}'>
-				<include name='**' />
+			<fileset basedir="${build.dir}">
+				<include name="**" />
 			</fileset>
 		</delete>
     </target>
 
+    <target name="rebuild" depends="clean build"/>
+
 </project>

Modified: nemerle/trunk/tools/reflector-addon/reflector-addon.nproj
==============================================================================
--- nemerle/trunk/tools/reflector-addon/reflector-addon.nproj	(original)
+++ nemerle/trunk/tools/reflector-addon/reflector-addon.nproj	Mon Mar  5 06:50:50 2007
@@ -1,6 +1,7 @@
 <Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
   <PropertyGroup>
     <Name>reflector-addon</Name>
+    <NoStdLib>false</NoStdLib>
     <TargetPlatform>v2</TargetPlatform>
   </PropertyGroup>
   <PropertyGroup>
@@ -36,24 +37,22 @@
     <CmdArgs>
     </CmdArgs>
     <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE;REFLECTOR_VER_50</DefineConstants>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)' == 'Release' ">
     <OutputPath>bin\Release\</OutputPath>
   </PropertyGroup>
   <ItemGroup>
-    <Reference Include="System" />
-    <Reference Include="Nemerle">
-      <Name>Nemerle</Name>
-      <AssemblyName>Nemerle.dll</AssemblyName>
-      <SpecificVersion>False</SpecificVersion>
-      <HintPath>..\..\boot\Nemerle.dll</HintPath>
-    </Reference>
     <Reference Include="Reflector">
       <Name>Reflector</Name>
       <AssemblyName>Reflector.exe</AssemblyName>
       <SpecificVersion>False</SpecificVersion>
       <HintPath>lib\Reflector.exe</HintPath>
     </Reference>
+    <Reference Include="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+      <Name>System.Windows.Forms</Name>
+      <AssemblyName>System.Windows.Forms.dll</AssemblyName>
+    </Reference>
   </ItemGroup>
   <ItemGroup>
     <Folder Include="src\" />
@@ -70,6 +69,9 @@
     <Compile Include="src\Language.n" />
     <Compile Include="src\LanguageWriter.n" />
     <Compile Include="src\LanguageWriterConfiguration.n" />
+    <Compile Include="src\OptionsPage.n">
+      <SubType>Code</SubType>
+    </Compile>
     <Compile Include="src\Package.n" />
     <Compile Include="src\UsingNamespaceVisitor.n" />
   </ItemGroup>

Modified: nemerle/trunk/tools/reflector-addon/src/AssemblyInfo.n
==============================================================================
--- nemerle/trunk/tools/reflector-addon/src/AssemblyInfo.n	(original)
+++ nemerle/trunk/tools/reflector-addon/src/AssemblyInfo.n	Mon Mar  5 06:50:50 2007
@@ -44,6 +44,8 @@
 //
 [assembly: AssemblyCompany    ("mailto:devel-en at nemerle.org")]
 
+#if REFLECTOR_VER_42
+
 // Compatible with Reflector.exe version 4.2.
 //
 [assembly: AssemblyInformationalVersion("4.2.0.0")]
@@ -52,6 +54,18 @@
 //
 [assembly: Nemerle.Utility.AssemblyVersionFromSVN("4.2.0.SVN")]
 
+#elif REFLECTOR_VER_50
+
+// Compatible with Reflector.exe version 5.0.
+//
+[assembly: AssemblyInformationalVersion("5.0.0.0")]
+
+// Real version.
+//
+[assembly: Nemerle.Utility.AssemblyVersionFromSVN("5.0.0.SVN")]
+
+#endif
+
 // Signing.
 //
 [assembly: AssemblyDelaySign(false)]

Modified: nemerle/trunk/tools/reflector-addon/src/CodeModel/LanguageWriterBase.n
==============================================================================
--- nemerle/trunk/tools/reflector-addon/src/CodeModel/LanguageWriterBase.n	(original)
+++ nemerle/trunk/tools/reflector-addon/src/CodeModel/LanguageWriterBase.n	Mon Mar  5 06:50:50 2007
@@ -111,6 +111,16 @@
       _formatter.WriteReference(if (check && Keywords.Contains(name)) EscapeKeyword(name) else name, description, target);
     }
 
+    public WriteIndent() : void
+    {
+      _formatter.WriteIndent();
+    }
+
+    public WriteOutdent() : void
+    {
+      _formatter.WriteOutdent();
+    }
+
     #region Extensions
 
     public WriteIdentifier(name : string) : void
@@ -151,21 +161,6 @@
       }
     }
 
-    public BeginBlock() : void
-    {
-      WriteLine();
-      Write("{");
-      WriteLine();
-      _formatter.WriteIndent();
-    }
-
-    public EndBlock() : void
-    {
-      _formatter.WriteOutdent();
-      Write("}");
-      WriteLine();
-    }
-
     public WriteTypeReference(ty : ITypeReference, description : string, target : object) : void
     {
       _formatter.WriteReference(

Modified: nemerle/trunk/tools/reflector-addon/src/CodeModel/VisitorBase.n
==============================================================================
--- nemerle/trunk/tools/reflector-addon/src/CodeModel/VisitorBase.n	(original)
+++ nemerle/trunk/tools/reflector-addon/src/CodeModel/VisitorBase.n	Mon Mar  5 06:50:50 2007
@@ -85,11 +85,6 @@
         VisitExpression(value.Target);
     }
 
-    public virtual VisitArrayInitializerExpression(value : IArrayInitializerExpression) : void
-    {
-        VisitExpressionCollection(value.Expressions);
-    }
-
     public virtual VisitArrayType(value : IArrayType) : void
     {
         VisitType(value.ElementType);
@@ -201,6 +196,14 @@
         VisitCustomAttribute(value[i]);
     }
 
+#if REFLECTOR_VER_50
+
+    public virtual VisitDebugBreakStatement(_ : IDebugBreakStatement) : void
+    {
+    }
+
+#endif
+
     public virtual VisitDefaultCase(value : IDefaultCase) : void
     {
       VisitStatement(value.Body);
@@ -237,9 +240,7 @@
     public virtual VisitEventDeclarationCollection(value : IEventDeclarationCollection) : void
     {
       for (mutable i = 0; i < value.Count; ++i)
-      {
-        VisitEventDeclaration(value[i]);
-      }
+        VisitMemberDeclaration(value[i]);
     }
 
     public virtual VisitEventReference(value : IEventReference) : void
@@ -249,7 +250,7 @@
 
     public virtual VisitEventReferenceExpression(value : IEventReferenceExpression) : void
     {
-      VisitEventReference(value.Event);
+      VisitMemberReference(value.Event);
       VisitExpression(value.Target);
     }
 
@@ -273,11 +274,9 @@
     | e is ICanCastExpression               => VisitCanCastExpression              (e)
     | e is ICastExpression                  => VisitCastExpression                 (e)
     | e is ITypeOfExpression                => VisitTypeOfExpression               (e)
-    | e is INamedArgumentExpression         => VisitNamedArgumentExpression        (e)
     | e is IEventReferenceExpression        => VisitEventReferenceExpression       (e)
     | e is IArgumentListExpression          => VisitArgumentListExpression         (e)
     | e is IArrayCreateExpression           => VisitArrayCreateExpression          (e)
-    | e is IArrayInitializerExpression      => VisitArrayInitializerExpression     (e)
     | e is IConditionExpression             => VisitConditionExpression            (e)
     | e is INullCoalescingExpression        => VisitNullCoalescingExpression       (e)
     | e is IDelegateCreateExpression        => VisitDelegateCreateExpression       (e)
@@ -291,12 +290,24 @@
     | e is IAddressDereferenceExpression    => VisitAddressDereferenceExpression   (e)
     | e is ISizeOfExpression                => VisitSizeOfExpression               (e)
     | e is ITypedReferenceCreateExpression  => VisitTypedReferenceCreateExpression (e)
-    | e is IObjectInitializeExpression      => VisitObjectInitializeExpression     (e)
     | e is ITypeOfTypedReferenceExpression  => VisitTypeOfTypedReferenceExpression (e)
     | e is IValueOfTypedReferenceExpression => VisitValueOfTypedReferenceExpression(e)
     | e is IStackAllocateExpression         => VisitStackAllocateExpression        (e)
     | e is IGenericDefaultExpression        => VisitGenericDefaultExpression       (e)
     | e is ISnippetExpression               => VisitSnippetExpression              (e)
+#if REFLECTOR_VER_42
+    | e is IArrayInitializerExpression      => VisitArrayInitializerExpression     (e)
+    | e is INamedArgumentExpression         => VisitNamedArgumentExpression        (e)
+    | e is IObjectInitializeExpression      => VisitObjectInitializeExpression     (e)
+#elif REFLECTOR_VER_50
+    | e is IAnonymousMethodExpression       => VisitAnonymousMethodExpression      (e);
+    | e is IBlockExpression                 => VisitBlockExpression                (e);
+    | e is IFieldOfExpression               => VisitFieldOfExpression              (e);
+    | e is ILambdaExpression                => VisitLambdaExpression               (e);
+    | e is IMemberInitializerExpression     => VisitMemberInitializerExpression    (e);
+    | e is IMethodOfExpression              => VisitMethodOfExpression             (e);
+    | e is IQueryExpression                 => VisitQueryExpression                (e);
+#endif
     | null                                  => {}
     | _                                     => throw NotSupportedException($"Invalid expression type '$(value.GetType().Name)'.");
     }
@@ -321,7 +332,7 @@
     public virtual VisitFieldDeclarationCollection(value : IFieldDeclarationCollection) : void
     {
       for (mutable i = 0; i < value.Count; ++i)
-        VisitFieldDeclaration(value[i]);
+        VisitMemberDeclaration(value[i]);
     }
 
     public virtual VisitFieldReference(value : IFieldReference) : void
@@ -331,7 +342,7 @@
 
     public virtual VisitFieldReferenceExpression(value : IFieldReferenceExpression) : void
     {
-      VisitFieldReference(value.Field);
+      VisitMemberReference(value.Field);
       VisitExpression(value.Target);
     }
 
@@ -423,7 +434,7 @@
     public virtual VisitMethodDeclarationCollection(value : IMethodDeclarationCollection) : void
     {
       for (mutable i = 0; i < value.Count; ++i)
-        VisitMethodDeclaration(value[i]);
+        VisitMemberDeclaration(value[i]);
     }
 
     public virtual VisitMethodInvokeExpression(value : IMethodInvokeExpression) : void
@@ -440,7 +451,7 @@
     public virtual VisitMethodReferenceCollection(value : IMethodReferenceCollection) : void
     {
       for (mutable i = 0; i < value.Count; ++i)
-        VisitMethodReference(value[i]);
+        VisitMemberReference(value[i]);
     }
 
     public virtual VisitMethodReferenceExpression(value : IMethodReferenceExpression) : void
@@ -474,11 +485,6 @@
     {
     }
 
-    public virtual VisitNamedArgumentExpression(value : INamedArgumentExpression) : void
-    {
-      VisitExpression(value.Value);
-    }
-
     public virtual VisitNamespace(value : INamespace) : void
     {
       VisitTypeDeclarationCollection(value.Types);
@@ -493,6 +499,18 @@
     public virtual VisitObjectCreateExpression(value : IObjectCreateExpression) : void
     {
       VisitExpressionCollection(value.Arguments);
+      VisitMemberReference(value.Constructor);
+#if REFLECTOR_VER_50
+      VisitExpression(value.Initializer);
+      VisitType(value.Type);
+#endif
+    }
+
+#if REFLECTOR_VER_42
+
+    public virtual VisitArrayInitializerExpression(value : IArrayInitializerExpression) : void
+    {
+        VisitExpressionCollection(value.Expressions);
     }
 
     public virtual VisitObjectInitializeExpression(value : IObjectInitializeExpression) : void
@@ -500,6 +518,167 @@
       VisitType(value.Type);
     }
 
+    public virtual VisitNamedArgumentExpression(value : INamedArgumentExpression) : void
+    {
+      VisitExpression(value.Value);
+    }
+
+#elif REFLECTOR_VER_50
+
+    public virtual VisitAnonymousMethodExpression(value : IAnonymousMethodExpression) : void
+    {
+      VisitStatement(value.Body);
+      VisitType(value.DelegateType);
+      VisitParameterDeclarationCollection(value.Parameters);
+      VisitMethodReturnType(value.ReturnType);
+    }
+
+    public virtual VisitBlockExpression(value : IBlockExpression) : void
+    {
+      VisitExpressionCollection(value.Expressions);
+    }
+
+    public virtual VisitFieldOfExpression(value : IFieldOfExpression) : void
+    {
+      VisitMemberReference(value.Field);
+    }
+
+    public virtual VisitLambdaExpression(value : ILambdaExpression) : void
+    {
+      VisitExpression(value.Body);
+      VisitVariableDeclarationCollection(value.Parameters);
+    }
+
+    public virtual VisitMemberInitializerExpression(value : IMemberInitializerExpression) : void
+    {
+      VisitMemberReference(value.Member);
+      VisitExpression(value.Value);
+    }
+
+    public virtual VisitMethodOfExpression(value : IMethodOfExpression) : void
+    {
+      VisitMemberReference(value.Method);
+      VisitTypeReference(value.Type);
+    }
+
+    public virtual VisitQueryExpression(value : IQueryExpression) : void
+    {
+      VisitQueryBody(value.Body);
+      VisitQueryClause(value.From);
+    }
+
+    public virtual VisitQueryBody(value : IQueryBody) : void
+    {
+      VisitQueryClauseCollection(value.Clauses);
+      VisitQueryContinuation(value.Continuation);
+      VisitQueryOperation(value.Operation);
+    }
+
+    public virtual VisitQueryOperation(value : IQueryOperation) : void
+    {
+    | o is IGroupOperation  => VisitGroupOperation (o);
+    | o is ISelectOperation => VisitSelectOperation(o);
+    | null                  => {}
+    | _                     => throw NotSupportedException($"Invalid query operation '$(value.GetType().Name)'.");
+    }
+
+    public virtual VisitGroupOperation(value : IGroupOperation) : void
+    {
+      VisitExpression(value.Item);
+      VisitExpression(value.Key);
+    }
+
+    public virtual VisitSelectOperation(value : ISelectOperation) : void
+    {
+      VisitExpression(value.Expression);
+    }
+
+    public virtual VisitQueryContinuation(value : IQueryContinuation) : void
+    {
+      VisitQueryBody(value.Body);
+      VisitVariableDeclaration(value.Variable);
+    }
+
+    public virtual VisitQueryClause(value : IQueryClause) : void
+    {
+    | c is IFromClause  => VisitFromClause (c);
+    | c is IJoinClause  => VisitJoinClause (c);
+    | c is ILetClause   => VisitLetClause  (c);
+    | c is IOrderClause => VisitOrderClause(c);
+    | c is IWhereClause => VisitWhereClause(c);
+    | null              => {}
+    | _                 => throw NotSupportedException($"Invalid query clause '$(value.GetType().Name)'.");
+    }
+
+    public virtual VisitFromClause(value : IFromClause) : void
+    {
+      VisitExpression(value.Expression);
+      VisitVariableDeclaration(value.Variable);
+    }
+
+    public virtual VisitJoinClause(value : IJoinClause) : void
+    {
+      VisitExpression(value.Equality);
+      VisitExpression(value.In);
+      VisitVariableDeclaration(value.Into);
+      VisitExpression(value.On);
+      VisitVariableDeclaration(value.Variable);
+    }
+
+    public virtual VisitLetClause(value : ILetClause) : void
+    {
+      VisitExpression(value.Expression);
+      VisitVariableDeclaration(value.Variable);
+    }
+
+    public virtual VisitOrderClause(value : IOrderClause) : void
+    {
+      VisitExpression(value.Expression);
+    }
+
+    public virtual VisitWhereClause(value : IWhereClause) : void
+    {
+      VisitExpression(value.Expression);
+    }
+
+    public virtual VisitQueryClauseCollection(value : IQueryClauseCollection) : void
+    {
+      for (mutable i = 0; i < value.Count; ++i)
+        VisitQueryClause(value[i]);
+    }
+
+#endif
+
+    public virtual VisitMemberReference(value : IMemberReference) : void
+    {
+      match (value)
+      {
+      | m is IEventReference    => VisitEventReference   (m);
+      | m is IFieldReference    => VisitFieldReference   (m);
+      | m is IMemberDeclaration => VisitMemberDeclaration(m);
+      | m is IMethodReference   => VisitMethodReference  (m);
+      | m is IPropertyReference => VisitPropertyReference(m);
+      | null                    => {}
+      | _                       => throw NotSupportedException($"Invalid member reference '$(value.GetType().Name)'.");
+      }
+
+      unless (value == null)
+        VisitType(value.DeclaringType);
+    }
+
+    public virtual VisitMemberDeclaration(value : IMemberDeclaration) : void
+    {
+      match (value)
+      {
+      | m is IEventDeclaration    => VisitEventDeclaration   (m);
+      | m is IFieldDeclaration    => VisitFieldDeclaration   (m);
+      | m is IMethodDeclaration   => VisitMethodDeclaration  (m);
+      | m is IPropertyDeclaration => VisitPropertyDeclaration(m);
+      | null                      => {}
+      | _                         => throw NotSupportedException($"Invalid member declaration '$(value.GetType().Name)'.");
+      }
+    }
+
     public virtual VisitOptionalModifier(ty : IOptionalModifier) : void
     {
       VisitType(ty.Modifier);
@@ -510,7 +689,9 @@
     {
       VisitCustomAttributeCollection(value.Attributes);
       VisitType(value.ParameterType);
+#if REFLECTOR_VER_42
       VisitExpression(value.DefaultValue);
+#endif
     }
 
     public virtual VisitParameterDeclarationCollection(value : IParameterDeclarationCollection) : void
@@ -533,7 +714,7 @@
     public virtual VisitPropertyDeclarationCollection(value : IPropertyDeclarationCollection) : void
     {
       for (mutable i = 0; i < value.Count; ++i)
-        VisitPropertyDeclaration(value[i]);
+        VisitMemberDeclaration(value[i]);
     }
 
     public virtual VisitPropertyIndexerExpression(value : IPropertyIndexerExpression) : void
@@ -549,7 +730,7 @@
 
     public virtual VisitPropertyReferenceExpression(value : IPropertyReferenceExpression) : void
     {
-      VisitPropertyReference(value.Property);
+      VisitMemberReference(value.Property);
       VisitExpression(value.Target);
     }
 
@@ -623,6 +804,9 @@
     | e is ILockStatement             => VisitLockStatement            (e)
     | e is IMemoryCopyStatement       => VisitMemoryCopyStatement      (e)
     | e is IMemoryInitializeStatement => VisitMemoryInitializeStatement(e)
+#if REFLECTOR_VER_50
+    | s is IDebugBreakStatement       => VisitDebugBreakStatement      (s);
+#endif
     | null                            => {}
     | _                               => throw NotSupportedException($"Invalid statement type '$(value.GetType().Name)'.")
     }
@@ -758,6 +942,12 @@
       VisitType(value.VariableType);
     }
 
+    public virtual VisitVariableDeclarationCollection(value : IVariableDeclarationCollection) : void
+    {
+      for (mutable i = 0; i < value.Count; ++i)
+        VisitVariableDeclaration(value[i]);
+    }
+
     public virtual VisitVariableDeclarationExpression(value : IVariableDeclarationExpression) : void
     {
       VisitVariableDeclaration(value.Variable);

Modified: nemerle/trunk/tools/reflector-addon/src/CustomAttributeWrapper.n
==============================================================================
--- nemerle/trunk/tools/reflector-addon/src/CustomAttributeWrapper.n	(original)
+++ nemerle/trunk/tools/reflector-addon/src/CustomAttributeWrapper.n	Mon Mar  5 06:50:50 2007
@@ -26,7 +26,6 @@
  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-
 using Nemerle.Collections;
 using Nemerle.Utility;
 using System;
@@ -63,6 +62,11 @@
                   && (fref.Target :> ITypeReferenceExpression).Type.Name == "MethodImplOptions" =>
                 _methodImplOptions = Enum.Parse(typeof (MethodImplOptions), fref.Field.Name) :> MethodImplOptions;
 
+#if REFLECTOR_VER_50
+              | mi is IMemberInitializerExpression
+                when mi.Member.Name == "MethodCodeType" => {}
+#endif
+
               | _                                 =>
                 throw NotSupportedException();
               });
@@ -79,18 +83,34 @@
       [Accessor] mutable _isIn               : bool;
       [Accessor] mutable _isOut              : bool;
       [Accessor] mutable _isParamArray       : bool;
+#if REFLECTOR_VER_50
+      [Accessor] mutable _defaultValue       : IExpression;
+#endif
 
       public this(value : IParameterDeclaration)
       {
         Init(value.Attributes, attr =>
           {
-            match (attr.Constructor.DeclaringType.GetTypeName())
+            def (ns, name) = attr.Constructor.DeclaringType.GetTypeName();
+            match (ns)
             {
-            | ("System.Runtime.InteropServices", "InAttribute")       => _isIn         = true; true;
-            | ("System.Runtime.InteropServices", "OutAttribute")      => _isOut        = true; true;
-            | ("System.Runtime.InteropServices", "OptionalAttribute") => /* hide it */         true;
-            | ("System", "ParamArrayAttribute")                       => _isParamArray = true; true;
-            | _                                                       => false
+            | "System.Runtime.InteropServices" =>
+              match (name)
+              {
+              | "InAttribute"                    => _isIn         = true; true;
+              | "OutAttribute"                   => _isOut        = true; true;
+              | "OptionalAttribute"              => /* hide it */         true;
+
+#if REFLECTOR_VER_50
+              | "DefaultParameterValueAttribute" 
+                when attr.Arguments.Count == 1   => _defaultValue = attr.Arguments[0]; true;
+#endif
+
+              | _                                => false;
+              }
+            | "System"
+              when name == "ParamArrayAttribute" => _isParamArray = true; true;
+            | _                                  => false;
             }
           }
         );

Modified: nemerle/trunk/tools/reflector-addon/src/Helper.n
==============================================================================
--- nemerle/trunk/tools/reflector-addon/src/Helper.n	(original)
+++ nemerle/trunk/tools/reflector-addon/src/Helper.n	Mon Mar  5 06:50:50 2007
@@ -37,6 +37,17 @@
 {
   internal module Helper
   {
+    public ToLowerInvariantString(this value : object) : string
+    {
+    | null => null;
+    | obj  => obj.ToString().ToLowerInvariant();
+    }
+
+    public GetService['a](this serviceProvider : IServiceProvider) : 'a
+    {
+      serviceProvider.GetService(typeof('a)) :> 'a
+    }
+
     public IsConstructor(this value : IMethodReference) : bool
     {
       value.Name == ".ctor" || value.Name == ".cctor"; 

Modified: nemerle/trunk/tools/reflector-addon/src/Language.n
==============================================================================
--- nemerle/trunk/tools/reflector-addon/src/Language.n	(original)
+++ nemerle/trunk/tools/reflector-addon/src/Language.n	Mon Mar  5 06:50:50 2007
@@ -26,18 +26,27 @@
  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
+using System;
+using Reflector;
 using Reflector.CodeModel;
 
 namespace Reflector.NemerleLanguage
 {
   internal class Language : ILanguage
   {
+    private _cfgMgr : IConfigurationManager;
+
+    public this(serviceProvider : IServiceProvider)
+    {
+      _cfgMgr = serviceProvider.GetService();
+    }
+
     public GetWriter
       ( formatter     : IFormatter
       , configuration : ILanguageWriterConfiguration
       )               : ILanguageWriter
     {
-      LanguageWriter(formatter, configuration);
+      LanguageWriter(formatter, configuration, _cfgMgr);
     }
 
     public FileExtension : string

Modified: nemerle/trunk/tools/reflector-addon/src/LanguageWriter.n
==============================================================================
--- nemerle/trunk/tools/reflector-addon/src/LanguageWriter.n	(original)
+++ nemerle/trunk/tools/reflector-addon/src/LanguageWriter.n	Mon Mar  5 06:50:50 2007
@@ -48,17 +48,61 @@
     public this
       ( formatter     : IFormatter
       , configuration : ILanguageWriterConfiguration
+      , configManager : IConfigurationManager
       )
     {
       when (configuration == null)
         throw ArgumentNullException("configuration");
 
       base(formatter);
-      _configuration = LanguageWriterConfiguration(configuration);
+      _configuration = LanguageWriterConfiguration(configuration, configManager);
 
       _voidTypeCache = Hashtable();
     }
 
+    public BeginBlock() : void
+    {
+      def bt = _configuration.BracingType;
+
+      if (bt == BracingType.Block)
+      {
+        WriteLine();
+        Write("{");
+      }
+      else when (bt == BracingType.C)
+        Write(" {");
+
+      WriteLine();
+      WriteIndent();
+    }
+
+    public EndBlock() : void
+    {
+      def bt = _configuration.BracingType;
+
+      WriteOutdent();
+
+      when (bt == BracingType.Block || bt == BracingType.C)
+        Write("}");
+
+      WriteLine();
+    }
+
+    public EndLine() : void
+    {
+      unless (_configuration.BracingType == BracingType.Indent)
+        Write(";");
+      WriteLine();
+    }
+
+    public LineBreak() : void
+    {
+      when (_configuration.BracingType == BracingType.Indent)
+        Write(" \\");
+
+      WriteLine();
+    }
+
     #region Module
 
     public override WriteAssembly(value : IAssembly) : void
@@ -115,6 +159,11 @@
       def loc = Environment.ExpandEnvironmentVariables(value.Location);
       when (File.Exists(loc))
         WriteProperty("Size", $"$(FileInfo(loc).Length) Bytes");
+
+#if REFLECTOR_VER_50
+      WriteProperty("FileAlignment", $"$(value.FileAlignment) Bytes");
+      WriteProperty("TargetRuntimeVersion", value.TargetRuntimeVersion);
+#endif
     }
 
     public override WriteModuleReference(value : IModuleReference) : void
@@ -158,8 +207,7 @@
               WriteKeyword("using");
               Write(" ");
               Write(ns);
-              Write(";");
-              WriteLine();
+              EndLine();
               foundAny = true;
             });
 
@@ -214,7 +262,7 @@
         def loc = Environment.ExpandEnvironmentVariables(file.Location);
         when (File.Exists(loc))
           WriteProperty("Size", $"$(FileInfo(loc).Length) Bytes");
-      | _                             => throw NotImplementedException();
+      | _                             => throw NotSupportedException();
       }
     }
 
@@ -248,6 +296,9 @@
     | s is ILockStatement                 => WriteLockStatement            (s);
     | s is IMemoryCopyStatement           => WriteMemoryCopyStatement      (s);
     | s is IMemoryInitializeStatement     => WriteMemoryInitializeStatement(s);
+#if REFLECTOR_VER_50
+    | s is IDebugBreakStatement           => WriteDebugBreakStatement      (s);
+#endif
     | s                                   => throw NotSupportedException($"Invalid statement type '$(s.GetType().Name)'.");
     }
 
@@ -258,10 +309,7 @@
         {
           WriteStatement(s);
           when (IsSingleLineStatement(s))
-          {
-            Write(";");
-            WriteLine();
-          }
+            EndLine();
         });
       EndBlock();
     }
@@ -536,6 +584,15 @@
       Write(")");
     }
 
+#if REFLECTOR_VER_50
+
+    private WriteDebugBreakStatement(_ : IDebugBreakStatement) : void
+    {
+      WriteKeyword("debug");
+    }
+
+#endif
+
     #endregion
 
     #region WriteExpression
@@ -546,7 +603,6 @@
     | expr is ILiteralExpression               => WriteLiteralExpression(expr);
     | expr is IAssignExpression                => WriteAssignExpression(expr);
     | expr is ITypeOfExpression                => WriteTypeOfExpression(expr);
-    | expr is INamedArgumentExpression         => WriteNamedArgumentExpression(expr);
     | expr is ITypeReferenceExpression         => WriteTypeReferenceExpression(expr);
     | expr is IFieldReferenceExpression        => WriteFieldReferenceExpression(expr);
     | expr is IEventReferenceExpression        => WriteEventReferenceExpression(expr);
@@ -555,7 +611,6 @@
     | expr is IStackAllocateExpression         => WriteStackAllocateExpression(expr);
     | expr is IPropertyReferenceExpression     => WritePropertyReferenceExpression(expr);
     | expr is IArrayCreateExpression           => WriteArrayCreateExpression(expr);
-    | expr is IArrayInitializerExpression      => WriteArrayInitializerExpression(expr);
     | expr is IBaseReferenceExpression         => WriteBaseReferenceExpression(expr);
     | expr is IUnaryExpression                 => WriteUnaryExpression(expr);
     | expr is IBinaryExpression                => WriteBinaryExpression(expr);
@@ -583,9 +638,21 @@
     | expr is ITypeOfTypedReferenceExpression  => WriteTypeOfTypedReferenceExpression(expr);
     | expr is IValueOfTypedReferenceExpression => WriteValueOfTypedReferenceExpression(expr);
     | expr is ITypedReferenceCreateExpression  => WriteTypedReferenceCreateExpression(expr);
-    | expr is IObjectInitializeExpression      => WriteObjectInitializeExpression(expr);
     | expr is ISnippetExpression               => WriteSnippetExpression(expr);
-    | _                                        => throw NotImplementedException();
+#if REFLECTOR_VER_42
+    | expr is IArrayInitializerExpression      => WriteArrayInitializerExpression(expr);
+    | expr is INamedArgumentExpression         => WriteNamedArgumentExpression(expr);
+    | expr is IObjectInitializeExpression      => WriteObjectInitializeExpression(expr);
+#elif REFLECTOR_VER_50
+    | expr is IAnonymousMethodExpression       => WriteAnonymousMethodExpression(expr);
+    | expr is IBlockExpression                 => WriteBlockExpression(expr);
+    | expr is IFieldOfExpression               => WriteFieldOfExpression(expr);
+    | expr is ILambdaExpression                => WriteLambdaExpression(expr);
+    | expr is IMemberInitializerExpression     => WriteMemberInitializerExpression(expr);
+    | expr is IMethodOfExpression              => WriteMethodOfExpression(expr);
+    | expr is IQueryExpression                 => WriteQueryExpression(expr);
+#endif
+    | _                                        => throw NotSupportedException();
     }
 
     private WriteLiteralExpression(expression : ILiteralExpression) : void
@@ -595,7 +662,7 @@
       | null                => WriteLiteral("null");
       | str is string       => WriteLiteral($"\"$(EscapeString(str))\"")
       | chr is char         => WriteLiteral($"'$(EscapeChar(chr))'")
-      | other               => WriteLiteral(Convert.ToString(other, CultureInfo.InvariantCulture))
+      | other               => WriteLiteral(other, NumberFormat.Auto)
       }
     }
 
@@ -647,13 +714,6 @@
       Write(")");
     }
 
-    private WriteNamedArgumentExpression(expr : INamedArgumentExpression) : void
-    {
-      WriteMemberReference(expr.Member);
-      Write(" = ");
-      WriteExpression(expr.Value);
-    }
-
     private WriteTypeReferenceExpression(expr : ITypeReferenceExpression) : void
     {
       WriteType(expr.Type);
@@ -726,18 +786,17 @@
       WriteKeyword("array");
 
       if (expr.Initializer != null)
+#if REFLECTOR_VER_50
+        WriteBlockExpression(expr.Initializer);
+#else
         WriteExpression(expr.Initializer);
+#endif
       else if (expr.Dimensions != null && expr.Dimensions.Count != 0)
         WriteList(expr.Dimensions.ToList(), "(", ")", WriteExpression);
       else
         Write("[]");
     }
 
-    private WriteArrayInitializerExpression(expr : IArrayInitializerExpression) : void
-    {
-     WriteList(expr.Expressions.ToList(), "[", "]", WriteExpression);
-    }
-
     private WriteBaseReferenceExpression(_ : IBaseReferenceExpression) : void
     {
       WriteKeyword("base");
@@ -889,10 +948,23 @@
 
     private WriteObjectCreateExpression(expr : IObjectCreateExpression) : void
     {
+#if REFLECTOR_VER_42
       WriteType(expr.Constructor.DeclaringType);
+#elif REFLECTOR_VER_50
+      WriteType(expr.Type);
+#endif
+
       Write("(");
       WriteList(expr.Arguments.ToList(), WriteExpression);
       Write(")");
+
+#if REFLECTOR_VER_50
+      unless (expr.Initializer == null || expr.Initializer.Expressions.Count == 0)
+      {
+        Write(" ");
+        WriteExpression(expr.Initializer);
+      }
+#endif
     }
 
     private WriteThisReferenceExpression(_ : IThisReferenceExpression) : void
@@ -974,17 +1046,238 @@
       Write(")");
     }
 
+    private WriteSnippetExpression(expr : ISnippetExpression) : void
+    {
+      WriteComment(expr.Value);
+    }
+
+#if REFLECTOR_VER_42
+
+    private WriteNamedArgumentExpression(expr : INamedArgumentExpression) : void
+    {
+      WriteMemberReference(expr.Member);
+      Write(" = ");
+      WriteExpression(expr.Value);
+    }
+
+    private WriteArrayInitializerExpression(expr : IArrayInitializerExpression) : void
+    {
+     WriteList(expr.Expressions.ToList(), "[", "]", WriteExpression);
+    }
+
     private WriteObjectInitializeExpression(expr : IObjectInitializeExpression) : void
     {
       WriteType(expr.Type);
       Write("()");
     }
 
-    private WriteSnippetExpression(expr : ISnippetExpression) : void
+#elif REFLECTOR_VER_50
+
+    private WriteAnonymousMethodExpression(value : IAnonymousMethodExpression) : void
     {
-      WriteComment(expr.Value);
+      def parameters = value.Parameters.ToList().Filter(p => !string.IsNullOrEmpty(p.Name));
+
+      WriteKeyword("fun");
+      Write(" ");
+
+      WriteList(parameters, "(", ") ", WriteParameterDeclaration);
+      WriteBody(value.Body);
+    }
+
+    private WriteBlockExpression(value : IBlockExpression) : void
+    {
+      BeginBlock();
+      WriteList(value.Expressions.ToList(), WriteExpression);
+      EndBlock();
+    }
+
+    private WriteFieldOfExpression(value : IFieldOfExpression) : void
+    {
+      WriteKeyword("fieldof");
+      Write("(");
+      WriteType(value.Field.DeclaringType);
+      Write(".");
+      WriteReference(value.Field.Name, value.Field.GetUserFriendlyName(), value.Field);
+      Write(")");
+    }
+
+    private WriteLambdaExpression(value : ILambdaExpression) : void
+    {
+      WriteList(value.Parameters.ToList(), "(", ")", p : IVariableDeclaration => WriteDeclaration(p.Name));
+      Write(" => ");
+      WriteExpression(value.Body);
+    }
+
+    private WriteMemberInitializerExpression(value : IMemberInitializerExpression) : void
+    {
+      WriteMemberReference(value.Member);
+      Write(" = ");
+      WriteExpression(value.Value);
+    }
+
+    private WriteMethodOfExpression(value : IMethodOfExpression) : void
+    {
+      WriteKeyword("methodof");
+      Write("(");
+      WriteType(value.Method.DeclaringType);
+      Write(".");
+      WriteReference(value.Method.Name, value.Method.GetUserFriendlyName(), value.Method);
+      unless (value.Type == null)
+      {
+        Write(",");
+        WriteType(value.Type);
+      }
+      Write(")");
+    }
+
+    private WriteQueryExpression(value : IQueryExpression) : void
+    {
+      Write("(");
+      WriteFromClause(value.From);
+      LineBreak();
+      WriteQueryBody(value.Body);
+      Write(")");
+    }
+
+    private WriteQueryBody(value : IQueryBody) : void
+    {
+      // from | where | let | join | orderby
+      //
+      WriteList(value.Clauses.ToList(), null, null, " ", e =>
+        {
+          WriteQueryClause(e);
+          LineBreak();
+        }
+      );
+
+      // select | group
+      //
+      WriteQueryOperation(value.Operation);
+
+      // into
+      //
+      unless (value.Continuation == null)
+      {
+        LineBreak();
+        WriteQueryContinuation(value.Continuation);
+      }
     }
 
+    private WriteQueryOperation(value : IQueryOperation) : void
+    {
+    | o is IGroupOperation  => WriteGroupOperation (o);
+    | o is ISelectOperation => WriteSelectOperation(o);
+    | null                  => {}
+    | _                     => throw NotSupportedException($"Invalid query operation '$(value.GetType().Name)'.");
+    }
+
+    private WriteGroupOperation(value : IGroupOperation) : void
+    {
+      WriteKeyword("group");
+      Write(" ");
+      WriteExpression(value.Item);
+      Write(" ");
+      WriteKeyword("by");
+      Write(" ");
+      WriteExpression(value.Key);
+    }
+
+    private WriteSelectOperation(value : ISelectOperation) : void
+    {
+      WriteKeyword("select");
+      Write(" ");
+      WriteExpression(value.Expression);
+    }
+
+    private WriteQueryContinuation(value : IQueryContinuation) : void
+    {
+      WriteKeyword("into");
+      Write(" ");
+      WriteDeclaration(value.Variable.Name);
+      LineBreak();
+      WriteQueryBody(value.Body);
+    }
+
+    private WriteQueryClause(value : IQueryClause) : void
+    {
+    | c is IFromClause  => WriteFromClause (c);
+    | c is IJoinClause  => WriteJoinClause (c);
+    | c is ILetClause   => WriteLetClause  (c);
+    | c is IOrderClause => WriteOrderClause(c);
+    | c is IWhereClause => WriteWhereClause(c);
+    | null              => {}
+    | _                 => throw NotSupportedException($"Invalid query clause '$(value.GetType().Name)'.");
+    }
+
+    private WriteFromClause(value : IFromClause) : void
+    {
+      WriteKeyword("from");
+      Write(" ");
+      WriteDeclaration(value.Variable.Name);
+      Write(" ");
+      WriteKeyword("in");
+      Write(" ");
+      WriteExpression(value.Expression);
+    }
+
+    private WriteJoinClause(value : IJoinClause) : void
+    {
+      WriteKeyword("join");
+      Write(" ");
+      WriteDeclaration(value.Variable.Name);
+      Write(" ");
+      WriteKeyword("in");
+      Write(" ");
+      WriteExpression(value.In);
+      Write(" ");
+      WriteKeyword("on");
+      Write(" ");
+      WriteExpression(value.On);
+      Write(" ");
+      WriteKeyword("equals");
+      Write(" ");
+      WriteExpression(value.Equality);
+
+      unless (value.Into == null)
+      {
+        Write(" ");
+        WriteKeyword("into");
+        Write(" ");
+        WriteDeclaration(value.Into.Name);
+      }
+    }
+
+    private WriteLetClause(value : ILetClause) : void
+    {
+      WriteKeyword("let");
+      Write(" ");
+      WriteDeclaration(value.Variable.Name);
+      Write(" = ");
+      WriteExpression(value.Expression);
+    }
+
+    private WriteOrderClause(value : IOrderClause) : void
+    {
+      WriteKeyword("orderby");
+      Write(" ");
+      WriteExpression(value.Expression);
+
+      when (value.Direction == OrderDirection.Descending)
+      {
+        Write(" ");
+        WriteKeyword("descending");
+      }
+    }
+
+    private WriteWhereClause(value : IWhereClause) : void
+    {
+      WriteKeyword("where");
+      Write(" ");
+      WriteExpression(value.Expression);
+    }
+
+#endif
+
     #endregion
 
     #region Type members
@@ -1005,6 +1298,8 @@
       WriteMemberName(value.Name);
       Write(" : ");
       WriteType(value.EventType);
+
+      unless (_configuration.BracingType == BracingType.Indent)
       Write(";");
 
       unless (_configuration.ShowTypeDeclarationBody)
@@ -1056,6 +1351,7 @@
         WriteExpression(value.Initializer);
       }
 
+      unless (_configuration.BracingType == BracingType.Indent)
       Write(";");
 
       unless (_configuration.ShowTypeDeclarationBody)
@@ -1114,13 +1410,12 @@
                   Write(")");
                 | _ => WriteMethodInvokeExpression(cd.Initializer);
                 }
-                Write(";");
-                WriteLine();
+
+                EndLine();
               }
             | _ =>
               WriteMethodInvokeExpression(cd.Initializer);
-              Write(";");
-              WriteLine();
+              EndLine();
             }
           | _ => {}
           }
@@ -1132,15 +1427,11 @@
               {
                 WriteStatement(s);
                 when (IsSingleLineStatement(s))
-                {
-                  Write(";");
-                  WriteLine();
-                }
+                  EndLine();
               });
           | s is IStatement      =>
             WriteStatement(s);
-            Write(";");
-            WriteLine();
+            EndLine();
           | _                    => {}
           }
 
@@ -1347,6 +1638,7 @@
         WriteGenericParameterConstraintList(genArgs);
       }
 
+      unless (_configuration.BracingType == BracingType.Indent)
       Write(";");
     }
 
@@ -1394,7 +1686,7 @@
             WriteDeclaration(f.Name);
 
             // Initializer optimization.
-            // Do not write redundant initializers.
+            // Strip out redundant initializers.
             // Also [FlagsAttribute] marked enum values are written in hex.
             //
             def suppressInitializer =
@@ -1403,14 +1695,9 @@
               | literal is ILiteralExpression =>
                 if (wrapper.IsFlagsEnumeration)
                 {
-                  match (literal.Value)
-                  {
-                  | fmt is IFormattable =>
                     Write(" = ");
-                    WriteLiteral("0x" + fmt.ToString("X2", CultureInfo.InvariantCulture));
+                  WriteLiteral(literal.Value, NumberFormat.Hexadecimal);
                     true
-                  | _                   => false
-                  }
                 }
                 else
                 {
@@ -1482,7 +1769,9 @@
       WriteGenericParameterConstraintList(genArgs);
       Write(" = ");
 
-      WriteReference(alias, alias, typeRef);
+      // WriteReference(alias, alias, typeRef);
+      Write(alias);
+      unless (_configuration.BracingType == BracingType.Indent)
       Write(";");
     }
 
@@ -1520,11 +1809,20 @@
       {
         BeginBlock();
 
-        def events      = value.Events     .ToList().Filter(e => !e.RuntimeSpecialName);
-        def fields      = value.Fields     .ToList().Filter(e => !e.IsGenerated() && !e.RuntimeSpecialName);
-        def innerTypes  = value.NestedTypes.ToList().Filter(e => !e.IsGenerated());
-        def properties  = value.Properties .ToList().Filter(e => !e.IsGenerated());
-        mutable methods = value.Methods    .ToList().Filter(e => !e.IsGenerated());
+        mutable events     = value.Events     .ToList().Filter(e => !e.RuntimeSpecialName);
+        mutable fields     = value.Fields     .ToList().Filter(e => !e.RuntimeSpecialName);
+        mutable innerTypes = value.NestedTypes.ToList();
+        mutable properties = value.Properties .ToList();
+        mutable methods    = value.Methods    .ToList();
+
+        when (_configuration.HideCompilerGenerated)
+        {
+          events     = events    .Filter(e => !e.IsGenerated());
+          fields     = fields    .Filter(f => !f.IsGenerated());
+          innerTypes = innerTypes.Filter(t => !t.IsGenerated());
+          properties = properties.Filter(p => !p.IsGenerated());
+          methods    = methods   .Filter(m => !m.IsGenerated());
+        }
 
         events.Iter(e : IEventDeclaration =>
           {
@@ -1624,8 +1922,13 @@
 
     private WriteVariableReference(value : IVariableReference) : void
     {
-      def ty = value.Variable.VariableType.GetUserFriendlyName();
-      WriteReference(value.Name, $"$(value.Name) : $ty // Local variable", null);
+#if REFLECTOR_VER_42
+      def variable = value.Variable;
+#elif REFLECTOR_VER_50
+      def variable = value.Resolve();
+#endif
+      def ty = variable.VariableType.GetUserFriendlyName();
+      WriteReference(variable.Name, $"$(variable.Name) : $ty // Local variable", null);
     }
 
     private WriteMemberReference(memberReference : IMemberReference) : void
@@ -1639,6 +1942,7 @@
 
     private WriteVariableDeclaration(value : IVariableDeclaration, inner : bool = false) : void
     {
+    	// Identifier, Name, Symbol
       unless (inner)
       {
         WriteKeyword("mutable");
@@ -1698,7 +2002,7 @@
       def dims = arrType.Dimensions;
       when (dims.Count > 1)
       {
-        WriteLiteral(dims.Count.ToString(CultureInfo.InvariantCulture));
+        WriteLiteral(dims.Count, NumberFormat.Auto);
         Write(", ");
       }
 
@@ -1811,7 +2115,7 @@
       {
       | b is IBinaryExpression when b.Operator == BinaryOperator.BooleanOr =>
         writeCase(b.Left);
-        WriteLine();
+        LineBreak();
         writeCase(b.Right);
       | _ =>
         Write("| ");
@@ -1980,10 +2284,16 @@
       else
         WriteType(value.ParameterType);
 
-      unless (value.DefaultValue == null)
+#if REFLECTOR_VER_42
+      def defaultValue = value.DefaultValue;
+#elif REFLECTOR_VER_50
+      def defaultValue = wrapper.DefaultValue;
+#endif
+
+      unless (defaultValue == null)
       {
         Write(" = ");
-        WriteExpression(value.DefaultValue);
+        WriteExpression(defaultValue);
       }
     }
 
@@ -2017,10 +2327,10 @@
       when _configuration.ShowMethodDeclarationBody =>
       BeginBlock();
       WriteStatement(s);
-      Write(";");
-      WriteLine();
+      EndLine();
       EndBlock();
     | _                                             =>
+      unless (_configuration.BracingType == BracingType.Indent)
       Write(";");
     }
 
@@ -2213,6 +2523,49 @@
         Write("void");
     }
 
+    private WriteLiteral(value : object, suggestedFormat : NumberFormat) : void
+    {
+      def numFmt = if (_configuration.NumberFormat == NumberFormat.Auto) suggestedFormat else _configuration.NumberFormat;
+      def typeCode = if (value is IConvertible) (value :> IConvertible).GetTypeCode() else TypeCode.Object;
+
+      match (typeCode)
+      {
+      | TypeCode.SByte
+      | TypeCode.Byte
+      | TypeCode.Int16
+      | TypeCode.UInt16
+      | TypeCode.Int32
+      | TypeCode.UInt32
+      | TypeCode.Int64
+      | TypeCode.UInt64 =>
+        def strFmt =
+          match (numFmt)
+          {
+          | NumberFormat.Hexadecimal => "X";
+          | NumberFormat.Decimal     => "D";
+          | NumberFormat.Auto        => 
+            def longVal = if (typeCode == TypeCode.UInt64)
+              value :> long;
+            else
+              (value :> IConvertible).ToInt64(CultureInfo.InvariantCulture);
+
+            if (longVal < 16 || (longVal < 1000 && (longVal % 10) == 0))
+              "D";
+            else
+              "X";
+          }
+
+          def formattable = value :> IFormattable;
+
+          when (strFmt == "X")
+            WriteLiteral("0x");
+
+          WriteLiteral(formattable.ToString(strFmt, CultureInfo.InvariantCulture));
+
+      | _               => WriteLiteral(Convert.ToString(value, CultureInfo.InvariantCulture));
+      }
+    }
+
     #endregion
 
     #region Keywords

Modified: nemerle/trunk/tools/reflector-addon/src/LanguageWriterConfiguration.n
==============================================================================
--- nemerle/trunk/tools/reflector-addon/src/LanguageWriterConfiguration.n	(original)
+++ nemerle/trunk/tools/reflector-addon/src/LanguageWriterConfiguration.n	Mon Mar  5 06:50:50 2007
@@ -27,47 +27,90 @@
  */
 
 using System;
+using Nemerle.Utility;
+
+using Reflector;
 using Reflector.CodeModel;
 
 namespace Reflector.NemerleLanguage
 {
+  internal enum NumberFormat
+  {
+  | Auto
+  | Hexadecimal
+  | Decimal
+  }
+
+  internal enum BracingType
+  {
+  | Block
+  | C
+  | Indent
+  }
+
   internal class LanguageWriterConfiguration
   {
+    static FalseString : string = false.ToLowerInvariantString();
+
     _configuration : ILanguageWriterConfiguration;
     
-    public this(configuration : ILanguageWriterConfiguration)
-    {
+    [Accessor] _numberFormat : NumberFormat;
+    [Accessor] _bracingType  : BracingType;
+    [Accessor] _hideCompilerGenerated  : bool;
+
+    public this
+      ( configuration : ILanguageWriterConfiguration
+      , configManager : IConfigurationManager
+      )
+    {
+      _numberFormat = ParseEnumValue(configuration["NumberFormat"], NumberFormat.Auto);
+
+      unless (configManager == null)
+      {
+        def memerleConfig = configManager["Nemerle"];
+        _bracingType  = ParseEnumValue(memerleConfig.GetProperty("BracingType"), BracingType.Block);
+        _hideCompilerGenerated = memerleConfig.GetProperty("HideCompilerGenerated") != FalseString;
+      }
+
       _configuration = configuration;
     }
 
+    private static ParseEnumValue['a](strValue : string, defaultValue : 'a) : 'a
+    {
+      if (!string.IsNullOrEmpty(strValue) && Array.IndexOf(Enum.GetNames(typeof('a)), strValue) >= 0)
+        Enum.Parse(typeof('a), strValue) :> 'a;
+      else
+        defaultValue;
+    }
+
     public ShowCustomAttributes : bool
     {
-      get { _configuration["ShowCustomAttributes"] == "true" }
+      get { _configuration["ShowCustomAttributes"] != FalseString }
     }
 
     public ShowDocumentation : bool
     {
-      get { _configuration["ShowDocumentation"] == "true" }
+      get { _configuration["ShowDocumentation"] != FalseString }
     }
 
     public ShowNamespaceBody : bool
     {
-      get { _configuration["ShowNamespaceBody"] == "true" }
+      get { _configuration["ShowNamespaceBody"] != FalseString }
     }
 
     public ShowNamespaceImports : bool
     {
-      get { _configuration["ShowNamespaceImports"] == "true" }
+      get { _configuration["ShowNamespaceImports"] != FalseString }
     }
 
     public ShowMethodDeclarationBody : bool
     {
-      get { _configuration["ShowMethodDeclarationBody"] == "true" }
+      get { _configuration["ShowMethodDeclarationBody"] != FalseString }
     }
 
     public ShowTypeDeclarationBody : bool
     {
-      get { _configuration["ShowTypeDeclarationBody"] == "true" }
+      get { _configuration["ShowTypeDeclarationBody"] != FalseString }
     }
 
     #region IsVisible

Added: nemerle/trunk/tools/reflector-addon/src/OptionsPage.n
==============================================================================
--- (empty file)
+++ nemerle/trunk/tools/reflector-addon/src/OptionsPage.n	Mon Mar  5 06:50:50 2007
@@ -0,0 +1,162 @@
+/*
+ * Copyright (c) 2003-2007 The University of Wroclaw.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *    1. Redistributions of source code must retain the above copyright
+ *       notice, this list of conditions and the following disclaimer.
+ *    2. Redistributions in binary form must reproduce the above copyright
+ *       notice, this list of conditions and the following disclaimer in the
+ *       documentation and/or other materials provided with the distribution.
+ *    3. The name of the University may not be used to endorse or promote
+ *       products derived from this software without specific prior
+ *       written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE UNIVERSITY ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN
+ * NO EVENT SHALL THE UNIVERSITY BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
+ * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#if REFLECTOR_VER_50
+
+using System;
+using System.Drawing;
+using System.Windows.Forms;
+
+using Reflector;
+using Reflector.CodeModel;
+
+namespace Reflector.NemerleLanguage
+{
+  internal class OptionsPage : Control, IPropertyPage
+  {
+    private _nemerleConfig : IConfiguration;
+
+    private mutable _cbBracingType : ComboBox;
+    private mutable _hideCompilerGenerated : CheckBox;
+
+    public this(nemerleConfig : IConfiguration)
+    {
+      when (nemerleConfig == null)
+        throw ArgumentNullException("nemerleConfig");
+
+      _nemerleConfig = nemerleConfig;
+
+      Name = "OptionsPage";
+      Dock = DockStyle.Fill;
+    }
+
+    #region Component Designer generated code
+
+    /// <summary> 
+    /// Required method for Designer support - do not modify 
+    /// the contents of this method with the code editor.
+    /// </summary>
+    private InitializeComponent() : void
+    {
+      _cbBracingType = ComboBox();
+      _hideCompilerGenerated = CheckBox();
+
+      def panel = TableLayoutPanel();
+      def lblBracingType = Label();
+
+      panel.SuspendLayout();
+      SuspendLayout();
+
+      // panel
+      // 
+      panel.ColumnCount = 2;
+      _ = panel.ColumnStyles.Add(ColumnStyle(SizeType.Percent, 40.0f));
+      _ = panel.ColumnStyles.Add(ColumnStyle(SizeType.Percent, 60.0f));
+      panel.Controls.Add(_hideCompilerGenerated, 0, 0);
+      panel.Controls.Add(lblBracingType, 0, 1);
+      panel.Controls.Add(_cbBracingType, 1, 1);
+      panel.Dock = DockStyle.Fill;
+      panel.Name = "panel";
+      panel.RowCount = 3;
+      _ = panel.RowStyles.Add(RowStyle(SizeType.Percent, 20.0f));
+      _ = panel.RowStyles.Add(RowStyle(SizeType.Percent, 20.0f));
+      _ = panel.RowStyles.Add(RowStyle(SizeType.Percent, 60.0f));
+
+      // _hideCompilerGeneratedGenerated
+      // 
+      _hideCompilerGenerated.Anchor = AnchorStyles.None;
+      _hideCompilerGenerated.AutoSize = true;
+      panel.SetColumnSpan(_hideCompilerGenerated, 2);
+      _hideCompilerGenerated.Name = "HideCompilerGenerated";
+      _hideCompilerGenerated.Text = "&Hide compiler generated members";
+
+      // lblBracingType
+      // 
+      lblBracingType.Anchor = AnchorStyles.None;
+      lblBracingType.AutoSize = true;
+      lblBracingType.Name = "lblBracingType";
+      lblBracingType.Text = "&Bracing type";
+
+      // _cbBracingType
+      // 
+      _cbBracingType.Anchor = AnchorStyles.None;
+      _cbBracingType.Name = typeof(BracingType).Name;
+      _cbBracingType.DataSource = Enum.GetNames(typeof(BracingType));
+      _cbBracingType.DropDownStyle = ComboBoxStyle.DropDownList;
+
+      // OptionsPage
+      // 
+      Controls.Add(panel);
+
+      panel.ResumeLayout(false);
+      panel.PerformLayout();
+      ResumeLayout(false);
+    }
+
+    #endregion
+
+    #region IPropertyPage members
+
+    public Cancel() : void
+    {
+    }
+
+    public Commit() : void
+    {
+      // Untill the options page is shown, all options match the config file.
+      //
+      unless (Controls.Count == 0)
+      {
+        _nemerleConfig.SetProperty(_hideCompilerGenerated.Name, _hideCompilerGenerated.Checked.ToLowerInvariantString(), true.ToLowerInvariantString());
+        _nemerleConfig.SetProperty(_cbBracingType.Name, _cbBracingType.Text, BracingType.Block.ToString());
+      }
+    }
+
+    protected override OnCreateControl() : void
+    {
+      base.OnCreateControl();
+
+      // Initialize the component on the first time.
+      //
+      when (Controls.Count == 0)
+        InitializeComponent();
+
+      _hideCompilerGenerated.Checked = _nemerleConfig.GetProperty(_hideCompilerGenerated.Name) != false.ToLowerInvariantString();
+      _cbBracingType.SelectedItem    = _nemerleConfig.GetProperty(_cbBracingType.Name, BracingType.Block.ToString());
+    }
+
+    public Title : string
+    {
+      get { "Nemerle"; }
+    }
+
+    #endregion
+  }
+}
+
+#endif
\ No newline at end of file

Modified: nemerle/trunk/tools/reflector-addon/src/Package.n
==============================================================================
--- nemerle/trunk/tools/reflector-addon/src/Package.n	(original)
+++ nemerle/trunk/tools/reflector-addon/src/Package.n	Mon Mar  5 06:50:50 2007
@@ -43,13 +43,23 @@
       when (serviceProvider == null)
         throw ArgumentNullException("serviceProvider");
 
-      _langMgr = serviceProvider.GetService(typeof(ILanguageManager)) :> ILanguageManager;
+      _langMgr = serviceProvider.GetService();
 
       when (_langMgr == null)
         throw InvalidOperationException("ILanguageManager not available");
 
-      _nemerleLang = Language();
+      _nemerleLang = Language(serviceProvider);
       _langMgr.RegisterLanguage(_nemerleLang);
+
+#if REFLECTOR_VER_50
+
+      def propPageMgr = serviceProvider.GetService() : IPropertyPageManager;
+      def configMgr   = serviceProvider.GetService() : IConfigurationManager;
+
+      propPageMgr.OptionsPages.Add(OptionsPage(configMgr["Nemerle"]));
+
+#endif
+
     }
 
     public Unload() : void



More information about the svn mailing list