summaryrefslogtreecommitdiff
path: root/ICSharpCode.Decompiler/Ast/Annotations.cs
diff options
context:
space:
mode:
Diffstat (limited to 'ICSharpCode.Decompiler/Ast/Annotations.cs')
-rw-r--r--ICSharpCode.Decompiler/Ast/Annotations.cs52
1 files changed, 52 insertions, 0 deletions
diff --git a/ICSharpCode.Decompiler/Ast/Annotations.cs b/ICSharpCode.Decompiler/Ast/Annotations.cs
new file mode 100644
index 00000000..ec9fd61f
--- /dev/null
+++ b/ICSharpCode.Decompiler/Ast/Annotations.cs
@@ -0,0 +1,52 @@
+using System;
+using System.Collections.Generic;
+using System.Diagnostics;
+using ICSharpCode.Decompiler.ILAst;
+using ICSharpCode.NRefactory.CSharp;
+using Mono.Cecil;
+
+namespace ICSharpCode.Decompiler.Ast
+{
+ public class TypeInformation
+ {
+ public readonly TypeReference InferredType;
+ public readonly TypeReference ExpectedType;
+
+ public TypeInformation(TypeReference inferredType, TypeReference expectedType)
+ {
+ InferredType = inferredType;
+ ExpectedType = expectedType;
+ }
+ }
+
+ public class LdTokenAnnotation {}
+
+ /// <summary>
+ /// Annotation that is applied to the body expression of an Expression.Lambda() call.
+ /// </summary>
+ public class ParameterDeclarationAnnotation
+ {
+ public readonly List<ParameterDeclaration> Parameters = new List<ParameterDeclaration>();
+
+ public ParameterDeclarationAnnotation(ILExpression expr)
+ {
+ Debug.Assert(expr.Code == ILCode.ExpressionTreeParameterDeclarations);
+ for (int i = 0; i < expr.Arguments.Count - 1; i++) {
+ ILExpression p = expr.Arguments[i];
+ // p looks like this:
+ // stloc(v, call(Expression::Parameter, call(Type::GetTypeFromHandle, ldtoken(...)), ldstr(...)))
+ ILVariable v = (ILVariable)p.Operand;
+ TypeReference typeRef = (TypeReference)p.Arguments[0].Arguments[0].Arguments[0].Operand;
+ string name = (string)p.Arguments[0].Arguments[1].Operand;
+ Parameters.Add(new ParameterDeclaration(AstBuilder.ConvertType(typeRef), name).WithAnnotation(v));
+ }
+ }
+ }
+
+ /// <summary>
+ /// Annotation that is applied to a LambdaExpression that was produced by an expression tree.
+ /// </summary>
+ public class ExpressionTreeLambdaAnnotation
+ {
+ }
+}