[Libreoffice-commits] core.git: idlc/Executable_idlc.mk idlc/inc idlc/source idlc/test

Stephan Bergmann sbergman at redhat.com
Thu Jan 30 08:54:08 PST 2014


 idlc/Executable_idlc.mk          |    2 
 idlc/inc/idlc/astarray.hxx       |   55 ----
 idlc/inc/idlc/astdeclaration.hxx |    3 
 idlc/inc/idlc/astunion.hxx       |   61 -----
 idlc/inc/idlc/astunionbranch.hxx |   39 ---
 idlc/inc/idlc/astunionlabel.hxx  |   45 ---
 idlc/inc/idlc/errorhandler.hxx   |   15 -
 idlc/inc/idlc/idlctypes.hxx      |   33 --
 idlc/source/astarray.cxx         |   66 -----
 idlc/source/astdeclaration.cxx   |    3 
 idlc/source/astscope.cxx         |    6 
 idlc/source/astunion.cxx         |  382 --------------------------------
 idlc/source/errorhandler.cxx     |   71 ------
 idlc/source/fehelper.cxx         |   21 -
 idlc/source/idlc.cxx             |    5 
 idlc/source/parser.y             |  453 ---------------------------------------
 idlc/source/scanner.l            |    5 
 idlc/test/struct.idl             |    6 
 idlc/test/typelookup.idl         |    4 
 idlc/test/union.idl              |   55 ----
 20 files changed, 7 insertions(+), 1323 deletions(-)

New commits:
commit 8e71d9400bd350d63723c5489ddaadb3d3610baf
Author: Stephan Bergmann <sbergman at redhat.com>
Date:   Thu Jan 30 17:53:02 2014 +0100

    Remove UNOIDL "array" and "union" vaporware from idlc
    
    Change-Id: Iccd5a78b54620796cfde672388b70ad97d17b7a5

diff --git a/idlc/Executable_idlc.mk b/idlc/Executable_idlc.mk
index 2eaa30c..1ddc72a 100644
--- a/idlc/Executable_idlc.mk
+++ b/idlc/Executable_idlc.mk
@@ -58,8 +58,6 @@ $(eval $(call gb_Executable_add_exception_objects,idlc,\
     idlc/source/astoperation \
     idlc/source/astconstant \
     idlc/source/astenum \
-    idlc/source/astarray \
-    idlc/source/astunion \
     idlc/source/astexpression \
     idlc/source/astservice \
 ))
diff --git a/idlc/inc/idlc/astarray.hxx b/idlc/inc/idlc/astarray.hxx
deleted file mode 100644
index e75e010..0000000
--- a/idlc/inc/idlc/astarray.hxx
+++ /dev/null
@@ -1,55 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- *   Licensed to the Apache Software Foundation (ASF) under one or more
- *   contributor license agreements. See the NOTICE file distributed
- *   with this work for additional information regarding copyright
- *   ownership. The ASF licenses this file to you under the Apache
- *   License, Version 2.0 (the "License"); you may not use this file
- *   except in compliance with the License. You may obtain a copy of
- *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
- */
-#ifndef _IDLC_ASTARRAY_HXX_
-#define _IDLC_ASTARRAY_HXX_
-
-#include <idlc/asttype.hxx>
-#include <idlc/astscope.hxx>
-
-class AstArray : public AstType
-{
-public:
-    AstArray(const OString& name, AstType* pType, const ExprList& rDimExpr, AstScope* pScope);
-    AstArray(AstType* pType, const ExprList& rDimExpr, AstScope* pScope);
-
-    virtual ~AstArray() {}
-
-    AstType* getType()
-        { return m_pType; }
-    void setType(AstType* pType)
-        {
-            m_pType = pType;
-            setName(makeName());
-        }
-    ExprList* getDimExpressions()
-        {   return &m_dimExpressions; }
-    sal_uInt32 getDimension()
-        {   return m_dimension; }
-
-private:
-    OString makeName();
-
-    AstType*    m_pType;
-    sal_uInt32  m_dimension;
-    ExprList    m_dimExpressions;
-};
-
-#endif // _IDLC_ASTARRAY_HXX_
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/idlc/inc/idlc/astdeclaration.hxx b/idlc/inc/idlc/astdeclaration.hxx
index a52565a..424e5b2 100644
--- a/idlc/inc/idlc/astdeclaration.hxx
+++ b/idlc/inc/idlc/astdeclaration.hxx
@@ -43,8 +43,6 @@ enum NodeType
     NT_property,            // Denotes an property
     NT_operation,           // Denotes an operation
     NT_parameter,           // Denotes an op. parameter
-    NT_union,               // Denotes a union
-    NT_union_branch,        // Denotes a union branch
     NT_struct,              // Denotes either a plain struct type, or a
                             // polymorphic struct type template
     NT_type_parameter,      // Denotes a type parameter of a polymorphic struct
@@ -53,7 +51,6 @@ enum NodeType
     NT_member,              // Denotes a member in structure, exception
     NT_enum,                // Denotes an enumeration
     NT_enum_val,            // Denotes an enum. value
-    NT_array,               // Denotes an IDL array
     NT_sequence,            // Denotes an IDL sequence
     NT_typedef,             // Denotes a typedef
     NT_predefined,          // Denotes a predefined type
diff --git a/idlc/inc/idlc/astunion.hxx b/idlc/inc/idlc/astunion.hxx
deleted file mode 100644
index d1b9b47..0000000
--- a/idlc/inc/idlc/astunion.hxx
+++ /dev/null
@@ -1,61 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- *   Licensed to the Apache Software Foundation (ASF) under one or more
- *   contributor license agreements. See the NOTICE file distributed
- *   with this work for additional information regarding copyright
- *   ownership. The ASF licenses this file to you under the Apache
- *   License, Version 2.0 (the "License"); you may not use this file
- *   except in compliance with the License. You may obtain a copy of
- *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
- */
-#ifndef _IDLC_ASTUNION_HXX_
-#define _IDLC_ASTUNION_HXX_
-
-#include <idlc/aststruct.hxx>
-#include <idlc/astunionbranch.hxx>
-
-class AstUnion : public AstStruct
-{
-public:
-    AstUnion(const OString& name, AstType* pDiscType, AstScope* pScope);
-    virtual ~AstUnion();
-
-    AstType* getDiscrimantType()
-        { return m_pDiscriminantType; }
-    ExprType getDiscrimantExprType()
-        { return m_discExprType; }
-
-    virtual sal_Bool dump(RegistryKey& rKey);
-
-    virtual AstDeclaration* addDeclaration(AstDeclaration* pDecl);
-protected:
-    // Look up a branch by node pointer
-    AstUnionBranch* lookupBranch(AstUnionBranch* pBranch);
-
-    // Look up the branch with the "default" label
-    AstUnionBranch* lookupDefault(sal_Bool bReportError = sal_True );
-
-    // Look up a branch given a branch with a label. This is used to
-    // check for duplicate labels
-    AstUnionBranch* lookupLabel(AstUnionBranch* pBranch);
-
-    // Look up a union branch given an enumerator. This is used to
-    // check for duplicate enum labels
-    AstUnionBranch* lookupEnum(AstUnionBranch* pBranch);
-
-private:
-    AstType*    m_pDiscriminantType;
-    ExprType    m_discExprType;
-};
-
-#endif // _IDLC_ASTUNION_HXX_
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/idlc/inc/idlc/astunionbranch.hxx b/idlc/inc/idlc/astunionbranch.hxx
deleted file mode 100644
index 9c114da..0000000
--- a/idlc/inc/idlc/astunionbranch.hxx
+++ /dev/null
@@ -1,39 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- *   Licensed to the Apache Software Foundation (ASF) under one or more
- *   contributor license agreements. See the NOTICE file distributed
- *   with this work for additional information regarding copyright
- *   ownership. The ASF licenses this file to you under the Apache
- *   License, Version 2.0 (the "License"); you may not use this file
- *   except in compliance with the License. You may obtain a copy of
- *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
- */
-#ifndef _IDLC_ASTUNIONBRANCH_HXX_
-#define _IDLC_ASTUNIONBRANCH_HXX_
-
-#include <idlc/astmember.hxx>
-#include <idlc/astunionlabel.hxx>
-
-class AstUnionBranch : public AstMember
-{
-public:
-    AstUnionBranch(AstUnionLabel* pLabel, AstType const * pType, const OString& name, AstScope* pScope);
-    virtual ~AstUnionBranch();
-
-    AstUnionLabel* getLabel()
-        { return m_pLabel; }
-private:
-    AstUnionLabel*  m_pLabel;
-};
-
-#endif // _IDLC_ASTUNIONBRANCH_HXX_
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/idlc/inc/idlc/astunionlabel.hxx b/idlc/inc/idlc/astunionlabel.hxx
deleted file mode 100644
index a280dfb..0000000
--- a/idlc/inc/idlc/astunionlabel.hxx
+++ /dev/null
@@ -1,45 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- *   Licensed to the Apache Software Foundation (ASF) under one or more
- *   contributor license agreements. See the NOTICE file distributed
- *   with this work for additional information regarding copyright
- *   ownership. The ASF licenses this file to you under the Apache
- *   License, Version 2.0 (the "License"); you may not use this file
- *   except in compliance with the License. You may obtain a copy of
- *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
- */
-#ifndef _IDLC_ASTUNIONLABEL_HXX_
-#define _IDLC_ASTUNIONLABEL_HXX_
-
-enum UnionLabel
-{
-    UL_default,     // Label is "default"
-    UL_label        // Regular label
-};
-
-class AstUnionLabel
-{
-public:
-    AstUnionLabel(UnionLabel labelKind, AstExpression* pExpr);
-    virtual ~AstUnionLabel();
-
-    UnionLabel getLabelKind()
-        { return m_label; }
-    AstExpression* getLabelValue()
-        { return m_pLabelValue; }
-private:
-    UnionLabel      m_label;
-    AstExpression*  m_pLabelValue;
-};
-
-#endif // _IDLC_ASTUNIONLABEL_HXX_
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/idlc/inc/idlc/errorhandler.hxx b/idlc/inc/idlc/errorhandler.hxx
index 8a7b1e4..085aac5 100644
--- a/idlc/inc/idlc/errorhandler.hxx
+++ b/idlc/inc/idlc/errorhandler.hxx
@@ -21,7 +21,6 @@
 
 #include <idlc/astdeclaration.hxx>
 #include <idlc/astexpression.hxx>
-#include <idlc/astunion.hxx>
 #include <idlc/astenum.hxx>
 
 enum ErrorCode
@@ -33,11 +32,8 @@ enum ErrorCode
     EIDL_REDEF,             // Redefinition
     EIDL_REDEF_SCOPE,       // Redefinition inside defining scope
     EIDL_DEF_USE,           // Definition after use
-    EIDL_MULTIPLE_BRANCH,   // More than one union branch with this label
     EIDL_COERCION_FAILURE,  // Coercion failure
     EIDL_SCOPE_CONFLICT,    // Between fwd declare and full declare
-    EIDL_DISC_TYPE,         // Illegal discriminator type in union
-    EIDL_LABEL_TYPE,        // Mismatch with discriminator type in union
     EIDL_ILLEGAL_ADD,       // Illegal add action
     EIDL_ILLEGAL_USE,       // Illegal type used in expression
     EIDL_ILLEGAL_RAISES,    // Error in "raises" clause
@@ -46,8 +42,6 @@ enum ErrorCode
     EIDL_INHERIT_FWD_ERROR, // Cannot inherit from fwd decl interface
     EIDL_CONSTANT_EXPECTED, // We got something else..
     EIDL_NAME_CASE_ERROR,   // Spelling differences found
-    EIDL_ENUM_VAL_EXPECTED, // Expected an enumerator
-    EIDL_ENUM_VAL_NOT_FOUND,    // Didnt find an enumerator with that name
     EIDL_EVAL_ERROR,        // Error in evaluating expression
     EIDL_AMBIGUOUS,         // Ambiguous name definition
     EIDL_DECL_NOT_DEFINED,  // Forward declared but never defined
@@ -130,15 +124,6 @@ public:
 
     void    evalError(AstExpression* pExpr);
 
-    // Report a situation where an enumerator was expected but we got
-    // something else instead. This occurs when a union with an enum
-    // discriminator is being parsed and one of the branch labels is
-    // not an enumerator in that enum
-    void    enumValExpected(AstUnion* pUnion);
-
-    // Report a failed enumerator lookup in an enum
-    void    enumValLookupFailure(AstUnion* pUnion, AstEnum* pEnum, const OString& name);
-
     bool checkPublished(AstDeclaration const * decl, bool bOptiional=false);
 };
 
diff --git a/idlc/inc/idlc/idlctypes.hxx b/idlc/inc/idlc/idlctypes.hxx
index 842ef68..fcda521 100644
--- a/idlc/inc/idlc/idlctypes.hxx
+++ b/idlc/inc/idlc/idlctypes.hxx
@@ -58,12 +58,6 @@ typedef ::std::list< OString >               StringList;
 typedef ::std::vector< OString >             StringVector;
 typedef ::std::set< OString, LessString >    StringSet;
 
-class AstExpression;
-typedef ::std::list< AstExpression* >   ExprList;
-
-class AstUnionLabel;
-typedef ::std::list< AstUnionLabel* >   LabelList;
-
 class AstDeclaration;
 
 typedef ::boost::unordered_map< OString, AstDeclaration*, HashString, EqualString > DeclMap;
@@ -171,25 +165,6 @@ enum ParseState
     PS_MemberDeclsSeen,     // Seen decls of struct or except members
     PS_MemberDeclsCompleted,// Completed one struct or except member to ';'
 
-    PS_UnionSeen,           // Seen a UNION keyword
-    PS_UnionIDSeen,         // Seen the union ID
-    PS_SwitchSeen,          // Seen the SWITCH keyword
-    PS_SwitchOpenParSeen,   // Seen the switch open par.
-    PS_SwitchTypeSeen,      // Seen the switch type spec
-    PS_SwitchCloseParSeen,  // Seen the switch close par.
-    PS_UnionSqSeen,         // '{' seen for union
-    PS_UnionQsSeen,         // '}' seen for union
-    PS_DefaultSeen,         // Seen DEFAULT keyword
-    PS_UnionLabelSeen,      // Seen label of union element
-    PS_LabelColonSeen,      // Seen ':' of union branch label
-    PS_LabelExprSeen,       // Seen expression of union branch label
-    PS_UnionElemSeen,       // Seen a union element
-    PS_UnionElemCompleted,  // Completed one union member up to ';'
-    PS_CaseSeen,            // Seen a CASE keyword
-    PS_UnionElemTypeSeen,   // Seen type spec for union element
-    PS_UnionElemDeclSeen,   // Seen declarator for union element
-    PS_UnionBodySeen,       // Seen completed union body
-
     PS_EnumSeen,            // Seen an ENUM keyword
     PS_EnumIDSeen,          // Seen the enum ID
     PS_EnumSqSeen,          // Seen '{' for enum
@@ -202,14 +177,6 @@ enum ParseState
     PS_SequenceQsSeen,      // Seen '>' for sequence
     PS_SequenceTypeSeen,    // Seen type decl for sequence
 
-    PS_ArrayIDSeen,         // Seen array ID
-    PS_ArrayTypeSeen,       // Seen array type
-    PS_ArrayCompleted,      // Seen completed array declaration
-    PS_DimSqSeen,           // Seen '[' for array dimension
-    PS_DimQsSeen,           // Seen ']' for array dimension
-    PS_DimExprSeen,         // Seen size expression for array dimension
-
-
     PS_FlagHeaderSeen,      // Seen the attribute|property|interface member head
     PS_AttrSeen,            // Seen ATTRIBUTE keyword
     PS_AttrTypeSeen,        // Seen type decl for attribute
diff --git a/idlc/source/astarray.cxx b/idlc/source/astarray.cxx
deleted file mode 100644
index 43a9e82..0000000
--- a/idlc/source/astarray.cxx
+++ /dev/null
@@ -1,66 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- *   Licensed to the Apache Software Foundation (ASF) under one or more
- *   contributor license agreements. See the NOTICE file distributed
- *   with this work for additional information regarding copyright
- *   ownership. The ASF licenses this file to you under the Apache
- *   License, Version 2.0 (the "License"); you may not use this file
- *   except in compliance with the License. You may obtain a copy of
- *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
- */
-
-#include <idlc/astarray.hxx>
-
-using namespace ::rtl;
-
-AstArray::AstArray(const OString& name, AstType* pType, const ExprList& rDimExpr, AstScope* pScope)
-    : AstType(NT_array, name, pScope)
-    , m_pType(pType)
-    , m_dimension((sal_uInt32)(rDimExpr.size()))
-    , m_dimExpressions(rDimExpr)
-{
-    if ( m_pType )
-        setName(makeName());
-}
-
-AstArray::AstArray(AstType* pType, const ExprList& rDimExpr, AstScope* pScope)
-    : AstType(NT_array, OString("arrary_"), pScope)
-    , m_pType(pType)
-    , m_dimension((sal_uInt32)(rDimExpr.size()))
-    , m_dimExpressions(rDimExpr)
-{
-    if ( m_pType )
-        setName(makeName());
-}
-
-OString AstArray::makeName()
-{
-    if ( m_pType )
-    {
-        OString name(m_pType->getScopedName());
-        OString openBracket("[");
-        OString closeBracket("]");
-        ExprList::iterator iter = m_dimExpressions.begin();
-        ExprList::iterator end = m_dimExpressions.end();
-
-        while ( iter != end )
-        {
-            name += openBracket;
-            name += (*iter)->toString();
-            name += closeBracket;
-            ++iter;
-        }
-        return name;
-    }
-    return OString();
-}
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/idlc/source/astdeclaration.cxx b/idlc/source/astdeclaration.cxx
index c5733f9..e8df3a6 100644
--- a/idlc/source/astdeclaration.cxx
+++ b/idlc/source/astdeclaration.cxx
@@ -134,10 +134,8 @@ bool AstDeclaration::isType() const {
     switch (m_nodeType) {
     case NT_interface:
     case NT_instantiated_struct:
-    case NT_union:
     case NT_enum:
     case NT_sequence:
-    case NT_array:
     case NT_typedef:
     case NT_predefined:
     case NT_type_parameter:
@@ -181,7 +179,6 @@ sal_Bool AstDeclaration::dump(RegistryKey& rKey)
                     case NT_struct:
                     case NT_exception:
                     case NT_enum:
-                    case NT_union:
                     case NT_typedef:
                     case NT_service:
                     case NT_singleton:
diff --git a/idlc/source/astscope.cxx b/idlc/source/astscope.cxx
index ba06611..b127cf9 100644
--- a/idlc/source/astscope.cxx
+++ b/idlc/source/astscope.cxx
@@ -47,11 +47,6 @@ AstDeclaration* AstScope::addDeclaration(AstDeclaration* pDecl)
 
     if ((pDeclaration = lookupForAdd(pDecl)) != NULL)
     {
-        if (pDecl->getNodeType() == NT_union_branch )
-        {
-            m_declarations.push_back(pDecl);
-            return pDecl;
-        }
         if ( pDecl->hasAncestor(pDeclaration) )
         {
             idlc()->error()->error2(EIDL_REDEF_SCOPE, pDecl, pDeclaration);
@@ -59,7 +54,6 @@ AstDeclaration* AstScope::addDeclaration(AstDeclaration* pDecl)
         }
         if ( (pDecl->getNodeType() == pDeclaration->getNodeType()) &&
              (pDecl->getNodeType() == NT_sequence
-              || pDecl->getNodeType() == NT_array
               || pDecl->getNodeType() == NT_instantiated_struct) )
         {
             return pDeclaration;
diff --git a/idlc/source/astunion.cxx b/idlc/source/astunion.cxx
deleted file mode 100644
index 45e2f31..0000000
--- a/idlc/source/astunion.cxx
+++ /dev/null
@@ -1,382 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- *   Licensed to the Apache Software Foundation (ASF) under one or more
- *   contributor license agreements. See the NOTICE file distributed
- *   with this work for additional information regarding copyright
- *   ownership. The ASF licenses this file to you under the Apache
- *   License, Version 2.0 (the "License"); you may not use this file
- *   except in compliance with the License. You may obtain a copy of
- *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
- */
-
-#include <idlc/astunion.hxx>
-#include <idlc/astbasetype.hxx>
-#include <idlc/errorhandler.hxx>
-
-#include "registry/version.h"
-#include "registry/writer.hxx"
-
-using namespace ::rtl;
-
-AstUnion::AstUnion(const OString& name, AstType* pDiscType, AstScope* pScope)
-    : AstStruct(NT_union, name, NULL, pScope)
-    , m_pDiscriminantType(pDiscType)
-    , m_discExprType(ET_long)
-{
-    AstBaseType* pBaseType;
-
-    if ( !pDiscType )
-    {
-        m_pDiscriminantType = NULL;
-        m_discExprType = ET_none;
-        return;
-    }
-    /*
-     * If the discriminator type is a predefined type
-     * then install the equivalent coercion target type in
-     * the pd_udisc_type field.
-     */
-    if ( pDiscType->getNodeType() == NT_predefined )
-    {
-        pBaseType = (AstBaseType*)pDiscType;
-        m_pDiscriminantType = pDiscType;
-        switch (pBaseType->getExprType())
-        {
-            case ET_long:
-            case ET_ulong:
-            case ET_short:
-            case ET_ushort:
-            case ET_char:
-            case ET_boolean:
-                m_discExprType = pBaseType->getExprType();
-                break;
-            default:
-                m_discExprType = ET_none;
-                m_pDiscriminantType = NULL;
-                break;
-        }
-    } else
-        if (pDiscType->getNodeType() == NT_enum)
-        {
-            m_discExprType = ET_any;
-            m_pDiscriminantType = pDiscType;
-        } else
-        {
-            m_discExprType = ET_none;
-            m_pDiscriminantType = NULL;
-        }
-
-    if ( !m_pDiscriminantType )
-        idlc()->error()->error2(EIDL_DISC_TYPE, this, pDiscType);
-}
-
-AstUnion::~AstUnion()
-{
-}
-
-AstDeclaration* AstUnion::addDeclaration(AstDeclaration* pDecl)
-{
-    if ( pDecl->getNodeType() == NT_union_branch )
-    {
-        AstUnionBranch* pBranch = (AstUnionBranch*)pDecl;
-        if ( lookupBranch(pBranch) )
-        {
-            idlc()->error()->error2(EIDL_MULTIPLE_BRANCH, this, pDecl);
-            return NULL;
-        }
-    }
-
-    return AstScope::addDeclaration(pDecl);
-}
-
-AstUnionBranch* AstUnion::lookupBranch(AstUnionBranch* pBranch)
-{
-    AstUnionLabel* pLabel = NULL;
-
-    if ( pBranch )
-        pLabel = pBranch->getLabel();
-
-    if ( pLabel )
-    {
-        if (pLabel->getLabelKind() == UL_default)
-            return lookupDefault();
-        if (m_discExprType == ET_any)
-            /* CONVENTION: indicates enum discr */
-            return lookupEnum(pBranch);
-        return lookupLabel(pBranch);
-    }
-    return NULL;
-}
-
-AstUnionBranch* AstUnion::lookupDefault(sal_Bool bReportError)
-{
-    DeclList::const_iterator iter = getIteratorBegin();
-    DeclList::const_iterator end = getIteratorEnd();
-    AstUnionBranch      *pBranch = NULL;
-    AstDeclaration      *pDecl = NULL;
-
-    while ( iter != end )
-    {
-        pDecl = *iter;
-        if ( pDecl->getNodeType() == NT_union_branch )
-        {
-            pBranch = (AstUnionBranch*)pDecl;
-            if (pBranch == NULL)
-            {
-                ++iter;
-                continue;
-            }
-            if ( pBranch->getLabel() != NULL &&
-                 pBranch->getLabel()->getLabelKind() == UL_default)
-            {
-                if ( bReportError )
-                    idlc()->error()->error2(EIDL_MULTIPLE_BRANCH, this, pBranch);
-                return pBranch;
-            }
-        }
-        ++iter;
-    }
-    return NULL;
-}
-
-AstUnionBranch* AstUnion::lookupLabel(AstUnionBranch* pBranch)
-{
-    AstUnionLabel* pLabel = pBranch->getLabel();
-
-    if ( !pLabel->getLabelValue() )
-        return pBranch;
-//  pLabel->getLabelValue()->setExprValue(pLabel->getLabelValue()->coerce(m_discExprType, sal_False));
-    AstExprValue* pLabelValue = pLabel->getLabelValue()->coerce(
-        m_discExprType, sal_False);
-    if ( !pLabelValue )
-    {
-        idlc()->error()->evalError(pLabel->getLabelValue());
-        return pBranch;
-    } else
-    {
-        pLabel->getLabelValue()->setExprValue(pLabelValue);
-    }
-
-    DeclList::const_iterator iter = getIteratorBegin();
-    DeclList::const_iterator end = getIteratorEnd();
-    AstUnionBranch* pB = NULL;
-    AstDeclaration* pDecl = NULL;
-
-    while ( iter != end )
-    {
-        pDecl = *iter;
-        if ( pDecl->getNodeType() == NT_union_branch )
-        {
-            pB = (AstUnionBranch*)pDecl;
-            if ( !pB )
-            {
-                ++iter;
-                continue;
-            }
-            if ( pB->getLabel() != NULL &&
-                 pB->getLabel()->getLabelKind() == UL_label &&
-                 pB->getLabel()->getLabelValue()->compare(pLabel->getLabelValue()) )
-            {
-                idlc()->error()->error2(EIDL_MULTIPLE_BRANCH, this, pBranch);
-                return pBranch;
-            }
-        }
-        ++iter;
-    }
-    return NULL;
-}
-
-AstUnionBranch* AstUnion::lookupEnum(AstUnionBranch* pBranch)
-{
-    AstDeclaration const * pType = resolveTypedefs(m_pDiscriminantType);
-    if ( pType->getNodeType() != NT_enum )
-        return NULL;
-
-    AstUnionLabel* pLabel = pBranch->getLabel();
-    AstExpression* pExpr = pLabel->getLabelValue();
-    if ( !pExpr )
-        return pBranch;
-
-    /*
-     * Expecting a symbol label
-     */
-    if ( pExpr->getCombOperator() != EC_symbol)
-    {
-        idlc()->error()->enumValExpected(this);
-        return pBranch;
-    }
-
-    /*
-     * See if the symbol defines a constant in the discriminator enum
-     */
-    AstEnum* pEnum = (AstEnum*)pType;
-    AstDeclaration* pDecl = pEnum->lookupByName(*pExpr->getSymbolicName());
-    if ( pDecl == NULL || pDecl->getScope() != pEnum)
-    {
-        idlc()->error()->enumValLookupFailure(this, pEnum, *pExpr->getSymbolicName());
-        return pBranch;
-    }
-
-
-    DeclList::const_iterator iter = getIteratorBegin();
-    DeclList::const_iterator end = getIteratorEnd();
-    AstUnionBranch* pB = NULL;
-    pDecl = NULL;
-
-    while ( iter != end )
-    {
-        pDecl = *iter;
-        if ( pDecl->getNodeType() == NT_union_branch )
-        {
-            pB = (AstUnionBranch*)pDecl;
-            if ( !pB )
-            {
-                ++iter;
-                continue;
-            }
-            if ( pB->getLabel() != NULL &&
-                 pB->getLabel()->getLabelKind() == UL_label &&
-                 pB->getLabel()->getLabelValue()->compare(pLabel->getLabelValue()) )
-            {
-                idlc()->error()->error2(EIDL_MULTIPLE_BRANCH, this, pBranch);
-                return pBranch;
-            }
-        }
-        ++iter;
-    }
-    return NULL;
-}
-
-sal_Bool AstUnion::dump(RegistryKey& rKey)
-{
-    RegistryKey localKey;
-    if (rKey.createKey( OStringToOUString(getFullName(), RTL_TEXTENCODING_UTF8 ), localKey))
-    {
-        fprintf(stderr, "%s: warning, could not create key '%s' in '%s'\n",
-                idlc()->getOptions()->getProgramName().getStr(),
-                getFullName().getStr(), OUStringToOString(rKey.getRegistryName(), RTL_TEXTENCODING_UTF8).getStr());
-        return sal_False;
-    }
-
-    sal_uInt16 nMember = getNodeCount(NT_union_branch);
-
-    OUString emptyStr;
-    typereg::Writer aBlob(
-        TYPEREG_VERSION_0, getDocumentation(), emptyStr, RT_TYPE_UNION,
-        false, OStringToOUString(getRelativName(), RTL_TEXTENCODING_UTF8), 1,
-        nMember, 0, 0);
-    aBlob.setSuperTypeName(
-        0,
-        OStringToOUString(
-            getDiscrimantType()->getScopedName(), RTL_TEXTENCODING_UTF8));
-
-    if ( nMember > 0 )
-    {
-        DeclList::const_iterator iter = getIteratorBegin();
-        DeclList::const_iterator end = getIteratorEnd();
-        AstDeclaration* pDecl = NULL;
-        AstUnionBranch* pBranch = NULL;
-        AstUnionBranch* pDefault = lookupDefault(sal_False);
-        AstUnionLabel*  pLabel = NULL;
-        AstExprValue*   pExprValue = NULL;
-        RTConstValue    aConst;
-        sal_uInt16  index = 0;
-        if ( pDefault )
-            index = 1;
-
-        sal_Int64   disc = 0;
-        while ( iter != end )
-        {
-            pDecl = *iter;
-            if ( pDecl->getNodeType() == NT_union_branch )
-            {
-                pBranch = (AstUnionBranch*)pDecl;
-                if (pBranch == pDefault)
-                {
-                    ++iter;
-                    continue;
-                }
-
-                pLabel = pBranch->getLabel();
-                pExprValue = pLabel->getLabelValue()->coerce(ET_hyper, sal_False);
-                aConst.m_type = RT_TYPE_INT64;
-                aConst.m_value.aHyper = pExprValue->u.hval;
-                if ( aConst.m_value.aHyper > disc )
-                    disc = aConst.m_value.aHyper;
-
-                aBlob.setFieldData(
-                    index++, pBranch->getDocumentation(), emptyStr, RT_ACCESS_READWRITE,
-                    OStringToOUString(
-                        pBranch->getLocalName(), RTL_TEXTENCODING_UTF8),
-                    OStringToOUString(
-                        pBranch->getType()->getRelativName(),
-                        RTL_TEXTENCODING_UTF8),
-                    aConst);
-            }
-            ++iter;
-        }
-
-        if ( pDefault )
-        {
-            aConst.m_type = RT_TYPE_INT64;
-            aConst.m_value.aHyper = disc + 1;
-            aBlob.setFieldData(
-                0, pDefault->getDocumentation(), emptyStr, RT_ACCESS_DEFAULT,
-                OStringToOUString(
-                    pDefault->getLocalName(), RTL_TEXTENCODING_UTF8),
-                OStringToOUString(
-                    pDefault->getType()->getRelativName(),
-                    RTL_TEXTENCODING_UTF8),
-                aConst);
-        }
-    }
-
-    sal_uInt32 aBlobSize;
-    void const * pBlob = aBlob.getBlob(&aBlobSize);
-
-    if (localKey.setValue(OUString(), RG_VALUETYPE_BINARY,
-                            (RegValue)pBlob, aBlobSize))
-    {
-        fprintf(stderr, "%s: warning, could not set value of key \"%s\" in %s\n",
-                idlc()->getOptions()->getProgramName().getStr(),
-                getFullName().getStr(), OUStringToOString(localKey.getRegistryName(), RTL_TEXTENCODING_UTF8).getStr());
-        return sal_False;
-    }
-
-    return sal_True;
-}
-
-AstUnionBranch::AstUnionBranch(AstUnionLabel* pLabel, AstType const * pType, const OString& name, AstScope* pScope)
-    : AstMember(NT_union_branch, pType, name, pScope)
-    , m_pLabel(pLabel)
-{
-}
-
-AstUnionBranch::~AstUnionBranch()
-{
-    delete m_pLabel;
-}
-
-AstUnionLabel::AstUnionLabel(UnionLabel labelKind, AstExpression* pExpr)
-    : m_label(labelKind)
-    , m_pLabelValue(pExpr)
-{
-    if ( m_pLabelValue )
-        m_pLabelValue->evaluate(EK_const);
-}
-
-AstUnionLabel::~AstUnionLabel()
-{
-    delete m_pLabelValue;
-}
-
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/idlc/source/errorhandler.cxx b/idlc/source/errorhandler.cxx
index f591f0b..323f16b 100644
--- a/idlc/source/errorhandler.cxx
+++ b/idlc/source/errorhandler.cxx
@@ -36,16 +36,10 @@ static const sal_Char* errorCodeToMessage(ErrorCode eCode)
         return "illegal redefinition in scope ";
     case EIDL_DEF_USE:
         return "redefinition after use, ";
-    case EIDL_MULTIPLE_BRANCH:
-        return "union with duplicate branch label ";
     case EIDL_COERCION_FAILURE:
         return "coercion failure ";
     case EIDL_SCOPE_CONFLICT:
         return "definition scope is different than fwd declare scope, ";
-    case EIDL_DISC_TYPE:
-        return "union with illegal discriminator type, ";
-    case EIDL_LABEL_TYPE:
-        return "label type incompatible with union discriminator type, ";
     case EIDL_ILLEGAL_ADD:
         return "illegal add operation, ";
     case EIDL_ILLEGAL_USE:
@@ -62,10 +56,6 @@ static const sal_Char* errorCodeToMessage(ErrorCode eCode)
         return "constant expected: ";
     case EIDL_NAME_CASE_ERROR:
         return "identifier used with two differing spellings: ";
-    case EIDL_ENUM_VAL_EXPECTED:
-        return "enumerator expected: ";
-    case EIDL_ENUM_VAL_NOT_FOUND:
-        return "enumerator by this name not defined: ";
     case EIDL_EVAL_ERROR:
         return "expression evaluation error: ";
     case EIDL_AMBIGUOUS:
@@ -293,41 +283,6 @@ static const sal_Char* parseStateToMessage(ParseState state)
         return "Illegal syntax following member declarator(s)";
     case PS_MemberDeclsCompleted:
         return "Missing ',' between member decls of same type(?)";
-    case PS_UnionSeen:
-        return "Missing identifier following UNION keyword";
-    case PS_UnionIDSeen:
-        return "Illegal syntax following union identifier";
-    case PS_SwitchSeen:
-        return "Illegal syntax following SWITCH keyword";
-    case PS_SwitchOpenParSeen:
-        return "Illegal syntax following '(' in switch in union";
-    case PS_SwitchTypeSeen:
-        return "Illegal syntax following type decl in switch in union";
-    case PS_SwitchCloseParSeen:
-        return "Missing union '{' opener";
-    case PS_UnionSqSeen:
-        return "Illegal syntax following union '{' opener";
-    case PS_UnionQsSeen:
-        return "Illegal syntax following union '}' closer";
-    case PS_DefaultSeen:
-        return "Illegal syntax or missing ':' following DEFAULT keyword";
-    case PS_UnionLabelSeen:
-        return "Illegal syntax following branch label in union";
-    case PS_LabelColonSeen:
-        return "Illegal syntax following ':' in branch label in union";
-    case PS_LabelExprSeen:
-        return "Illegal syntax following label expression in union";
-    case PS_UnionElemSeen:
-    case PS_UnionElemCompleted:
-        return "Illegal syntax following union element";
-    case PS_CaseSeen:
-        return "Illegal syntax following CASE keyword in union";
-    case PS_UnionElemTypeSeen:
-        return "Illegal syntax following type decl in union element";
-    case PS_UnionElemDeclSeen:
-        return "Illegal syntax following declarator in union element";
-    case PS_UnionBodySeen:
-        return "Illegal syntax following union body statement(s)";
     case PS_EnumSeen:
         return "Illegal syntax or missing identifier following ENUM keyword";
     case PS_EnumIDSeen:
@@ -348,16 +303,6 @@ static const sal_Char* parseStateToMessage(ParseState state)
         return "Illegal syntax following '>' in sequence";
     case PS_SequenceTypeSeen:
         return "Illegal syntax following sequence type declaration";
-    case PS_ArrayIDSeen:
-        return "Illegal syntax or missing dimensions after array identifier";
-    case PS_ArrayCompleted:
-        return "Illegal syntax after array declaration";
-    case PS_DimSqSeen:
-        return "Illegal syntax or missing size expr after '[' in array declaration";
-    case PS_DimQsSeen:
-        return "Illegal syntax after ']' in array declaration";
-    case PS_DimExprSeen:
-        return "Illegal syntax or missing ']' after size expr in array declaration";
     case PS_FlagHeaderSeen:
         return "Illegal syntax after flags";
     case PS_AttrSeen:
@@ -658,22 +603,6 @@ void ErrorHandler::evalError(AstExpression* pExpr)
     idlc()->incErrorCount();
 }
 
-void ErrorHandler::enumValExpected(AstUnion* pUnion)
-{
-    errorHeader(EIDL_ENUM_VAL_EXPECTED);
-    fprintf(stderr, " union %s\n", pUnion->getLocalName().getStr());
-    idlc()->incErrorCount();
-}
-
-void ErrorHandler::enumValLookupFailure(AstUnion* pUnion, AstEnum* pEnum, const OString& name)
-{
-    errorHeader(EIDL_ENUM_VAL_NOT_FOUND);
-    fprintf(stderr, " union %s, enum %s, enumerator %s\n",
-            pUnion->getLocalName().getStr(),
-            pEnum->getLocalName().getStr(), name.getStr());
-    idlc()->incErrorCount();
-}
-
 bool ErrorHandler::checkPublished(AstDeclaration const * decl, bool bOptional) {
     if (idlc()->isPublished() && !decl->isPublished() && !bOptional) {
         error1(EIDL_PUBLISHED_USES_UNPUBLISHED, decl);
diff --git a/idlc/source/fehelper.cxx b/idlc/source/fehelper.cxx
index 02df3a8..053473a 100644
--- a/idlc/source/fehelper.cxx
+++ b/idlc/source/fehelper.cxx
@@ -19,7 +19,6 @@
 
 #include <idlc/fehelper.hxx>
 #include <idlc/errorhandler.hxx>
-#include <idlc/astarray.hxx>
 #include "idlc/idlc.hxx"
 
 using namespace ::rtl;
@@ -65,26 +64,6 @@ AstType const * FeDeclarator::compose(AstDeclaration const * pDecl)
     if (m_declType == FD_simple || m_pComplexPart == NULL)
         return pType;
 
-    if (m_pComplexPart->getNodeType() == NT_array)
-    {
-        AstArray* pArray = (AstArray*)m_pComplexPart;
-        pArray->setType(pType);
-
-        // insert array type in global scope
-        AstScope* pScope = idlc()->scopes()->bottom();
-        if ( pScope )
-        {
-            AstDeclaration* pDecl2 = pScope->addDeclaration(pArray);
-            if ( (AstDeclaration*)pArray != pDecl2 )
-            {
-                delete m_pComplexPart;
-                m_pComplexPart = pDecl2;
-                return (AstType*)pDecl2;
-            }
-        }
-        return pArray;
-    }
-
     return NULL; // return through this statement should not happen
 }
 
diff --git a/idlc/source/idlc.cxx b/idlc/source/idlc.cxx
index 7e88026..3638157 100644
--- a/idlc/source/idlc.cxx
+++ b/idlc/source/idlc.cxx
@@ -24,7 +24,6 @@
 #include <idlc/astservice.hxx>
 #include <idlc/astconstants.hxx>
 #include <idlc/astexception.hxx>
-#include <idlc/astunion.hxx>
 #include <idlc/astenum.hxx>
 #include <idlc/astinterface.hxx>
 #include <idlc/astoperation.hxx>
@@ -61,8 +60,6 @@ AstDeclaration* SAL_CALL scopeAsDecl(AstScope* pScope)
             return (AstOperation*)(pScope);
         case NT_exception:
             return (AstException*)(pScope);
-        case NT_union:
-            return (AstUnion*)(pScope);
         case NT_struct:
             return (AstStruct*)(pScope);
         case NT_enum:
@@ -90,8 +87,6 @@ AstScope* SAL_CALL declAsScope(AstDeclaration* pDecl)
             return (AstConstants*)(pDecl);
         case NT_exception:
             return (AstException*)(pDecl);
-        case NT_union:
-            return (AstUnion*)(pDecl);
         case NT_struct:
             return (AstStruct*)(pDecl);
         case NT_enum:
diff --git a/idlc/source/parser.y b/idlc/source/parser.y
index b31cabc..e06b967 100644
--- a/idlc/source/parser.y
+++ b/idlc/source/parser.y
@@ -30,7 +30,6 @@
 #include <idlc/astexpression.hxx>
 #include <idlc/astconstants.hxx>
 #include <idlc/astconstant.hxx>
-#include <idlc/astarray.hxx>
 #include <idlc/astbasetype.hxx>
 #include <idlc/asttypedef.hxx>
 #include <idlc/astexception.hxx>
@@ -44,7 +43,6 @@
 #include <idlc/astservicemember.hxx>
 #include <idlc/astobserves.hxx>
 #include <idlc/astneeds.hxx>
-#include <idlc/astunion.hxx>
 
 #include "idlc/aststructinstance.hxx"
 
@@ -224,7 +222,6 @@ bool includes(AstDeclaration const * type1, AstDeclaration const * type2) {
     AstDeclaration const * cdclval;
     DeclList * dclsval;
     AstExpression*      exval;      /* expression value */
-    ExprList*               exlval; /* expression list value */
     FeDeclarator*           fdval;      /* declarator value */
     FeDeclList*         dlval;      /* declarator list value */
     FeInheritanceHeader*    ihval;      /* inheritance header value */
@@ -238,9 +235,6 @@ bool includes(AstDeclaration const * type1, AstDeclaration const * type2) {
     double                  dval;       /* double value */
     float                   fval;       /* float value */
     StringList*         slval;      /* StringList value */
-    LabelList*          llval;      /* LabelList value  */
-    AstUnionLabel*      lbval;      /* union label value */
-    AstMember*          mval;       /* member value */
     AttributeExceptions::Part attexcpval;
     AttributeExceptions attexcval;
 }
@@ -252,11 +246,9 @@ bool includes(AstDeclaration const * type1, AstDeclaration const * type2) {
 %token <sval>       IDL_IDENTIFIER
 %token          IDL_ATTRIBUTE
 %token              IDL_BOUND
-%token          IDL_CASE
 %token          IDL_CONST
 %token          IDL_CONSTANTS
 %token              IDL_CONSTRAINED
-%token          IDL_DEFAULT
 %token          IDL_ENUM
 %token          IDL_EXCEPTION
 %token          IDL_INTERFACE
@@ -275,10 +267,8 @@ bool includes(AstDeclaration const * type1, AstDeclaration const * type2) {
 %token          IDL_SEQUENCE
 %token          IDL_SINGLETON
 %token          IDL_STRUCT
-%token          IDL_SWITCH
 %token          IDL_TYPEDEF
 %token              IDL_TRANSIENT
-%token          IDL_UNION
 
 %token          IDL_ANY
 %token          IDL_CHAR
@@ -320,11 +310,10 @@ bool includes(AstDeclaration const * type1, AstDeclaration const * type2) {
  * These are production names:
  */
 %type <dclval>  type_dcl
-%type <dclval>  array_declarator
 %type <dclval>  exception_name
-%type <cdclval> array_type constructed_type_spec enum_type op_type_spec
-%type <cdclval> sequence_type_spec simple_type_spec struct_type switch_type_spec
-%type <cdclval> template_type_spec type_spec union_type
+%type <cdclval> constructed_type_spec enum_type op_type_spec
+%type <cdclval> sequence_type_spec simple_type_spec struct_type
+%type <cdclval> type_spec
 %type <cdclval> fundamental_type type_arg type_or_parameter
 %type <dclsval> opt_raises raises exception_list
 %type <attexcpval> opt_attribute_get_raises attribute_get_raises
@@ -342,11 +331,9 @@ bool includes(AstDeclaration const * type1, AstDeclaration const * type2) {
 
 %type <exval>   expression const_expr or_expr xor_expr and_expr
 %type <exval>   add_expr mult_expr unary_expr primary_expr shift_expr
-%type <exval>   literal positive_int_expr array_dim
+%type <exval>   literal positive_int_expr
 
-%type <exlval>  at_least_one_array_dim array_dims
-
-%type <fdval>   declarator simple_declarator complex_declarator
+%type <fdval>   declarator
 %type <dlval>   declarators at_least_one_declarator
 
 %type <ihval>   exception_header structure_header interfaceheader
@@ -354,10 +341,6 @@ bool includes(AstDeclaration const * type1, AstDeclaration const * type2) {
 %type <ulval>   flag_header opt_attrflags opt_attrflag
 %type <ulval>   direction service_interface_header service_service_header
 
-%type <llval>   case_labels at_least_one_case_label
-%type <lbval>   case_label
-%type <mval>    element_spec
-
 %type <bval>    optional_inherited_interface opt_rest opt_service_body
 
 %type <attexcval> opt_attribute_block attribute_block_rest opt_attribute_raises
@@ -741,7 +724,7 @@ attribute :
     {
         idlc()->setParseState(PS_AttrTypeSeen);
     }
-    simple_declarator
+    declarator
     {
         idlc()->setParseState(PS_AttrCompleted);
         if (($1 & ~(AF_BOUND | AF_READONLY)) != AF_ATTRIBUTE) {
@@ -2042,7 +2025,6 @@ type_dcl :
     }
     type_declarator {}
     | struct_type {}
-    | union_type {}
     | enum_type {}
     ;
 
@@ -2144,11 +2126,6 @@ declarators :
     ;
 
 declarator :
-    simple_declarator
-    | complex_declarator
-    ;
-
-simple_declarator :
     identifier
     {
         // For historic reasons, the struct com.sun.star.uno.Uik contains
@@ -2167,88 +2144,6 @@ simple_declarator :
     }
     ;
 
-complex_declarator :
-    array_declarator
-    {
-        $$ = new FeDeclarator($1->getLocalName(), FeDeclarator::FD_complex, $1);
-    }
-    ;
-
-array_declarator :
-    identifier
-    {
-        idlc()->setParseState(PS_ArrayIDSeen);
-        checkIdentifier($1);
-    }
-    at_least_one_array_dim
-    {
-        idlc()->setParseState(PS_ArrayCompleted);
-        $$ = new AstArray(*$1, NULL, *$3, idlc()->scopes()->bottom());
-        delete $1;
-    }
-    ;
-
-at_least_one_array_dim :
-    array_dim array_dims
-    {
-        if( $2 )
-        {
-            $2->push_front($1);
-            $$ = $2;
-        } else
-        {
-            ExprList* pList = new ExprList();
-            pList->push_back($1);
-            $$ = pList;
-        }
-    }
-    ;
-
-array_dims :
-    array_dims array_dim
-    {
-        if( $1 )
-        {
-            $1->push_back($2);
-            $$ = $1;
-        } else
-        {
-            ExprList* pList = new ExprList();
-            pList->push_back($2);
-            $$ = pList;
-        }
-    }
-    | /* EMPTY */
-    {
-        $$ = NULL;
-    }
-    ;
-
-array_dim :
-    '['
-    {
-        idlc()->setParseState(PS_DimSqSeen);
-    }
-    positive_int_expr
-    {
-        idlc()->setParseState(PS_DimExprSeen);
-    }
-    ']'
-    {
-        idlc()->setParseState(PS_DimQsSeen);
-        /*
-         * Array dimensions are expressions which must be coerced to
-         * positive integers
-         */
-        if ( !$3 || !$3->coerce(ET_uhyper) )
-        {
-            idlc()->error()->coercionError($3, ET_uhyper);
-            $$ = NULL;
-        } else
-            $$ = $3;
-    }
-    ;
-
 at_least_one_scoped_name :
     scoped_name scoped_names
     {
@@ -2344,7 +2239,7 @@ fundamental_type:
     {
         $$ = idlc()->scopes()->bottom()->lookupPrimitiveType($1);
     }
-    | template_type_spec
+    | sequence_type_spec
     ;
 
 opt_type_args:
@@ -2474,48 +2369,11 @@ string_type :
     }
     ;
 
-template_type_spec :
-    sequence_type_spec
-    | array_type
-    ;
-
 constructed_type_spec :
     struct_type
-    | union_type
     | enum_type
     ;
 
-array_type :
-    simple_type_spec
-    {
-        idlc()->setParseState(PS_ArrayTypeSeen);
-    }
-    at_least_one_array_dim
-    {
-        idlc()->setParseState(PS_ArrayCompleted);
-
-        AstScope* pScope = idlc()->scopes()->bottom();
-        AstDeclaration* pDecl = NULL;
-        AstDeclaration* pArray = NULL;
-
-        if ( $1 )
-        {
-            pArray = new AstArray((AstType*)$1, *$3, idlc()->scopes()->bottom());
-            if ( pScope )
-            {
-                pDecl = pScope->addDeclaration(pArray);
-                if ( pArray != pDecl )
-                {
-                    // if array type already defined then use it
-                    delete pArray;
-                    pArray = pDecl;
-                }
-            }
-        }
-        $$ = pArray;
-    }
-    ;
-
 sequence_type_spec :
     IDL_SEQUENCE
     {
@@ -2900,303 +2758,6 @@ enumerator :
     }
     ;
 
-union_type :
-    IDL_UNION
-    {
-        idlc()->setParseState(PS_UnionSeen);
-    }
-    identifier
-    {
-        idlc()->setParseState(PS_UnionIDSeen);
-        checkIdentifier($3);
-    }
-    IDL_SWITCH
-    {
-        idlc()->setParseState(PS_SwitchSeen);
-    }
-    '('
-    {
-        idlc()->setParseState(PS_SwitchOpenParSeen);
-    }
-    switch_type_spec
-    {
-        idlc()->setParseState(PS_SwitchTypeSeen);
-    }
-    ')'
-    {
-        idlc()->setParseState(PS_SwitchCloseParSeen);
-
-        AstScope*       pScope = idlc()->scopes()->topNonNull();
-        AstUnion*       pUnion = NULL;
-
-        /*
-         * Create a node representing a union. Add it to its enclosing
-         * scope
-         */
-        if ( $9 && pScope )
-        {
-            AstType* pType = (AstType*)$9;
-            if ( !pType)
-            {
-                idlc()->error()->noTypeError($9);
-            } else
-            {
-                pUnion = new AstUnion(*$3, pType, pScope);
-                pScope->addDeclaration(pUnion);
-            }
-        }
-        delete $3;
-        /*
-         * Push the scope of the union on the scopes stack
-         */
-        idlc()->scopes()->push(pUnion);
-    }
-    '{'
-    {
-        idlc()->setParseState(PS_UnionSqSeen);
-    }
-    at_least_one_case_branch
-    {
-        idlc()->setParseState(PS_UnionBodySeen);
-    }
-    '}'
-    {
-        idlc()->setParseState(PS_UnionQsSeen);
-        /* this union is finished, pop its scope from the stack */
-        idlc()->scopes()->pop();
-    }
-    ;
-
-switch_type_spec :
-    integer_type
-    {
-        $$ = idlc()->scopes()->bottom()->lookupPrimitiveType($1);
-    }
-    | char_type
-    {
-        $$ = idlc()->scopes()->bottom()->lookupPrimitiveType($1);
-    }
-    | boolean_type
-    {
-        $$ = idlc()->scopes()->bottom()->lookupPrimitiveType($1);
-    }
-    | enum_type
-    | scoped_name
-    {
-        AstScope*       pScope = idlc()->scopes()->topNonNull();
-        AstBaseType*    pBaseType = NULL;
-        AstDeclaration const * pDecl = NULL;
-        AstTypeDef*     pTypeDef = NULL;
-        sal_Bool        bFound = sal_False;
-        /*
-         * If the constant's type is a scoped name, it must resolve
-         * to a scalar constant type
-         */
-        if ( pScope && (pDecl = pScope->lookupByName(*$1)) )
-        {
-            /*
-             * Look through typedefs
-             */
-            while ( !bFound )
-            {
-                switch (pDecl->getNodeType())
-                {
-                    case NT_enum:
-                        $$ = pDecl;
-                        bFound = sal_True;
-                        break;
-                    case NT_predefined:
-                        pBaseType = (AstBaseType*)pDecl;
-                        if ( pBaseType )
-                        {
-                            switch (pBaseType->getExprType())
-                            {
-                                case ET_short:
-                                case ET_ushort:
-                                case ET_long:
-                                case ET_ulong:
-                                case ET_hyper:
-                                case ET_uhyper:
-                                case ET_char:
-                                case ET_byte:
-                                case ET_boolean:
-                                    $$ = pBaseType;
-                                    bFound = sal_True;
-                                    break;
-                                default:
-                                    $$ = NULL;
-                                    bFound = sal_True;
-                                    break;
-                            }
-                        }
-                        break;
-                    case NT_typedef:
-                        pTypeDef = (AstTypeDef*)pDecl;
-                        if ( pTypeDef )
-                            pDecl = pTypeDef->getBaseType();
-                        break;
-                    default:
-                        $$ = NULL;
-                        bFound = sal_True;
-                       break;
-                }
-            }
-        } else
-            $$ = NULL;
-
-        if ($$ == NULL)
-            idlc()->error()->lookupError(*$1);
-    }
-    ;
-
-at_least_one_case_branch : case_branch case_branches ;
-
-case_branches :
-    case_branches case_branch
-    | /* EMPTY */
-    ;
-
-case_branch :
-    at_least_one_case_label
-    {
-        idlc()->setParseState(PS_UnionLabelSeen);
-    }
-    element_spec
-    {
-        idlc()->setParseState(PS_UnionElemSeen);
-
-        AstScope*       pScope = idlc()->scopes()->topNonNull();
-        AstUnionLabel*  pLabel = NULL;
-        AstUnionBranch* pBranch = NULL;
-        AstMember*      pMember = $3;
-
-        /*
-         * Create several nodes representing branches of a union.
-         * Add them to the enclosing scope (the union scope)
-         */
-        if ( pScope && $1 && $3 )
-        {
-            LabelList::iterator iter = $1->begin();
-            LabelList::iterator end = $1->end();
-            for (;iter != end; iter++)
-            {
-                pLabel = *iter;
-                if ( !pLabel )
-                {
-                    iter++;
-                    continue;
-                }
-                pBranch = new AstUnionBranch(pLabel, pMember->getType(),
-                                             pMember->getLocalName(), pScope);
-                pScope->addDeclaration(pBranch);
-            }
-        }
-        if ( $1 ) delete($1);
-    }
-    ;
-
-at_least_one_case_label :
-    case_label case_labels
-    {
-        if ( $2 )
-        {
-            $2->push_front($1);
-            $$ = $2;
-        } else
-        {
-            LabelList* pLabels = new LabelList();
-            pLabels->push_back($1);
-            $$ = pLabels;
-        }
-    }
-    ;
-
-case_labels :
-    case_labels case_label
-    {
-        if ( $1 )
-        {
-            $1->push_back($2);
-            $$ = $1;
-        } else
-        {
-            LabelList* pLabels = new LabelList();
-            pLabels->push_back($2);
-            $$ = pLabels;
-        }
-    }
-    | /* EMPTY */
-    {
-        $$ = NULL;
-    }
-    ;
-
-case_label :
-    IDL_DEFAULT
-    {
-        idlc()->setParseState(PS_DefaultSeen);
-    }
-    ':'
-    {
-        idlc()->setParseState(PS_LabelColonSeen);
-        $$ = new AstUnionLabel(UL_default, NULL);
-    }
-    | IDL_CASE
-    {
-        idlc()->setParseState(PS_CaseSeen);
-    }
-    const_expr
-    {
-        idlc()->setParseState(PS_LabelExprSeen);
-    }
-    ':'
-    {
-        idlc()->setParseState(PS_LabelColonSeen);
-        $$ = new AstUnionLabel(UL_label, $3);
-    }
-    ;
-
-element_spec :
-    type_spec
-    {
-        idlc()->setParseState(PS_UnionElemTypeSeen);
-    }
-    declarator
-    {
-        idlc()->setParseState(PS_UnionElemDeclSeen);
-    }
-    ';'
-    {
-        idlc()->setParseState(PS_UnionElemCompleted);
-
-        AstScope* pScope = idlc()->scopes()->topNonNull();
-        /*
-         * Check for illegal recursive use of type
-         */
-//      if ( $1 && AST_illegal_recursive_type($1))
-//          idlc()->error()->error1(EIDL_RECURSIVE_TYPE, $1);
-        /*
-         * Create a field in a union branch
-         */
-        if ( $1 && $3 )
-        {
-            AstType const * pType = $3->compose($1);
-            if ( !pType )
-                $$ = NULL;
-            else
-                $$ = new AstMember(pType, $3->getName(), pScope);
-        } else
-            $$ = NULL;
-
-        if ( $3 ) delete $3;
-    }
-    | error
-    ';'
-    {
-        $$ = NULL;
-    }
-    ;
-
 identifier:
     IDL_IDENTIFIER
     | IDL_GET { $$ = new OString("get"); }
diff --git a/idlc/source/scanner.l b/idlc/source/scanner.l
index 7787124..f904fb6 100644
--- a/idlc/source/scanner.l
+++ b/idlc/source/scanner.l
@@ -37,7 +37,6 @@
 
 
 class AstExpression;
-class AstArray;
 class AstMember;
 
 #include <parser.hxx>
@@ -283,11 +282,9 @@ IDENTIFIER      ("_"?({ALPHA}|{DIGIT})+)*
 
 attribute       return IDL_ATTRIBUTE;
 bound           return IDL_BOUND;
-case            return IDL_CASE;
 const           return IDL_CONST;
 constants       return IDL_CONSTANTS;
 constrained     return IDL_CONSTRAINED;
-default         return IDL_DEFAULT;
 enum            return IDL_ENUM;
 exception       return IDL_EXCEPTION;
 interface       return IDL_INTERFACE;
@@ -306,10 +303,8 @@ service         return IDL_SERVICE;
 sequence        return IDL_SEQUENCE;
 singleton       return IDL_SINGLETON;
 struct          return IDL_STRUCT;
-switch          return IDL_SWITCH;
 transient       return IDL_TRANSIENT;
 typedef         return IDL_TYPEDEF;
-union           return IDL_UNION;
 
 any             return IDL_ANY;				
 boolean         return IDL_BOOLEAN;
diff --git a/idlc/test/struct.idl b/idlc/test/struct.idl
index a6c53a6..6871a5e 100644
--- a/idlc/test/struct.idl
+++ b/idlc/test/struct.idl
@@ -102,12 +102,6 @@ struct TestStruct : BaseStruct
     /// a sequence< sequence< long > > member
     sequence< sequence< long > >    ms2;
 
-    /// a long array member with dimesion 5,10
-//  long            ms3[5][10];
-
-    /// a string array member with dimension 4,8
-//  long[5][10]     ms4;
-
     /// an interface member
     XTestBaseTypes ms5;
 
diff --git a/idlc/test/typelookup.idl b/idlc/test/typelookup.idl
index 47932b0..df2c476 100644
--- a/idlc/test/typelookup.idl
+++ b/idlc/test/typelookup.idl
@@ -71,10 +71,6 @@ struct TestStruct : BaseStruct
     hyper           ms2;
     /// a sequence<long> member
     sequence< long >    ms3;
-    /// a long array member with dimesion 5,10
-    long            ms4[5][10];
-    /// a string array member with dimension 4,8
-    long[5][10]     ms5;
 };
 
 }; // test
diff --git a/idlc/test/union.idl b/idlc/test/union.idl
deleted file mode 100644
index e958d68..0000000
--- a/idlc/test/union.idl
+++ /dev/null
@@ -1,55 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- *   Licensed to the Apache Software Foundation (ASF) under one or more
- *   contributor license agreements. See the NOTICE file distributed
- *   with this work for additional information regarding copyright
- *   ownership. The ASF licenses this file to you under the Apache
- *   License, Version 2.0 (the "License"); you may not use this file
- *   except in compliance with the License. You may obtain a copy of
- *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
- */
-
-module idlc
-{
-module test
-{
-
-union UnionTest switch (long) {
-  case 1: long x;
-  case 2: byte y;
-  case 3: string z;
-  case 4:
-  case 5: short w;
-  case 6: long array[ 10 ][ 20 ];
-  case 7: sequence<long> seq;
- default: any a;
-};
-
-typedef enum E {
-  A,
-  B
-} EAlias;
-
-// Union with no default label
-union U2 switch(EAlias) {
-  case E::A : long x;
-  case E::B : short y;
-};
-
-union U3 switch(char) {
-  case 2 : long x;
-  case 4 : short y;
-};
-
-};
-};
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */


More information about the Libreoffice-commits mailing list