blob: 56a88b91fbdddbad310d733a0a3874a75519d810 [file] [log] [blame]
/* go-new-interface-object.c -- make a new interface from a non-pointer.
Copyright 2009 The Go Authors. All rights reserved.
Use of this source code is governed by a BSD-style
license that can be found in the LICENSE file. */
#include <assert.h>
#include "go-alloc.h"
#include "interface.h"
/* Allocate a new interface for a type which is not represented as a
pointer. OBJECT points to the value. */
struct __go_interface *
__go_new_interface_object (const struct __go_type_descriptor *type_descriptor,
void *methods, size_t object_size,
const void *object)
{
struct __go_interface *ret;
assert (!__go_is_pointer_type (type_descriptor));
assert (object_size == type_descriptor->__size);
ret = __go_alloc (sizeof (struct __go_interface));
ret->__type_descriptor = type_descriptor;
ret->__methods = methods;
ret->__object = __go_alloc (object_size);
/* FIXME: Set reference count. */
__builtin_memcpy (ret->__object, object, object_size);
return ret;
}