This commit is contained in:
MeexReay 2024-07-27 21:22:28 +03:00
parent e02528b2f1
commit 842ef24a60
3 changed files with 46 additions and 29 deletions

View File

@ -956,7 +956,13 @@ fn prepare_script(text: String) -> Vec<String> {
Some(s) => s.0, Some(s) => s.0,
None => s, None => s,
}) })
.map(|s| s.trim_end_matches(" ").to_string()) .map(|s| {
s.trim_end_matches(" ")
.trim_end_matches("\t")
.trim_start_matches(" ")
.trim_start_matches("\t")
.to_string()
})
.collect() .collect()
} }
@ -1226,6 +1232,8 @@ impl RunningScript {
let mut var: Option<&mut Variable> = None; let mut var: Option<&mut Variable> = None;
let parts: Vec<&str> = name.split('.').collect(); let parts: Vec<&str> = name.split('.').collect();
let global = global || (self.variables.contains_key(&name) && !locals.contains_key(&name));
if parts.len() == 1 { if parts.len() == 1 {
if global { if global {
self.variables.insert(name, value); self.variables.insert(name, value);
@ -1457,6 +1465,21 @@ impl RunningScript {
CommandType::Return => { CommandType::Return => {
return Ok(()); return Ok(());
} }
CommandType::For => {
let func_name = command.args[0].clone();
let start_index = self.get_var(command.args[1].clone(), locals)?.as_int()?;
let end_index = self.get_var(command.args[2].clone(), locals)?.as_int()?;
let func = self.get_function(func_name).unwrap();
for index in start_index..=end_index {
self.exec_function(
func.clone(),
"null".to_string(),
vec![Variable::from_int(Some(index))],
)?;
}
}
CommandType::ToString => {} CommandType::ToString => {}
CommandType::ToBytes => {} CommandType::ToBytes => {}
CommandType::ToInteger => {} CommandType::ToInteger => {}
@ -1473,21 +1496,6 @@ impl RunningScript {
CommandType::ReadAll => {} CommandType::ReadAll => {}
CommandType::ReadStr => {} CommandType::ReadStr => {}
CommandType::ReadStrAll => {} CommandType::ReadStrAll => {}
CommandType::For => {
let func_name = command.args[0].clone();
let start_index = self.get_var(command.args[1].clone(), locals)?.as_int()?;
let end_index = self.get_var(command.args[2].clone(), locals)?.as_int()?;
let func = self.get_function(func_name).unwrap();
for index in start_index..=end_index {
self.exec_function(
func.clone(),
"null".to_string(),
vec![Variable::from_int(Some(index))],
)?;
}
}
CommandType::ForMap => {} CommandType::ForMap => {}
CommandType::ForList => {} CommandType::ForList => {}
CommandType::While => {} CommandType::While => {}

View File

@ -7,8 +7,16 @@ use std::{
use sustlang::{RunningScript, Script}; use sustlang::{RunningScript, Script};
fn main() { fn main() {
let script = Script::parse(fs::read_to_string("test.sus").unwrap()).unwrap(); let args: Vec<String> = args().collect();
let filename = args[1].clone();
let args = args[1..].to_vec();
let script = Script::parse(fs::read_to_string(filename).unwrap()).unwrap();
let mut running_script = RunningScript::new(script); let mut running_script = RunningScript::new(script);
running_script.set_standard_vars(args().collect(), Box::new(stdout()), Box::new(stdin())); running_script
.set_standard_vars(args, Box::new(stdout()), Box::new(stdin()))
.unwrap();
running_script.run().unwrap(); running_script.run().unwrap();
} }

View File

@ -1,20 +1,21 @@
FUNC null println text string # println command FUNC null println text string # println command
TEMP_VAR char br 10 # line break var
TEMP_VAR char br 10 # line break var ADD_STR text br # add line break to text var
ADD_STR text br # add line break to text var WRITE text cout # write text var to console
WRITE text cout # write text var to console
FUNC_END # end println command FUNC_END # end println command
FUNC null hello_world index integer
USE_FUNC println null text
FUNC_END
INIT_VAR string text INIT_VAR string text
SET_VAR text Hello World! SET_VAR text Hello World!
FUNC null hello_world index integer
USE_FUNC println null text
FUNC_END
TEMP_VAR integer start_index 0 TEMP_VAR integer start_index 0
TEMP_VAR integer end_index 9 TEMP_VAR integer end_index 9
FOR hello_world start_index end_index FOR hello_world start_index end_index
DROP_VAR text