summaryrefslogtreecommitdiff
path: root/BCT/BytecodeTranslator/ExpressionTraverser.cs
diff options
context:
space:
mode:
Diffstat (limited to 'BCT/BytecodeTranslator/ExpressionTraverser.cs')
-rw-r--r--BCT/BytecodeTranslator/ExpressionTraverser.cs18
1 files changed, 13 insertions, 5 deletions
diff --git a/BCT/BytecodeTranslator/ExpressionTraverser.cs b/BCT/BytecodeTranslator/ExpressionTraverser.cs
index 5198e908..14ec1da2 100644
--- a/BCT/BytecodeTranslator/ExpressionTraverser.cs
+++ b/BCT/BytecodeTranslator/ExpressionTraverser.cs
@@ -402,7 +402,6 @@ namespace BytecodeTranslator
/// <remarks>Stub, This one really needs comments!</remarks>
public override void Visit(IMethodCall methodCall)
{
-
var resolvedMethod = methodCall.MethodToCall.ResolvedMethod;
#region Translate In Parameters
@@ -475,7 +474,6 @@ namespace BytecodeTranslator
}
string methodname = TranslationHelper.CreateUniqueMethodName(methodCall.MethodToCall);
-
Bpl.QKeyValue attrib = null;
foreach (var a in resolvedMethod.Attributes)
{
@@ -583,11 +581,11 @@ namespace BytecodeTranslator
{
TranslateArrayCreation(createArrayInstance);
}
-
+
public override void Visit(ICreateDelegateInstance createDelegateInstance)
{
- // TranslateCreation(createDelegateInstance.MethodToCallViaDelegate, createDelegateInstance.Arguments, createDelegateInstance.Type, createDelegateInstance);
- base.Visit(createDelegateInstance);
+ TranslateDelegateCreation(createDelegateInstance.MethodToCallViaDelegate, createDelegateInstance.Type);
+ //base.Visit(createDelegateInstance);
}
private void TranslateArrayCreation(IExpression creationAST)
@@ -644,6 +642,16 @@ namespace BytecodeTranslator
TranslatedExpressions.Push(Bpl.Expr.Ident(a));
}
+ private void TranslateDelegateCreation(IMethodReference methodToCall, ITypeReference type)
+ {
+ string methodName = TranslationHelper.CreateUniqueMethodName(methodToCall);
+ var typedIdent = new Bpl.TypedIdent(Bpl.Token.NoToken, methodName, Bpl.Type.Int);
+ var constant = new Bpl.Constant(Bpl.Token.NoToken, typedIdent, true);
+ sink.TranslatedProgram.TopLevelDeclarations.Add(constant);
+ TranslatedExpressions.Push(Bpl.Expr.Ident(constant));
+ sink.AddDelegate(type.ResolvedType, constant);
+ }
+
#endregion
#region Translate Binary Operators