aboutsummaryrefslogtreecommitdiff
path: root/src/runner/runner.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/runner/runner.c')
-rw-r--r--src/runner/runner.c12
1 files changed, 6 insertions, 6 deletions
diff --git a/src/runner/runner.c b/src/runner/runner.c
index c5355cc..9cb67f8 100644
--- a/src/runner/runner.c
+++ b/src/runner/runner.c
@@ -991,15 +991,13 @@ AstTree *runAstTreeCFunction(AstTree *tree, AstTree **arguments,
UNREACHABLE;
}
- ffi_cif cif;
- ffi_type *args[arguments_size];
- void *values[arguments_size];
- ffi_arg rc;
-
if (funcType->arguments_size != arguments_size) {
UNREACHABLE;
}
+ ffi_type *args[arguments_size];
+ void *values[arguments_size];
+
for (size_t i = 0; i < arguments_size; ++i) {
AstTreeTypeFunctionArgument arg = funcType->arguments[i];
args[i] = toFFIType(arg.type);
@@ -1014,13 +1012,15 @@ AstTree *runAstTreeCFunction(AstTree *tree, AstTree **arguments,
values[i] = arguments[i]->metadata;
}
+ ffi_cif cif;
if (ffi_prep_cif(&cif, FFI_DEFAULT_ABI, arguments_size,
toFFIType(funcType->returnType), args) == FFI_OK) {
+ ffi_arg rc;
ffi_call(&cif, fun, &rc, values);
if (typeIsEqual(funcType->returnType, &AST_TREE_VOID_TYPE)) {
return &AST_TREE_VOID_TYPE;
} else {
- size_t size = getSizeOfType(funcType->returnType);
+ const size_t size = getSizeOfType(funcType->returnType);
AstTreeRawValue *value = a404m_malloc(size);
memcpy(value, &rc, size);
return newAstTree(AST_TREE_TOKEN_RAW_VALUE, value,