public CompilerResults Compile(CompilerParameters parameters, bool isFilePath, string Script)
{
bool complete = false;
bool retried = false;
CompilerResults results;
do
{
lock (YPcodeProvider)
{
if (isFilePath)
results = YPcodeProvider.CompileAssemblyFromFile (
parameters, Script);
else
results = YPcodeProvider.CompileAssemblyFromSource(
parameters, Script);
}
// Deal with an occasional segv in the compiler.
// Rarely, if ever, occurs twice in succession.
// Line # == 0 and no file name are indications that
// this is a native stack trace rather than a normal
// error log.
if (results.Errors.Count > 0)
{
if (!retried && (results.Errors[0].FileName == null || results.Errors[0].FileName == String.Empty) &&
results.Errors[0].Line == 0)
{
// System.Console.WriteLine("retrying failed compilation");
retried = true;
}
else
{
complete = true;
}
}
else
{
complete = true;
}
} while (!complete);
return results;
}