1#include <js_native_api.h> 2 3#include "../common.h" 4 5// Unifies the way the macros declare values. 6typedef double double_t; 7 8#define BINDING_FOR_CREATE(initial_capital, lowercase) \ 9 static napi_value Create##initial_capital(napi_env env, \ 10 napi_callback_info info) { \ 11 napi_value return_value, call_result; \ 12 lowercase##_t value = 42; \ 13 NODE_API_CALL(env, napi_create_object(env, &return_value)); \ 14 add_returned_status(env, \ 15 "envIsNull", \ 16 return_value, \ 17 "Invalid argument", \ 18 napi_invalid_arg, \ 19 napi_create_##lowercase(NULL, value, &call_result)); \ 20 napi_create_##lowercase(env, value, NULL); \ 21 add_last_status(env, "resultIsNull", return_value); \ 22 return return_value; \ 23 } 24 25#define BINDING_FOR_GET_VALUE(initial_capital, lowercase) \ 26 static napi_value GetValue##initial_capital(napi_env env, \ 27 napi_callback_info info) { \ 28 napi_value return_value, call_result; \ 29 lowercase##_t value = 42; \ 30 NODE_API_CALL(env, napi_create_object(env, &return_value)); \ 31 NODE_API_CALL(env, napi_create_##lowercase(env, value, &call_result)); \ 32 add_returned_status( \ 33 env, \ 34 "envIsNull", \ 35 return_value, \ 36 "Invalid argument", \ 37 napi_invalid_arg, \ 38 napi_get_value_##lowercase(NULL, call_result, &value)); \ 39 napi_get_value_##lowercase(env, NULL, &value); \ 40 add_last_status(env, "valueIsNull", return_value); \ 41 napi_get_value_##lowercase(env, call_result, NULL); \ 42 add_last_status(env, "resultIsNull", return_value); \ 43 return return_value; \ 44 } 45 46BINDING_FOR_CREATE(Double, double) 47BINDING_FOR_CREATE(Int32, int32) 48BINDING_FOR_CREATE(Uint32, uint32) 49BINDING_FOR_CREATE(Int64, int64) 50BINDING_FOR_GET_VALUE(Double, double) 51BINDING_FOR_GET_VALUE(Int32, int32) 52BINDING_FOR_GET_VALUE(Uint32, uint32) 53BINDING_FOR_GET_VALUE(Int64, int64) 54 55void init_test_null(napi_env env, napi_value exports) { 56 const napi_property_descriptor test_null_props[] = { 57 DECLARE_NODE_API_PROPERTY("createDouble", CreateDouble), 58 DECLARE_NODE_API_PROPERTY("createInt32", CreateInt32), 59 DECLARE_NODE_API_PROPERTY("createUint32", CreateUint32), 60 DECLARE_NODE_API_PROPERTY("createInt64", CreateInt64), 61 DECLARE_NODE_API_PROPERTY("getValueDouble", GetValueDouble), 62 DECLARE_NODE_API_PROPERTY("getValueInt32", GetValueInt32), 63 DECLARE_NODE_API_PROPERTY("getValueUint32", GetValueUint32), 64 DECLARE_NODE_API_PROPERTY("getValueInt64", GetValueInt64), 65 }; 66 napi_value test_null; 67 68 NODE_API_CALL_RETURN_VOID(env, napi_create_object(env, &test_null)); 69 NODE_API_CALL_RETURN_VOID( 70 env, 71 napi_define_properties(env, 72 test_null, 73 sizeof(test_null_props) / sizeof(*test_null_props), 74 test_null_props)); 75 NODE_API_CALL_RETURN_VOID( 76 env, napi_set_named_property(env, exports, "testNull", test_null)); 77} 78