#include <config.h>
#include <stdlib.h>
#include <stdio.h>
-#include <mono/cli/cli.h>
-#include <mono/cli/object.h>
+#include <mono/metadata/loader.h>
+#include <mono/metadata/object.h>
/**
* mono_object_allocate:
return o;
}
+/**
+ * mono_object_clone:
+ * @obj: the object to clone
+ *
+ * Returns: A newly created object who is a shallow copy of @obj
+ */
+MonoObject *
+mono_object_clone (MonoObject *obj)
+{
+ MonoObject *o;
+ int size;
+
+ size = obj->klass->instance_size;
+ o = mono_object_allocate (size);
+
+ memcpy (o, obj, size);
+
+ return o;
+}
+
/*
* mono_new_szarray:
* @image: image where the object is being referenced
MonoObject *o;
MonoArrayObject *ao;
MonoArrayClass *ac;
- guint32 esize;
c = mono_array_class_get (image, etype, 1);
g_assert (c != NULL);
ao->bounds [0].length = n;
ao->bounds [0].lower_bound = 0;
- ao->vector = g_malloc0 (n * ac->esize);
+
+ ao->vector = g_malloc0 (n * mono_array_element_size (ac));
+
+ return o;
+}
+
+MonoObject *
+mono_new_utf16_string (const char *text, gint32 len)
+{
+ MonoObject *s;
+ MonoArrayObject *ca;
+
+ s = mono_object_new (mono_defaults.corlib, mono_defaults.string_token);
+ g_assert (s != NULL);
+
+ ca = (MonoArrayObject *)mono_new_szarray (mono_defaults.corlib, mono_defaults.string_token, len);
+ g_assert (ca != NULL);
+
+ ((MonoStringObject *)s)->c_str = ca;
+ ((MonoStringObject *)s)->length = len;
+
+ memcpy (ca->vector, text, len * 2);
+
+ return s;
+}
+
+MonoObject *
+mono_new_string (const char *text)
+{
+ MonoObject *o;
+ guint16 *ut;
+ int i, l;
+
+ /* fixme: use some kind of unicode library here */
+
+ l = strlen (text);
+ ut = g_malloc (l*2);
+
+ for (i = 0; i < l; i++)
+ ut [i] = text[i];
+
+ o = mono_new_utf16_string ((char *)ut, l);
+
+ g_free (ut);
return o;
}
+
+MonoObject *
+mono_value_box (MonoClass *class, gpointer val)
+{
+ MonoObject *res;
+ int size;
+
+ g_assert (class->valuetype);
+
+ res = mono_object_allocate (class->instance_size);
+ res->klass = class;
+
+ size = res->klass->instance_size - sizeof (MonoObject);
+
+ memcpy ((char *)res + sizeof (MonoObject), val, size);
+
+ return res;
+}
+
+gboolean
+mono_object_isinst (MonoObject *obj, MonoClass *klass)
+{
+ MonoClass *oklass = obj->klass;
+
+ while (oklass) {
+ if (oklass == klass)
+ return TRUE;
+ oklass = oklass->parent;
+ }
+ return FALSE;
+}
+