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]; } } }
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; } } }