diff --git a/lisp/compiler.carp b/lisp/compiler.carp index 04e66242..5fbe4125 100644 --- a/lisp/compiler.carp +++ b/lisp/compiler.carp @@ -170,6 +170,8 @@ "-framework OpenGL -framework Cocoa -framework IOKit")) (def out-dir (str carp-dir "out/")) +(def exe-out-dir "./") +(def exe-name "exe") (def echo-signature-after-bake false) (defn remove-non-user-defined-deps (func-deps) @@ -228,7 +230,7 @@ (defn run-clang [c-func-name c-file-name total-dependencies exe] (let [clang-command (str "clang -DAPI= " (if exe - (str "-o " out-dir "exe ") + (str "-o " exe-out-dir exe-name " ") (str "-shared -g -o " out-dir c-func-name ".so ")) c-file-name " " (include-paths) " " diff --git a/src/eval.c b/src/eval.c index d3e9300f..e3565978 100644 --- a/src/eval.c +++ b/src/eval.c @@ -396,7 +396,10 @@ void call_lambda_from_ffi(ffi_cif *cif, void *ret, void* args[], LambdaAndItsTyp } else { - set_error("Calling lambda from FFI can't handle return type ", lambda_return_type); + //set_error("Calling lambda from FFI can't handle return type ", lambda_return_type); + assert_or_set_error(result->tag == 'Q', "Invalid type of return value ", result); + void **p = ret; + *p = result->void_ptr; } /* for(int i = 0; i < arg_count; i++) { */