mirror of
https://github.com/erg-lang/erg.git
synced 2025-09-29 20:34:44 +00:00
Fix #205
This commit is contained in:
parent
217d55b476
commit
df0fba34bd
2 changed files with 28 additions and 2 deletions
|
@ -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,
|
||||||
|
|
|
@ -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)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue