Simplify variables
This commit is contained in:
@@ -4,6 +4,7 @@ extern func puts(text: cstring)
|
||||
interface Printable
|
||||
{
|
||||
func print()
|
||||
func test()
|
||||
}
|
||||
|
||||
struct Human : Printable
|
||||
@@ -15,6 +16,11 @@ struct Human : Printable
|
||||
{
|
||||
puts(this.name)
|
||||
}
|
||||
|
||||
func test()
|
||||
{
|
||||
puts("test")
|
||||
}
|
||||
}
|
||||
|
||||
func main(args: []cstring): i64
|
||||
@@ -25,6 +31,7 @@ func main(args: []cstring): i64
|
||||
}
|
||||
|
||||
x.print()
|
||||
x.test()
|
||||
|
||||
return 0
|
||||
}
|
||||
|
||||
@@ -559,12 +559,11 @@ public class QBEGenerator
|
||||
private void EmitVariableDeclaration(VariableDeclarationNode variableDeclaration)
|
||||
{
|
||||
var name = $"%{variableDeclaration.Name}";
|
||||
_writer.Indented($"{name} =l alloc8 8");
|
||||
_writer.Indented($"{name} =l alloc8 {SizeOf(variableDeclaration.Type)}");
|
||||
|
||||
if (variableDeclaration.Assignment.HasValue)
|
||||
{
|
||||
var value = EmitCreateCopyOrInitialize(variableDeclaration.Assignment.Value);
|
||||
EmitStore(variableDeclaration.Assignment.Value.Type, value, name);
|
||||
EmitCopyIntoOrInitialize(variableDeclaration.Assignment.Value, name);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -697,11 +696,11 @@ public class QBEGenerator
|
||||
|
||||
var elementType = ((ArrayTypeNode)arrayIndexAccess.Target.Type).ElementType;
|
||||
|
||||
var address = TmpName();
|
||||
_writer.Indented($"{address} =l mul {index}, {SizeOf(elementType)}");
|
||||
_writer.Indented($"{address} =l add {address}, 8");
|
||||
_writer.Indented($"{address} =l add {array}, {address}");
|
||||
return address;
|
||||
var offset = TmpName();
|
||||
_writer.Indented($"{offset} =l mul {index}, {SizeOf(elementType)}");
|
||||
_writer.Indented($"{offset} =l add {offset}, 8");
|
||||
_writer.Indented($"{offset} =l add {array}, {offset}");
|
||||
return offset;
|
||||
}
|
||||
|
||||
private string EmitAddressOfStructFieldAccess(StructFieldAccessNode structFieldAccess)
|
||||
@@ -840,7 +839,11 @@ public class QBEGenerator
|
||||
|
||||
private string EmitVariableIdent(VariableIdentNode variableIdent)
|
||||
{
|
||||
return EmitLoad(variableIdent.Type, EmitAddressOfVariableIdent(variableIdent));
|
||||
var address = EmitAddressOfVariableIdent(variableIdent);
|
||||
|
||||
return variableIdent.Type.IsSimpleType(out _, out _)
|
||||
? EmitLoad(variableIdent.Type, address)
|
||||
: address;
|
||||
}
|
||||
|
||||
private string EmitFuncParameterIdent(FuncParameterIdentNode funcParameterIdent)
|
||||
@@ -1058,10 +1061,11 @@ public class QBEGenerator
|
||||
var func = TmpName();
|
||||
_writer.Indented($"{func} =l loadl {funcOffset}");
|
||||
|
||||
_writer.Indented($"{target} =l add {target}, 8");
|
||||
_writer.Indented($"{target} =l loadl {target}");
|
||||
var data = TmpName();
|
||||
_writer.Indented($"{data} =l add {target}, 8");
|
||||
_writer.Indented($"{data} =l loadl {data}");
|
||||
|
||||
List<string> parameterStrings = [$"l {target}"];
|
||||
List<string> parameterStrings = [$"l {data}"];
|
||||
|
||||
foreach (var parameter in interfaceFuncCall.Parameters)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user