diff --git a/mers/src/lang/global_info.rs b/mers/src/lang/global_info.rs index 2646233..1063c93 100755 --- a/mers/src/lang/global_info.rs +++ b/mers/src/lang/global_info.rs @@ -14,6 +14,9 @@ pub type GSInfo = Arc; pub struct GlobalScriptInfo { pub libs: Vec, + + pub main_fn_args: Vec<(String, VType)>, + pub lib_fns: HashMap, pub enum_variants: HashMap, @@ -92,6 +95,7 @@ impl Default for GlobalScriptInfo { Self { libs: vec![], lib_fns: HashMap::new(), + main_fn_args: vec![], enum_variants: Self::default_enum_variants(), custom_type_names: HashMap::new(), custom_types: vec![], diff --git a/mers/src/lib.rs b/mers/src/lib.rs index 211eb28..987b866 100755 --- a/mers/src/lib.rs +++ b/mers/src/lib.rs @@ -5,9 +5,9 @@ mod parsing; mod pathutil; pub use inlib::MyLib; -pub use lang::{global_info::GlobalScriptInfo, val_data::*, val_type::*}; +pub use lang::{fmtgs, global_info::GlobalScriptInfo, val_data::*, val_type::*}; pub use libs::comms::{ByteData, ByteDataA, Message, RespondableMessage}; -pub use parsing::*; +pub use parsing::{parse::*, *}; pub mod prelude { pub use super::{ diff --git a/mers/src/main.rs b/mers/src/main.rs index 8b3df73..08598e1 100755 --- a/mers/src/main.rs +++ b/mers/src/main.rs @@ -2,6 +2,7 @@ use lang::global_info::ColorFormatMode; use lang::global_info::GlobalScriptInfo; use lang::global_info::LogKind; use lang::val_data::VDataEnum; +use lang::val_type::VSingleType; use crate::lang::fmtgs::FormatGs; @@ -189,6 +190,10 @@ fn normal_main() { } } }; + info.main_fn_args = vec![( + "args".to_string(), + VSingleType::List(VSingleType::Any.into()).to(), + )]; match parsing::parse::parse_custom_info(&mut file, info) { Ok(script) => { if run { diff --git a/mers/src/parsing/file.rs b/mers/src/parsing/file.rs index a5cc649..b850007 100755 --- a/mers/src/parsing/file.rs +++ b/mers/src/parsing/file.rs @@ -31,6 +31,7 @@ impl Display for FilePosition { } impl File { + /// creates a file from its contents and its path. Path can be PathBuf::new(), but this disables relative MersLibs. pub fn new(data: String, path: PathBuf) -> Self { let data = if data.starts_with("#!") { &data[data.lines().next().unwrap().len()..].trim_start() diff --git a/mers/src/parsing/parse.rs b/mers/src/parsing/parse.rs index b73da0b..e9551d6 100755 --- a/mers/src/parsing/parse.rs +++ b/mers/src/parsing/parse.rs @@ -187,10 +187,7 @@ pub fn parse_step_interpret( ginfo: &GlobalScriptInfo, ) -> Result { let o = SFunction::new( - vec![( - "args".to_string(), - VSingleType::List(VSingleType::Any.into()).to(), - )], + ginfo.main_fn_args.clone(), SStatementEnum::Block(parse_block_advanced(file, Some(false), true, true, false)?).to(), ); if ginfo.log.after_parse.log() {