    # File lib/ffi/struct_layout_builder.rb, line 77
        def add(name, type, offset = nil)

          if offset.nil? || offset == -1
            offset = @union ? 0 : align(@size, @packed ? [ @packed, type.alignment ].min : [ @min_alignment, type.alignment ].max)
          end

          #
          # If a FFI::Type type was passed in as the field arg, try and convert to a StructLayout::Field instance
          #
          field = type.is_a?(StructLayout::Field) ? type : field_for_type(name, offset, type)
          @fields << field
          @alignment = [ @alignment, field.alignment ].max unless @packed
          @size = [ @size, field.size + (@union ? 0 : field.offset) ].max

          return self
        end