From 2533f075d2cadb7b00a2fd6aee0f66225a5e0b92 Mon Sep 17 00:00:00 2001 From: binary Date: Fri, 10 Jan 2020 16:39:46 +0800 Subject: [PATCH] Reorder the VtableIdx --- src/bin/maple | Bin 2752840 -> 2752840 bytes src/deplibs/libmaple_driverutil.a | Bin 11239236 -> 11239236 bytes src/deplibs/libmplutil.a | Bin 11186348 -> 11186348 bytes src/mpl2mpl/include/vtable_analysis.h | 2 +- src/mpl2mpl/src/reflection_analysis.cpp | 3 ++- src/mpl2mpl/src/vtable_analysis.cpp | 6 +++--- 6 files changed, 6 insertions(+), 5 deletions(-) diff --git a/src/bin/maple b/src/bin/maple index d8cfc18687a19a788873fcf4d8b67b9b4c3ad940..f606b801c06e3e79d4c028b25039f7715b14f755 100755 GIT binary patch delta 2124 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 E1J7DiI{*Lx diff --git a/src/mpl2mpl/include/vtable_analysis.h b/src/mpl2mpl/include/vtable_analysis.h index 075bf7f34c..811a3a9280 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 8df81da752..b90d3b635d 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 5fb5cefd03..277eef1a6b 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(); } -- Gitee