@@ -345,13 +345,16 @@ private void evaluateWithScope(Context context, int i, bool clearSuspendData)
345345
346346 private void evaluateLines ( Context context , int i , bool clearSuspendData )
347347 {
348- for ( var ls = _lines ; i < ls . Length ; i ++ )
348+ var ls = _lines ;
349+ try
349350 {
350- if ( context . _debugging )
351- context . raiseDebugger ( _lines [ i ] ) ;
352- var t = ls [ i ] . Evaluate ( context ) ;
353- if ( t != null )
354- context . _lastResult = t ;
351+ for ( ; i < ls . Length ; i ++ )
352+ {
353+ if ( context . _debugging )
354+ context . raiseDebugger ( _lines [ i ] ) ;
355+ var t = ls [ i ] . Evaluate ( context ) ;
356+ if ( t != null )
357+ context . _lastResult = t ;
355358#if DEBUG && ! ( PORTABLE || NETCORE )
356359 if ( ! context . Running )
357360 if ( System . Diagnostics . Debugger . IsAttached )
@@ -388,18 +391,38 @@ private void evaluateLines(Context context, int i, bool clearSuspendData)
388391 else
389392 throw new ApplicationException ( "Boolean.True has been rewitten" ) ;
390393#endif
391- if ( context . _executionMode != ExecutionMode . Regular )
392- {
393- if ( context . _executionMode == ExecutionMode . Suspend )
394+ if ( context . _executionMode != ExecutionMode . Regular )
394395 {
395- context . SuspendData [ this ] = new SuspendData { Context = context , LineIndex = i } ;
396+ if ( context . _executionMode == ExecutionMode . Suspend )
397+ {
398+ context . SuspendData [ this ] = new SuspendData { Context = context , LineIndex = i } ;
399+ }
400+
401+ break ;
396402 }
397403
398- break ;
404+ if ( clearSuspendData )
405+ context . SuspendData . Clear ( ) ;
406+ }
407+ }
408+ catch ( Exception e )
409+ {
410+ foreach ( var item in e . Data . Values )
411+ {
412+ if ( ( item as Tuple < Context , CodeCoordinates > ) . Item1 == context )
413+ throw ;
399414 }
400415
401- if ( clearSuspendData )
402- context . SuspendData . Clear ( ) ;
416+ e . Data . Add (
417+ new CallStackMarker ( e . Data . Count ) ,
418+ Tuple . Create (
419+ context ,
420+ CodeCoordinates . FromTextPosition (
421+ ExceptionHelper . GetCode ( context ) ,
422+ ls [ i ] . Position ,
423+ ls [ i ] . Length ) ) ) ;
424+
425+ throw ;
403426 }
404427 }
405428
0 commit comments