Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
 public HighEHCluster(HighProtectedRegion protRegion, HighEscapePathTerminator[] escapePathTerminators)
 {
     m_protRegion = protRegion;
     m_escapePathTerminators = escapePathTerminators;
 }
Ejemplo n.º 3
0
            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);
                }
            }