@@ -641,8 +641,8 @@ fn lua_version(vm: &mut LuaVM) -> LuaResult<MultiValue> {
641641
642642/// require(modname) - Load a module
643643fn lua_require ( vm : & mut LuaVM ) -> LuaResult < MultiValue > {
644- let modname_str = require_arg ( vm, 1 , "require" ) ?;
645- if !modname_str . is_string ( ) {
644+ let modname_value = require_arg ( vm, 1 , "require" ) ?;
645+ if !modname_value . is_string ( ) {
646646 return Err ( vm. error ( "module name must be a string" . to_string ( ) ) ) ;
647647 }
648648
@@ -660,7 +660,7 @@ fn lua_require(vm: &mut LuaVM) -> LuaResult<MultiValue> {
660660 if let Some ( loaded_table) = package_ref. raw_get ( & loaded_key) {
661661 if let Some ( loaded_id) = loaded_table. as_table_id ( ) {
662662 if let Some ( loaded_ref) = vm. object_pool . get_table ( loaded_id) {
663- loaded_ref. raw_get ( & modname_str )
663+ loaded_ref. raw_get ( & modname_value )
664664 } else {
665665 None
666666 }
@@ -721,7 +721,7 @@ fn lua_require(vm: &mut LuaVM) -> LuaResult<MultiValue> {
721721 // Try each searcher (1-based indexing)
722722 for searcher in searchers_values {
723723 // Call searcher with module name
724- let ( success, results) = vm. protected_call ( searcher, vec ! [ modname_str . clone( ) ] ) ?;
724+ let ( success, results) = vm. protected_call ( searcher, vec ! [ modname_value . clone( ) ] ) ?;
725725
726726 if !success {
727727 let error_msg = results
@@ -745,15 +745,16 @@ fn lua_require(vm: &mut LuaVM) -> LuaResult<MultiValue> {
745745 if first_result. is_function ( ) || first_result. is_cfunction ( ) {
746746 // Call the loader
747747 let loader_args = if results. len ( ) > 1 {
748- vec ! [ modname_str . clone( ) , results[ 1 ] . clone( ) ]
748+ vec ! [ modname_value . clone( ) , results[ 1 ] . clone( ) ]
749749 } else {
750- vec ! [ modname_str . clone( ) ]
750+ vec ! [ modname_value . clone( ) ]
751751 } ;
752752
753753 let ( load_success, load_results) =
754754 vm. protected_call ( first_result. clone ( ) , loader_args) ?;
755755
756756 if !load_success {
757+ let module_str = vm. value_to_string ( & modname_value) ?;
757758 let error_msg = load_results
758759 . first ( )
759760 . and_then ( |v| {
@@ -766,7 +767,7 @@ fn lua_require(vm: &mut LuaVM) -> LuaResult<MultiValue> {
766767 . unwrap_or_else ( || "unknown error" . to_string ( ) ) ;
767768 return Err ( vm. error ( format ! (
768769 "error loading module '{}': {}" ,
769- modname_str , error_msg
770+ module_str , error_msg
770771 ) ) ) ;
771772 }
772773
@@ -784,7 +785,7 @@ fn lua_require(vm: &mut LuaVM) -> LuaResult<MultiValue> {
784785 if let Some ( loaded_table) = package_ref. raw_get ( & loaded_key) {
785786 if let Some ( loaded_id) = loaded_table. as_table_id ( ) {
786787 if let Some ( loaded_ref) = vm. object_pool . get_table_mut ( loaded_id) {
787- loaded_ref. raw_set ( modname_str , module_value. clone ( ) ) ;
788+ loaded_ref. raw_set ( modname_value , module_value. clone ( ) ) ;
788789 }
789790 }
790791 }
@@ -800,14 +801,15 @@ fn lua_require(vm: &mut LuaVM) -> LuaResult<MultiValue> {
800801 }
801802 }
802803 }
804+ let module_str = vm. value_to_string ( & modname_value) ?;
803805
804806 // All searchers failed
805807 if error_messages. is_empty ( ) {
806- Err ( vm. error ( format ! ( "module '{}' not found" , modname_str ) ) )
808+ Err ( vm. error ( format ! ( "module '{}' not found" , module_str ) ) )
807809 } else {
808810 Err ( vm. error ( format ! (
809811 "module '{}' not found:{}" ,
810- modname_str ,
812+ module_str ,
811813 error_messages. join( "" )
812814 ) ) )
813815 }
0 commit comments