@@ -54,6 +54,7 @@ pub struct LuaCallFrame {
5454 vararg_start : u32 , // 4 bytes - vararg start position (absolute index)
5555 nresults : i16 , // 2 bytes - expected return count (-1 = LUA_MULTRET)
5656 vararg_count : u16 , // 2 bytes - number of vararg arguments
57+ pub max_stack : u16 , // 2 bytes - max stack size (for VARARGPREP optimization)
5758}
5859
5960// ============================================================================
@@ -92,6 +93,7 @@ impl Default for LuaCallFrame {
9293 vararg_start : 0 ,
9394 nresults : 0 ,
9495 vararg_count : 0 ,
96+ max_stack : 0 ,
9597 }
9698 }
9799}
@@ -142,6 +144,7 @@ impl LuaCallFrame {
142144 top : usize ,
143145 result_reg : usize ,
144146 nresults : i16 ,
147+ max_stack : usize ,
145148 ) -> Self {
146149 LuaCallFrame {
147150 func_id_ptr : Self :: pack_lua_function ( func_id) ,
@@ -155,6 +158,7 @@ impl LuaCallFrame {
155158 vararg_start : 0 ,
156159 nresults,
157160 vararg_count : 0 ,
161+ max_stack : max_stack as u16 ,
158162 }
159163 }
160164
@@ -173,6 +177,7 @@ impl LuaCallFrame {
173177 vararg_start : 0 ,
174178 nresults : 0 ,
175179 vararg_count : 0 ,
180+ max_stack : 0 ,
176181 }
177182 }
178183
@@ -335,8 +340,8 @@ mod tests {
335340
336341 #[ test]
337342 fn test_lua_call_frame_size ( ) {
338- // Verify frame size is compact
339- assert_eq ! ( std:: mem:: size_of:: <LuaCallFrame >( ) , 56 ) ;
343+ // Verify frame size is compact (added max_stack u16 + _padding u16)
344+ assert_eq ! ( std:: mem:: size_of:: <LuaCallFrame >( ) , 64 ) ;
340345 }
341346
342347 #[ test]
@@ -351,6 +356,7 @@ mod tests {
351356 0 ,
352357 0 ,
353358 0 ,
359+ 16 ,
354360 ) ;
355361
356362 assert ! ( frame. is_lua( ) ) ;
@@ -382,6 +388,7 @@ mod tests {
382388 0 ,
383389 0 ,
384390 0 ,
391+ 16 ,
385392 ) ;
386393
387394 // Test fresh flag
@@ -420,6 +427,7 @@ mod tests {
420427 0 ,
421428 0 ,
422429 0 ,
430+ 16 ,
423431 ) ;
424432
425433 // Set all flags
0 commit comments