diff --git a/packages/cli/src/cli.rs b/packages/cli/src/cli.rs index 9d26e06..8639995 100644 --- a/packages/cli/src/cli.rs +++ b/packages/cli/src/cli.rs @@ -12,7 +12,7 @@ use tokio::{ use crate::{ setup::run_setup, utils::{ - files::{discover_script_file_path_including_lune_dirs, strip_shebang}, + files::discover_script_file_path_including_lune_dirs, listing::{find_lune_scripts, sort_lune_scripts, write_lune_scripts_list}, }, }; @@ -172,7 +172,7 @@ impl Cli { // Create a new lune object with all globals & run the script let result = Lune::new() .with_args(self.script_args) - .run(&script_display_name, strip_shebang(script_contents)) + .run(&script_display_name, script_contents) .await; Ok(match result { Err(err) => { diff --git a/packages/cli/src/utils/files.rs b/packages/cli/src/utils/files.rs index 5be816a..f8614af 100644 --- a/packages/cli/src/utils/files.rs +++ b/packages/cli/src/utils/files.rs @@ -185,21 +185,3 @@ pub fn parse_lune_description_from_file(contents: &str) -> Option { Some(unindented_lines) } } - -pub fn strip_shebang(mut contents: Vec) -> Vec { - if contents.starts_with(b"#!") { - if let Some(first_newline_idx) = - contents - .iter() - .enumerate() - .find_map(|(idx, c)| if *c == b'\n' { Some(idx) } else { None }) - { - // NOTE: We keep the newline here on purpose to preserve - // correct line numbers in stack traces, the only reason - // we strip the shebang is to get the lua script to parse - // and the extra newline is not really a problem for that - contents.drain(..first_newline_idx); - } - } - contents -} diff --git a/packages/lib/src/lib.rs b/packages/lib/src/lib.rs index 60f6821..bfb3c0a 100644 --- a/packages/lib/src/lib.rs +++ b/packages/lib/src/lib.rs @@ -2,6 +2,7 @@ use std::process::ExitCode; use lua::task::{TaskScheduler, TaskSchedulerResumeExt, TaskSchedulerScheduleExt}; use mlua::prelude::*; +use mlua::Compiler as LuaCompiler; use tokio::task::LocalSet; pub(crate) mod builtins; @@ -68,6 +69,7 @@ impl Lune { ) -> Result { // Create our special lune-flavored Lua object with extra registry values let lua = lua::create_lune_lua()?; + let script_bytecode = LuaCompiler::default().compile(script_contents); // Create our task scheduler and all globals // NOTE: Some globals require the task scheduler to exist on startup let sched = TaskScheduler::new(lua)?.into_static(); @@ -75,7 +77,7 @@ impl Lune { importer::create(lua, self.args.clone())?; // Create the main thread and schedule it let main_chunk = lua - .load(script_contents.as_ref()) + .load(script_bytecode) .set_name(script_name.as_ref()) .into_function()?; let main_thread = lua.create_thread(main_chunk)?;