diff --git a/src/bin/maple b/src/bin/maple index d8cfc18687a19a788873fcf4d8b67b9b4c3ad940..f606b801c06e3e79d4c028b25039f7715b14f755 100755 Binary files a/src/bin/maple and b/src/bin/maple differ diff --git a/src/deplibs/libmaple_driverutil.a b/src/deplibs/libmaple_driverutil.a index 9a8ffaffed92a2b1d5414269c44d4bf59ad6f8a3..0a278241b4db6475765c4e598589657560f1a085 100644 Binary files a/src/deplibs/libmaple_driverutil.a and b/src/deplibs/libmaple_driverutil.a differ diff --git a/src/deplibs/libmplutil.a b/src/deplibs/libmplutil.a index 69e550ebcc6ca29d0ac1d5b705cbef4f4362e71f..246d81511572a66a579ca70128df051a0944fff5 100644 Binary files a/src/deplibs/libmplutil.a and b/src/deplibs/libmplutil.a differ diff --git a/src/mpl2mpl/include/vtable_analysis.h b/src/mpl2mpl/include/vtable_analysis.h index 075bf7f34cfbee9351680d12f368279a2d04afec..811a3a9280c3d69ec8d619b7a49a328ed93ecf44 100644 --- a/src/mpl2mpl/include/vtable_analysis.h +++ b/src/mpl2mpl/include/vtable_analysis.h @@ -31,13 +31,13 @@ class VtableAnalysis : public FuncOptimizeImpl { VtableAnalysis(MIRModule *mod, KlassHierarchy *kh, bool dump); ~VtableAnalysis() = default; static std::string DecodeBaseNameWithType(const MIRFunction &func); + static bool IsVtableCandidate(const MIRFunction &func); void ProcessFunc(MIRFunction *func) override; FuncOptimizeImpl *Clone() override { return new VtableAnalysis(*this); } private: - bool IsVtableCandidate(const MIRFunction &func) const; bool CheckOverrideForCrossPackage(const MIRFunction &baseMethod, const MIRFunction &currMethod) const; void AddMethodToTable(MethodPtrVector &methodTable, MethodPair &methodPair); void GenVtableList(const Klass &klass); diff --git a/src/mpl2mpl/src/reflection_analysis.cpp b/src/mpl2mpl/src/reflection_analysis.cpp index 8df81da752a254cf5c61c4d92c20e59b68fce54b..b90d3b635d0f60355fa0fb186f48f8ceb5a8d26a 100644 --- a/src/mpl2mpl/src/reflection_analysis.cpp +++ b/src/mpl2mpl/src/reflection_analysis.cpp @@ -35,6 +35,7 @@ constexpr uint64 kMethodNotVirtual = 0x00000001; constexpr uint64 kMethodFinalize = 0x00000002; constexpr uint64 kMethodAbstract = 0x00000010; constexpr uint64 kFieldOffsetIspOffset = 0x00000001; +constexpr int32 kMethodNotFound = -10; constexpr int kModPublic = 1; // 0x00000001 constexpr int kModPrivate = 2; // 0x00000002 @@ -621,7 +622,7 @@ uint32 ReflectionAnalysis::GetMethodInVtabIndex(const Klass &klass, const MIRFun } } if (!findMethod) { - constexpr int notFoundMethod = -10; + constexpr int notFoundMethod = kMethodNotFound; methodInVtabIndex = notFoundMethod; } // Check VtabIndex, int16. diff --git a/src/mpl2mpl/src/vtable_analysis.cpp b/src/mpl2mpl/src/vtable_analysis.cpp index 5fb5cefd038eb7572a2aeb1394b0f875ac200e21..277eef1a6b46dfacc0cc064f456e373012b93759 100644 --- a/src/mpl2mpl/src/vtable_analysis.cpp +++ b/src/mpl2mpl/src/vtable_analysis.cpp @@ -51,7 +51,7 @@ VtableAnalysis::VtableAnalysis(MIRModule *mod, KlassHierarchy *kh, bool dump) : } } -bool VtableAnalysis::IsVtableCandidate(const MIRFunction &func) const { +bool VtableAnalysis::IsVtableCandidate(const MIRFunction &func) { return func.GetAttr(FUNCATTR_virtual) && !func.GetAttr(FUNCATTR_private) && !func.GetAttr(FUNCATTR_static); } @@ -107,10 +107,10 @@ void VtableAnalysis::GenVtableList(const Klass &klass) { } } else { // it's a class MIRClassType *curType = klass.GetMIRClassType(); - Klass *superKlass = klass.GetSuperKlass(); // prepare vtable_methods // first is vtable from parents. since it's single inheritance, we copy it directly - if (superKlass != nullptr) { + if (klass.HasSuperKlass()) { + Klass *superKlass = klass.GetSuperKlass(); MIRStructType *partenType = superKlass->GetMIRStructType(); curType->GetVTableMethods() = partenType->GetVTableMethods(); }