diff options
author | Noel Grandin <noel@peralex.com> | 2016-06-21 14:13:53 +0200 |
---|---|---|
committer | Noel Grandin <noel@peralex.com> | 2016-06-22 09:27:15 +0200 |
commit | dc1df1b8f92b873b0776bff4ca3da79af05392ba (patch) | |
tree | 251fc58a0f2637e6f7582bd9eeba27b1d53bfd20 | |
parent | 380a646b957052f96b3f9440d20dc63fc72e1d46 (diff) |
simplify parser
Change-Id: If6b9ed2a0cb373c8bec5d3ff20488f5ee00231ff
-rw-r--r-- | idl/source/prj/parser.cxx | 39 |
1 files changed, 15 insertions, 24 deletions
diff --git a/idl/source/prj/parser.cxx b/idl/source/prj/parser.cxx index cb2cd8b83e1f..a71e36745cbb 100644 --- a/idl/source/prj/parser.cxx +++ b/idl/source/prj/parser.cxx @@ -182,10 +182,8 @@ void SvIdlParser::ReadStruct() xStruct->SetType( MetaTypeType::Struct ); xStruct->SetName( ReadIdentifier() ); Read( '{' ); - sal_uInt32 nBeginPos = 0; // can not happen with Tell - while( nBeginPos != rInStm.Tell() ) + while( true ) { - nBeginPos = rInStm.Tell(); tools::SvRef<SvMetaAttribute> xAttr( new SvMetaAttribute() ); xAttr->aType = ReadKnownType(); xAttr->SetName(ReadIdentifier()); @@ -293,25 +291,20 @@ void SvIdlParser::ReadInterfaceOrShell( SvMetaModule& rModule, MetaTypeType aMet void SvIdlParser::ReadInterfaceOrShellEntry(SvMetaClass& rClass) { - sal_uInt32 nTokPos = rInStm.Tell(); - SvToken& rTok = rInStm.GetToken_Next(); - - if( rTok.Is( SvHash_import() ) ) + if( ReadIf( SvHash_import() ) ) { SvMetaClass * pClass = ReadKnownClass(); SvClassElement aEle(pClass); - rTok = rInStm.GetToken(); + SvToken& rTok = rInStm.GetToken(); if( rTok.IsString() ) { aEle.SetPrefix( rTok.GetString() ); rInStm.GetToken_Next(); } rClass.aClassElementList.push_back( aEle ); - return; } else { - rInStm.Seek( nTokPos ); SvMetaType * pType = rBase.ReadKnownType( rInStm ); tools::SvRef<SvMetaAttribute> xAttr; bool bOk = false; @@ -335,10 +328,8 @@ void SvIdlParser::ReadInterfaceOrShellEntry(SvMetaClass& rClass) if( !xAttr->GetSlotId().IsSet() ) xAttr->SetSlotId( SvIdentifier(rBase.GetUniqueId()) ); rClass.aAttrList.push_back( xAttr ); - return; } } - rInStm.Seek( nTokPos ); } bool SvIdlParser::ReadInterfaceOrShellSlot(SvMetaSlot& rSlot) @@ -402,20 +393,22 @@ void SvIdlParser::ReadInterfaceOrShellMethodOrAttribute( SvMetaAttribute& rAttr tools::SvRef<SvMetaType> xT(new SvMetaType() ); xT->SetRef(rAttr.GetType() ); rAttr.aType = xT; - sal_uInt32 nBeginPos = 0; // can not happen with Tell - while( nBeginPos != rInStm.Tell() ) + rAttr.aType->SetType( MetaTypeType::Method ); + if (!ReadIf(')')) { - nBeginPos = rInStm.Tell(); - tools::SvRef<SvMetaAttribute> xAttr( new SvMetaAttribute() ); - if( xAttr->ReadSvIdl( rBase, rInStm ) ) + while (true) { - if( xAttr->Test( rInStm ) ) - rAttr.aType->GetAttrList().push_back( xAttr ); + tools::SvRef<SvMetaAttribute> xAttr( new SvMetaAttribute() ); + if( !xAttr->ReadSvIdl( rBase, rInStm ) ) + throw SvParseException(rInStm, "ReadSvIdl in method argument parsing failed"); + if( !xAttr->Test( rInStm ) ) + throw SvParseException(rInStm, "test in method argument parsing failed"); + rAttr.aType->GetAttrList().push_back( xAttr ); + if (!ReadIfDelimiter()) + break; } - ReadIfDelimiter(); + Read(')'); } - Read( ')' ); - rAttr.aType->SetType( MetaTypeType::Method ); } SvMetaClass * SvIdlParser::ReadKnownClass() @@ -433,9 +426,7 @@ SvMetaType * SvIdlParser::ReadKnownType() for( const auto& aType : rBase.GetTypeList() ) { if( aType->GetName() == aName ) - { return aType; - } } throw SvParseException( rInStm, "wrong typedef: "); } |