From: Yaroslav K. <kav...@je...> - 2010-08-17 13:38:08
|
Joe...@t-... wrote: > > This is example of c-code (mix from .h and .c files): > > It is generally not possible *without API documentation* to translate > C's poor type declarations to CLISP's rich FFI. C does not tell you > anything about :in, :out or :in-out. Only the docs do. > Ok, but all documentation it is source: http://llvm.org/svn/llvm-project/llvm/trunk/include/llvm-c/Core.h http://llvm.org/svn/llvm-project/llvm/trunk/include/llvm-c/Analysis.h > Please always provide a link to the documentation when asking such questions. > ok, excuse me And many thanks for your answer. > Looking at your C code, >> char *error = NULL; // Used to retrieve messages from functions >> error = NULL; >> if(LLVMCreateJITCompiler(&engine, provider, 2,&error) != 0) { >> > LLVMDisposeMessage(error); > I'd say you're better off using an explicit c-pointer for [out]error using > with-foreig-object or with-c-var > - to keep the original pointer (for DisposeMessage) > - to deref the string only when an error occurred (like you do in C). > (with-foreign-object (ptr 'c-pointer NULL) > (when (create ... ptr) > (princ (mem-read ptr 'c-string)) > (disposemessage ptr))) > ok, but "NULL" is "NIL"? And what is "mem-read"? and last: 'LLVMCreateJITCompiler' require 'char **OutError' but 'LLVMDisposeMessage' require 'char *Message' The code will be by the same? > (with-foreign-object (ptr 'c-pointer) > (when (LLVMCreateJITCompiler ... ptr) > ... > (LLVMDisposeMessage ptr))) and how declare argument OutError in LLVMCreateJITCompiler - as (OutError ffi:c-pointer) or as (OutError (ffi:c-ptr ffi:c-pointer)) ? Many thanks for your answer again. -- WBR, Yaroslav Kavenchuk |