This commit is contained in:
nub31
2025-06-02 15:56:08 +02:00
parent 75aa8e7ed9
commit a9a6d9f44c

View File

@@ -451,9 +451,16 @@ public class Generator
Debug.Assert(structType != null); Debug.Assert(structType != null);
var structDefinition = LookupStructDefinition(structType.Namespace, structType.Name); var structDefinition = LookupStructDefinition(structType.Namespace, structType.Name);
var offset = LookupStructOffset(structDefinition, memberAssignment.MemberAccess.Member);
var item = GenerateExpression(memberAssignment.MemberAccess.Expression); var item = GenerateExpression(memberAssignment.MemberAccess.Expression);
var offsetName = GenVarName();
_builder.AppendLine($" %{offsetName} =l add {item}, {offset}");
var value = GenerateExpression(memberAssignment.Value); var value = GenerateExpression(memberAssignment.Value);
throw new NotImplementedException();
} }
private void GenerateReturn(ReturnNode @return) private void GenerateReturn(ReturnNode @return)
@@ -1441,23 +1448,26 @@ public class Generator
return $"%{outputName}"; return $"%{outputName}";
} }
break; throw new ArgumentOutOfRangeException(nameof(memberAccess.Member));
} }
case NubStructType structType: case NubStructType structType:
{ {
var structDefinition = LookupStructDefinition(structType.Namespace, structType.Name); var structDefinition = LookupStructDefinition(structType.Namespace, structType.Name);
var offset = LookupStructOffset(structDefinition, memberAccess.Member);
var offsetName = GenVarName(); var offsetName = GenVarName();
_builder.AppendLine($" %{offsetName} =l add {item}, {LookupStructOffset(structDefinition, memberAccess.Member)}"); _builder.AppendLine($" %{offsetName} =l add {item}, {offset}");
var outputName = GenVarName(); var outputName = GenVarName();
_builder.AppendLine($" %{outputName} ={SQT(memberAccess.Type)} load{SQT(memberAccess.Type)} %{offsetName}"); _builder.AppendLine($" %{outputName} ={SQT(memberAccess.Type)} load{SQT(memberAccess.Type)} %{offsetName}");
return $"%{outputName}"; return $"%{outputName}";
} }
default:
{
throw new ArgumentOutOfRangeException(nameof(memberAccess.Expression.Type));
}
} }
throw new ArgumentOutOfRangeException(nameof(memberAccess.Expression.Type));
} }
private string GenerateFuncCall(FuncCallNode funcCall) private string GenerateFuncCall(FuncCallNode funcCall)