def set_zval_ref(ptr, ptr2):
    zval = _cast_ptr_to_zval(ptr)
    zval2 = _cast_ptr_to_zval(ptr2)
    # FIXME: set refcount???
    zval_utils.Z_SET_TYPE(zval, IS_HPHP_REF)
    zval.zval = zval2
    return ptr
def array_init(arg):
    zv = zval_utils.make_empty_zval()
    from happy_variables import zval_ptr_dtor
    zv.happy_ht = happy_hash.zend_hash_init(None, 0, None, zval_ptr_dtor,
                                            False)
    zval_utils.Z_SET_TYPE(zv, IS_ARRAY)
    arg.assign(zv)
    return 0
def promote_to_ref(ptr):
    zval = _cast_ptr_to_zval(ptr)
    if zval_utils.Z_TYPE(zval) == IS_HPHP_REF:
        return _cast_to_zval_ptr(zval.zval)

    new_zval = zval_utils.zval_copy(zval)
    zval_utils.Z_SET_TYPE(zval, IS_HPHP_REF)
    zval.zval = new_zval
    return _cast_to_zval_ptr(new_zval)
def set_hash(ptr, ptr2):
    zval = zval_utils.Z_ZVAL(_cast_ptr_to_zval(ptr))
    ht = _cast_ptr_to_ht(ptr2)
    zval_utils.Z_SET_TYPE(zval, IS_ARRAY)
    zval.happy_ht = ht
    return ptr
def set_string(ptr, sd):
    zval = zval_utils.Z_ZVAL(_cast_ptr_to_zval(ptr))
    zval_utils.Z_SET_TYPE(zval, IS_STRING)
    zval.str = objects.MutableString.from_string_data(sd)
    return ptr
def set_double(ptr, dval):
    zval = zval_utils.Z_ZVAL(_cast_ptr_to_zval(ptr))
    zval_utils.Z_SET_TYPE(zval, IS_DOUBLE)
    zval.dval = dval
    return ptr
def set_int(ptr, lval):
    zval = zval_utils.Z_ZVAL(_cast_ptr_to_zval(ptr))
    zval_utils.Z_SET_TYPE(zval, IS_LONG)
    zval.lval = lval
    return ptr
def set_null(ptr):
    zval = zval_utils.Z_ZVAL(_cast_ptr_to_zval(ptr))
    zval_utils.Z_SET_TYPE(zval, IS_NULL)
    return ptr