LibJS: Pass var environment binding counts through FFI
Thread the var environment binding count through the Rust and C++ SFD metadata helpers wherever the function environment binding count already travels. This lets CreateVariableEnvironment use the cached var environment shape for functions with parameter expressions.
This commit is contained in:
parent
c9fa4ce695
commit
cd38cdf6cf
4 changed files with 18 additions and 0 deletions
|
|
@ -253,6 +253,7 @@ unsafe extern "C" {
|
|||
this_value_needs_environment_resolution: bool,
|
||||
function_environment_needed: bool,
|
||||
function_environment_bindings_count: usize,
|
||||
var_environment_bindings_count: usize,
|
||||
might_need_arguments_object: bool,
|
||||
contains_direct_call_to_eval: bool,
|
||||
);
|
||||
|
|
@ -264,6 +265,7 @@ unsafe extern "C" {
|
|||
this_value_needs_environment_resolution: bool,
|
||||
function_environment_needed: bool,
|
||||
function_environment_bindings_count: usize,
|
||||
var_environment_bindings_count: usize,
|
||||
might_need_arguments_object: bool,
|
||||
contains_direct_call_to_eval: bool,
|
||||
);
|
||||
|
|
@ -275,6 +277,7 @@ unsafe extern "C" {
|
|||
this_value_needs_environment_resolution: bool,
|
||||
function_environment_needed: bool,
|
||||
function_environment_bindings_count: usize,
|
||||
var_environment_bindings_count: usize,
|
||||
might_need_arguments_object: bool,
|
||||
contains_direct_call_to_eval: bool,
|
||||
);
|
||||
|
|
@ -474,6 +477,7 @@ unsafe fn materialize_shared_function_data(
|
|||
precompiled.metadata.this_value_needs_environment_resolution;
|
||||
let function_environment_needed = precompiled.metadata.function_environment_needed;
|
||||
let function_environment_bindings_count = precompiled.metadata.function_environment_bindings_count;
|
||||
let var_environment_bindings_count = precompiled.metadata.var_environment_bindings_count;
|
||||
let might_need_arguments = precompiled.metadata.might_need_arguments;
|
||||
let contains_eval = precompiled.metadata.contains_eval;
|
||||
let precompiled_ptr = Box::into_raw(precompiled) as *mut c_void;
|
||||
|
|
@ -484,6 +488,7 @@ unsafe fn materialize_shared_function_data(
|
|||
this_value_needs_environment_resolution,
|
||||
function_environment_needed,
|
||||
function_environment_bindings_count,
|
||||
var_environment_bindings_count,
|
||||
might_need_arguments,
|
||||
contains_eval,
|
||||
);
|
||||
|
|
|
|||
|
|
@ -1097,6 +1097,7 @@ unsafe fn materialize_function(
|
|||
function.metadata.this_value_needs_environment_resolution,
|
||||
function.metadata.function_environment_needed,
|
||||
function.metadata.function_environment_bindings_count,
|
||||
function.metadata.var_environment_bindings_count,
|
||||
function.metadata.might_need_arguments,
|
||||
function.metadata.contains_eval,
|
||||
);
|
||||
|
|
|
|||
|
|
@ -2854,6 +2854,7 @@ pub unsafe extern "C" fn rust_materialize_compiled_function(
|
|||
let this_value_needs_environment_resolution = precompiled.metadata.this_value_needs_environment_resolution;
|
||||
let function_environment_needed = precompiled.metadata.function_environment_needed;
|
||||
let function_environment_bindings_count = precompiled.metadata.function_environment_bindings_count;
|
||||
let var_environment_bindings_count = precompiled.metadata.var_environment_bindings_count;
|
||||
let might_need_arguments = precompiled.metadata.might_need_arguments;
|
||||
let contains_eval = precompiled.metadata.contains_eval;
|
||||
let precompiled_ptr = Box::into_raw(precompiled) as *mut c_void;
|
||||
|
|
@ -2864,6 +2865,7 @@ pub unsafe extern "C" fn rust_materialize_compiled_function(
|
|||
this_value_needs_environment_resolution,
|
||||
function_environment_needed,
|
||||
function_environment_bindings_count,
|
||||
var_environment_bindings_count,
|
||||
might_need_arguments,
|
||||
contains_eval,
|
||||
);
|
||||
|
|
@ -3215,6 +3217,7 @@ unsafe fn write_sfd_metadata(sfd_ptr: *mut c_void, metadata: &bytecode::generato
|
|||
metadata.this_value_needs_environment_resolution,
|
||||
metadata.function_environment_needed,
|
||||
metadata.function_environment_bindings_count,
|
||||
metadata.var_environment_bindings_count,
|
||||
metadata.might_need_arguments,
|
||||
metadata.contains_eval,
|
||||
);
|
||||
|
|
@ -3319,6 +3322,7 @@ unsafe extern "C" {
|
|||
this_value_needs_environment_resolution: bool,
|
||||
function_environment_needed: bool,
|
||||
function_environment_bindings_count: usize,
|
||||
var_environment_bindings_count: usize,
|
||||
might_need_arguments_object: bool,
|
||||
contains_direct_call_to_eval: bool,
|
||||
);
|
||||
|
|
|
|||
|
|
@ -1190,6 +1190,7 @@ extern "C" void rust_sfd_set_metadata(
|
|||
bool this_value_needs_environment_resolution,
|
||||
bool function_environment_needed,
|
||||
size_t function_environment_bindings_count,
|
||||
size_t var_environment_bindings_count,
|
||||
bool might_need_arguments_object,
|
||||
bool contains_direct_call_to_eval)
|
||||
{
|
||||
|
|
@ -1199,6 +1200,7 @@ extern "C" void rust_sfd_set_metadata(
|
|||
shared.m_function_environment_needed = function_environment_needed;
|
||||
shared.update_asm_call_metadata();
|
||||
shared.m_function_environment_bindings_count = function_environment_bindings_count;
|
||||
shared.m_var_environment_bindings_count = var_environment_bindings_count;
|
||||
shared.m_might_need_arguments_object = might_need_arguments_object;
|
||||
shared.m_contains_direct_call_to_eval = contains_direct_call_to_eval;
|
||||
}
|
||||
|
|
@ -1225,6 +1227,7 @@ extern "C" void rust_sfd_set_precompiled_executable(
|
|||
bool this_value_needs_environment_resolution,
|
||||
bool function_environment_needed,
|
||||
size_t function_environment_bindings_count,
|
||||
size_t var_environment_bindings_count,
|
||||
bool might_need_arguments_object,
|
||||
bool contains_direct_call_to_eval)
|
||||
{
|
||||
|
|
@ -1235,6 +1238,7 @@ extern "C" void rust_sfd_set_precompiled_executable(
|
|||
shared.m_this_value_needs_environment_resolution = this_value_needs_environment_resolution;
|
||||
shared.m_function_environment_needed = function_environment_needed;
|
||||
shared.m_function_environment_bindings_count = function_environment_bindings_count;
|
||||
shared.m_var_environment_bindings_count = var_environment_bindings_count;
|
||||
shared.m_might_need_arguments_object = might_need_arguments_object;
|
||||
shared.m_contains_direct_call_to_eval = contains_direct_call_to_eval;
|
||||
shared.set_executable(executable);
|
||||
|
|
@ -1251,6 +1255,7 @@ extern "C" void rust_sfd_set_cached_bytecode_executable(
|
|||
bool this_value_needs_environment_resolution,
|
||||
bool function_environment_needed,
|
||||
size_t function_environment_bindings_count,
|
||||
size_t var_environment_bindings_count,
|
||||
bool might_need_arguments_object,
|
||||
bool contains_direct_call_to_eval)
|
||||
{
|
||||
|
|
@ -1260,6 +1265,7 @@ extern "C" void rust_sfd_set_cached_bytecode_executable(
|
|||
shared.m_this_value_needs_environment_resolution = this_value_needs_environment_resolution;
|
||||
shared.m_function_environment_needed = function_environment_needed;
|
||||
shared.m_function_environment_bindings_count = function_environment_bindings_count;
|
||||
shared.m_var_environment_bindings_count = var_environment_bindings_count;
|
||||
shared.m_might_need_arguments_object = might_need_arguments_object;
|
||||
shared.m_contains_direct_call_to_eval = contains_direct_call_to_eval;
|
||||
shared.m_cached_bytecode_executable = cached_executable_ptr;
|
||||
|
|
@ -1273,6 +1279,7 @@ extern "C" void rust_sfd_set_precompiled_bytecode_executable(
|
|||
bool this_value_needs_environment_resolution,
|
||||
bool function_environment_needed,
|
||||
size_t function_environment_bindings_count,
|
||||
size_t var_environment_bindings_count,
|
||||
bool might_need_arguments_object,
|
||||
bool contains_direct_call_to_eval)
|
||||
{
|
||||
|
|
@ -1282,6 +1289,7 @@ extern "C" void rust_sfd_set_precompiled_bytecode_executable(
|
|||
shared.m_this_value_needs_environment_resolution = this_value_needs_environment_resolution;
|
||||
shared.m_function_environment_needed = function_environment_needed;
|
||||
shared.m_function_environment_bindings_count = function_environment_bindings_count;
|
||||
shared.m_var_environment_bindings_count = var_environment_bindings_count;
|
||||
shared.m_might_need_arguments_object = might_need_arguments_object;
|
||||
shared.m_contains_direct_call_to_eval = contains_direct_call_to_eval;
|
||||
shared.m_precompiled_bytecode_executable = precompiled_executable_ptr;
|
||||
|
|
|
|||
Loading…
Reference in a new issue