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