diff --git a/src/bin/jbc2mpl b/src/bin/jbc2mpl index 70fdfdc8872767e33ff933163b87fe2b4191dbee..a4cfb2595a988853a2fba76f35d57ccc25f9714f 100755 Binary files a/src/bin/jbc2mpl and b/src/bin/jbc2mpl differ diff --git a/src/bin/maple b/src/bin/maple index 2dc97b7628817e874a17746d4fae65bec18db582..330fdb14d288c78591fbab87e7f3feead2171bb0 100755 Binary files a/src/bin/maple and b/src/bin/maple differ diff --git a/src/maple_ir/src/bin_mpl_export.cpp b/src/maple_ir/src/bin_mpl_export.cpp index fcd5b6af9223b7d03f9087ca9ae8369a94ebc8bc..f3da6190089d16061abfa6f9cf67a175ce320c35 100644 --- a/src/maple_ir/src/bin_mpl_export.cpp +++ b/src/maple_ir/src/bin_mpl_export.cpp @@ -112,7 +112,7 @@ void OutputConstSt(const MIRConst &constVal, BinaryMplExport &mplExport) { } } -void InitOutputConstFactory() { +static bool InitOutputConstFactory() { RegisterFactoryFunction(kConstInt, OutputConstInt); RegisterFactoryFunction(kConstAddrof, OutputConstAddrof); RegisterFactoryFunction(kConstAddrofFunc, OutputConstAddrofFunc); @@ -123,6 +123,7 @@ void InitOutputConstFactory() { RegisterFactoryFunction(kConstDoubleConst, OutputConstDouble); RegisterFactoryFunction(kConstAggConst, OutputConstAgg); RegisterFactoryFunction(kConstStConst, OutputConstSt); + return true; } void OutputTypeScalar(const MIRType &ty, BinaryMplExport &mplExport) { @@ -263,7 +264,7 @@ void OutputTypeInterface(const MIRType &ty, BinaryMplExport &mplExport) { void OutputTypeConstString(const MIRType&, BinaryMplExport&) {} -void InitOutputTypeFactory() { +static bool InitOutputTypeFactory() { RegisterFactoryFunction(kTypeScalar, OutputTypeScalar); RegisterFactoryFunction(kTypePointer, OutputTypePointer); RegisterFactoryFunction(kTypeByName, OutputTypeByName); @@ -283,6 +284,7 @@ void InitOutputTypeFactory() { RegisterFactoryFunction(kTypeInterface, OutputTypeInterface); RegisterFactoryFunction(kTypeInterfaceIncomplete, OutputTypeInterface); RegisterFactoryFunction(kTypeConstString, OutputTypeConstString); + return true; } }; // namespace @@ -291,8 +293,10 @@ int BinaryMplExport::typeMarkOffset = 0; BinaryMplExport::BinaryMplExport(MIRModule &md) : mod(md) { Init(); - InitOutputConstFactory(); - InitOutputTypeFactory(); + static auto constPolicyLoader = InitOutputConstFactory(); + (void)constPolicyLoader; + static auto typePolicyLoader = InitOutputTypeFactory(); + (void)typePolicyLoader; } uint8 BinaryMplExport::Read() { diff --git a/src/maple_me/include/irmap.h b/src/maple_me/include/irmap.h index 7c81727c39d55b5e023e3fbf787503e2062b2f5f..57298d79f90fe3584f7fb25dc630e6f7c9765bba 100644 --- a/src/maple_me/include/irmap.h +++ b/src/maple_me/include/irmap.h @@ -38,7 +38,8 @@ class IRMap : public AnalysisResult { lpreTmps(irMapAlloc.Adapter()), vst2Decrefs(irMapAlloc.Adapter()), meBuilder(irMapAlloc) { - InitMeStmtFactory(); + static auto stmtBuildPolicyLoader = InitMeStmtFactory(); + (void)stmtBuildPolicyLoader; } virtual ~IRMap() = default; @@ -246,7 +247,7 @@ class IRMap : public AnalysisResult { void BuildPhiMeNode(BB&); BB *GetFalseBrBB(CondGotoMeStmt&); void SetMeExprOpnds(MeExpr &meExpr, BaseNode &mirNode); - void InitMeStmtFactory() const; + static bool InitMeStmtFactory(); MeStmt *BuildDassignMeStmt(StmtNode &stmt, AccessSSANodes &ssaPart); MeStmt *BuildRegassignMeStmt(StmtNode &stmt, AccessSSANodes &ssaPart); MeStmt *BuildIassignMeStmt(StmtNode &stmt, AccessSSANodes &ssaPart); diff --git a/src/maple_me/include/me_builder.h b/src/maple_me/include/me_builder.h index f8884227895d169f29e10050b8ac4ddbf335c798..83e85c7beab8b636d3d73c0e330fdd1b336f6417 100644 --- a/src/maple_me/include/me_builder.h +++ b/src/maple_me/include/me_builder.h @@ -1,5 +1,5 @@ /* - * Copyright (c) [2019] Huawei Technologies Co.,Ltd.All rights reserved. + * Copyright (c) [2019-2020] Huawei Technologies Co.,Ltd.All rights reserved. * * OpenArkCompiler is licensed under the Mulan PSL v1. * You can use this software according to the terms and conditions of the Mulan PSL v1. @@ -20,7 +20,8 @@ namespace maple { class MeBuilder { public: explicit MeBuilder(MapleAllocator &allocator) : allocator(allocator) { - InitMeExprBuildFactory(); + static auto exprBuildPolicyLoader = InitMeExprBuildFactory(); + (void)exprBuildPolicyLoader; } virtual ~MeBuilder() = default; @@ -50,7 +51,7 @@ class MeBuilder { return meExpr; } - void InitMeExprBuildFactory() const; + static bool InitMeExprBuildFactory(); MeExpr *BuildAddrofMeExpr(BaseNode &mirNode) const; MeExpr *BuildAddroffuncMeExpr(BaseNode &mirNode) const; MeExpr *BuildGCMallocMeExpr(BaseNode &mirNode) const; diff --git a/src/maple_me/src/irmap.cpp b/src/maple_me/src/irmap.cpp index 7d4d4489020624e73d8bc7514688e8d56af5704f..9dd80cb862b7d1b1d18945fe44d1688966afca72 100644 --- a/src/maple_me/src/irmap.cpp +++ b/src/maple_me/src/irmap.cpp @@ -936,7 +936,7 @@ MeExpr *IRMap::CreateAddrofMeExprFromSymbol(MIRSymbol &st, PUIdx puIdx) { return HashMeExpr(addrOfMe); } -void IRMap::InitMeStmtFactory() const { +bool IRMap::InitMeStmtFactory() { RegisterFactoryFunction(OP_dassign, &IRMap::BuildDassignMeStmt); RegisterFactoryFunction(OP_regassign, &IRMap::BuildRegassignMeStmt); RegisterFactoryFunction(OP_iassign, &IRMap::BuildIassignMeStmt); @@ -970,5 +970,6 @@ void IRMap::InitMeStmtFactory() const { RegisterFactoryFunction(OP_throw, &IRMap::BuildThrowMeStmt); RegisterFactoryFunction(OP_syncenter, &IRMap::BuildSyncMeStmt); RegisterFactoryFunction(OP_syncexit, &IRMap::BuildSyncMeStmt); + return true; } } // namespace maple diff --git a/src/maple_me/src/me_builder.cpp b/src/maple_me/src/me_builder.cpp index 94d10102bd098efdc74839da72c7e4bf7cb554fd..258242f283d7acd29a2f38bd26d019d3c5f1c8a2 100644 --- a/src/maple_me/src/me_builder.cpp +++ b/src/maple_me/src/me_builder.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) [2019] Huawei Technologies Co.,Ltd.All rights reserved. + * Copyright (c) [2019-2020] Huawei Technologies Co.,Ltd.All rights reserved. * * OpenArkCompiler is licensed under the Mulan PSL v1. * You can use this software according to the terms and conditions of the Mulan PSL v1. @@ -233,7 +233,7 @@ UnaryMeStmt &MeBuilder::BuildUnaryMeStmt(Opcode op, MeExpr &opnd) const { return unaryMeStmt; } -void MeBuilder::InitMeExprBuildFactory() const { +bool MeBuilder::InitMeExprBuildFactory() { RegisterFactoryFunction(OP_addrof, &MeBuilder::BuildAddrofMeExpr); RegisterFactoryFunction(OP_addroffunc, &MeBuilder::BuildAddroffuncMeExpr); RegisterFactoryFunction(OP_gcmalloc, &MeBuilder::BuildGCMallocMeExpr); @@ -293,5 +293,6 @@ void MeBuilder::InitMeExprBuildFactory() const { RegisterFactoryFunction(OP_array, &MeBuilder::BuildNaryMeExprForArray); RegisterFactoryFunction(OP_intrinsicop, &MeBuilder::BuildNaryMeExprForIntrinsicop); RegisterFactoryFunction(OP_intrinsicopwithtype, &MeBuilder::BuildNaryMeExprForIntrinsicWithType); + return true; } } // namespace maple diff --git a/src/maple_util/include/factory.h b/src/maple_util/include/factory.h index 6e6ac23250080acf8f110d5478eb2bf9ee936819..abf88e4758b6878cdd4f807dfe404ff3604c84bd 100644 --- a/src/maple_util/include/factory.h +++ b/src/maple_util/include/factory.h @@ -31,14 +31,14 @@ class ObjectFactory final { } } - std::unique_ptr Create(const key_type &key, TArgs &&...Args) const { + std::unique_ptr Create(const key_type &key, TArgs ...args) const { auto it = creator.find(key); - return it == creator.end() ? std::unique_ptr() : (it->second)(std::forward(Args)...); + return it == creator.end() ? std::unique_ptr() : (it->second)(std::forward(args)...); } template - static std::unique_ptr DefaultCreator(TArgs &&...Args) { - return std::make_unique(std::forward(Args)...); + static std::unique_ptr DefaultCreator(TArgs ...args) { + return std::make_unique(std::forward(args)...); } static ObjectFactory &ins() { @@ -66,8 +66,8 @@ inline void RegisterFactoryObject() { } template -inline auto CreateProductObject(const typename TFactory::key_type &key, TArgs &&...Args) { - return TFactory::ins().Create(key, std::forward(Args)...); +inline auto CreateProductObject(const typename TFactory::key_type &key, TArgs &&...args) { + return TFactory::ins().Create(key, std::forward(args)...); } template