{%- if param.array_has_stack_copy_fast_path() %}
{{ param.array_elements_value_type() }} _{{ param.name }}_stack[{{ param.array_stack_copy_max_len() }}];
uintptr_t _{{ param.name }}_len = (uintptr_t)(*env)->GetArrayLength(env, {{ param.name }});
{{ param.array_c_type() }}* _{{ param.name }}_ptr = NULL;
bool _{{ param.name }}_needs_release = false;
if (_{{ param.name }}_len <= {{ param.array_stack_copy_max_len() }}) {
(*env)->{{ param.array_get_region_fn() }}(env, {{ param.name }}, 0, (jsize)_{{ param.name }}_len, _{{ param.name }}_stack);
if (boltffi_exception_pending(env)) {
_{{ param.name }}_len = 0;
_boltffi_input_error = true;
} else {
_{{ param.name }}_ptr = ({{ param.array_c_type() }}*)_{{ param.name }}_stack;
}
} else {
_{{ param.name }}_ptr = ({{ param.array_c_type() }}*)(*env)->{{ param.array_get_elements_fn() }}(env, {{ param.name }}, NULL);
if (_{{ param.name }}_ptr == NULL) {
_{{ param.name }}_len = 0;
_boltffi_input_error = true;
} else {
_{{ param.name }}_needs_release = true;
}
}
{%- else %}
uintptr_t _{{ param.name }}_len = (uintptr_t)(*env)->GetArrayLength(env, {{ param.name }});
{{ param.array_c_type() }}* _{{ param.name }}_ptr = ({{ param.array_c_type() }}*)(*env)->{{ param.array_get_elements_fn() }}(env, {{ param.name }}, NULL);
if (_{{ param.name }}_ptr == NULL) { _{{ param.name }}_len = 0; _boltffi_input_error = true; }
{%- endif %}