Prevent creation 1500000 temporary objects by caching value of CompilationUnit::GetFilename().

Limit access to variables of CompilationUnit

svn path=/trunk/; revision=31709
This commit is contained in:
Hervé Poussineau 2008-01-11 09:09:49 +00:00
parent 4a758fd9fb
commit 8f381d925f
7 changed files with 132 additions and 136 deletions

View file

@ -206,7 +206,7 @@ MingwBackend::CanEnablePreCompiledHeaderSupportForModule ( const Module& module
for ( i = 0; i < compilationUnits.size (); i++ )
{
CompilationUnit& compilationUnit = *compilationUnits[i];
if ( compilationUnit.files.size () != 1 )
if ( compilationUnit.GetFiles ().size () != 1 )
return false;
}
// intentionally make a copy so that we can append more work in
@ -224,7 +224,7 @@ MingwBackend::CanEnablePreCompiledHeaderSupportForModule ( const Module& module
for ( j = 0; j < compilationUnits.size (); j++ )
{
CompilationUnit& compilationUnit = *compilationUnits[j];
if ( compilationUnit.files.size () != 1 )
if ( compilationUnit.GetFiles ().size () != 1 )
return false;
}
}

View file

@ -1,5 +1,6 @@
/*
* Copyright (C) 2005 Casper S. Hornstrup
* 2007-2008 Hervé Poussineau
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@ -342,12 +343,12 @@ string
MingwModuleHandler::GetCompilationUnitDependencies (
const CompilationUnit& compilationUnit ) const
{
if ( compilationUnit.files.size () <= 1 )
if ( compilationUnit.GetFiles ().size () <= 1 )
return "";
vector<string> sourceFiles;
for ( size_t i = 0; i < compilationUnit.files.size (); i++ )
for ( size_t i = 0; i < compilationUnit.GetFiles ().size (); i++ )
{
File& file = *compilationUnit.files[i];
const File& file = *compilationUnit.GetFiles ()[i];
sourceFiles.push_back ( backend->GetFullName ( file.file ) );
}
return v2s ( sourceFiles, 10 );
@ -412,13 +413,12 @@ MingwModuleHandler::GetImportLibraryDependency (
for ( i = 0; i < compilationUnits.size (); i++ )
{
CompilationUnit& compilationUnit = *compilationUnits[i];
const FileLocation *compilationName = compilationUnit.GetFilename ();
const FileLocation *objectFilename = GetObjectFilename ( compilationName, importedModule, NULL );
const FileLocation& compilationName = compilationUnit.GetFilename ();
const FileLocation *objectFilename = GetObjectFilename ( &compilationName, importedModule, NULL );
if ( GetExtension ( *objectFilename ) == ".h" )
dep += ssprintf ( " $(%s_HEADERS)", importedModule.name.c_str () );
else if ( GetExtension ( *objectFilename ) == ".rc" )
dep += ssprintf ( " $(%s_MCHEADERS)", importedModule.name.c_str () );
delete compilationName;
}
}
else
@ -483,10 +483,9 @@ MingwModuleHandler::GetSourceFilenames ( vector<FileLocation>& list,
{
if ( includeGeneratedFiles || !compilationUnits[i]->IsGeneratedFile () )
{
const FileLocation *compilationName = compilationUnits[i]->GetFilename ();
const FileLocation* sourceFileLocation = GetActualSourceFilename ( compilationName );
const FileLocation& compilationName = compilationUnits[i]->GetFilename ();
const FileLocation* sourceFileLocation = GetActualSourceFilename ( &compilationName );
list.push_back ( *sourceFileLocation );
delete compilationName;
delete sourceFileLocation;
}
}
@ -507,10 +506,9 @@ MingwModuleHandler::GetSourceFilenames ( vector<FileLocation>& list,
CompilationUnit& compilationUnit = *compilationUnits[j];
if ( includeGeneratedFiles || !compilationUnit.IsGeneratedFile () )
{
const FileLocation *compilationName = compilationUnit.GetFilename ();
const FileLocation* sourceFileLocation = GetActualSourceFilename ( compilationName );
const FileLocation& compilationName = compilationUnit.GetFilename ();
const FileLocation* sourceFileLocation = GetActualSourceFilename ( &compilationName );
list.push_back ( *sourceFileLocation );
delete compilationName;
delete sourceFileLocation;
}
}
@ -670,10 +668,9 @@ MingwModuleHandler::GetObjectFilenames ()
{
if ( objectFilenames.size () > 0 )
objectFilenames += " ";
const FileLocation *compilationName = compilationUnits[i]->GetFilename ();
const FileLocation *object_file = GetObjectFilename ( compilationName, module, NULL );
const FileLocation& compilationName = compilationUnits[i]->GetFilename ();
const FileLocation *object_file = GetObjectFilename ( &compilationName, module, NULL );
objectFilenames += backend->GetFullName ( *object_file );
delete compilationName;
delete object_file;
}
return objectFilenames;
@ -1021,13 +1018,12 @@ MingwModuleHandler::GenerateSourceMacros (
for ( i = 0; i < compilationUnits.size(); i++ )
{
CompilationUnit& compilationUnit = *compilationUnits[i];
const FileLocation *compilationName = compilationUnit.GetFilename ();
const FileLocation& compilationName = compilationUnit.GetFilename ();
fprintf (
fMakefile,
"%s%s",
( i%10 == 9 ? " \\\n\t" : " " ),
backend->GetFullName ( *compilationName ).c_str () );
delete compilationName;
backend->GetFullName ( compilationName ).c_str () );
}
fprintf ( fMakefile, "\n" );
}
@ -1062,13 +1058,12 @@ MingwModuleHandler::GenerateSourceMacros (
GetModuleSpecificCompilationUnits ( sourceCompilationUnits );
for ( i = 0; i < sourceCompilationUnits.size (); i++ )
{
const FileLocation *compilationName = sourceCompilationUnits[i]->GetFilename ();
const FileLocation& compilationName = sourceCompilationUnits[i]->GetFilename ();
fprintf (
fMakefile,
"%s += %s\n",
sourcesMacro.c_str(),
backend->GetFullName ( *compilationName ).c_str () );
delete compilationName;
backend->GetFullName ( compilationName ).c_str () );
}
CleanupCompilationUnitVector ( sourceCompilationUnits );
}
@ -1091,15 +1086,14 @@ MingwModuleHandler::GenerateObjectMacros (
CompilationUnit& compilationUnit = *compilationUnits[i];
if ( compilationUnit.IsFirstFile () )
{
const FileLocation *compilationName = compilationUnit.GetFilename ();
const FileLocation *object_file = GetObjectFilename ( compilationName, module, NULL );
const FileLocation& compilationName = compilationUnit.GetFilename ();
const FileLocation *object_file = GetObjectFilename ( &compilationName, module, NULL );
fprintf ( fMakefile,
"%s := %s $(%s)\n",
objectsMacro.c_str(),
backend->GetFullName ( *object_file ).c_str (),
objectsMacro.c_str() );
delete object_file;
delete compilationName;
}
}
fprintf (
@ -1112,13 +1106,13 @@ MingwModuleHandler::GenerateObjectMacros (
CompilationUnit& compilationUnit = *compilationUnits[i];
if ( !compilationUnit.IsFirstFile () )
{
const FileLocation *compilationName = compilationUnit.GetFilename ();
const FileLocation *objectFilename = GetObjectFilename ( compilationName, module, NULL );
const FileLocation& compilationName = compilationUnit.GetFilename ();
const FileLocation *objectFilename = GetObjectFilename ( &compilationName, module, NULL );
if ( GetExtension ( *objectFilename ) == ".h" )
headers.push_back ( objectFilename );
else if ( GetExtension ( *objectFilename ) == ".rc" )
{
const FileLocation *headerFilename = GetMcHeaderFilename ( compilationUnit.GetFilename () );
const FileLocation *headerFilename = GetMcHeaderFilename ( &compilationUnit.GetFilename () );
mcheaders.push_back ( headerFilename );
mcresources.push_back ( objectFilename );
}
@ -1131,7 +1125,6 @@ MingwModuleHandler::GenerateObjectMacros (
backend->GetFullName ( *objectFilename ).c_str () );
delete objectFilename;
}
delete compilationName;
}
}
fprintf ( fMakefile, "\n" );
@ -1223,15 +1216,14 @@ MingwModuleHandler::GenerateObjectMacros (
GetModuleSpecificCompilationUnits ( sourceCompilationUnits );
for ( i = 0; i < sourceCompilationUnits.size (); i++ )
{
const FileLocation *compilationName = sourceCompilationUnits[i]->GetFilename ();
const FileLocation *object_file = GetObjectFilename ( compilationName, module, NULL );
const FileLocation& compilationName = sourceCompilationUnits[i]->GetFilename ();
const FileLocation *object_file = GetObjectFilename ( &compilationName, module, NULL );
fprintf (
fMakefile,
"%s += %s\n",
objectsMacro.c_str(),
backend->GetFullName ( *object_file ).c_str () );
delete object_file;
delete compilationName;
}
CleanupCompilationUnitVector ( sourceCompilationUnits );
}
@ -1487,17 +1479,17 @@ MingwModuleHandler::GenerateWidlCommandsServer (
const CompilationUnit& compilationUnit,
const string& widlflagsMacro )
{
const FileLocation* sourceFile = compilationUnit.GetFilename ();
string dependencies = backend->GetFullName ( *sourceFile );
const FileLocation& sourceFile = compilationUnit.GetFilename ();
string dependencies = backend->GetFullName ( sourceFile );
dependencies += " " + NormalizeFilename ( module.xmlbuildFile );
string basename = GetBasename ( sourceFile->name );
string basename = GetBasename ( sourceFile.name );
const FileLocation *generatedHeaderFilename = GetRpcServerHeaderFilename ( sourceFile );
const FileLocation *generatedHeaderFilename = GetRpcServerHeaderFilename ( &sourceFile );
CLEAN_FILE ( *generatedHeaderFilename );
FileLocation generatedServerFilename ( IntermediateDirectory,
sourceFile->relative_path,
sourceFile.relative_path,
basename + "_s.c" );
CLEAN_FILE ( generatedServerFilename );
@ -1515,10 +1507,9 @@ MingwModuleHandler::GenerateWidlCommandsServer (
widlflagsMacro.c_str (),
backend->GetFullName ( *generatedHeaderFilename ).c_str (),
backend->GetFullName ( generatedServerFilename ).c_str (),
backend->GetFullName ( *sourceFile ).c_str () );
backend->GetFullName ( sourceFile ).c_str () );
delete generatedHeaderFilename;
delete sourceFile;
}
/* caller needs to delete the returned object */
@ -1550,14 +1541,14 @@ MingwModuleHandler::GenerateWidlCommandsEmbeddedTypeLib (
const CompilationUnit& compilationUnit,
const string& widlflagsMacro )
{
const FileLocation* sourceFile = compilationUnit.GetFilename ();
string dependencies = backend->GetFullName ( *sourceFile );
const FileLocation& sourceFile = compilationUnit.GetFilename ();
string dependencies = backend->GetFullName ( sourceFile );
dependencies += " " + NormalizeFilename ( module.xmlbuildFile );
string basename = GetBasename ( sourceFile->name );
string basename = GetBasename ( sourceFile.name );
FileLocation EmbeddedTypeLibFilename ( IntermediateDirectory,
sourceFile->relative_path,
sourceFile.relative_path,
basename + ".tlb" );
fprintf ( fMakefile,
@ -1572,9 +1563,7 @@ MingwModuleHandler::GenerateWidlCommandsEmbeddedTypeLib (
GetWidlFlags ( compilationUnit ).c_str (),
widlflagsMacro.c_str (),
backend->GetFullName ( EmbeddedTypeLibFilename ).c_str(),
backend->GetFullName ( *sourceFile ).c_str () );
delete sourceFile;
backend->GetFullName ( sourceFile ).c_str () );
}
void
@ -1582,17 +1571,17 @@ MingwModuleHandler::GenerateWidlCommandsClient (
const CompilationUnit& compilationUnit,
const string& widlflagsMacro )
{
const FileLocation* sourceFile = compilationUnit.GetFilename ();
string dependencies = backend->GetFullName ( *sourceFile );
const FileLocation& sourceFile = compilationUnit.GetFilename ();
string dependencies = backend->GetFullName ( sourceFile );
dependencies += " " + NormalizeFilename ( module.xmlbuildFile );
string basename = GetBasename ( sourceFile->name );
string basename = GetBasename ( sourceFile.name );
const FileLocation *generatedHeaderFilename = GetRpcClientHeaderFilename ( sourceFile );
const FileLocation *generatedHeaderFilename = GetRpcClientHeaderFilename ( &sourceFile );
CLEAN_FILE ( *generatedHeaderFilename );
FileLocation generatedClientFilename ( IntermediateDirectory,
sourceFile->relative_path,
sourceFile.relative_path,
basename + "_c.c" );
CLEAN_FILE ( generatedClientFilename );
@ -1610,10 +1599,9 @@ MingwModuleHandler::GenerateWidlCommandsClient (
widlflagsMacro.c_str (),
backend->GetFullName ( *generatedHeaderFilename ).c_str (),
backend->GetFullName ( generatedClientFilename ).c_str (),
backend->GetFullName ( *sourceFile ).c_str () );
backend->GetFullName ( sourceFile ).c_str () );
delete generatedHeaderFilename;
delete sourceFile;
}
void
@ -1621,13 +1609,13 @@ MingwModuleHandler::GenerateWidlCommandsIdlHeader (
const CompilationUnit& compilationUnit,
const string& widlflagsMacro )
{
const FileLocation* sourceFile = compilationUnit.GetFilename ();
string dependencies = backend->GetFullName ( *sourceFile );
const FileLocation& sourceFile = compilationUnit.GetFilename ();
string dependencies = backend->GetFullName ( sourceFile );
dependencies += " " + NormalizeFilename ( module.xmlbuildFile );
string basename = GetBasename ( sourceFile->name );
string basename = GetBasename ( sourceFile.name );
const FileLocation *generatedHeader = GetIdlHeaderFilename ( sourceFile );
const FileLocation *generatedHeader = GetIdlHeaderFilename ( &sourceFile );
CLEAN_FILE ( *generatedHeader );
fprintf ( fMakefile,
@ -1642,10 +1630,9 @@ MingwModuleHandler::GenerateWidlCommandsIdlHeader (
GetWidlFlags ( compilationUnit ).c_str (),
widlflagsMacro.c_str (),
backend->GetFullName ( *generatedHeader ).c_str (),
backend->GetFullName ( *sourceFile ).c_str () );
backend->GetFullName ( sourceFile ).c_str () );
delete generatedHeader;
delete sourceFile;
}
void
@ -1678,11 +1665,11 @@ MingwModuleHandler::GenerateCommands (
const string& windresflagsMacro,
const string& widlflagsMacro )
{
const FileLocation* sourceFile = compilationUnit.GetFilename ();
string extension = GetExtension ( *sourceFile );
const FileLocation& sourceFile = compilationUnit.GetFilename ();
string extension = GetExtension ( sourceFile );
if ( extension == ".c" || extension == ".C" )
{
GenerateGccCommand ( sourceFile,
GenerateGccCommand ( &sourceFile,
GetCompilationUnitDependencies ( compilationUnit ) + extraDependencies,
cc,
cflagsMacro );
@ -1691,35 +1678,35 @@ MingwModuleHandler::GenerateCommands (
extension == ".cpp" || extension == ".CPP" ||
extension == ".cxx" || extension == ".CXX" )
{
GenerateGccCommand ( sourceFile,
GenerateGccCommand ( &sourceFile,
GetCompilationUnitDependencies ( compilationUnit ) + extraDependencies,
cppc,
cflagsMacro );
}
else if ( extension == ".s" || extension == ".S" )
{
GenerateGccAssemblerCommand ( sourceFile,
GenerateGccAssemblerCommand ( &sourceFile,
cc,
cflagsMacro );
}
else if ( extension == ".asm" || extension == ".ASM" )
{
GenerateNasmCommand ( sourceFile,
GenerateNasmCommand ( &sourceFile,
nasmflagsMacro );
}
else if ( extension == ".rc" || extension == ".RC" )
{
GenerateWindresCommand ( sourceFile,
GenerateWindresCommand ( &sourceFile,
windresflagsMacro );
}
else if ( extension == ".mc" || extension == ".MC" )
{
GenerateWmcCommands ( sourceFile );
GenerateWmcCommands ( &sourceFile );
}
else if ( extension == ".spec" || extension == ".SPEC" )
{
GenerateWinebuildCommands ( sourceFile );
GenerateGccCommand ( sourceFile,
GenerateWinebuildCommands ( &sourceFile );
GenerateGccCommand ( &sourceFile,
extraDependencies,
cc,
cflagsMacro );
@ -1730,8 +1717,8 @@ MingwModuleHandler::GenerateCommands (
widlflagsMacro );
if ( (module.type == RpcServer) || (module.type == RpcClient) )
{
GenerateGccCommand ( sourceFile,
GetExtraDependencies ( sourceFile ),
GenerateGccCommand ( &sourceFile,
GetExtraDependencies ( &sourceFile ),
cc,
cflagsMacro );
}
@ -1742,10 +1729,8 @@ MingwModuleHandler::GenerateCommands (
__LINE__,
"Unsupported filename extension '%s' in file '%s'",
extension.c_str (),
backend->GetFullName ( *sourceFile ).c_str () );
backend->GetFullName ( sourceFile ).c_str () );
}
delete sourceFile;
}
void
@ -1833,11 +1818,10 @@ MingwModuleHandler::GetObjectsVector ( const IfableData& data,
for ( size_t i = 0; i < data.compilationUnits.size (); i++ )
{
CompilationUnit& compilationUnit = *data.compilationUnits[i];
const FileLocation *compilationName = compilationUnit.GetFilename ();
const FileLocation *object_file = GetObjectFilename ( compilationName, module, NULL );
const FileLocation& compilationName = compilationUnit.GetFilename ();
const FileLocation *object_file = GetObjectFilename ( &compilationName, module, NULL );
objectFiles.push_back ( *object_file );
delete object_file;
delete compilationName;
}
}
@ -2023,13 +2007,12 @@ MingwModuleHandler::GenerateObjectFileTargets (
for ( i = 0; i < compilationUnits.size (); i++ )
{
CompilationUnit& compilationUnit = *compilationUnits[i];
const FileLocation *compilationName = compilationUnit.GetFilename ();
const FileLocation *objectFilename = GetObjectFilename ( compilationName, module, NULL );
const FileLocation& compilationName = compilationUnit.GetFilename ();
const FileLocation *objectFilename = GetObjectFilename ( &compilationName, module, NULL );
if ( GetExtension ( *objectFilename ) == ".h" )
moduleDependencies += ssprintf ( " $(%s_HEADERS)", module.name.c_str () );
else if ( GetExtension ( *objectFilename ) == ".rc" )
moduleDependencies += ssprintf ( " $(%s_RESOURCES)", module.name.c_str () );
delete compilationName;
delete objectFilename;
}
@ -2257,31 +2240,30 @@ MingwModuleHandler::GetRpcHeaderDependencies (
for ( size_t j = 0; j < library.importedModule->non_if_data.compilationUnits.size (); j++ )
{
CompilationUnit& compilationUnit = *library.importedModule->non_if_data.compilationUnits[j];
const FileLocation* sourceFile = compilationUnit.GetFilename ();
string extension = GetExtension ( *sourceFile );
const FileLocation& sourceFile = compilationUnit.GetFilename ();
string extension = GetExtension ( sourceFile );
if ( extension == ".idl" || extension == ".IDL" )
{
string basename = GetBasename ( sourceFile->name );
string basename = GetBasename ( sourceFile.name );
if ( library.importedModule->type == RpcServer )
{
const FileLocation *header = GetRpcServerHeaderFilename ( sourceFile );
const FileLocation *header = GetRpcServerHeaderFilename ( &sourceFile );
dependencies.push_back ( *header );
delete header;
}
if ( library.importedModule->type == RpcClient )
{
const FileLocation *header = GetRpcClientHeaderFilename ( sourceFile );
const FileLocation *header = GetRpcClientHeaderFilename ( &sourceFile );
dependencies.push_back ( *header );
delete header;
}
if ( library.importedModule->type == IdlHeader )
{
const FileLocation *header = GetIdlHeaderFilename ( sourceFile );
const FileLocation *header = GetIdlHeaderFilename ( &sourceFile );
dependencies.push_back ( *header );
delete header;
}
}
delete sourceFile;
}
}
}
@ -2319,11 +2301,10 @@ MingwModuleHandler::GenerateOtherMacros ()
for ( size_t i = 0; i < compilationUnits.size (); i++ )
{
CompilationUnit& compilationUnit = *compilationUnits[i];
const FileLocation* sourceFile = compilationUnit.GetFilename ();
string extension = GetExtension ( *sourceFile );
const FileLocation& sourceFile = compilationUnit.GetFilename ();
string extension = GetExtension ( sourceFile );
if ( extension == ".spec" || extension == ".SPEC" )
GetSpecObjectDependencies ( s, sourceFile );
delete sourceFile;
GetSpecObjectDependencies ( s, &sourceFile );
}
}
if ( s.size () > 0 )
@ -2573,14 +2554,13 @@ MingwModuleHandler::GetDefaultDependencies (
for ( size_t j = 0; j < m.non_if_data.compilationUnits.size (); j++ )
{
CompilationUnit& compilationUnit = *m.non_if_data.compilationUnits[j];
const FileLocation* sourceFile = compilationUnit.GetFilename ();
string extension = GetExtension ( *sourceFile );
const FileLocation& sourceFile = compilationUnit.GetFilename ();
string extension = GetExtension ( sourceFile );
if (extension == ".mc" || extension == ".MC" )
{
string dependency = ssprintf ( " $(%s_MCHEADERS)", m.name.c_str () );
dependencies.push_back ( dependency );
}
delete sourceFile;
}
}
}
@ -2749,17 +2729,16 @@ MingwModuleHandler::GetDefinitionDependencies (
const vector<CompilationUnit*>& compilationUnits = module.non_if_data.compilationUnits;
for ( size_t i = 0; i < compilationUnits.size (); i++ )
{
CompilationUnit& compilationUnit = *compilationUnits[i];
const FileLocation* sourceFile = compilationUnit.GetFilename ();
string extension = GetExtension ( *sourceFile );
const CompilationUnit& compilationUnit = *compilationUnits[i];
const FileLocation& sourceFile = compilationUnit.GetFilename ();
string extension = GetExtension ( sourceFile );
if ( extension == ".spec" || extension == ".SPEC" )
GetSpecObjectDependencies ( dependencies, sourceFile );
GetSpecObjectDependencies ( dependencies, &sourceFile );
if ( extension == ".idl" || extension == ".IDL" )
{
if ( ( module.type == RpcServer ) || ( module.type == RpcClient ) )
GetWidlObjectDependencies ( dependencies, sourceFile );
GetWidlObjectDependencies ( dependencies, &sourceFile );
}
delete sourceFile;
}
}

View file

@ -23,12 +23,15 @@
using std::string;
using std::vector;
CompilationUnit::CompilationUnit ( File* file )
CompilationUnit::CompilationUnit ( const File* file )
: project(NULL),
module(NULL),
node(NULL)
{
local_name = file->file.name;
default_name = new FileLocation ( IntermediateDirectory,
"",
file->file.name );
name = file->file.relative_path + sSep + file->file.name;
files.push_back ( file );
}
@ -42,7 +45,11 @@ CompilationUnit::CompilationUnit ( const Project* project,
{
const XMLAttribute* att = node->GetAttribute ( "name", true );
assert(att);
local_name = att->value;
default_name = new FileLocation ( IntermediateDirectory,
module ? module->output->relative_path : "",
att->value,
node );
name = module->output->relative_path + cSep + att->value;
}
@ -58,7 +65,7 @@ CompilationUnit::ProcessXML ()
{
size_t i;
for ( i = 0; i < files.size (); i++ )
files[i]->ProcessXML ();
const_cast<File*> ( files[i] )->ProcessXML ();
}
bool
@ -66,7 +73,7 @@ CompilationUnit::IsGeneratedFile () const
{
if ( files.size () != 1 )
return false;
File* file = files[0];
const File* file = files[0];
string extension = GetExtension ( file->file );
return ( extension == ".spec" || extension == ".SPEC" || extension == ".mc" || extension == ".MC");
}
@ -77,7 +84,7 @@ CompilationUnit::HasFileWithExtension ( const std::string& extension ) const
size_t i;
for ( i = 0; i < files.size (); i++ )
{
File& file = *files[i];
const File& file = *files[i];
string fileExtension = GetExtension ( file.file );
if ( !stricmp ( fileExtension.c_str (), extension.c_str () ) )
return true;
@ -90,31 +97,39 @@ CompilationUnit::IsFirstFile () const
{
if ( files.size () == 0 || files.size () > 1 )
return false;
File* file = files[0];
const File* file = files[0];
return file->first;
}
const FileLocation*
const FileLocation&
CompilationUnit::GetFilename () const
{
if ( files.size () == 0 || files.size () > 1 )
{
return new FileLocation ( IntermediateDirectory,
module ? module->output->relative_path : "",
local_name,
node );
}
return *default_name;
File* file = files[0];
return new FileLocation ( file->file );
const File* file = files[0];
return file->file;
}
std::string
const std::string&
CompilationUnit::GetSwitches () const
{
static const std::string empty_string = std::string("");
if ( files.size () == 0 || files.size () > 1 )
return "";
File* file = files[0];
return empty_string;
const File* file = files[0];
return file->switches;
}
void
CompilationUnit::AddFile ( const File * file )
{
files.push_back ( file );
}
const std::vector<const File*>
CompilationUnit::GetFiles () const
{
return files;
}

View file

@ -55,7 +55,7 @@ CompilationUnitSupportCode::GenerateForModule ( Module& module,
for ( size_t i = 0; i < module.non_if_data.compilationUnits.size () ; i++ )
{
CompilationUnit& compilationUnit = *module.non_if_data.compilationUnits[i];
if ( compilationUnit.files.size () <= 1 )
if ( compilationUnit.GetFiles ().size () <= 1 )
continue;
WriteCompilationUnitFile ( module, compilationUnit );
}
@ -83,9 +83,9 @@ CompilationUnitSupportCode::WriteCompilationUnitFile ( Module& module,
s = s + sprintf ( s, "/* This file is automatically generated. */\n" );
s = s + sprintf ( s, "#define ONE_COMPILATION_UNIT\n" );
for ( size_t i = 0; i < compilationUnit.files.size () ; i++ )
for ( size_t i = 0; i < compilationUnit.GetFiles ().size () ; i++ )
{
File& file = *compilationUnit.files[i];
const File& file = *compilationUnit.GetFiles ()[i];
s = s + sprintf ( s, "#include <%s/%s>\n", ChangeSeparator ( file.file.relative_path, '\\', '/' ).c_str (), file.file.name.c_str () );
}

View file

@ -585,7 +585,7 @@ Module::ProcessXMLSubElement ( const XMLElement& e,
switches,
false );
if ( parseContext.compilationUnit )
parseContext.compilationUnit->files.push_back ( pFile );
parseContext.compilationUnit->AddFile ( pFile );
else
{
CompilationUnit* pCompilationUnit = new CompilationUnit ( pFile );

View file

@ -895,13 +895,9 @@ private:
class CompilationUnit
{
public:
const Project* project;
const Module* module;
const XMLElement* node;
std::string name;
std::vector<File*> files;
CompilationUnit ( File* file );
CompilationUnit ( const File* file );
CompilationUnit ( const Project* project,
const Module* module,
const XMLElement* node );
@ -910,10 +906,16 @@ public:
bool IsGeneratedFile () const;
bool HasFileWithExtension ( const std::string& extension ) const;
bool IsFirstFile () const;
const FileLocation* GetFilename () const;
std::string GetSwitches () const;
const FileLocation& GetFilename () const;
const std::string& GetSwitches () const;
void AddFile ( const File * file );
const std::vector<const File*> GetFiles () const;
private:
std::string local_name;
const Project* project;
const Module* module;
const XMLElement* node;
std::vector<const File*> files;
FileLocation *default_name;
};

View file

@ -307,8 +307,8 @@ TestSupportCode::GetSourceFilenames ( string_list& list,
const vector<CompilationUnit*>& compilationUnits = module.non_if_data.compilationUnits;
for ( i = 0; i < compilationUnits.size (); i++ )
{
const FileLocation* sourceFileLocation = compilationUnits[i]->GetFilename ();
string filename = sourceFileLocation->relative_path + sSep + sourceFileLocation->name;
const FileLocation& sourceFileLocation = compilationUnits[i]->GetFilename ();
string filename = sourceFileLocation.relative_path + sSep + sourceFileLocation.name;
if ( !compilationUnits[i]->IsGeneratedFile () && IsTestFile ( filename ) )
list.push_back ( filename );
}
@ -327,8 +327,8 @@ TestSupportCode::GetSourceFilenames ( string_list& list,
for ( j = 0; j < compilationUnits.size (); j++ )
{
CompilationUnit& compilationUnit = *compilationUnits[j];
const FileLocation* sourceFileLocation = compilationUnits[j]->GetFilename ();
string filename = sourceFileLocation->relative_path + sSep + sourceFileLocation->name;
const FileLocation& sourceFileLocation = compilationUnits[j]->GetFilename ();
string filename = sourceFileLocation.relative_path + sSep + sourceFileLocation.name;
if ( !compilationUnit.IsGeneratedFile () && IsTestFile ( filename ) )
list.push_back ( filename );
}