diff --git a/compiler/parser.pas b/compiler/parser.pas index 2b5581f373..bfbda17db1 100644 --- a/compiler/parser.pas +++ b/compiler/parser.pas @@ -35,6 +35,7 @@ interface implementation uses + sysutils, cutils,cclasses, globtype,version,tokens,systems,globals,verbose, symbase,symtable,symsym, @@ -515,13 +516,25 @@ implementation { If the compile level > 1 we get a nice "unit expected" error message if we are trying to use a program as unit.} try - if (token=_UNIT) or (compile_level>1) then - begin - current_module.is_unit:=true; - proc_unit; - end - else - proc_program(token=_LIBRARY); + try + if (token=_UNIT) or (compile_level>1) then + begin + current_module.is_unit:=true; + proc_unit; + end + else + proc_program(token=_LIBRARY); + except + on ECompilerAbort do + raise; + on Exception do + begin + { Increase errorcounter to prevent some + checks during cleanup } + inc(status.errorcount); + raise; + end; + end; finally { restore old state } done_module;