diff options
author | Stephan Bergmann <sbergman@redhat.com> | 2013-09-20 10:07:29 +0200 |
---|---|---|
committer | Stephan Bergmann <sbergman@redhat.com> | 2013-09-20 10:07:48 +0200 |
commit | 652b0b6d189b4c0925ab859e81c6005a4a348a55 (patch) | |
tree | 43c9ec71bc24fac1e88300b401e2e2e987955226 /unoidl | |
parent | 13e8e9e2fe32bc77058b5869c39948b683fb81ec (diff) |
Certain UNOIDL typedefs are forbidden for historic reasons
Change-Id: I0fb4ca4e529f5f35e3619bab5e89348dd9c67faf
Diffstat (limited to 'unoidl')
-rw-r--r-- | unoidl/source/sourceprovider-parser.y | 17 |
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( |