[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