🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: pl.comp.lang.pascal
7 messages
7 total messages Started by webmajsterek Thu, 14 Oct 2010 10:02
Property -- podwujna składnia
#93128
Author: webmajsterek
Date: Thu, 14 Oct 2010 10:02
34 lines
1588 bytes
taki kodzik 

Type PCell=^TCell;
     TCell=Record 
          x,y,value:Integer;
     end;

Type TMyClass=class
        private
          fArea:Array of Array of PCell;
        public
          property Items[x,y:Iteger]:PCell Read Get;Default;
        end;


var MyClass:TMyClass;

teraz jak w kodzie odwolam 
       MyClass[1,1].x=10;   // poprawnie 
lub 
      MyClass[1,1]^.x:=10;  // tez kompilator akceptuje ;

ale jak zrobie 
      with MyClass[1,1]^  do begin  // tylko taka forme akceptuje kompilator  
           x:=10;
      end;   

ktoś potrafi to  wytłumaczyć  dlaczego tak się dzieje ??



-- 
Wysłano z serwisu OnetNiusy: http://niusy.onet.pl
Re: Property -- podwujna składnia
#93129
Author: Grzegorz Skoczylas
Date: Thu, 14 Oct 2010 10:52
20 lines
1649 bytes
W dniu 2010-10-14 12:02, webmajsterek@poczta.onet.pl pisze:

> teraz jak w kodzie odwolam
>         MyClass[1,1].x=10;   // poprawnie

Zgodnie z definicją języka taki zapis (bez „^”) nie jest poprawny. 
Kompilator go akceptuje, ale tylko w niektórych kontekstach.

Wydaje mi się, że jest to albo błąd w analizatorze składni (powodujący 
jednak poprawne kompilowanie kodu), albo próba „poprawienia” pomyłek 
programistów.

Uważam, że nie należy tak kodować.

-- 
Pozdrawiam,

Grzegorz Skoczylas
http://gskoczylas.rekord.pl
----------------------------------------------
Re: Property -- podwujna składnia
#93131
Author: Łukasz 'Maly' Ostrowski
Date: Thu, 14 Oct 2010 12:30
38 lines
1924 bytes
On Thu, 14 Oct 2010 12:02:36 +0200, webmajsterek@poczta.onet.pl wrote:
> Type PCell=^TCell;
>      TCell=Record 
>           x,y,value:Integer;
>      end;
>
> <snip>
> 
> var MyClass:TMyClass;
> 
> MyClass[1,1].x=10;   // poprawnie 
> MyClass[1,1]^.x:=10;  // tez kompilator akceptuje ;
> 
> ale jak zrobie 
>
> with MyClass[1,1]^  do begin  // tylko taka forme akceptuje kompilator  
>    x:=10;
> end;   
> 
> ktoś potrafi to  wytłumaczyć  dlaczego tak się dzieje ??

Albo jakiś syntactic sugar w fpc, albo błąd w analizatorze
który traktuje jakby ^TCell był równoważny class[w 
uproszczeniu ^object, więc w uproszczeniu jest ;-)]
i poprawia . na dereference i member access operator z
automatu w AST, bo takie ma "ukryte" znaczenie member
access operator dla class.

A przy with nie ma explicite member access
operatora i pewnie dlatego się kompilator gubi.

To drugie to domysł, nie kojarzę żeby był taki cukier
składniowy w fpc kiedykolwiek ;-), więc zakładam
że to bug jakiś.

-- 
Pozdrawiam,
Łukasz 'Maly' Ostrowski.      http://l3v.pl/
Re: Property -- podwujna składnia
#93132
Author: Grzegorz Skoczylas
Date: Thu, 14 Oct 2010 13:14
47 lines
2492 bytes
W dniu 2010-10-14 14:30, Łukasz 'Maly' Ostrowski pisze:
> On Thu, 14 Oct 2010 12:02:36 +0200, webmajsterek@poczta.onet.pl wrote:
>> Type PCell=^TCell;
>>       TCell=Record
>>            x,y,value:Integer;
>>       end;
>>
>> <snip>
>>
>> var MyClass:TMyClass;
>>
>> MyClass[1,1].x=10;   // poprawnie
>> MyClass[1,1]^.x:=10;  // tez kompilator akceptuje ;
>>
>> ale jak zrobie
>>
>> with MyClass[1,1]^  do begin  // tylko taka forme akceptuje kompilator
>>     x:=10;
>> end;
>>
>> ktoś potrafi to  wytłumaczyć  dlaczego tak się dzieje ??
>
> Albo jakiś syntactic sugar w fpc, albo błąd w analizatorze
> który traktuje jakby ^TCell był równoważny class[w
> uproszczeniu ^object, więc w uproszczeniu jest ;-)]
> i poprawia . na dereference i member access operator z
> automatu w AST, bo takie ma "ukryte" znaczenie member
> access operator dla class.
>
> A przy with nie ma explicite member access
> operatora i pewnie dlatego się kompilator gubi.

Też sądzę, że mniej więcej o to chodzi.

> To drugie to domysł, nie kojarzę żeby był taki cukier
> składniowy w fpc kiedykolwiek ;-), więc zakładam
> że to bug jakiś.

Podejrzewam, że zostało to zaimplementowane dla zgodności z Delphi, 
gdzie też to działa podobnie.

-- 
Pozdrawiam,

Grzegorz Skoczylas
http://gskoczylas.rekord.pl
----------------------------------------------
Re: Property -- podwujna składnia
#93133
Author: Łukasz 'Maly' Ostrowski
Date: Thu, 14 Oct 2010 13:25
12 lines
1377 bytes
On Thu, 14 Oct 2010 15:14:12 +0200, Grzegorz Skoczylas wrote:
> Podejrzewam, że zostało to zaimplementowane dla zgodności z Delphi, 
> gdzie też to działa podobnie.

Jeżeli w dialekcie Delphi Object Pascala tak się to zachowuje,
to mamy bezpośredni powód dla którego w FPC tak jest.
Od początku twierdzili że chcą trzymać kompatybilność z 
Delphi i cross-kompilowalność źródeł z D.

-- 
Pozdrawiam,
Łukasz 'Maly' Ostrowski.      http://l3v.pl/
Re: Property -- podwujna składnia
#93130
Author: Wiktor S.
Date: Thu, 14 Oct 2010 19:39
14 lines
1391 bytes
Grzegorz Skoczylas wrote:
> W dniu 2010-10-14 12:02, webmajsterek@poczta.onet.pl pisze:
>
>> teraz jak w kodzie odwolam
>>         MyClass[1,1].x=10;   // poprawnie
>
> Zgodnie z definicją języka taki zapis (bez „^”) nie jest poprawny.
> Kompilator go akceptuje, ale tylko w niektórych kontekstach.

Jest to zdecydowanie ficzer (udokumentowany) kompilatora. Słusznie czy 
niesłusznie, nie jest to bug.

-- 
Azarien
Re: Property -- podwujna składnia
#93135
Author: Wiktor S.
Date: Thu, 14 Oct 2010 19:41
11 lines
1277 bytes
> To drugie to domysł, nie kojarzę żeby był taki cukier
> składniowy w fpc kiedykolwiek ;-), więc zakładam
> że to bug jakiś.

Jest taki w Delphi. Nie jest to bug.
FPC pozwala na to w trybie delphi {$MODE DELPHI}. W trybie "własnym" {$MODE 
OBJFPC} to nie przejdzie.


-- 
Azarien
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads