[fpc-devel] A lot of stuff broke, looking for advice

Anthony Walter sysrpl at gmail.com
Mon Jul 8 15:26:42 CEST 2013


I have a problem and am looking for advice. The problem is I had been
developing on 64-bit Linux using a trunk version of fpc from maybe 2-3
months back and now much of my core library no longer works when I use the
latest trunk version of fpc.

Here is what I am doing...

I am working towards publishing the next version of my minimal cross
platform game library (http://baregame.org) which includes static linking
by default, android support, video textures, programatic audio effects plus
3d sound mixing, post processing effects, much improved vector graphics
(everything is done with glsl shaders now), and much more.

I had two tasks for the week.

1) Make builds and test the IDE/framework installer for 32/64bit Windows
and Linux including a publish to an Android device
2) Make a series of videos demonstrating what coding with my framework
looks like showing what and it does and how the various systems within it
fit together on all platforms.

Working on task #1 I have all items working and all my milestones met on
64-bit Linux. I am now trying to recompile and test on 32-bit Linux and
then will move on to Windows. While working on testing my changes on 32-bit
Linux I encountered some problems I had mentioned in a previous email and
bug list (records with interfaces not being initialized/finalized
correctly). I decided test an upgraded compiler (which I will need to
support eventually) and now a lot of what I've written breaks.

My System and Types unit define a quite a few of generic base classes in
the Delphi style including generic constraints. I have types such as:

TEnumerator<T> = class(TInterfacedObject, IEnumerator<T>)
TArrayList<T> = record
TCollection<TItem> = class(TInterface, IEnumerable<TItem>)
TInterfaceCollection<TItem: IInterface> = class(TCollection<IInterface>)
TOwnerCollection<TItem: TObject> = class(TCollection<TItem>)
TOwnerNamedCollection<TItem: TObject> = class(TOwnerCollection<TItem>,
INamedEnumerable<TItem>)
TList<TItem> = class(TAssignable, IEnumerable<TItem>, ICloneable<TObject>)
public
  type ItemType = TItem;
  function GetEnumerator: IEnumerator<ItemType>;
TIndexedList<TItem> = class(TList<TItem>)
TObjectList<TItem: TObject> = class(TIndexedList<TItem>)
TNamedObjectList<TItem: TObject> = class(TObjectList<TItem>,
INamedEnumerable<TItem>)
TStringList = class(TIndexedList<string>)
IStringEnumerable = IEnumerable<string>
TStringKeys = class(TInterface, IStringEnumerable)

ect...

All units my framework uses these types and those two units heavily, and
with an updated fpc trunk compiler they break in a big way. I suspect it
may take a quite a bit of effort on my part to get my codebase and working
with the current trunk version of fpc based on the number and types of
errors I am seeing, some of which are related to generics working
differently (I still have a problem with interfaces in not being
initialized properly at times). I am not sure how to proceed in fixing
these as I feel like this will happen again with another future release of
fpc breaking compatibility with the generics I've written. What should I do?
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freepascal.org/pipermail/fpc-devel/attachments/20130708/8bbfdc56/attachment.html>


More information about the fpc-devel mailing list