From 37d59f562d2a06cb352291d21585ec23ba787427 Mon Sep 17 00:00:00 2001 From: Jeff Date: Mon, 24 Jun 2024 02:58:19 -0400 Subject: [PATCH] Fix io.read_line function --- dust-lang/src/abstract_tree/assignment.rs | 6 ++++++ dust-lang/src/abstract_tree/built_in_function.rs | 14 +++++++------- dust-lang/src/parser/mod.rs | 2 +- 3 files changed, 14 insertions(+), 8 deletions(-) diff --git a/dust-lang/src/abstract_tree/assignment.rs b/dust-lang/src/abstract_tree/assignment.rs index abc115b..b047cc7 100644 --- a/dust-lang/src/abstract_tree/assignment.rs +++ b/dust-lang/src/abstract_tree/assignment.rs @@ -100,6 +100,12 @@ impl AbstractNode for Assignment { let statement_type = self.statement.expected_type(context)?; + if statement_type.is_none() { + return Err(ValidationError::CannotAssignToNone( + self.statement.last_evaluated_statement().position(), + )); + } + if let (Some(expected_type_constructor), Some(actual_type)) = (&self.constructor, statement_type) { diff --git a/dust-lang/src/abstract_tree/built_in_function.rs b/dust-lang/src/abstract_tree/built_in_function.rs index 0badd5f..2ecbc17 100644 --- a/dust-lang/src/abstract_tree/built_in_function.rs +++ b/dust-lang/src/abstract_tree/built_in_function.rs @@ -1,8 +1,4 @@ -use std::{ - array, - fs::read_to_string, - io::{self, stdin}, -}; +use std::{array, fs::read_to_string, io::stdin}; use serde::{Deserialize, Serialize}; use serde_json::from_str; @@ -308,9 +304,13 @@ impl FunctionLogic for ReadLine { } fn call(self, _: &Context, _: bool) -> Result, RuntimeError> { - let user_input = io::read_to_string(stdin())?; + let mut user_input = String::new(); - Ok(Some(Evaluation::Return(Value::string(user_input)))) + stdin().read_line(&mut user_input)?; + + Ok(Some(Evaluation::Return(Value::string( + user_input.trim_end_matches('\n'), + )))) } } diff --git a/dust-lang/src/parser/mod.rs b/dust-lang/src/parser/mod.rs index f11d75f..bd828e2 100644 --- a/dust-lang/src/parser/mod.rs +++ b/dust-lang/src/parser/mod.rs @@ -549,7 +549,7 @@ pub fn parser<'src>( ), infix( left(1), - just(Token::Symbol(Symbol::Slash)), + just(Token::Symbol(Symbol::Percent)), |left, _, right, span| { Expression::Math(Box::new(Math::Modulo(left, right)).with_position(span)) },