Skip to content

Commit f8c739c

Browse files
committed
Add new register API for accessing to the function pointer when it is created.
1 parent adfacc7 commit f8c739c

File tree

8 files changed

+23
-12
lines changed

8 files changed

+23
-12
lines changed

source/loader/include/loader/loader.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ LOADER_API void loader_initialize(void);
6060

6161
LOADER_API int loader_is_initialized(const loader_naming_tag tag);
6262

63-
LOADER_API int loader_register(const char * name, loader_register_invoke invoke, type_id return_type, size_t arg_size, type_id args_type_id[]);
63+
LOADER_API int loader_register(const char * name, loader_register_invoke invoke, function * func, type_id return_type, size_t arg_size, type_id args_type_id[]);
6464

6565
LOADER_API int loader_load_path(const loader_naming_path path);
6666

source/loader/source/loader.c

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -206,7 +206,7 @@ function_interface loader_register_interface_proxy(void)
206206
return &interface;
207207
}
208208

209-
int loader_register(const char * name, loader_register_invoke invoke, type_id return_type, size_t arg_size, type_id args_type_id[])
209+
int loader_register(const char * name, loader_register_invoke invoke, function * func, type_id return_type, size_t arg_size, type_id args_type_id[])
210210
{
211211
static const char register_holder_str[] = "__metacall_register__";
212212

@@ -247,7 +247,15 @@ int loader_register(const char * name, loader_register_invoke invoke, type_id re
247247

248248
signature_set_return(s, type_create(return_type, register_holder_str, NULL, NULL));
249249

250-
scope_define(sp, name, f);
250+
if (name != NULL)
251+
{
252+
scope_define(sp, name, f);
253+
}
254+
255+
if (func != NULL)
256+
{
257+
*func = f;
258+
}
251259

252260
return 0;
253261
}

source/metacall/include/metacall/metacall.h

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -482,6 +482,9 @@ METACALL_API void * metacallfms(void * func, const char * buffer, size_t size, v
482482
* @param[in] invoke
483483
* Pointer to function invoke interface (argc, argv, data)
484484
*
485+
* @param[out] func
486+
* Will set the pointer to the function if the parameter is not null
487+
*
485488
* @param[in] return_type
486489
* Type of return value
487490
*
@@ -494,7 +497,7 @@ METACALL_API void * metacallfms(void * func, const char * buffer, size_t size, v
494497
* @return
495498
* Pointer to value containing the result of the call
496499
*/
497-
METACALL_API int metacall_register(const char * name, void * (*invoke)(size_t, void * [], void *), enum metacall_value_id return_type, size_t size, ...);
500+
METACALL_API int metacall_register(const char * name, void * (*invoke)(size_t, void * [], void *), void ** func, enum metacall_value_id return_type, size_t size, ...);
498501

499502
/**
500503
* @brief

source/metacall/source/metacall.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -965,7 +965,7 @@ void * metacallfms(void * func, const char * buffer, size_t size, void * allocat
965965
return NULL;
966966
}
967967

968-
int metacall_register(const char * name, void * (*invoke)(size_t, void * [], void *), enum metacall_value_id return_type, size_t size, ...)
968+
int metacall_register(const char * name, void * (*invoke)(size_t, void * [], void *), void ** func, enum metacall_value_id return_type, size_t size, ...)
969969
{
970970
type_id types[METACALL_ARGS_SIZE];
971971

@@ -982,7 +982,7 @@ int metacall_register(const char * name, void * (*invoke)(size_t, void * [], voi
982982

983983
va_end(va);
984984

985-
return loader_register(name, (loader_register_invoke)invoke, (type_id)return_type, size, (type_id *)types);
985+
return loader_register(name, (loader_register_invoke)invoke, (function *)func, (type_id)return_type, size, (type_id *)types);
986986
}
987987

988988
void * metacall_await(const char * name, void * args[], void * (*resolve_callback)(void *, void *), void * (*reject_callback)(void *, void *), void * data)

source/tests/metacall_function_test/source/metacall_function_test.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -63,8 +63,8 @@ TEST_F(metacall_function_test, DefaultConstructor)
6363
ASSERT_EQ((int) 0, (int) metacall_initialize());
6464

6565
/* Native register */
66-
ASSERT_EQ((int) 0, (int) metacall_register("c_callback", c_callback, METACALL_LONG, 0));
67-
ASSERT_EQ((int) 0, (int) metacall_register("c_callback_with_args", c_callback_with_args, METACALL_LONG, 2, METACALL_LONG, METACALL_LONG));
66+
ASSERT_EQ((int) 0, (int) metacall_register("c_callback", c_callback, NULL, METACALL_LONG, 0));
67+
ASSERT_EQ((int) 0, (int) metacall_register("c_callback_with_args", c_callback_with_args, NULL, METACALL_LONG, 2, METACALL_LONG, METACALL_LONG));
6868

6969
/* Create function types */
7070
void * c_callback_value = metacall_value_create_function(metacall_function("c_callback"));

source/tests/metacall_python_pointer_test/source/metacall_python_pointer_test.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -83,11 +83,11 @@ TEST_F(metacall_python_pointer_test, DefaultConstructor)
8383

8484
/* Native register */
8585
{
86-
metacall_register("native_set_value", native_set_value, METACALL_PTR, 2, METACALL_PTR, METACALL_LONG);
86+
metacall_register("native_set_value", native_set_value, NULL, METACALL_PTR, 2, METACALL_PTR, METACALL_LONG);
8787

8888
EXPECT_NE((void *) NULL, (void *) metacall_function("native_set_value"));
8989

90-
metacall_register("native_get_value", native_get_value, METACALL_ARRAY, 1, METACALL_PTR);
90+
metacall_register("native_get_value", native_get_value, NULL, METACALL_ARRAY, 1, METACALL_PTR);
9191

9292
EXPECT_NE((void *) NULL, (void *) metacall_function("native_get_value"));
9393
}

source/tests/metacall_test/source/metacall_test.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,7 @@ TEST_F(metacall_test, DefaultConstructor)
104104

105105
int result = 0;
106106

107-
ASSERT_EQ((int) 0, (int) metacall_register("c_print", c_function, METACALL_INT, 1, METACALL_STRING));
107+
ASSERT_EQ((int) 0, (int) metacall_register("c_print", c_function, NULL, METACALL_INT, 1, METACALL_STRING));
108108

109109
ret = metacall("c_print", "Hello native function!");
110110

source/tests/py_loader_port_test/source/py_loader_port_test.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ TEST_F(py_loader_port_test, DefaultConstructor)
5050

5151
/* Native register */
5252
{
53-
metacall_register("callback_host", callback_host, METACALL_INT, 1, METACALL_STRING);
53+
metacall_register("callback_host", callback_host, NULL, METACALL_INT, 1, METACALL_STRING);
5454

5555
EXPECT_NE((void *) NULL, (void *) metacall_function("callback_host"));
5656
}

0 commit comments

Comments
 (0)