11use mlua:: prelude:: * ;
2- use std:: env;
2+ use std:: { env, path :: { Path , PathBuf } } ;
33
44#[ tokio:: main( flavor = "current_thread" ) ]
55async fn main ( ) -> LuaResult < ( ) > {
@@ -8,23 +8,33 @@ async fn main() -> LuaResult<()> {
88 let lua = unsafe { Lua :: unsafe_new ( ) } ;
99 luals_basic:: lua_preload ( & lua) ?;
1010
11- build_args ( & lua) ;
12- let current_path = std:: env:: current_dir ( ) ?;
13- let main_path = current_path. join ( "main.lua" ) ;
14- let main = lua. load ( main_path) ;
11+ let start_file_name = build_args ( & lua) ;
12+ let main = lua. load ( start_file_name) ;
1513 main. call_async ( ( ) ) . await ?;
1614 Ok ( ( ) )
1715}
1816
19- fn build_args ( lua : & Lua ) {
17+ fn build_args ( lua : & Lua ) -> PathBuf {
2018 let args = std:: env:: args ( ) . skip ( 1 ) . collect :: < Vec < _ > > ( ) ;
19+ if args. len ( ) > 0 && args[ 0 ] == "-e" {
20+ let code = args[ 1 ] . clone ( ) ;
21+ let chunk = lua. load ( code) ;
22+ chunk. call :: < ( ) > ( mlua:: MultiValue :: new ( ) ) . unwrap ( ) ;
23+
24+ let start_file_name = args[ 2 ] . clone ( ) ;
25+ return start_file_name. into ( ) ;
26+ }
27+
2128 let table = lua. create_table ( ) . unwrap ( ) ;
2229 for ( i, arg) in args. iter ( ) . enumerate ( ) {
2330 table. set ( i + 1 , arg. clone ( ) ) . unwrap ( ) ;
2431 }
2532 let exe_path = env:: current_exe ( ) . unwrap ( ) ;
2633 table. set ( -1 , exe_path. to_str ( ) . unwrap ( ) ) . unwrap ( ) ;
2734 lua. globals ( ) . set ( "arg" , table) . unwrap ( ) ;
35+ let current_path = std:: env:: current_dir ( ) . unwrap ( ) ;
36+ let main_path = current_path. join ( "main.lua" ) ;
37+ main_path
2838}
2939
3040fn dynamic_set_root ( ) {
0 commit comments