anchor.diff:            FOnIfOptDirect(Self);
         end;
       PtIfDirect:
  +
         begin
           if FUseDefines then
  -        begin
  -          Param := DirectiveParam;
  -          if Pos('DEFINED', Param) = 1 then
  -          begin
  -            Def := Copy(Param, 9, Pos(')', Param) - 9);
  -            EnterDefineBlock(IsDefined(Def));
  -          end else
  -          if Pos('NOT DEFINED', Param) = 1 then
  -          begin
  -            Def := Copy(Param, 13, Pos(')', Param) - 13);
  -            EnterDefineBlock(not IsDefined(Def));
  -          end else
  -            EnterDefineBlock(False);
  -        end;
  +          EnterDefineBlock(EvaluateConditionalExpression(DirectiveParam));
           if Assigned(FOnIfDirect) then
             FOnIfDirect(Self);
         end;
  
positive.code:   end;
  
  implementation
  
  procedure MakeIdentTable;
  var
  
negative.code:     procedure DoProcTable(AChar: Char);
      function IsIdentifiers(AChar: Char): Boolean; inline;
      function HashValue(AChar: Char): Integer;
      function EvaluateConditionalExpression(const AParams: String): Boolean;
    protected
      procedure SetLine(const Value: string); virtual;
      procedure SetOrigin(NewValue: PChar); virtual;
  