[svn] r7230: nemerle/trunk/tools/reflector-addon: lib lib/Reflector.cfg lib/readme.txt reflector-addon.bui...

pbludov svnadmin at nemerle.org
Tue Jan 9 03:00:06 CET 2007


Log:
Changes in reflector-addon: all expressions used in a custom attribute declaration are implemented.

Author: pbludov
Date: Tue Jan  9 02:59:59 2007
New Revision: 7230

Removed:
   nemerle/trunk/tools/reflector-addon/lib/Reflector.cfg
Modified:
   nemerle/trunk/tools/reflector-addon/lib/   (props changed)
   nemerle/trunk/tools/reflector-addon/lib/readme.txt
   nemerle/trunk/tools/reflector-addon/reflector-addon.build
   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
   nemerle/trunk/tools/reflector-addon/src/UsingNamespaceVisitor.n

Modified: nemerle/trunk/tools/reflector-addon/lib/readme.txt
==============================================================================
--- nemerle/trunk/tools/reflector-addon/lib/readme.txt	(original)
+++ nemerle/trunk/tools/reflector-addon/lib/readme.txt	Tue Jan  9 02:59:59 2007
@@ -1 +1,3 @@
-Put reflector.exe and Nemerle.dll here.
\ No newline at end of file
+Put reflector.exe here.
+
+The Reflector is available for free download at http://aisto.com/roeder/DotNet/
\ No newline at end of file

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	Tue Jan  9 02:59:59 2007
@@ -2,6 +2,8 @@
 <project name="reflector-addon" default="build">
 
     <property name='configuration' value="Debug"/>
+
+    <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')}"/>
 
@@ -10,7 +12,6 @@
         <ncc output='${build.dir}/Reflector.NemerleLanguage.dll' target='dll'>
 			<references>
                 <include name='${lib.dir}/Reflector.exe' />
-                <include name='${lib.dir}/Nemerle.dll' />
 			</references>
 			<sources basedir='src'>
 				<include name='*.n' />
@@ -20,7 +21,8 @@
     </target>
 
     <target name="run" depends="build">
-        <exec program="Reflector.exe" workingdir="${lib.dir}" basedir="${lib.dir}"/>
+		<copy file="${boot.dir}/Nemerle.dll" tofile="${lib.dir}/Nemerle.dll" />
+        <exec program="Reflector.exe" workingdir="${lib.dir}" basedir="${lib.dir}" />
     </target>
 
     <target name="clean">

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	Tue Jan  9 02:59:59 2007
@@ -27,7 +27,6 @@
  */
 
 using System;
-using System.Globalization;
 
 using Reflector.CodeModel;
 

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	Tue Jan  9 02:59:59 2007
@@ -27,9 +27,9 @@
  */
 
 
-using System.Diagnostics;
 using Nemerle.Collections;
 using Nemerle.Utility;
+using System.Diagnostics;
 
 using Reflector.CodeModel;
 
@@ -54,7 +54,7 @@
                 match (t.Name)
                 {
                 | "ExtensionAttribute"            => _isExtension     = true
-                | other                           => Debug.Fail($"Attribute named '$other' was ignored")
+                | other                           => Debug.WriteLine($"Attribute named '$other' was ignored")
                 }
                 true
               | _                  => false
@@ -67,7 +67,6 @@
     }
     | Type
     {
-      [Accessor] mutable _isExtension        : bool;
       [Accessor] mutable _typeAlias          : string;
       [Accessor] mutable _isVariant          : bool;
       [Accessor] mutable _isVariantOption    : bool;
@@ -85,7 +84,6 @@
               | "Nemerle.Internal" =>
                 match (t.Name)
                 {
-                | "ExtensionAttribute"            => _isExtension     = true
                 | "TypeAliasAttribute"
                 	when attr.Arguments.Count > 0 =>
                   match (attr.Arguments[0])
@@ -96,7 +94,7 @@
                 | "VariantAttribute"              => _isVariant       = true
                 | "ConstantVariantOptionAttribute"
                 | "VariantOptionAttribute"        => _isVariantOption = true
-                | other                           => Debug.Fail($"Attribute named '$other' was ignored")
+                | other                           => Debug.WriteLine($"Attribute named '$other' was ignored")
                 }
                 true
               | "System"           =>

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	Tue Jan  9 02:59:59 2007
@@ -28,7 +28,7 @@
 
 using System;
 using System.Collections;
-using System.IO;
+
 using Reflector;
 using Reflector.CodeModel;
 
@@ -144,13 +144,9 @@
       }
     }
 
-    public static GetVisibility(this value : IEventReference) : MethodVisibility
-    {
-      match (value.Resolve())
+    public GetUserFriendlyName(this value : IMemberReference) : string
       {
-      | null => MethodVisibility.Public
-      | decl => decl.GetVisibility();
-      }
+      value.DeclaringType.GetUserFriendlyName() + "." + value.Name
     }
 
     public static GetVisibility(this value : IEventDeclaration) : MethodVisibility
@@ -174,12 +170,18 @@
       }
     }
 
-    public static GetVisibility(this value : IFieldReference) : FieldVisibility
+    public static GetVisibility(this value : IPropertyDeclaration) : MethodVisibility
     {
-      match (value.Resolve())
+      def getMethod = if (value.GetMethod != null) value.GetMethod.Resolve() else null;
+      def setMethod = if (value.SetMethod != null) value.SetMethod.Resolve() else null;
+      
+      match ((getMethod, setMethod))
       {
-      | null => FieldVisibility.Public
-      | decl => decl.GetVisibility();
+      | (null, null)                             => MethodVisibility.Public
+      | (g, null)                                => g.Visibility
+      | (null, s)                                => s.Visibility
+      | (g, s) when g.Visibility == s.Visibility => g.Visibility
+      | _                                        => MethodVisibility.Public
       }
     }
 
@@ -188,7 +190,13 @@
       value.Visibility
     }
 
-    public static GetVisibility(this value : IMethodReference) : MethodVisibility
+    public static GetVisibility(this value : IMethodDeclaration) : MethodVisibility
+    {
+      value.Visibility
+    }
+
+/*
+    public static GetVisibility(this value : IEventReference) : MethodVisibility
     {
       match (value.Resolve())
       {
@@ -197,12 +205,16 @@
       }
     }
 
-    public static GetVisibility(this value : IMethodDeclaration) : MethodVisibility
+    public static GetVisibility(this value : IFieldReference) : FieldVisibility
     {
-      value.Visibility
+      match (value.Resolve())
+      {
+      | null => FieldVisibility.Public
+      | decl => decl.GetVisibility();
+      }
     }
 
-    public static GetVisibility(this value : IPropertyReference) : MethodVisibility
+    public static GetVisibility(this value : IMethodReference) : MethodVisibility
     {
       match (value.Resolve())
       {
@@ -211,20 +223,15 @@
       }
     }
 
-    public static GetVisibility(this value : IPropertyDeclaration) : MethodVisibility
+    public static GetVisibility(this value : IPropertyReference) : MethodVisibility
     {
-      def getMethod = if (value.GetMethod != null) value.GetMethod.Resolve() else null;
-      def setMethod = if (value.SetMethod != null) value.SetMethod.Resolve() else null;
-      
-      match ((getMethod, setMethod))
+      match (value.Resolve())
       {
-      | (null, null)                             => MethodVisibility.Public
-      | (g, null)                                => g.Visibility
-      | (null, s)                                => s.Visibility
-      | (g, s) when g.Visibility == s.Visibility => g.Visibility
-      | _                                        => MethodVisibility.Public
+      | null => MethodVisibility.Public
+      | decl => decl.GetVisibility();
       }
     }
+*/
 
     public static GetVisibility(this value : ITypeReference) : TypeVisibility
     {

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	Tue Jan  9 02:59:59 2007
@@ -26,7 +26,6 @@
  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-using System;
 using Reflector.CodeModel;
 
 namespace Reflector.NemerleLanguage

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	Tue Jan  9 02:59:59 2007
@@ -26,14 +26,15 @@
  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
+using Nemerle.Assertions;
+using Nemerle.Collections;
+using Nemerle.Internal;
 using System;
 using System.Collections;
 using System.Diagnostics;
 using System.Globalization;
 using System.IO;
-using Nemerle.Assertions;
-using Nemerle.Collections;
-using Nemerle.Internal;
+using System.Text;
 
 using Reflector.CodeModel;
 using Reflector.CodeModel.Memory;
@@ -150,11 +151,8 @@
             WriteLine();
         }
 
-        mutable visibleTypes = [];
-
-        foreach (tyDecl is ITypeDeclaration in value.Types)
-          when (_configuration.IsVisible(tyDecl))
-            visibleTypes ::= tyDecl;
+        def visibleTypes = value.Types.ToList()
+          .Filter(e : ITypeDeclaration => _configuration.IsVisible(e));
 
         visibleTypes.Sort((x, y) => string.Compare(x.Name, y.Name)).Iter(ty =>
           {
@@ -174,8 +172,39 @@
       }
     }
 
-    public override WriteResource(value : IResource) : void {}
-    public override WriteStatement(value : IStatement) : void {}
+    public override WriteResource(value : IResource) : void
+    {
+      Write("// ");
+      WriteKeyword(
+        match (value.Visibility)
+        {
+        | ResourceVisibility.Public  => "public";
+        | ResourceVisibility.Private => "private";
+        });
+
+      Write(" ");
+      WriteKeyword("resource");
+      Write(" ");
+      WriteDeclaration(value.Name);
+      WriteLine();
+
+      match (value)
+      {
+      | embedded is IEmbeddedResource =>
+          WriteProperty("Size", $"$(embedded.Value.Length) Bytes");
+      | file     is IFileResource     =>
+        WriteProperty("Location", file.Location);
+        def loc = Environment.ExpandEnvironmentVariables(file.Location);
+        when (File.Exists(loc))
+          WriteProperty("Size", $"$(FileInfo(loc).Length) Bytes");
+      | _                             => throw NotImplementedException();
+      }
+    }
+
+    public override WriteStatement(value : IStatement) : void
+    {
+      Write($"Statement $value");
+    }
 
     #endregion
 
@@ -183,6 +212,7 @@
 
     public override WriteExpression(value : IExpression) : void
     {
+    | null                                     => throw ArgumentNullException("expression");
     | expr is ILiteralExpression               => WriteLiteralExpression(expr);
     | expr is IAssignExpression                => WriteAssignExpression(expr);
     | expr is ITypeOfExpression                => WriteTypeOfExpression(expr);
@@ -225,27 +255,89 @@
     | expr is ITypedReferenceCreateExpression  => WriteTypedReferenceCreateExpression(expr);
     | expr is IObjectInitializeExpression      => WriteObjectInitializeExpression(expr);
     | expr is ISnippetExpression               => WriteSnippetExpression(expr);
-    | null                                     => throw ArgumentNullException("expression");
     | _                                        => throw NotImplementedException();
     }
 
     private WriteLiteralExpression(expression : ILiteralExpression) : void
     {
-      //TODO: escape special characters such a \r,\n,\t
       match (expression.Value)
       {
-      | str is string       => WriteLiteral($"\"$str\"")
-      | chr is char         => WriteLiteral($"'$chr'")
       | null                => WriteLiteral("null");
+      | str is string       => WriteLiteral($"\"$(EscapeString(str))\"")
+      | chr is char         => WriteLiteral($"'$(EscapeChar(chr))'")
       | other               => WriteLiteral(Convert.ToString(other, CultureInfo.InvariantCulture))
       }
     }
 
-    private WriteAssignExpression(expr : IAssignExpression) : void { WriteLiteral($"$(expr.ToString())") }
-    private WriteTypeOfExpression(expr : ITypeOfExpression) : void { WriteLiteral($"$(expr.ToString())") }
-    private WriteNamedArgumentExpression(expr : INamedArgumentExpression) : void { WriteLiteral($"$(expr.ToString())") }
-    private WriteTypeReferenceExpression(expr : ITypeReferenceExpression) : void { WriteLiteral($"$(expr.ToString())") }
-    private WriteFieldReferenceExpression(expr : IFieldReferenceExpression) : void { WriteLiteral($"$(expr.ToString())") }
+    private WriteAssignExpression(expr : IAssignExpression) : void
+    {
+    | binExpr is IBinaryExpression
+      when expr.Target.Equals(binExpr.Left) =>
+
+      def op =
+        match (binExpr.Operator)
+        {
+        | BinaryOperator.Add                => "+=";
+        | BinaryOperator.Subtract           => "-=";
+        | BinaryOperator.Multiply           => "*=";
+        | BinaryOperator.Divide             => "/=";
+        | BinaryOperator.BitwiseOr          => "|=";
+        | BinaryOperator.BitwiseAnd         => "&=";
+        | BinaryOperator.BitwiseExclusiveOr => "^=";
+        | _                                 => null;
+        }
+
+      if (op != null)
+      {
+        WriteExpression(binExpr.Left);
+        Write(" ");
+        Write(op);
+        Write(" ");
+        WriteExpression(binExpr.Right);
+      }
+      else
+      {
+        WriteExpression(expr.Target);
+        Write(" = ");
+        WriteExpression(expr.Expression);
+      }
+
+    | _                                     =>
+      WriteExpression(expr.Target);
+      Write(" = ");
+      WriteExpression(expr.Expression);
+    }
+
+    private WriteTypeOfExpression(expr : ITypeOfExpression) : void
+    {
+      WriteKeyword("typeof");
+      Write("(");
+      WriteType(expr.Type);
+      Write(")");
+    }
+
+    private WriteNamedArgumentExpression(expr : INamedArgumentExpression) : void
+    {
+      WriteMemberReference(expr.Member);
+      Write("=");
+      WriteExpression(expr.Value);
+    }
+
+    private WriteTypeReferenceExpression(expr : ITypeReferenceExpression) : void
+    {
+      WriteType(expr.Type);
+    }
+
+    private WriteFieldReferenceExpression(expr : IFieldReferenceExpression) : void
+    {
+      unless (expr.Target == null)
+      {
+        WriteExpression(expr.Target);
+        Write(".");
+      }
+      WriteFieldReference(expr.Field);
+    }
+
     private WriteEventReferenceExpression(expr : IEventReferenceExpression) : void { WriteLiteral($"$(expr.ToString())") }
     private WriteMethodReferenceExpression(expr : IMethodReferenceExpression) : void { WriteLiteral($"$(expr.ToString())") }
     private WriteArgumentListExpression(expr : IArgumentListExpression) : void { WriteLiteral($"$(expr.ToString())") }
@@ -770,7 +862,8 @@
 
         WriteLine();
         WriteKeyword("#endregion");
-        WriteLine();
+        Write(" ");
+        WriteLine(name);
         WriteLine();
       }
     }
@@ -779,6 +872,11 @@
 
     #region Helpers
 
+    private WriteFieldReference(value : IFieldReference) : void
+    {
+      WriteReference(value.Name, value.GetUserFriendlyName(), value);
+    }
+
     private WriteMethodReference(value : IMethodReference) : void
     {
       def ty = value.DeclaringType;
@@ -789,7 +887,26 @@
         else
          ty.GetName() + "." + value.Name;
 
-      WriteReference(name, ty.GetUserFriendlyName() + "." + value.Name, value);
+      WriteReference(name, value.GetUserFriendlyName(), value);
+    }
+
+    private WritePropertyReference(value : IPropertyReference) : void
+    {
+      WriteReference(value.Name, value.GetUserFriendlyName(), value);
+    }
+
+    private WriteEventReference(value : IEventReference) : void
+    {
+      WriteReference(value.Name, value.GetUserFriendlyName(), value);
+    }
+
+    private WriteMemberReference(memberReference : IMemberReference) : void
+    {
+    | f is IFieldReference    => WriteFieldReference   (f);
+    | m is IMethodReference   => WriteMethodReference  (m);
+    | p is IPropertyReference => WritePropertyReference(p);
+    | e is IEventReference    => WriteEventReference   (e);
+    | _                       => throw NotSupportedException();
     }
 
     private WriteType(value : IType) : void
@@ -1052,6 +1169,33 @@
       Write(" ");
     }
 
+    private EscapeString(value : string) : string
+    {
+      def builder = StringBuilder(value.Length * 2);
+      for (mutable i = 0; i < value.Length; ++i)
+        _ = builder.Append(EscapeChar(value[i]));
+
+      builder.ToString();
+    }
+
+    private EscapeChar(value : char) : string
+    {
+    | '\\' => @"\\";
+    | '\'' => @"\'";
+    | '\0' => @"\0";
+    | '\b' => @"\b";
+    | '\t' => @"\t";
+    | '\n' => @"\n";
+    | '\r' => @"\r";
+    | '"'  => @"""";
+    | _ when value < ' '     =>
+      @"\x" + (value :> IFormattable).ToString("X2", CultureInfo.InvariantCulture);
+    | _ when value > '\x100' =>
+      @"\u" + (value :> IFormattable).ToString("X4", CultureInfo.InvariantCulture);
+    | _                      =>
+      value.ToString();
+    }
+
     #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	Tue Jan  9 02:59:59 2007
@@ -72,6 +72,7 @@
 
     #region IsVisible
 
+/*
     private IsVisible(methodVisibility : MethodVisibility) : bool
     {
       def visibilityConfig = _configuration.Visibility;
@@ -103,6 +104,7 @@
       | _                                 => throw NotSupportedException()
       }
     }
+*/
 
     private IsVisible(typeVisibility : TypeVisibility) : bool
     {
@@ -121,6 +123,7 @@
       }
     }
 
+/*
     public IsVisible(value : IEventReference) : bool
     {
       IsVisible(value.DeclaringType) && IsVisible(value.GetVisibility())
@@ -140,6 +143,7 @@
     {
       IsVisible(value.DeclaringType) && IsVisible(value.GetVisibility())
     }
+*/
 
     public IsVisible(value : IType) : bool
     {

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	Tue Jan  9 02:59:59 2007
@@ -27,6 +27,7 @@
  */
 
 using System;
+
 using Reflector;
 using Reflector.CodeModel;
 

Modified: nemerle/trunk/tools/reflector-addon/src/UsingNamespaceVisitor.n
==============================================================================
--- nemerle/trunk/tools/reflector-addon/src/UsingNamespaceVisitor.n	(original)
+++ nemerle/trunk/tools/reflector-addon/src/UsingNamespaceVisitor.n	Tue Jan  9 02:59:59 2007
@@ -26,10 +26,9 @@
  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-using System;
-using System.Collections;
 using Nemerle.Assertions;
 using Nemerle.Utility;
+using System.Collections;
 
 using Reflector.CodeModel;
 using Reflector.NemerleLanguage.CodeModel;



More information about the svn mailing list