Allow at most one main class per module.

Register valid @UIApplicationMain classes with the enclosing module, and diagnose when we see more than one.

Swift SVN r18061
This commit is contained in:
Joe Groff
2014-05-14 04:40:30 +00:00
parent 33e5c2df71
commit 09d8d68099
5 changed files with 70 additions and 1 deletions

View File

@@ -1074,6 +1074,27 @@ bool Module::isBuiltinModule() const {
return this == Ctx.TheBuiltinModule;
}
bool Module::registerMainClass(ClassDecl *mainClass, SourceLoc diagLoc) {
if (mainClass == MainClass)
return false;
if (MainClass) {
// If we already have a main class, and we haven't diagnosed it, do so now.
if (!DiagnosedMultipleMainClasses) {
getASTContext().Diags.diagnose(MainClassDiagLoc,
diag::attr_UIApplicationMain_multiple);
DiagnosedMultipleMainClasses = true;
}
getASTContext().Diags.diagnose(diagLoc,
diag::attr_UIApplicationMain_multiple);
return true;
}
MainClass = mainClass;
MainClassDiagLoc = diagLoc;
return false;
}
bool Module::isSystemModule() const {
if (isStdlibModule())
return true;