Implemented reading from struct fields

This commit is contained in:
2025-02-04 20:43:15 +01:00
parent 03a3bd8f02
commit bde68d4d64
10 changed files with 112 additions and 15 deletions

View File

@ -44,6 +44,17 @@ func (f *Function) ExpressionToRegister(node *expression.Expression, register cp
return types.Int, err
}
if node.Token.Kind == token.Period {
left := node.Children[0]
name := left.Token.Text(f.File.Bytes)
variable := f.VariableByName(name)
right := node.Children[1]
name = right.Token.Text(f.File.Bytes)
field := variable.Type.(*types.Pointer).To.(*types.Struct).FieldByName(name)
f.MemoryRegister(asm.LOAD, asm.Memory{Base: variable.Register, Offset: field.Offset, Length: field.Type.TotalSize()}, register)
return field.Type, nil
}
if len(node.Children) == 1 {
if !node.Token.IsUnaryOperator() {
return nil, errors.New(errors.MissingOperand, f.File, node.Token.End())