'Allocate a SetInstance with its storage.
Return a (ok, instance) tuple where *ok* is a LLVM boolean and
*instance* is a SetInstance object (the object\'s contents are
only valid when *ok* is true).'

@classmethod
def allocate_ex(cls, context, builder, set_type, nitems=None):

    intp_t = context.get_value_type(types.intp)
    if (nitems is None):
        nentries = ir.Constant(intp_t, MINSIZE)
    else:
        if isinstance(nitems, int):
            nitems = ir.Constant(intp_t, nitems)
        nentries = cls.choose_alloc_size(context, builder, nitems)
    self = cls(context, builder, set_type, None)
    ok = self._allocate_payload(nentries)
    return (ok, self)
