summaryrefslogtreecommitdiff
path: root/unoidl
diff options
context:
space:
mode:
authorStephan Bergmann <sbergman@redhat.com>2013-09-20 10:07:29 +0200
committerStephan Bergmann <sbergman@redhat.com>2013-09-20 10:07:48 +0200
commit652b0b6d189b4c0925ab859e81c6005a4a348a55 (patch)
tree43c9ec71bc24fac1e88300b401e2e2e987955226 /unoidl
parent13e8e9e2fe32bc77058b5869c39948b683fb81ec (diff)
Certain UNOIDL typedefs are forbidden for historic reasons
Change-Id: I0fb4ca4e529f5f35e3619bab5e89348dd9c67faf
Diffstat (limited to 'unoidl')
-rw-r--r--unoidl/source/sourceprovider-parser.y17
1 files changed, 16 insertions, 1 deletions
diff --git a/unoidl/source/sourceprovider-parser.y b/unoidl/source/sourceprovider-parser.y
index 4d4f8e692b64..e410f35f8d4c 100644
--- a/unoidl/source/sourceprovider-parser.y
+++ b/unoidl/source/sourceprovider-parser.y
@@ -1810,8 +1810,23 @@ typedefDefn:
deprecated_opt published_opt TOK_TYPEDEF type identifier ';'
{
unoidl::detail::SourceProviderScannerData * data = yyget_extra(yyscanner);
- unoidl::detail::SourceProviderType t(*$4); //TODO: service/singleton typedefs?
+ unoidl::detail::SourceProviderType t(*$4);
delete $4;
+ // There is no good reason to forbid typedefs to VOID and to instantiated
+ // polymorphic struct types, but some old client code of registry data
+ // expects this typedef restriction (like the assert(false) default in
+ // handleTypedef in codemaker/source/javamaker/javatype.cxx), so forbid
+ // them for now:
+ switch (t.type) {
+ case unoidl::detail::SourceProviderType::TYPE_VOID:
+ case unoidl::detail::SourceProviderType::TYPE_INSTANTIATED_POLYMORPHIC_STRUCT:
+ error(@4, yyscanner, "bad typedef type");
+ YYERROR;
+ case unoidl::detail::SourceProviderType::TYPE_PARAMETER:
+ assert(false); // this cannot happen
+ default:
+ break;
+ }
OUString name(convertToFullName(data, $5));
if (!data->entities.insert(
std::map<OUString, unoidl::detail::SourceProviderEntity>::value_type(