Exemple #1
0
        private void FixGotosAndMemTokens(TParsedTokenListBuilder TokenBuilder, TTokenOffset TokenOffset)
        {
            for (int i = TokenBuilder.Count - 1; i >= 0; i--)
            {
                TAttrGotoToken tk = TokenBuilder[i] as TAttrGotoToken;
                if (tk != null)
                {
                    tk.PositionOfNextPtg = TokenOffset[tk.PositionOfNextPtg];
                    continue;
                }

                TAttrOptChooseToken ochoose = TokenBuilder[i] as TAttrOptChooseToken;
                if (ochoose != null)
                {
                    for (int z = 0; z < ochoose.PositionOfNextPtg.Length; z++)
                    {
                        ochoose.PositionOfNextPtg[z] = TokenOffset[ochoose.PositionOfNextPtg[z]];
                    }
                    continue;
                }

                TSimpleMemToken mem = TokenBuilder[i] as TSimpleMemToken;
                if (mem != null)
                {
                    mem.PositionOfNextPtg = TokenOffset[mem.PositionOfNextPtg];
                }
            }
        }
Exemple #2
0
        private static void FixGotoAndMemTokens(TParsedTokenList Tokens, MemoryStream Data, int[] TokenOffset, TTokenOffset StreamPos)
        {
            foreach (int streamofs in StreamPos.Keys)
            {
                TBaseParsedToken Token = Tokens.GetToken(StreamPos[streamofs]);
                Data.Position = streamofs;

                TAttrOptIfToken oiftk = Token as TAttrOptIfToken;
                if (oiftk != null)
                {
                    WriteWord(Data, TokenOffset[oiftk.PositionOfNextPtg] - (streamofs + 2));
                    continue;
                }

                TAttrOptChooseToken ctk = Token as TAttrOptChooseToken;
                if (ctk != null)
                {
                    for (int i = 0; i < ctk.PositionOfNextPtg.Length; i++)
                    {
                        WriteWord(Data, TokenOffset[ctk.PositionOfNextPtg[i]] - streamofs);
                    }

                    continue;
                }

                TAttrGotoToken gtk = Token as TAttrGotoToken;
                if (gtk != null)
                {
                    WriteWord(Data, TokenOffset[gtk.PositionOfNextPtg] - (streamofs + 2) - 1);
                    continue;
                }

                TSimpleMemToken memtk = Token as TSimpleMemToken;
                if (memtk != null)
                {
                    WriteWord(Data, TokenOffset[memtk.PositionOfNextPtg] - (streamofs + 2));
                    continue;
                }
            }
        }