* Merged executionstate branch.
[cacao.git] / contrib / vmlog / vmlog_cacao.c
index 04b9e8f251da5055ea31809985c62f329609843c..618153716c27f60875ea08ada493cd67504f14e2 100644 (file)
 /*** global variables ************************************************/
 
 static vmlog_log *vmlog_global_log = NULL;
-static java_objectheader vmlog_global_lock;
+static java_object_t *vmlog_global_lock = NULL;
+static vmlog_options *vmlog_cacao_options = NULL;
 
 /*** locking *********************************************************/
 
-#define VMLOG_LOCK(vml)    lock_monitor_enter(&vmlog_global_lock)
-#define VMLOG_UNLOCK(vml)  lock_monitor_exit(&vmlog_global_lock)
+#define VMLOG_LOCK(vml)    lock_monitor_enter(vmlog_global_lock)
+#define VMLOG_UNLOCK(vml)  lock_monitor_exit(vmlog_global_lock)
 
 /*** include the vmlog code ******************************************/
 
@@ -39,33 +40,31 @@ static java_objectheader vmlog_global_lock;
 
 /*** internal functions **********************************************/
 
-void vmlog_cacao_init(JavaVMInitArgs *vmargs)
+void vmlog_cacao_init()
 {
-       vmlog_options *opts;
-
-       opts = vmlog_opt_parse_vmargs(vmargs);
-       
-       if (!opts->prefix)
+       if (!vmlog_cacao_options->prefix)
                return;
 
-       vmlog_global_log = vmlog_log_new(opts->prefix,1);
+       vmlog_global_log = vmlog_log_new(vmlog_cacao_options->prefix,1);
 
-       if (opts->ignoreprefix) {
+       if (vmlog_cacao_options->ignoreprefix) {
                vmlog_log_load_ignorelist(vmlog_global_log,
-                               opts->ignoreprefix);
+                               vmlog_cacao_options->ignoreprefix);
        }
 
-       if (opts->stringprefix) {
+       if (vmlog_cacao_options->stringprefix) {
                vmlog_load_stringhash(vmlog_global_log,
-                               opts->stringprefix);
+                               vmlog_cacao_options->stringprefix);
        }
 
-       vmlog_opt_free(opts);
+       vmlog_opt_free(vmlog_cacao_options);
+       vmlog_cacao_options = NULL;
 }
 
 void vmlog_cacao_init_lock(void)
 {
-       lock_init_object_lock(&vmlog_global_lock);
+       vmlog_global_lock = NEW(java_object_t);
+       lock_init_object_lock(vmlog_global_lock);
 }
 
 static void vmlog_cacao_do_log(vmlog_log_function fun,
@@ -73,13 +72,24 @@ static void vmlog_cacao_do_log(vmlog_log_function fun,
 {
        char *name;
        int namelen;
+       char *cname;
+       int cnamelen;
 
        assert(m);
 
        if (!vmlog_global_log)
                return;
 
-       name = vmlog_concat4len(m->class->name->text,m->class->name->blength,
+       if (m->class) {
+               cname = m->class->name->text;
+               cnamelen = m->class->name->blength;
+       }
+       else {
+               cname = "<NULL>";
+               cnamelen = 6;
+       }
+
+       name = vmlog_concat4len(cname,cnamelen,
                                ".",1,
                                m->name->text,m->name->blength,
                                m->descriptor->text,m->descriptor->blength,
@@ -117,7 +127,7 @@ void vmlog_cacao_unwnd_method(methodinfo *m)
        vmlog_cacao_do_log(vmlog_log_unwnd,m);
 }
 
-void vmlog_cacao_throw(java_objectheader *xptr)
+void vmlog_cacao_throw(java_object_t *xptr)
 {
        classinfo *c;
        
@@ -135,7 +145,7 @@ void vmlog_cacao_throw(java_objectheader *xptr)
        }
 }
 
-void vmlog_cacao_catch(java_objectheader *xptr)
+void vmlog_cacao_catch(java_object_t *xptr)
 {
        classinfo *c;
        
@@ -162,6 +172,39 @@ void vmlog_cacao_signl(const char *name)
                        name, strlen(name));
 }
 
+void vmlog_cacao_signl_type(int type)
+{
+       char message[20];
+
+       if (!vmlog_global_log)
+               return;
+
+       sprintf(message, "EXC %d", type);
+
+       vmlog_log_signl(vmlog_global_log,(void*) THREADOBJECT,
+                       message, strlen(message));
+}
+
+void vmlog_cacao_init_options(void)
+{
+       vmlog_cacao_options = vmlog_opt_new();
+}
+
+void vmlog_cacao_set_prefix(const char *arg)
+{
+       vmlog_opt_set_prefix(vmlog_cacao_options, arg);
+}
+
+void vmlog_cacao_set_stringprefix(const char *arg)
+{
+       vmlog_opt_set_stringprefix(vmlog_cacao_options, arg);
+}
+
+void vmlog_cacao_set_ignoreprefix(const char *arg)
+{
+       vmlog_opt_set_ignoreprefix(vmlog_cacao_options, arg);
+}
+
 /* vim: noet ts=8 sw=8
  */