diff --git a/src/compile.rs b/src/compile.rs index 42c78b2..df543eb 100644 --- a/src/compile.rs +++ b/src/compile.rs @@ -1374,7 +1374,7 @@ impl Compiler { for (i, element) in elements.iter().enumerate() { if let ast::ExpressionType::Starred { .. } = &element.node { if seen_star { - return Err(self.error(CompileErrorType::StarArgs)); + return Err(self.error(CompileErrorType::MultipleStarArgs)); } else { seen_star = true; self.emit(Instruction::UnpackEx { @@ -1782,11 +1782,7 @@ impl Compiler { self.compile_comprehension(kind, generators)?; } Starred { .. } => { - return Err( - self.error(CompileErrorType::SyntaxError(std::string::String::from( - "Invalid starred expression", - ))), - ); + return Err(self.error(CompileErrorType::InvalidStarExpr)); } IfExpression { test, body, orelse } => { let no_label = self.new_label(); diff --git a/src/error.rs b/src/error.rs index 85bc9f4..38e5430 100644 --- a/src/error.rs +++ b/src/error.rs @@ -47,7 +47,9 @@ pub enum CompileErrorType { Parse(ParseErrorType), SyntaxError(String), /// Multiple `*` detected - StarArgs, + MultipleStarArgs, + /// Misplaced `*` expression + InvalidStarExpr, /// Break statement outside of loop. InvalidBreak, /// Continue statement outside of loop. @@ -97,7 +99,10 @@ impl fmt::Display for CompileError { CompileErrorType::ExpectExpr => "Expecting expression, got statement".to_owned(), CompileErrorType::Parse(err) => err.to_string(), CompileErrorType::SyntaxError(err) => err.to_string(), - CompileErrorType::StarArgs => "Two starred expressions in assignment".to_owned(), + CompileErrorType::MultipleStarArgs => { + "two starred expressions in assignment".to_owned() + } + CompileErrorType::InvalidStarExpr => "can't use starred expression here".to_owned(), CompileErrorType::InvalidBreak => "'break' outside loop".to_owned(), CompileErrorType::InvalidContinue => "'continue' outside loop".to_owned(), CompileErrorType::InvalidReturn => "'return' outside function".to_owned(),