Kaydet (Commit) cd3bb304 authored tarafından Noel Grandin's avatar Noel Grandin

move some more slot parsing to SvIdlParser

Change-Id: I186e80ed0446585aceaf4d25f32ecca7e8ed396c
üst 0f8f733e
......@@ -33,6 +33,7 @@ class SvClassElement
tools::SvRef<SvMetaClass> xClass;
public:
SvClassElement();
SvClassElement(SvMetaClass* pClass) { xClass = pClass; }
void SetPrefix( const OString& rPrefix )
{ aPrefix = rPrefix; }
......
......@@ -37,25 +37,26 @@ class SvIdlParser
SvTokenStream & rInStm;
public:
SvIdlParser( SvIdlDataBase& rBase_, SvTokenStream & rInStrm_) : rBase(rBase_), rInStm(rInStrm_) {}
void ReadSvIdl( bool bImported, const OUString & rPath );
void ReadModuleHeader(SvMetaModule& rModule);
void ReadModuleBody(SvMetaModule& rModule);
void ReadModuleElement( SvMetaModule& rModule );
void ReadInclude( SvMetaModule& rModule );
void ReadInterfaceOrShell( SvMetaModule& rModule, MetaTypeType aMetaTypeType );
void ReadInterfaceOrShellEntry( SvMetaClass& rClass );
bool ReadInterfaceOrShellSlot( SvMetaSlot& rSlot );
bool ReadInterfaceOrShellMethodOrAttribute( SvMetaAttribute& rAttr );
void ReadItem();
void ReadStruct();
void ReadEnum();
void ReadEnumValue( SvMetaTypeEnum& rEnum );
SvMetaType* ReadKnownType();
void ReadChar(char cChar);
void ReadDelimiter();
OString ReadIdentifier();
OString ReadString();
void ReadToken(SvStringHashEntry*);
void ReadSvIdl( bool bImported, const OUString & rPath );
void ReadModuleHeader(SvMetaModule& rModule);
void ReadModuleBody(SvMetaModule& rModule);
void ReadModuleElement( SvMetaModule& rModule );
void ReadInclude( SvMetaModule& rModule );
void ReadInterfaceOrShell( SvMetaModule& rModule, MetaTypeType aMetaTypeType );
void ReadInterfaceOrShellEntry( SvMetaClass& rClass );
bool ReadInterfaceOrShellSlot( SvMetaSlot& rSlot );
bool ReadInterfaceOrShellMethodOrAttribute( SvMetaAttribute& rAttr );
void ReadItem();
void ReadStruct();
void ReadEnum();
void ReadEnumValue( SvMetaTypeEnum& rEnum );
SvMetaClass* ReadKnownClass();
SvMetaType* ReadKnownType();
void ReadChar(char cChar);
void ReadDelimiter();
OString ReadIdentifier();
OString ReadString();
void ReadToken(SvStringHashEntry*);
};
#endif // INCLUDED_IDL_INC_PARSER_HXX
......
......@@ -282,9 +282,7 @@ void SvIdlParser::ReadInterfaceOrShell( SvMetaModule& rModule, MetaTypeType aMet
if( rInStm.ReadIf( ':' ) )
{
aClass->aSuperClass = rBase.ReadKnownClass( rInStm );
if( !aClass->aSuperClass.Is() )
throw SvParseException( rInStm, "unknown super class" );
aClass->aSuperClass = ReadKnownClass();
}
if( rInStm.ReadIf( '{' ) )
{
......@@ -309,19 +307,15 @@ void SvIdlParser::ReadInterfaceOrShellEntry(SvMetaClass& rClass)
if( rTok.Is( SvHash_import() ) )
{
SvMetaClass * pClass = rBase.ReadKnownClass( rInStm );
if( !pClass )
throw SvParseException( rInStm, "unknown imported interface" );
SvClassElement xEle;
xEle.SetClass( pClass );
rClass.aClassElementList.push_back( xEle );
SvMetaClass * pClass = ReadKnownClass();
SvClassElement xEle(pClass);
rTok = rInStm.GetToken();
if( rTok.IsString() )
{
xEle.SetPrefix( rTok.GetString() );
rInStm.GetToken_Next();
}
rClass.aClassElementList.push_back( xEle );
return;
}
else
......@@ -363,12 +357,22 @@ bool SvIdlParser::ReadInterfaceOrShellSlot(SvMetaSlot& rSlot)
SvMetaAttribute * pAttr = rBase.ReadKnownAttr( rInStm, rSlot.GetType() );
if( pAttr )
{
SvMetaSlot * pKnownSlot = dynamic_cast<SvMetaSlot*>( pAttr );
SvMetaSlot * pKnownSlot = dynamic_cast<SvMetaSlot*>( pAttr );
if( !pKnownSlot )
throw SvParseException( rInStm, "attribute " + pAttr->GetName() + " is method or variable but not a slot" );
rSlot.SetRef( pKnownSlot );
rSlot.SetName( pKnownSlot->GetName() );
bOk = rSlot.SvMetaObject::ReadSvIdl( rBase, rInStm );
if( rInStm.ReadIf( '[' ) )
{
sal_uInt32 nBeginPos = 0; // can not happen with Tell
while( nBeginPos != rInStm.Tell() )
{
nBeginPos = rInStm.Tell();
rSlot.ReadAttributesSvIdl( rBase, rInStm );
rInStm.ReadIfDelimiter();
}
bOk = rInStm.ReadIf( ']' );
}
}
else
{
......@@ -376,7 +380,7 @@ bool SvIdlParser::ReadInterfaceOrShellSlot(SvMetaSlot& rSlot)
SvMetaAttribute *pAttr2 = rBase.SearchKnownAttr( rSlot.GetSlotId() );
if( pAttr2 )
{
SvMetaSlot * pKnownSlot = dynamic_cast<SvMetaSlot*>( pAttr2 );
SvMetaSlot * pKnownSlot = dynamic_cast<SvMetaSlot*>( pAttr2 );
if( !pKnownSlot )
throw SvParseException( rInStm, "attribute " + pAttr2->GetName() + " is method or variable but not a slot" );
rSlot.SetRef( pKnownSlot );
......@@ -435,6 +439,14 @@ bool SvIdlParser::ReadInterfaceOrShellMethodOrAttribute( SvMetaAttribute& rAttr
return bOk;
}
SvMetaClass * SvIdlParser::ReadKnownClass()
{
SvMetaClass* pClass = rBase.ReadKnownClass( rInStm );
if( !pClass )
throw SvParseException( rInStm, "unknown class" );
return pClass;
}
SvMetaType * SvIdlParser::ReadKnownType()
{
OString aName = ReadIdentifier();
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment