| [9] | 1 | COMPILER
 | 
|---|
 | 2 | 
 | 
|---|
 | 3 | ----------------------------------------------------------------------
 | 
|---|
 | 4 | 1. 'Finally' clause is not called when exit is encountered
 | 
|---|
 | 5 | 
 | 
|---|
 | 6 | ----------------------------------------------------------------------
 | 
|---|
 | 7 | 2. Optimisation causes incorrect code.
 | 
|---|
 | 8 | Compiler optimisation often generates incorrect code for expressions. 
 | 
|---|
 | 9 | Must be turned off in most programs. This makes Sibyl somewhat slow
 | 
|---|
 | 10 | for intensive calculations
 | 
|---|
 | 11 | 
 | 
|---|
 | 12 | ----------------------------------------------------------------------
 | 
|---|
 | 13 | 3. Internal errors.
 | 
|---|
 | 14 | ( see 9 for one example )
 | 
|---|
 | 15 | 
 | 
|---|
 | 16 | ----------------------------------------------------------------------
 | 
|---|
 | 17 | 4. Allowed to construct abstract classes
 | 
|---|
 | 18 | - ?
 | 
|---|
 | 19 | 
 | 
|---|
 | 20 | ----------------------------------------------------------------------
 | 
|---|
 | 21 | 5. Compiler and resource compiler won't open readonly source files.
 | 
|---|
 | 22 | 
 | 
|---|
 | 23 | ----------------------------------------------------------------------
 | 
|---|
 | 24 | 6. Resource compiler includes files, relative to current dir, not current file path.
 | 
|---|
 | 25 | - Fixed in Fp4
 | 
|---|
 | 26 | 
 | 
|---|
 | 27 | ----------------------------------------------------------------------
 | 
|---|
 | 28 | 7. No quick way to append to AnsiString
 | 
|---|
 | 29 | Need to optimise s:= s + 'blah'; like delphi, or make a procedure
 | 
|---|
 | 30 | ? Perhaps with optimisation on, this would be done?
 | 
|---|
 | 31 | 
 | 
|---|
 | 32 | ----------------------------------------------------------------------
 | 
|---|
 | 33 | 8. .rc files are not included in make
 | 
|---|
 | 34 | (Same as Delphi ;-( )
 | 
|---|
 | 35 | 
 | 
|---|
 | 36 | ----------------------------------------------------------------------
 | 
|---|
 | 37 | 9. IDE compiler crashes if command line compiler used while IDE running.
 | 
|---|
 | 38 | (On units that the IDE project is using)
 | 
|---|
 | 39 | "Internal compiler error" or "Undefined identifier: TForms.CreateWnd!O7272!"
 | 
|---|
 | 40 | 
 | 
|---|
 | 41 | ----------------------------------------------------------------------
 | 
|---|
 | 42 | 10. Cannot pass nil as a value for procedure/function/method variable parameters 
 | 
|---|
 | 43 | For example:
 | 
|---|
 | 44 | 
 | 
|---|
 | 45 | TDoBob = procedure of object;
 | 
|---|
 | 46 | Procedure DoABobFunction( Function: TDoBob );
 | 
|---|
 | 47 | ...
 | 
|---|
 | 48 | 
 | 
|---|
 | 49 | DoABobFunction( nil )
 | 
|---|
 | 50 | crashes.
 | 
|---|
 | 51 | 
 | 
|---|
 | 52 | ----------------------------------------------------------------------
 | 
|---|
 | 53 | 11. Functions nested inside class methods generate faulty references to self
 | 
|---|
 | 54 | The nested function can refer to properties/methods of the class it is in
 | 
|---|
 | 55 | the method of, but the code crashes. 
 | 
|---|
 | 56 | Workaround: refer to self explicitly.
 | 
|---|
 | 57 | 
 | 
|---|
 | 58 | ----------------------------------------------------------------------
 | 
|---|
 | 59 | 12. Make does not notice "implicit" dependencies
 | 
|---|
 | 60 | e.g. ArchiveStore contains TRevision. Interace changes.
 | 
|---|
 | 61 | CachedArchive uses ArchiveStore
 | 
|---|
 | 62 | FIlelistArchive uses elements of revision via an array property but does not ave ArchiveStore in Uses
 | 
|---|
 | 63 | 
 | 
|---|
 | 64 | ----------------------------------------------------------------------
 | 
|---|
 | 65 | 13. Produces corrupt debug data in Publics section on large projects
 | 
|---|
 | 66 | - On large projects the IDE cannot debug with a message like:
 | 
|---|
 | 67 |   Debugger Error: 'Object 387 in module D:...newview.exe 
 | 
|---|
 | 68 |   not found (PUBLICS)'
 | 
|---|
 | 69 | The end of the publics table is garbage.
 | 
|---|