[Libreoffice-commits] core.git: 5 commits - idl/inc idl/source
Noel Grandin
noel at peralex.com
Fri Feb 12 07:14:50 UTC 2016
idl/inc/lex.hxx | 6
idl/inc/module.hxx | 15 --
idl/inc/parser.hxx | 11 +
idl/inc/types.hxx | 6
idl/source/objects/basobj.cxx | 12 -
idl/source/objects/bastype.cxx | 18 +-
idl/source/objects/module.cxx | 140 ---------------------
idl/source/objects/object.cxx | 2
idl/source/objects/slot.cxx | 2
idl/source/objects/types.cxx | 58 ---------
idl/source/prj/command.cxx | 2
idl/source/prj/parser.cxx | 264 +++++++++++++++++++++++++++++++++++++----
12 files changed, 278 insertions(+), 258 deletions(-)
New commits:
commit b27dcabad349b68d2068dfe68924a5b0867f5ee9
Author: Noel Grandin <noel at peralex.com>
Date: Fri Feb 12 08:58:26 2016 +0200
move parsing of enum into SvIdlParser
Change-Id: I89eef20d62f92f7345750c48c34c9f3b7bca287e
diff --git a/idl/inc/lex.hxx b/idl/inc/lex.hxx
index a9869de..7780a36 100644
--- a/idl/inc/lex.hxx
+++ b/idl/inc/lex.hxx
@@ -198,14 +198,16 @@ public:
return false;
}
- void ReadIfDelimiter()
+ bool ReadIfDelimiter()
{
if( (*pCurToken)->IsChar()
&& (';' == (*pCurToken)->GetChar()
|| ',' == (*pCurToken)->GetChar()) )
{
GetToken_Next();
+ return true;
}
+ return false;
}
sal_uInt32 Tell() const { return pCurToken-aTokList.begin(); }
diff --git a/idl/inc/module.hxx b/idl/inc/module.hxx
index 6ac8fcd..93f335a 100644
--- a/idl/inc/module.hxx
+++ b/idl/inc/module.hxx
@@ -23,7 +23,7 @@
#include <slot.hxx>
#include <object.hxx>
-class SvMetaModule : public SvMetaReference
+class SvMetaModule : public SvMetaObject
{
bool bImported;
public:
diff --git a/idl/inc/parser.hxx b/idl/inc/parser.hxx
index b1f9a67..67f63e3 100644
--- a/idl/inc/parser.hxx
+++ b/idl/inc/parser.hxx
@@ -25,6 +25,7 @@
class SvTokenStream;
class SvIdlDataBase;
class SvMetaModule;
+class SvMetaTypeEnum;
class SvIdlParser
{
@@ -36,6 +37,11 @@ public:
bool ReadModuleHeader(SvMetaModule& rModule);
bool ReadModuleBody(SvMetaModule& rModule);
void ReadModuleElement( SvMetaModule& rModule );
+ void ReadEnum(SvMetaTypeEnum& rEnum);
+ void ReadEnumValue( SvMetaTypeEnum& rEnum );
+ void ReadChar(char cChar);
+ void ReadDelimiter();
+ OString ReadIdentifier();
};
#endif // INCLUDED_IDL_INC_PARSER_HXX
diff --git a/idl/inc/types.hxx b/idl/inc/types.hxx
index 748dc6e..47c5672 100644
--- a/idl/inc/types.hxx
+++ b/idl/inc/types.hxx
@@ -107,19 +107,15 @@ public:
class SvMetaTypeEnum : public SvMetaType
{
+public:
SvRefMemberList<SvMetaEnumValue *> aEnumValueList;
OString aPrefix;
-protected:
- virtual void ReadContextSvIdl( SvIdlDataBase &, SvTokenStream & rInStm ) override;
-public:
SvMetaTypeEnum();
sal_uLong Count() const { return aEnumValueList.size(); }
const OString& GetPrefix() const { return aPrefix; }
SvMetaEnumValue * GetObject( sal_uLong n ) const
{ return aEnumValueList[n]; }
-
- virtual bool ReadSvIdl( SvIdlDataBase &, SvTokenStream & rInStm ) override;
};
class SvMetaTypevoid : public SvMetaType
diff --git a/idl/source/objects/types.cxx b/idl/source/objects/types.cxx
index d63e8c7..c5c799d 100644
--- a/idl/source/objects/types.cxx
+++ b/idl/source/objects/types.cxx
@@ -354,60 +354,6 @@ SvMetaTypeEnum::SvMetaTypeEnum()
{
}
-namespace
-{
- OString getCommonSubPrefix(const OString &rA, const OString &rB)
- {
- sal_Int32 nMax = std::min(rA.getLength(), rB.getLength());
- sal_Int32 nI = 0;
- while (nI < nMax)
- {
- if (rA[nI] != rB[nI])
- break;
- ++nI;
- }
- return rA.copy(0, nI);
- }
-}
-
-void SvMetaTypeEnum::ReadContextSvIdl( SvIdlDataBase & rBase,
- SvTokenStream & rInStm )
-{
- sal_uInt32 nTokPos = rInStm.Tell();
-
- tools::SvRef<SvMetaEnumValue> aEnumVal = new SvMetaEnumValue();
- bool bOk = aEnumVal->ReadSvIdl( rBase, rInStm );
- if( bOk )
- {
- if( aEnumValueList.empty() )
- {
- // the first
- aPrefix = aEnumVal->GetName();
- }
- else
- {
- aPrefix = getCommonSubPrefix(aPrefix, aEnumVal->GetName());
- }
- aEnumValueList.push_back( aEnumVal );
- }
- if( !bOk )
- rInStm.Seek( nTokPos );
-}
-
-bool SvMetaTypeEnum::ReadSvIdl( SvIdlDataBase & rBase,
- SvTokenStream & rInStm )
-{
- sal_uInt32 nTokPos = rInStm.Tell();
- if( SvMetaType::ReadHeaderSvIdl( rBase, rInStm )
- && GetMetaTypeType() == MetaTypeType::Enum )
- {
- if( SvMetaObject::ReadSvIdl( rBase, rInStm ) )
- return true;
- }
- rInStm.Seek( nTokPos );
- return false;
-}
-
SvMetaTypevoid::SvMetaTypevoid()
: SvMetaType( "void" )
{
diff --git a/idl/source/prj/command.cxx b/idl/source/prj/command.cxx
index 2095ad2..3b44679 100644
--- a/idl/source/prj/command.cxx
+++ b/idl/source/prj/command.cxx
@@ -131,7 +131,7 @@ bool ReadIdl( SvIdlWorkingBase * pDataBase, const SvCommand & rCommand )
} catch (const SvParseException& ex) {
pDataBase->SetError(ex.aError);
pDataBase->WriteError(aTokStm);
- return false;
+ return false;
}
}
return true;
diff --git a/idl/source/prj/parser.cxx b/idl/source/prj/parser.cxx
index 99a14bc..33096e5 100644
--- a/idl/source/prj/parser.cxx
+++ b/idl/source/prj/parser.cxx
@@ -83,40 +83,31 @@ bool SvIdlParser::ReadModuleBody(SvMetaModule& rModule)
bool bOk = true;
if( rInStm.ReadIf( '[' ) )
{
- sal_uInt32 nBeginPos = 0; // can not happen with Tell
- while( nBeginPos != rInStm.Tell() )
+ while( true )
{
- nBeginPos = rInStm.Tell();
OString aSlotIdFile;
- if( ReadStringSvIdl( SvHash_SlotIdFile(), rInStm, aSlotIdFile ) )
+ if( !ReadStringSvIdl( SvHash_SlotIdFile(), rInStm, aSlotIdFile ) )
+ break;
+ if( !rBase.ReadIdFile( OStringToOUString(aSlotIdFile, RTL_TEXTENCODING_ASCII_US)) )
{
- if( !rBase.ReadIdFile( OStringToOUString(aSlotIdFile, RTL_TEXTENCODING_ASCII_US)) )
- {
- throw SvParseException( rInStm, "cannot read file: " + aSlotIdFile );
- }
+ throw SvParseException( rInStm, "cannot read file: " + aSlotIdFile );
}
rInStm.ReadIfDelimiter();
}
- bOk = rInStm.ReadIf( ']' );
- }
-
- if( !bOk )
- {
- rInStm.Seek( nTokPos );
- return bOk;
+ ReadChar( ']' );
}
if( !rInStm.ReadIf( '{' ) )
return bOk;
- sal_uInt32 nBeginPos = 0; // can not happen with Tell
+ sal_uInt32 nBeginPos = 0;
while( nBeginPos != rInStm.Tell() )
{
nBeginPos = rInStm.Tell();
ReadModuleElement( rModule );
rInStm.ReadIfDelimiter();
}
- bOk = rInStm.ReadIf( '}' );
+ ReadChar( '}' );
if( !bOk )
rInStm.Seek( nTokPos );
@@ -141,11 +132,9 @@ void SvIdlParser::ReadModuleElement( SvMetaModule& rModule )
{
tools::SvRef<SvMetaTypeEnum> aEnum( new SvMetaTypeEnum() );
- if( aEnum->ReadSvIdl( rBase, rInStm ) )
- {
- // announce globally
- rBase.GetTypeList().push_back( aEnum );
- }
+ ReadEnum(*aEnum);
+ // announce globally
+ rBase.GetTypeList().push_back( aEnum );
}
else if( rInStm.GetToken().Is( SvHash_item() )
|| rInStm.GetToken().Is( SvHash_struct() ) )
@@ -189,13 +178,18 @@ void SvIdlParser::ReadModuleElement( SvMetaModule& rModule )
// reset error
rBase.SetError( SvIdlError() );
- SvIdlParser aIncludeParser( rBase, aTokStm );
- sal_uInt32 nBeginPos = 0xFFFFFFFF; // can not happen with Tell
- while( nBeginPos != aTokStm.Tell() )
- {
- nBeginPos = aTokStm.Tell();
- aIncludeParser.ReadModuleElement(rModule);
- aTokStm.ReadIfDelimiter();
+ try {
+ SvIdlParser aIncludeParser( rBase, aTokStm );
+ sal_uInt32 nBeginPos = 0xFFFFFFFF; // can not happen with Tell
+ while( nBeginPos != aTokStm.Tell() )
+ {
+ nBeginPos = aTokStm.Tell();
+ aIncludeParser.ReadModuleElement(rModule);
+ aTokStm.ReadIfDelimiter();
+ }
+ } catch (const SvParseException& ex) {
+ rBase.SetError(ex.aError);
+ rBase.WriteError(aTokStm);
}
bOk = aTokStm.GetToken().IsEof();
if( !bOk )
@@ -223,6 +217,81 @@ void SvIdlParser::ReadModuleElement( SvMetaModule& rModule )
}
}
+void SvIdlParser::ReadEnum(SvMetaTypeEnum& rEnum)
+{
+ rInStm.GetToken_Next();
+ rEnum.SetType( MetaTypeType::Enum );
+ rEnum.SetName( ReadIdentifier() );
+
+ ReadChar('{');
+ while( true )
+ {
+ ReadEnumValue( rEnum );
+ if( !rInStm.ReadIfDelimiter() )
+ break;
+ }
+ ReadChar( '}' );
+}
+
+namespace
+{
+ OString getCommonSubPrefix(const OString &rA, const OString &rB)
+ {
+ sal_Int32 nMax = std::min(rA.getLength(), rB.getLength());
+ sal_Int32 nI = 0;
+ while (nI < nMax)
+ {
+ if (rA[nI] != rB[nI])
+ break;
+ ++nI;
+ }
+ return rA.copy(0, nI);
+ }
+}
+void SvIdlParser::ReadEnumValue( SvMetaTypeEnum& rEnum )
+{
+ sal_uInt32 nTokPos = rInStm.Tell();
+
+ tools::SvRef<SvMetaEnumValue> aEnumVal = new SvMetaEnumValue();
+ bool bOk = aEnumVal->ReadSvIdl( rBase, rInStm );
+ if( bOk )
+ {
+ if( rEnum.aEnumValueList.empty() )
+ {
+ // the first
+ rEnum.aPrefix = aEnumVal->GetName();
+ }
+ else
+ {
+ rEnum.aPrefix = getCommonSubPrefix(rEnum.aPrefix, aEnumVal->GetName());
+ }
+ rEnum.aEnumValueList.push_back( aEnumVal );
+ }
+ if( !bOk )
+ rInStm.Seek( nTokPos );
+}
+
+
+
+void SvIdlParser::ReadChar(char cChar)
+{
+ if( !rInStm.ReadIf( cChar ) )
+ throw SvParseException(rInStm, "expected char '" + OString(cChar) + "'");
+}
+
+void SvIdlParser::ReadDelimiter()
+{
+ if( !rInStm.ReadIfDelimiter() )
+ throw SvParseException(rInStm, "expected delimiter");
+}
+
+OString SvIdlParser::ReadIdentifier()
+{
+ SvToken& rTok = rInStm.GetToken_Next();
+ if( !rTok.IsIdentifier() )
+ throw SvParseException("expected identifier", rTok);
+ return rTok.GetString();
+}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
commit f3f533f0c60d90fb723ecf417ce3a20bc38fa6c7
Author: Noel Grandin <noel at peralex.com>
Date: Thu Feb 11 15:41:48 2016 +0200
move module parsing into SvIdlParser class
Change-Id: I99937935a1d41fa5b0ff6c2f5e92bde3b4847e9f
diff --git a/idl/inc/module.hxx b/idl/inc/module.hxx
index ce5f8db..6ac8fcd 100644
--- a/idl/inc/module.hxx
+++ b/idl/inc/module.hxx
@@ -25,22 +25,14 @@
class SvMetaModule : public SvMetaReference
{
- SvRefMemberList<SvMetaClass *> aClassList;
-// browser
- OString aSlotIdFile;
-
- bool bImported : 1;
-protected:
- virtual void ReadAttributesSvIdl( SvIdlDataBase &, SvTokenStream & rInStm ) override;
- virtual void ReadContextSvIdl( SvIdlDataBase &, SvTokenStream & rInStm ) override;
+ bool bImported;
public:
+ SvRefMemberList<SvMetaClass *> aClassList;
SvMetaModule( bool bImported );
bool IsImported() const { return bImported; }
- virtual bool ReadSvIdl( SvIdlDataBase &, SvTokenStream & rInStm ) override;
-
void WriteSfx( SvIdlDataBase & rBase, SvStream & rOutStm );
};
diff --git a/idl/inc/parser.hxx b/idl/inc/parser.hxx
index 97cb3d5..b1f9a67 100644
--- a/idl/inc/parser.hxx
+++ b/idl/inc/parser.hxx
@@ -24,6 +24,7 @@
class SvTokenStream;
class SvIdlDataBase;
+class SvMetaModule;
class SvIdlParser
{
@@ -32,8 +33,9 @@ class SvIdlParser
public:
SvIdlParser( SvIdlDataBase& rBase_, SvTokenStream & rInStrm_) : rBase(rBase_), rInStm(rInStrm_) {}
bool ReadSvIdl( bool bImported, const OUString & rPath );
- bool ReadModuleImport(const OUString & rPath);
-
+ bool ReadModuleHeader(SvMetaModule& rModule);
+ bool ReadModuleBody(SvMetaModule& rModule);
+ void ReadModuleElement( SvMetaModule& rModule );
};
#endif // INCLUDED_IDL_INC_PARSER_HXX
diff --git a/idl/source/objects/module.cxx b/idl/source/objects/module.cxx
index b364ddf..11b31cb 100644
--- a/idl/source/objects/module.cxx
+++ b/idl/source/objects/module.cxx
@@ -33,142 +33,6 @@ SvMetaModule::SvMetaModule( bool bImp )
{
}
-void SvMetaModule::ReadAttributesSvIdl( SvIdlDataBase & rBase,
- SvTokenStream & rInStm )
-{
- SvMetaReference::ReadAttributesSvIdl( rBase, rInStm );
-
- if( ReadStringSvIdl( SvHash_SlotIdFile(), rInStm, aSlotIdFile ) )
- {
- if( !rBase.ReadIdFile( OStringToOUString(aSlotIdFile, RTL_TEXTENCODING_ASCII_US)) )
- {
- throw SvParseException( rInStm, "cannot read file: " + aSlotIdFile );
- }
- }
-}
-
-void SvMetaModule::ReadContextSvIdl( SvIdlDataBase & rBase,
- SvTokenStream & rInStm )
-{
- sal_uInt32 nTokPos = rInStm.Tell();
- if( rInStm.GetToken().Is( SvHash_interface() )
- || rInStm.GetToken().Is( SvHash_shell() ) )
- {
- tools::SvRef<SvMetaClass> aClass( new SvMetaClass() );
- if( aClass->ReadSvIdl( rBase, rInStm ) )
- {
- aClassList.push_back( aClass );
- // announce globally
- rBase.GetClassList().push_back( aClass );
- }
- }
- else if( rInStm.GetToken().Is( SvHash_enum() ) )
- {
- tools::SvRef<SvMetaTypeEnum> aEnum( new SvMetaTypeEnum() );
-
- if( aEnum->ReadSvIdl( rBase, rInStm ) )
- {
- // announce globally
- rBase.GetTypeList().push_back( aEnum );
- }
- }
- else if( rInStm.GetToken().Is( SvHash_item() )
- || rInStm.GetToken().Is( SvHash_struct() ) )
- {
- tools::SvRef<SvMetaType> xItem(new SvMetaType() );
-
- if( xItem->ReadSvIdl( rBase, rInStm ) )
- {
- // announce globally
- rBase.GetTypeList().push_back( xItem );
- }
- }
- else if( rInStm.GetToken().Is( SvHash_include() ) )
- {
- bool bOk = false;
- rInStm.GetToken_Next();
- SvToken& rTok = rInStm.GetToken_Next();
- if( rTok.IsString() )
- {
- OUString aFullName(OStringToOUString(rTok.GetString(), RTL_TEXTENCODING_ASCII_US));
- rBase.StartNewFile( aFullName );
- osl::FileBase::RC searchError = osl::File::searchFileURL(aFullName, rBase.GetPath(), aFullName);
- if( osl::FileBase::E_None != searchError )
- {
- OStringBuffer aStr("cannot find file:");
- aStr.append(OUStringToOString(aFullName, RTL_TEXTENCODING_UTF8));
- throw SvParseException(aStr.makeStringAndClear(), rTok);
- }
- osl::FileBase::getSystemPathFromFileURL( aFullName, aFullName );
- rBase.AddDepFile( aFullName );
- SvTokenStream aTokStm( aFullName );
-
- if( SVSTREAM_OK != aTokStm.GetStream().GetError() )
- {
- OStringBuffer aStr("cannot open file: ");
- aStr.append(OUStringToOString(aFullName, RTL_TEXTENCODING_UTF8));
- throw SvParseException(aStr.makeStringAndClear(), rTok);
- }
- // rescue error from old file
- SvIdlError aOldErr = rBase.GetError();
- // reset error
- rBase.SetError( SvIdlError() );
-
- sal_uInt32 nBeginPos = 0xFFFFFFFF; // can not happen with Tell
- while( nBeginPos != aTokStm.Tell() )
- {
- nBeginPos = aTokStm.Tell();
- ReadContextSvIdl( rBase, aTokStm );
- aTokStm.ReadIfDelimiter();
- }
- bOk = aTokStm.GetToken().IsEof();
- if( !bOk )
- {
- rBase.WriteError( aTokStm );
- }
- // recover error from old file
- rBase.SetError( aOldErr );
- }
- if( !bOk )
- rInStm.Seek( nTokPos );
- }
- else
- {
- tools::SvRef<SvMetaSlot> xSlot( new SvMetaSlot() );
-
- if( xSlot->ReadSvIdl( rBase, rInStm ) )
- {
- if( xSlot->Test( rInStm ) )
- {
- // announce globally
- rBase.AppendSlot( xSlot );
- }
- }
- }
-}
-
-bool SvMetaModule::ReadSvIdl( SvIdlDataBase & rBase, SvTokenStream & rInStm )
-{
- sal_uInt32 nTokPos = rInStm.Tell();
- SvToken& rTok = rInStm.GetToken_Next();
- bool bOk = rTok.Is( SvHash_module() );
- rInStm.ReadIfDelimiter();
- if( bOk )
- {
- rBase.Push( this ); // onto the context stack
-
- if( ReadNameSvIdl( rInStm ) )
- {
- // set pointer to itself
- bOk = SvMetaObject::ReadSvIdl( rBase, rInStm );
- }
- rBase.GetStack().pop_back(); // remove from stack
- }
- if( !bOk )
- rInStm.Seek( nTokPos );
- return bOk;
-}
-
void SvMetaModule::WriteSfx( SvIdlDataBase & rBase, SvStream & rOutStm )
{
for( sal_uLong n = 0; n < aClassList.size(); n++ )
diff --git a/idl/source/prj/parser.cxx b/idl/source/prj/parser.cxx
index 065c3e2..99a14bc 100644
--- a/idl/source/prj/parser.cxx
+++ b/idl/source/prj/parser.cxx
@@ -29,11 +29,6 @@ bool SvIdlParser::ReadSvIdl( bool bImported, const OUString & rPath )
rBase.SetPath(rPath); // only valid for this iteration
bool bOk = true;
SvToken& rTok = rInStm.GetToken();
- // only one import at the very beginning
- if( rTok.Is( SvHash_import() ) )
- {
- bOk = ReadModuleImport(rPath);
- }
while( bOk )
{
@@ -44,7 +39,7 @@ bool SvIdlParser::ReadSvIdl( bool bImported, const OUString & rPath )
if( rTok.Is( SvHash_module() ) )
{
tools::SvRef<SvMetaModule> aModule = new SvMetaModule( bImported );
- if( aModule->ReadSvIdl( rBase, rInStm ) )
+ if( ReadModuleHeader(*aModule) )
rBase.GetModuleList().push_back( aModule );
else
bOk = false;
@@ -61,29 +56,173 @@ bool SvIdlParser::ReadSvIdl( bool bImported, const OUString & rPath )
return true;
}
-bool SvIdlParser::ReadModuleImport(const OUString & rPath)
+bool SvIdlParser::ReadModuleHeader(SvMetaModule& rModule)
{
- SvToken& rTok = rInStm.GetToken_Next();
+ sal_uInt32 nTokPos = rInStm.Tell();
+ SvToken& rTok = rInStm.GetToken_Next();
+ bool bOk = true;
+
+ rTok = rInStm.GetToken_Next();
+ if( !rTok.IsIdentifier() )
+ {
+ rInStm.Seek( nTokPos );
+ return false;
+ }
+ rBase.Push( &rModule ); // onto the context stack
+ rModule.SetName( rTok.GetString() );
+ bOk = ReadModuleBody(rModule);
+ rBase.GetStack().pop_back(); // remove from stack
+ if( !bOk )
+ rInStm.Seek( nTokPos );
+ return bOk;
+}
+
+bool SvIdlParser::ReadModuleBody(SvMetaModule& rModule)
+{
+ sal_uInt32 nTokPos = rInStm.Tell();
bool bOk = true;
- if( rTok.IsString() )
+ if( rInStm.ReadIf( '[' ) )
{
- OUString aFullName;
- if( osl::FileBase::E_None == osl::File::searchFileURL(
- OStringToOUString(rTok.GetString(), RTL_TEXTENCODING_ASCII_US),
- rPath,
- aFullName) )
+ sal_uInt32 nBeginPos = 0; // can not happen with Tell
+ while( nBeginPos != rInStm.Tell() )
{
- osl::FileBase::getSystemPathFromFileURL( aFullName, aFullName );
- rBase.AddDepFile(aFullName);
- SvTokenStream aTokStm( aFullName );
- SvIdlParser aInputParser(rBase, aTokStm);
- bOk = aInputParser.ReadSvIdl( true, rPath );
+ nBeginPos = rInStm.Tell();
+ OString aSlotIdFile;
+ if( ReadStringSvIdl( SvHash_SlotIdFile(), rInStm, aSlotIdFile ) )
+ {
+ if( !rBase.ReadIdFile( OStringToOUString(aSlotIdFile, RTL_TEXTENCODING_ASCII_US)) )
+ {
+ throw SvParseException( rInStm, "cannot read file: " + aSlotIdFile );
+ }
}
- else
- bOk = false;
+ rInStm.ReadIfDelimiter();
}
- else
- bOk = false;
+ bOk = rInStm.ReadIf( ']' );
+ }
+
+ if( !bOk )
+ {
+ rInStm.Seek( nTokPos );
+ return bOk;
+ }
+
+ if( !rInStm.ReadIf( '{' ) )
+ return bOk;
+
+ sal_uInt32 nBeginPos = 0; // can not happen with Tell
+ while( nBeginPos != rInStm.Tell() )
+ {
+ nBeginPos = rInStm.Tell();
+ ReadModuleElement( rModule );
+ rInStm.ReadIfDelimiter();
+ }
+ bOk = rInStm.ReadIf( '}' );
+
+ if( !bOk )
+ rInStm.Seek( nTokPos );
return bOk;
}
+
+void SvIdlParser::ReadModuleElement( SvMetaModule& rModule )
+{
+ sal_uInt32 nTokPos = rInStm.Tell();
+ if( rInStm.GetToken().Is( SvHash_interface() )
+ || rInStm.GetToken().Is( SvHash_shell() ) )
+ {
+ tools::SvRef<SvMetaClass> aClass( new SvMetaClass() );
+ if( aClass->ReadSvIdl( rBase, rInStm ) )
+ {
+ rModule.aClassList.push_back( aClass );
+ // announce globally
+ rBase.GetClassList().push_back( aClass );
+ }
+ }
+ else if( rInStm.GetToken().Is( SvHash_enum() ) )
+ {
+ tools::SvRef<SvMetaTypeEnum> aEnum( new SvMetaTypeEnum() );
+
+ if( aEnum->ReadSvIdl( rBase, rInStm ) )
+ {
+ // announce globally
+ rBase.GetTypeList().push_back( aEnum );
+ }
+ }
+ else if( rInStm.GetToken().Is( SvHash_item() )
+ || rInStm.GetToken().Is( SvHash_struct() ) )
+ {
+ tools::SvRef<SvMetaType> xItem(new SvMetaType() );
+
+ if( xItem->ReadSvIdl( rBase, rInStm ) )
+ {
+ // announce globally
+ rBase.GetTypeList().push_back( xItem );
+ }
+ }
+ else if( rInStm.GetToken().Is( SvHash_include() ) )
+ {
+ bool bOk = false;
+ rInStm.GetToken_Next();
+ SvToken& rTok = rInStm.GetToken_Next();
+ if( rTok.IsString() )
+ {
+ OUString aFullName(OStringToOUString(rTok.GetString(), RTL_TEXTENCODING_ASCII_US));
+ rBase.StartNewFile( aFullName );
+ osl::FileBase::RC searchError = osl::File::searchFileURL(aFullName, rBase.GetPath(), aFullName);
+ if( osl::FileBase::E_None != searchError )
+ {
+ OStringBuffer aStr("cannot find file:");
+ aStr.append(OUStringToOString(aFullName, RTL_TEXTENCODING_UTF8));
+ throw SvParseException(aStr.makeStringAndClear(), rTok);
+ }
+ osl::FileBase::getSystemPathFromFileURL( aFullName, aFullName );
+ rBase.AddDepFile( aFullName );
+ SvTokenStream aTokStm( aFullName );
+
+ if( SVSTREAM_OK != aTokStm.GetStream().GetError() )
+ {
+ OStringBuffer aStr("cannot open file: ");
+ aStr.append(OUStringToOString(aFullName, RTL_TEXTENCODING_UTF8));
+ throw SvParseException(aStr.makeStringAndClear(), rTok);
+ }
+ // rescue error from old file
+ SvIdlError aOldErr = rBase.GetError();
+ // reset error
+ rBase.SetError( SvIdlError() );
+
+ SvIdlParser aIncludeParser( rBase, aTokStm );
+ sal_uInt32 nBeginPos = 0xFFFFFFFF; // can not happen with Tell
+ while( nBeginPos != aTokStm.Tell() )
+ {
+ nBeginPos = aTokStm.Tell();
+ aIncludeParser.ReadModuleElement(rModule);
+ aTokStm.ReadIfDelimiter();
+ }
+ bOk = aTokStm.GetToken().IsEof();
+ if( !bOk )
+ {
+ rBase.WriteError( aTokStm );
+ }
+ // recover error from old file
+ rBase.SetError( aOldErr );
+ }
+ if( !bOk )
+ rInStm.Seek( nTokPos );
+ }
+ else
+ {
+ tools::SvRef<SvMetaSlot> xSlot( new SvMetaSlot() );
+
+ if( xSlot->ReadSvIdl( rBase, rInStm ) )
+ {
+ if( xSlot->Test( rInStm ) )
+ {
+ // announce globally
+ rBase.AppendSlot( xSlot );
+ }
+ }
+ }
+}
+
+
+
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
commit e60296840bf9da3f61a3cce02e1369e4315354b3
Author: Noel Grandin <noel at peralex.com>
Date: Thu Feb 11 15:19:50 2016 +0200
move parsing of "import" into own method
Change-Id: Ib3b3fb6fea52b846ada6fb92478ae8f9f769a665
diff --git a/idl/inc/parser.hxx b/idl/inc/parser.hxx
index 8a15bb4..97cb3d5 100644
--- a/idl/inc/parser.hxx
+++ b/idl/inc/parser.hxx
@@ -32,6 +32,7 @@ class SvIdlParser
public:
SvIdlParser( SvIdlDataBase& rBase_, SvTokenStream & rInStrm_) : rBase(rBase_), rInStm(rInStrm_) {}
bool ReadSvIdl( bool bImported, const OUString & rPath );
+ bool ReadModuleImport(const OUString & rPath);
};
diff --git a/idl/source/prj/parser.cxx b/idl/source/prj/parser.cxx
index 34820f2..065c3e2 100644
--- a/idl/source/prj/parser.cxx
+++ b/idl/source/prj/parser.cxx
@@ -32,26 +32,7 @@ bool SvIdlParser::ReadSvIdl( bool bImported, const OUString & rPath )
// only one import at the very beginning
if( rTok.Is( SvHash_import() ) )
{
- rTok = rInStm.GetToken_Next();
- if( rTok.IsString() )
- {
- OUString aFullName;
- if( osl::FileBase::E_None == osl::File::searchFileURL(
- OStringToOUString(rTok.GetString(), RTL_TEXTENCODING_ASCII_US),
- rPath,
- aFullName) )
- {
- osl::FileBase::getSystemPathFromFileURL( aFullName, aFullName );
- rBase.AddDepFile(aFullName);
- SvTokenStream aTokStm( aFullName );
- SvIdlParser aInputParser(rBase, aTokStm);
- bOk = aInputParser.ReadSvIdl( true, rPath );
- }
- else
- bOk = false;
- }
- else
- bOk = false;
+ bOk = ReadModuleImport(rPath);
}
while( bOk )
@@ -80,4 +61,29 @@ bool SvIdlParser::ReadSvIdl( bool bImported, const OUString & rPath )
return true;
}
+bool SvIdlParser::ReadModuleImport(const OUString & rPath)
+{
+ SvToken& rTok = rInStm.GetToken_Next();
+ bool bOk = true;
+ if( rTok.IsString() )
+ {
+ OUString aFullName;
+ if( osl::FileBase::E_None == osl::File::searchFileURL(
+ OStringToOUString(rTok.GetString(), RTL_TEXTENCODING_ASCII_US),
+ rPath,
+ aFullName) )
+ {
+ osl::FileBase::getSystemPathFromFileURL( aFullName, aFullName );
+ rBase.AddDepFile(aFullName);
+ SvTokenStream aTokStm( aFullName );
+ SvIdlParser aInputParser(rBase, aTokStm);
+ bOk = aInputParser.ReadSvIdl( true, rPath );
+ }
+ else
+ bOk = false;
+ }
+ else
+ bOk = false;
+ return bOk;
+}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
commit 62225eeb9832b982023dca6c5ce2bc64ac92728f
Author: Noel Grandin <noel at peralex.com>
Date: Thu Feb 11 14:50:15 2016 +0200
bIsModified in SvMetaModule is unused
Change-Id: Idc6effddce9923f0d48a111b2a04458efc11ebf9
diff --git a/idl/inc/module.hxx b/idl/inc/module.hxx
index 8973565..ce5f8db 100644
--- a/idl/inc/module.hxx
+++ b/idl/inc/module.hxx
@@ -29,8 +29,7 @@ class SvMetaModule : public SvMetaReference
// browser
OString aSlotIdFile;
- bool bImported : 1,
- bIsModified : 1;
+ bool bImported : 1;
protected:
virtual void ReadAttributesSvIdl( SvIdlDataBase &, SvTokenStream & rInStm ) override;
virtual void ReadContextSvIdl( SvIdlDataBase &, SvTokenStream & rInStm ) override;
diff --git a/idl/source/objects/module.cxx b/idl/source/objects/module.cxx
index 06614ed..b364ddf 100644
--- a/idl/source/objects/module.cxx
+++ b/idl/source/objects/module.cxx
@@ -29,7 +29,7 @@
SvMetaModule::SvMetaModule( bool bImp )
- : bImported( bImp ), bIsModified( false )
+ : bImported( bImp )
{
}
@@ -149,8 +149,6 @@ void SvMetaModule::ReadContextSvIdl( SvIdlDataBase & rBase,
bool SvMetaModule::ReadSvIdl( SvIdlDataBase & rBase, SvTokenStream & rInStm )
{
- bIsModified = true; // up to now always when compiler running
-
sal_uInt32 nTokPos = rInStm.Tell();
SvToken& rTok = rInStm.GetToken_Next();
bool bOk = rTok.Is( SvHash_module() );
commit 0c6d6aa47ea0a7260b4bc01519e51ef78e97f459
Author: Noel Grandin <noel at peralex.com>
Date: Thu Feb 11 14:49:27 2016 +0200
rename Read()->ReadIf() and ReadDelimiter()->ReadIfDelimiter()
Change-Id: I589dc0280c5bb587aa024b0f1dcf0b623d719aa4
diff --git a/idl/inc/lex.hxx b/idl/inc/lex.hxx
index bc0feea..a9869de 100644
--- a/idl/inc/lex.hxx
+++ b/idl/inc/lex.hxx
@@ -186,7 +186,7 @@ public:
SvToken& GetToken() const { return *(*pCurToken).get(); }
- bool Read( char cChar )
+ bool ReadIf( char cChar )
{
if( (*pCurToken)->IsChar()
&& cChar == (*pCurToken)->GetChar() )
@@ -198,7 +198,7 @@ public:
return false;
}
- void ReadDelimiter()
+ void ReadIfDelimiter()
{
if( (*pCurToken)->IsChar()
&& (';' == (*pCurToken)->GetChar()
diff --git a/idl/source/objects/basobj.cxx b/idl/source/objects/basobj.cxx
index 62632a7..835ae2d 100644
--- a/idl/source/objects/basobj.cxx
+++ b/idl/source/objects/basobj.cxx
@@ -100,7 +100,7 @@ void SvMetaObject::DoReadContextSvIdl( SvIdlDataBase & rBase,
{
nBeginPos = rInStm.Tell();
ReadContextSvIdl( rBase, rInStm );
- rInStm.ReadDelimiter();
+ rInStm.ReadIfDelimiter();
}
}
@@ -117,24 +117,24 @@ bool SvMetaObject::ReadSvIdl( SvIdlDataBase & rBase, SvTokenStream & rInStm )
{
sal_uInt32 nTokPos = rInStm.Tell();
bool bOk = true;
- if( rInStm.Read( '[' ) )
+ if( rInStm.ReadIf( '[' ) )
{
sal_uInt32 nBeginPos = 0; // can not happen with Tell
while( nBeginPos != rInStm.Tell() )
{
nBeginPos = rInStm.Tell();
ReadAttributesSvIdl( rBase, rInStm );
- rInStm.ReadDelimiter();
+ rInStm.ReadIfDelimiter();
}
- bOk = rInStm.Read( ']' );
+ bOk = rInStm.ReadIf( ']' );
}
if( bOk )
{
- if( rInStm.Read( '{' ) )
+ if( rInStm.ReadIf( '{' ) )
{
DoReadContextSvIdl( rBase, rInStm );
- bOk = rInStm.Read( '}' );
+ bOk = rInStm.ReadIf( '}' );
}
}
diff --git a/idl/source/objects/bastype.cxx b/idl/source/objects/bastype.cxx
index d200f68..08c59f9 100644
--- a/idl/source/objects/bastype.cxx
+++ b/idl/source/objects/bastype.cxx
@@ -36,8 +36,8 @@ bool SvBOOL::ReadSvIdl( SvStringHashEntry * pName, SvTokenStream & rInStm )
if( rTok.Is( pName ) )
{
bool bOk = true;
- bool bBracket = rInStm.Read( '(' );
- if( bBracket || rInStm.Read( '=' ) )
+ bool bBracket = rInStm.ReadIf( '(' );
+ if( bBracket || rInStm.ReadIf( '=' ) )
{
rTok = rInStm.GetToken();
if( rTok.IsBool() )
@@ -47,7 +47,7 @@ bool SvBOOL::ReadSvIdl( SvStringHashEntry * pName, SvTokenStream & rInStm )
rInStm.GetToken_Next();
}
if( bOk && bBracket )
- bOk = rInStm.Read( ')' );
+ bOk = rInStm.ReadIf( ')' );
}
else
*this = true; //default action set to TRUE
@@ -66,8 +66,8 @@ bool SvIdentifier::ReadSvIdl( SvStringHashEntry * pName, SvTokenStream & rInStm
if( rTok.Is( pName ) )
{
bool bOk = true;
- bool bBracket = rInStm.Read( '(' );
- if( bBracket || rInStm.Read( '=' ) )
+ bool bBracket = rInStm.ReadIf( '(' );
+ if( bBracket || rInStm.ReadIf( '=' ) )
{
rTok = rInStm.GetToken();
if( rTok.IsIdentifier() )
@@ -76,7 +76,7 @@ bool SvIdentifier::ReadSvIdl( SvStringHashEntry * pName, SvTokenStream & rInStm
rInStm.GetToken_Next();
}
if( bOk && bBracket )
- bOk = rInStm.Read( ')' );
+ bOk = rInStm.ReadIf( ')' );
}
if( bOk )
return true;
@@ -111,8 +111,8 @@ bool ReadStringSvIdl( SvStringHashEntry * pName, SvTokenStream & rInStm, OString
if( rTok.Is( pName ) )
{
bool bOk = true;
- bool bBracket = rInStm.Read( '(' );
- if( bBracket || rInStm.Read( '=' ) )
+ bool bBracket = rInStm.ReadIf( '(' );
+ if( bBracket || rInStm.ReadIf( '=' ) )
{
rTok = rInStm.GetToken();
if( rTok.IsString() )
@@ -121,7 +121,7 @@ bool ReadStringSvIdl( SvStringHashEntry * pName, SvTokenStream & rInStm, OString
rInStm.GetToken_Next();
}
if( bOk && bBracket )
- bOk = rInStm.Read( ')' );
+ bOk = rInStm.ReadIf( ')' );
}
if( bOk )
return true;
diff --git a/idl/source/objects/module.cxx b/idl/source/objects/module.cxx
index 2062f05..06614ed 100644
--- a/idl/source/objects/module.cxx
+++ b/idl/source/objects/module.cxx
@@ -119,7 +119,7 @@ void SvMetaModule::ReadContextSvIdl( SvIdlDataBase & rBase,
{
nBeginPos = aTokStm.Tell();
ReadContextSvIdl( rBase, aTokStm );
- aTokStm.ReadDelimiter();
+ aTokStm.ReadIfDelimiter();
}
bOk = aTokStm.GetToken().IsEof();
if( !bOk )
@@ -154,7 +154,7 @@ bool SvMetaModule::ReadSvIdl( SvIdlDataBase & rBase, SvTokenStream & rInStm )
sal_uInt32 nTokPos = rInStm.Tell();
SvToken& rTok = rInStm.GetToken_Next();
bool bOk = rTok.Is( SvHash_module() );
- rInStm.ReadDelimiter();
+ rInStm.ReadIfDelimiter();
if( bOk )
{
rBase.Push( this ); // onto the context stack
diff --git a/idl/source/objects/object.cxx b/idl/source/objects/object.cxx
index 396eeda..c5c3589 100644
--- a/idl/source/objects/object.cxx
+++ b/idl/source/objects/object.cxx
@@ -106,7 +106,7 @@ bool SvMetaClass::ReadSvIdl( SvIdlDataBase & rBase, SvTokenStream & rInStm )
(GetMetaTypeType() == MetaTypeType::Interface || GetMetaTypeType() == MetaTypeType::Shell) )
{
bool bOk = true;
- if( rInStm.Read( ':' ) )
+ if( rInStm.ReadIf( ':' ) )
{
aSuperClass = rBase.ReadKnownClass( rInStm );
bOk = aSuperClass.Is();
diff --git a/idl/source/objects/slot.cxx b/idl/source/objects/slot.cxx
index 60960d2..894d316 100644
--- a/idl/source/objects/slot.cxx
+++ b/idl/source/objects/slot.cxx
@@ -283,7 +283,7 @@ void SvMetaSlot::ReadAttributesSvIdl( SvIdlDataBase & rBase,
SvToken& rTok = rInStm.GetToken_Next();
if( rTok.Is( SvHash_SlotType() ) )
{
- if( rInStm.Read( '=' ) )
+ if( rInStm.ReadIf( '=' ) )
{
aSlotType = rBase.ReadKnownType( rInStm );
if( !aSlotType.Is() )
diff --git a/idl/source/objects/types.cxx b/idl/source/objects/types.cxx
index eb48cf6..d63e8c7 100644
--- a/idl/source/objects/types.cxx
+++ b/idl/source/objects/types.cxx
@@ -322,10 +322,10 @@ bool SvMetaType::ReadMethodArgs( SvIdlDataBase & rBase,
SvTokenStream & rInStm )
{
sal_uInt32 nTokPos = rInStm.Tell();
- if( rInStm.Read( '(' ) )
+ if( rInStm.ReadIf( '(' ) )
{
DoReadContextSvIdl( rBase, rInStm );
- if( rInStm.Read( ')' ) )
+ if( rInStm.ReadIf( ')' ) )
{
SetType( MetaTypeType::Method );
return true;
More information about the Libreoffice-commits
mailing list