From 88972b0d949a306321db262e0c5200e8eee10026 Mon Sep 17 00:00:00 2001 From: Paul Sokolovsky Date: Mon, 21 Apr 2014 23:17:12 +0300 Subject: [PATCH] modffi: Describe typecodes where they differ from used by struct module. Exact behavior of typecodes may be not yet enforced. --- unix/modffi.c | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/unix/modffi.c b/unix/modffi.c index 83bc2c5454..dd1001263e 100644 --- a/unix/modffi.c +++ b/unix/modffi.c @@ -12,6 +12,22 @@ #include "runtime.h" #include "binary.h" +/* + * modffi uses character codes to encode a value type, based on "struct" + * module type codes, with some extensions and overridings. + * + * Extra/overridden typecodes: + * v - void, can be used only as return type + * P - const void*, pointer to read-only memory + * p - void*, meaning pointer to a writable memory (note that this + * clashes with struct's "p" as "Pascal string"). + * s - as argument, the same as "p", as return value, causes string + * to be allocated and returned, instead of pointer value. + * + * Note: all constraint specified by typecode can be not enforced at this time, + * but may be later. + */ + typedef struct _mp_obj_opaque_t { mp_obj_base_t base; void *val; @@ -63,8 +79,8 @@ STATIC ffi_type *char2ffi_type(char c) case 'L': return &ffi_type_ulong; case 'f': return &ffi_type_float; case 'd': return &ffi_type_double; - case 'p': // Deprecated - conflicts with struct module - case 'P': + case 'P': // const void* + case 'p': // void* case 's': return &ffi_type_pointer; case 'v': return &ffi_type_void; default: return NULL;