Compilation Phase

  1. All the possible data objects are created and reset.

  2. Each frame is decoded, beginning with the first frame, and sequentially proceeding through each successive frame. Therefore, if a value is changed in your internal data object during the processing of a frame, you know that the value will be retained when the next frame calls your data object.

  3. Just before the first time a data object is called in a frame, PUT_DATA_INTO_A_BYTE_ARRAY is called to get a copy of the beginning value of the data object (the data object puts data into a byte array for the frame compiler to read). Note that this is done for each frame.

  4. All frame processing is done, including calls to methods that may use and/or change the data object.

  5. The next protocol information is determined, possibly with the help of the data object.

  6. All of the data objects are given a chance to change or replace the data that they supplied in step 3 through a call to OPTIMIZE_DATA.

  7. The frame's protocol stack information and all the data objects are saved in a record in the FRM file.