summaryrefslogtreecommitdiff
path: root/BCT/BytecodeTranslator/WholeProgram.cs
diff options
context:
space:
mode:
Diffstat (limited to 'BCT/BytecodeTranslator/WholeProgram.cs')
-rw-r--r--BCT/BytecodeTranslator/WholeProgram.cs16
1 files changed, 11 insertions, 5 deletions
diff --git a/BCT/BytecodeTranslator/WholeProgram.cs b/BCT/BytecodeTranslator/WholeProgram.cs
index 73e882e0..fa345867 100644
--- a/BCT/BytecodeTranslator/WholeProgram.cs
+++ b/BCT/BytecodeTranslator/WholeProgram.cs
@@ -74,14 +74,20 @@ namespace BytecodeTranslator {
}
this.subTypes[baseClass].Add(typeDefinition);
}
+ foreach (var iface in typeDefinition.Interfaces) {
+ if (!this.subTypes.ContainsKey(iface)) {
+ this.subTypes[iface] = new List<ITypeReference>();
+ }
+ this.subTypes[iface].Add(typeDefinition);
+ }
base.TraverseChildren(typeDefinition);
}
}
}
- public override ExpressionTraverser MakeExpressionTraverser(Sink sink, StatementTraverser/*?*/ statementTraverser, bool contractContext) {
- return new WholeProgramExpressionSemantics(this, sink, statementTraverser, contractContext);
+ public override ExpressionTraverser MakeExpressionTraverser(Sink sink, StatementTraverser/*?*/ statementTraverser, bool contractContext, bool expressionIsStatement) {
+ return new WholeProgramExpressionSemantics(this, sink, statementTraverser, contractContext, expressionIsStatement);
}
/// <summary>
@@ -94,8 +100,8 @@ namespace BytecodeTranslator {
readonly WholeProgram parent;
readonly public Dictionary<ITypeReference, List<ITypeReference>> subTypes;
- public WholeProgramExpressionSemantics(WholeProgram parent, Sink sink, StatementTraverser/*?*/ statementTraverser, bool contractContext)
- : base(sink, statementTraverser, contractContext) {
+ public WholeProgramExpressionSemantics(WholeProgram parent, Sink sink, StatementTraverser/*?*/ statementTraverser, bool contractContext, bool expressionIsStatement)
+ : base(sink, statementTraverser, contractContext, expressionIsStatement) {
this.parent = parent;
this.subTypes = parent.subTypes;
}
@@ -130,7 +136,7 @@ namespace BytecodeTranslator {
if (resolvedOverride != resolvedMethod)
same = false;
}
- if (0 == overrides.Count || same) {
+ if (!(containingType.ResolvedType.IsInterface) && (0 == overrides.Count || same)) {
base.TraverseChildren(methodCall);
return;
}