public void Rewrite(AssemblyDefinition assembly, IWorkSession session) { if (!session.IsFSharp()) { return; } if (assembly.EntryPoint != null) { return; } var(entryPoint, isStaticConstructor) = FindBestEntryPointCandidate(assembly); if (entryPoint == null) { return; } if (isStaticConstructor) { entryPoint.Attributes &= ~MethodAttributes.SpecialName & ~MethodAttributes.RTSpecialName; entryPoint.Name = "cctor_rewritten_to_method_by_sharplab"; } assembly.EntryPoint = entryPoint; }
public async Task <bool> TryCompileToStreamAsync(MemoryStream assemblyStream, MemoryStream symbolStream, IWorkSession session, IList <Diagnostic> diagnostics, CancellationToken cancellationToken) { if (session.IsFSharp()) { return(await TryCompileFSharpToStreamAsync(assemblyStream, session, diagnostics, cancellationToken)); } if (session.IsPhp()) { return(TryCompilePhpToStreamAsync(assemblyStream, symbolStream, session, diagnostics)); } var compilation = await session.Roslyn.Project.GetCompilationAsync(cancellationToken).ConfigureAwait(false); var emitResult = compilation.Emit(assemblyStream, pdbStream: symbolStream); if (!emitResult.Success) { foreach (var diagnostic in emitResult.Diagnostics) { diagnostics.Add(diagnostic); } return(false); } return(true); }
public async Task <(bool assembly, bool symbols)> TryCompileToStreamAsync(MemoryStream assemblyStream, MemoryStream?symbolStream, IWorkSession session, IList <Diagnostic> diagnostics, CancellationToken cancellationToken) { if (session.IsFSharp()) { var compiled = await TryCompileFSharpToStreamAsync(assemblyStream, session, diagnostics, cancellationToken).ConfigureAwait(false); return(compiled, false); } #warning TODO: Revisit after https://github.com/dotnet/docs/issues/14784 var compilation = (await session.Roslyn.Project.GetCompilationAsync(cancellationToken).ConfigureAwait(false)) !; var emitResult = compilation.Emit(assemblyStream, pdbStream: symbolStream, options: RoslynEmitOptions); if (!emitResult.Success) { foreach (var diagnostic in emitResult.Diagnostics) { diagnostics.Add(diagnostic); } return(false, false); } return(true, true); }
public async Task <(bool assembly, bool symbols)> TryCompileToStreamAsync(MemoryStream assemblyStream, MemoryStream?symbolStream, IWorkSession session, IList <Diagnostic> diagnostics, CancellationToken cancellationToken) { #if !NETCOREAPP if (session.IsFSharp()) { var compiled = await TryCompileFSharpToStreamAsync(assemblyStream, session, diagnostics, cancellationToken).ConfigureAwait(false); return(compiled, false); } #endif var compilation = await session.Roslyn.Project.GetCompilationAsync(cancellationToken).ConfigureAwait(false); var emitResult = compilation.Emit(assemblyStream, pdbStream: symbolStream, options: RoslynEmitOptions); if (!emitResult.Success) { foreach (var diagnostic in emitResult.Diagnostics) { diagnostics.Add(diagnostic); } return(false, false); } return(true, true); }