parser: add hard limit to the number of statements in a fn
parent
8dcc3cda97
commit
c6ae322f85
|
@ -321,12 +321,21 @@ pub fn (mut p Parser) parse_block_no_scope(is_top_level bool) []ast.Stmt {
|
||||||
p.check(.lcbr)
|
p.check(.lcbr)
|
||||||
mut stmts := []ast.Stmt{}
|
mut stmts := []ast.Stmt{}
|
||||||
if p.tok.kind != .rcbr {
|
if p.tok.kind != .rcbr {
|
||||||
|
mut c := 0
|
||||||
for {
|
for {
|
||||||
stmts << p.stmt(is_top_level)
|
stmts << p.stmt(is_top_level)
|
||||||
// p.warn('after stmt(): tok=$p.tok.str()')
|
// p.warn('after stmt(): tok=$p.tok.str()')
|
||||||
if p.tok.kind in [.eof, .rcbr] {
|
if p.tok.kind in [.eof, .rcbr] {
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
|
c++
|
||||||
|
if c % 100000 == 0 {
|
||||||
|
eprintln('parsed $c statements so far from fn $p.cur_fn_name ...')
|
||||||
|
}
|
||||||
|
if c > 1000000 {
|
||||||
|
p.error_with_pos('parsed over $c statements from fn $p.cur_fn_name, the parser is probably stuck',
|
||||||
|
p.tok.position())
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if is_top_level {
|
if is_top_level {
|
||||||
|
|
Loading…
Reference in New Issue