AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Typisierte lokale Konstante in Generic-Unterklasse - Compiler-Bug?
Thema durchsuchen
Ansicht
Themen-Optionen

Typisierte lokale Konstante in Generic-Unterklasse - Compiler-Bug?

Ein Thema von Der schöne Günther · begonnen am 3. Jan 2014 · letzter Beitrag vom 13. Jan 2014
 
Der schöne Günther

Registriert seit: 6. Mär 2013
6.191 Beiträge
 
Delphi 10 Seattle Enterprise
 
#1

Typisierte lokale Konstante in Generic-Unterklasse - Compiler-Bug?

  Alt 3. Jan 2014, 13:33
Delphi-Version: XE5
Delphi XE5 Enterprise, Update 1. Ich bin verwirrt. Man nehme folgende zwei Units und sorge dafür, dass auf einer TChildClass -Instanz die Methode doStuff() aufgerufen wird.

Soweit das $DEFINE CAUSE_URW_ERROR nicht auskommentiert wird, kann der Compiler die Unit ChildClass nicht kompilieren und meldet:
  • "[dcc64 Fataler Fehler] ChildClass.pas(10): F2084 Interner Fehler: URW1154"
  • "[dcc32 Fataler Fehler] ChildClass.pas(10): F2084 Interner Fehler: URW1154"

Andere Compiler-Backends habe ich nicht ausprobiert.


Delphi-Quellcode:
unit BaseClass;

interface
   type

      TBaseClass<T: class> = class abstract
         protected var
            someField: Boolean;
         public
            procedure doStuff(); virtual; final;
      end;

implementation

// {$DEFINE CAUSE_URW_ERROR}

// Causes fatal "Internal Error: URW1154" on Unit ChildClass.pas
// using dcc32 or dcc64

// Used version: "Embarcadero® Delphi® XE5 Version 19.0.13856.4978"
// meaning "RAD Studio XE5 Enterprise, Update 1"

procedure TBaseClass<T>.doStuff();
const
   {$IFDEF CAUSE_URW_ERROR}
      someConstant: Boolean = True;
   {$ELSE}
      someConstant = True;
   {$ENDIF}
   // Could as well be defined in the class header
   // The only thing that matters is that the constant has to be typed,
   // the superclass has to make use of generics and the subclass has to be
   // in another unit. That's all that matters.
begin
   someField := someConstant;
end;

end.
Delphi-Quellcode:
unit ChildClass;

interface uses BaseClass;

   type TChildClass = class(TBaseClass<TObject>);

implementation
end.
Wie man sieht läuft alles bestens, wenn die Konstante nicht explizit auf Boolean typisiert ist. Ich habe allerdings keine Ahnung, warum.

In der Fixliste für XE5 taucht komischerweise "F2084 Internal Error: URW1154" auf, der entsprechende QC-Report ist als "Resolved in Build: : XE5" markiert.

Mehr finde ich im Internet nicht. Was soll ich nun tun? Könnt Ihr das reproduzieren? Wie verhalten sich andere Compiler (OSX, iOS, Android)? Kann ich das so (wieder) im QC melden?

Geändert von Der schöne Günther ( 3. Jan 2014 um 14:57 Uhr) Grund: Kommentare in Unit BaseClass
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:48 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz