Autor Téma: FYI: Bug v prekladu $IF DECLARED(...) u XE2  (Přečteno 4975 krát)

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 3527
  • Karma: 139
    • Verze Delphi: D2007, XE3, DX10
FYI: Bug v prekladu $IF DECLARED(...) u XE2
« kdy: 08-08-2012, 12:12:55 »
V jinem tematu jsem citoval  diskusi https://forums.embarcadero.com/thread.jspa?threadID=63416, kde doporucuje Babet reseni:

Kód: Delphi [Vybrat]
  1. {$IF CompilerVersion >= 23}
  2. {$IF DECLARED(System.Variants.DispatchUnsignedAsSigned)}
  3. initialization
  4.   System.Variants.DispatchUnsignedAsSigned := True;
  5. {$IFEND}
  6. {$IFEND}
  7.  

Ovsem narazili jsme na to, ze XE2+Upd1 tohle neprelozi a krici, ze DispatchUnsignedAsSigned je undeclared identifier, z cehoz vyplyva, ze prekladac spatne vyhodnocuje podminku $IF DECLARED.

Jak jsem zjistil, vadi mu plne kvalifikovane jmeno : jakmile existuje prvni jmeno pred teckou, vraci vzdy TRUE bez ohledu na zbytek vyrazu za teckou !!! (pokud jmeno pred teckou neexistuje, prekladac rve, ze ocekava ")", ale nasel "."). Takze aby to fungovalo podle predpokladu, musi se napsat:

Kód: Delphi [Vybrat]
  1. {$IF CompilerVersion >= 23}
  2. {$IF DECLARED(DispatchUnsignedAsSigned)}
  3. initialization
  4.   System.Variants.DispatchUnsignedAsSigned := True;
  5. {$IFEND}
  6. {$IFEND}
  7.  


Po delsi odmlce delam s XE2 druhy tyden a uz jsem narazil na dalsi peknou zradu... to se nam z toho Delphi  stava peknej shit  :o
BTW, po zkusenostech s pristupem personalu k reseni problemu na QC jsem to tam nereportoval, takze jestli nekdo nema co delat...


pf

Offline pepak

  • Padawan
  • ******
  • Příspěvků: 1574
  • Karma: 37
    • Pepak.net
Re:FYI: Bug v prekladu $IF DECLARED(...) u XE2
« Odpověď #1 kdy: 08-08-2012, 12:29:38 »
Jen počkej, až dojdeš k hodnotám konstant TModalResult...

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 3527
  • Karma: 139
    • Verze Delphi: D2007, XE3, DX10
Re:FYI: Bug v prekladu $IF DECLARED(...) u XE2
« Odpověď #2 kdy: 08-08-2012, 15:33:59 »
Jen počkej, až dojdeš k hodnotám konstant TModalResult...

To se mi snad vyhne, protoze pouzivame vlastni firemni komponenty...

Offline Radek Červinka

  • Administrátoři
  • Padawan
  • *****
  • Příspěvků: 3514
  • Karma: 112
    • Verze Delphi: D2007, DXE + 2 poslední
    • O Delphi v češtině
Re:FYI: Bug v prekladu $IF DECLARED(...) u XE2
« Odpověď #3 kdy: 08-08-2012, 22:39:50 »
Jen počkej, až dojdeš k hodnotám konstant TModalResult...

Jen pro upřesnění: to se týká jen pokud definujes ModalResult v Design modu (osobne nikdy) a tyka se to pokud se nepletu jen 2 nebo 3 malo pouzivanych konstantant.
Embarcadero MVP - Czech republic

Offline Radek Červinka

  • Administrátoři
  • Padawan
  • *****
  • Příspěvků: 3514
  • Karma: 112
    • Verze Delphi: D2007, DXE + 2 poslední
    • O Delphi v češtině
Re:FYI: Bug v prekladu $IF DECLARED(...) u XE2
« Odpověď #4 kdy: 08-08-2012, 23:11:29 »
Jsi si jistý?
Tento kód mi to přeloží v XE2 Up4 a řádek č.14 to označí jako linkovaný a přeložený.

Kód: Delphi [Vybrat]
  1. program Project1;
  2.  
  3. {$APPTYPE CONSOLE}
  4.  
  5. {$R *.res}
  6.  
  7. uses
  8.   System.SysUtils,
  9.   Variants;
  10.  
  11. begin
  12.   try
  13.     {$IF DECLARED(System.Variants.DispatchUnsignedAsSigned)}
  14.       System.Variants.DispatchUnsignedAsSigned := True;
  15.     {$IFEND}
  16.   except
  17.     on E: Exception do
  18.       Writeln(E.ClassName, ': ', E.Message);
  19.   end;
  20. end.
  21.  
  22.  
Embarcadero MVP - Czech republic

Offline Radek Červinka

  • Administrátoři
  • Padawan
  • *****
  • Příspěvků: 3514
  • Karma: 112
    • Verze Delphi: D2007, DXE + 2 poslední
    • O Delphi v češtině
Re:FYI: Bug v prekladu $IF DECLARED(...) u XE2
« Odpověď #5 kdy: 08-08-2012, 23:14:17 »
Špatně jsem si to přečetl, máš pravdu, tohle přeloží taky

Kód: Delphi [Vybrat]
  1.     {$IF DECLARED(System.Variants.DispatchUnsignedAsSignedxxxxxxxxxxxxx)}
  2.       System.Variants.DispatchUnsignedAsSigned := True;
  3.     {$IFEND}
  4.  
Embarcadero MVP - Czech republic

Offline Radek Červinka

  • Administrátoři
  • Padawan
  • *****
  • Příspěvků: 3514
  • Karma: 112
    • Verze Delphi: D2007, DXE + 2 poslední
    • O Delphi v češtině
Re:FYI: Bug v prekladu $IF DECLARED(...) u XE2
« Odpověď #6 kdy: 08-08-2012, 23:24:05 »
Zeptal jsem se na to v privatnim foru, když to uznají jako chybu tak to budu reportovat. Díky za info.
Embarcadero MVP - Czech republic

Offline pepak

  • Padawan
  • ******
  • Příspěvků: 1574
  • Karma: 37
    • Pepak.net
Re:FYI: Bug v prekladu $IF DECLARED(...) u XE2
« Odpověď #7 kdy: 09-08-2012, 07:36:15 »
Jen pro upřesnění: to se týká jen pokud definujes ModalResult v Design modu (osobne nikdy)
Ty si nikdy nevytváříš vlastní dialogy?

Citace
a tyka se to pokud se nepletu jen 2 nebo 3 malo pouzivanych konstantant.
Při přechodu z Delphi 2009 na XE2 se to týká asi čtyř konstant, které jsou sice málo využívané, ale docela užitečné. A bohužel se zárukou, že jakmile Microsoft do Windows přidá další podobné konstanty, tak se to v další verzi Delphi zase rozhodí.

Přinejmenším bych považoval za vhodné, aby na to bylo někde upozorněno, podobně, jako bylo upozorněno na Integer vs. Pointer.

Offline Radek Červinka

  • Administrátoři
  • Padawan
  • *****
  • Příspěvků: 3514
  • Karma: 112
    • Verze Delphi: D2007, DXE + 2 poslední
    • O Delphi v češtině
Re:FYI: Bug v prekladu $IF DECLARED(...) u XE2
« Odpověď #8 kdy: 09-08-2012, 10:39:47 »
Jen pro upřesnění: to se týká jen pokud definujes ModalResult v Design modu (osobne nikdy)
Ty si nikdy nevytváříš vlastní dialogy?

Asi si nerozumíme. Já si nastavuji ModalResult vždy v kódu (u Action nebo u controlu). I k vůli ladění.

Citace
Přinejmenším bych považoval za vhodné, aby na to bylo někde upozorněno, podobně, jako bylo upozorněno na Integer vs. Pointer.

Já na to upozorňoval, včetně nástroje na detekci problémů :-)
http://delphi.cz/post/Delphi-XE2-a-problem-s-ModalResult-v-DFM.aspx
Embarcadero MVP - Czech republic

Offline pepak

  • Padawan
  • ******
  • Příspěvků: 1574
  • Karma: 37
    • Pepak.net
Re:FYI: Bug v prekladu $IF DECLARED(...) u XE2
« Odpověď #9 kdy: 09-08-2012, 11:47:30 »
Asi si nerozumíme. Já si nastavuji ModalResult vždy v kódu (u Action nebo u controlu). I k vůli ladění.
To musí být radost hledat, "proč mám ModalResult=mrOK, když tady v Object Inspektoru jasně vidím, že jsem to změnil na mrCancel". Chápu, že občas je přenastavování z kódu nutnost, ale nemám to rád.

Citace
Já na to upozorňoval, včetně nástroje na detekci problémů :-)
Měl jsem na mysli nějaké oficiálnější upozornění.

A máš tam k tomu drobný komentář.

Offline pepak

  • Padawan
  • ******
  • Příspěvků: 1574
  • Karma: 37
    • Pepak.net
Re:FYI: Bug v prekladu $IF DECLARED(...) u XE2
« Odpověď #10 kdy: 09-08-2012, 11:48:29 »
(Tak mě napadá, možná by nebylo od věci příspěvky týkající se ModalResultu vytáhnout do extra vlákna, sem to patří jen velmi okrajově.)