File tree Expand file tree Collapse file tree 1 file changed +24
-3
lines changed
src/ScriptEngine/Compiler Expand file tree Collapse file tree 1 file changed +24
-3
lines changed Original file line number Diff line number Diff line change @@ -310,12 +310,33 @@ protected override void VisitMethodBody(MethodNode methodNode)
310310
311311 base . VisitMethodBody ( methodNode ) ;
312312
313- if ( methodNode . Signature . IsFunction )
313+ var isDebugCode = ExtraCodeConditionsMet ( CodeGenerationFlags . DebugCode ) ;
314+ int codeEnd ;
315+ if ( isDebugCode )
316+ {
317+ // В отладочном коде всегда есть LineNum перед Return
318+ // Нам надо перейти из явных ретурнов именно на него,
319+ // чтобы при раннем возврате отладчик встал на КонецПроцедуры/КонецФункции
320+ Debug . Assert ( _module . Code . Count > 0 && _module . Code [ ^ 1 ] . Code == OperationCode . LineNum ) ;
321+ if ( methodNode . Signature . IsFunction )
322+ {
323+ // перед финальным linenum надо вставить неявный возврат undefined
324+ var lineNumOp = _module . Code [ ^ 1 ] ;
325+ _module . Code [ ^ 1 ] = new Command ( ) { Code = OperationCode . PushUndef } ;
326+ _module . Code . Add ( lineNumOp ) ;
327+ }
328+ codeEnd = _module . Code . Count - 1 ;
329+ }
330+ else
314331 {
315- AddCommand ( OperationCode . PushUndef ) ;
332+ if ( methodNode . Signature . IsFunction )
333+ {
334+ // неявный возврат Undefined
335+ AddCommand ( OperationCode . PushUndef ) ;
336+ }
337+ codeEnd = _module . Code . Count ;
316338 }
317339
318- var codeEnd = _module . Code . Count ;
319340
320341 AddCommand ( OperationCode . Return ) ;
321342
You can’t perform that action at this time.
0 commit comments