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