diff options
-rw-r--r-- | codemaker/source/javamaker/classfile.cxx | 6 | ||||
-rw-r--r-- | codemaker/source/javamaker/classfile.hxx | 3 | ||||
-rw-r--r-- | codemaker/source/javamaker/javatype.cxx | 9 |
3 files changed, 7 insertions, 11 deletions
diff --git a/codemaker/source/javamaker/classfile.cxx b/codemaker/source/javamaker/classfile.cxx index 1df31aea6947..23bc000248bb 100644 --- a/codemaker/source/javamaker/classfile.cxx +++ b/codemaker/source/javamaker/classfile.cxx @@ -312,7 +312,7 @@ void ClassFile::Code::instrSwap() { void ClassFile::Code::instrTableswitch( Code const * defaultBlock, sal_Int32 low, - std::vector< Code * > const & blocks) + std::vector< std::unique_ptr<Code> > const & blocks) { // tableswitch <0--3 byte pad> <defaultbyte1> <defaultbyte2> <defaultbyte3> // <defaultbyte4> <lowbyte1> <lowbyte2> <lowbyte3> <lowbyte4> <highbyte1> @@ -331,7 +331,7 @@ void ClassFile::Code::instrTableswitch( pos2 += defaultBlock->m_code.size(); //FIXME: overflow appendU4(m_code, static_cast< sal_uInt32 >(low)); appendU4(m_code, static_cast< sal_uInt32 >(low + (size - 1))); - for (Code *pCode : blocks) + for (std::unique_ptr<Code> const & pCode : blocks) { if (pCode == nullptr) { appendU4(m_code, defaultOffset); @@ -342,7 +342,7 @@ void ClassFile::Code::instrTableswitch( } } appendStream(m_code, defaultBlock->m_code); - for (Code *pCode : blocks) + for (std::unique_ptr<Code> const & pCode : blocks) { if (pCode != nullptr) { appendStream(m_code, pCode->m_code); diff --git a/codemaker/source/javamaker/classfile.hxx b/codemaker/source/javamaker/classfile.hxx index be6e3a36abe4..179fea21ef77 100644 --- a/codemaker/source/javamaker/classfile.hxx +++ b/codemaker/source/javamaker/classfile.hxx @@ -24,6 +24,7 @@ #include <sal/types.h> #include <map> +#include <memory> #include <utility> #include <vector> @@ -107,7 +108,7 @@ public: void instrTableswitch( Code const * defaultBlock, sal_Int32 low, - std::vector< Code * > const & blocks); + std::vector< std::unique_ptr<Code> > const & blocks); void loadIntegerConstant(sal_Int32 value); void loadStringConstant(rtl::OString const & value); diff --git a/codemaker/source/javamaker/javatype.cxx b/codemaker/source/javamaker/javatype.cxx index 9d683a53ce08..4cd5b50050b0 100644 --- a/codemaker/source/javamaker/javatype.cxx +++ b/codemaker/source/javamaker/javatype.cxx @@ -749,7 +749,7 @@ void handleEnumType( std::unique_ptr< ClassFile::Code > defCode(cf->newCode()); defCode->instrAconstNull(); defCode->instrAreturn(); - std::vector< ClassFile::Code * > blocks; + std::vector< std::unique_ptr<ClassFile::Code> > blocks; //FIXME: pointers contained in blocks may leak sal_Int32 last = SAL_MAX_INT32; for (const auto& pair : map) @@ -764,14 +764,9 @@ void handleEnumType( std::unique_ptr< ClassFile::Code > blockCode(cf->newCode()); blockCode->instrGetstatic(className, pair.second, classDescriptor); blockCode->instrAreturn(); - blocks.push_back(blockCode.get()); - blockCode.release(); + blocks.push_back(std::move(blockCode)); } code->instrTableswitch(defCode.get(), min, blocks); - for (ClassFile::Code *p : blocks) - { - delete p; - } } else{ std::unique_ptr< ClassFile::Code > defCode(cf->newCode()); defCode->instrAconstNull(); |