public static HighEHCluster Read(TagRepository rpa, CatalogReader catalog, HighMethodBodyParseContext methodBody, HighCfgNodeHandle[] cfgNodes, CodeLocationTag baseLocation, bool haveDebugInfo, BinaryReader reader) { uint numTerminators = reader.ReadUInt32(); HighEscapePathTerminator[] escapePathTerminators = new HighEscapePathTerminator[numTerminators]; for (uint i = 0; i < numTerminators; i++) { HighEscapePathTerminator terminator = HighEscapePathTerminator.Read(rpa, catalog, methodBody, cfgNodes, reader); escapePathTerminators[i] = terminator; } HighProtectedRegion protRegion = HighProtectedRegion.Read(rpa, catalog, methodBody, baseLocation, haveDebugInfo, reader); return new HighEHCluster(protRegion, escapePathTerminators); }
public HighEHCluster(HighProtectedRegion protRegion, HighEscapePathTerminator[] escapePathTerminators) { m_protRegion = protRegion; m_escapePathTerminators = escapePathTerminators; }
private void AddEscapePaths(HighEscapePathTerminator[] escapePathTerminators) { foreach (HighEscapePathTerminator terminator in escapePathTerminators) { RloInitExceptionsPass pass = m_initPass; if (pass.m_routeCompactionDict.ContainsKey(terminator.EscapePath)) throw new RpaCompileException("Duplicate exception escape route"); pass.m_routeCompactionDict.Add(terminator.EscapePath, pass.m_routeCompactionDict.Count); QueueNode(terminator.CfgNode.Value); } }