LTP GCOV extension - code coverage report
Current view: directory - src/cpp/dev/idlc - idl_bison.yy
Test: YAORB-0.2.info
Date: 2006-02-27 Instrumented lines: 892
Code covered: 57.6 % Executed lines: 514

       1                 : //==============================================================================
       2                 : // File <$/src/cpp/dev/idlc/idl_bison.yy>
       3                 : // This file is part of YaOrb : Yet Another Object Request Broker,
       4                 : // Copyright (c) 2000-2003, 2006, Marc Alff.
       5                 : //
       6                 : // This program is free software; you can redistribute it and/or
       7                 : // modify it under the terms of the GNU General Public License
       8                 : // as published by the Free Software Foundation; either version 2
       9                 : // of the License, or (at your option) any later version.
      10                 : //
      11                 : // This program is distributed in the hope that it will be useful,
      12                 : // but WITHOUT ANY WARRANTY; without even the implied warranty of
      13                 : // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      14                 : // GNU General Public License for more details.
      15                 : //
      16                 : // You should have received a copy of the GNU General Public License
      17                 : // along with this program; if not, write to the Free Software
      18                 : // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
      19                 : //
      20                 : //==============================================================================
      21                 : 
      22                 : /* REFERENCE : OMG Document 99-07-07 */
      23                 : 
      24                 : %start specification
      25                 : 
      26                 : %{
      27                 : // generated from File <$/src/cpp/dev/idlc/idl_bison.yy>
      28                 : // This file is part of YaOrb : Yet Another Object Request Broker,
      29                 : // Copyright (c) 2000-2003, Marc Alff.
      30                 : //
      31                 : // This program is free software; you can redistribute it and/or
      32                 : // modify it under the terms of the GNU General Public License
      33                 : // as published by the Free Software Foundation; either version 2
      34                 : // of the License, or (at your option) any later version.
      35                 : //
      36                 : // This program is distributed in the hope that it will be useful,
      37                 : // but WITHOUT ANY WARRANTY; without even the implied warranty of
      38                 : // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      39                 : // GNU General Public License for more details.
      40                 : //
      41                 : // You should have received a copy of the GNU General Public License
      42                 : // along with this program; if not, write to the Free Software
      43                 : // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
      44                 : //
      45                 : 
      46                 : #include <stdio.h>
      47                 : #include <iostream>
      48                 : 
      49                 : #include "src/cpp/prod/tool/DEVELOPMENT.h"
      50                 : 
      51                 : #include "src/cpp/prod/tool/Assert.h"
      52                 : #include "src/cpp/prod/tool/String.h"
      53                 : #include "src/cpp/prod/tool/WString.h"
      54                 : 
      55                 : #include "src/cpp/dev/idlc/yyutils.h"
      56                 : #include "src/cpp/dev/idlc/all_symbols.h"
      57                 : #include "src/cpp/dev/idlc/struct.h"
      58                 : #include "src/cpp/dev/idlc/exception.h"
      59                 : #include "src/cpp/dev/idlc/struct_member.h"
      60                 : #include "src/cpp/dev/idlc/enum.h"
      61                 : #include "src/cpp/dev/idlc/enum_item.h"
      62                 : #include "src/cpp/dev/idlc/simple_declarator.h"
      63                 : #include "src/cpp/dev/idlc/array_declarator.h"
      64                 : #include "src/cpp/dev/idlc/parameter.h"
      65                 : #include "src/cpp/dev/idlc/attribute.h"
      66                 : #include "src/cpp/dev/idlc/interface.h"
      67                 : #include "src/cpp/dev/idlc/native.h"
      68                 : #include "src/cpp/dev/idlc/typedef.h"
      69                 : #include "src/cpp/dev/idlc/idl_type.h"
      70                 : #include "src/cpp/dev/idlc/value.h"
      71                 : #include "src/cpp/dev/idlc/boolean_value.h"
      72                 : #include "src/cpp/dev/idlc/int_value.h"
      73                 : #include "src/cpp/dev/idlc/char_value.h"
      74                 : #include "src/cpp/dev/idlc/string_value.h"
      75                 : #include "src/cpp/dev/idlc/wstring_value.h"
      76                 : #include "src/cpp/dev/idlc/const_exp.h"
      77                 : #include "src/cpp/dev/idlc/sym_tab.h"
      78                 : #include "src/cpp/dev/idlc/scope.h"
      79                 : 
      80                 : 
      81                 : /*
      82                 : ** ReverseTypeDeclaration is used to do the following :
      83                 : **
      84                 : ** convert two syntaxic trees into a type tree.
      85                 : **
      86                 : ** Example :
      87                 : ** =========
      88                 : **
      89                 : ** the IDL source being parsed is like : long tab3D[10][20][30]
      90                 : **
      91                 : ** INPUT :
      92                 : ** =======
      93                 : ** (type) contains :
      94                 : **  -IDLType (long)
      95                 : **
      96                 : ** (decl) contains :
      97                 : **  - array_declarator (size 10)
      98                 : **     - array_declarator (size 20)
      99                 : **        - array_declarator (size 30)
     100                 : **           - simple_declarator (name tab3D)
     101                 : **
     102                 : **
     103                 : ** OUTPUT :
     104                 : ** ========
     105                 : **
     106                 : ** (type) contains NULL,
     107                 : **
     108                 : ** (decl) contains NULL,
     109                 : **
     110                 : ** (resultType) contains :
     111                 : **  - IDLArrayType (size 30)
     112                 : **     - IDLArrayType (size 20)
     113                 : **        - IDLArrayType (size 10)
     114                 : **           - IDLType (long)
     115                 : **
     116                 : ** (return) contains : tab3D
     117                 : **
     118                 : ** This describes that :
     119                 : ** - tab3D
     120                 : ** - is an array of size 10 of
     121                 : **      an array of size 20 of
     122                 : **         an array of size 30 of
     123                 : **            long
     124                 : **
     125                 : */
     126                 : 
     127                 : static String ReverseTypeDeclaration(
     128                 :    IDLType *& type,
     129                 :    Declarator *& decl,
     130            6840 :    IDLType *& resultType)
     131                 : {
     132                 :    ASSERT(type != NULL) ;
     133                 :    ASSERT(decl != NULL) ;
     134                 : 
     135                 :    // WARNING : MUST return by value, not by reference,
     136                 :    // since decl is destroyed (and contained the name in SimpleDeclarator)
     137            6840 :    String resultName ;
     138                 : 
     139            6840 :    IDLType *current_type = type ;
     140            6840 :    type = NULL ;
     141                 : 
     142            6840 :    Declarator *original_declarator = decl ;
     143            6840 :    decl = NULL ;
     144                 : 
     145                 :    Declarator *currentDeclarator = original_declarator ;
     146                 : 
     147                 :    SimpleDeclarator *simple = NULL ;
     148                 :    ArrayDeclarator *array = NULL ;
     149                 :    int size ;
     150                 : 
     151           13680 :    while (currentDeclarator->GetKind() == ArrayDeclaratorKind)
     152                 :    {
     153               0 :       array = (ArrayDeclarator*) currentDeclarator ;
     154               0 :       size = array->GetSize() ;
     155                 : 
     156                 :       // Consume one tree element on the right side
     157               0 :       currentDeclarator = array->GetElement() ;
     158                 : 
     159                 :       // Add one tree element on the left side
     160               0 :       current_type = new IDLArrayType(size, current_type) ;
     161                 :    }
     162                 : 
     163                 :    ASSERT(currentDeclarator->GetKind() == SimpleDeclaratorKind) ;
     164                 : 
     165                 :    simple = (SimpleDeclarator*) currentDeclarator ;
     166            6840 :    resultName = simple->GetName() ;
     167            6840 :    resultType = current_type ;
     168                 : 
     169                 :    // Chain reaction, do this AFTER simple->GetName() !
     170                 :    // this delete destroys completly the right tree.
     171            6840 :    delete original_declarator ;
     172                 : 
     173               0 :    return resultName ; // Return by VALUE !
     174                 : }
     175                 : 
     176            6631 : static IDLType *Symbol2Type(Symbol *symbol)
     177                 : {
     178                 :    IDLType *result = NULL ;
     179                 : 
     180            6631 :    switch(symbol->GetClass())
     181                 :    {
     182                 :       case moduleSymbol:
     183                 :       {
     184                 :          break ;
     185                 :       }
     186                 :       case interfaceSymbol:
     187                 :       {
     188                 :          Interface *i = (Interface*) symbol ;
     189            2322 :          result = new IDLInterfaceType(i) ;
     190            2322 :          break ;
     191                 :       }
     192                 :       case attributeSymbol:
     193                 :       {
     194                 :          break ;
     195                 :       }
     196                 :       case operationSymbol:
     197                 :       {
     198                 :          break ;
     199                 :       }
     200                 :       case parameterSymbol:
     201                 :       {
     202                 :          break ;
     203                 :       }
     204                 :       case typedefSymbol:
     205                 :       {
     206                 :          Typedef *t = (Typedef*) symbol ;
     207            3464 :          result = new IDLTypedefType(t) ;
     208            3464 :          break ;
     209                 :       }
     210                 :       case structSymbol:
     211                 :       {
     212                 :          Struct *s = (Struct*) symbol ;
     213             422 :          result = new IDLStructType(s) ;
     214             422 :          break ;
     215                 :       }
     216                 :       case memberSymbol:
     217                 :       {
     218                 :          break ;
     219                 :       }
     220                 :       case unionSymbol:
     221                 :       {
     222               0 :          NON_DEV("IDLType for union symbol") ;
     223               0 :          break ;
     224                 :       }
     225                 :       case constantSymbol:
     226                 :       {
     227                 :          break ;
     228                 :       }
     229                 :       case enumSymbol:
     230                 :       {
     231                 :          Enum *e = (Enum*) symbol ;
     232             389 :          result = new IDLEnumType(e) ;
     233             389 :          break ;
     234                 :       }
     235                 :       case enumItemSymbol:
     236                 :       {
     237                 :          break ;
     238                 :       }
     239                 :       case exceptionSymbol:
     240                 :       {
     241                 :          break ;
     242                 :       }
     243                 :       case nativeSymbol:
     244                 :       {
     245                 :          SymNative *native = (SymNative*) symbol ;
     246              28 :          result = new IDLNativeType(native) ;
     247                 :          break ;
     248                 :       }
     249                 :    }
     250                 : 
     251            6625 :    if (result == NULL)
     252                 :    {
     253               6 :       String error = "Symbol \"" ;
     254               6 :       error += symbol->GetName() ;
     255               6 :       error += "\" is not a type." ;
     256               6 :       IDLCompileError(error) ;
     257               6 :       result = new IDLErrorType() ;
     258                 :    }
     259                 : 
     260                 :    return result ;
     261                 : }
     262                 : 
     263                 : static Interface* InterfaceDeclaration(
     264                 :    InterfaceAttribute attr,
     265                 :    const String& name,
     266             864 :    ScopeList *inherit)
     267                 : {
     268                 :    ASSERT(inherit != NULL) ;
     269                 : 
     270                 :    // ============================== PART 1 : check any forward ==============
     271                 : 
     272                 :    Symbol *symbol = NULL ;
     273                 : 
     274             864 :    symbol = g_symTabPtr->findLocalSymbol(name) ;
     275                 : 
     276                 :    Interface *interface = NULL ;
     277                 : 
     278             864 :    if (symbol == NULL)
     279                 :    {
     280             390 :       interface = new Interface(attr, name) ;
     281             390 :       g_symTabPtr->addSymbol(interface) ;
     282                 :    }
     283                 :    else
     284                 :    {
     285             474 :       if (symbol->GetClass() == interfaceSymbol)
     286                 :       {
     287             474 :          interface = (Interface*) symbol ;
     288             474 :          InterfaceAttribute attr2 = interface->GetAttribute() ;
     289                 : 
     290             474 :          if (attr != attr2)
     291                 :          {
     292               1 :             String error = "Interface declaration \"" ;
     293               1 :             error += name ;
     294               1 :             error += "\" conflicts with previous forward declarations." ;
     295               1 :             IDLCompileError(error) ;
     296                 :          }
     297                 : 
     298                 :          // Relocate the entry in last position
     299                 :          // in the symbol table,
     300                 :          // so that the symbol table is 
     301                 :          // ORDERED BY DEFINITION (not DECLARATION)
     302                 : 
     303             474 :          g_symTabPtr->relocateTail(interface) ;
     304                 : 
     305                 :       }
     306                 :       else
     307                 :       {
     308               0 :          NON_DEV("Error Message") ;
     309               0 :          return NULL ;
     310                 :       }
     311                 :    }
     312                 : 
     313                 :    // ============================== PART 2 : add inheritance =================
     314                 : 
     315             864 :    if (interface->IsDefined())
     316                 :    {
     317               1 :       String error = "Interface \"" ;
     318               1 :       error += name ;
     319               1 :       error += "\" is already defined in this scope." ;
     320               1 :       IDLCompileError(error) ;
     321                 : 
     322               1 :       return interface ;
     323                 :    }
     324                 : 
     325             863 :    interface->Define() ;
     326                 : 
     327                 :    ScopeListIt it(*inherit) ;
     328                 :    Scope *scopeInherit = NULL ;
     329                 :    Interface *super = NULL ;
     330                 : 
     331            2409 :    while (it.GetNext())
     332                 :    {
     333                 :       scopeInherit = it.GetItem() ;
     334             683 :       symbol = g_symTabPtr->findSymbol(*scopeInherit) ;
     335                 : 
     336             683 :       if (symbol == NULL)
     337                 :       {
     338               1 :          String error = "Unknown interface." ;
     339               1 :          IDLCompileError(error) ;
     340               1 :          scopeInherit->print(errLog) ;
     341               1 :          errLog << std::endl ;
     342                 :       }
     343                 :       else
     344                 :       {
     345             682 :          if (symbol->GetClass() == interfaceSymbol)
     346                 :          {
     347                 :             super = (Interface*) symbol ;
     348             681 :             interface->addInheritance(super) ;
     349                 :          }
     350                 :          else
     351                 :          {
     352               1 :             NON_DEV("Error message: not an interface") ;
     353                 :          }
     354                 :       }
     355                 :    }
     356                 : 
     357                 :    return interface ;
     358                 : }
     359                 : 
     360                 : static void ForwardInterface(
     361                 :    InterfaceAttribute attr,
     362             477 :    const String& name)
     363                 : {
     364             477 :    String *nameCopy = new String(name) ;
     365             477 :    Scope scope(false, nameCopy) ;
     366                 : 
     367             477 :    Symbol *symbol = g_symTabPtr->findSymbol(scope) ;
     368                 : 
     369                 :    Interface *interface = NULL ;
     370                 : 
     371             477 :    if (symbol == NULL)
     372                 :    {
     373             475 :       interface = new Interface(attr, name) ;
     374             475 :       g_symTabPtr->addSymbol(interface) ;
     375                 :    }
     376                 :    else
     377                 :    {
     378               2 :       if (symbol->GetClass() == interfaceSymbol)
     379                 :       {
     380                 :          interface = (Interface*) symbol ;
     381               1 :          InterfaceAttribute attr2 = interface->GetAttribute() ;
     382                 : 
     383               1 :          if (attr != attr2)
     384                 :          {
     385               1 :             String error = "Interface declaration \"" ;
     386               1 :             error += name ;
     387               1 :             error += "\" conflicts with previous forward declarations." ;
     388               1 :             IDLCompileError(error) ;
     389                 :          }
     390                 :       }
     391                 :       else
     392                 :       {
     393               1 :          NON_DEV("Error Message") ;
     394                 :       }
     395                 :    }
     396                 : 
     397               0 :    return ;
     398                 : }
     399                 : 
     400                 : %}
     401                 : 
     402                 : /* Keywords */
     403                 : 
     404                 : %token TOK_ABSTRACT
     405                 : %token TOK_ANY
     406                 : %token TOK_ATTRIBUTE
     407                 : %token TOK_BOOLEAN
     408                 : %token TOK_CASE
     409                 : %token TOK_CHAR
     410                 : %token TOK_COMPONENT
     411                 : %token TOK_CONST
     412                 : %token TOK_CONSUMES
     413                 : %token TOK_CONTEXT
     414                 : %token TOK_CUSTOM
     415                 : %token TOK_DEFAULT
     416                 : %token TOK_DOUBLE
     417                 : %token TOK_EMITS
     418                 : %token TOK_ENUM
     419                 : %token TOK_EVENTTYPE
     420                 : %token TOK_EXCEPTION
     421                 : %token TOK_FACTORY
     422                 : %token TOK_FINDER
     423                 : %token TOK_FALSE
     424                 : %token TOK_FIXED
     425                 : %token TOK_FLOAT
     426                 : %token TOK_GETRAISES
     427                 : %token TOK_HOME
     428                 : %token TOK_IMPORT
     429                 : %token TOK_IN
     430                 : %token TOK_INOUT
     431                 : %token TOK_INTERFACE
     432                 : %token TOK_LOCAL
     433                 : %token TOK_LONG
     434                 : %token TOK_MODULE
     435                 : %token TOK_MULTIPLE
     436                 : %token TOK_NATIVE
     437                 : %token TOK_OBJECT
     438                 : %token TOK_OCTET
     439                 : %token TOK_ONEWAY
     440                 : %token TOK_OUT
     441                 : %token TOK_PRIMARYKEY
     442                 : %token TOK_PRIVATE
     443                 : %token TOK_PROVIDES
     444                 : %token TOK_PUBLIC
     445                 : %token TOK_PUBLISHES
     446                 : %token TOK_RAISES
     447                 : %token TOK_READONLY
     448                 : %token TOK_SEQUENCE
     449                 : %token TOK_SETRAISES
     450                 : %token TOK_SHORT
     451                 : %token TOK_STRING
     452                 : %token TOK_STRUCT
     453                 : %token TOK_SUPPORTS
     454                 : %token TOK_SWITCH
     455                 : %token TOK_TRUE
     456                 : %token TOK_TRUNCATABLE
     457                 : %token TOK_TYPEDEF
     458                 : %token TOK_TYPEID
     459                 : %token TOK_TYPEPREFIX
     460                 : %token TOK_UNION
     461                 : %token TOK_UNSIGNED
     462                 : %token TOK_USES
     463                 : %token TOK_VALUEBASE
     464                 : %token TOK_VALUETYPE
     465                 : %token TOK_VOID
     466                 : %token TOK_WCHAR
     467                 : %token TOK_WSTRING
     468                 : 
     469                 : /* Punctuation */
     470                 : 
     471                 : %token TOK_SEMICOLON
     472                 : %token TOK_LEFT_CURLY_BRAKET
     473                 : %token TOK_RIGHT_CURLY_BRAKET
     474                 : %token TOK_COLON
     475                 : %token TOK_COMMA
     476                 : %token TOK_EQUALS
     477                 : %token TOK_PLUS
     478                 : %token TOK_MINUS
     479                 : %token TOK_LEFT_PARENTHESIS
     480                 : %token TOK_RIGHT_PARENTHESIS
     481                 : %token TOK_LESS_THAN
     482                 : %token TOK_GREATER_THAN
     483                 : %token TOK_LEFT_SQUARE_BRAKET
     484                 : %token TOK_RIGHT_SQUARE_BRAKET
     485                 : %token TOK_VERTICAL_LINE
     486                 : %token TOK_CIRCUMFLEX
     487                 : %token TOK_AMPERSAND
     488                 : %token TOK_ASTERISK
     489                 : %token TOK_SOLIDUS
     490                 : %token TOK_PERCENT
     491                 : %token TOK_TILDE
     492                 : 
     493                 : 
     494                 : %token TOK_IDENTIFIER
     495                 : %token integer_literal
     496                 : %token string_literal_unit
     497                 : %token wide_string_literal_unit
     498                 : %token character_literal
     499                 : %token wide_character_literal
     500                 : %token fixed_pt_literal
     501                 : %token floating_pt_literal
     502                 : 
     503                 : /* Operators */
     504                 : 
     505                 : %token TOK_DOUBLE_SEMICOLON
     506                 : %token TOK_SHIFT_LEFT
     507                 : %token TOK_SHIFT_RIGHT
     508                 : 
     509                 : /* FIXME : to investigate if real keyword or not */
     510                 : %token TOK_MANAGES
     511                 : 
     512                 : /* Type of $$ */
     513                 : 
     514                 : %union
     515                 : {
     516                 :    String *StringPtr ;
     517                 :    StringList *StringListPtr ;
     518                 :    WString *WStringPtr ;
     519                 :    IDLConstExp *ConstExpPtr ;
     520                 :    IDLType* TypePtr;
     521                 :    Scope *ScopePtr;
     522                 :    ScopeList *ScopeListPtr;
     523                 :    Member *MemberPtr;
     524                 :    MemberList *MemberListPtr;
     525                 :    Declarator *DeclaratorPtr ;
     526                 :    DeclaratorList *DeclaratorListPtr ;
     527                 :    SimpleDeclarator *SimpleDeclaratorPtr ;
     528                 :    SimpleDeclaratorList *SimpleDeclaratorListPtr ;
     529                 :    ParameterAttribute ParamAttributeEnum ;
     530                 :    Parameter *ParameterPtr ;
     531                 :    ParameterList *ParameterListPtr ;
     532                 :    OperationAttribute OpAttributeEnum ;
     533                 :    Interface *InterfacePtr ;
     534                 :    idlSize sizeValue ;
     535                 :    void *NOTHING;
     536                 : }
     537                 : 
     538                 : 
     539                 : %type <StringPtr> TOK_IDENTIFIER
     540                 : %type <StringPtr> string_literal_unit
     541                 : %type <StringPtr> string_literal
     542                 : %type <StringPtr> enumerator
     543                 : 
     544                 : %type <StringListPtr> enumerator_lst
     545                 : %type <StringListPtr> string_literal_lst
     546                 : %type <StringListPtr> context_expr
     547                 : %type <StringListPtr> context_expr_opt
     548                 : 
     549                 : %type <WStringPtr> wide_string_literal_unit
     550                 : %type <WStringPtr> wide_string_literal
     551                 : 
     552                 : %type <ConstExpPtr> const_exp
     553                 : %type <ConstExpPtr> or_exp
     554                 : %type <ConstExpPtr> xor_exp
     555                 : %type <ConstExpPtr> and_exp
     556                 : %type <ConstExpPtr> shift_exp
     557                 : %type <ConstExpPtr> add_exp
     558                 : %type <ConstExpPtr> mult_exp
     559                 : %type <ConstExpPtr> unary_exp
     560                 : %type <ConstExpPtr> primary_exp
     561                 : %type <ConstExpPtr> literal
     562                 : %type <ConstExpPtr> integer_literal
     563                 : %type <ConstExpPtr> character_literal
     564                 : %type <ConstExpPtr> wide_character_literal
     565                 : %type <ConstExpPtr> fixed_pt_literal
     566                 : %type <ConstExpPtr> floating_pt_literal
     567                 : %type <ConstExpPtr> boolean_literal
     568                 : 
     569                 : %type <TypePtr> const_type
     570                 : %type <TypePtr> simple_type_spec
     571                 : %type <TypePtr> base_type_spec
     572                 : %type <TypePtr> template_type_spec
     573                 : %type <TypePtr> floating_pt_type
     574                 : %type <TypePtr> integer_type
     575                 : %type <TypePtr> signed_int
     576                 : %type <TypePtr> signed_short_int
     577                 : %type <TypePtr> signed_long_int
     578                 : %type <TypePtr> signed_longlong_int
     579                 : %type <TypePtr> unsigned_int
     580                 : %type <TypePtr> unsigned_short_int
     581                 : %type <TypePtr> unsigned_long_int
     582                 : %type <TypePtr> unsigned_longlong_int
     583                 : %type <TypePtr> char_type
     584                 : %type <TypePtr> wide_char_type
     585                 : %type <TypePtr> boolean_type
     586                 : %type <TypePtr> octet_type
     587                 : %type <TypePtr> any_type
     588                 : %type <TypePtr> object_type
     589                 : %type <TypePtr> string_type
     590                 : %type <TypePtr> wide_string_type
     591                 : %type <TypePtr> fixed_pt_const_type
     592                 : %type <TypePtr> fixed_pt_type
     593                 : %type <TypePtr> switch_type_spec
     594                 : %type <TypePtr> sequence_type
     595                 : %type <TypePtr> param_type_spec
     596                 : %type <TypePtr> struct_type
     597                 : %type <TypePtr> enum_type
     598                 : %type <TypePtr> union_type
     599                 : %type <TypePtr> op_type_spec
     600                 : %type <TypePtr> constr_type_spec
     601                 : %type <TypePtr> type_spec
     602                 : %type <TypePtr> value_base_type
     603                 : 
     604                 : %type <ScopePtr> scoped_name
     605                 : %type <ScopePtr> interface_name
     606                 : 
     607                 : %type <ScopeListPtr> scoped_name_lst
     608                 : %type <ScopeListPtr> interface_name_lst
     609                 : %type <ScopeListPtr> interface_inheritance_spec
     610                 : %type <ScopeListPtr> interface_inheritance_spec_opt
     611                 : %type <ScopeListPtr> raises_expr
     612                 : %type <ScopeListPtr> raises_expr_opt
     613                 : 
     614                 : %type <MemberPtr> member
     615                 : 
     616                 : %type <MemberListPtr> member_list
     617                 : %type <MemberListPtr> member_lst_opt
     618                 : 
     619                 : %type <DeclaratorPtr> declarator
     620                 : %type <DeclaratorPtr> complex_declarator
     621                 : %type <DeclaratorPtr> array_declarator
     622                 : %type <DeclaratorListPtr> declarators
     623                 : 
     624                 : %type <SimpleDeclaratorPtr> simple_declarator
     625                 : %type <SimpleDeclaratorListPtr> simple_declarator_lst
     626                 : %type <SimpleDeclaratorListPtr> attr_declarator
     627                 : %type <SimpleDeclaratorListPtr> readonly_attr_declarator
     628                 : 
     629                 : %type <ParamAttributeEnum> param_attribute
     630                 : %type <ParamAttributeEnum> init_param_attribute
     631                 : 
     632                 : %type <ParameterPtr> param_dcl
     633                 : 
     634                 : %type <ParameterListPtr> param_dcl_lst
     635                 : %type <ParameterListPtr> parameter_dcls
     636                 : 
     637                 : %type <OpAttributeEnum> op_attribute_opt ;
     638                 : %type <OpAttributeEnum> op_attribute ;
     639                 : 
     640                 : %type <InterfacePtr> interface_header
     641                 : 
     642                 : 
     643                 : %type <NOTHING> specification
     644                 : %type <NOTHING> import_lst_opt
     645                 : %type <NOTHING> import
     646                 : %type <NOTHING> definition_lst
     647                 : %type <NOTHING> definition
     648                 : %type <NOTHING> export
     649                 : %type <NOTHING> type_dcl
     650                 : %type <NOTHING> const_dcl
     651                 : %type <NOTHING> except_dcl
     652                 : %type <NOTHING> module
     653                 : %type <NOTHING> interface_dcl
     654                 : %type <NOTHING> forward_dcl
     655                 : %type <NOTHING> interface
     656                 : %type <NOTHING> attr_dcl
     657                 : %type <NOTHING> readonly_attr_spec
     658                 : %type <NOTHING> attr_spec
     659                 : %type <NOTHING> op_dcl
     660                 : 
     661                 : %type <sizeValue> positive_int_const
     662                 : 
     663                 : 
     664                 : /* FIXME : not implemented */
     665                 : %type <NOTHING> imported_scope
     666                 : %type <NOTHING> type_id_dcl
     667                 : %type <NOTHING> type_prefix_dcl
     668                 : 
     669                 : 
     670                 : %%
     671                 : /* IDL Grammar */
     672                 : 
     673                 : /* OMG Rule (1-a) */
     674                 : 
     675                 : specification
     676                 :    : import_lst_opt
     677                 :      definition_lst
     678                 :       /* No actions */
     679                 :    ;
     680                 : 
     681                 : /* OMG Rule (1-b) */
     682                 : 
     683                 : import_lst_opt
     684                 :    : /* empty */
     685                 :       {
     686                 :          /* No actions */
     687              48 :          $$ = NULL ;
     688                 :       }
     689              48 :    | import_lst_opt import
     690                 :       /* No actions */
     691                 :    ;
     692                 : 
     693                 : /* OMG Rule (1-c) */
     694                 : 
     695                 : definition_lst
     696                 :    : definition
     697                 :       /* No actions */
     698                 :    | definition_lst definition
     699                 :       /* No actions */
     700                 :    ;
     701                 : 
     702                 : /* OMG Rule (2) */
     703                 : 
     704                 : definition
     705                 :    : type_dcl TOK_SEMICOLON
     706                 :       /* No actions */
     707                 :    | const_dcl TOK_SEMICOLON
     708                 :       /* No actions */
     709                 :    | except_dcl TOK_SEMICOLON
     710                 :       /* No actions */
     711                 :    | interface TOK_SEMICOLON
     712                 :       /* No actions */
     713                 :    | module TOK_SEMICOLON
     714                 :       /* No actions */
     715                 :    | value TOK_SEMICOLON
     716                 :       {
     717               5 :          NON_DEV("definition = value") ;
     718                 :       }
     719               5 :    | type_id_dcl TOK_SEMICOLON
     720                 :       {
     721               0 :          NON_DEV("definition") ;
     722                 :       }
     723               0 :    | type_prefix_dcl TOK_SEMICOLON
     724                 :       {
     725               0 :          NON_DEV("definition") ;
     726                 :       }
     727               0 :    | event TOK_SEMICOLON
     728                 :       {
     729               0 :          NON_DEV("definition") ;
     730                 :       }
     731               0 :    | component TOK_SEMICOLON
     732                 :       {
     733               0 :          NON_DEV("definition") ;
     734                 :       }
     735               0 :    | home_dcl TOK_SEMICOLON
     736                 :       {
     737               0 :          NON_DEV("definition") ;
     738                 :       }
     739               0 :    | error TOK_SEMICOLON
     740                 :       {
     741                 :          /* Error recovery : just to use YYERROR **once** */
     742                 :          /* to avoid warnings about yyerrlab1: in the generated code */
     743                 :          YYERROR ;
     744                 :       }
     745                 :    ; 
     746                 : 
     747                 : /* OMG Rule (3) */
     748                 : 
     749                 : module
     750                 :    : TOK_MODULE
     751                 :      TOK_IDENTIFIER
     752                 :       {
     753             110 :          String *moduleName = $2 ;
     754                 :          ASSERT(moduleName != NULL) ;
     755             110 :          Module *module = new Module(*moduleName) ;
     756             110 :          g_symTabPtr->addSymbol(module) ;
     757                 : 
     758             110 :          g_symTabPtr->openContext(*moduleName) ;
     759                 :       }
     760             110 :      TOK_LEFT_CURLY_BRAKET definition_lst TOK_RIGHT_CURLY_BRAKET
     761                 :       {
     762             109 :          g_symTabPtr->closeContext() ;
     763                 :       }
     764             109 :    ;
     765                 : 
     766                 : /* OMG Rule (4) */
     767                 : 
     768                 : interface
     769                 :    : interface_dcl
     770                 :       /* No actions */
     771                 :    | forward_dcl
     772                 :       /* No actions */
     773                 :    ;
     774                 : 
     775                 : /* OMG Rule (5) */
     776                 : 
     777                 : interface_dcl
     778                 :    : interface_header
     779                 :       {
     780                 :          Interface *interface = $1 ;
     781             864 :          String name = interface->GetName() ;
     782             864 :          g_symTabPtr->openContext(name) ;
     783                 :       }
     784             864 :      TOK_LEFT_CURLY_BRAKET interface_body TOK_RIGHT_CURLY_BRAKET
     785                 :       {
     786             863 :          g_symTabPtr->closeContext() ;
     787                 :       }
     788             863 :    ;
     789                 : 
     790                 : /* OMG Rule (6) */
     791                 : 
     792                 : forward_dcl
     793                 :    : TOK_ABSTRACT TOK_INTERFACE TOK_IDENTIFIER
     794                 :       {
     795               1 :          String *name = $3 ;
     796                 :          ASSERT(name != NULL) ;
     797                 : 
     798               1 :          ForwardInterface(INTERFACE_ABSTRACT, *name) ;
     799               1 :          delete name ;
     800                 :       }
     801                 :    | TOK_LOCAL TOK_INTERFACE TOK_IDENTIFIER
     802                 :       {
     803               0 :          String *name = $3 ;
     804                 :          ASSERT(name != NULL) ;
     805                 : 
     806               0 :          ForwardInterface(INTERFACE_LOCAL, *name) ;
     807               0 :          delete name ;
     808                 :       }
     809                 :    | TOK_INTERFACE TOK_IDENTIFIER
     810                 :       {
     811             476 :          String *name = $2 ;
     812                 :          ASSERT(name != NULL) ;
     813                 : 
     814             476 :          ForwardInterface(INTERFACE_NORMAL, *name) ;
     815             476 :          delete name ;
     816                 :       }
     817                 :    ;
     818                 : 
     819                 : /* OMG Rule (7-a) */
     820                 : 
     821                 : interface_header
     822                 :    : TOK_ABSTRACT TOK_INTERFACE TOK_IDENTIFIER interface_inheritance_spec_opt
     823                 :       {
     824               1 :          String *name = $3 ;
     825               1 :          ScopeList *inheritance = $4 ;
     826                 :          ASSERT(name != NULL) ;
     827                 :          ASSERT(inheritance != NULL) ;
     828                 : 
     829                 :          $$ = InterfaceDeclaration(INTERFACE_ABSTRACT,
     830                 :                                    *name,
     831               1 :                                    inheritance) ;
     832                 : 
     833                 :          inheritance->clearAndDestroy() ;
     834               2 :          delete inheritance ;
     835                 : 
     836               1 :          delete name ;
     837                 :       }
     838                 :    | TOK_LOCAL TOK_INTERFACE TOK_IDENTIFIER interface_inheritance_spec_opt
     839                 :       {
     840               0 :          String *name = $3 ;
     841               0 :          ScopeList *inheritance = $4 ;
     842                 :          ASSERT(name != NULL) ;
     843                 :          ASSERT(inheritance != NULL) ;
     844                 : 
     845                 :          $$ = InterfaceDeclaration(INTERFACE_LOCAL,
     846                 :                                    *name,
     847               0 :                                    inheritance) ;
     848                 : 
     849                 :          inheritance->clearAndDestroy() ;
     850               0 :          delete inheritance ;
     851                 : 
     852               0 :          delete name ;
     853                 :       }
     854                 :    | TOK_INTERFACE TOK_IDENTIFIER interface_inheritance_spec_opt
     855                 :       {
     856             863 :          String *name = $2 ;
     857             863 :          ScopeList *inheritance = $3 ;
     858                 :          ASSERT(name != NULL) ;
     859                 :          ASSERT(inheritance != NULL) ;
     860                 : 
     861                 :          $$ = InterfaceDeclaration(INTERFACE_NORMAL,
     862                 :                                    *name,
     863             863 :                                    inheritance) ;
     864                 : 
     865                 :          inheritance->clearAndDestroy() ;
     866            1726 :          delete inheritance ;
     867                 : 
     868             863 :          delete name ;
     869                 :       }
     870                 :    ;
     871                 : 
     872                 : /* OMG Rule (7-b) */
     873                 : 
     874                 : interface_inheritance_spec_opt
     875                 :    : /* empty */
     876                 :       {
     877             335 :          $$ = new ScopeList() ;
     878                 :       }
     879             335 :    | interface_inheritance_spec
     880                 :       {
     881             529 :          $$ = $1 ;
     882                 :       }
     883             529 :    ;
     884                 : 
     885                 : /* OMG Rule (8-a) */
     886                 : 
     887                 : interface_body
     888                 :    : export_lst_opt
     889                 :       /* No actions */
     890                 :    ;
     891                 : 
     892                 : /* OMG Rule (8-b) */
     893                 : 
     894                 : export_lst_opt
     895                 :    : /* empty */
     896                 :       /* No actions */
     897                 :    | export_lst_opt export
     898                 :       /* No actions */
     899                 :    ;
     900                 : 
     901                 : /* OMG Rule (9) */
     902                 : 
     903                 : export
     904                 :    : type_dcl TOK_SEMICOLON
     905                 :       /* No actions */
     906                 :    | const_dcl TOK_SEMICOLON
     907                 :       /* No actions */
     908                 :    | except_dcl TOK_SEMICOLON
     909                 :       /* No actions */
     910                 :    | attr_dcl TOK_SEMICOLON
     911                 :       /* No actions */
     912                 :    | op_dcl TOK_SEMICOLON
     913                 :       /* No actions */
     914                 :    | type_id_dcl TOK_SEMICOLON
     915                 :       /* No actions */
     916                 :    | type_prefix_dcl TOK_SEMICOLON
     917                 :       /* No actions */
     918                 :    ;
     919                 : 
     920                 : /* OMG Rule (10-a) */
     921                 : 
     922                 : interface_inheritance_spec
     923                 :    : TOK_COLON interface_name_lst
     924                 :       {
     925             529 :          $$ = $2 ;
     926                 :       }
     927             529 :    ;
     928                 : 
     929                 : /* OMG Rule (10-b) */
     930                 : 
     931                 : interface_name_lst
     932                 :    : interface_name
     933                 :       {
     934             529 :          $$ = new ScopeList($1) ;
     935                 :       }
     936             529 :    | interface_name_lst TOK_COMMA interface_name
     937                 :       {
     938             154 :          $1->addTail($3) ;
     939             154 :          $$ = $1 ;
     940                 :       }
     941             154 :    ;
     942                 : 
     943                 : /* OMG Rule (11) */
     944                 : interface_name
     945                 :    : scoped_name
     946                 :       {
     947             683 :          $$ = $1 ;
     948                 :       }
     949             683 :    ;
     950                 : 
     951                 : /* OMG Rule (12) */
     952                 : 
     953                 : scoped_name
     954                 :    : TOK_IDENTIFIER
     955                 :       {
     956            8879 :          $$ = new Scope(false, $1) ;
     957                 :       }
     958            8879 :    | TOK_DOUBLE_SEMICOLON TOK_IDENTIFIER
     959                 :       {
     960               0 :          $$ = new Scope(true, $2) ;
     961                 :       }
     962               0 :    | scoped_name TOK_DOUBLE_SEMICOLON TOK_IDENTIFIER
     963                 :       {
     964             488 :          $1->AppendName($3) ;
     965             488 :          $$ = $1 ;
     966                 :       }
     967             488 :    ;
     968                 : 
     969                 : /* OMG Rule (13) */
     970                 : 
     971                 : value
     972                 :    : value_dcl
     973                 :       {
     974               1 :          NON_DEV("value") ;
     975                 :       }
     976               1 :    | value_abs_dcl
     977                 :       {
     978               1 :          NON_DEV("value") ;
     979                 :       }
     980               1 :    | value_box_dcl
     981                 :       {
     982               1 :          NON_DEV("value") ;
     983                 :       }
     984               1 :    | value_forward_dcl
     985                 :       {
     986               2 :          NON_DEV("value") ;
     987                 :       }
     988               2 :    ;
     989                 : 
     990                 : /* OMG Rule (14) */
     991                 : 
     992                 : value_forward_dcl
     993                 :    : TOK_ABSTRACT TOK_VALUETYPE TOK_IDENTIFIER
     994                 :       {
     995               1 :          NON_DEV("value_forward_dcl") ;
     996                 :       }
     997               1 :    | TOK_VALUETYPE TOK_IDENTIFIER
     998                 :       {
     999               1 :          NON_DEV("value_forward_dcl") ;
    1000                 :       }
    1001               1 :    ;
    1002                 : 
    1003                 : /* OMG Rule (15) */
    1004                 : 
    1005                 : value_box_dcl
    1006                 :    : TOK_VALUETYPE TOK_IDENTIFIER type_spec
    1007                 :       {
    1008               1 :          NON_DEV("value_box_dcl") ;
    1009                 :       }
    1010               1 :    ;
    1011                 : 
    1012                 : /* OMG Rule (16-a) */
    1013                 : 
    1014                 : value_abs_dcl
    1015                 :    : TOK_ABSTRACT TOK_VALUETYPE TOK_IDENTIFIER value_inheritance_spec_opt
    1016                 :      TOK_LEFT_CURLY_BRAKET export_lst_opt TOK_RIGHT_CURLY_BRAKET
    1017                 :       {
    1018               1 :          NON_DEV("value_abs_dcl") ;
    1019                 :       }
    1020               1 :    ;
    1021                 : 
    1022                 : /* OMG Rule (16-b) */
    1023                 : 
    1024                 : value_inheritance_spec_opt
    1025                 :    : /* empty */
    1026                 :       {
    1027               2 :          NON_DEV("value_inheritance_spec_opt") ;
    1028                 :       }
    1029               2 :    | value_inheritance_spec
    1030                 :       {
    1031               0 :          NON_DEV("value_inheritance_spec_opt") ;
    1032                 :       }
    1033               0 :    ;
    1034                 : 
    1035                 : /* OMG Rule (17-a) */
    1036                 : 
    1037                 : value_dcl
    1038                 :    : value_header
    1039                 :      TOK_LEFT_CURLY_BRAKET value_element_lst_opt TOK_RIGHT_CURLY_BRAKET
    1040                 :       {
    1041               1 :          NON_DEV("value_dcl") ;
    1042                 :       }
    1043               1 :    ;
    1044                 : 
    1045                 : /* OMG Rule (17-b) */
    1046                 : 
    1047                 : value_element_lst_opt
    1048                 :    : /* empty */
    1049                 :       {
    1050               1 :          NON_DEV("value_element_lst_opt") ;
    1051                 :       }
    1052               1 :    | value_element_lst_opt TOK_COMMA value_element
    1053                 :       {
    1054               0 :          NON_DEV("value_element_lst_opt") ;
    1055                 :       }
    1056               0 :    ;
    1057                 : 
    1058                 : /* OMG Rule (18) */
    1059                 : 
    1060                 : value_header
    1061                 :    : TOK_CUSTOM TOK_VALUETYPE TOK_IDENTIFIER value_inheritance_spec_opt
    1062                 :       {
    1063               1 :          NON_DEV("value_header") ;
    1064                 :       }
    1065               1 :    | TOK_VALUETYPE TOK_IDENTIFIER value_inheritance_spec_opt
    1066                 :       {
    1067               0 :          NON_DEV("value_header") ;
    1068                 :       }
    1069               0 :    ;
    1070                 : 
    1071                 : /* OMG Rule (19-a) : FIXME, bogus grammar */
    1072                 : 
    1073                 : value_inheritance_spec
    1074                 :    : TOK_COLON TOK_TRUNCATABLE value_name_lst
    1075                 :       {
    1076               0 :          NON_DEV("value_inheritance_spec") ;
    1077                 :       }
    1078               0 :    | TOK_COLON value_name_lst
    1079                 :       {
    1080               0 :          NON_DEV("value_inheritance_spec") ;
    1081                 :       }
    1082               0 : /*
    1083                 : **   | TOK_SUPPORTS interface_name_lst
    1084                 : **      {
    1085                 : **         NON_DEV("value_inheritance_spec") ;
    1086                 : **      }
    1087                 : */
    1088                 :    ;
    1089                 : 
    1090                 : /* OMG Rule (19-b) */
    1091                 : 
    1092                 : value_name_lst
    1093                 :    : value_name
    1094                 :       {
    1095               0 :          NON_DEV("value_name_lst") ;
    1096                 :       }
    1097               0 :    | value_name_lst TOK_COMMA value_name
    1098                 :       {
    1099               0 :          NON_DEV("value_name_lst") ;
    1100                 :       }
    1101               0 :    ;
    1102                 : 
    1103                 : /* OMG Rule (20) */
    1104                 : 
    1105                 : value_name
    1106                 :    : scoped_name
    1107                 :       {
    1108               0 :          NON_DEV("value_name") ;
    1109                 :       }
    1110               0 :    ;
    1111                 : 
    1112                 : 
    1113                 : /* OMG Rule (21) */
    1114                 : 
    1115                 : value_element
    1116                 :    : export
    1117                 :       {
    1118               0 :          NON_DEV("value_element") ;
    1119                 :       }
    1120               0 :    | state_member
    1121                 :       {
    1122               0 :          NON_DEV("value_element") ;
    1123                 :       }
    1124               0 :    | init_dcl
    1125                 :       {
    1126               0 :          NON_DEV("value_element") ;
    1127                 :       }
    1128               0 :    ;
    1129                 : 
    1130                 : /* OMG Rule (22) */
    1131                 : 
    1132                 : state_member
    1133                 :    : TOK_PUBLIC type_spec declarators TOK_SEMICOLON
    1134                 :       {
    1135               0 :          NON_DEV("state_member") ;
    1136                 :       }
    1137               0 :    | TOK_PRIVATE type_spec declarators TOK_SEMICOLON
    1138                 :       {
    1139               0 :          NON_DEV("state_member") ;
    1140                 :       }
    1141               0 :    ;
    1142                 : 
    1143                 : /* OMG Rule (23-a) */
    1144                 : 
    1145                 : init_dcl
    1146                 :    : TOK_FACTORY TOK_IDENTIFIER
    1147                 :      TOK_LEFT_PARENTHESIS init_param_decls_opt TOK_RIGHT_PARENTHESIS
    1148                 :      raises_expr_opt
    1149                 :      TOK_SEMICOLON
    1150                 :       {
    1151               0 :          NON_DEV("init_dcl") ;
    1152                 :       }
    1153               0 :    ;
    1154                 : 
    1155                 : /* OMG Rule (23-b) */
    1156                 : 
    1157                 : init_param_decls_opt
    1158                 :    : /* empty */
    1159                 :       {
    1160               0 :          NON_DEV("init_param_decls_opt") ;
    1161                 :       }
    1162               0 :    | init_param_decls
    1163                 :       {
    1164               0 :          NON_DEV("init_param_decls_opt") ;
    1165                 :       }
    1166               0 :    ;
    1167                 : 
    1168                 : /* OMG Rule (24) */
    1169                 : 
    1170                 : init_param_decls
    1171                 :    : init_param_decl
    1172                 :       {
    1173               0 :          NON_DEV("init_param_decls") ;
    1174                 :       }
    1175               0 :    | init_param_decls TOK_COMMA init_param_decl
    1176                 :       {
    1177               0 :          NON_DEV("init_param_decls") ;
    1178                 :       }
    1179               0 :    ;
    1180                 : 
    1181                 : /* OMG Rule (25) */
    1182                 : 
    1183                 : init_param_decl
    1184                 :    : init_param_attribute param_type_spec simple_declarator
    1185                 :       {
    1186               0 :          NON_DEV("init_param_decl") ;
    1187                 :       }
    1188               0 :    ;
    1189                 : 
    1190                 : /* OMG Rule (26) */
    1191                 : 
    1192                 : init_param_attribute
    1193                 :    : TOK_IN
    1194                 :       {
    1195               0 :          $$ = PARAMETER_IN ;
    1196                 :       }
    1197               0 :    ;
    1198                 : 
    1199                 : /* OMG Rule (27) */
    1200                 : 
    1201                 : const_dcl
    1202                 :    : TOK_CONST const_type TOK_IDENTIFIER TOK_EQUALS const_exp
    1203                 :       {
    1204             605 :          IDLType    *type = $2 ;
    1205             605 :          String     *name = $3 ;
    1206             605 :          IDLConstExp *exp = $5 ;
    1207                 : 
    1208                 :          ASSERT(type != NULL) ;
    1209                 :          ASSERT(name != NULL) ;
    1210                 :          ASSERT(exp  != NULL) ;
    1211                 : 
    1212             605 :          IDLValue *value = exp->evaluate(type) ;
    1213                 : 
    1214             605 :          Constant *constant = new Constant(*name, value) ;
    1215                 : 
    1216                 :          ASSERT(g_symTabPtr != NULL) ;
    1217             605 :          g_symTabPtr->addSymbol(constant) ;
    1218                 : 
    1219             605 :          delete name ;
    1220             605 :          delete exp ;
    1221             605 :          delete type ;
    1222                 :       }
    1223                 :    ;
    1224                 : 
    1225                 : /* OMG Rule (28) */
    1226                 : 
    1227                 : const_type
    1228                 :    : integer_type
    1229                 :       {
    1230             449 :          $$ = $1 ;
    1231                 :       }
    1232             449 :    | char_type
    1233                 :       {
    1234              18 :          $$ = $1 ;
    1235                 :       }
    1236              18 :    | wide_char_type
    1237                 :       {
    1238              16 :          $$ = $1 ;
    1239                 :       }
    1240              16 :    | boolean_type
    1241                 :       {
    1242               0 :          $$ = $1 ;
    1243                 :       }
    1244               0 :    | floating_pt_type
    1245                 :       {
    1246              12 :          $$ = $1 ;
    1247                 :       }
    1248              12 :    | string_type
    1249                 :       {
    1250               1 :          $$ = $1 ;
    1251                 :       }
    1252               1 :    | wide_string_type
    1253                 :       {
    1254               1 :          $$ = $1 ;
    1255                 :       }
    1256               1 :    | fixed_pt_const_type
    1257                 :       {
    1258               0 :          $$ = $1 ;
    1259                 :       }
    1260               0 :    | scoped_name
    1261                 :       {
    1262             104 :          Scope *scope = $1 ;
    1263             104 :          Symbol *symbol = g_symTabPtr->findSymbol(*scope) ;
    1264                 : 
    1265             104 :          if (symbol == NULL)
    1266                 :          {
    1267               0 :             String error = "Undefined symbol " ;
    1268               0 :             error += scope->GetFullName() ;
    1269               0 :             IDLCompileError(error) ;
    1270                 : 
    1271               0 :             $$ = new IDLErrorType() ;
    1272                 :          }
    1273                 :          else
    1274                 :          {
    1275             104 :             if (symbol->GetClass() != typedefSymbol)
    1276                 :             {
    1277               0 :                NON_DEV("check symbol is a typedef") ;
    1278               0 :                $$ = new IDLErrorType() ;
    1279                 :             }
    1280                 :             else
    1281                 :             {
    1282                 :                Typedef *t = (Typedef*) symbol ;
    1283             104 :                $$ = new IDLTypedefType(t) ;
    1284                 :             }
    1285                 :          }
    1286                 :       }
    1287                 :    | octet_type
    1288                 :       {
    1289               4 :          $$ = $1 ;
    1290                 :       }
    1291               4 :    ;
    1292                 : 
    1293                 : /* OMG Rule (29) */
    1294                 : 
    1295                 : const_exp
    1296                 :    : or_exp
    1297                 :       {
    1298             605 :          $$ = $1 ;
    1299                 :       }
    1300             605 :    ;
    1301                 : 
    1302                 : /* OMG Rule (30) */
    1303                 : 
    1304                 : or_exp
    1305                 :    : xor_exp
    1306                 :       {
    1307             605 :          $$ = $1 ;
    1308                 :       }
    1309             605 :    | or_exp TOK_VERTICAL_LINE xor_exp
    1310                 :       {
    1311               8 :          $$ = new IDLBinaryExp($1, idl_or, $3) ;
    1312                 :       }
    1313               8 :    ;
    1314                 : 
    1315                 : /* OMG Rule (31) */
    1316                 : 
    1317                 : xor_exp
    1318                 :    : and_exp
    1319                 :       {
    1320             613 :          $$ = $1 ;
    1321                 :       }
    1322             613 :    | xor_exp TOK_CIRCUMFLEX and_exp
    1323                 :       {
    1324               8 :          $$ = new IDLBinaryExp($1, idl_xor, $3) ;
    1325                 :       }
    1326               8 :    ;
    1327                 : 
    1328                 : /* OMG Rule (32) */
    1329                 : 
    1330                 : and_exp
    1331                 :    : shift_exp
    1332                 :       {
    1333             621 :          $$ = $1 ;
    1334                 :       }
    1335             621 :    | and_exp TOK_AMPERSAND shift_exp
    1336                 :       {
    1337               8 :          $$ = new IDLBinaryExp($1, idl_and, $3) ;
    1338                 :       }
    1339               8 :    ;
    1340                 : 
    1341                 : /* OMG Rule (33) */
    1342                 : 
    1343                 : shift_exp
    1344                 :    : add_exp
    1345                 :       {
    1346             629 :          $$ = $1 ;
    1347                 :       }
    1348             629 :    | shift_exp TOK_SHIFT_RIGHT add_exp
    1349                 :       {
    1350               8 :          $$ = new IDLBinaryExp($1, idl_shr, $3) ;
    1351                 :       }
    1352               8 :    | shift_exp TOK_SHIFT_LEFT add_exp
    1353                 :       {
    1354              59 :          $$ = new IDLBinaryExp($1, idl_shl, $3) ;
    1355                 :       }
    1356              59 :    ;
    1357                 : 
    1358                 : /* OMG Rule (34) */
    1359                 : 
    1360                 : add_exp
    1361                 :    : mult_exp
    1362                 :       {
    1363             696 :          $$ = $1 ;
    1364                 :       }
    1365             696 :    | add_exp TOK_PLUS mult_exp
    1366                 :       {
    1367              30 :          $$ = new IDLBinaryExp($1, idl_add, $3) ;
    1368                 :       }
    1369              30 :    | add_exp TOK_MINUS mult_exp
    1370                 :       {
    1371              29 :          $$ = new IDLBinaryExp($1, idl_sub, $3) ;
    1372                 :       }
    1373              29 :    ;
    1374                 : 
    1375                 : /* OMG Rule (35) */
    1376                 : 
    1377                 : mult_exp
    1378                 :    : unary_exp
    1379                 :       {
    1380             755 :          $$ = $1 ;
    1381                 :       }
    1382             755 :    | mult_exp TOK_ASTERISK unary_exp
    1383                 :       {
    1384              11 :          $$ = new IDLBinaryExp($1, idl_mul, $3) ;
    1385                 :       }
    1386              11 :    | mult_exp TOK_SOLIDUS unary_exp
    1387                 :       {
    1388              11 :          $$ = new IDLBinaryExp($1, idl_div, $3) ;
    1389                 :       }
    1390              11 :    | mult_exp TOK_PERCENT unary_exp
    1391                 :       {
    1392               8 :          $$ = new IDLBinaryExp($1, idl_mod, $3) ;
    1393                 :       }
    1394               8 :    ;
    1395                 : 
    1396                 : /* OMG Rule (36) + OMG Rule (37) expanded */
    1397                 : 
    1398                 : unary_exp
    1399                 :    : TOK_PLUS primary_exp
    1400                 :       {
    1401               6 :          $$ = $2 ;
    1402                 :       }
    1403               6 :    | TOK_MINUS primary_exp
    1404                 :       {
    1405              67 :          $$ = new IDLUnaryExp(idl_unary_minus, $2) ;
    1406                 :       }
    1407              67 :    | TOK_TILDE primary_exp
    1408                 :       {
    1409               8 :          $$ = new IDLUnaryExp(idl_unary_neg, $2) ;
    1410                 :       }
    1411               8 :    | primary_exp
    1412                 :       {
    1413             704 :          $$ = $1 ;
    1414                 :       }
    1415             704 :    ;
    1416                 : 
    1417                 : /* OMG Rule (37) */
    1418                 : /*
    1419                 :  * unary_operator
    1420                 :  *    : TOK_MINUS
    1421                 :  *    | TOK_PLUS
    1422                 :  *    | TOK_TILDE
    1423                 :  *    ;
    1424                 :  */
    1425                 : 
    1426                 : /* OMG Rule (38) */
    1427                 : 
    1428                 : primary_exp
    1429                 :    : scoped_name
    1430                 :       {
    1431             282 :          Scope *scope = $1 ;
    1432                 :          ASSERT(scope != NULL) ;
    1433                 : 
    1434             282 :          Symbol *symbol = g_symTabPtr->findSymbol(*scope) ;
    1435                 : 
    1436             282 :          if (symbol == NULL)
    1437                 :          {
    1438               0 :             String error = "Undefined symbol " ;
    1439               0 :             error += scope->GetFullName() ;
    1440               0 :             IDLCompileError(error) ;
    1441                 : 
    1442               0 :             IDLValue * v = new IDLIntValue() ;
    1443               0 :             $$ = new IDLValueExp(v) ;
    1444                 :          }
    1445                 :          else
    1446                 :          {
    1447             282 :             switch(symbol->GetClass())
    1448                 :             {
    1449                 :                case constantSymbol :
    1450                 :                {
    1451                 :                   Constant * c = (Constant*) symbol ;
    1452             282 :                   IDLValue * v = c->GetValue() ;
    1453             282 :                   $$ = new IDLValueExp(v) ;
    1454             282 :                   break ;
    1455                 :                }
    1456                 :                case enumItemSymbol :
    1457                 :                {
    1458               0 :                   NON_DEV("enum item as a constant") ;
    1459                 : 
    1460               0 :                   IDLValue * v = new IDLIntValue() ;
    1461               0 :                   $$ = new IDLValueExp(v) ;
    1462               0 :                   break ;
    1463                 :                }
    1464                 :                default :
    1465                 :                {
    1466               0 :                   IDLCompileError("Symbol is not a constant") ;
    1467               0 :                   scope->print(errLog) ;
    1468                 :                   errLog << std::endl ;
    1469                 : 
    1470               0 :                   IDLValue * v = new IDLIntValue() ;
    1471               0 :                   $$ = new IDLValueExp(v) ;
    1472                 :                }
    1473                 :             }
    1474                 :          }
    1475                 :       }
    1476                 :    | literal
    1477                 :       {
    1478             503 :          $$ = $1 ;
    1479                 :       }
    1480             503 :    | TOK_LEFT_PARENTHESIS const_exp TOK_RIGHT_PARENTHESIS
    1481                 :       {
    1482               0 :          $$ = $2 ;
    1483                 :       }
    1484               0 :    ;
    1485                 : 
    1486                 : /* OMG Rule (39) */
    1487                 : 
    1488                 : literal
    1489                 :    : integer_literal
    1490                 :       {
    1491             466 :          $$ = $1 ;
    1492                 :       }
    1493             466 :    | string_literal
    1494                 :       {
    1495               4 :          String *str = $1 ;
    1496                 :          ASSERT(str != NULL) ;
    1497               4 :          $$ = new IDLValueExp(new IDLStringValue(*str)) ;
    1498                 :       }
    1499               4 :    | wide_string_literal
    1500                 :       {
    1501               1 :          WString *str = $1 ;
    1502                 :          ASSERT(str != NULL) ;
    1503               1 :          $$ = new IDLValueExp(new IDLWStringValue(*str)) ;
    1504                 :       }
    1505               1 :    | character_literal
    1506                 :       {
    1507               5 :          $$ = $1 ;
    1508                 :       }
    1509               5 :    | wide_character_literal
    1510                 :       {
    1511               3 :          $$ = $1 ;
    1512                 :       }
    1513               3 :    | fixed_pt_literal
    1514                 :       {
    1515               0 :          $$ = $1 ;
    1516                 :       }
    1517               0 :    | floating_pt_literal
    1518                 :       {
    1519              24 :          $$ = $1 ;
    1520                 :       }
    1521              24 :    | boolean_literal
    1522                 :       {
    1523               0 :          $$ = $1 ;
    1524                 :       }
    1525               0 :    ;
    1526                 : 
    1527                 : /* OMG Rule (40) */
    1528                 : 
    1529                 : boolean_literal
    1530                 :    : TOK_TRUE
    1531                 :       {
    1532               0 :          IDLValue * v = new IDLBooleanValue(true) ;
    1533               0 :          $$ = new IDLValueExp(v) ;
    1534                 :       }
    1535               0 :    | TOK_FALSE
    1536                 :       {
    1537               0 :          IDLValue * v = new IDLBooleanValue(false) ;
    1538               0 :          $$ = new IDLValueExp(v) ;
    1539                 :       }
    1540               0 :    ;
    1541                 : 
    1542                 : /* OMG Rule (41) */
    1543                 : 
    1544                 : positive_int_const
    1545                 :    : const_exp
    1546                 :       {
    1547               0 :          IDLIntType posInt(idl_unsigned_long_long) ;
    1548               0 :          IDLConstExp *exp = $1 ;
    1549                 :          idlSize size = 0 ;
    1550                 :          IDLValue *value = NULL ;
    1551                 : 
    1552               0 :          if (exp != NULL)
    1553                 :          {
    1554               0 :             value = exp->evaluate(& posInt) ;
    1555                 :          }
    1556                 : 
    1557               0 :          if (value != NULL)
    1558                 :          {
    1559               0 :             if (value->IsError() == false)
    1560                 :             {
    1561                 :                IDLIntValue *intVal = NULL ;
    1562                 :                intVal = (IDLIntValue*) value ;
    1563               0 :                size = intVal->GetU64() ;
    1564                 :             }
    1565                 :             else
    1566                 :             {
    1567               0 :                NON_DEV("error msg : positive_int_exp") ;
    1568                 :             }
    1569                 :          }
    1570                 :          else
    1571                 :          {
    1572               0 :             NON_DEV("error msg : positive_int_exp") ;
    1573                 :          }
    1574                 : 
    1575               0 :          if (value != NULL)
    1576                 :          {
    1577               0 :             delete value ;
    1578                 :          }
    1579                 : 
    1580               0 :          if (exp != NULL)
    1581                 :          {
    1582               0 :             delete exp ;
    1583                 :          }
    1584                 : 
    1585               0 :          $$ = size ;
    1586                 :       }
    1587               0 :    ;
    1588                 : 
    1589                 : /* OMG Rule (42) */
    1590                 : 
    1591                 : type_dcl
    1592                 :    : TOK_TYPEDEF type_declarator
    1593                 :       {
    1594                 :          /* No actions */
    1595             557 :          $$ = NULL ;
    1596                 :       }
    1597             557 :    | struct_type
    1598                 :       {
    1599                 :          /* No actions */
    1600             360 :          $$ = NULL ;
    1601                 :       }
    1602             360 :    | union_type
    1603                 :       {
    1604               0 :          NON_DEV("type_dcl") ;
    1605                 :       }
    1606               0 :    | enum_type
    1607                 :       {
    1608                 :          /* No actions */
    1609             155 :          $$ = NULL ;
    1610                 :       }
    1611             155 :    | TOK_NATIVE simple_declarator
    1612                 :       {
    1613               4 :          SimpleDeclarator *decl = $2 ;
    1614               4 :          String name = decl->GetName() ;
    1615               4 :          SymNative *native = new SymNative(name) ;
    1616               4 :          g_symTabPtr->addSymbol(native) ;
    1617                 : 
    1618               4 :          delete decl ;
    1619               4 :          $$ = NULL ;
    1620                 :       }
    1621               4 :    | constr_forward_decl
    1622                 :       {
    1623               0 :          NON_DEV("type_dcl") ;
    1624                 :       }
    1625               0 :    ;
    1626                 : 
    1627                 : /* OMG Rule (43) */
    1628                 : 
    1629                 : type_declarator
    1630                 :    : type_spec declarators
    1631                 :       {
    1632             557 :          IDLType *type = $1 ;
    1633             557 :          DeclaratorList *decls = $2 ;
    1634                 : 
    1635                 :          ASSERT(type != NULL) ;
    1636                 :          ASSERT(decls != NULL) ;
    1637                 : 
    1638             557 :          String name ;
    1639             557 :          Declarator *decl = NULL ;
    1640                 :          Typedef *typedef_symbol = NULL ;
    1641             557 :          IDLType *typedef_type = NULL ;
    1642                 : 
    1643             557 :          if (decls->size() == 1)
    1644                 :          {
    1645             557 :             decl = decls->removeHead() ;
    1646                 : 
    1647             557 :             name = ReverseTypeDeclaration(type, decl, typedef_type) ;
    1648                 : 
    1649             557 :             typedef_symbol = new Typedef(name, typedef_type) ;
    1650             557 :             g_symTabPtr->addSymbol(typedef_symbol) ;
    1651                 :          }
    1652                 :          else
    1653                 :          {
    1654                 :             // DeclaratorListIt it(*decls) ;
    1655               0 :             NON_DEV("loop in type_declarator") ;
    1656                 :          }
    1657                 : 
    1658                 :          decls->clear() ;
    1659            1114 :          delete decls ;
    1660                 :       }
    1661             557 :    ;
    1662                 : 
    1663                 : /* OMG Rule (44) */
    1664                 : 
    1665                 : type_spec
    1666                 :    : simple_type_spec
    1667                 :       {
    1668            2423 :          $$ = $1 ;
    1669                 :       }
    1670            2423 :    | constr_type_spec
    1671                 :       {
    1672               4 :          $$ = $1 ;
    1673                 :       }
    1674               4 :    ;
    1675                 : 
    1676                 : /* OMG Rule (45) */
    1677                 : 
    1678                 : simple_type_spec
    1679                 :    : base_type_spec
    1680                 :       {
    1681             308 :          $$ = $1 ;
    1682                 :       }
    1683             308 :    | template_type_spec
    1684                 :       {
    1685             479 :          $$ = $1 ;
    1686                 :       }
    1687             479 :    | scoped_name
    1688                 :       {
    1689            2025 :          Scope *scope = $1 ;
    1690            2025 :          Symbol *symbol = g_symTabPtr->findSymbol(*scope) ;
    1691                 : 
    1692            2025 :          if (symbol == NULL)
    1693                 :          {
    1694               0 :             String error = "Undefined symbol " ;
    1695               0 :             error += scope->GetFullName() ;
    1696               0 :             IDLCompileError(error) ;
    1697                 : 
    1698               0 :             $$ = new IDLErrorType() ;
    1699                 :          }
    1700                 :          else
    1701                 :          {
    1702            2025 :             $$ = Symbol2Type(symbol) ;
    1703                 :          }
    1704                 :       }
    1705                 :    ;
    1706                 : 
    1707                 : /* OMG Rule (46) */
    1708                 : 
    1709                 : base_type_spec
    1710                 :    : floating_pt_type
    1711                 :       {
    1712               0 :          $$ = $1 ;
    1713                 :       }
    1714               0 :    | integer_type
    1715                 :       {
    1716             741 :          $$ = $1 ;
    1717                 :       }
    1718             741 :    | char_type
    1719                 :       {
    1720               5 :          $$ = $1 ;
    1721                 :       }
    1722               5 :    | wide_char_type
    1723                 :       {
    1724               0 :          $$ = $1 ;
    1725                 :       }
    1726               0 :    | boolean_type
    1727                 :       {
    1728             621 :          $$ = $1 ;
    1729                 :       }
    1730             621 :    | octet_type
    1731                 :       {
    1732               5 :          $$ = $1 ;
    1733                 :       }
    1734               5 :    | any_type
    1735                 :       {
    1736             256 :          $$ = $1 ;
    1737                 :       }
    1738             256 :    | object_type
    1739                 :       {
    1740              82 :          $$ = $1 ;
    1741                 :       }
    1742              82 :    | value_base_type
    1743                 :       {
    1744               0 :          $$ = $1 ;
    1745                 :       }
    1746               0 :    ;
    1747                 : 
    1748                 : 
    1749                 : /* OMG Rule (47) */
    1750                 : 
    1751                 : template_type_spec
    1752                 :    : sequence_type
    1753                 :       {
    1754             389 :          $$ = $1 ;
    1755                 :       }
    1756             389 :    | string_type
    1757                 :       {
    1758              90 :          $$ = $1 ;
    1759                 :       }
    1760              90 :    | wide_string_type
    1761                 :       {
    1762               0 :          $$ = $1 ;
    1763                 :       }
    1764               0 :    | fixed_pt_type
    1765                 :       {
    1766               0 :          $$ = $1 ;
    1767                 :       }
    1768               0 :    ;
    1769                 : 
    1770                 : /* OMG Rule (48) */
    1771                 : 
    1772                 : constr_type_spec
    1773                 :    : struct_type
    1774                 :       {
    1775               4 :          $$ = $1 ;
    1776                 :       }
    1777               4 :    | union_type
    1778                 :       {
    1779               0 :          $$ = $1 ;
    1780                 :       }
    1781               0 :    | enum_type
    1782                 :       {
    1783               0 :          $$ = $1 ;
    1784                 :       }
    1785               0 :    ;
    1786                 : 
    1787                 : /* OMG Rule (49) */
    1788                 : 
    1789                 : declarators
    1790                 :    : declarator
    1791                 :       {
    1792             557 :          $$ = new DeclaratorList($1) ;
    1793                 :       }
    1794             557 :    | declarators TOK_COMMA declarator
    1795                 :       {
    1796               0 :          $1->addTail($3) ;
    1797               0 :          $$ = $1 ;
    1798                 :       }
    1799               0 :    ;
    1800                 : 
    1801                 : /* OMG Rule (50) */
    1802                 : 
    1803                 : declarator
    1804                 :    : simple_declarator
    1805                 :       {
    1806            2426 :          $$ = $1 ;
    1807                 :       }
    1808            2426 :    | complex_declarator
    1809                 :       {
    1810               0 :          $$ = $1 ;
    1811                 :       }
    1812               0 :    ;
    1813                 : 
    1814                 : /* OMG Rule (51) */
    1815                 : 
    1816                 : simple_declarator
    1817                 :    : TOK_IDENTIFIER
    1818                 :       {
    1819            6844 :          String *str = $1 ;
    1820                 :          ASSERT(str != NULL) ;
    1821                 : 
    1822            6844 :          $$ = new SimpleDeclarator(*str) ;
    1823            6844 :          delete str ;
    1824                 :       }
    1825                 :    ;
    1826                 : 
    1827                 : /* OMG Rule (52) */
    1828                 : 
    1829                 : complex_declarator
    1830                 :    : array_declarator
    1831                 :       {
    1832               0 :          $$ = $1 ;
    1833                 :       }
    1834               0 :    ;
    1835                 : 
    1836                 : /* OMG Rule (53) */
    1837                 : 
    1838                 : floating_pt_type
    1839                 :    : TOK_FLOAT
    1840                 :       {
    1841               4 :          $$ = new IDLFloatType(idl_float) ;
    1842                 :       }
    1843               4 :    | TOK_DOUBLE
    1844                 :       {
    1845               4 :          $$ = new IDLFloatType(idl_double) ;
    1846                 :       }
    1847               4 :    | TOK_LONG TOK_DOUBLE
    1848                 :       {
    1849               4 :          $$ = new IDLFloatType(idl_long_double) ;
    1850                 :       }
    1851               4 :    ;
    1852                 : 
    1853                 : /* OMG Rule (54) */
    1854                 : 
    1855                 : integer_type
    1856                 :    : signed_int
    1857                 :       {
    1858             452 :          $$ = $1 ;
    1859                 :       }
    1860             452 :    | unsigned_int
    1861                 :       {
    1862             738 :          $$ = $1 ;
    1863                 :       }
    1864             738 :    ;
    1865                 : 
    1866                 : /* OMG Rule (55) */
    1867                 : 
    1868                 : signed_int
    1869                 :    : signed_short_int
    1870                 :       {
    1871             203 :          $$ = $1 ;
    1872                 :       }
    1873             203 :    | signed_long_int
    1874                 :       {
    1875             160 :          $$ = $1 ;
    1876                 :       }
    1877             160 :    | signed_longlong_int
    1878                 :       {
    1879              89 :          $$ = $1 ;
    1880                 :       }
    1881              89 :    ;
    1882                 : 
    1883                 : /* OMG Rule (56) */
    1884                 : 
    1885                 : signed_short_int
    1886                 :    : TOK_SHORT
    1887                 :       {
    1888             203 :          $$ = new IDLIntType(idl_signed_short) ;
    1889                 :       }
    1890             203 :    ;
    1891                 : 
    1892                 : /* OMG Rule (57) */
    1893                 : 
    1894                 : signed_long_int
    1895                 :    : TOK_LONG
    1896                 :       {
    1897             160 :          $$ = new IDLIntType(idl_signed_long) ;
    1898                 :       }
    1899             160 :    ;
    1900                 : 
    1901                 : /* OMG Rule (58) */
    1902                 : 
    1903                 : signed_longlong_int
    1904                 :    : TOK_LONG TOK_LONG
    1905                 :       {
    1906              89 :          $$ = new IDLIntType(idl_signed_long_long) ;
    1907                 :       }
    1908              89 :    ;
    1909                 : 
    1910                 : /* OMG Rule (59) */
    1911                 : 
    1912                 : unsigned_int
    1913                 :    : unsigned_short_int
    1914                 :       {
    1915             156 :          $$ = $1 ;
    1916                 :       }
    1917             156 :    | unsigned_long_int
    1918                 :       {
    1919             516 :          $$ = $1 ;
    1920                 :       }
    1921             516 :    | unsigned_longlong_int
    1922                 :       {
    1923              66 :          $$ = $1 ;
    1924                 :       }
    1925              66 :    ;
    1926                 : 
    1927                 : /* OMG Rule (60) */
    1928                 : 
    1929                 : unsigned_short_int
    1930                 :    : TOK_UNSIGNED TOK_SHORT
    1931                 :       {
    1932             156 :          $$ = new IDLIntType(idl_unsigned_short) ;
    1933                 :       }
    1934             156 :    ;
    1935                 : 
    1936                 : /* OMG Rule (61) */
    1937                 : 
    1938                 : unsigned_long_int
    1939                 :    : TOK_UNSIGNED TOK_LONG
    1940                 :       {
    1941             516 :          $$ = new IDLIntType(idl_unsigned_long) ;
    1942                 :       }
    1943             516 :    ;
    1944                 : 
    1945                 : /* OMG Rule (62) */
    1946                 : 
    1947                 : unsigned_longlong_int
    1948                 :    : TOK_UNSIGNED TOK_LONG TOK_LONG
    1949                 :       {
    1950              66 :          $$ = new IDLIntType(idl_unsigned_long_long) ;
    1951                 :       }
    1952              66 :    ;
    1953                 : 
    1954                 : /* OMG Rule (63) */
    1955                 : 
    1956                 : char_type
    1957                 :    : TOK_CHAR
    1958                 :       {
    1959              23 :          $$ = new IDLCharType() ;
    1960                 :       }
    1961              23 :    ;
    1962                 : 
    1963                 : /* OMG Rule (64) */
    1964                 : 
    1965                 : wide_char_type
    1966                 :    : TOK_WCHAR
    1967                 :       {
    1968              16 :          $$ = new IDLWCharType() ;
    1969                 :       }
    1970              16 :    ;
    1971                 : 
    1972                 : /* OMG Rule (65) */
    1973                 : 
    1974                 : boolean_type
    1975                 :    : TOK_BOOLEAN
    1976                 :       {
    1977             621 :          $$ = new IDLBoolType() ;
    1978                 :       }
    1979             621 :    ;
    1980                 : 
    1981                 : /* OMG Rule (66) */
    1982                 : 
    1983                 : octet_type
    1984                 :    : TOK_OCTET
    1985                 :       {
    1986               9 :          $$ = new IDLOctetType() ;
    1987                 :       }
    1988               9 :    ;
    1989                 : 
    1990                 : /* OMG Rule (67) */
    1991                 : 
    1992                 : any_type
    1993                 :    : TOK_ANY
    1994                 :       {
    1995             256 :          $$ = new IDLAnyType() ;
    1996                 :       }
    1997             256 :    ;
    1998                 : 
    1999                 : /* OMG Rule (68) */
    2000                 : 
    2001                 : object_type
    2002                 :    : TOK_OBJECT
    2003                 :       {
    2004              82 :          $$ = new IDLObjectType() ;
    2005                 :       }
    2006              82 :    ;
    2007                 : 
    2008                 : /* OMG Rule (69) */
    2009                 : 
    2010                 : struct_type
    2011                 :    : TOK_STRUCT TOK_IDENTIFIER
    2012                 :      TOK_LEFT_CURLY_BRAKET member_list TOK_RIGHT_CURLY_BRAKET
    2013                 :       {
    2014             364 :          String *structName = $2 ;
    2015             364 :          MemberList *members = $4 ;
    2016                 : 
    2017                 :          ASSERT(structName != NULL) ;
    2018                 :          ASSERT(members != NULL) ;
    2019                 : 
    2020             364 :          Struct *structure = new Struct(*structName) ;
    2021                 : 
    2022                 :          MemberListIt it(*members) ;
    2023                 :          Member *member ;
    2024                 : 
    2025             364 :          g_symTabPtr->openContext(*structName) ;
    2026                 : 
    2027            2119 :          while (it.GetNext())
    2028                 :          {
    2029                 :             member = it.GetItem() ;
    2030            1755 :             structure->addMember(member) ;
    2031            1755 :             g_symTabPtr->addSymbol(member) ;
    2032                 :          }
    2033                 : 
    2034             364 :          g_symTabPtr->closeContext() ;
    2035                 : 
    2036             364 :          g_symTabPtr->addSymbol(structure) ;
    2037                 : 
    2038             364 :          delete structName ;
    2039                 :          members->clear() ; // structure has ownership
    2040             728 :          delete members ;
    2041                 : 
    2042             364 :          $$ = new IDLStructType(structure) ;
    2043                 :       }
    2044                 :    ;
    2045                 : 
    2046                 : /* OMG Rule (70) */
    2047                 : 
    2048                 : member_list
    2049                 :    : member
    2050                 :       {
    2051             465 :          $$ = new MemberList($1) ;
    2052                 :       }
    2053             465 :    | member_list member
    2054                 :       {
    2055            1404 :          $1->addTail($2) ;
    2056            1404 :          $$ = $1 ;
    2057                 :       }
    2058            1404 :    ;
    2059                 : 
    2060                 : /* OMG Rule (71) */
    2061                 : 
    2062                 : member
    2063                 :    : type_spec declarator TOK_SEMICOLON
    2064                 :       {
    2065            1869 :          IDLType *type = NULL ;
    2066            1869 :          String name ;
    2067                 : 
    2068            1869 :          name = ReverseTypeDeclaration($1, $2, type) ;
    2069            1869 :          $$ = new Member(name, type) ;
    2070                 :       }
    2071            1869 :    ;
    2072                 : 
    2073                 : /* OMG Rule (72) */
    2074                 : 
    2075                 : union_type
    2076                 :    : TOK_UNION TOK_IDENTIFIER TOK_SWITCH
    2077                 :      TOK_LEFT_PARENTHESIS switch_type_spec TOK_RIGHT_PARENTHESIS
    2078                 :      TOK_LEFT_CURLY_BRAKET switch_body TOK_RIGHT_CURLY_BRAKET
    2079                 :       {
    2080               0 :          NON_DEV("union") ;
    2081                 :       }
    2082               0 :    ;
    2083                 : 
    2084                 : /* OMG Rule (73) */
    2085                 : 
    2086                 : switch_type_spec
    2087                 :    : integer_type
    2088                 :       {
    2089               0 :          $$ = $1 ;
    2090                 :       }
    2091               0 :    | char_type
    2092                 :       {
    2093               0 :          $$ = $1 ;
    2094                 :       }
    2095               0 :    | boolean_type
    2096                 :       {
    2097               0 :          $$ = $1 ;
    2098                 :       }
    2099               0 :    | enum_type
    2100                 :       {
    2101               0 :          $$ = $1 ;
    2102                 :       }
    2103               0 :    | scoped_name
    2104                 :       {
    2105               0 :          NON_DEV("switch_type_spec") ;
    2106                 :       }
    2107               0 :    ;
    2108                 : 
    2109                 : /* OMG Rule (74) */
    2110                 : 
    2111                 : switch_body
    2112                 :    : case
    2113                 :    | switch_body case
    2114                 :    ;
    2115                 : 
    2116                 : /* OMG Rule (75-a) */
    2117                 : 
    2118                 : case
    2119                 :    : case_label_lst element_spec TOK_SEMICOLON
    2120                 :    ;
    2121                 : 
    2122                 : /* OMG Rule (75-b) */
    2123                 : 
    2124                 : case_label_lst
    2125                 :    : case_label
    2126                 :    | case_label_lst case_label
    2127                 :    ;
    2128                 : 
    2129                 : /* OMG Rule (76) */
    2130                 : 
    2131                 : case_label
    2132                 :    : TOK_CASE const_exp TOK_COLON
    2133                 :       {
    2134               0 :          NON_DEV("case_label") ;
    2135                 :       }
    2136               0 :    | TOK_DEFAULT TOK_COLON
    2137                 :       {
    2138               0 :          NON_DEV("case_label") ;
    2139                 :       }
    2140               0 :    ;
    2141                 : 
    2142                 : /* OMG Rule (77) */
    2143                 : 
    2144                 : element_spec
    2145                 :    : type_spec declarator
    2146                 :       {
    2147               0 :          NON_DEV("element_spec") ;
    2148                 :       }
    2149               0 :    ;
    2150                 : 
    2151                 : /* OMG Rule (78-a) */
    2152                 : 
    2153                 : enum_type
    2154                 :    : TOK_ENUM TOK_IDENTIFIER
    2155                 :      TOK_LEFT_CURLY_BRAKET enumerator_lst TOK_RIGHT_CURLY_BRAKET
    2156                 :       {
    2157             155 :          String *enumName = $2 ;
    2158             155 :          StringList *enumItems = $4 ;
    2159                 : 
    2160                 :          ASSERT(enumName != NULL) ;
    2161                 :          ASSERT(enumItems != NULL) ;
    2162                 : 
    2163             155 :          Enum *enumSymbol = new Enum(*enumName) ;
    2164                 : 
    2165                 :          StringListIt it(*enumItems) ;
    2166                 :          String *itemName = NULL ;
    2167                 :          EnumItem *item = NULL ;
    2168                 : 
    2169            1816 :          while (it.GetNext())
    2170                 :          {
    2171                 :             itemName = it.GetItem() ;
    2172                 : 
    2173            1506 :             item = new EnumItem(*itemName) ;
    2174            1506 :             enumSymbol->addItem(item) ;
    2175            1506 :             g_symTabPtr->addSymbol(item) ;
    2176                 :          } ;
    2177                 : 
    2178             155 :          g_symTabPtr->addSymbol(enumSymbol) ;
    2179                 : 
    2180                 :          enumItems->clearAndDestroy() ;
    2181             310 :          delete enumItems ;
    2182             155 :          delete enumName ;
    2183                 :       }
    2184                 :    ;
    2185                 : 
    2186                 : /* OMG Rule (78-b) */
    2187                 : 
    2188                 : enumerator_lst
    2189                 :    : enumerator
    2190                 :       {
    2191             155 :          $$ = new StringList($1) ;
    2192                 :       }
    2193             155 :    | enumerator_lst TOK_COMMA enumerator
    2194                 :       {
    2195            1351 :          $1->addTail($3) ;
    2196            1351 :          $$ = $1 ;
    2197                 :       }
    2198            1351 :    ;
    2199                 : 
    2200                 : /* OMG Rule (79) */
    2201                 : 
    2202                 : enumerator
    2203                 :    : TOK_IDENTIFIER
    2204                 :       {
    2205            1506 :          $$ = $1 ;
    2206                 :       }
    2207            1506 :    ;
    2208                 : 
    2209                 : /* OMG Rule (80) */
    2210                 : 
    2211                 : sequence_type
    2212                 :    : TOK_SEQUENCE
    2213                 :      TOK_LESS_THAN simple_type_spec
    2214                 :      TOK_COMMA positive_int_const TOK_GREATER_THAN
    2215                 :       {
    2216               0 :          idlSize size = $5 ;
    2217                 : 
    2218               0 :          $$ = new IDLSequenceType($3, size) ;
    2219                 :       }
    2220               0 :    | TOK_SEQUENCE
    2221                 :      TOK_LESS_THAN simple_type_spec TOK_GREATER_THAN
    2222                 :       {
    2223             389 :          $$ = new IDLSequenceType($3) ;
    2224                 :       }
    2225             389 :    ;
    2226                 : 
    2227                 : /* OMG Rule (81) */
    2228                 : 
    2229                 : string_type
    2230                 :    : TOK_STRING TOK_LESS_THAN positive_int_const TOK_GREATER_THAN
    2231                 :       {
    2232               0 :          idlSize size = $3 ;
    2233                 : 
    2234               0 :          $$ = new IDLStringType(size) ;
    2235                 :       }
    2236               0 :    | TOK_STRING
    2237                 :       {
    2238             141 :          $$ = new IDLStringType() ;
    2239                 :       }
    2240             141 :    ;
    2241                 : 
    2242                 : /* OMG Rule (82) */
    2243                 : 
    2244                 : wide_string_type
    2245                 :    : TOK_WSTRING TOK_LESS_THAN positive_int_const TOK_GREATER_THAN
    2246                 :       {
    2247               0 :          idlSize size = $3 ;
    2248                 : 
    2249               0 :          $$ = new IDLWStringType(size) ;
    2250                 :       }
    2251               0 :    | TOK_WSTRING
    2252                 :       {
    2253               1 :          $$ = new IDLWStringType() ;
    2254                 :       }
    2255               1 :    ;
    2256                 : 
    2257                 : /* OMG Rule (83-a) */
    2258                 : 
    2259                 : array_declarator
    2260                 :    : TOK_IDENTIFIER fixed_array_size_lst
    2261                 :       {
    2262               0 :          String *str = $1 ;
    2263                 :          Declarator *result = NULL ;
    2264                 :          ASSERT(str != NULL) ;
    2265                 : 
    2266               0 :          result = new SimpleDeclarator(*str) ;
    2267               0 :          delete str ;
    2268                 : 
    2269               0 :          NON_DEV("array : fixed_array_size_lst") ;
    2270                 : 
    2271               0 :          $$ = result ;
    2272                 :       }
    2273               0 :    ;
    2274                 : 
    2275                 : /* OMG Rule (83-b) */
    2276                 : 
    2277                 : fixed_array_size_lst
    2278                 :    : fixed_array_size
    2279                 :       {
    2280               0 :          NON_DEV("fixed_array_size_lst") ;
    2281                 :       }
    2282               0 :    | fixed_array_size_lst fixed_array_size
    2283                 :       {
    2284               0 :          NON_DEV("fixed_array_size_lst") ;
    2285                 :       }
    2286               0 :    ;
    2287                 : 
    2288                 : /* OMG Rule (84) */
    2289                 : 
    2290                 : fixed_array_size
    2291                 :    : TOK_LEFT_SQUARE_BRAKET positive_int_const TOK_RIGHT_SQUARE_BRAKET
    2292                 :       {
    2293               0 :          NON_DEV("fixed_array_size") ;
    2294                 :       }
    2295               0 :    ;
    2296                 : 
    2297                 : /* OMG Rule (85) */
    2298                 : 
    2299                 : attr_dcl
    2300                 :    : readonly_attr_spec
    2301                 :       /* No actions */
    2302                 :    | attr_spec
    2303                 :       /* No actions */
    2304                 :    ;
    2305                 : 
    2306                 : /* OMG Rule (86-a) */
    2307                 : 
    2308                 : except_dcl
    2309                 :    : TOK_EXCEPTION TOK_IDENTIFIER
    2310                 :      TOK_LEFT_CURLY_BRAKET member_lst_opt TOK_RIGHT_CURLY_BRAKET
    2311                 :       {
    2312             285 :          String *exceptName = $2 ;
    2313             285 :          MemberList *members = $4 ;
    2314                 : 
    2315                 :          ASSERT(exceptName != NULL) ;
    2316                 :          ASSERT(members != NULL) ;
    2317                 : 
    2318             285 :          Exception *ex = new Exception(*exceptName) ;
    2319                 : 
    2320                 :          MemberListIt it(*members) ;
    2321                 :          Member *member ;
    2322                 : 
    2323             285 :          g_symTabPtr->openContext(*exceptName) ;
    2324                 : 
    2325             399 :          while (it.GetNext())
    2326                 :          {
    2327                 :             member = it.GetItem() ;
    2328             114 :             ex->addMember(member) ;
    2329             114 :             g_symTabPtr->addSymbol(member) ;
    2330                 :          }
    2331                 : 
    2332             285 :          g_symTabPtr->closeContext() ;
    2333                 : 
    2334             285 :          g_symTabPtr->addSymbol(ex) ;
    2335                 : 
    2336             285 :          delete exceptName ;
    2337                 :          members->clear() ; // exception has ownership
    2338             570 :          delete members ;
    2339                 :       }
    2340                 :    ;
    2341                 : 
    2342                 : /* OMG Rule (86-b) */
    2343                 : 
    2344                 : member_lst_opt
    2345                 :    : /* empty */
    2346                 :       {
    2347             184 :          $$ = new MemberList() ;
    2348                 :       }
    2349             184 :    | member_list
    2350                 :       {
    2351             101 :          $$ = $1 ;
    2352                 :       }
    2353             101 :    ;
    2354                 : 
    2355                 : /* OMG Rule (87-a) */
    2356                 : 
    2357                 : op_dcl
    2358                 :    : op_attribute_opt op_type_spec TOK_IDENTIFIER
    2359                 :      parameter_dcls raises_expr_opt context_expr_opt
    2360                 :       {
    2361            2111 :          OperationAttribute opAttr = $1 ;
    2362            2111 :          IDLType *opType = $2 ;
    2363            2111 :          String *opName = $3 ;
    2364            2111 :          ParameterList *params = $4 ;
    2365            2111 :          ScopeList *exceptions = $5 ;
    2366            2111 :          StringList *contexts = $6 ;
    2367                 : 
    2368                 :          ASSERT(opType != NULL) ;
    2369                 :          ASSERT(opName != NULL) ;
    2370                 :          ASSERT(params != NULL) ;
    2371                 : 
    2372            2111 :          Operation *op = new Operation(opAttr, opType, *opName) ;
    2373                 : 
    2374            2111 :          g_symTabPtr->addSymbol(op) ;
    2375            2111 :          g_symTabPtr->openContext("") ;
    2376                 : 
    2377                 :          ParameterListIt it(*params) ;
    2378                 :          Parameter *param = NULL ;
    2379                 : 
    2380            7695 :          while (it.GetNext())
    2381                 :          {
    2382                 :             param = it.GetItem() ;
    2383                 : 
    2384            3473 :             g_symTabPtr->addSymbol(param) ;
    2385            3473 :             op->addParameter(param) ;
    2386                 :          }
    2387                 : 
    2388            2111 :          g_symTabPtr->closeContext() ;
    2389                 : 
    2390            2111 :          if (exceptions != NULL)
    2391                 :          {
    2392                 :             ScopeListIt it(*exceptions) ;
    2393                 :             Scope *scope = NULL ;
    2394                 :             Symbol *sym = NULL ;
    2395                 : 
    2396            1879 :             while (it.GetNext())
    2397                 :             {
    2398                 :                scope = it.GetItem() ;
    2399            1176 :                sym = g_symTabPtr->findSymbol(*scope) ;
    2400                 : 
    2401            1176 :                if (sym == NULL)
    2402                 :                {
    2403               0 :                   String error = "Unknown exception." ;
    2404               0 :                   IDLCompileError(error) ;
    2405               0 :                   scope->print(errLog) ;
    2406               0 :                   errLog << std::endl ;
    2407                 :                }
    2408                 :                else
    2409                 :                {
    2410            1176 :                   if (sym->GetClass() == exceptionSymbol)
    2411                 :                   {
    2412                 :                      Exception *except = (Exception*) sym ;
    2413            1176 :                      op->addException(except) ;
    2414                 :                   }
    2415                 :                   else
    2416                 :                   {
    2417               0 :                      String error = "Not an exception." ;
    2418               0 :                      IDLCompileError(error) ;
    2419               0 :                      sym->print(errLog) ;
    2420               0 :                      errLog << std::endl ;
    2421                 :                   }
    2422                 :                }
    2423                 :             }
    2424                 :          }
    2425                 : 
    2426            2111 :          if (contexts != NULL)
    2427                 :          {
    2428               0 :             NON_DEV("op_dcl with context") ;
    2429                 :          }
    2430                 : 
    2431                 :          params->clear() ;
    2432            4222 :          delete params ;
    2433            2111 :          delete opName ;
    2434                 :       }
    2435                 :    ;
    2436                 : 
    2437                 : /* OMG Rule (87-b) */
    2438                 : 
    2439                 : op_attribute_opt
    2440                 :    : /* empty */
    2441                 :       {
    2442            2111 :          $$ = OPERATION_TWOWAYS ;
    2443                 :       }
    2444            2111 :    | op_attribute
    2445                 :       {
    2446               0 :          $$ = $1 ;
    2447                 :       }
    2448               0 :    ;
    2449                 : 
    2450                 : /* OMG Rule (87-c) */
    2451                 : 
    2452                 : raises_expr_opt
    2453                 :    : /* empty */
    2454                 :       {
    2455            1408 :          $$ = NULL ;
    2456                 :       }
    2457            1408 :    | raises_expr
    2458                 :       {
    2459             703 :          $$ = $1 ;
    2460                 :       }
    2461             703 :    ;
    2462                 : 
    2463                 : /* OMG Rule (87-d) */
    2464                 : 
    2465                 : context_expr_opt
    2466                 :    : /* empty */
    2467                 :       {
    2468            2111 :          $$ = NULL ;
    2469                 :       }
    2470            2111 :    | context_expr
    2471                 :       {
    2472               0 :          $$ = $1 ;
    2473                 :       }
    2474               0 :    ;
    2475                 : 
    2476                 : /* OMG Rule (88) */
    2477                 : 
    2478                 : op_attribute
    2479                 :    : TOK_ONEWAY
    2480                 :       {
    2481               0 :          $$ = OPERATION_ONEWAY ;
    2482                 :       }
    2483               0 :    ;
    2484                 : 
    2485                 : /* OMG Rule (89) */
    2486                 : 
    2487                 : op_type_spec
    2488                 :    : param_type_spec
    2489                 :       {
    2490            1647 :          $$ = $1 ;
    2491                 :       }
    2492            1647 :    | TOK_VOID
    2493                 :       {
    2494             464 :          $$ = new IDLVoidType() ;
    2495                 :       }
    2496             464 :    ;
    2497                 : 
    2498                 : /* OMG Rule (90-a) */
    2499                 : 
    2500                 : parameter_dcls
    2501                 :    : TOK_LEFT_PARENTHESIS param_dcl_lst TOK_RIGHT_PARENTHESIS
    2502                 :       {
    2503            1515 :          $$ = $2 ;
    2504                 :       }
    2505            1515 :    | TOK_LEFT_PARENTHESIS TOK_RIGHT_PARENTHESIS
    2506                 :       {
    2507             596 :          $$ = new ParameterList() ;
    2508                 :       }
    2509             596 :    ;
    2510                 : 
    2511                 : /* OMG Rule (90-b) */
    2512                 : 
    2513                 : param_dcl_lst
    2514                 :    : param_dcl
    2515                 :       {
    2516            1515 :          $$ = new ParameterList($1) ;
    2517                 :       }
    2518            1515 :    | param_dcl_lst TOK_COMMA param_dcl
    2519                 :       {
    2520            1958 :          $1->addTail($3) ;
    2521            1958 :          $$ = $1 ;
    2522                 :       }
    2523            1958 :    ;
    2524                 : 
    2525                 : /* OMG Rule (91) */
    2526                 : 
    2527                 : param_dcl
    2528                 :    : param_attribute param_type_spec simple_declarator
    2529                 :       {
    2530            3473 :          ParameterAttribute attrib = $1 ;
    2531            3473 :          Declarator *decl = $3 ;
    2532            3473 :          IDLType *type = NULL ;
    2533            3473 :          String name ;
    2534                 : 
    2535            3473 :          name = ReverseTypeDeclaration($2, decl, type) ;
    2536            3473 :          $$ = new Parameter(attrib, name, type) ;
    2537                 :       }
    2538            3473 :    ;
    2539                 : 
    2540                 : /* OMG Rule (92) */
    2541                 : 
    2542                 : param_attribute
    2543                 :    : TOK_IN
    2544                 :       {
    2545            3293 :          $$ = PARAMETER_IN ;
    2546                 :       }
    2547            3293 :    | TOK_OUT
    2548                 :       {
    2549             180 :          $$ = PARAMETER_OUT ;
    2550                 :       }
    2551             180 :    | TOK_INOUT
    2552                 :       {
    2553               0 :          $$ = PARAMETER_INOUT ;
    2554                 :       }
    2555               0 :    ;
    2556                 : 
    2557                 : /* OMG Rule (93-a) */
    2558                 : 
    2559                 : raises_expr
    2560                 :    : TOK_RAISES TOK_LEFT_PARENTHESIS scoped_name_lst TOK_RIGHT_PARENTHESIS
    2561                 :       {
    2562             703 :          $$ = $3 ;
    2563                 :       }
    2564             703 :    ;
    2565                 : 
    2566                 : /* OMG Rule (93-b) */
    2567                 : 
    2568                 : scoped_name_lst
    2569                 :    : scoped_name
    2570                 :       {
    2571             703 :          $$ = new ScopeList($1) ;
    2572                 :       }
    2573             703 :    | scoped_name_lst TOK_COMMA scoped_name
    2574                 :       {
    2575             473 :          $1->addTail($3) ;
    2576             473 :          $$ = $1 ;
    2577                 :       }
    2578             473 :    ;
    2579                 : 
    2580                 : /* OMG Rule (94-a) */
    2581                 : 
    2582                 : context_expr
    2583                 :    : TOK_CONTEXT TOK_LEFT_PARENTHESIS string_literal_lst TOK_RIGHT_PARENTHESIS
    2584                 :       {
    2585               0 :          $$ = $3 ;
    2586                 :       }
    2587               0 :    ;
    2588                 : 
    2589                 : /* OMG Rule (94-b) */
    2590                 : 
    2591                 : string_literal_lst
    2592                 :    : string_literal
    2593                 :       {
    2594               0 :          $$ = new StringList($1) ;
    2595                 :       }
    2596               0 :    | string_literal_lst TOK_COMMA string_literal
    2597                 :       {
    2598               0 :          $1->addTail($3) ;
    2599               0 :          $$ = $1 ;
    2600                 :       }
    2601               0 :    ;
    2602                 : 
    2603                 : /* OMG Rule (95) */
    2604                 : 
    2605                 : param_type_spec
    2606                 :    : base_type_spec
    2607                 :       {
    2608            1402 :          $$ = $1 ;
    2609                 :       }
    2610            1402 :    | string_type
    2611                 :       {
    2612              50 :          $$ = $1 ;
    2613                 :       }
    2614              50 :    | wide_string_type
    2615                 :       {
    2616               0 :          $$ = $1 ;
    2617                 :       }
    2618               0 :    | scoped_name
    2619                 :       {
    2620            4609 :          Scope *scope = $1 ;
    2621                 :          ASSERT(scope != NULL) ;
    2622                 : 
    2623            4609 :          Symbol *symbol = g_symTabPtr->findSymbol(*scope) ;
    2624                 : 
    2625            4609 :          if (symbol == NULL)
    2626                 :          {
    2627               3 :             String error = "Undefined symbol " ;
    2628               3 :             error += scope->GetFullName() ;
    2629               3 :             IDLCompileError(error) ;
    2630                 : 
    2631               3 :             $$ = new IDLErrorType() ;
    2632                 :          }
    2633                 :          else
    2634                 :          {
    2635            4606 :             $$ = Symbol2Type(symbol) ;
    2636                 :          }
    2637                 : 
    2638            4609 :          delete scope ;
    2639                 :       }
    2640                 :    ;
    2641                 : 
    2642                 : /* OMG Rule (96) */
    2643                 : 
    2644                 : fixed_pt_type
    2645                 :    : TOK_FIXED TOK_LESS_THAN positive_int_const
    2646                 :      TOK_COMMA positive_int_const TOK_GREATER_THAN
    2647                 :       {
    2648                 :          // idlSize size1 = $3 ;
    2649                 :          // idlSize size2 = $5 ;
    2650               0 :          NON_DEV("fixed <N,N>") ;
    2651               0 :          $$ = new IDLErrorType() ;
    2652                 :       }
    2653               0 :    ;
    2654                 : 
    2655                 : /* OMG Rule (97) */
    2656                 : 
    2657                 : fixed_pt_const_type
    2658                 :    : TOK_FIXED
    2659                 :       {
    2660               0 :          NON_DEV("fixed") ;
    2661               0 :          $$ = new IDLErrorType() ;
    2662                 :       }
    2663               0 :    ;
    2664                 : 
    2665                 : /* OMG Rule (98) */
    2666                 : 
    2667                 : value_base_type
    2668                 :    : TOK_VALUEBASE
    2669                 :       {
    2670               0 :          NON_DEV("value_base_type") ;
    2671               0 :          $$ = new IDLErrorType() ;
    2672                 :       }
    2673               0 :    ;
    2674                 : 
    2675                 : /* OMG Rule (99) */
    2676                 : 
    2677                 : constr_forward_decl
    2678                 :    : TOK_STRUCT TOK_IDENTIFIER
    2679                 :    | TOK_UNION TOK_IDENTIFIER
    2680                 :    ;
    2681                 : 
    2682                 : /* OMG Rule (100) */
    2683                 : 
    2684                 : import
    2685                 :    : TOK_IMPORT imported_scope TOK_SEMICOLON
    2686                 :       {
    2687               0 :          NON_DEV("import") ;
    2688                 :       }
    2689               0 :    ;
    2690                 : 
    2691                 : /* OMG Rule (101) */
    2692                 : 
    2693                 : imported_scope
    2694                 :    : scoped_name
    2695                 :       {
    2696               0 :          NON_DEV("imported_scope") ;
    2697                 :       }
    2698               0 :    | string_literal
    2699                 :       {
    2700               0 :          NON_DEV("imported_scope") ;
    2701                 :       }
    2702               0 :    ;
    2703                 : 
    2704                 : /* OMG Rule (102) */
    2705                 : 
    2706                 : type_id_dcl
    2707                 :    : TOK_TYPEID scoped_name string_literal
    2708                 :       {
    2709               0 :          NON_DEV("type_id_dcl") ;
    2710                 :       }
    2711               0 :    ;
    2712                 : 
    2713                 : /* OMG Rule (103) */
    2714                 : 
    2715                 : type_prefix_dcl
    2716                 :    : TOK_TYPEPREFIX scoped_name string_literal
    2717                 :       {
    2718               0 :          NON_DEV("type_prefix_dcl") ;
    2719                 :       }
    2720               0 :    ;
    2721                 : 
    2722                 : /* OMG Rule (104) */
    2723                 : 
    2724                 : readonly_attr_spec
    2725                 :    : TOK_READONLY TOK_ATTRIBUTE param_type_spec readonly_attr_declarator
    2726                 :       {
    2727             345 :          SimpleDeclaratorList *attrList = $4 ;
    2728             345 :          IDLType *type = $3 ;
    2729                 : 
    2730             345 :          Declarator *decl = NULL ;
    2731             345 :          String attrName ;
    2732             345 :          IDLType *attrType = NULL ;
    2733                 :          Attribute *attribute = NULL ;
    2734                 : 
    2735             345 :          if (attrList->size() == 1)
    2736                 :          {
    2737             345 :             decl = attrList->removeHead() ;
    2738             345 :             attrName = ReverseTypeDeclaration(type, decl, attrType) ;
    2739             345 :             attribute = new Attribute(ATTRIBUTE_READONLY, attrName, attrType) ;
    2740                 : 
    2741             345 :             g_symTabPtr->addSymbol(attribute) ;
    2742                 :          }
    2743                 :          else
    2744                 :          {
    2745               0 :             NON_DEV("deep copy type, and loop") ;
    2746                 :          }
    2747                 : 
    2748               0 :          attrList->clearAndDestroy() ;
    2749                 :       }
    2750             345 :    ;
    2751                 : 
    2752                 : /* OMG Rule (105-a) */
    2753                 : 
    2754                 : readonly_attr_declarator
    2755                 :    : simple_declarator raises_expr
    2756                 :       {
    2757               0 :          NON_DEV("readonly_attr_declarator : $2") ;
    2758               0 :          $$ = new SimpleDeclaratorList($1) ;
    2759                 :       }
    2760               0 :    | simple_declarator_lst
    2761                 :       {
    2762             345 :          NON_DEV("readonly_attr_declarator") ;
    2763                 :       }
    2764             345 :    ;
    2765                 : 
    2766                 : /* OMG Rule (105-b) */
    2767                 : 
    2768                 : simple_declarator_lst
    2769                 :    : simple_declarator
    2770                 :       {
    2771             941 :          $$ = new SimpleDeclaratorList($1) ;
    2772                 :       }
    2773             941 :    | simple_declarator_lst TOK_COMMA simple_declarator
    2774                 :       {
    2775               0 :          $1->addTail($3) ;
    2776               0 :          $$ = $1 ;
    2777                 :       }
    2778               0 :    ;
    2779                 : 
    2780                 : /* OMG Rule (106) */
    2781                 : 
    2782                 : attr_spec
    2783                 :    : TOK_ATTRIBUTE param_type_spec attr_declarator
    2784                 :       {
    2785             596 :          SimpleDeclaratorList *attrList = $3 ;
    2786             596 :          IDLType *type = $2 ;
    2787                 : 
    2788             596 :          Declarator *decl = NULL ;
    2789             596 :          String attrName ;
    2790             596 :          IDLType *attrType = NULL ;
    2791                 :          Attribute *attribute = NULL ;
    2792                 : 
    2793             596 :          if (attrList->size() == 1)
    2794                 :          {
    2795             596 :             decl = attrList->removeHead() ;
    2796             596 :             attrName = ReverseTypeDeclaration(type, decl, attrType) ;
    2797             596 :             attribute = new Attribute(ATTRIBUTE_READWRITE, attrName, attrType) ;
    2798                 : 
    2799             596 :             g_symTabPtr->addSymbol(attribute) ;
    2800                 :          }
    2801                 :          else
    2802                 :          {
    2803               0 :             NON_DEV("deep copy type, and loop") ;
    2804                 :          }
    2805                 : 
    2806               0 :          attrList->clearAndDestroy() ;
    2807                 :       }
    2808             596 :    ;
    2809                 : 
    2810                 : /* OMG Rule (107) */
    2811                 : 
    2812                 : attr_declarator
    2813                 :    : simple_declarator attr_raises_expr
    2814                 :       {
    2815               0 :          NON_DEV("attr_declarator : $2") ;
    2816               0 :          $$ = new SimpleDeclaratorList($1) ;
    2817                 :       }
    2818               0 :    | simple_declarator_lst
    2819                 :       {
    2820             596 :          $$ = $1 ;
    2821                 :       }
    2822             596 :    ;
    2823                 : 
    2824                 : /* OMG Rule (108) */
    2825                 : 
    2826                 : attr_raises_expr
    2827                 :    : get_excep_expr
    2828                 :       {
    2829               0 :          NON_DEV("attr_raises_expr") ;
    2830                 :       }
    2831               0 :    | get_excep_expr set_excep_expr
    2832                 :       {
    2833               0 :          NON_DEV("attr_raises_expr") ;
    2834                 :       }
    2835               0 :    | set_excep_expr
    2836                 :       {
    2837               0 :          NON_DEV("attr_raises_expr") ;
    2838                 :       }
    2839               0 :    ;
    2840                 : 
    2841                 : /* OMG Rule (109) */
    2842                 : 
    2843                 : get_excep_expr
    2844                 :    : TOK_GETRAISES exception_list
    2845                 :       {
    2846               0 :          NON_DEV("get_excep_expr") ;
    2847                 :       }
    2848               0 :    ;
    2849                 : 
    2850                 : /* OMG Rule (110) */
    2851                 : 
    2852                 : set_excep_expr
    2853                 :    : TOK_SETRAISES exception_list
    2854                 :       {
    2855               0 :          NON_DEV("set_excep_expr") ;
    2856                 :       }
    2857               0 :    ;
    2858                 : 
    2859                 : /* OMG Rule (111) */
    2860                 : 
    2861                 : exception_list
    2862                 :    : TOK_LEFT_PARENTHESIS scoped_name_lst TOK_RIGHT_PARENTHESIS
    2863                 :       {
    2864               0 :          NON_DEV("exception_list") ;
    2865                 :       }
    2866               0 :    ;
    2867                 : 
    2868                 : /* OMG Rule (112) */
    2869                 : 
    2870                 : component
    2871                 :    : component_dcl
    2872                 :       {
    2873               0 :          NON_DEV("component") ;
    2874                 :       }
    2875               0 :    | component_forward_dcl
    2876                 :       {
    2877               0 :          NON_DEV("component") ;
    2878                 :       }
    2879               0 :    ;
    2880                 : 
    2881                 : /* OMG Rule (113) */
    2882                 : 
    2883                 : component_forward_dcl
    2884                 :    : TOK_COMPONENT TOK_IDENTIFIER
    2885                 :       {
    2886               0 :          NON_DEV("component_forward_dcl") ;
    2887                 :       }
    2888               0 :    ;
    2889                 : 
    2890                 : /* OMG Rule (114) */
    2891                 : 
    2892                 : component_dcl
    2893                 :    : component_header
    2894                 :      TOK_LEFT_CURLY_BRAKET component_body TOK_RIGHT_CURLY_BRAKET
    2895                 :       {
    2896               0 :          NON_DEV("component_dcl") ;
    2897                 :       }
    2898               0 :    ;
    2899                 : 
    2900                 : /* OMG Rule (115-a) */
    2901                 : 
    2902                 : component_header
    2903                 :    : TOK_COMPONENT TOK_IDENTIFIER
    2904                 :      component_inheritance_spec_opt
    2905                 :      supported_interface_spec_opt
    2906                 :       {
    2907               0 :          NON_DEV("component_header") ;
    2908                 :       }
    2909               0 :    ;
    2910                 : 
    2911                 : /* OMG Rule (115-b) */
    2912                 : 
    2913                 : component_inheritance_spec_opt
    2914                 :    : /* empty */
    2915                 :       {
    2916               0 :          NON_DEV("component_inheritance_spec_opt") ;
    2917                 :       }
    2918               0 :    | component_inheritance_spec
    2919                 :       {
    2920               0 :          NON_DEV("component_inheritance_spec_opt") ;
    2921                 :       }
    2922               0 :    ;
    2923                 : 
    2924                 : /* OMG Rule (115-c) */
    2925                 : 
    2926                 : supported_interface_spec_opt
    2927                 :    : /* empty */
    2928                 :       {
    2929               0 :          NON_DEV("supported_interface_spec_opt") ;
    2930                 :       }
    2931               0 :    | supported_interface_spec
    2932                 :       {
    2933               0 :          NON_DEV("supported_interface_spec_opt") ;
    2934                 :       }
    2935               0 :    ;
    2936                 : 
    2937                 : /* OMG Rule (116) */
    2938                 : 
    2939                 : supported_interface_spec
    2940                 :    : TOK_SUPPORTS scoped_name_lst
    2941                 :       {
    2942               0 :          NON_DEV("supported_interface_spec") ;
    2943                 :       }
    2944               0 :    ;
    2945                 : 
    2946                 : /* OMG Rule (117) */
    2947                 : 
    2948                 : component_inheritance_spec
    2949                 :    : TOK_COLON scoped_name
    2950                 :       {
    2951               0 :          NON_DEV("component_inheritance_spec") ;
    2952                 :       }
    2953               0 :    ;
    2954                 : 
    2955                 : /* OMG Rule (118-a) */
    2956                 : 
    2957                 : component_body
    2958                 :    : /* empty */
    2959                 :       {
    2960               0 :          NON_DEV("component_body") ;
    2961                 :       }
    2962               0 :    | component_export_lst
    2963                 :       {
    2964               0 :          NON_DEV("component_body") ;
    2965                 :       }
    2966               0 :    ;
    2967                 : 
    2968                 : /* OMG Rule (118-b) */
    2969                 : 
    2970                 : component_export_lst
    2971                 :    : component_export
    2972                 :       {
    2973               0 :          NON_DEV("component_export_lst") ;
    2974                 :       }
    2975               0 :    | component_export_lst component_export
    2976                 :       {
    2977               0 :          NON_DEV("component_export_lst") ;
    2978                 :       }
    2979               0 :    ;
    2980                 : 
    2981                 : /* OMG Rule (119) */
    2982                 : 
    2983                 : component_export
    2984                 :    : provides_dcl TOK_SEMICOLON
    2985                 :       {
    2986               0 :          NON_DEV("component_export") ;
    2987                 :       }
    2988               0 :    | uses_dcl TOK_SEMICOLON
    2989                 :       {
    2990               0 :          NON_DEV("component_export") ;
    2991                 :       }
    2992               0 :    | emits_dcl TOK_SEMICOLON
    2993                 :       {
    2994               0 :          NON_DEV("component_export") ;
    2995                 :       }
    2996               0 :    | publishes_dcl TOK_SEMICOLON
    2997                 :       {
    2998               0 :          NON_DEV("component_export") ;
    2999                 :       }
    3000               0 :    | consumes_dcl TOK_SEMICOLON
    3001                 :       {
    3002               0 :          NON_DEV("component_export") ;
    3003                 :       }
    3004               0 :    | attr_dcl TOK_SEMICOLON
    3005                 :       {
    3006               0 :          NON_DEV("component_export") ;
    3007                 :       }
    3008               0 :    ;
    3009                 : 
    3010                 : /* OMG Rule (120) */
    3011                 : 
    3012                 : provides_dcl
    3013                 :    : TOK_PROVIDES interface_type TOK_IDENTIFIER
    3014                 :       {
    3015               0 :          NON_DEV("provides_dcl") ;
    3016                 :       }
    3017               0 :    ;
    3018                 : 
    3019                 : /* OMG Rule (121) */
    3020                 : 
    3021                 : interface_type
    3022                 :    : scoped_name
    3023                 :       {
    3024               0 :          NON_DEV("interface_type") ;
    3025                 :       }
    3026               0 :    | TOK_OBJECT
    3027                 :       {
    3028               0 :          NON_DEV("interface_type") ;
    3029                 :       }
    3030               0 :    ;
    3031                 : 
    3032                 : /* OMG Rule (122) */
    3033                 : 
    3034                 : uses_dcl
    3035                 :    : TOK_USES TOK_MULTIPLE interface_type TOK_IDENTIFIER
    3036                 :       {
    3037               0 :          NON_DEV("uses_dcl") ;
    3038                 :       }
    3039               0 :    | TOK_USES interface_type TOK_IDENTIFIER
    3040                 :       {
    3041               0 :          NON_DEV("uses_dcl") ;
    3042                 :       }
    3043               0 :    ;
    3044                 : 
    3045                 : /* OMG Rule (123) */
    3046                 : 
    3047                 : emits_dcl
    3048                 :    : TOK_EMITS scoped_name TOK_IDENTIFIER
    3049                 :       {
    3050               0 :          NON_DEV("emits_dcl") ;
    3051                 :       }
    3052               0 :    ;
    3053                 : 
    3054                 : /* OMG Rule (124) */
    3055                 : 
    3056                 : publishes_dcl
    3057                 :    : TOK_PUBLISHES scoped_name TOK_IDENTIFIER
    3058                 :       {
    3059               0 :          NON_DEV("publishes_dcl") ;
    3060                 :       }
    3061               0 :    ;
    3062                 : 
    3063                 : /* OMG Rule (125) */
    3064                 : 
    3065                 : consumes_dcl
    3066                 :    : TOK_CONSUMES scoped_name TOK_IDENTIFIER
    3067                 :       {
    3068               0 :          NON_DEV("consumes_dcl") ;
    3069                 :       }
    3070               0 :    ;
    3071                 : 
    3072                 : /* OMG Rule (126) */
    3073                 : 
    3074                 : home_dcl
    3075                 :    : home_header home_body
    3076                 :       {
    3077               0 :          NON_DEV("home_dcl") ;
    3078                 :       }
    3079               0 :    ;
    3080                 : 
    3081                 : /* OMG Rule (127-a) */
    3082                 : 
    3083                 : home_header
    3084                 :    : TOK_HOME TOK_IDENTIFIER
    3085                 :      home_inheritance_spec_opt
    3086                 :      supported_interface_spec_opt
    3087                 :      TOK_MANAGES scoped_name
    3088                 :      primary_key_spec_opt
    3089                 :       {
    3090               0 :          NON_DEV("home_header") ;
    3091                 :       }
    3092               0 :    ;
    3093                 : 
    3094                 : /* OMG Rule (127-b) */
    3095                 : 
    3096                 : home_inheritance_spec_opt
    3097                 :    : /* empty */
    3098                 :       {
    3099               0 :          NON_DEV("home_inheritance_spec_opt") ;
    3100                 :       }
    3101               0 :    | home_inheritance_spec
    3102                 :       {
    3103               0 :          NON_DEV("home_inheritance_spec_opt") ;
    3104                 :       }
    3105               0 :    ;
    3106                 : 
    3107                 : /* OMG Rule (127-c) */
    3108                 : 
    3109                 : primary_key_spec_opt
    3110                 :    : /* empty */
    3111                 :       {
    3112               0 :          NON_DEV("primary_key_spec_opt") ;
    3113                 :       }
    3114               0 :    | primary_key_spec
    3115                 :       {
    3116               0 :          NON_DEV("primary_key_spec_opt") ;
    3117                 :       }
    3118               0 :    ;
    3119                 : 
    3120                 : /* OMG Rule (128) */
    3121                 : 
    3122                 : home_inheritance_spec
    3123                 :    : TOK_COLON scoped_name
    3124                 :       {
    3125               0 :          NON_DEV("home_inheritance_spec") ;
    3126                 :       }
    3127               0 :    ;
    3128                 : 
    3129                 : /* OMG Rule (129) */
    3130                 : 
    3131                 : primary_key_spec
    3132                 :    : TOK_PRIMARYKEY scoped_name
    3133                 :       {
    3134               0 :          NON_DEV("primary_key_spec") ;
    3135                 :       }
    3136               0 :    ;
    3137                 : 
    3138                 : /* OMG Rule (130-a) */
    3139                 : 
    3140                 : home_body
    3141                 :    : TOK_LEFT_CURLY_BRAKET home_export_lst_opt TOK_RIGHT_CURLY_BRAKET
    3142                 :       {
    3143               0 :          NON_DEV("home_body") ;
    3144                 :       }
    3145               0 :    ;
    3146                 : 
    3147                 : /* OMG Rule (130-b) */
    3148                 : 
    3149                 : home_export_lst_opt
    3150                 :    : /* empty */
    3151                 :       {
    3152               0 :          NON_DEV("home_export_lst_opt") ;
    3153                 :       }
    3154               0 :    | home_export_lst
    3155                 :       {
    3156               0 :          NON_DEV("home_export_lst_opt") ;
    3157                 :       }
    3158               0 :    ;
    3159                 : 
    3160                 : /* OMG Rule (130-c) */
    3161                 : 
    3162                 : home_export_lst
    3163                 :    : home_export
    3164                 :       {
    3165               0 :          NON_DEV("home_export_lst") ;
    3166                 :       }
    3167               0 :    | home_export_lst home_export
    3168                 :       {
    3169               0 :          NON_DEV("home_export_lst") ;
    3170                 :       }
    3171               0 :    ;
    3172                 : 
    3173                 : /* OMG Rule (131) */
    3174                 : 
    3175                 : home_export
    3176                 :    : export
    3177                 :       {
    3178               0 :          NON_DEV("home_export") ;
    3179                 :       }
    3180               0 :    | factory_dcl
    3181                 :       {
    3182               0 :          NON_DEV("home_export") ;
    3183                 :       }
    3184               0 :    | finder_dcl
    3185                 :       {
    3186               0 :          NON_DEV("home_export") ;
    3187                 :       }
    3188               0 :    ;
    3189                 : 
    3190                 : /* OMG Rule (132) */
    3191                 : 
    3192                 : factory_dcl
    3193                 :    : TOK_FACTORY TOK_IDENTIFIER
    3194                 :      TOK_LEFT_PARENTHESIS init_param_decls_opt TOK_RIGHT_PARENTHESIS
    3195                 :      raises_expr_opt
    3196                 :       {
    3197               0 :          NON_DEV("factory_dcl") ;
    3198                 :       }
    3199               0 :    ;
    3200                 : 
    3201                 : /* OMG Rule (133) */
    3202                 : 
    3203                 : finder_dcl
    3204                 :    : TOK_FINDER TOK_IDENTIFIER
    3205                 :      TOK_LEFT_PARENTHESIS init_param_decls_opt TOK_RIGHT_PARENTHESIS
    3206                 :      raises_expr_opt
    3207                 :       {
    3208               0 :          NON_DEV("finder_dcl") ;
    3209                 :       }
    3210               0 :    ;
    3211                 : 
    3212                 : /* OMG Rule (134) */
    3213                 : 
    3214                 : event
    3215                 :    : event_dcl
    3216                 :       {
    3217               0 :          NON_DEV("event") ;
    3218                 :       }
    3219               0 :    | event_abs_dcl
    3220                 :       {
    3221               0 :          NON_DEV("event") ;
    3222                 :       }
    3223               0 :    | event_forward_dcl
    3224                 :       {
    3225               0 :          NON_DEV("event") ;
    3226                 :       }
    3227               0 :    ;
    3228                 : 
    3229                 : /* OMG Rule (135) */
    3230                 : 
    3231                 : event_forward_dcl
    3232                 :    : TOK_ABSTRACT TOK_EVENTTYPE TOK_IDENTIFIER
    3233                 :       {
    3234               0 :          NON_DEV("event_forward_dcl") ;
    3235                 :       }
    3236               0 :    | TOK_EVENTTYPE TOK_IDENTIFIER
    3237                 :       {
    3238               0 :          NON_DEV("event_forward_dcl") ;
    3239                 :       }
    3240               0 :    ;
    3241                 : 
    3242                 : /* OMG Rule (136) */
    3243                 : 
    3244                 : event_abs_dcl
    3245                 :    : TOK_ABSTRACT TOK_EVENTTYPE TOK_IDENTIFIER
    3246                 :      value_inheritance_spec_opt
    3247                 :      TOK_LEFT_CURLY_BRAKET export_lst_opt TOK_RIGHT_CURLY_BRAKET
    3248                 :       {
    3249               0 :          NON_DEV("event_abs_dcl") ;
    3250                 :       }
    3251               0 :    ;
    3252                 : 
    3253                 : /* OMG Rule (137) */
    3254                 : 
    3255                 : event_dcl
    3256                 :    : event_header
    3257                 :      TOK_LEFT_CURLY_BRAKET value_element_lst_opt TOK_RIGHT_CURLY_BRAKET
    3258                 :       {
    3259               0 :          NON_DEV("event_dcl") ;
    3260                 :       }
    3261               0 :    ;
    3262                 : 
    3263                 : /* OMG Rule (138) */
    3264                 : 
    3265                 : event_header
    3266                 :    : TOK_CUSTOM TOK_EVENTTYPE TOK_IDENTIFIER value_inheritance_spec_opt
    3267                 :       {
    3268               0 :          NON_DEV("event_header") ;
    3269                 :       }
    3270               0 :    | TOK_EVENTTYPE TOK_IDENTIFIER value_inheritance_spec_opt
    3271                 :       {
    3272               0 :          NON_DEV("event_header") ;
    3273                 :       }
    3274               0 :    ;
    3275                 : 
    3276                 : /* BONUS : string concatenation is done by bison, not flex */
    3277                 : 
    3278                 : string_literal
    3279                 :    : string_literal_unit
    3280                 :       {
    3281               4 :          $$ = $1 ;
    3282                 :       }
    3283               4 :    | string_literal string_literal_unit
    3284                 :       {
    3285                 :          ASSERT($1 != NULL) ;
    3286                 :          ASSERT($2 != NULL) ;
    3287                 : 
    3288               0 :          *($1) += *($2) ;
    3289               0 :          delete $2 ;
    3290               0 :          $$ = $1 ;
    3291                 :       }
    3292               0 :    ;
    3293                 : 
    3294                 : wide_string_literal
    3295                 :    : wide_string_literal_unit
    3296                 :       {
    3297               1 :          $$ = $1 ;
    3298                 :       }
    3299               1 :    | wide_string_literal wide_string_literal_unit
    3300                 :       {
    3301                 :          ASSERT($1 != NULL) ;
    3302                 :          ASSERT($2 != NULL) ;
    3303                 : 
    3304               0 :          *($1) += *($2) ;
    3305               0 :          delete $2 ;
    3306               0 :          $$ = $1 ;
    3307                 :       }
    3308                 :    ;
    3309                 : 
    3310                 : /* END */
    3311                 : 
    3312                 : 

Generated by: LTP GCOV extension version 1.4