anchor.diff:        NeedsInput, HasOutput : boolean;
         msg : TStr; // input and output buffers
         OnChange : TThunk;
  +      OnError  : TStrEvent;
   
         constructor Create(aOwner : TComponent); override;
         destructor Destroy; override;
  
positive.code:       function Lookup  : boolean;
        function IsNumber : boolean;
        procedure NotFound;
  
        function GetModule( iden : TStr ) : TImpModule;
        procedure Mount( iden : TStr; imod : TImpModule ); overload;
  
negative.code:   var i : integer;
    begin
      tok := token;
      try
        if Lookup then Interpret
        else if TryStrToInt(u2a(tok), i) then begin data.push(i) end
        else if tok <> '' then data.push(tok);
        if assigned(OnChange) then OnChange;
        if msg<>'' then begin io.emit(msg); msg := '' end;
      except
        on e:EImpError do Error(e.message);
        on e:Exception do Error('exception: ' + e.message);
      end
    end;
  
  procedure TImpForth.EvalNextToken;
    begin NextToken; Eval(tok)
    end;
  
  begin
  