Re: [Lazarus] record literal in FPC?

2013-01-10 Thread Michael Schnell

On 01/09/2013 07:48 PM, Hans-Peter Diettrich wrote:


A with should evaluate to an address
IMHO this is an implementation detail, that any compiler can handle as 
it likes to. It also could just work as if in the source the appropriate 
record elements code are prefixed by the with argument. That does not 
prevent that during compilation as well a code using with as a fully 
expanded code can be optimized to use a pointer to the record.


(I in fact never use with as with  Delphi 7 -  which I last tested on 
that behalf - the debugger does not easily show record elements that are 
defined in a with clause. Moreover more often than not the code with 
(nested) with can get rather ambiguous and confusing.)


-Michael

--
___
Lazarus mailing list
Lazarus@lists.lazarus.freepascal.org
http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus


Re: [Lazarus] record literal in FPC?

2013-01-09 Thread Andreas Schneider
Hi,

you could also use the with-statement, that is pretty handy in such cases:

|with Edit1.CaretPos do
begin
  X := 0;
  Y := 0;
end;|

Best Regards,
Andreas


On 08.01.2013 16:30, xrfang wrote:
 Hi, 

 Is there record literal in FPC? e.g. normally, you do:

 var
cp : TPoint;

 cp.X := 0;
 cp.Y := 0;
 Edit1.CaretPos := cp;

 I would like to use literal directly, such as:

 Edit1.CaretPos := (X: 0, Y: 0); 

 But the above syntax is wrong. Is there such thing exists?

 Thanks,
 Shannon


 --
 ___
 Lazarus mailing list
 Lazarus@lists.lazarus.freepascal.org
 http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus

--
___
Lazarus mailing list
Lazarus@lists.lazarus.freepascal.org
http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus


Re: [Lazarus] record literal in FPC?

2013-01-09 Thread leledumbo
 As far as I know pascal inline directive only affect the compiler, not how
you write code. Could you please give an example how inline function helps
in my question?

Yes it does, what I mean is to create something that Point() function does
and using inline directive it's nearly the same as assigning record via
literal. Well, if you know how it's done by other compilers, record literal
assignment is actually broken down into field by field assignment. So if you
make a function that returns the record with given arguments as record
fields, with inline directive the final code would be the same. Well...
maybe you'll need some other directives as well, but it's just my thought. I
never really compare the generated code...



--
View this message in context: 
http://free-pascal-lazarus.989080.n3.nabble.com/Lazarus-record-literal-in-FPC-tp4028464p4028478.html
Sent from the Free Pascal - Lazarus mailing list archive at Nabble.com.

--
___
Lazarus mailing list
Lazarus@lists.lazarus.freepascal.org
http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus


Re: [Lazarus] record literal in FPC?

2013-01-09 Thread xrfang
Well, my purpose is to make the source code look comfortable, not how the 
binary code is generated :)

Well, again, I got a good idea from Andreas.

Thanks to all of you.

在 三, 1月 9, 2013 at 7:45 下午,leledumbo leledumbo_c...@yahoo.co.id 写道:
 As far as I know pascal inline directive only affect the compiler, not how 
you write code. Could you please give an example how inline function helps 
in my question? 

Yes it does, what I mean is to create something that Point() function does 
and using inline directive it's nearly the same as assigning record via 
literal. Well, if you know how it's done by other compilers, record literal 
assignment is actually broken down into field by field assignment. So if you 
make a function that returns the record with given arguments as record 
fields, with inline directive the final code would be the same. Well... 
maybe you'll need some other directives as well, but it's just my thought. I 
never really compare the generated code... 



-- 
View this message in context: 
http://free-pascal-lazarus.989080.n3.nabble.com/Lazarus-record-literal-in-FPC-tp4028464p4028478.html
 
Sent from the Free Pascal - Lazarus mailing list archive at Nabble.com. 

-- 
___ 
Lazarus mailing list 
Lazarus@lists.lazarus.freepascal.org 
http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus 

--
___
Lazarus mailing list
Lazarus@lists.lazarus.freepascal.org
http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus


Re: [Lazarus] record literal in FPC?

2013-01-09 Thread xrfang
Hi Adreas,

I just tried, your method did not work as expected.  It compiled ok, but didn't 
put the cursor at the end of the line as I wanted.  However, assign CaretPos a 
new TPoint worked.

Regards,

在 三, 1月 9, 2013 at 4:47 下午,Andreas Schneider ak...@gmx.de 写道:
Hi,

you could also use the with-statement, that is pretty handy in such cases:

with Edit1.CaretPos do
begin
  X := 0;
  Y := 0;
end;
Best Regards,
Andreas


On 08.01.2013 16:30, xrfang wrote:
Hi, 

Is there record literal in FPC? e.g. normally, you do:

var
   cp : TPoint;

cp.X := 0;
cp.Y := 0;
Edit1.CaretPos := cp;

I would like to use literal directly, such as:

Edit1.CaretPos := (X: 0, Y: 0); 

But the above syntax is wrong. Is there such thing exists?

Thanks,
Shannon


--
___
Lazarus mailing list
Lazarus@lists.lazarus.freepascal.org
http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus


--
___
Lazarus mailing list
Lazarus@lists.lazarus.freepascal.org
http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus


Re: [Lazarus] record literal in FPC?

2013-01-09 Thread Mattias Gaertner
On Wed, 09 Jan 2013 12:27:33 +0008
xrfang xrf...@gmail.com wrote:

 Hi Adreas,
 
 I just tried, your method did not work as expected.  It compiled ok, but 
 didn't put the cursor at the end of the line as I wanted.  However, assign 
 CaretPos a new TPoint worked.
 
 Regards,
 
 在 三, 1月 9, 2013 at 4:47 下午,Andreas Schneider ak...@gmx.de 写道:
 Hi,
 
 you could also use the with-statement, that is pretty handy in such cases:
 
 with Edit1.CaretPos do
 begin
   X := 0;
   Y := 0;
 end;

With does not work with record properties.

Mattias

--
___
Lazarus mailing list
Lazarus@lists.lazarus.freepascal.org
http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus


Re: [Lazarus] record literal in FPC?

2013-01-09 Thread Andreas Schneider
Interesting. IIRC that worked correctly in Delphi 2010 (it's been a
while ...). This /might /be a bug in FPC.

The root of the problem is how properties are handled. Afaics however,
the use of /with/ should cause it to assign the final record afterwards.
Apparently it doesn't - at least not always. Could be by design, could
be a bug. I'll check the bug tracker later and may report that. (You can
do that yourself, if you want, but sooner or later I would like that
functionality to work too, so I've a personal interest in this and
therefore would not mind to report it :-))

Greetings,
Andreas


On 09.01.2013 13:19, xrfang wrote:
 Hi Adreas,

 I just tried, your method did not work as expected.  It compiled ok,
 but didn't put the cursor at the end of the line as I wanted.
  However, assign CaretPos a new TPoint worked.

 Regards,

 ? ?, 1? 9, 2013 at 4:47 ??,Andreas Schneider ak...@gmx.de ??:

 Hi,

 you could also use the with-statement, that is pretty handy in such
 cases:

 |with Edit1.CaretPos do
 begin
   X := 0;
   Y := 0;
 end;|

 Best Regards,
 Andreas


 On 08.01.2013 16:30, xrfang wrote:
 Hi, 

 Is there record literal in FPC? e.g. normally, you do:

 var
cp : TPoint;

 cp.X := 0;
 cp.Y := 0;
 Edit1.CaretPos := cp;

 I would like to use literal directly, such as:

 Edit1.CaretPos := (X: 0, Y: 0); 

 But the above syntax is wrong. Is there such thing exists?

 Thanks,
 Shannon


 --
 ___
 Lazarus mailing list
 Lazarus@lists.lazarus.freepascal.org
 http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus




 --
 ___
 Lazarus mailing list
 Lazarus@lists.lazarus.freepascal.org
 http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus

--
___
Lazarus mailing list
Lazarus@lists.lazarus.freepascal.org
http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus


Re: [Lazarus] record literal in FPC?

2013-01-09 Thread xrfang
I don't know if it's related to the fact that TEdit.CaretPos.X (or Y) is read 
only, or as Mattias said, the with syntax cannot work with record anyway... :-)

This should be a problem (if any) with lazarus not fpc.

Shannon

在 三, 1月 9, 2013 at 8:27 下午,Andreas Schneider ak...@gmx.de 写道:
Interesting. IIRC that worked correctly in Delphi 2010 (it's been a while ...). 
This might be a bug in FPC.

The root of the problem is how properties are handled. Afaics however, the use 
of with should cause it to assign the final record afterwards. Apparently it 
doesn't - at least not always. Could be by design, could be a bug. I'll check 
the bug tracker later and may report that. (You can do that yourself, if you 
want, but sooner or later I would like that functionality to work too, so I've 
a personal interest in this and therefore would not mind to report it :-))

Greetings,
Andreas


On 09.01.2013 13:19, xrfang wrote:
Hi Adreas,

I just tried, your method did not work as expected.  It compiled ok, but didn't 
put the cursor at the end of the line as I wanted.  However, assign CaretPos a 
new TPoint worked.

Regards,

在 三, 1月 9, 2013 at 4:47 下午,Andreas Schneider ak...@gmx.de 写道:
Hi,

you could also use the with-statement, that is pretty handy in such cases:

with Edit1.CaretPos do
begin
  X := 0;
  Y := 0;
end;
Best Regards,
Andreas


On 08.01.2013 16:30, xrfang wrote:
Hi, 

Is there record literal in FPC? e.g. normally, you do:

var
   cp : TPoint;

cp.X := 0;
cp.Y := 0;
Edit1.CaretPos := cp;

I would like to use literal directly, such as:

Edit1.CaretPos := (X: 0, Y: 0); 

But the above syntax is wrong. Is there such thing exists?

Thanks,
Shannon


--
___
Lazarus mailing list
Lazarus@lists.lazarus.freepascal.org
http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus




--
___
Lazarus mailing list
Lazarus@lists.lazarus.freepascal.org
http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus


--
___
Lazarus mailing list
Lazarus@lists.lazarus.freepascal.org
http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus


Re: [Lazarus] record literal in FPC?

2013-01-09 Thread Mattias Gaertner
On Wed, 09 Jan 2013 13:27:50 +0100
Andreas Schneider ak...@gmx.de wrote:

 Interesting. IIRC that worked correctly in Delphi 2010 (it's been a
 while ...). This /might /be a bug in FPC.
 
 The root of the problem is how properties are handled. Afaics however,
 the use of /with/ should cause it to assign the final record afterwards.

That would be nice. At the moment fpc does not do that.

 Apparently it doesn't - at least not always. Could be by design, could
 be a bug. I'll check the bug tracker later and may report that. (You can
 do that yourself, if you want, but sooner or later I would like that
 functionality to work too, so I've a personal interest in this and
 therefore would not mind to report it :-))

Feel free to submit a feature request to the fpc bug tracker.

Mattias

--
___
Lazarus mailing list
Lazarus@lists.lazarus.freepascal.org
http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus


Re: [Lazarus] record literal in FPC?

2013-01-09 Thread Paul Ishenin

09.01.13, 20:34, Mattias Gaertner пишет:



Apparently it doesn't - at least not always. Could be by design, could
be a bug. I'll check the bug tracker later and may report that. (You can
do that yourself, if you want, but sooner or later I would like that
functionality to work too, so I've a personal interest in this and
therefore would not mind to report it :-))


Feel free to submit a feature request to the fpc bug tracker.


First check whether it works delphi mode.

Best regards,
Paul Ishenin

--
___
Lazarus mailing list
Lazarus@lists.lazarus.freepascal.org
http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus


Re: [Lazarus] record literal in FPC?

2013-01-09 Thread Andreas Schneider
On Wednesday, January 9, 2013, 01:40pm Paul Ishenin wrote:
 First check whether it works delphi mode.

Apparently,  it  even works in mode objfpc. But only when the property
directly  reads/writes  a member. If there is a setter method, it will
still  compile  but  NOT  actually  change the record. Neither in mode
objfpc nor in mode delphi.

Example attached. I will also open a bug report.

-- 
Best Regards,
Andreas

fpcwith.lpr
Description: Binary data
--
___
Lazarus mailing list
Lazarus@lists.lazarus.freepascal.org
http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus


Re: [Lazarus] record literal in FPC?

2013-01-09 Thread Hans-Peter Diettrich

xrfang schrieb:
I don't know if it's related to the fact that TEdit.CaretPos.X (or Y) is 
read only, or as Mattias said, the with syntax cannot work with record 
anyway... :-)


A with should evaluate to an address, but a Delphi compatible 
*property* doesn't have an address.


DoDi

--
___
Lazarus mailing list
Lazarus@lists.lazarus.freepascal.org
http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus


[Lazarus] record literal in FPC?

2013-01-08 Thread xrfang
Hi, 

Is there record literal in FPC? e.g. normally, you do:

var
   cp : TPoint;

cp.X := 0;
cp.Y := 0;
Edit1.CaretPos := cp;

I would like to use literal directly, such as:

Edit1.CaretPos := (X: 0, Y: 0); 

But the above syntax is wrong. Is there such thing exists?

Thanks,
Shannon--
___
Lazarus mailing list
Lazarus@lists.lazarus.freepascal.org
http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus


Re: [Lazarus] record literal in FPC?

2013-01-08 Thread ik
On Tue, Jan 8, 2013 at 5:30 PM, xrfang xrf...@gmail.com wrote:
 Hi,

 Is there record literal in FPC? e.g. normally, you do:

 var
cp : TPoint;

 cp.X := 0;
 cp.Y := 0;
 Edit1.CaretPos := cp;

 I would like to use literal directly, such as:

 Edit1.CaretPos := (X: 0, Y: 0);

 But the above syntax is wrong. Is there such thing exists?

no, but try the point function


 Thanks,
 Shannon

 --
 ___
 Lazarus mailing list
 Lazarus@lists.lazarus.freepascal.org
 http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus


--
___
Lazarus mailing list
Lazarus@lists.lazarus.freepascal.org
http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus


Re: [Lazarus] record literal in FPC?

2013-01-08 Thread Howard Page-Clark

On 08/1/13 3:30, xrfang wrote:


I would like to use literal directly, such as:

Edit1.CaretPos := (X: 0, Y: 0);


You can use a typed constant thus:

const Origin: TPoint = (x:0; y:0);

begin
...
 Edit1.CaretPos := Origin;
...


--
___
Lazarus mailing list
Lazarus@lists.lazarus.freepascal.org
http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus


Re: [Lazarus] record literal in FPC?

2013-01-08 Thread xrfang
Thanks, but what I want is to AVOID any kind of declarations. So I will use the 
Point() function suggested by ik.

在 三, 1月 9, 2013 at 12:26 上午,Howard Page-Clark h...@talktalk.net 写道:
On 08/1/13 3:30, xrfang wrote: 

 I would like to use literal directly, such as: 
 
 Edit1.CaretPos := (X: 0, Y: 0); 

You can use a typed constant thus: 

const Origin: TPoint = (x:0; y:0); 

begin 
.. 
Edit1.CaretPos := Origin; 
.. 


-- 
___ 
Lazarus mailing list 
Lazarus@lists.lazarus.freepascal.org 
http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus
--
___
Lazarus mailing list
Lazarus@lists.lazarus.freepascal.org
http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus


Re: [Lazarus] record literal in FPC?

2013-01-08 Thread leledumbo
If you declare an inline function producing the record, the effect would be
the same with that literal record.



--
View this message in context: 
http://free-pascal-lazarus.989080.n3.nabble.com/Lazarus-record-literal-in-FPC-tp4028464p4028474.html
Sent from the Free Pascal - Lazarus mailing list archive at Nabble.com.

--
___
Lazarus mailing list
Lazarus@lists.lazarus.freepascal.org
http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus


Re: [Lazarus] record literal in FPC?

2013-01-08 Thread Xiangrong Fang
Hi leledumbo,

As far as I know pascal inline directive only affect the compiler, not how
you write code. Could you please give an example how inline function helps
in my question?

Thanks

2013/1/9 leledumbo leledumbo_c...@yahoo.co.id

 If you declare an inline function producing the record, the effect would be
 the same with that literal record.



 --
 View this message in context:
 http://free-pascal-lazarus.989080.n3.nabble.com/Lazarus-record-literal-in-FPC-tp4028464p4028474.html
 Sent from the Free Pascal - Lazarus mailing list archive at Nabble.com.

 --
 ___
 Lazarus mailing list
 Lazarus@lists.lazarus.freepascal.org
 http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus

--
___
Lazarus mailing list
Lazarus@lists.lazarus.freepascal.org
http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus