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