#pragma once #include #include "../CommonDef.h" #include "../metadata/MetadataDef.h" namespace hybridclr { namespace transform { class BasicBlockSpliter { public: typedef Il2CppHashSet> Uin32Set; BasicBlockSpliter(const metadata::MethodBody& body) : _body(body) { } void SplitBasicBlocks(); const std::set& GetSplitOffsets() const { return _splitOffsets; } private: const metadata::MethodBody& _body; std::set _splitOffsets; void SplitNormal(const byte* ilcodeStart, uint32_t codeSize, Uin32Set& ilOffsets); void SplitExceptionHandles(const byte* ilcodeStart, uint32_t codeSize, const std::vector& exceptionClauses); }; } }