Add support for multiple interfaces
This commit is contained in:
@@ -459,9 +459,23 @@ public partial class QBEGenerator
|
||||
{
|
||||
var implementation = EmitUnwrap(EmitExpression(interfaceInitializer.Implementation));
|
||||
|
||||
var vtableOffset = 0;
|
||||
foreach (var interfaceImplementation in interfaceInitializer.StructType.InterfaceImplementations)
|
||||
{
|
||||
if (interfaceImplementation == interfaceInitializer.InterfaceType)
|
||||
{
|
||||
break;
|
||||
}
|
||||
|
||||
vtableOffset += interfaceImplementation.Functions.Count * 8;
|
||||
}
|
||||
|
||||
var result = TmpName();
|
||||
_writer.Indented($"{result} =l alloc8 16");
|
||||
_writer.Indented($"storel {StructVtableName(interfaceInitializer.StructType.Name)}, {result}");
|
||||
|
||||
var interfaceVtablePointer = TmpName();
|
||||
_writer.Indented($"{interfaceVtablePointer} =l add {StructVtableName(interfaceInitializer.StructType.Name)}, {vtableOffset}");
|
||||
_writer.Indented($"storel {interfaceVtablePointer}, {result}");
|
||||
|
||||
var objectPointer = TmpName();
|
||||
_writer.Indented($"{objectPointer} =l add {result}, 8");
|
||||
|
||||
Reference in New Issue
Block a user