LCOV - code coverage report
Current view: top level - libreoffice/autodoc/source/parser_i/idl - pe_iface.cxx (source / functions) Hit Total Coverage
Test: libreoffice_filtered.info Lines: 152 191 79.6 %
Date: 2012-12-27 Functions: 31 41 75.6 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
       2             : /*
       3             :  * This file is part of the LibreOffice project.
       4             :  *
       5             :  * This Source Code Form is subject to the terms of the Mozilla Public
       6             :  * License, v. 2.0. If a copy of the MPL was not distributed with this
       7             :  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
       8             :  *
       9             :  * This file incorporates work covered by the following license notice:
      10             :  *
      11             :  *   Licensed to the Apache Software Foundation (ASF) under one or more
      12             :  *   contributor license agreements. See the NOTICE file distributed
      13             :  *   with this work for additional information regarding copyright
      14             :  *   ownership. The ASF licenses this file to you under the Apache
      15             :  *   License, Version 2.0 (the "License"); you may not use this file
      16             :  *   except in compliance with the License. You may obtain a copy of
      17             :  *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
      18             :  */
      19             : 
      20             : #include <precomp.h>
      21             : #include <s2_luidl/pe_iface.hxx>
      22             : 
      23             : 
      24             : // NOT FULLY DEFINED SERVICES
      25             : #include <ary/idl/i_interface.hxx>
      26             : #include <ary/idl/i_gate.hxx>
      27             : #include <ary/idl/ip_ce.hxx>
      28             : #include <ary/doc/d_oldidldocu.hxx>
      29             : #include <s2_luidl/pe_func2.hxx>
      30             : #include <s2_luidl/pe_attri.hxx>
      31             : #include <s2_luidl/pe_type2.hxx>
      32             : #include <s2_luidl/tk_keyw.hxx>
      33             : #include <s2_luidl/tk_ident.hxx>
      34             : #include <s2_luidl/tk_punct.hxx>
      35             : #include <adc_cl.hxx>
      36             : 
      37             : 
      38             : 
      39             : namespace csi
      40             : {
      41             : namespace uidl
      42             : {
      43             : 
      44             : #ifdef DF
      45             : #undef DF
      46             : #endif
      47             : #define DF  &PE_Interface::On_Default
      48             : 
      49             : PE_Interface::F_TOK
      50             : PE_Interface::aDispatcher[PE_Interface::e_STATES_MAX][PE_Interface::tt_MAX] =
      51             :         {   { DF, DF, DF, DF, DF },  // e_none
      52             :             { &PE_Interface::On_need_uik_MetaType,
      53             :                  DF, DF, DF, DF },  // need_uik
      54             :             { DF, &PE_Interface::On_uik_Identifier,
      55             :                      &PE_Interface::On_uik_Punctuation,
      56             :                          DF, DF },  // uik
      57             :             { &PE_Interface::On_need_ident_MetaType,
      58             :                  DF, DF, DF, DF },  // need_ident
      59             :             { DF, &PE_Interface::On_ident_Identifier,
      60             :                      &PE_Interface::On_ident_Punctuation,
      61             :                          DF, DF },  // ident
      62             :             { &PE_Interface::On_need_interface_MetaType,
      63             :                  DF, DF, DF, DF },  // need_interface
      64             :             { DF, &PE_Interface::On_need_name_Identifer,
      65             :                     DF, DF, DF },  // need_name
      66             :             { DF, DF, &PE_Interface::On_wait_for_base_Punctuation,
      67             :                         DF, DF },  // wait_for_base
      68             :             { DF, DF, DF, DF, DF },  // in_base
      69             :             { DF, DF, &PE_Interface::On_need_curlbr_open_Punctuation,
      70             :                           DF, DF },  // need_curlbr_open
      71             :             { &PE_Interface::On_std_Metatype,
      72             :                   &PE_Interface::On_std_GotoFunction,
      73             :                       &PE_Interface::On_std_Punctuation,
      74             :                           &PE_Interface::On_std_GotoFunction,
      75             :                               &PE_Interface::On_std_Stereotype },  // e_std
      76             :             { DF, DF, DF, DF, DF },  // in_function
      77             :             { DF, DF, DF, DF, DF },  // in_attribute
      78             :             { DF, DF, &PE_Interface::On_need_finish_Punctuation,
      79             :                           DF, DF },  // need_finish
      80             :             { DF, DF, DF, DF, DF }   // in_base_interface
      81             :         };
      82             : 
      83             : 
      84             : 
      85             : inline void
      86       17980 : PE_Interface::CallHandler( const char *     i_sTokenText,
      87             :                            E_TokenType      i_eTokenType )
      88       17980 :     { (this->*aDispatcher[eState][i_eTokenType])(i_sTokenText); }
      89             : 
      90             : 
      91             : 
      92           3 : PE_Interface::PE_Interface()
      93             :     :   eState(e_none),
      94             :         sData_Name(),
      95             :         bIsPreDeclaration(false),
      96             :         pCurInterface(0),
      97             :         nCurInterface(0),
      98             :         pPE_Function(0),
      99             :         pPE_Attribute(0),
     100             :         pPE_Type(0),
     101             :         nCurParsed_Base(0),
     102           3 :         bOptionalMember(false)
     103             : {
     104           3 :     pPE_Function    = new PE_Function(nCurInterface);
     105           3 :     pPE_Type        = new PE_Type(nCurParsed_Base);
     106           3 :     pPE_Attribute   = new PE_Attribute(nCurInterface);
     107           3 : }
     108             : 
     109             : void
     110           3 : PE_Interface::EstablishContacts( UnoIDL_PE *                io_pParentPE,
     111             :                                  ary::Repository &      io_rRepository,
     112             :                                  TokenProcessing_Result &   o_rResult )
     113             : {
     114           3 :     UnoIDL_PE::EstablishContacts(io_pParentPE,io_rRepository,o_rResult);
     115           3 :     pPE_Function->EstablishContacts(this,io_rRepository,o_rResult);
     116           3 :     pPE_Type->EstablishContacts(this,io_rRepository,o_rResult);
     117           3 :     pPE_Attribute->EstablishContacts(this,io_rRepository,o_rResult);
     118           3 : }
     119             : 
     120           6 : PE_Interface::~PE_Interface()
     121             : {
     122           6 : }
     123             : 
     124             : void
     125       39420 : PE_Interface::ProcessToken( const Token & i_rToken )
     126             : {
     127       39420 :     i_rToken.Trigger(*this);
     128       39420 : }
     129             : 
     130             : 
     131             : void
     132        3005 : PE_Interface::Process_MetaType( const TokMetaType & i_rToken )
     133             : {
     134        3005 :     CallHandler( i_rToken.Text(), tt_metatype );
     135        3005 : }
     136             : 
     137             : void
     138        3293 : PE_Interface::Process_Identifier( const TokIdentifier & i_rToken )
     139             : {
     140        3293 :     CallHandler( i_rToken.Text(), tt_identifier );
     141        3293 : }
     142             : 
     143             : void
     144        7214 : PE_Interface::Process_Punctuation( const TokPunctuation & i_rToken )
     145             : {
     146        7214 :     CallHandler( i_rToken.Text(), tt_punctuation );
     147        7214 : }
     148             : 
     149             : void
     150         111 : PE_Interface::Process_NameSeparator()
     151             : {
     152         111 :     CallHandler( "", tt_startoftype );
     153         111 : }
     154             : 
     155             : void
     156        3892 : PE_Interface::Process_BuiltInType( const TokBuiltInType & i_rToken )
     157             : {
     158        3892 :     CallHandler( i_rToken.Text(), tt_startoftype );
     159        3892 : }
     160             : 
     161             : void
     162         438 : PE_Interface::Process_TypeModifier( const TokTypeModifier & i_rToken )
     163             : {
     164         438 :     CallHandler( i_rToken.Text(), tt_startoftype );
     165         438 : }
     166             : 
     167             : void
     168          27 : PE_Interface::Process_Stereotype( const TokStereotype & i_rToken )
     169             : {
     170          27 :     CallHandler( i_rToken.Text(), tt_stereotype );
     171          27 : }
     172             : 
     173             : void
     174           0 : PE_Interface::Process_Default()
     175             : {
     176           0 :     SetResult(done, stay);
     177           0 : }
     178             : 
     179             : 
     180             : void
     181           0 : PE_Interface::On_need_uik_MetaType(SAL_UNUSED_PARAMETER const char *)
     182             : {
     183             :     // Deprecated, data will be ignored
     184           0 :     SetResult(done, stay);
     185           0 :     eState = uik;
     186           0 : }
     187             : 
     188             : void
     189           0 : PE_Interface::On_uik_Identifier(SAL_UNUSED_PARAMETER const char *)
     190             : {
     191             :     // Deprecated, data will be ignored
     192           0 :     SetResult(done, stay);
     193           0 : }
     194             : 
     195             : void
     196           0 : PE_Interface::On_uik_Punctuation(const char * i_sText)
     197             : {
     198             :     // Deprecated, data will be ignored
     199           0 :     SetResult(done, stay);
     200           0 :     if (strcmp(",",i_sText) == 0)
     201             :     {
     202           0 :         eState = need_ident;
     203             :     }
     204           0 : }
     205             : 
     206             : void
     207           0 : PE_Interface::On_need_ident_MetaType(SAL_UNUSED_PARAMETER const char *)
     208             : {
     209           0 :     SetResult(done, stay);
     210           0 :     eState = ident;
     211           0 : }
     212             : 
     213             : void
     214           0 : PE_Interface::On_ident_Identifier(SAL_UNUSED_PARAMETER const char *)
     215             : {
     216           0 :     SetResult(done, stay);
     217           0 : }
     218             : 
     219             : void
     220           0 : PE_Interface::On_ident_Punctuation(const char * i_sText)
     221             : {
     222           0 :     SetResult(done, stay);
     223           0 :     if (strcmp(")",i_sText) == 0)
     224             :     {
     225           0 :         eState = need_interface;
     226             :     }
     227           0 : }
     228             : 
     229             : void
     230        2232 : PE_Interface::On_need_interface_MetaType(SAL_UNUSED_PARAMETER const char *)
     231             : {
     232        2232 :     SetResult(done, stay);
     233        2232 :     eState = need_name;
     234        2232 : }
     235             : 
     236             : void
     237        2232 : PE_Interface::On_need_name_Identifer(const char * i_sText)
     238             : {
     239        2232 :     SetResult(done, stay);
     240        2232 :     sData_Name = i_sText;
     241        2232 :     eState = wait_for_base;
     242        2232 : }
     243             : 
     244             : void
     245        2232 : PE_Interface::On_wait_for_base_Punctuation(const char * i_sText)
     246             : {
     247        2232 :     if (i_sText[0] != ';')
     248             :     {
     249        1644 :         switch (i_sText[0])
     250             :         {
     251             :             case ':':
     252        1413 :                 SetResult(done, push_sure, pPE_Type.Ptr());
     253        1413 :                 eState = in_base;
     254        1413 :                 break;
     255             :             case '{':
     256         231 :                 store_Interface();
     257             : 
     258         231 :                 SetResult(done,stay);
     259         231 :                 eState = e_std;
     260         231 :                 break;
     261             :             default:
     262           0 :                 SetResult(not_done, pop_failure);
     263           0 :                 eState = e_none;
     264             :         }   // end switch
     265             :     }
     266             :     else
     267             :     {
     268         588 :         bIsPreDeclaration = true;
     269         588 :         SetResult(done, pop_success);
     270         588 :         eState = e_none;
     271             :     }
     272        2232 : }
     273             : 
     274             : void
     275        1413 : PE_Interface::On_need_curlbr_open_Punctuation(const char * i_sText)
     276             : {
     277        1413 :     if (i_sText[0] == '{')
     278             :     {
     279        1413 :         store_Interface();
     280             : 
     281        1413 :         SetResult(done, stay);
     282        1413 :         eState = e_std;
     283             :     }
     284             :     else {
     285             :         csv_assert(false);
     286             :     }
     287        1413 : }
     288             : 
     289             : 
     290             : void
     291         773 : PE_Interface::On_std_Metatype(const char * i_sText)
     292             : {
     293         773 :     if (strcmp(i_sText,"attribute") ==  0)
     294         492 :         On_std_GotoAttribute(i_sText);
     295         281 :     else if (strcmp(i_sText,"interface") ==  0)
     296         281 :         On_std_GotoBaseInterface(i_sText);
     297             :     else
     298           0 :         On_std_GotoFunction(i_sText);
     299         773 : }
     300             : 
     301             : void
     302        1925 : PE_Interface::On_std_Punctuation(const char * i_sText)
     303             : {
     304        1925 :     switch (i_sText[0])
     305             :     {
     306             :         case '}':
     307        1644 :             SetResult(done, stay);
     308        1644 :             eState = need_finish;
     309        1644 :             break;
     310             :         case ';':   // Appears after base interface declarations.
     311         281 :             SetResult(done, stay);
     312         281 :             break;
     313             :         default:
     314           0 :             SetResult(not_done, pop_failure);
     315           0 :             eState = e_none;
     316             :     }   // end switch
     317        1925 : }
     318             : 
     319             : void
     320          27 : PE_Interface::On_std_Stereotype(const char * i_sText)
     321             : {
     322          27 :     if (strcmp(i_sText,"oneway") ==  0)
     323           0 :         On_std_GotoFunction(i_sText);
     324          33 :     else if (    strcmp(i_sText,"readonly") ==  0
     325           6 :               OR strcmp(i_sText,"bound") ==  0 )
     326          21 :         On_std_GotoAttribute(i_sText);
     327           6 :     else if (strcmp(i_sText,"optional") ==  0)
     328             :     {
     329           6 :         bOptionalMember = true;
     330           6 :         SetResult(done, stay);
     331             :     }
     332             :     else
     333           0 :         SetResult(not_done, pop_failure);
     334          27 : }
     335             : 
     336             : void
     337        5502 : PE_Interface::On_std_GotoFunction(SAL_UNUSED_PARAMETER const char * )
     338             : {
     339        5502 :     SetResult(not_done, push_sure, pPE_Function.Ptr());
     340        5502 :     eState = in_function;
     341        5502 : }
     342             : 
     343             : void
     344         513 : PE_Interface::On_std_GotoAttribute(SAL_UNUSED_PARAMETER const char * )
     345             : {
     346         513 :         SetResult(not_done, push_sure, pPE_Attribute.Ptr());
     347         513 :         eState = in_attribute;
     348         513 : }
     349             : 
     350             : void
     351         281 : PE_Interface::On_std_GotoBaseInterface(SAL_UNUSED_PARAMETER const char * )
     352             : {
     353         281 :        SetResult(done, push_sure, pPE_Type.Ptr());
     354         281 :     eState = in_base_interface;
     355         281 : }
     356             : 
     357             : void
     358        1644 : PE_Interface::On_need_finish_Punctuation(const char * i_sText)
     359             : {
     360        1644 :     switch (i_sText[0])
     361             :     {
     362             :         case ';':
     363        1644 :             SetResult(done, pop_success);
     364        1644 :             eState = e_none;
     365        1644 :             break;
     366             :         default:
     367           0 :             SetResult(not_done, pop_failure);
     368           0 :             eState = e_none;
     369             :     }   // end switch
     370        1644 : }
     371             : 
     372             : void
     373           0 : PE_Interface::On_Default(SAL_UNUSED_PARAMETER const char *)
     374             : {
     375           0 :     SetResult(not_done, pop_failure);
     376           0 : }
     377             : 
     378             : void
     379        2232 : PE_Interface::InitData()
     380             : {
     381        2232 :     eState = need_interface;
     382             : 
     383        2232 :     sData_Name.clear();
     384        2232 :     bIsPreDeclaration = false;
     385        2232 :     pCurInterface = 0;
     386        2232 :     nCurInterface = 0;
     387        2232 :     nCurParsed_Base = 0;
     388        2232 :     bOptionalMember = false;
     389        2232 : }
     390             : 
     391             : void
     392        2232 : PE_Interface::TransferData()
     393             : {
     394        2232 :     if (NOT bIsPreDeclaration)
     395             :     {
     396             :         csv_assert(sData_Name.size() > 0);
     397             :         csv_assert(nCurInterface.IsValid());
     398             :     }
     399             :     else
     400             :     {
     401         588 :          sData_Name.clear();
     402         588 :          pCurInterface = 0;
     403         588 :         nCurInterface = 0;
     404             :     }
     405             : 
     406        2232 :     eState = e_none;
     407        2232 : }
     408             : 
     409             : void
     410        7709 : PE_Interface::ReceiveData()
     411             : {
     412        7709 :     switch (eState)
     413             :     {
     414             :         case in_base:
     415        1413 :                 eState = need_curlbr_open;
     416        1413 :                 break;
     417             :         case in_function:
     418        5502 :                 eState = e_std;
     419        5502 :                 break;
     420             :         case in_attribute:
     421         513 :                 eState = e_std;
     422         513 :                 break;
     423             :         case in_base_interface:
     424         281 :                 if (bOptionalMember)
     425             :                 {
     426           6 :                     pPE_Type->SetOptional();
     427           6 :                     bOptionalMember = false;
     428             :                 }
     429             :                 pCurInterface->Add_Base(
     430             :                                     nCurParsed_Base,
     431         281 :                                     pPE_Type->ReleaseDocu());
     432         281 :                 nCurParsed_Base = 0;
     433         281 :                 eState = e_std;
     434         281 :                 break;
     435             :         default:
     436             :             csv_assert(false);
     437             :     }
     438        7709 : }
     439             : 
     440             : UnoIDL_PE &
     441       21440 : PE_Interface::MyPE()
     442             : {
     443       21440 :      return *this;
     444             : }
     445             : 
     446             : void
     447        1644 : PE_Interface::store_Interface()
     448             : {
     449        1644 :     pCurInterface = & Gate().Ces().Store_Interface(
     450        1644 :                                         CurNamespace().CeId(),
     451             :                                         sData_Name,
     452        3288 :                                         nCurParsed_Base );
     453        1644 :     nCurInterface = pCurInterface->CeId();
     454        1644 :     PassDocuAt(*pCurInterface);
     455        1644 : }
     456             : 
     457             : 
     458             : }   // namespace uidl
     459           3 : }   // namespace csi
     460             : 
     461             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.10