This commit is contained in:
Shunsuke Shibayama 2022-11-28 00:21:44 +09:00
parent 217d55b476
commit df0fba34bd
2 changed files with 28 additions and 2 deletions

View file

@ -3450,6 +3450,10 @@ impl Expr {
matches!(self, Expr::Accessor(acc) if acc.is_const()) matches!(self, Expr::Accessor(acc) if acc.is_const())
} }
pub const fn is_definition(&self) -> bool {
matches!(self, Expr::Def(_) | Expr::ClassDef(_) | Expr::Methods(_))
}
pub fn need_to_be_closed(&self) -> bool { pub fn need_to_be_closed(&self) -> bool {
matches!( matches!(
self, self,

View file

@ -298,8 +298,15 @@ impl Parser {
.try_reduce_chunk(true, false) .try_reduce_chunk(true, false)
.map_err(|_| self.stack_dec())?; .map_err(|_| self.stack_dec())?;
block.push(chunk); block.push(chunk);
self.level -= 1; if block.last().unwrap().is_definition() {
return Ok(block); let err = ParseError::simple_syntax_error(0, block.last().unwrap().loc());
self.level -= 1;
self.errs.push(err);
return Err(());
} else {
self.level -= 1;
return Ok(block);
}
} }
if !self.cur_is(Newline) { if !self.cur_is(Newline) {
let err = self.skip_and_throw_syntax_err("try_reduce_block"); let err = self.skip_and_throw_syntax_err("try_reduce_block");
@ -362,6 +369,21 @@ impl Parser {
self.level -= 1; self.level -= 1;
self.errs.push(err); self.errs.push(err);
Err(()) Err(())
} else if block.last().unwrap().is_definition() {
let err = ParseError::syntax_error(
line!() as usize,
block.last().unwrap().loc(),
switch_lang!(
"japanese" => "ブロックの終端で変数を定義することは出来ません",
"simplified_chinese" => "无法在块的末尾定义变量",
"traditional_chinese" => "無法在塊的末尾定義變量",
"english" => "cannot define a variable at the end of a block",
),
None,
);
self.level -= 1;
self.errs.push(err);
Err(())
} else { } else {
self.level -= 1; self.level -= 1;
Ok(block) Ok(block)