Code: Select all
InitError* = POINTER TO InitErrorR;
InitErrorR = RECORD (Toestel.InitErrorR) END;
(*duplicate*) NameError* = POINTER TO NameErrorR;
NameErrorR = RECORD (Toestel.NameErrorR) END;
XError* = POINTER TO XErrorR;
XErrorR = RECORD (Toestel.XErrorR) END;
(*duplicate*) YError* = POINTER TO YErrorR;
YErrorR = RECORD (Toestel.YErrorR) END;
DirectionOutOfBoundsError* = POINTER TO DirectionOutOfBoundsErrorR;
DirectionOutOfBoundsErrorR = RECORD (Toestel.DirectionOutOfBoundsErrorR) END;
SpeedOutOfBoundsError* = POINTER TO SpeedOutOfBoundsErrorR;
SpeedOutOfBoundsErrorR = RECORD (Toestel.SpeedOutOfBoundsErrorR) END;
HeightOutOfBoundsError* = POINTER TO HeightOutOfBoundsErrorR;
HeightOutOfBoundsErrorR = RECORD (Toestel.HeightOutOfBoundsErrorR) END;
DestinationError* = POINTER TO DestinationErrorR;
DestinationErrorR = RECORD (Toestel.DestinationErrorR) END;
DistanceError* = POINTER TO DistanceErrorR;
DistanceErrorR = RECORD (Toestel.DistanceErrorR) END;
(*duplicate*) TypeError* = POINTER TO TypeErrorR;
TypeErrorR = RECORD (Toestel.TypeErrorR) END;
WrongTypeError* = POINTER TO WrongTypeErrorR;
WrongTypeErrorR = RECORD (Toestel.WrongTypeErrorR) END;
EDIT:
De reden waarom ik het op deze manier wou heeft veel de maken met overerving van basisprocedures die andere basisprocedures oproepen die ook overgeervd zijn. Even een tekening:
De groene pijlen geven de oproepen aan en de rode de returnvalues. Stel nu dat extended ProcB een error geeft. Deze wordt dan aan base ProcB gegeven, die op zijn beurt een fout geeft omdat de error niet van een type is dat hij kent. (de code hierboven moest dit oplossen, maar gaf een duplicat fingerprint). Door extended ProcA gewoon opnieuw te maken (dus zonder overerving) is het probleem dus vermeden.
De (nu minder dringende) vraag blijft echter nog altijd:
Wat zijn duplicate fingerprints en hoe geraak je er vanaf?