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

@@ -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,
}),