Sign in Join

Live chat for Free Pascal, Lazarus, Delphi and every Pascal programmer.

Mailing lists / fpc-pascal / 2006-09

FPC Compiler Internal Error: 200410231 (To Whom it may Concern)

1 message · 1 person ·

Reply by email Subscribe to this list Your subscription

Read-only archive. Use j and k to move between messages.

Jason P Sage
u01g_jcore.pp(14304,3) Fatal: Internal error 200410231
u01g_jcore.pp(14304,3) Fatal: Compilation aborted

The following Construct caused an Error I haven't seen before but the workaround was simple enough so I'm just writing this for the record.

Offending construct:  AnsiString(JFC_DL(CPL.lpItem).Item_lpPTR):=p_sa;
//This version generates FPC Compiler Error-Internal: 200410231
Workaround: AnsiString(JFC_DLITEM(JFC_DL(CPL.lpItem).lpItem).lpPTR):=p_sa;

To Summarize - I think type casting across properties may in some cases be a bit much for the compiler. I could be way off, all I know is that by eliminating the properties "part" by accessing the fields directly via typecasting and dereferenced pointers.... all is well in the world.

JFC_DLITEM is a CLASS that is nothing more than an element in a homemade "double-linked-list" class named JFC_DL.

Item_lpPTR is a Property of JFC_DL and is of type pointer. It basically sets the CURRENT "ITEM"'s field in JFC_DLITEM, or lets you read it.

Here is JFC_DLITEM
-------------
//==========================================================================
===
Type JFC_DLITEM = Class
  //protected
  Public
  lpPrev: pointer;// private
  lpNext: pointer;// private
//  public
  lpPtr: pointer; // Most Basic Field
  saClassName: AnsiString;
  Constructor create; // OVERRIDE - INHERIT - Initializes pointers as NIL
  // nil.
End;
//==========================================================================
===
-------------

Here is the Definition of the JFC_DL.Item_lpPTR Property (Which sets and returns the lpPTR field in JFC_DLITEM)
---------
{start class declaration snippet}

//--------------------------------------------------------------------------
-
  // make properties work
//--------------------------------------------------------------------------
-
  Function read_item_lpPtr: pointer;
  Procedure write_item_lpptr(p_lp:pointer);
//--------------------------------------------------------------------------
-
  Property Item_lpPtr: pointer read read_item_lpPtr Write write_item_lpptr;
{end class declaration snippet}
//==========================================================================
===
Function JFC_DL.read_item_lpPtr: pointer;
//==========================================================================
===
Begin
  Result:=JFC_DLITEM(lpItem).lpPtr;
End;
//==========================================================================
===
//==========================================================================
===
Procedure JFC_DL.write_item_lpptr(p_lp:pointer);
//==========================================================================
===
Begin
  JFC_DLITEM(lpItem).lpPtr:=p_lp;
End;
//==========================================================================
===

Have a great Day.
Jason P Sage

Reply by email