summaryrefslogtreecommitdiffstats
path: root/codemaker
diff options
context:
space:
mode:
Diffstat (limited to 'codemaker')
-rw-r--r--codemaker/source/cppumaker/cpputype.cxx55
-rw-r--r--codemaker/test/cppumaker/makefile.mk6
-rw-r--r--codemaker/test/cppumaker/test_codemaker_cppumaker.cxx16
-rw-r--r--codemaker/test/cppumaker/types.idl4
4 files changed, 68 insertions, 13 deletions
diff --git a/codemaker/source/cppumaker/cpputype.cxx b/codemaker/source/cppumaker/cpputype.cxx
index 9622c25c4c4e..79e4f0a2e522 100644
--- a/codemaker/source/cppumaker/cpputype.cxx
+++ b/codemaker/source/cppumaker/cpputype.cxx
@@ -2490,9 +2490,8 @@ sal_Bool StructureType::dumpHxxFile(
RTFieldAccess access = RT_ACCESS_INVALID;
OString fieldName;
OString fieldType;
- sal_uInt16 i = 0;
- for (i=0; i < fieldCount; i++)
+ for (sal_uInt16 i=0; i < fieldCount; i++)
{
access = m_reader.getFieldFlags(i);
@@ -2527,7 +2526,7 @@ sal_Bool StructureType::dumpHxxFile(
sal_Bool superHasMember = dumpSuperMember(o, superType, sal_True);
- for (i=0; i < fieldCount; i++)
+ for (sal_uInt16 i=0; i < fieldCount; i++)
{
access = m_reader.getFieldFlags(i);
@@ -2565,7 +2564,7 @@ sal_Bool StructureType::dumpHxxFile(
first = sal_False;
}
- for (i=0; i < fieldCount; i++)
+ for (sal_uInt16 i=0; i < fieldCount; i++)
{
access = m_reader.getFieldFlags(i);
@@ -2590,6 +2589,54 @@ sal_Bool StructureType::dumpHxxFile(
o << "{\n}\n\n";
}
+ if (isPolymorphic() && fieldCount > 0) {
+ o << indent();
+ dumpTemplateHead(o);
+ o << "\n";
+ o << indent();
+ o << "inline " << m_name;
+ dumpTemplateParameters(o);
+ o << "\n";
+ o << indent();
+ o << "make_" << m_name << "(";
+ for (sal_uInt16 i = 0; i < fieldCount; ++i) {
+ if (i > 0) {
+ o << ", ";
+ }
+ rtl::OString type(
+ rtl::OUStringToOString(
+ m_reader.getFieldTypeName(i), RTL_TEXTENCODING_UTF8));
+ if ((m_reader.getFieldFlags(i) & RT_ACCESS_PARAMETERIZED_TYPE) != 0)
+ {
+ dumpTypeParameterName(o, type);
+ o << " const &";
+ } else {
+ dumpType(o, type, true, true);
+ }
+ o << " "
+ << rtl::OUStringToOString(
+ m_reader.getFieldName(i), RTL_TEXTENCODING_UTF8)
+ << "_";
+ }
+ o << ") SAL_THROW(())\n";
+ o << indent() << "{\n";
+ inc();
+ o << indent() << "return " << m_name;
+ dumpTemplateParameters(o);
+ o << "(";
+ for (sal_uInt16 i = 0; i < fieldCount; ++i) {
+ if (i > 0) {
+ o << ", ";
+ }
+ o << rtl::OUStringToOString(
+ m_reader.getFieldName(i), RTL_TEXTENCODING_UTF8)
+ << "_";
+ }
+ o << ");\n";
+ dec();
+ o << indent() << "}\n\n";
+ }
+
if (codemaker::cppumaker::dumpNamespaceClose(o, m_typeName, false)) {
o << "\n";
}
diff --git a/codemaker/test/cppumaker/makefile.mk b/codemaker/test/cppumaker/makefile.mk
index db4227155f0a..bab3dcbb30ea 100644
--- a/codemaker/test/cppumaker/makefile.mk
+++ b/codemaker/test/cppumaker/makefile.mk
@@ -59,8 +59,8 @@ $(SHL1OBJS): $(MISC)$/$(TARGET).cppumaker.flag
$(MISC)$/$(TARGET).cppumaker.flag: $(BIN)$/cppumaker$(EXECPOST)
$(MISC)$/$(TARGET).cppumaker.flag: $(MISC)$/$(TARGET).rdb
- $(MKDIRHIER) $(MISC)$/$(TARGET)$/inc
- $(BIN)$/cppumaker$(EXECPOST) -O$(MISC)$/$(TARGET)$/inc -BUCR -C $< \
- $(SOLARBINDIR)$/udkapi.rdb
+ $(AUGMENT_LIBRARY_PATH) $(BIN)$/cppumaker$(EXECPOST) \
+ -O$(MISC)$/$(TARGET)$/inc -BUCR -C $< $(SOLARBINDIR)$/udkapi.rdb
$(TOUCH) $@
$(MISC)$/$(TARGET).rdb: $(MISC)$/$(TARGET)$/types.urd
@@ -72,4 +72,4 @@ $(MISC)$/$(TARGET)$/types.urd: types.idl
$(IDLC) -O$(MISC)$/$(TARGET) -I$(SOLARIDLDIR) -cid -we $<
test .PHONY: $(SHL1TARGETN)
- testshl2 $<
+ $(AUGMENT_LIBRARY_PATH) testshl2 $<
diff --git a/codemaker/test/cppumaker/test_codemaker_cppumaker.cxx b/codemaker/test/cppumaker/test_codemaker_cppumaker.cxx
index ba29d1822650..2f5c75fc1d92 100644
--- a/codemaker/test/cppumaker/test_codemaker_cppumaker.cxx
+++ b/codemaker/test/cppumaker/test_codemaker_cppumaker.cxx
@@ -382,7 +382,7 @@ class Test: public CppUnit::TestFixture {
public:
void testBigStruct();
- void testPolyCharStruct();
+ void testPolyStruct();
void testExceptions();
@@ -390,7 +390,7 @@ public:
CPPUNIT_TEST_SUITE(Test);
CPPUNIT_TEST(testBigStruct);
- CPPUNIT_TEST(testPolyCharStruct);
+ CPPUNIT_TEST(testPolyStruct);
CPPUNIT_TEST(testExceptions);
CPPUNIT_TEST(testConstants);
CPPUNIT_TEST_SUITE_END();
@@ -444,9 +444,13 @@ void Test::testBigStruct() {
CPPUNIT_ASSERT_EQUAL(guard.p->m22.getLength(), static_cast< sal_Int32 >(0));
CPPUNIT_ASSERT_EQUAL(guard.p->m23.getLength(), static_cast< sal_Int32 >(0));
-#if defined __GNUC__ && __GNUC__ >= 3
+#if defined __GNUC__ && __GNUC__ >= 3 // see CPPU_GCC3_ALIGN
CPPUNIT_ASSERT_EQUAL(
+#if defined X86_64
+ static_cast< std::size_t >(24),
+#else
static_cast< std::size_t >(16),
+#endif
sizeof (test::codemaker::cppumaker::AlignmentDerivedStruct));
#endif
@@ -464,7 +468,7 @@ void Test::testBigStruct() {
CPPUNIT_ASSERT_EQUAL(typelib_TypeClass_CHAR, std->aBase.ppTypeRefs[10]->eTypeClass); // char m11;
}
-void Test::testPolyCharStruct() {
+void Test::testPolyStruct() {
CPPUNIT_ASSERT_EQUAL(
rtl::OUString(
RTL_CONSTASCII_USTRINGPARAM(
@@ -472,6 +476,10 @@ void Test::testPolyCharStruct() {
(com::sun::star::uno::makeAny(
test::codemaker::cppumaker::Struct< sal_Unicode, sal_Int16 >()).
getValueType().getTypeName()));
+ CPPUNIT_ASSERT_EQUAL(
+ (test::codemaker::cppumaker::make_Struct< sal_uInt32, sal_Bool >(5, 0).
+ member1),
+ static_cast< sal_uInt32 >(5));
}
namespace {
diff --git a/codemaker/test/cppumaker/types.idl b/codemaker/test/cppumaker/types.idl
index 798d7e088ee0..e6de0e1c5379 100644
--- a/codemaker/test/cppumaker/types.idl
+++ b/codemaker/test/cppumaker/types.idl
@@ -28,8 +28,8 @@
*
************************************************************************/
-//TODO: Do not depend on types for which C++ header files are only generated
-// later in the build process in offuh:
+/*TODO: Do not depend on types for which C++ header files are only generated
+ later in the build process in offuh: */
#include "com/sun/star/lang/ClassNotFoundException.idl"
#include "com/sun/star/lang/IllegalAccessException.idl"
#include "com/sun/star/lang/Locale.idl"