[fpc-pascal] Checking assignment compatibility

Mark Morgan Lloyd markMLl.fpc-pascal at telemetry.co.uk
Mon Jan 6 11:12:22 CET 2014


Michael Van Canneyt wrote:
> On Mon, 6 Jan 2014, Mark Morgan Lloyd wrote:
> 
>> Michael Van Canneyt wrote:
>>> On Sun, 5 Jan 2014, Mark Morgan Lloyd wrote:
>>>
>>>> Simulating a C-style conditional, I can do this
>>>>
>>>> function tf(const q: qword; const qt, qf: TObject): TObject; inline;
>>>>
>>>> begin
>>>>  Assert(TypeOf(qt) = TypeOf(result));
>>>
>>> This is always true. Everything descends from TOBject.
>>>
>>> But assuming the result is not TObject, it would be
>>>
>>> Assert((qt=Nil) or (qt.Inheritsfrom(TheResultClass))
>>
>> So again skipping the nil check for simplicity, this compiles but are 
>> the semantics right?
>>
>> Assert(qt.ClassType.InheritsFrom(result.ClassType));
> 
> The classtype is not needed.
> 
> The semantics are not right IMHO, but I'd have to see the original C 
> stuff to be able to say with certainty.

It's not C, it's Javascript :-(

     this.P1 = (this.PB1L ? this.PB : this.PA);
     this.P2 = (this.PB1L ? this.PA : this.PB);

where PB1L is 0 or 1, PA and PB are objects representing emulated CPUs 
(one or more defined), P1 indicates the first (master) CPU and P2 
indicates the second (slave).  PB1L was- on the original system- a 
switch on the engineer's panel indicating which of the processors was to 
run as the master (i.e. it handled the MCP, all interrupts and so on) 
and which as the slave.

I thought it would be good practice to abstract the conditional operator 
to a function- noting the unavoidable problem that both parameters will 
be evaluated, which is not really an issue when they're simple object 
references- but it's beginning to look as though it would be far simpler 
to have a simple  if  statement inline.

-- 
Mark Morgan Lloyd
markMLl .AT. telemetry.co .DOT. uk

[Opinions above are the author's, not those of his employers or colleagues]



More information about the fpc-pascal mailing list