private VariableOperand generateStructField(BinaryOperationNode node)
            throws IRException {

        try {
            VariableOperand struct = (VariableOperand) generate(node.leftChild());
    //        VariableOperand field = (VariableOperand) generate(node.rightChild());
            String fieldName = ((VariableLeaf) node.rightChild()).name;

            long offset = ((StructType) struct.type()).getFieldOffset(fieldName);

            TmpVariableOperand address =
                new TmpVariableOperand(new PointerType(node.realType()), varTable);

            code.addStatement(
                new BinaryOperationStatement(
                    struct,
                    new ConstantOperand<Long>(
                        new PrimitiveType(PrimitiveType.Type.LONG),
                        offset
                    ),
                    address,
                    BinaryOperationStatement.Operation.PLUS
                )
            );

            return address;
        } catch(IRException ex) {
            throw ex;
        } catch(Exception ex) {
            throw (NonGenerationException)new NonGenerationException(ex)
                    .Log("ru.bmstu.iu9.compiler.ir");
        }
    }