Change this :
function TBaseValue.InvalidCast(TargetType: string): Exception;
begin
raise EInvalidCast.CreateFmt('Cannot cast %s to %s',
[TypeName, TargetType]);
end;
into this :
function TBaseValue.InvalidCast(TargetType: string): Exception;
begin
Result := EInvalidCast.CreateFmt('Cannot cast %s to %s',
[TypeName, TargetType]);
end;