read_line now returns (String)/()

so that closed stdin is handled by the programmer
instead of (probably) causing an infinite loop
This commit is contained in:
Mark 2024-06-17 18:26:27 +02:00
parent eb2949334e
commit 206457489c
3 changed files with 12 additions and 6 deletions

View File

@ -1,6 +1,6 @@
[package]
name = "mers"
version = "0.8.5"
version = "0.8.6"
edition = "2021"
license = "MIT OR Apache-2.0"
description = "dynamically typed but type-checked programming language"
@ -11,7 +11,7 @@ repository = "https://github.com/Dummi26/mers"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
mers_lib = "0.8.5"
mers_lib = "0.8.6"
# mers_lib = { path = "../mers_lib" }
clap = { version = "4.3.19", features = ["derive"] }
colored = "2.1.0"

View File

@ -1,6 +1,6 @@
[package]
name = "mers_lib"
version = "0.8.5"
version = "0.8.6"
edition = "2021"
license = "MIT OR Apache-2.0"
description = "library to use the mers language in other projects"

View File

@ -28,7 +28,10 @@ impl Config {
info_check: Arc::new(Mutex::new(CheckInfo::neverused())),
out: Arc::new(|a, _i| {
if a.is_zero_tuple() {
Ok(Type::new(data::string::StringT))
Ok(Type::newm(vec![Arc::new(data::tuple::TupleT(vec![
Type::new(data::string::StringT),
Type::empty_tuple(),
]))]))
} else {
Err(format!(
"expected (), got {}",
@ -39,8 +42,11 @@ impl Config {
}),
run: Arc::new(|_a, _i| {
let mut line = String::new();
_ = std::io::stdin().read_line(&mut line);
Data::new(data::string::String(line))
if std::io::stdin().read_line(&mut line).is_err() && line.is_empty() {
Data::empty_tuple()
} else {
Data::one_tuple(Data::new(data::string::String(line)))
}
}),
inner_statements: None,
}),