<p>Am 04.01.2014 00:17 schrieb "Mark Morgan Lloyd" <<a href="mailto:markMLl.fpc-pascal@telemetry.co.uk">markMLl.fpc-pascal@telemetry.co.uk</a>>:<br>
>>><br>
>>> b5500centralcontrol.pas(119,18) Error: Incompatible types: got<br>
>>> "ShortInt" expected "ByteBool"<br>
><br>
> >><br>
> >> b5500centralcontrol.pas(119,18) Error: Incompatible types: got<br>
> >> "ShortInt" expected "ByteBool"<br>
> ><br>
> > You need to cast nevertheless. It's just that they can be used in<br>
> > place of e.g. BOOL parameters for WinAPI functions whereby the<br>
> > argument value is passed like the underlying non-Boolean datatype.<br>
><br>
> Thanks Sven, noted and understood. In practice I've changed them all to qwords since this is the native size of the system being emulated, which leads to another question. If I have a field and property like<br>

><br>
> fPB1L: qword;<br>
> ..<br>
> property PB1L: qword read: fPB1L write SetPB1L;<br>
><br>
> procedure ...SetPB1L(p: qword);<br>
> begin<br>
>   Assert((p = 0) or (p = 1));<br>
>   fPB1L := p<br>
> end;<br>
></p>
<p>And why don't you use Boolean64? That's a 64 bit Boolean type with True being 1 and False being 0 (like the normal 1 Byte one).</p>
<p>> is there an unobtrusive way of changing the property to effectively be<br>
><br>
> property PB1L: qword read fPB1L write fPB1L;<br>
><br>
> when assertions aren't being generated? The obvious way would be to use lots of  $IFOPT C+  but is there anything more concise and maintainable? Can methods be inlined, and could the compiler successfully optimise-out a method which was a simple assignment?</p>

<p>As long as you don't declare the getter/setter methods as "virtual", but as "inline" I *think* that it should work. Just test it and look at the generated assembler code (using -al option). If it works then then there should be no "call" instruction.</p>

<p>Regards,<br>
Sven</p>