From 4e7353f45954a8a5d9aaa3dd40eed3f9f62c2062 Mon Sep 17 00:00:00 2001 From: Thomas Grill Date: Fri, 10 Mar 2006 01:01:20 +0000 Subject: small cleanups svn path=/trunk/externals/clr/; revision=4676 --- clr.cpp | 18 ++++++++++++------ makefile | 26 +++++++++++--------------- test/test.cs | 1 + 3 files changed, 24 insertions(+), 21 deletions(-) diff --git a/clr.cpp b/clr.cpp index 201300b..5f0a96b 100755 --- a/clr.cpp +++ b/clr.cpp @@ -29,20 +29,24 @@ extern "C" { #include #include + +// main class library #define CORELIB "PureData" #define DLLEXT "dll" +// symbol for inter-object messages +#define SYM_OBJECT "clr-object" -// cached mono data +static t_symbol *sym_object; + +// cached mono data static MonoDomain *monodomain; static MonoClass *clr_symbol,*clr_pointer,*clr_atom,*clr_atomlist,*clr_external; static MonoMethodDesc *clr_desc_tostring,*clr_desc_ctor; static MonoMethod *clr_meth_invoke; static MonoProperty *clr_prop_method; -static t_symbol *sym_object; - struct AtomList { @@ -55,9 +59,9 @@ struct AtomList // transforms a pointer (like MonoObject *) into a 3 element-list struct ObjectAtom { - enum { size = 3,bitshift = 22 }; - // 64-bit safe... + enum { bitshift = 22,size = sizeof(void*)*8/bitshift+1 }; + t_atom msg[size]; ObjectAtom() {} @@ -119,7 +123,9 @@ struct Delegate inline void init(MonoObject *method,Kind k) { methodinfo = mono_property_get_value(clr_prop_method,method,NULL,NULL); + assert(methodinfo); virtmethod = mono_object_get_virtual_method(methodinfo,clr_meth_invoke); + assert(virtmethod); kind = k; } @@ -1021,7 +1027,7 @@ void clr_setup(void) class_addanything(proxy_class,clr_method_proxy); // symbol for Mono object handling - sym_object = gensym("clr-object"); + sym_object = gensym(SYM_OBJECT); // install loader hook sys_register_loader(classloader); diff --git a/makefile b/makefile index 7d99f07..12f458e 100755 --- a/makefile +++ b/makefile @@ -2,12 +2,10 @@ current: cygwin clean: ; rm -f *.dll *.o - cygwin: clr.dll .SUFFIXES: .dll - # where are the PD header files? # leave it blank if it is a system directory (like /usr/local/include), # since gcc 3.2 complains about it @@ -15,18 +13,16 @@ cygwin: clr.dll PDPATH=/cygdrive/c/data/pd/pd-cvs MONOPATH=/cygdrive/c/programme/prog/mono +CFLAGS = -DPD -mno-cygwin +CFLAGS += -O2 +#CFLAGS += -g -CFLAGS = -DPD -O2 -mno-cygwin - -PDINC= -I$(PDPATH)/src +PDINC= -I$(PDPATH)/src PDLIB= $(PDPATH)/bin/pd.dll - -MONOINC = -I$(MONOPATH)/include -I$(MONOPATH)/include/glib-2.0 -I$(MONOPATH)/lib/glib-2.0/include -MONOLIB = -L$(MONOPATH)/lib -lmono.dll -lgmodule-2.0 -lgthread-2.0 -lglib-2.0 -lintl -liconv - -.cpp.dll: - g++ $(CFLAGS) $(PDINC) $(MONOINC) -o $*.o -c $*.cpp - g++ -export_dynamic -shared -mno-cygwin $(PDLIB) $(MONOLIB) -o $*.dll $*.o -lm -# ld -export_dynamic $(MONOLIB) -o $*.dll $*.o -lm pd.dll -# strip --strip-unneeded $*.pd_linux -# rm $*.o + +MONOINC = -I$(MONOPATH)/include -I$(MONOPATH)/include/glib-2.0 -I$(MONOPATH)/lib/glib-2.0/include +MONOLIB = -L$(MONOPATH)/lib -lgmodule-2.0 -lgthread-2.0 -lglib-2.0 -lintl -liconv -lmono + +.cpp.dll: + g++ $(CFLAGS) $(PDINC) $(MONOINC) -o $*.o -c $*.cpp + g++ -export_dynamic -shared -mno-cygwin $(PDLIB) -o $*.dll $*.o $(MONOLIB) -lm diff --git a/test/test.cs b/test/test.cs index 0171275..beac897 100644 --- a/test/test.cs +++ b/test/test.cs @@ -95,6 +95,7 @@ public class test: protected virtual void MyObject(int ix,object obj) { Post("OBJECT "+obj.ToString()); + OutletEx(0,obj); } protected virtual void MyAnything(int ix,PureData.Symbol s,PureData.AtomList l) -- cgit v1.2.1