From 6299a2e95697c68c8b50f95e360e3ae367f6deb6 Mon Sep 17 00:00:00 2001 From: Matthias Benkard Date: Sun, 28 Sep 2008 00:02:43 +0200 Subject: MLKCompiledClosure, MLKForeignProcedure: Fix return value buffer type for libffi. --- MLKCompiledClosure.m | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'MLKCompiledClosure.m') diff --git a/MLKCompiledClosure.m b/MLKCompiledClosure.m index 73f308b..32caf74 100644 --- a/MLKCompiledClosure.m +++ b/MLKCompiledClosure.m @@ -63,7 +63,7 @@ ffi_status status; void *argv[argc]; id argpointers[argc - 1]; - id return_value; + ffi_arg return_value; int i; arg_types[0] = &ffi_type_pointer; @@ -95,7 +95,7 @@ ffi_call (&cif, FFI_FN (_code), &return_value, (void**)argv); // FIXME: multiple values - return [NSArray arrayWithObject:nullify(return_value)]; + return [NSArray arrayWithObject:nullify((id)return_value)]; } -(NSString *) description -- cgit v1.2.3 From ef2536760d6e144f7d903f9f488d3350c2bd2221 Mon Sep 17 00:00:00 2001 From: Matthias Benkard Date: Sun, 28 Sep 2008 17:26:35 +0200 Subject: LLVM compiler: Add various disabled debugging statements. --- MLKCompiledClosure.m | 1 + 1 file changed, 1 insertion(+) (limited to 'MLKCompiledClosure.m') diff --git a/MLKCompiledClosure.m b/MLKCompiledClosure.m index 32caf74..9227008 100644 --- a/MLKCompiledClosure.m +++ b/MLKCompiledClosure.m @@ -93,6 +93,7 @@ // } ffi_call (&cif, FFI_FN (_code), &return_value, (void**)argv); +// return_value = ((id (*)(void *, ...))_code) (_data, argpointers[0], argpointers[1], MLKEndOfArgumentsMarker); // FIXME: multiple values return [NSArray arrayWithObject:nullify((id)return_value)]; -- cgit v1.2.3 From 90a3e20fcfe07c24533cce14e1d1dd8a5d611ed6 Mon Sep 17 00:00:00 2001 From: Matthias Benkard Date: Sun, 28 Sep 2008 21:28:56 +0200 Subject: Use GC-aware allocation instead of malloc(3) where appropriate. --- MLKCompiledClosure.m | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) (limited to 'MLKCompiledClosure.m') diff --git a/MLKCompiledClosure.m b/MLKCompiledClosure.m index 9227008..6f61b45 100644 --- a/MLKCompiledClosure.m +++ b/MLKCompiledClosure.m @@ -26,6 +26,10 @@ #import #import +#ifdef __OBJC_GC__ +#import +#endif + #import @@ -36,14 +40,23 @@ { int i; - _data = data; _dataLength = dataLength; _code = code; +#ifdef __OBJC_GC__ + _data = NSAllocateCollectable (dataLength * sizeof(id), NSScannedOption); + for (i = 0; i < _dataLength; i++) + { + _data[i] = data[i]; + } + free (data); +#else + _data = data; for (i = 0; i < _dataLength; i++) { LRETAIN (_data[i]); } +#endif return self; } -- cgit v1.2.3 From 45e00ec3f4dd6289cd14021ef1ee35568b4928c6 Mon Sep 17 00:00:00 2001 From: Matthias Benkard Date: Sun, 28 Sep 2008 21:35:04 +0200 Subject: LLVM compiler: Simplify allocation of closures. --- MLKCompiledClosure.m | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) (limited to 'MLKCompiledClosure.m') diff --git a/MLKCompiledClosure.m b/MLKCompiledClosure.m index 6f61b45..fd643e3 100644 --- a/MLKCompiledClosure.m +++ b/MLKCompiledClosure.m @@ -45,18 +45,14 @@ #ifdef __OBJC_GC__ _data = NSAllocateCollectable (dataLength * sizeof(id), NSScannedOption); - for (i = 0; i < _dataLength; i++) - { - _data[i] = data[i]; - } - free (data); #else - _data = data; + _data = malloc (dataLength * sizeof(id)); +#endif + for (i = 0; i < _dataLength; i++) { - LRETAIN (_data[i]); + _data[i] = LRETAIN (data[i]); } -#endif return self; } -- cgit v1.2.3