anchor.diff:  end;
   
   procedure TMARSActivationRecord.FreeContext;
  -begin
  -  while FContext.Count > 0 do
  -  begin
  -    CleanupGarbage(FContext[0]);
  -    FContext.Delete(0);
  +var
  +  LDestroyed: TList<TObject>;
  +  LValue: TValue;
  +begin
  +  LDestroyed := TList<TObject>.Create;
  +  try
  +    while FContext.Count > 0 do
  +    begin
  +      LValue := FContext[0];
  +      if LValue.IsObject then
  +      begin
  +        if not LDestroyed.Contains(LValue.AsObject) then
  +        begin
  +          LDestroyed.Add(LValue.AsObject);
  +          CleanupGarbage(LValue);
  +        end;
  +      end
  +      else
  +        CleanupGarbage(LValue);
  +      FContext.Delete(0);
  +    end;
  +  finally
  +    LDestroyed.Free;
     end;
   end;
   
  
positive.code: 
      procedure AddToContext(AValue: TValue); virtual;
  
  
      procedure Prepare; virtual;
      procedure Invoke; virtual;
  
  
negative.code:       end;
      end;
    finally
      if not FMethod.HasAttribute<IsReference>(nil) then
        AddToContext(LMethodResult);
  
      FreeContext;
    end;
  end;
  
  