* src/vm/hook.hpp: Added new file for hook points.
[cacao.git] / src / vm / linker.cpp
index 50639b736310468fe801800ded6d5af43b443748..42e82954adc96c6be5c9b4aa7192adeb4a25f1bd 100644 (file)
@@ -1,4 +1,4 @@
-/* src/vm/linker.c - class linker functions
+/* src/vm/linker.cpp - class linker functions
 
    Copyright (C) 1996-2005, 2006, 2007, 2008
    CACAOVM - Verein zur Foerderung der freien virtuellen Maschine CACAO
 
 #include "vm/types.h"
 
-#include "mm/memory.h"
+#include "mm/memory.hpp"
 
 #include "native/native.hpp"
 
 #include "threads/lock.hpp"
 #include "threads/mutex.hpp"
 
-#include "toolbox/logging.h"
+#include "toolbox/logging.hpp"
 
 #include "vm/access.hpp"
 #include "vm/array.hpp"
@@ -45,6 +45,7 @@
 #include "vm/classcache.hpp"
 #include "vm/exceptions.hpp"
 #include "vm/globals.hpp"
+#include "vm/hook.hpp"
 #include "vm/loader.hpp"
 #include "vm/options.h"
 #include "vm/primitive.hpp"
@@ -425,6 +426,9 @@ classinfo *link_class(classinfo *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);
+
        return r;
 }
 
@@ -1108,8 +1112,8 @@ static arraydescriptor *link_array(classinfo *c)
                        desc->elementvftbl = compvftbl->arraydesc->elementvftbl;
 
                        if (compvftbl->arraydesc->dimension >= 255) {
-                               log_text("Creating array of dimension >255");
-                               assert(0);
+                               exceptions_throw_illegalargumentexception();
+                               return NULL;
                        }
 
                        desc->dimension = compvftbl->arraydesc->dimension + 1;
@@ -1403,7 +1407,7 @@ static s4 class_highestinterface(classinfo *c)
  * Emacs will automagically detect them.
  * ---------------------------------------------------------------------
  * Local variables:
- * mode: c
+ * mode: c++
  * indent-tabs-mode: t
  * c-basic-offset: 4
  * tab-width: 4