summaryrefslogtreecommitdiff
path: root/BCT
diff options
context:
space:
mode:
authorGravatar qadeer <unknown>2011-02-25 03:34:10 +0000
committerGravatar qadeer <unknown>2011-02-25 03:34:10 +0000
commit39e31c744fbc191b90db48459d898c6402605559 (patch)
tree999ff04aea53df49960847d076c147164898d7af /BCT
parent75e5921cb1cd956d6d317af1957e3e726b1b00fc (diff)
two bug fixes
Diffstat (limited to 'BCT')
-rw-r--r--BCT/BytecodeTranslator/ExpressionTraverser.cs16
-rw-r--r--BCT/BytecodeTranslator/MetadataTraverser.cs6
2 files changed, 15 insertions, 7 deletions
diff --git a/BCT/BytecodeTranslator/ExpressionTraverser.cs b/BCT/BytecodeTranslator/ExpressionTraverser.cs
index 822185aa..1c401873 100644
--- a/BCT/BytecodeTranslator/ExpressionTraverser.cs
+++ b/BCT/BytecodeTranslator/ExpressionTraverser.cs
@@ -492,17 +492,25 @@ namespace BytecodeTranslator
bool isEventRemove = resolvedMethod.IsSpecialName && resolvedMethod.Name.Value.StartsWith("remove_");
if (isEventAdd || isEventRemove)
{
- Bpl.Variable eventVar = null;
- Bpl.Variable local = null;
+ IEventDefinition ed = null;
foreach (var e in resolvedMethod.ContainingTypeDefinition.Events)
{
if (e.Adder != null && e.Adder.ResolvedMethod == resolvedMethod)
{
- eventVar = this.sink.FindOrCreateEventVariable(e);
- local = this.sink.CreateFreshLocal(e.Type);
+ ed = e;
+ break;
+ }
+ }
+ Bpl.Variable eventVar = null;
+ Bpl.Variable local = null;
+ foreach (var f in resolvedMethod.ContainingTypeDefinition.Fields) {
+ if (ed.Name == f.Name) {
+ eventVar = this.sink.FindOrCreateFieldVariable(f);
+ local = this.sink.CreateFreshLocal(f.Type);
break;
}
}
+
if (methodCall.IsStaticCall)
{
this.StmtTraverser.StmtBuilder.Add(TranslationHelper.BuildAssignCmd(Bpl.Expr.Ident(local), Bpl.Expr.Ident(eventVar)));
diff --git a/BCT/BytecodeTranslator/MetadataTraverser.cs b/BCT/BytecodeTranslator/MetadataTraverser.cs
index 8ff1ada2..440e829a 100644
--- a/BCT/BytecodeTranslator/MetadataTraverser.cs
+++ b/BCT/BytecodeTranslator/MetadataTraverser.cs
@@ -57,9 +57,9 @@ namespace BytecodeTranslator {
}
}
- private Bpl.IfCmd BuildBreakCmd(Bpl.Expr b) {
+ private Bpl.IfCmd BuildReturnCmd(Bpl.Expr b) {
Bpl.StmtListBuilder ifStmtBuilder = new Bpl.StmtListBuilder();
- ifStmtBuilder.Add(new Bpl.BreakCmd(b.tok, ""));
+ ifStmtBuilder.Add(new Bpl.ReturnCmd(b.tok));
return new Bpl.IfCmd(b.tok, b, ifStmtBuilder.Collect(b.tok), null, null);
}
@@ -170,7 +170,7 @@ namespace BytecodeTranslator {
Bpl.StmtListBuilder whileStmtBuilder = new Bpl.StmtListBuilder();
whileStmtBuilder.Add(TranslationHelper.BuildAssignCmd(Bpl.Expr.Ident(niter), this.sink.ReadNext(Bpl.Expr.Ident(invars[0]), Bpl.Expr.Ident(iter))));
- whileStmtBuilder.Add(BuildBreakCmd(Bpl.Expr.Eq(Bpl.Expr.Ident(niter), this.sink.ReadHead(Bpl.Expr.Ident(invars[0])))));
+ whileStmtBuilder.Add(BuildReturnCmd(Bpl.Expr.Eq(Bpl.Expr.Ident(niter), this.sink.ReadHead(Bpl.Expr.Ident(invars[0])))));
whileStmtBuilder.Add(TranslationHelper.BuildAssignCmd(Bpl.Expr.Ident(method), this.sink.ReadMethod(Bpl.Expr.Ident(invars[0]), Bpl.Expr.Ident(niter))));
whileStmtBuilder.Add(TranslationHelper.BuildAssignCmd(Bpl.Expr.Ident(receiver), this.sink.ReadReceiver(Bpl.Expr.Ident(invars[0]), Bpl.Expr.Ident(niter))));
Bpl.IfCmd ifCmd = BuildIfCmd(Bpl.Expr.True, new Bpl.AssumeCmd(token, Bpl.Expr.False), null);