32 #include "node_version.h"
40 #define SHIM_ABI_VERSION 1
100 #ifndef NODE_MODULE_VERSION
101 # if NODE_VERSION_AT_LEAST(0, 11, 0)
102 # define NODE_MODULE_VERSION 0x000C
103 # elif NODE_VERSION_AT_LEAST(0, 10, 0)
104 # define NODE_MODULE_VERSION 0x000B
105 # elif NODE_VERSION_AT_LEAST(0, 8, 0)
106 # define NODE_MODULE_VERSION 1
108 # error "The shim requires at least node v0.8.0"
117 #define SHIM_MODULE(name, func) \
118 register_func shim_initialize = &func; \
119 struct shim_module_struct name ## _module = { \
120 NODE_MODULE_VERSION, \
123 (node_register_func)&shim_module_initialize, \
145 #define SHIM_FS_FULL(name, cfunc, nargs, data, flags) \
146 { name, &cfunc, nargs, data, flags, 0 }
148 #define SHIM_FS_DEF(cfunc, nargs, data) \
149 SHIM_FS_FULL(#cfunc, cfunc, nargs, data, 0)
151 #define SHIM_FS(cfunc) \
152 SHIM_FS_DEF(cfunc, 0, NULL)
154 #define SHIM_FS_END \
155 { NULL, NULL, 0, NULL, 0, 0 }
191 shim_val_t*
shim_obj_new(shim_ctx_t* context, shim_val_t* klass,
195 size_t argc, shim_val_t** argv);
207 shim_bool_t
shim_obj_has_sym(shim_ctx_t* ctx, shim_val_t* obj, shim_val_t* sym);
211 const char* name, shim_val_t* val);
214 uint32_t
id, shim_val_t* val);
217 shim_val_t* sym, shim_val_t* val);
226 const char* name, shim_val_t* rval);
229 uint32_t
id, shim_val_t* rval);
232 shim_val_t* sym, shim_val_t* rval);
270 int32_t flags,
const char* name,
void* data);
275 shim_val_t* name,
size_t argc, shim_val_t** argv, shim_val_t* rval);
278 const char* name,
size_t argc, shim_val_t** argv, shim_val_t* rval);
281 shim_val_t* func,
size_t argc, shim_val_t** argv, shim_val_t* rval);
286 shim_val_t* sym,
size_t argc, shim_val_t** argv, shim_val_t* rval);
289 shim_val_t* fval,
size_t argc, shim_val_t** argv, shim_val_t* rval);
292 const char* name,
size_t argc, shim_val_t** argv, shim_val_t* rval);
344 size_t len, int32_t options);
359 shim_bool_t
shim_array_get(shim_ctx_t* ctx, shim_val_t* arr, int32_t idx,
362 shim_bool_t
shim_array_set(shim_ctx_t* ctx, shim_val_t* arr, int32_t idx,
410 shim_val_t*
shim_error_new(shim_ctx_t* ctx,
const char* msg, ...);
498 # define offset_of(type, member) \
499 ((intptr_t) ((char *) &(((type *) 8)->member) - 8))
503 # define container_of(ptr, type, member) \
504 ((type *) ((char *) (ptr) - offset_of(type, member)))