test: dynamic function call tests
This commit is contained in:
@@ -0,0 +1,87 @@
|
||||
#include <fx/reflection/assembly.h>
|
||||
#include <fx/reflection/function.h>
|
||||
#include <fx/reflection/type.h>
|
||||
#include <fx/string.h>
|
||||
#include <stdio.h>
|
||||
|
||||
extern fx_assembly *fx_runtime_assembly_get(void);
|
||||
|
||||
static fx_string *create_string(const fx_type *ty)
|
||||
{
|
||||
const fx_function *string_create = fx_type_get_function(
|
||||
ty,
|
||||
"create_from_cstr");
|
||||
if (!string_create) {
|
||||
printf("cannot find create_from_cstr()\n");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
printf("found fx.string.create_from_cstr()\n");
|
||||
fx_value args[] = {FX_VALUE_CSTR("Hello, world!")};
|
||||
fx_value result = FX_VALUE_EMPTY;
|
||||
fx_status status = fx_function_invoke(
|
||||
string_create,
|
||||
args,
|
||||
sizeof args / sizeof args[0],
|
||||
&result);
|
||||
if (!FX_OK(status)) {
|
||||
printf("call to fx.string.create_from_cstr() failed (%s)\n",
|
||||
fx_status_description(status));
|
||||
return NULL;
|
||||
}
|
||||
|
||||
fx_string *str = result.v_pointer;
|
||||
return str;
|
||||
}
|
||||
|
||||
static const char *get_cstr(const fx_type *ty, fx_string *str)
|
||||
{
|
||||
const fx_function *get_cstr = fx_type_get_function(ty, "get_cstr");
|
||||
if (!get_cstr) {
|
||||
printf("cannot find get_cstr()\n");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
printf("found fx.string.get_cstr()\n");
|
||||
fx_value args[] = {FX_VALUE_POINTER(str)};
|
||||
fx_value result = FX_VALUE_EMPTY;
|
||||
fx_status status = fx_function_invoke(
|
||||
get_cstr,
|
||||
args,
|
||||
sizeof args / sizeof args[0],
|
||||
&result);
|
||||
if (!FX_OK(status)) {
|
||||
printf("call to fx.string.get_cstr() failed (%s)\n",
|
||||
fx_status_description(status));
|
||||
return NULL;
|
||||
}
|
||||
|
||||
const char *cstr = result.v_cstr;
|
||||
return cstr;
|
||||
}
|
||||
|
||||
int main(int argc, const char **argv)
|
||||
{
|
||||
fx_assembly *fx_runtime = fx_runtime_assembly_get();
|
||||
fx_assembly_dump(fx_runtime);
|
||||
|
||||
const fx_type *ty = fx_type_get_by_name("fx.string");
|
||||
if (!ty) {
|
||||
printf("cannot find type\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
printf("found type '%s'\n", fx_type_get_name(ty));
|
||||
fx_string *str = create_string(ty);
|
||||
if (!str) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
const char *cstr = get_cstr(ty, str);
|
||||
if (!cstr) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
printf("created string '%s'\n", cstr);
|
||||
return 0;
|
||||
}
|
||||
@@ -1,4 +1,5 @@
|
||||
#include <fx/reflection/function.h>
|
||||
#include <fx/string.h>
|
||||
#include <fx/value.h>
|
||||
#include <inttypes.h>
|
||||
#include <stdio.h>
|
||||
|
||||
@@ -0,0 +1,8 @@
|
||||
#include <fx/reflection/function.h>
|
||||
#include <fx/value.h>
|
||||
#include <stdio.h>
|
||||
|
||||
int main(int argc, const char **argv)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
Reference in New Issue
Block a user