<div>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. </div>
<div><br></div><div>Here is what I am doing...</div><div><br></div>I am working towards publishing the next version of my minimal cross platform game library (<a href="http://baregame.org">http://baregame.org</a>) 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. <div>
<br></div><div>I had two tasks for the week.</div><div><br></div><div>1) Make builds and test the IDE/framework installer for 32/64bit Windows and Linux including a publish to an Android device</div><div>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.</div>
<div><br></div><div>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.</div>
<div><br></div><div>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:</div><div><br></div><div>TEnumerator<T> = class(TInterfacedObject, IEnumerator<T>)</div>
<div>TArrayList<T> = record</div><div>TCollection<TItem> = class(TInterface, IEnumerable<TItem>)</div><div>TInterfaceCollection<TItem: IInterface> = class(TCollection<IInterface>)</div><div>TOwnerCollection<TItem: TObject> = class(TCollection<TItem>)</div>
<div>TOwnerNamedCollection<TItem: TObject> = class(TOwnerCollection<TItem>, INamedEnumerable<TItem>)</div><div>TList<TItem> = class(TAssignable, IEnumerable<TItem>, ICloneable<TObject>)</div>
<div>public</div><div> type ItemType = TItem;</div><div> function GetEnumerator: IEnumerator<ItemType>;</div><div>TIndexedList<TItem> = class(TList<TItem>)</div><div>TObjectList<TItem: TObject> = class(TIndexedList<TItem>)</div>
<div>TNamedObjectList<TItem: TObject> = class(TObjectList<TItem>, INamedEnumerable<TItem>)</div><div>TStringList = class(TIndexedList<string>)</div><div>IStringEnumerable = IEnumerable<string></div>
<div>TStringKeys = class(TInterface, IStringEnumerable)</div><div><br></div><div>ect...</div><div><br></div><div>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?</div>