Commit 88972b0d authored by Paul Sokolovsky's avatar Paul Sokolovsky
Browse files

modffi: Describe typecodes where they differ from used by struct module.

Exact behavior of typecodes may be not yet enforced.
parent ca045d97
...@@ -12,6 +12,22 @@ ...@@ -12,6 +12,22 @@
#include "runtime.h" #include "runtime.h"
#include "binary.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 { typedef struct _mp_obj_opaque_t {
mp_obj_base_t base; mp_obj_base_t base;
void *val; void *val;
...@@ -63,8 +79,8 @@ STATIC ffi_type *char2ffi_type(char c) ...@@ -63,8 +79,8 @@ STATIC ffi_type *char2ffi_type(char c)
case 'L': return &ffi_type_ulong; case 'L': return &ffi_type_ulong;
case 'f': return &ffi_type_float; case 'f': return &ffi_type_float;
case 'd': return &ffi_type_double; case 'd': return &ffi_type_double;
case 'p': // Deprecated - conflicts with struct module case 'P': // const void*
case 'P': case 'p': // void*
case 's': return &ffi_type_pointer; case 's': return &ffi_type_pointer;
case 'v': return &ffi_type_void; case 'v': return &ffi_type_void;
default: return NULL; default: return NULL;
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment