/* src/vm/linker.cpp - class linker functions
- Copyright (C) 1996-2005, 2006, 2007, 2008
+ Copyright (C) 1996, 2011
CACAOVM - Verein zur Foerderung der freien virtuellen Maschine CACAO
This file is part of CACAO.
#include "vm/jit/asmpart.h"
#include "vm/jit/stubs.hpp"
+#include <vector>
+#include <utility>
+
/* debugging macros ***********************************************************/
static s4 class_highestinterface(classinfo *c);
+typedef std::vector<std::pair<java_object_t**, utf*> > deferred_strings_vec_t;
+static deferred_strings_vec_t deferred_strings;
+
/* linker_init *****************************************************************
Initializes the linker subsystem and links classes required for the
if (!link_class(class_sun_reflect_MagicAccessorImpl))
vm_abort("linker_init: linking failed");
+
+ if (!link_class(class_sun_reflect_MethodAccessorImpl))
+ vm_abort("linker_init: linking failed");
+
+ if (!link_class(class_sun_reflect_ConstructorAccessorImpl))
+ vm_abort("linker_init: linking failed");
# endif
if (!link_class(arrayclass_java_lang_Object))
if (c == NULL) {
exceptions_throw_nullpointerexception();
- return NULL;
+ return 0;
}
LOCK_MONITOR_ENTER(c);
RT_TIMING_TIME_DIFF(time_start,time_end,RT_TIMING_LINK_TOTAL);
// Hook point just after a class was linked.
- Hook::class_linked(r);
+ if (!Hook::class_linked(r))
+ return 0;
return r;
}
return desc;
}
+/* linker_create_string_later **************************************************
+
+ A hack so we can initialize java.lang.String objects during initialization.
+
+*******************************************************************************/
+void linker_create_string_later(java_object_t **a, utf *u)
+{
+ deferred_strings.push_back(std::make_pair(a, u));
+}
+
+void linker_initialize_deferred_strings()
+{
+ deferred_strings_vec_t::const_iterator it = deferred_strings.begin();
+ for (; it != deferred_strings.end(); ++it)
+ *it->first = literalstring_new(it->second);
+ deferred_strings.clear();
+}
+
/* linker_compute_subclasses ***************************************************