LCOV - code coverage report
Current view: top level - libreoffice/autodoc/source/parser_i/idl - pe_excp.cxx (source / functions) Hit Total Coverage
Test: libreoffice_filtered.info Lines: 112 118 94.9 %
Date: 2012-12-27 Functions: 28 30 93.3 %
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_excp.hxx>
      22             : 
      23             : 
      24             : // NOT FULLY DECLARED SERVICES
      25             : #include <ary/idl/i_exception.hxx>
      26             : #include <ary/idl/i_gate.hxx>
      27             : #include <ary/idl/i_structelem.hxx>
      28             : #include <ary/idl/ip_ce.hxx>
      29             : #include <ary/doc/d_oldidldocu.hxx>
      30             : #include <s2_luidl/tk_ident.hxx>
      31             : #include <s2_luidl/tk_punct.hxx>
      32             : #include <s2_luidl/tk_keyw.hxx>
      33             : #include <s2_luidl/pe_type2.hxx>
      34             : #include <s2_luidl/pe_selem.hxx>
      35             : 
      36             : 
      37             : 
      38             : namespace csi
      39             : {
      40             : namespace uidl
      41             : {
      42             : 
      43             : 
      44           3 : PE_Exception::PE_Exception()
      45             :     // :    aWork,
      46             :     //      pStati
      47             : {
      48           3 :     pStati = new S_Stati(*this);
      49           3 : }
      50             : 
      51             : void
      52           3 : PE_Exception::EstablishContacts( UnoIDL_PE *                io_pParentPE,
      53             :                               ary::Repository &         io_rRepository,
      54             :                               TokenProcessing_Result &  o_rResult )
      55             : {
      56           3 :     UnoIDL_PE::EstablishContacts(io_pParentPE,io_rRepository,o_rResult);
      57           3 :     Work().pPE_Element->EstablishContacts(this,io_rRepository,o_rResult);
      58           3 :     Work().pPE_Type->EstablishContacts(this,io_rRepository,o_rResult);
      59           3 : }
      60             : 
      61           6 : PE_Exception::~PE_Exception()
      62             : {
      63           6 : }
      64             : 
      65             : void
      66        2015 : PE_Exception::ProcessToken( const Token & i_rToken )
      67             : {
      68        2015 :     i_rToken.Trigger(*Stati().pCurStatus);
      69        2015 : }
      70             : 
      71             : 
      72             : void
      73         243 : PE_Exception::InitData()
      74             : {
      75         243 :     Work().InitData();
      76         243 :     Stati().pCurStatus = &Stati().aWaitForName;
      77         243 : }
      78             : 
      79             : void
      80         243 : PE_Exception::TransferData()
      81             : {
      82         243 :     if (NOT Work().bIsPreDeclaration)
      83             :     {
      84             :         csv_assert(Work().sData_Name.size() > 0);
      85             :         csv_assert(Work().nCurStruct.IsValid());
      86             :     }
      87         243 :     Stati().pCurStatus = &Stati().aNone;
      88         243 : }
      89             : 
      90             : void
      91         394 : PE_Exception::ReceiveData()
      92             : {
      93         394 :     Stati().pCurStatus->On_SubPE_Left();
      94         394 : }
      95             : 
      96           3 : PE_Exception::S_Work::S_Work()
      97             :     :   sData_Name(),
      98             :         bIsPreDeclaration(false),
      99             :         nCurStruct(0),
     100             :         pPE_Element(0),
     101             :         nCurParsed_ElementRef(0),
     102             :         pPE_Type(0),
     103           3 :         nCurParsed_Base(0)
     104             : 
     105             : {
     106           3 :     pPE_Element = new PE_StructElement(nCurParsed_ElementRef,nCurStruct);
     107           3 :     pPE_Type = new PE_Type(nCurParsed_Base);
     108           3 : }
     109             : 
     110             : void
     111         243 : PE_Exception::S_Work::InitData()
     112             : {
     113         243 :     sData_Name.clear();
     114         243 :     bIsPreDeclaration = false;
     115         243 :     nCurStruct = 0;
     116             : 
     117         243 :     nCurParsed_ElementRef = 0;
     118         243 :     nCurParsed_Base = 0;
     119         243 : }
     120             : 
     121             : void
     122         242 : PE_Exception::S_Work::Prepare_PE_QualifiedName()
     123             : {
     124         242 :     nCurParsed_ElementRef = 0;
     125         242 : }
     126             : 
     127             : void
     128         152 : PE_Exception::S_Work::Prepare_PE_Element()
     129             : {
     130         152 :     nCurParsed_Base = 0;
     131         152 : }
     132             : 
     133             : void
     134         243 : PE_Exception::S_Work::Data_Set_Name( const char * i_sName )
     135             : {
     136         243 :     sData_Name = i_sName;
     137         243 : }
     138             : 
     139           3 : PE_Exception::S_Stati::S_Stati(PE_Exception & io_rStruct)
     140             :     :   aNone(io_rStruct),
     141             :         aWaitForName(io_rStruct),
     142             :         aGotName(io_rStruct),
     143             :         aWaitForBase(io_rStruct),
     144             :         aGotBase(io_rStruct),
     145             :         aWaitForElement(io_rStruct),
     146             :         aWaitForFinish(io_rStruct),
     147           3 :         pCurStatus(0)
     148             : {
     149           3 :     pCurStatus = &aNone;
     150           3 : }
     151             : 
     152             : 
     153             : //***********************       Stati       ***************************//
     154             : 
     155             : 
     156             : UnoIDL_PE &
     157         649 : PE_Exception::PE_StructState::MyPE()
     158             : {
     159         649 :     return rStruct;
     160             : }
     161             : 
     162             : 
     163             : void
     164         243 : PE_Exception::State_WaitForName::Process_Identifier( const TokIdentifier & i_rToken )
     165             : {
     166         243 :     Work().Data_Set_Name(i_rToken.Text());
     167         243 :     MoveState( Stati().aGotName );
     168         243 :     SetResult(done,stay);
     169         243 : }
     170             : 
     171             : void
     172         243 : PE_Exception::State_GotName::Process_Punctuation( const TokPunctuation & i_rToken )
     173             : {
     174         243 :     if ( i_rToken.Id() != TokPunctuation::Semicolon )
     175             :     {
     176         243 :         switch (i_rToken.Id())
     177             :         {
     178             :             case TokPunctuation::Colon:
     179         242 :                 MoveState( Stati().aWaitForBase );
     180         242 :                 SetResult(done,push_sure,Work().pPE_Type.Ptr());
     181         242 :                 Work().Prepare_PE_QualifiedName();
     182         242 :                 break;
     183             :             case TokPunctuation::CurledBracketOpen:
     184           1 :                 PE().store_Exception();
     185           1 :                 MoveState( Stati().aWaitForElement );
     186           1 :                 SetResult(done,stay);
     187           1 :                 break;
     188             :             default:
     189           0 :                 SetResult(not_done,pop_failure);
     190             :         }   // end switch
     191             :     }
     192             :     else
     193             :     {
     194           0 :         Work().sData_Name.clear();
     195           0 :         SetResult(done,pop_success);
     196             :     }
     197         243 : }
     198             : 
     199             : void
     200         242 : PE_Exception::State_WaitForBase::On_SubPE_Left()
     201             : {
     202         242 :     MoveState(Stati().aGotBase);
     203         242 : }
     204             : 
     205             : void
     206         242 : PE_Exception::State_GotBase::Process_Punctuation( const TokPunctuation & i_rToken )
     207             : {
     208         242 :     if ( i_rToken.Id() == TokPunctuation::CurledBracketOpen )
     209             :     {
     210         242 :         PE().store_Exception();
     211         242 :         MoveState( Stati().aWaitForElement );
     212         242 :         SetResult(done,stay);
     213             :     }
     214             :     else
     215             :     {
     216           0 :         SetResult(not_done,pop_failure);
     217             :     }
     218         242 : }
     219             : 
     220             : void
     221          20 : PE_Exception::State_WaitForElement::Process_Identifier( const TokIdentifier & )
     222             : {
     223          20 :     SetResult( not_done, push_sure, Work().pPE_Element.Ptr() );
     224          20 :     Work().Prepare_PE_Element();
     225          20 : }
     226             : 
     227             : void
     228           2 : PE_Exception::State_WaitForElement::Process_NameSeparator()
     229             : {
     230           2 :     SetResult( not_done, push_sure, Work().pPE_Element.Ptr());
     231           2 :     Work().Prepare_PE_Element();
     232           2 : }
     233             : 
     234             : void
     235         118 : PE_Exception::State_WaitForElement::Process_BuiltInType( const TokBuiltInType & )
     236             : {
     237         118 :     SetResult( not_done, push_sure, Work().pPE_Element.Ptr());
     238         118 :     Work().Prepare_PE_Element();
     239         118 : }
     240             : 
     241             : void
     242          12 : PE_Exception::State_WaitForElement::Process_TypeModifier(const TokTypeModifier & )
     243             : {
     244          12 :     SetResult( not_done, push_sure, Work().pPE_Element.Ptr());
     245          12 :     Work().Prepare_PE_Element();
     246          12 : }
     247             : 
     248             : void
     249         243 : PE_Exception::State_WaitForElement::Process_Punctuation( const TokPunctuation & i_rToken )
     250             : {
     251         243 :     if ( i_rToken.Id() == TokPunctuation::CurledBracketClose )
     252             :     {
     253         243 :         MoveState( Stati().aWaitForFinish );
     254         243 :         SetResult( done, stay );
     255             :     }
     256             :     else
     257             :     {
     258           0 :         SetResult( not_done, pop_failure );
     259             :     }
     260         243 : }
     261             : 
     262             : void
     263         243 : PE_Exception::State_WaitForFinish::Process_Punctuation( const TokPunctuation & i_rToken )
     264             : {
     265         243 :     if (i_rToken.Id() == TokPunctuation::Semicolon)
     266             :     {
     267         243 :         MoveState( Stati().aNone );
     268         243 :         SetResult( done, pop_success );
     269             :     }
     270             :     else
     271             :     {
     272           0 :         SetResult( not_done, pop_failure );
     273             :     }
     274         243 : }
     275             : 
     276             : void
     277         243 : PE_Exception::store_Exception()
     278             : {
     279             :     ary::idl::Exception &
     280         243 :         rCe = Gate().Ces().Store_Exception(
     281         243 :                             CurNamespace().CeId(),
     282         243 :                             Work().sData_Name,
     283         729 :                             Work().nCurParsed_Base );
     284         243 :     PassDocuAt(rCe);
     285         243 :     Work().nCurStruct = rCe.Id();
     286         243 : }
     287             : 
     288             : 
     289             : }   // namespace uidl
     290           3 : }   // namespace csi
     291             : 
     292             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.10