Am Fr., 11. Jan. 2019, 11:24 hat Mattias Gaertner via fpc-pascal < fpc-pascal@lists.freepascal.org> geschrieben:
> Hi, > > A type helper can change Self. > I wondered how FPC 3.3.1 handles properties and got some > unexpected results. Is this by design, a bug, or not-yet-implemented? > > {$mode objfpc}{$modeswitch typehelpers} > type > TIntHlp = type helper for word > procedure DoIt; > end; > > TBig = class > strict private > FW: word; > procedure SetW(const AValue: word); > public > property W: word read FW write SetW; > end; > > var b: TBird; > > procedure TBig.SetW(const AValue: word); > begin > // not called by type helper > writeln('TBig.SetW'); > end; > > procedure TIntHlp.DoIt; > begin > writeln('TIntHlp.DoIt START ',Self,' w=',b.w); > Self:=4; // changes b.FW directly > writeln('TIntHlp.DoIt END ',Self,' w=',b.w); > end; > > begin > b:=TBig.Create; > b.w.DoIt; > end. > This is by design. In this case DoIt is called on a temp variable that gets its value from b.w, the value of b.FW does not change (same reason why the C operators do not work on properties). Same happens with constants btw: Word(42).DoIt will work as well. Regards, Sven >
_______________________________________________ fpc-pascal maillist - fpc-pascal@lists.freepascal.org http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal