@@ -44,8 +44,9 @@ use crate::{FunctionId, LuaValue};
4444pub struct LuaCallFrame {
4545 /// NonBox field: high bits store call status, low 48 bits store function ID or C function pointer
4646 pub func_id_ptr : u64 , // 8 bytes
47- pub code_ptr : * const u32 , // 8 bytes - direct pointer to instruction array
47+ pub code_ptr : * const u32 , // 8 bytes - direct pointer to instruction array
4848 pub constants_ptr : * const LuaValue , // 8 bytes - direct pointer to constant array
49+ pub upvalues_ptr : * const crate :: gc:: UpvalueId , // 8 bytes - direct pointer to upvalues array
4950 pub base_ptr : u32 , // 4 bytes - register stack base address
5051 pub top : u32 , // 4 bytes - stack top
5152 pub pc : u32 , // 4 bytes - program counter
@@ -83,6 +84,7 @@ impl Default for LuaCallFrame {
8384 func_id_ptr : 0 , // C function, no flags
8485 code_ptr : std:: ptr:: null ( ) ,
8586 constants_ptr : std:: ptr:: null ( ) ,
87+ upvalues_ptr : std:: ptr:: null ( ) ,
8688 base_ptr : 0 ,
8789 top : 0 ,
8890 pc : 0 ,
@@ -135,6 +137,7 @@ impl LuaCallFrame {
135137 func_id : FunctionId ,
136138 code_ptr : * const u32 ,
137139 constants_ptr : * const LuaValue ,
140+ upvalues_ptr : * const crate :: gc:: UpvalueId ,
138141 base_ptr : usize ,
139142 top : usize ,
140143 result_reg : usize ,
@@ -144,6 +147,7 @@ impl LuaCallFrame {
144147 func_id_ptr : Self :: pack_lua_function ( func_id) ,
145148 code_ptr,
146149 constants_ptr,
150+ upvalues_ptr,
147151 base_ptr : base_ptr as u32 ,
148152 top : top as u32 ,
149153 pc : 0 ,
@@ -161,6 +165,7 @@ impl LuaCallFrame {
161165 func_id_ptr : 0 , // C function, no FLAG_LUA
162166 code_ptr : std:: ptr:: null ( ) ,
163167 constants_ptr : std:: ptr:: null ( ) ,
168+ upvalues_ptr : std:: ptr:: null ( ) ,
164169 base_ptr : base_ptr as u32 ,
165170 top : top as u32 ,
166171 pc : 0 ,
@@ -331,14 +336,14 @@ mod tests {
331336 #[ test]
332337 fn test_lua_call_frame_size ( ) {
333338 // Verify frame size is compact
334- assert_eq ! ( std:: mem:: size_of:: <LuaCallFrame >( ) , 48 ) ;
339+ assert_eq ! ( std:: mem:: size_of:: <LuaCallFrame >( ) , 56 ) ;
335340 }
336341
337342 #[ test]
338343 fn test_nonbox_lua_function ( ) {
339344 let func_id = FunctionId ( 12345 ) ;
340345 let frame =
341- LuaCallFrame :: new_lua_function ( func_id, std:: ptr:: null ( ) , std:: ptr:: null ( ) , 0 , 0 , 0 , 0 ) ;
346+ LuaCallFrame :: new_lua_function ( func_id, std:: ptr:: null ( ) , std:: ptr:: null ( ) , std :: ptr :: null ( ) , 0 , 0 , 0 , 0 ) ;
342347
343348 assert ! ( frame. is_lua( ) ) ;
344349 assert ! ( !frame. is_fresh( ) ) ;
@@ -361,7 +366,7 @@ mod tests {
361366 fn test_nonbox_flags ( ) {
362367 let func_id = FunctionId ( 999 ) ;
363368 let mut frame =
364- LuaCallFrame :: new_lua_function ( func_id, std:: ptr:: null ( ) , std:: ptr:: null ( ) , 0 , 0 , 0 , 0 ) ;
369+ LuaCallFrame :: new_lua_function ( func_id, std:: ptr:: null ( ) , std:: ptr:: null ( ) , std :: ptr :: null ( ) , 0 , 0 , 0 , 0 ) ;
365370
366371 // Test fresh flag
367372 assert ! ( !frame. is_fresh( ) ) ;
@@ -391,7 +396,7 @@ mod tests {
391396 // Test large FunctionId value
392397 let func_id = FunctionId ( 0xFFFF_FFFF ) ;
393398 let mut frame =
394- LuaCallFrame :: new_lua_function ( func_id, std:: ptr:: null ( ) , std:: ptr:: null ( ) , 0 , 0 , 0 , 0 ) ;
399+ LuaCallFrame :: new_lua_function ( func_id, std:: ptr:: null ( ) , std:: ptr:: null ( ) , std :: ptr :: null ( ) , 0 , 0 , 0 , 0 ) ;
395400
396401 // Set all flags
397402 frame. set_fresh ( ) ;
0 commit comments