anchor.diff:    Status := fEntryStatus; 
     fEntryStatus := ScriptStatus.Running;
     try
  -	  if String.IsNullOrEmpty(SourceFileName) then SourceFileName := 'main.js';
  -	  if Source = nil then Source := '';
  +    if String.IsNullOrEmpty(SourceFileName) then SourceFileName := 'main.js';
  +    if Source = nil then Source := '';
       fGlobalObject.FrameCount := 0;
       var lCallback := fCompiler.Parse(SourceFileName, Source);
       result := lCallback(fRoot, fGlobalObject, []);
  
positive.code:     method UncaughtException(e: Exception); // triggers when an exception escapes the main method
      method Debugger; 
      method Idle;
  		method set_Status(value: ScriptStatus);
  		method set_RunInThread(value: Boolean);
      method CheckShouldPause;
    protected
      fLastFrame: Integer;
      fExceptionResult: Exception;
      fStackList: List<ScriptStackFrame> := new List<ScriptStackFrame>;
  		fGlobals: ScriptScope;
      fEntryStatus: ScriptStatus := ScriptStatus.Running;
  		method IntRun: Object; abstract;
  		method SetDebug(b: Boolean); virtual;
    public
  		constructor;
  		[Category('Script')]
  		property Debug: Boolean read fDebug write SetDebug;
  		[Category('Script')]
  		property SourceFileName: String;
  		[Category('Script')]
  		property Source: String;
  		[Category('Script')]
  		property RunInThread: Boolean read fRunInThread write set_RunInThread;		
  
      [Browsable(false)]
      property CallStack: ReadOnlyCollection<ScriptStackFrame> read fStackItems;
  		[Browsable(false)]
  		property Globals: ScriptScope read; abstract;
      {$IFDEF SILVERLIGHT} 
      method Dispose;
      {$ELSE}
      method Dispose(disposing: Boolean); override;
      {$ENDIF}
  
  		method ExposeType(&type: &Type; Name: String := nil); abstract;
  		//method UseNamespace(ns: String); virtual;
  		/// <summary>Clears all assemblies and exposed variables</summary>
  		method Clear(aGlobals: Boolean := false); abstract;
  
  		/// <summary>starts the script,
  		///	 this should be ran from another thread
  		///	 if you want to use the debugger</summary>
  		method Run; 
  		property RunResult: Object read fRunResult;
      property RunException: Exception read fExceptionResult;
      property DebugLastPos: PositionPair read fDebugLastPos;
  		
  		/// <summary>Returns if there is a function by that name. After calling Run the global object
  		///	 will contain a list of all functions, these can be called
  		///	 by name. Note this only works after calling Run first.</summary>
  		method HasFunction(aName: String): Boolean; abstract;
  		/// <summary>Executes the given function by name. After calling Run the global object
  		///	 will contain a list of all functions, these can be called
  		///	 by name. Note this only works after calling Run first.</summary>
  		method RunFunction(aName: String; params args: Array of object): Object; 
      method RunFunction(aInitialStatus: ScriptStatus; aName: String; params args: Array of object): Object; abstract;
  
  		property Status: ScriptStatus read fStatus protected write set_Status;
  		method StepInto;
  		method StepOver;
  		method StepOut;
  		method Pause;
  		method &Stop;
  
  		event DebugFrameEnter: EventHandler<ScriptDebugEventArgs>;
      event DebugFrameExit: EventHandler<ScriptDebugEventArgs>;
      event DebugThreadExit: EventHandler<ScriptDebugEventArgs>;
      event DebugTracePoint: EventHandler<ScriptDebugEventArgs>;
      event DebugDebugger: EventHandler<ScriptDebugEventArgs>;
      event DebugException: EventHandler<ScriptDebugEventArgs>;
      event DebugExceptionUnwind: EventHandler<ScriptDebugEventArgs>;
  		event StatusChanged: EventHandler;
      event NonThreadedIdle: EventHandler;
    end;
  
    ScriptAbortException = class (Exception) end;
  
    {$REGION Designtime Attributes}
    {$IFDEF DESIGN}
    [System.Drawing.ToolboxBitmap(typeof(RemObjects.Script.EcmaScriptComponent), 'Glyphs.EcmaScriptComponent.png')]
    {$ENDIF}
    {$ENDREGION}
  	EcmaScriptComponent = public class(ScriptComponent)
  	protected
      fCompiler: EcmaScriptCompiler;
      fScope: ScriptScope;
      fRoot: ExecutionContext;
  		fGlobalObject: RemObjects.Script.EcmaScript.GlobalObject;
  		method SetDebug(b: Boolean); override;
  		method IntRun: Object; override;
  	public
      property RootContext: ExecutionContext; 
      method Clear(aGlobals: Boolean := false); override;
      property Globals: ScriptScope read fScope; override;
  		property GlobalObject: RemObjects.Script.EcmaScript.GlobalObject read fGlobalObject;
      method ExposeType(&type: &Type; Name: String); override;
  		method HasFunction(aName: String): Boolean; override;
  		method RunFunction(aInitialStatus: ScriptStatus; aName: String; params args: Array of object): Object; override;
  	end;
    SyntaxErrorException = public class(Exception)
    private
    public
      constructor(aSource: string; aMessage: String; aSpan: PositionPair; anErrorCode: Int32); 
      property Message: string; readonly; reintroduce;
  
negative.code:   System.Collections,
    System.Collections.Generic,
    System.Collections.ObjectModel,
    System.ComponentModel,
    System.Linq,
    System.Reflection,
    System.Text,
    RemObjects.Script.EcmaScript;
  
  type
    ScriptDebugEventArgs = public class(EventArgs)
    public
      constructor(aName: string; aSpan: PositionPair);
      constructor(aName: string; aSpan: PositionPair; ex: Exception);
      property Name: String; readonly;
      property Exception: Exception; readonly;
      property SourceFileName: String read SourceSpan.File;
      property SourceSpan: PositionPair; readonly;
    end;
  
  
    ScriptComponentException = public class(Exception);
  
  
    ScriptStatus = public enum(
      Stopped,
      StepInto, 
      StepOver,
      StepOut,
      Running,
      Stopping,
      Paused,
      Pausing);
  
  
    ScriptStackFrame = public class
  