提交 0122127a 编写于 作者: T Tanner Gooding

Merge branch 'master' into stabilization

......@@ -18,7 +18,7 @@ static void addConcurrentBuild(def myJob, String category) {
throttleConcurrentBuilds {
throttleDisabled(false)
maxTotal(0)
maxPerNode(1)
maxPerNode(4)
categories([category])
}
}
......@@ -121,7 +121,7 @@ static void addPullRequestTrigger(def myJob, String contextName, String opsysNam
autoCloseFailedPullRequests(false)
orgWhitelist('Microsoft')
allowMembersOfWhitelistedOrgsAsAdmin(true)
permitAll(true)
permitAll(false)
extensions {
commitStatus {
context(contextName.replace('_', '/').substring(7))
......@@ -149,7 +149,7 @@ static void addPullRequestTrigger(def myJob, String contextName, String opsysNam
switch (opsys) {
case 'win':
myJob.with {
label('windows-roslyn')
label('windows-roslyn-internal')
steps {
batchFile(".\\cibuild.cmd ${(configuration == 'dbg') ? '/debug' : '/release'} ${(buildTarget == 'unit32') ? '/test32' : '/test64'}")
}
......
......@@ -4753,7 +4753,7 @@ private BoundExpression MakeMemberAccessValue(BoundExpression expr, DiagnosticBa
typeArguments,
boundLeft,
rightName,
ImmutableArray<MethodSymbol>.Empty,
lookupResult.Symbols.All(s => s.Kind == SymbolKind.Method) ? lookupResult.Symbols.SelectAsArray(s_toMethodSymbolFunc) : ImmutableArray<MethodSymbol>.Empty,
lookupResult,
flags);
}
......
......@@ -228,6 +228,7 @@
<Compile Include="Compilation\AttributeSemanticModel.cs" />
<Compile Include="Compilation\AwaitExpressionInfo.cs" />
<Compile Include="Compilation\BuiltInOperators.cs" />
<Compile Include="Compilation\CSharpScriptCompilationInfo.cs" />
<Compile Include="Compilation\SyntaxAndDeclarationManager.cs" />
<Compile Include="Compilation\SyntaxAndDeclarationManager.LazyState.cs" />
<Compile Include="Compilation\CSharpCompilerDiagnosticAnalyzer.cs" />
......
......@@ -61,15 +61,6 @@ internal class CSharpResources {
}
}
/// <summary>
/// Looks up a localized string similar to Cannot have a previousSubmission when not a submission..
/// </summary>
internal static string CannotHavePreviousSubmission {
get {
return ResourceManager.GetString("CannotHavePreviousSubmission", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Can&apos;t reference compilation of type &apos;{0}&apos; from {1} compilation..
/// </summary>
......@@ -9782,15 +9773,6 @@ internal class CSharpResources {
}
}
/// <summary>
/// Looks up a localized string similar to This compilation doesn&apos;t represent an interactive submission..
/// </summary>
internal static string ThisCompilationNotInteractive {
get {
return ResourceManager.GetString("ThisCompilationNotInteractive", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to This method can only be used to create tokens - {0} is not a token kind..
/// </summary>
......
......@@ -4236,9 +4236,6 @@ To remove the warning, you can use /reference instead (set the Embed Interop Typ
<data name="PositionIsNotWithinSyntax" xml:space="preserve">
<value>Position is not within syntax tree with full span {0}</value>
</data>
<data name="ThisCompilationNotInteractive" xml:space="preserve">
<value>This compilation doesn't represent an interactive submission.</value>
</data>
<data name="WRN_BadUILang" xml:space="preserve">
<value>The language name '{0}' is invalid.</value>
</data>
......@@ -4651,9 +4648,6 @@ To remove the warning, you can use /reference instead (set the Embed Interop Typ
<value>Could not find file.</value>
<comment>File path referenced in source (#load) could not be resolved.</comment>
</data>
<data name="CannotHavePreviousSubmission" xml:space="preserve">
<value>Cannot have a previousSubmission when not a submission.</value>
</data>
<data name="SyntaxTreeFromLoadNoRemoveReplace" xml:space="preserve">
<value>SyntaxTree '{0}' resulted from a #load directive and cannot be removed or replaced directly.</value>
</data>
......
......@@ -49,7 +49,6 @@ public sealed partial class CSharpCompilation : Compilation
private readonly Lazy<Imports> _previousSubmissionImports;
private readonly Lazy<AliasSymbol> _globalNamespaceAlias; // alias symbol used to resolve "global::".
private readonly Lazy<ImplicitNamedTypeSymbol> _scriptClass;
private readonly CSharpCompilation _previousSubmission;
// All imports (using directives and extern aliases) in syntax trees in this compilation.
// NOTE: We need to de-dup since the Imports objects that populate the list may be GC'd
......@@ -209,25 +208,26 @@ public override INamedTypeSymbol CreateErrorTypeSymbol(INamespaceOrTypeSymbol co
/// <summary>
/// Creates a new compilation that can be used in scripting.
/// </summary>
public static CSharpCompilation CreateSubmission(
public static CSharpCompilation CreateScriptCompilation(
string assemblyName,
SyntaxTree syntaxTree = null,
IEnumerable<MetadataReference> references = null,
CSharpCompilationOptions options = null,
Compilation previousSubmission = null,
CSharpCompilation previousScriptCompilation = null,
Type returnType = null,
Type hostObjectType = null)
Type globalsType = null)
{
CheckSubmissionOptions(options);
ValidateScriptCompilationParameters(previousScriptCompilation, returnType, ref globalsType);
return Create(
assemblyName,
options ?? s_defaultSubmissionOptions,
(syntaxTree != null) ? new[] { syntaxTree } : SpecializedCollections.EmptyEnumerable<SyntaxTree>(),
references,
(CSharpCompilation)previousSubmission,
returnType,
hostObjectType,
previousScriptCompilation,
returnType,
globalsType,
isSubmission: true);
}
......@@ -245,7 +245,6 @@ public override INamedTypeSymbol CreateErrorTypeSymbol(INamespaceOrTypeSymbol co
CheckAssemblyName(assemblyName);
var validatedReferences = ValidateReferences<CSharpCompilationReference>(references);
ValidateSubmissionParameters(previousSubmission, returnType, ref hostObjectType);
var compilation = new CSharpCompilation(
assemblyName,
......@@ -286,7 +285,7 @@ public override INamedTypeSymbol CreateErrorTypeSymbol(INamespaceOrTypeSymbol co
bool reuseReferenceManager,
SyntaxAndDeclarationManager syntaxAndDeclarations,
AsyncQueue<CompilationEvent> eventQueue = null)
: base(assemblyName, references, SyntaxTreeCommonFeatures(syntaxAndDeclarations.ExternalSyntaxTrees), submissionReturnType, hostObjectType, isSubmission, eventQueue)
: base(assemblyName, references, SyntaxTreeCommonFeatures(syntaxAndDeclarations.ExternalSyntaxTrees), isSubmission, eventQueue)
{
_wellKnownMemberSignatureComparer = new WellKnownMembersSignatureComparer(this);
_options = options;
......@@ -302,8 +301,7 @@ public override INamedTypeSymbol CreateErrorTypeSymbol(INamespaceOrTypeSymbol co
if (isSubmission)
{
Debug.Assert(previousSubmission == null || previousSubmission.HostObjectType == hostObjectType);
_previousSubmission = previousSubmission;
this.ScriptCompilationInfo = new CSharpScriptCompilationInfo(previousSubmission, submissionReturnType, hostObjectType);
}
else
{
......@@ -369,7 +367,7 @@ public new CSharpCompilation Clone()
this.AssemblyName,
_options,
this.ExternalReferences,
_previousSubmission,
this.PreviousSubmission,
this.SubmissionReturnType,
this.HostObjectType,
this.IsSubmission,
......@@ -387,7 +385,7 @@ public new CSharpCompilation Clone()
this.AssemblyName,
_options,
this.ExternalReferences,
_previousSubmission,
this.PreviousSubmission,
this.SubmissionReturnType,
this.HostObjectType,
this.IsSubmission,
......@@ -411,7 +409,7 @@ public new CSharpCompilation WithAssemblyName(string assemblyName)
assemblyName,
_options,
this.ExternalReferences,
_previousSubmission,
this.PreviousSubmission,
this.SubmissionReturnType,
this.HostObjectType,
this.IsSubmission,
......@@ -440,7 +438,7 @@ public new CSharpCompilation WithReferences(IEnumerable<MetadataReference> refer
this.AssemblyName,
_options,
ValidateReferences<CSharpCompilationReference>(references),
_previousSubmission,
this.PreviousSubmission,
this.SubmissionReturnType,
this.HostObjectType,
this.IsSubmission,
......@@ -471,7 +469,7 @@ public CSharpCompilation WithOptions(CSharpCompilationOptions options)
this.AssemblyName,
options,
this.ExternalReferences,
_previousSubmission,
this.PreviousSubmission,
this.SubmissionReturnType,
this.HostObjectType,
this.IsSubmission,
......@@ -491,23 +489,23 @@ public CSharpCompilation WithOptions(CSharpCompilationOptions options)
/// <summary>
/// Returns a new compilation with the given compilation set as the previous submission.
/// </summary>
internal CSharpCompilation WithPreviousSubmission(CSharpCompilation newPreviousSubmission)
public CSharpCompilation WithCompilationScriptInfo(CSharpScriptCompilationInfo info)
{
if (!this.IsSubmission)
if (info == ScriptCompilationInfo)
{
throw new InvalidOperationException(CSharpResources.CannotHavePreviousSubmission);
return this;
}
// Reference binding doesn't depend on previous submission so we can reuse it.
return new CSharpCompilation(
this.AssemblyName,
_options,
this.ExternalReferences,
newPreviousSubmission,
this.SubmissionReturnType,
this.HostObjectType,
this.IsSubmission,
info?.PreviousScriptCompilation,
info?.ReturnType,
info?.GlobalsType,
info != null,
_referenceManager,
reuseReferenceManager: true,
syntaxAndDeclarations: _syntaxAndDeclarations);
......@@ -522,7 +520,7 @@ internal override Compilation WithEventQueue(AsyncQueue<CompilationEvent> eventQ
this.AssemblyName,
_options,
this.ExternalReferences,
_previousSubmission,
this.PreviousSubmission,
this.SubmissionReturnType,
this.HostObjectType,
this.IsSubmission,
......@@ -536,10 +534,10 @@ internal override Compilation WithEventQueue(AsyncQueue<CompilationEvent> eventQ
#region Submission
internal new CSharpCompilation PreviousSubmission
{
get { return _previousSubmission; }
}
public new CSharpScriptCompilationInfo ScriptCompilationInfo { get; }
internal override ScriptCompilationInfo CommonScriptCompilationInfo => ScriptCompilationInfo;
internal CSharpCompilation PreviousSubmission => ScriptCompilationInfo?.PreviousScriptCompilation;
// TODO (tomat): consider moving this method to SemanticModel
......@@ -558,12 +556,9 @@ internal new CSharpCompilation PreviousSubmission
/// </remarks>
/// <param name="hasValue">True if the submission has value, i.e. if it ends with a statement that is an expression statement.</param>
/// <exception cref="InvalidOperationException">The compilation doesn't represent a submission (<see cref="Compilation.IsSubmission"/> return false).</exception>
internal new TypeSymbol GetSubmissionResultType(out bool hasValue)
internal override ITypeSymbol GetSubmissionResultType(out bool hasValue)
{
if (!IsSubmission)
{
throw new InvalidOperationException(CSharpResources.ThisCompilationNotInteractive);
}
Debug.Assert(IsSubmission);
hasValue = false;
......@@ -1241,14 +1236,15 @@ internal Imports GetSubmissionImports()
private Imports ExpandPreviousSubmissionImports()
{
Debug.Assert(this.IsSubmission);
var previous = this.PreviousSubmission;
if (_previousSubmission == null)
if (previous == null)
{
return Imports.Empty;
}
return Imports.ExpandPreviousSubmissionImports(_previousSubmission.GetPreviousSubmissionImports(), this).Concat(
Imports.ExpandPreviousSubmissionImports(_previousSubmission.GetSubmissionImports(), this));
return Imports.ExpandPreviousSubmissionImports(previous.GetPreviousSubmissionImports(), this).Concat(
Imports.ExpandPreviousSubmissionImports(previous.GetSubmissionImports(), this));
}
internal AliasSymbol GlobalNamespaceAlias
......@@ -2700,11 +2696,6 @@ protected override Compilation CommonWithAssemblyName(string assemblyName)
return WithAssemblyName(assemblyName);
}
protected override ITypeSymbol CommonGetSubmissionResultType(out bool hasValue)
{
return GetSubmissionResultType(out hasValue);
}
protected override IAssemblySymbol CommonAssembly
{
get { return this.Assembly; }
......@@ -2720,11 +2711,6 @@ protected override CompilationOptions CommonOptions
get { return _options; }
}
protected override Compilation CommonPreviousSubmission
{
get { return _previousSubmission; }
}
protected override SemanticModel CommonGetSemanticModel(SyntaxTree syntaxTree, bool ignoreAccessibility)
{
return this.GetSemanticModel((SyntaxTree)syntaxTree, ignoreAccessibility);
......@@ -2763,14 +2749,14 @@ protected override Compilation CommonWithOptions(CompilationOptions options)
return this.WithOptions((CSharpCompilationOptions)options);
}
protected override Compilation CommonWithPreviousSubmission(Compilation newPreviousSubmission)
protected override Compilation CommonWithCompilationScriptInfo(ScriptCompilationInfo info)
{
return this.WithPreviousSubmission((CSharpCompilation)newPreviousSubmission);
return this.WithCompilationScriptInfo((CSharpScriptCompilationInfo)info);
}
protected override bool CommonContainsSyntaxTree(SyntaxTree syntaxTree)
{
return this.ContainsSyntaxTree((SyntaxTree)syntaxTree);
return this.ContainsSyntaxTree(syntaxTree);
}
protected override ISymbol CommonGetAssemblyOrModuleSymbol(MetadataReference reference)
......
// Copyright (c) Microsoft. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using System;
using System.Diagnostics;
namespace Microsoft.CodeAnalysis.CSharp
{
public sealed class CSharpScriptCompilationInfo : ScriptCompilationInfo
{
public new CSharpCompilation PreviousScriptCompilation { get; }
internal CSharpScriptCompilationInfo(CSharpCompilation previousCompilationOpt, Type returnType, Type globalsType)
: base(returnType, globalsType)
{
Debug.Assert(previousCompilationOpt == null || previousCompilationOpt.HostObjectType == globalsType);
PreviousScriptCompilation = previousCompilationOpt;
}
internal override Compilation CommonPreviousScriptCompilation => PreviousScriptCompilation;
public CSharpScriptCompilationInfo WithPreviousScriptCompilation(CSharpCompilation compilation) =>
(compilation == PreviousScriptCompilation) ? this : new CSharpScriptCompilationInfo(compilation, ReturnType, GlobalsType);
internal override ScriptCompilationInfo CommonWithPreviousScriptCompilation(Compilation compilation) =>
WithPreviousScriptCompilation((CSharpCompilation)compilation);
}
}
*REMOVED*Microsoft.CodeAnalysis.CSharp.CSharpCompilationOptions.CSharpCompilationOptions(Microsoft.CodeAnalysis.OutputKind outputKind, string moduleName = null, string mainTypeName = null, string scriptClassName = null, System.Collections.Generic.IEnumerable<string> usings = null, Microsoft.CodeAnalysis.OptimizationLevel optimizationLevel = Microsoft.CodeAnalysis.OptimizationLevel.Debug, bool checkOverflow = false, bool allowUnsafe = false, string cryptoKeyContainer = null, string cryptoKeyFile = null, System.Collections.Immutable.ImmutableArray<byte> cryptoPublicKey = default(System.Collections.Immutable.ImmutableArray<byte>), bool? delaySign = null, Microsoft.CodeAnalysis.Platform platform = Microsoft.CodeAnalysis.Platform.AnyCpu, Microsoft.CodeAnalysis.ReportDiagnostic generalDiagnosticOption = Microsoft.CodeAnalysis.ReportDiagnostic.Default, int warningLevel = 4, System.Collections.Generic.IEnumerable<System.Collections.Generic.KeyValuePair<string, Microsoft.CodeAnalysis.ReportDiagnostic>> specificDiagnosticOptions = null, bool concurrentBuild = true, Microsoft.CodeAnalysis.XmlReferenceResolver xmlReferenceResolver = null, Microsoft.CodeAnalysis.SourceReferenceResolver sourceReferenceResolver = null, Microsoft.CodeAnalysis.MetadataReferenceResolver metadataReferenceResolver = null, Microsoft.CodeAnalysis.AssemblyIdentityComparer assemblyIdentityComparer = null, Microsoft.CodeAnalysis.StrongNameProvider strongNameProvider = null) -> void
*REMOVED*static Microsoft.CodeAnalysis.CSharp.SyntaxExtensions.NormalizeWhitespace(this Microsoft.CodeAnalysis.SyntaxToken token, string indentation = " ", bool elasticTrivia = false) -> Microsoft.CodeAnalysis.SyntaxToken
*REMOVED*static Microsoft.CodeAnalysis.CSharp.SyntaxExtensions.NormalizeWhitespace(this Microsoft.CodeAnalysis.SyntaxTriviaList list, string indentation = " ", bool elasticTrivia = false) -> Microsoft.CodeAnalysis.SyntaxTriviaList
Microsoft.CodeAnalysis.CSharp.CSharpCompilation.ScriptCompilationInfo.get -> Microsoft.CodeAnalysis.CSharp.CSharpScriptCompilationInfo
Microsoft.CodeAnalysis.CSharp.CSharpCompilation.WithCompilationScriptInfo(Microsoft.CodeAnalysis.CSharp.CSharpScriptCompilationInfo info) -> Microsoft.CodeAnalysis.CSharp.CSharpCompilation
Microsoft.CodeAnalysis.CSharp.CSharpCompilationOptions.CSharpCompilationOptions(Microsoft.CodeAnalysis.OutputKind outputKind, bool reportSuppressedDiagnostics, string moduleName = null, string mainTypeName = null, string scriptClassName = null, System.Collections.Generic.IEnumerable<string> usings = null, Microsoft.CodeAnalysis.OptimizationLevel optimizationLevel = Microsoft.CodeAnalysis.OptimizationLevel.Debug, bool checkOverflow = false, bool allowUnsafe = false, string cryptoKeyContainer = null, string cryptoKeyFile = null, System.Collections.Immutable.ImmutableArray<byte> cryptoPublicKey = default(System.Collections.Immutable.ImmutableArray<byte>), bool? delaySign = null, Microsoft.CodeAnalysis.Platform platform = Microsoft.CodeAnalysis.Platform.AnyCpu, Microsoft.CodeAnalysis.ReportDiagnostic generalDiagnosticOption = Microsoft.CodeAnalysis.ReportDiagnostic.Default, int warningLevel = 4, System.Collections.Generic.IEnumerable<System.Collections.Generic.KeyValuePair<string, Microsoft.CodeAnalysis.ReportDiagnostic>> specificDiagnosticOptions = null, bool concurrentBuild = true, bool deterministic = true, Microsoft.CodeAnalysis.XmlReferenceResolver xmlReferenceResolver = null, Microsoft.CodeAnalysis.SourceReferenceResolver sourceReferenceResolver = null, Microsoft.CodeAnalysis.MetadataReferenceResolver metadataReferenceResolver = null, Microsoft.CodeAnalysis.AssemblyIdentityComparer assemblyIdentityComparer = null, Microsoft.CodeAnalysis.StrongNameProvider strongNameProvider = null) -> void
Microsoft.CodeAnalysis.CSharp.CSharpCompilationOptions.CSharpCompilationOptions(Microsoft.CodeAnalysis.OutputKind outputKind, string moduleName = null, string mainTypeName = null, string scriptClassName = null, System.Collections.Generic.IEnumerable<string> usings = null, Microsoft.CodeAnalysis.OptimizationLevel optimizationLevel = Microsoft.CodeAnalysis.OptimizationLevel.Debug, bool checkOverflow = false, bool allowUnsafe = false, string cryptoKeyContainer = null, string cryptoKeyFile = null, System.Collections.Immutable.ImmutableArray<byte> cryptoPublicKey = default(System.Collections.Immutable.ImmutableArray<byte>), bool? delaySign = null, Microsoft.CodeAnalysis.Platform platform = Microsoft.CodeAnalysis.Platform.AnyCpu, Microsoft.CodeAnalysis.ReportDiagnostic generalDiagnosticOption = Microsoft.CodeAnalysis.ReportDiagnostic.Default, int warningLevel = 4, System.Collections.Generic.IEnumerable<System.Collections.Generic.KeyValuePair<string, Microsoft.CodeAnalysis.ReportDiagnostic>> specificDiagnosticOptions = null, bool concurrentBuild = true, bool deterministic = false, Microsoft.CodeAnalysis.XmlReferenceResolver xmlReferenceResolver = null, Microsoft.CodeAnalysis.SourceReferenceResolver sourceReferenceResolver = null, Microsoft.CodeAnalysis.MetadataReferenceResolver metadataReferenceResolver = null, Microsoft.CodeAnalysis.AssemblyIdentityComparer assemblyIdentityComparer = null, Microsoft.CodeAnalysis.StrongNameProvider strongNameProvider = null) -> void
Microsoft.CodeAnalysis.CSharp.CSharpCompilationOptions.CSharpCompilationOptions(Microsoft.CodeAnalysis.OutputKind outputKind, string moduleName, string mainTypeName, string scriptClassName, System.Collections.Generic.IEnumerable<string> usings, Microsoft.CodeAnalysis.OptimizationLevel optimizationLevel, bool checkOverflow, bool allowUnsafe, string cryptoKeyContainer, string cryptoKeyFile, System.Collections.Immutable.ImmutableArray<byte> cryptoPublicKey, bool? delaySign, Microsoft.CodeAnalysis.Platform platform, Microsoft.CodeAnalysis.ReportDiagnostic generalDiagnosticOption, int warningLevel, System.Collections.Generic.IEnumerable<System.Collections.Generic.KeyValuePair<string, Microsoft.CodeAnalysis.ReportDiagnostic>> specificDiagnosticOptions, bool concurrentBuild, Microsoft.CodeAnalysis.XmlReferenceResolver xmlReferenceResolver, Microsoft.CodeAnalysis.SourceReferenceResolver sourceReferenceResolver, Microsoft.CodeAnalysis.MetadataReferenceResolver metadataReferenceResolver, Microsoft.CodeAnalysis.AssemblyIdentityComparer assemblyIdentityComparer, Microsoft.CodeAnalysis.StrongNameProvider strongNameProvider) -> void
Microsoft.CodeAnalysis.CSharp.CSharpCompilationOptions.WithDeterministic(bool deterministic) -> Microsoft.CodeAnalysis.CSharp.CSharpCompilationOptions
Microsoft.CodeAnalysis.CSharp.CSharpCompilationOptions.WithReportSuppressedDiagnostics(bool reportSuppressedDiagnostics) -> Microsoft.CodeAnalysis.CSharp.CSharpCompilationOptions
Microsoft.CodeAnalysis.CSharp.CSharpParseOptions.WithKind(Microsoft.CodeAnalysis.SourceCodeKind kind) -> Microsoft.CodeAnalysis.CSharp.CSharpParseOptions
Microsoft.CodeAnalysis.CSharp.CSharpScriptCompilationInfo
Microsoft.CodeAnalysis.CSharp.CSharpScriptCompilationInfo.PreviousScriptCompilation.get -> Microsoft.CodeAnalysis.CSharp.CSharpCompilation
Microsoft.CodeAnalysis.CSharp.CSharpScriptCompilationInfo.WithPreviousScriptCompilation(Microsoft.CodeAnalysis.CSharp.CSharpCompilation compilation) -> Microsoft.CodeAnalysis.CSharp.CSharpScriptCompilationInfo
Microsoft.CodeAnalysis.CSharp.Syntax.CompilationUnitSyntax.GetLoadDirectives() -> System.Collections.Generic.IList<Microsoft.CodeAnalysis.CSharp.Syntax.LoadDirectiveTriviaSyntax>
Microsoft.CodeAnalysis.CSharp.Syntax.LoadDirectiveTriviaSyntax
Microsoft.CodeAnalysis.CSharp.Syntax.LoadDirectiveTriviaSyntax.File.get -> Microsoft.CodeAnalysis.SyntaxToken
......@@ -27,7 +32,7 @@ override Microsoft.CodeAnalysis.CSharp.Syntax.LoadDirectiveTriviaSyntax.Accept<T
override Microsoft.CodeAnalysis.CSharp.Syntax.LoadDirectiveTriviaSyntax.EndOfDirectiveToken.get -> Microsoft.CodeAnalysis.SyntaxToken
override Microsoft.CodeAnalysis.CSharp.Syntax.LoadDirectiveTriviaSyntax.HashToken.get -> Microsoft.CodeAnalysis.SyntaxToken
override Microsoft.CodeAnalysis.CSharp.Syntax.LoadDirectiveTriviaSyntax.IsActive.get -> bool
static Microsoft.CodeAnalysis.CSharp.CSharpCompilation.CreateSubmission(string assemblyName, Microsoft.CodeAnalysis.SyntaxTree syntaxTree = null, System.Collections.Generic.IEnumerable<Microsoft.CodeAnalysis.MetadataReference> references = null, Microsoft.CodeAnalysis.CSharp.CSharpCompilationOptions options = null, Microsoft.CodeAnalysis.Compilation previousSubmission = null, System.Type returnType = null, System.Type hostObjectType = null) -> Microsoft.CodeAnalysis.CSharp.CSharpCompilation
static Microsoft.CodeAnalysis.CSharp.CSharpCompilation.CreateScriptCompilation(string assemblyName, Microsoft.CodeAnalysis.SyntaxTree syntaxTree = null, System.Collections.Generic.IEnumerable<Microsoft.CodeAnalysis.MetadataReference> references = null, Microsoft.CodeAnalysis.CSharp.CSharpCompilationOptions options = null, Microsoft.CodeAnalysis.CSharp.CSharpCompilation previousScriptCompilation = null, System.Type returnType = null, System.Type globalsType = null) -> Microsoft.CodeAnalysis.CSharp.CSharpCompilation
static Microsoft.CodeAnalysis.CSharp.SyntaxExtensions.NormalizeWhitespace(this Microsoft.CodeAnalysis.SyntaxToken token, string indentation = " ", string eol = "\r\n", bool elasticTrivia = false) -> Microsoft.CodeAnalysis.SyntaxToken
static Microsoft.CodeAnalysis.CSharp.SyntaxExtensions.NormalizeWhitespace(this Microsoft.CodeAnalysis.SyntaxToken token, string indentation, bool elasticTrivia) -> Microsoft.CodeAnalysis.SyntaxToken
static Microsoft.CodeAnalysis.CSharp.SyntaxExtensions.NormalizeWhitespace(this Microsoft.CodeAnalysis.SyntaxTriviaList list, string indentation = " ", string eol = "\r\n", bool elasticTrivia = false) -> Microsoft.CodeAnalysis.SyntaxTriviaList
......
......@@ -35,16 +35,16 @@ public void CompilationChain_SystemObject_NotEquals()
var options = new CSharpParseOptions(kind: SourceCodeKind.Script, documentationMode: DocumentationMode.None);
var corLib = AssemblyMetadata.CreateFromImage(TestResources.NetFX.v4_0_30319.mscorlib);
var s1 = CSharpCompilation.CreateSubmission("s1.dll",
var s1 = CSharpCompilation.CreateScriptCompilation("s1.dll",
syntaxTree: SyntaxFactory.ParseSyntaxTree("struct S { }", options),
references: new[] { corLib.GetReference(documentation: new TestDocumentationProviderNoEquals()) },
returnType: typeof(object));
s1.VerifyDiagnostics();
var s2 = CSharpCompilation.CreateSubmission("s2.dll",
var s2 = CSharpCompilation.CreateScriptCompilation("s2.dll",
syntaxTree: SyntaxFactory.ParseSyntaxTree("System.Collections.IEnumerable Iterator() { yield return new S(); }", options),
previousSubmission: s1,
previousScriptCompilation: s1,
references: new[] { corLib.GetReference(documentation: new TestDocumentationProviderNoEquals()) },
returnType: typeof(object));
......@@ -65,16 +65,16 @@ public void CompilationChain_SystemObject_Equals()
var options = new CSharpParseOptions(kind: SourceCodeKind.Script, documentationMode: DocumentationMode.None);
var corLib = AssemblyMetadata.CreateFromImage(TestResources.NetFX.v4_0_30319.mscorlib);
var s1 = CSharpCompilation.CreateSubmission("s1.dll",
var s1 = CSharpCompilation.CreateScriptCompilation("s1.dll",
syntaxTree: SyntaxFactory.ParseSyntaxTree("struct S { }", options),
references: new[] { corLib.GetReference(documentation: new TestDocumentationProviderEquals()) },
returnType: typeof(object));
s1.VerifyDiagnostics();
var s2 = CSharpCompilation.CreateSubmission("s2.dll",
var s2 = CSharpCompilation.CreateScriptCompilation("s2.dll",
syntaxTree: SyntaxFactory.ParseSyntaxTree("System.Collections.IEnumerable Iterator() { yield return new S(); }", options),
previousSubmission: s1,
previousScriptCompilation: s1,
references: new[] { corLib.GetReference(documentation: new TestDocumentationProviderEquals()) },
returnType: typeof(object));
......
......@@ -3640,8 +3640,8 @@ public void AwaitInInteractiveExpression()
}";
var source1 =
@"await F()";
var s0 = CSharpCompilation.CreateSubmission("s0.dll", SyntaxFactory.ParseSyntaxTree(source0, options: TestOptions.Script), references);
var s1 = CSharpCompilation.CreateSubmission("s1.dll", SyntaxFactory.ParseSyntaxTree(source1, options: TestOptions.Script), references, previousSubmission: s0);
var s0 = CSharpCompilation.CreateScriptCompilation("s0.dll", SyntaxFactory.ParseSyntaxTree(source0, options: TestOptions.Script), references);
var s1 = CSharpCompilation.CreateScriptCompilation("s1.dll", SyntaxFactory.ParseSyntaxTree(source1, options: TestOptions.Script), references, previousScriptCompilation: s0);
s1.VerifyDiagnostics();
}
......@@ -3651,7 +3651,7 @@ public void AwaitInInteractiveGlobalStatement()
var references = new[] { MscorlibRef_v4_0_30316_17626, SystemCoreRef };
var source0 =
@"await System.Threading.Tasks.Task.FromResult(5);";
var s0 = CSharpCompilation.CreateSubmission("s0.dll", SyntaxFactory.ParseSyntaxTree(source0, options: TestOptions.Script), references);
var s0 = CSharpCompilation.CreateScriptCompilation("s0.dll", SyntaxFactory.ParseSyntaxTree(source0, options: TestOptions.Script), references);
s0.VerifyDiagnostics();
}
......
......@@ -547,7 +547,7 @@ public void SubmissionEntryPoint()
await System.Threading.Tasks.Task.Delay(100);
System.Console.Write(""complete"");
}";
var s0 = CSharpCompilation.CreateSubmission(
var s0 = CSharpCompilation.CreateScriptCompilation(
"s0.dll",
SyntaxFactory.ParseSyntaxTree(source0, options: TestOptions.Script),
references);
......
......@@ -3144,7 +3144,7 @@ public void UnobservedAwaitableExpression_Submission()
@"using System.Threading.Tasks;
Task.FromResult(1);
Task.FromResult(2)";
var submission = CSharpCompilation.CreateSubmission(
var submission = CSharpCompilation.CreateScriptCompilation(
"s0.dll",
syntaxTree: SyntaxFactory.ParseSyntaxTree(source0, options: TestOptions.Script),
references: new[] { MscorlibRef_v4_0_30316_17626 });
......
......@@ -1987,6 +1987,18 @@ static void Main()
";
var compilation = CreateCompilationWithMscorlib(source);
compilation.VerifyDiagnostics(
// (5,14): error CS0535: 'Base' does not implement interface member 'IEnumerable<int>.GetEnumerator()'
// class Base : IEnumerable<int>
Diagnostic(ErrorCode.ERR_UnimplementedInterfaceMember, "IEnumerable<int>").WithArguments("Base", "System.Collections.Generic.IEnumerable<int>.GetEnumerator()").WithLocation(5, 14),
// (5,14): error CS0535: 'Base' does not implement interface member 'IEnumerable.GetEnumerator()'
// class Base : IEnumerable<int>
Diagnostic(ErrorCode.ERR_UnimplementedInterfaceMember, "IEnumerable<int>").WithArguments("Base", "System.Collections.IEnumerable.GetEnumerator()").WithLocation(5, 14),
// (17,32): error CS0122: 'X.Add(string)' is inaccessible due to its protection level
// var z = new X { String.Empty };
Diagnostic(ErrorCode.ERR_BadAccess, "Empty").WithArguments("X.Add(string)").WithLocation(17, 32)
);
var tree = compilation.SyntaxTrees.Single();
var semanticModel = compilation.GetSemanticModel(tree);
......@@ -1999,8 +2011,8 @@ where node.IsKind(SyntaxKind.CollectionInitializerExpression)
symbolInfo = semanticModel.GetCollectionInitializerSymbolInfo(nodes[0]);
Assert.Null(symbolInfo.Symbol);
Assert.Equal(CandidateReason.None, symbolInfo.CandidateReason);
Assert.Equal(0, symbolInfo.CandidateSymbols.Length);
Assert.Equal(CandidateReason.Inaccessible, symbolInfo.CandidateReason);
Assert.Equal("void X.Add(System.String x)", symbolInfo.CandidateSymbols.Single().ToTestDisplayString());
}
[WorkItem(529787, "DevDiv")]
......
......@@ -8237,5 +8237,47 @@ public static class Class
RemoveDetail
RemoveDetail");
}
[Fact, WorkItem(2544, "https://github.com/dotnet/roslyn/issues/2544")]
public void GetSymbolOnfo_Inaccessible()
{
var source =
@"
class C
{
private void M(D d)
{
d.M(1);
}
}
class D
{
private void M(int i) { }
private void M(double d) { }
}
";
var compilation = CreateCompilationWithMscorlib(source, options: TestOptions.ReleaseDll);
compilation.VerifyDiagnostics(
// (6,11): error CS0122: 'D.M(int)' is inaccessible due to its protection level
// d.M(1);
Diagnostic(ErrorCode.ERR_BadAccess, "M").WithArguments("D.M(int)").WithLocation(6, 11)
);
var tree = compilation.SyntaxTrees.Single();
var model = compilation.GetSemanticModel(tree);
var callSyntax = tree.GetRoot().DescendantNodes().OfType<InvocationExpressionSyntax>().Single();
var symbolInfo = model.GetSymbolInfo(callSyntax);
Assert.Equal(CandidateReason.Inaccessible, symbolInfo.CandidateReason);
var candidates = symbolInfo.CandidateSymbols;
Assert.Equal(2, candidates.Length);
Assert.Equal("void D.M(System.Int32 i)", candidates[0].ToTestDisplayString());
Assert.Equal("void D.M(System.Double d)", candidates[1].ToTestDisplayString());
}
}
}
......@@ -86,7 +86,7 @@ public void MainInScript1()
[Fact]
public void NoReferences()
{
var submission = CSharpCompilation.CreateSubmission("test", syntaxTree: SyntaxFactory.ParseSyntaxTree("1", options: TestOptions.Script), returnType: typeof(int));
var submission = CSharpCompilation.CreateScriptCompilation("test", syntaxTree: SyntaxFactory.ParseSyntaxTree("1", options: TestOptions.Script), returnType: typeof(int));
submission.VerifyDiagnostics(
// (1,1): error CS0518: Predefined type 'System.Object' is not defined or imported
// 1
......
......@@ -2148,7 +2148,7 @@ public void SwitchFallOut_Script2()
default:
Console.WriteLine(2);
}";
var submission = CSharpCompilation.CreateSubmission(
var submission = CSharpCompilation.CreateScriptCompilation(
"s0.dll",
syntaxTree: SyntaxFactory.ParseSyntaxTree(source, options: TestOptions.Script),
references: new[] { MscorlibRef, SystemCoreRef });
......
......@@ -56,7 +56,7 @@ public void CompilationDoesNotAcceptArbitrarilyRootedTree()
var arbitraryTree = SyntaxFactory.SyntaxTree(SyntaxFactory.Attribute(SyntaxFactory.IdentifierName("Wooh")));
var parsedTree = SyntaxFactory.ParseSyntaxTree("");
Assert.Throws<ArgumentException>(() => CSharpCompilation.Create("Grrr", syntaxTrees: new[] { arbitraryTree }));
Assert.Throws<ArgumentException>(() => CSharpCompilation.CreateSubmission("Wah").AddSyntaxTrees(arbitraryTree));
Assert.Throws<ArgumentException>(() => CSharpCompilation.CreateScriptCompilation("Wah").AddSyntaxTrees(arbitraryTree));
Assert.Throws<ArgumentException>(() => CSharpCompilation.Create("Bahh", syntaxTrees: new[] { parsedTree }).ReplaceSyntaxTree(parsedTree, arbitraryTree));
Assert.Throws<ArgumentException>(() => CSharpCompilation.Create("Woo").GetSemanticModel(arbitraryTree));
}
......
......@@ -1384,7 +1384,7 @@ class A
public void GetEntryPoint_Submission()
{
var source = @"1 + 1";
var compilation = CSharpCompilation.CreateSubmission("sub",
var compilation = CSharpCompilation.CreateScriptCompilation("sub",
references: new[] { MscorlibRef },
syntaxTree: Parse(source, options: TestOptions.Script));
compilation.VerifyDiagnostics();
......@@ -1408,7 +1408,7 @@ class A
static void Main() { }
}
";
var compilation = CSharpCompilation.CreateSubmission("sub",
var compilation = CSharpCompilation.CreateScriptCompilation("sub",
references: new[] { MscorlibRef },
syntaxTree: Parse(source, options: TestOptions.Script));
compilation.VerifyDiagnostics(
......@@ -1568,16 +1568,6 @@ public void ReferenceManagerReuse_WithOptions()
Assert.True(c1.ReferenceManagerEquals(c2));
}
[Fact]
public void ReferenceManagerReuse_WithPreviousSubmission()
{
var s1 = CSharpCompilation.CreateSubmission("s1");
var s2 = CSharpCompilation.CreateSubmission("s2");
var s3 = s2.WithPreviousSubmission(s1);
Assert.True(s2.ReferenceManagerEquals(s3));
}
[Fact]
public void ReferenceManagerReuse_WithMetadataReferenceResolver()
{
......@@ -1930,31 +1920,31 @@ public void SubmissionCompilation_Errors()
var ptr = typeof(int).MakePointerType();
var byref = typeof(int).MakeByRefType();
Assert.Throws<ArgumentException>(() => CSharpCompilation.CreateSubmission("a", returnType: genericParameter));
Assert.Throws<ArgumentException>(() => CSharpCompilation.CreateSubmission("a", returnType: open));
Assert.Throws<ArgumentException>(() => CSharpCompilation.CreateSubmission("a", returnType: typeof(void)));
Assert.Throws<ArgumentException>(() => CSharpCompilation.CreateSubmission("a", returnType: byref));
Assert.Throws<ArgumentException>(() => CSharpCompilation.CreateScriptCompilation("a", returnType: genericParameter));
Assert.Throws<ArgumentException>(() => CSharpCompilation.CreateScriptCompilation("a", returnType: open));
Assert.Throws<ArgumentException>(() => CSharpCompilation.CreateScriptCompilation("a", returnType: typeof(void)));
Assert.Throws<ArgumentException>(() => CSharpCompilation.CreateScriptCompilation("a", returnType: byref));
Assert.Throws<ArgumentException>(() => CSharpCompilation.CreateSubmission("a", hostObjectType: genericParameter));
Assert.Throws<ArgumentException>(() => CSharpCompilation.CreateSubmission("a", hostObjectType: open));
Assert.Throws<ArgumentException>(() => CSharpCompilation.CreateSubmission("a", hostObjectType: typeof(void)));
Assert.Throws<ArgumentException>(() => CSharpCompilation.CreateSubmission("a", hostObjectType: typeof(int)));
Assert.Throws<ArgumentException>(() => CSharpCompilation.CreateSubmission("a", hostObjectType: ptr));
Assert.Throws<ArgumentException>(() => CSharpCompilation.CreateSubmission("a", hostObjectType: byref));
Assert.Throws<ArgumentException>(() => CSharpCompilation.CreateScriptCompilation("a", globalsType: genericParameter));
Assert.Throws<ArgumentException>(() => CSharpCompilation.CreateScriptCompilation("a", globalsType: open));
Assert.Throws<ArgumentException>(() => CSharpCompilation.CreateScriptCompilation("a", globalsType: typeof(void)));
Assert.Throws<ArgumentException>(() => CSharpCompilation.CreateScriptCompilation("a", globalsType: typeof(int)));
Assert.Throws<ArgumentException>(() => CSharpCompilation.CreateScriptCompilation("a", globalsType: ptr));
Assert.Throws<ArgumentException>(() => CSharpCompilation.CreateScriptCompilation("a", globalsType: byref));
var s0 = CSharpCompilation.CreateSubmission("a0", hostObjectType: typeof(List<int>));
Assert.Throws<ArgumentException>(() => CSharpCompilation.CreateSubmission("a1", previousSubmission: s0, hostObjectType: typeof(List<bool>)));
var s0 = CSharpCompilation.CreateScriptCompilation("a0", globalsType: typeof(List<int>));
Assert.Throws<ArgumentException>(() => CSharpCompilation.CreateScriptCompilation("a1", previousScriptCompilation: s0, globalsType: typeof(List<bool>)));
// invalid options:
Assert.Throws<ArgumentException>(() => CSharpCompilation.CreateSubmission("a", options: TestOptions.ReleaseExe));
Assert.Throws<ArgumentException>(() => CSharpCompilation.CreateSubmission("a", options: TestOptions.ReleaseDll.WithOutputKind(OutputKind.NetModule)));
Assert.Throws<ArgumentException>(() => CSharpCompilation.CreateSubmission("a", options: TestOptions.ReleaseDll.WithOutputKind(OutputKind.WindowsRuntimeMetadata)));
Assert.Throws<ArgumentException>(() => CSharpCompilation.CreateSubmission("a", options: TestOptions.ReleaseDll.WithOutputKind(OutputKind.WindowsRuntimeApplication)));
Assert.Throws<ArgumentException>(() => CSharpCompilation.CreateSubmission("a", options: TestOptions.ReleaseDll.WithOutputKind(OutputKind.WindowsApplication)));
Assert.Throws<ArgumentException>(() => CSharpCompilation.CreateSubmission("a", options: TestOptions.ReleaseDll.WithCryptoKeyContainer("foo")));
Assert.Throws<ArgumentException>(() => CSharpCompilation.CreateSubmission("a", options: TestOptions.ReleaseDll.WithCryptoKeyFile("foo.snk")));
Assert.Throws<ArgumentException>(() => CSharpCompilation.CreateSubmission("a", options: TestOptions.ReleaseDll.WithDelaySign(true)));
Assert.Throws<ArgumentException>(() => CSharpCompilation.CreateSubmission("a", options: TestOptions.ReleaseDll.WithDelaySign(false)));
Assert.Throws<ArgumentException>(() => CSharpCompilation.CreateScriptCompilation("a", options: TestOptions.ReleaseExe));
Assert.Throws<ArgumentException>(() => CSharpCompilation.CreateScriptCompilation("a", options: TestOptions.ReleaseDll.WithOutputKind(OutputKind.NetModule)));
Assert.Throws<ArgumentException>(() => CSharpCompilation.CreateScriptCompilation("a", options: TestOptions.ReleaseDll.WithOutputKind(OutputKind.WindowsRuntimeMetadata)));
Assert.Throws<ArgumentException>(() => CSharpCompilation.CreateScriptCompilation("a", options: TestOptions.ReleaseDll.WithOutputKind(OutputKind.WindowsRuntimeApplication)));
Assert.Throws<ArgumentException>(() => CSharpCompilation.CreateScriptCompilation("a", options: TestOptions.ReleaseDll.WithOutputKind(OutputKind.WindowsApplication)));
Assert.Throws<ArgumentException>(() => CSharpCompilation.CreateScriptCompilation("a", options: TestOptions.ReleaseDll.WithCryptoKeyContainer("foo")));
Assert.Throws<ArgumentException>(() => CSharpCompilation.CreateScriptCompilation("a", options: TestOptions.ReleaseDll.WithCryptoKeyFile("foo.snk")));
Assert.Throws<ArgumentException>(() => CSharpCompilation.CreateScriptCompilation("a", options: TestOptions.ReleaseDll.WithDelaySign(true)));
Assert.Throws<ArgumentException>(() => CSharpCompilation.CreateScriptCompilation("a", options: TestOptions.ReleaseDll.WithDelaySign(false)));
}
private static void TestSubmissionResult(CSharpCompilation s, SpecialType? expectedType, bool expectedHasValue)
......@@ -1968,7 +1958,7 @@ private static void TestSubmissionResult(CSharpCompilation s, SpecialType? expec
[Fact]
public void SubmissionResultType()
{
var submission = CSharpCompilation.CreateSubmission("sub");
var submission = CSharpCompilation.CreateScriptCompilation("sub");
bool hasValue;
Assert.Equal(SpecialType.System_Void, submission.GetSubmissionResultType(out hasValue).SpecialType);
Assert.False(hasValue);
......
......@@ -360,7 +360,7 @@ public void InfoAndWarnAsError()
public void UnusedUsingInteractive()
{
var tree = Parse("using System;", options: TestOptions.Script);
var comp = CSharpCompilation.CreateSubmission("sub1", tree, new[] { MscorlibRef_v4_0_30316_17626 });
var comp = CSharpCompilation.CreateScriptCompilation("sub1", tree, new[] { MscorlibRef_v4_0_30316_17626 });
comp.VerifyDiagnostics();
}
......
......@@ -3700,16 +3700,16 @@ public void InteractiveExtensionMethods()
var o = new object();
o.G().F();";
var s0 = CSharpCompilation.CreateSubmission(
var s0 = CSharpCompilation.CreateScriptCompilation(
"s0.dll",
syntaxTree: SyntaxFactory.ParseSyntaxTree(source0, options: parseOptions),
references: references);
s0.VerifyDiagnostics();
var s1 = CSharpCompilation.CreateSubmission(
var s1 = CSharpCompilation.CreateScriptCompilation(
"s1.dll",
syntaxTree: SyntaxFactory.ParseSyntaxTree(source1, options: parseOptions),
previousSubmission: s0,
previousScriptCompilation: s0,
references: references);
s1.VerifyDiagnostics();
}
......
......@@ -103,7 +103,7 @@ public void ExternAliasInInteractive_Error()
{
var src = "extern alias Bar;";
var comp = CSharpCompilation.CreateSubmission(
var comp = CSharpCompilation.CreateScriptCompilation(
GetUniqueName(),
syntaxTree: SyntaxFactory.ParseSyntaxTree(src, options: TestOptions.Script),
references: new MetadataReference[] { MscorlibRef, ExternAliasTests.Foo1, ExternAliasTests.Foo2 });
......
......@@ -19170,7 +19170,7 @@ public void AbstractInSubmission()
@"internal abstract void M();
internal abstract object P { get; }
internal abstract event System.EventHandler E;";
var submission = CSharpCompilation.CreateSubmission("s0.dll", SyntaxFactory.ParseSyntaxTree(source, options: TestOptions.Script), new[] { MscorlibRef_v4_0_30316_17626, SystemCoreRef });
var submission = CSharpCompilation.CreateScriptCompilation("s0.dll", SyntaxFactory.ParseSyntaxTree(source, options: TestOptions.Script), new[] { MscorlibRef_v4_0_30316_17626, SystemCoreRef });
submission.VerifyDiagnostics(
// (1,24): error CS0513: 'M()' is abstract but it is contained in non-abstract class 'Script'
// internal abstract void M();
......
......@@ -51,6 +51,7 @@
<Compile Include="Binding\AbstractLookupSymbolsInfo.cs" />
<Compile Include="CaseInsensitiveComparison.cs" />
<Compile Include="CodeGen\ILEmitStyle.cs" />
<Compile Include="Compilation\ScriptCompilationInfo.cs" />
<Compile Include="DiagnosticAnalyzer\AnalyzerDriver.CompilationData.cs" />
<Compile Include="DiagnosticAnalyzer\SuppressMessageInfo.cs" />
<Compile Include="Diagnostic\SuppressionInfo.cs" />
......
......@@ -52,12 +52,13 @@ public abstract partial class Compilation
private readonly IReadOnlyDictionary<string, string> _features;
public ScriptCompilationInfo ScriptCompilationInfo => CommonScriptCompilationInfo;
internal abstract ScriptCompilationInfo CommonScriptCompilationInfo { get; }
internal Compilation(
string name,
ImmutableArray<MetadataReference> references,
IReadOnlyDictionary<string, string> features,
Type submissionReturnType,
Type hostObjectType,
bool isSubmission,
AsyncQueue<CompilationEvent> eventQueue)
{
......@@ -68,17 +69,7 @@ public abstract partial class Compilation
this.ExternalReferences = references;
this.EventQueue = eventQueue;
if (isSubmission)
{
_lazySubmissionSlotIndex = SubmissionSlotIndexToBeAllocated;
this.SubmissionReturnType = submissionReturnType ?? typeof(object);
this.HostObjectType = hostObjectType;
}
else
{
_lazySubmissionSlotIndex = SubmissionSlotIndexNotApplicable;
}
_lazySubmissionSlotIndex = isSubmission ? SubmissionSlotIndexToBeAllocated : SubmissionSlotIndexNotApplicable;
_features = features;
}
......@@ -118,11 +109,11 @@ public abstract partial class Compilation
/// </summary>
public abstract string Language { get; }
internal static void ValidateSubmissionParameters(Compilation previousSubmission, Type returnType, ref Type hostObjectType)
internal static void ValidateScriptCompilationParameters(Compilation previousScriptCompilation, Type returnType, ref Type globalsType)
{
if (hostObjectType != null && !IsValidHostObjectType(hostObjectType))
if (globalsType != null && !IsValidHostObjectType(globalsType))
{
throw new ArgumentException(CodeAnalysisResources.ReturnTypeCannotBeValuePointerbyRefOrOpen, nameof(hostObjectType));
throw new ArgumentException(CodeAnalysisResources.ReturnTypeCannotBeValuePointerbyRefOrOpen, nameof(globalsType));
}
if (returnType != null && !IsValidSubmissionReturnType(returnType))
......@@ -130,19 +121,19 @@ internal static void ValidateSubmissionParameters(Compilation previousSubmission
throw new ArgumentException(CodeAnalysisResources.ReturnTypeCannotBeVoidByRefOrOpen, nameof(returnType));
}
if (previousSubmission != null)
if (previousScriptCompilation != null)
{
if (hostObjectType == null)
if (globalsType == null)
{
hostObjectType = previousSubmission.HostObjectType;
globalsType = previousScriptCompilation.HostObjectType;
}
else if (hostObjectType != previousSubmission.HostObjectType)
else if (globalsType != previousScriptCompilation.HostObjectType)
{
throw new ArgumentException(CodeAnalysisResources.TypeMustBeSameAsHostObjectTypeOfPreviousSubmission, nameof(hostObjectType));
throw new ArgumentException(CodeAnalysisResources.TypeMustBeSameAsHostObjectTypeOfPreviousSubmission, nameof(globalsType));
}
// Force the previous submission to be analyzed. This is required for anonymous types unification.
if (previousSubmission.GetDiagnostics().Any(d => d.Severity == DiagnosticSeverity.Error))
if (previousScriptCompilation.GetDiagnostics().Any(d => d.Severity == DiagnosticSeverity.Error))
{
throw new InvalidOperationException(CodeAnalysisResources.PreviousSubmissionHasErrors);
}
......@@ -314,7 +305,7 @@ internal int GetSubmissionSlotIndex()
if (_lazySubmissionSlotIndex == SubmissionSlotIndexToBeAllocated)
{
// TODO (tomat): remove recursion
int lastSlotIndex = PreviousSubmission?.GetSubmissionSlotIndex() ?? 0;
int lastSlotIndex = ScriptCompilationInfo.PreviousScriptCompilation?.GetSubmissionSlotIndex() ?? 0;
_lazySubmissionSlotIndex = HasCodeToEmit() ? lastSlotIndex + 1 : lastSlotIndex;
}
......@@ -332,7 +323,7 @@ internal int GetSubmissionSlotIndex()
/// <summary>
/// The type object that represents the type of submission result the host requested.
/// </summary>
internal Type SubmissionReturnType { get; }
internal Type SubmissionReturnType => ScriptCompilationInfo?.ReturnType;
internal static bool IsValidSubmissionReturnType(Type type)
{
......@@ -340,9 +331,9 @@ internal static bool IsValidSubmissionReturnType(Type type)
}
/// <summary>
/// The type of the host object or null if not specified for this compilation.
/// The type of the globals object or null if not specified for this compilation.
/// </summary>
internal Type HostObjectType { get; }
internal Type HostObjectType => ScriptCompilationInfo?.GlobalsType;
internal static bool IsValidHostObjectType(Type type)
{
......@@ -376,32 +367,10 @@ internal static bool IsValidHostObjectType(Type type)
/// <paramref name="hasValue"/> is false in the former case and true
/// in the latter.
/// </remarks>
public ITypeSymbol GetSubmissionResultType(out bool hasValue)
{
return CommonGetSubmissionResultType(out hasValue);
}
protected abstract ITypeSymbol CommonGetSubmissionResultType(out bool hasValue);
internal abstract ITypeSymbol GetSubmissionResultType(out bool hasValue);
/// <summary>
/// The previous submission compilation, or null if either this
/// compilation doesn't represent a submission or the submission is the
/// first submission in a submission chain.
/// </summary>
public Compilation PreviousSubmission { get { return CommonPreviousSubmission; } }
protected abstract Compilation CommonPreviousSubmission { get; }
/// <summary>
/// Returns a new compilation with the given compilation set as the
/// previous submission.
/// </summary>
public Compilation WithPreviousSubmission(Compilation newPreviousSubmission)
{
return CommonWithPreviousSubmission(newPreviousSubmission);
}
protected abstract Compilation CommonWithPreviousSubmission(Compilation newPreviousSubmission);
public Compilation WithCompilationScriptInfo(ScriptCompilationInfo info) => CommonWithCompilationScriptInfo(info);
protected abstract Compilation CommonWithCompilationScriptInfo(ScriptCompilationInfo info);
#endregion
......@@ -1416,6 +1385,8 @@ internal bool IsRealSigned
internal void EnsureAnonymousTypeTemplates(CancellationToken cancellationToken)
{
Debug.Assert(IsSubmission);
if (this.GetSubmissionSlotIndex() >= 0 && HasCodeToEmit())
{
if (!this.CommonAnonymousTypeManager.AreTemplatesSealed)
......@@ -1449,7 +1420,7 @@ internal void EnsureAnonymousTypeTemplates(CancellationToken cancellationToken)
}
else
{
this.PreviousSubmission?.EnsureAnonymousTypeTemplates(cancellationToken);
this.ScriptCompilationInfo.PreviousScriptCompilation?.EnsureAnonymousTypeTemplates(cancellationToken);
}
}
......
// Copyright (c) Microsoft. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using System;
namespace Microsoft.CodeAnalysis
{
public abstract class ScriptCompilationInfo
{
public Type ReturnType { get; }
public Type GlobalsType { get; }
internal ScriptCompilationInfo(Type returnType, Type globalsType)
{
ReturnType = returnType ?? typeof(object);
GlobalsType = globalsType;
}
public Compilation PreviousScriptCompilation => CommonPreviousScriptCompilation;
internal abstract Compilation CommonPreviousScriptCompilation { get; }
public ScriptCompilationInfo WithPreviousScriptCompilation(Compilation compilation) => CommonWithPreviousScriptCompilation(compilation);
internal abstract ScriptCompilationInfo CommonWithPreviousScriptCompilation(Compilation compilation);
}
}
......@@ -25,7 +25,7 @@ public enum SourceCodeKind
/// <summary>
/// The same as <see cref="Script"/>.
/// </summary>
[Obsolete("Use Script instead", error: true)]
[Obsolete("Use Script instead", error: false)]
[EditorBrowsable(EditorBrowsableState.Never)]
Interactive = 2,
}
......
......@@ -502,14 +502,14 @@ public static SyntaxTree ParseWithRoundTripCheck(string text, CSharpParseOptions
Type returnType = null,
Type hostObjectType = null)
{
return CSharpCompilation.CreateSubmission(
return CSharpCompilation.CreateScriptCompilation(
GetUniqueName(),
references: (references != null) ? new[] { MscorlibRef_v4_0_30316_17626 }.Concat(references) : new[] { MscorlibRef_v4_0_30316_17626 },
options: options,
syntaxTree: Parse(code, options: parseOptions ?? TestOptions.Script),
previousSubmission: previous,
previousScriptCompilation: previous,
returnType: returnType,
hostObjectType: hostObjectType);
globalsType: hostObjectType);
}
public CompilationVerifier CompileWithCustomILSource(string cSharpSource, string ilSource, Action<CSharpCompilation> compilationVerifier = null, bool importInternals = true, string expectedOutput = null)
......
......@@ -378,14 +378,14 @@ Public MustInherit Class BasicTestBaseBase
Optional previous As VisualBasicCompilation = Nothing,
Optional returnType As Type = Nothing,
Optional hostObjectType As Type = Nothing) As VisualBasicCompilation
Return VisualBasicCompilation.CreateSubmission(
Return VisualBasicCompilation.CreateScriptCompilation(
GetUniqueName(),
references:=If(references Is Nothing, {MscorlibRef_v4_0_30316_17626, MsvbRef_v4_0_30319_17929}, {MscorlibRef_v4_0_30316_17626, MsvbRef_v4_0_30319_17929}.Concat(references)),
options:=options,
syntaxTree:=Parse(code, options:=If(parseOptions, TestOptions.Script)),
previousSubmission:=previous,
previousScriptCompilation:=previous,
returnType:=returnType,
hostObjectType:=hostObjectType)
globalsType:=hostObjectType)
End Function
Friend Shared Function GetAttributeNames(attributes As ImmutableArray(Of SynthesizedAttributeData)) As IEnumerable(Of String)
......
......@@ -361,6 +361,7 @@
<Compile Include="Compilation\VisualBasicCompilationReference.vb" />
<Compile Include="Compilation\VisualBasicCompilerDiagnosticAnalyzer.vb" />
<Compile Include="Compilation\VisualBasicDiagnosticFilter.vb" />
<Compile Include="Compilation\VisualBasicScriptCompilationInfo.vb" />
<Compile Include="Declarations\Declaration.vb" />
<Compile Include="Declarations\DeclarationKind.vb" />
<Compile Include="Declarations\DeclarationModifiers.vb" />
......
......@@ -158,7 +158,6 @@ Namespace Microsoft.CodeAnalysis.VisualBasic
Private _lazyMyTemplate As SyntaxTree = VisualBasicSyntaxTree.Dummy
Private ReadOnly _scriptClass As Lazy(Of ImplicitNamedTypeSymbol)
Private ReadOnly _previousSubmission As VisualBasicCompilation
''' <summary>
''' Contains the main method of this assembly, if there is one.
......@@ -322,28 +321,26 @@ Namespace Microsoft.CodeAnalysis.VisualBasic
''' <summary>
''' Creates a new compilation that can be used in scripting.
''' </summary>
Public Shared Function CreateSubmission(
Friend Shared Function CreateScriptCompilation(
assemblyName As String,
Optional syntaxTree As SyntaxTree = Nothing,
Optional references As IEnumerable(Of MetadataReference) = Nothing,
Optional options As VisualBasicCompilationOptions = Nothing,
Optional previousSubmission As Compilation = Nothing,
Optional previousScriptCompilation As VisualBasicCompilation = Nothing,
Optional returnType As Type = Nothing,
Optional hostObjectType As Type = Nothing) As VisualBasicCompilation
Optional globalsType As Type = Nothing) As VisualBasicCompilation
CheckSubmissionOptions(options)
Dim vbTree = syntaxTree
Dim vbPrevious = DirectCast(previousSubmission, VisualBasicCompilation)
ValidateScriptCompilationParameters(previousScriptCompilation, returnType, globalsType)
Return Create(
assemblyName,
If(options, New VisualBasicCompilationOptions(OutputKind.DynamicallyLinkedLibrary)),
If((syntaxTree IsNot Nothing), {vbTree}, SpecializedCollections.EmptyEnumerable(Of SyntaxTree)()),
If((syntaxTree IsNot Nothing), {syntaxTree}, SpecializedCollections.EmptyEnumerable(Of SyntaxTree)()),
references,
vbPrevious,
previousScriptCompilation,
returnType,
hostObjectType,
globalsType,
isSubmission:=True)
End Function
......@@ -364,7 +361,6 @@ Namespace Microsoft.CodeAnalysis.VisualBasic
CheckAssemblyName(assemblyName)
Dim validatedReferences = ValidateReferences(Of VisualBasicCompilationReference)(references)
ValidateSubmissionParameters(previousSubmission, returnType, hostObjectType)
Dim c As VisualBasicCompilation = Nothing
Dim embeddedTrees = CreateEmbeddedTrees(New Lazy(Of VisualBasicCompilation)(Function() c))
......@@ -413,7 +409,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic
reuseReferenceManager As Boolean,
Optional eventQueue As AsyncQueue(Of CompilationEvent) = Nothing
)
MyBase.New(assemblyName, references, SyntaxTreeCommonFeatures(syntaxTrees), submissionReturnType, hostObjectType, isSubmission, eventQueue)
MyBase.New(assemblyName, references, SyntaxTreeCommonFeatures(syntaxTrees), isSubmission, eventQueue)
Debug.Assert(rootNamespaces IsNot Nothing)
Debug.Assert(declarationTable IsNot Nothing)
......@@ -434,7 +430,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic
If isSubmission Then
Debug.Assert(previousSubmission Is Nothing OrElse previousSubmission.HostObjectType Is hostObjectType)
_previousSubmission = previousSubmission
Me.ScriptCompilationInfo = New VisualBasicScriptCompilationInfo(previousSubmission, submissionReturnType, hostObjectType)
Else
Debug.Assert(previousSubmission Is Nothing AndAlso submissionReturnType Is Nothing AndAlso hostObjectType Is Nothing)
End If
......@@ -493,7 +489,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic
_rootNamespaces,
_embeddedTrees,
_declarationTable,
_previousSubmission,
Me.PreviousSubmission,
Me.SubmissionReturnType,
Me.HostObjectType,
Me.IsSubmission,
......@@ -518,7 +514,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic
rootNamespaces,
_embeddedTrees,
declarationTable,
_previousSubmission,
Me.PreviousSubmission,
Me.SubmissionReturnType,
Me.HostObjectType,
Me.IsSubmission,
......@@ -545,7 +541,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic
_rootNamespaces,
_embeddedTrees,
_declarationTable,
_previousSubmission,
Me.PreviousSubmission,
Me.SubmissionReturnType,
Me.HostObjectType,
Me.IsSubmission,
......@@ -586,7 +582,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic
_rootNamespaces,
embeddedTrees,
declTable,
_previousSubmission,
Me.PreviousSubmission,
Me.SubmissionReturnType,
Me.HostObjectType,
Me.IsSubmission,
......@@ -639,7 +635,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic
declMap,
embeddedTrees,
declTable,
_previousSubmission,
Me.PreviousSubmission,
Me.SubmissionReturnType,
Me.HostObjectType,
Me.IsSubmission,
......@@ -651,9 +647,9 @@ Namespace Microsoft.CodeAnalysis.VisualBasic
''' <summary>
''' Returns a new compilation with the given compilation set as the previous submission.
''' </summary>
Friend Shadows Function WithPreviousSubmission(newPreviousSubmission As VisualBasicCompilation) As VisualBasicCompilation
If Not IsSubmission Then
Throw New NotSupportedException("Can't have a previousSubmission when not a submission")
Friend Shadows Function WithScriptCompilationInfo(info As VisualBasicScriptCompilationInfo) As VisualBasicCompilation
If info Is ScriptCompilationInfo Then
Return Me
End If
' Reference binding doesn't depend on previous submission so we can reuse it.
......@@ -667,10 +663,10 @@ Namespace Microsoft.CodeAnalysis.VisualBasic
_rootNamespaces,
_embeddedTrees,
_declarationTable,
newPreviousSubmission,
Me.SubmissionReturnType,
Me.HostObjectType,
Me.IsSubmission,
info?.PreviousScriptCompilation,
info?.ReturnType,
info?.GlobalsType,
info IsNot Nothing,
_referenceManager,
reuseReferenceManager:=True)
End Function
......@@ -688,7 +684,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic
_rootNamespaces,
_embeddedTrees,
_declarationTable,
_previousSubmission,
Me.PreviousSubmission,
Me.SubmissionReturnType,
Me.HostObjectType,
Me.IsSubmission,
......@@ -701,9 +697,17 @@ Namespace Microsoft.CodeAnalysis.VisualBasic
#Region "Submission"
Friend Shadows ReadOnly Property ScriptCompilationInfo As VisualBasicScriptCompilationInfo
Friend Overrides ReadOnly Property CommonScriptCompilationInfo As ScriptCompilationInfo
Get
Return ScriptCompilationInfo
End Get
End Property
Friend Shadows ReadOnly Property PreviousSubmission As VisualBasicCompilation
Get
Return _previousSubmission
Return ScriptCompilationInfo?.PreviousScriptCompilation
End Get
End Property
......@@ -724,11 +728,8 @@ Namespace Microsoft.CodeAnalysis.VisualBasic
''' Note that the return type is System.Void for both compilations "System.Console.WriteLine()" and "?System.Console.WriteLine()",
''' and <paramref name="hasValue"/> is <c>False</c> for the former and <c>True</c> for the latter.
''' </remarks>
''' <exception cref="InvalidOperationException">The compilation doesn't represent a submission (<see cref="IsSubmission"/> return false).</exception>
Friend Shadows Function GetSubmissionResultType(<Out> ByRef hasValue As Boolean) As TypeSymbol
If Not IsSubmission Then
Throw New InvalidOperationException(VBResources.CompilationDoesNotRepresentInteractiveSubmission)
End If
Friend Overrides Function GetSubmissionResultType(<Out> ByRef hasValue As Boolean) As ITypeSymbol
Debug.Assert(IsSubmission)
hasValue = False
Dim tree = SyntaxTrees.SingleOrDefault()
......@@ -2503,8 +2504,8 @@ Namespace Microsoft.CodeAnalysis.VisualBasic
Return WithAssemblyName(assemblyName)
End Function
Protected Overrides Function CommonGetSubmissionResultType(ByRef hasValue As Boolean) As ITypeSymbol
Return GetSubmissionResultType(hasValue)
Protected Overrides Function CommonWithCompilationScriptInfo(info As ScriptCompilationInfo) As Compilation
Return WithScriptCompilationInfo(DirectCast(info, VisualBasicScriptCompilationInfo))
End Function
Protected Overrides ReadOnly Property CommonAssembly As IAssemblySymbol
......@@ -2525,12 +2526,6 @@ Namespace Microsoft.CodeAnalysis.VisualBasic
End Get
End Property
Protected Overrides ReadOnly Property CommonPreviousSubmission As Compilation
Get
Return PreviousSubmission
End Get
End Property
Protected Overrides Function CommonGetSemanticModel(syntaxTree As SyntaxTree, ignoreAccessibility As Boolean) As SemanticModel
Return Me.GetSemanticModel(syntaxTree, ignoreAccessibility)
End Function
......@@ -2579,10 +2574,6 @@ Namespace Microsoft.CodeAnalysis.VisualBasic
Return Me.WithOptions(DirectCast(options, VisualBasicCompilationOptions))
End Function
Protected Overrides Function CommonWithPreviousSubmission(newPreviousSubmission As Compilation) As Compilation
Return Me.WithPreviousSubmission(DirectCast(newPreviousSubmission, VisualBasicCompilation))
End Function
Protected Overrides Function CommonContainsSyntaxTree(syntaxTree As SyntaxTree) As Boolean
Return Me.ContainsSyntaxTree(syntaxTree)
End Function
......
' Copyright (c) Microsoft. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
Namespace Microsoft.CodeAnalysis.VisualBasic
Friend NotInheritable Class VisualBasicScriptCompilationInfo
Inherits ScriptCompilationInfo
Public Shadows ReadOnly Property PreviousScriptCompilation As VisualBasicCompilation
Friend Sub New(previousCompilationOpt As VisualBasicCompilation, returnType As Type, globalsType As Type)
MyBase.New(returnType, globalsType)
Debug.Assert(previousCompilationOpt Is Nothing OrElse previousCompilationOpt.HostObjectType Is globalsType)
PreviousScriptCompilation = previousCompilationOpt
End Sub
Friend Overrides ReadOnly Property CommonPreviousScriptCompilation As Compilation
Get
Return PreviousScriptCompilation
End Get
End Property
Public Shadows Function WithPreviousScriptCompilation(compilation As VisualBasicCompilation) As VisualBasicScriptCompilationInfo
Return If(compilation Is PreviousScriptCompilation, Me, New VisualBasicScriptCompilationInfo(compilation, ReturnType, GlobalsType))
End Function
Friend Overrides Function CommonWithPreviousScriptCompilation(compilation As Compilation) As ScriptCompilationInfo
Return WithPreviousScriptCompilation(DirectCast(compilation, VisualBasicCompilation))
End Function
End Class
End Namespace
......@@ -13,5 +13,4 @@ Microsoft.CodeAnalysis.VisualBasic.VisualBasicCompilationOptions.New(outputKind
Microsoft.CodeAnalysis.VisualBasic.VisualBasicCompilationOptions.WithDeterministic(deterministic As Boolean) -> Microsoft.CodeAnalysis.VisualBasic.VisualBasicCompilationOptions
Microsoft.CodeAnalysis.VisualBasic.VisualBasicCompilationOptions.WithReportSuppressedDiagnostics(value As Boolean) -> Microsoft.CodeAnalysis.VisualBasic.VisualBasicCompilationOptions
Microsoft.CodeAnalysis.VisualBasic.VisualBasicParseOptions.WithKind(kind As Microsoft.CodeAnalysis.SourceCodeKind) -> Microsoft.CodeAnalysis.VisualBasic.VisualBasicParseOptions
Overrides Microsoft.CodeAnalysis.VisualBasic.VisualBasicParseOptions.CommonWithKind(kind As Microsoft.CodeAnalysis.SourceCodeKind) -> Microsoft.CodeAnalysis.ParseOptions
Shared Microsoft.CodeAnalysis.VisualBasic.VisualBasicCompilation.CreateSubmission(assemblyName As String, syntaxTree As Microsoft.CodeAnalysis.SyntaxTree = Nothing, references As System.Collections.Generic.IEnumerable(Of Microsoft.CodeAnalysis.MetadataReference) = Nothing, options As Microsoft.CodeAnalysis.VisualBasic.VisualBasicCompilationOptions = Nothing, previousSubmission As Microsoft.CodeAnalysis.Compilation = Nothing, returnType As System.Type = Nothing, hostObjectType As System.Type = Nothing) -> Microsoft.CodeAnalysis.VisualBasic.VisualBasicCompilation
\ No newline at end of file
Overrides Microsoft.CodeAnalysis.VisualBasic.VisualBasicParseOptions.CommonWithKind(kind As Microsoft.CodeAnalysis.SourceCodeKind) -> Microsoft.CodeAnalysis.ParseOptions
\ No newline at end of file
......@@ -124,15 +124,6 @@ Namespace Microsoft.CodeAnalysis.VisualBasic
End Get
End Property
'''<summary>
''' Looks up a localized string similar to This compilation doesn&apos;t represent an interactive submission..
'''</summary>
Friend ReadOnly Property CompilationDoesNotRepresentInteractiveSubmission() As String
Get
Return ResourceManager.GetString("CompilationDoesNotRepresentInteractiveSubmission", resourceCulture)
End Get
End Property
'''<summary>
''' Looks up a localized string similar to Compilation (Visual Basic): .
'''</summary>
......
......@@ -4910,9 +4910,6 @@
<data name="IDS_TheSystemCannotFindThePathSpecified" xml:space="preserve">
<value>The system cannot find the path specified</value>
</data>
<data name="CompilationDoesNotRepresentInteractiveSubmission" xml:space="preserve">
<value>This compilation doesn't represent an interactive submission.</value>
</data>
<data name="IDS_UnrecognizedFileFormat" xml:space="preserve">
<value>Unrecognized file format.</value>
</data>
......
......@@ -177,30 +177,30 @@ Next
Public Sub ChainingAnonymousTypeTemplates()
Dim references = LatestVbReferences
Dim s0 = VisualBasicCompilation.CreateSubmission("s0.dll",
Dim s0 = VisualBasicCompilation.CreateScriptCompilation("s0.dll",
syntaxTree:=VisualBasicSyntaxTree.ParseText(
"Dim x = New With {.a = 1}", options:=TestOptions.Script),
references:=references,
returnType:=GetType(Object))
Dim s__ = VisualBasicCompilation.CreateSubmission("s__.dll",
Dim s__ = VisualBasicCompilation.CreateScriptCompilation("s__.dll",
syntaxTree:=VisualBasicSyntaxTree.ParseText(
"Dim y = New With {.b = 1}", options:=TestOptions.Script),
previousSubmission:=s0,
previousScriptCompilation:=s0,
references:=references,
returnType:=GetType(Object))
Dim s1 = VisualBasicCompilation.CreateSubmission("s1.dll",
Dim s1 = VisualBasicCompilation.CreateScriptCompilation("s1.dll",
syntaxTree:=VisualBasicSyntaxTree.ParseText(
"Dim y = New With {.a = New With {.b = 1} }", options:=TestOptions.Script),
previousSubmission:=s0,
previousScriptCompilation:=s0,
references:=references,
returnType:=GetType(Object))
Dim s2 = VisualBasicCompilation.CreateSubmission("s2.dll",
Dim s2 = VisualBasicCompilation.CreateScriptCompilation("s2.dll",
syntaxTree:=VisualBasicSyntaxTree.ParseText(
"? x.GetType() Is y.GetType()", options:=TestOptions.Script),
previousSubmission:=s1,
previousScriptCompilation:=s1,
references:=references,
returnType:=GetType(Object))
......@@ -256,7 +256,7 @@ Next
Public Sub LabelLookup()
Const source = "Imports System : 1"
Dim tree = Parse(source, options:=TestOptions.Script)
Dim submission = VisualBasicCompilation.CreateSubmission("sub1", tree, {MscorlibRef})
Dim submission = VisualBasicCompilation.CreateScriptCompilation("sub1", tree, {MscorlibRef})
Dim model = submission.GetSemanticModel(tree)
Assert.Empty(model.LookupLabels(source.Length - 1))
End Sub
......@@ -264,7 +264,7 @@ Next
<WorkItem(3795, "https:'github.com/dotnet/roslyn/issues/3795")>
<Fact>
Public Sub ErrorInUsing()
Dim submission = VisualBasicCompilation.CreateSubmission("sub1", Parse("Imports Unknown", options:=TestOptions.Script), {MscorlibRef})
Dim submission = VisualBasicCompilation.CreateScriptCompilation("sub1", Parse("Imports Unknown", options:=TestOptions.Script), {MscorlibRef})
Dim expectedErrors = <errors><![CDATA[
BC40056: Namespace or type specified in the Imports 'Unknown' doesn't contain any public member or cannot be found. Make sure the namespace or the type is defined and contains at least one public member. Make sure the imported element name doesn't use any aliases.
......@@ -352,7 +352,7 @@ System.Console.Write("complete")
System.Threading.Tasks.Task.Delay(100)
System.Console.Write("complete")
]]>
Dim s0 = VisualBasicCompilation.CreateSubmission(
Dim s0 = VisualBasicCompilation.CreateScriptCompilation(
"s0.dll",
syntaxTree:=Parse(source0.Value, parseOptions),
references:=references)
......
......@@ -1322,7 +1322,7 @@ End Class
<Fact()>
Public Sub GetEntryPoint_Submission()
Dim source = "? 1 + 1"
Dim compilation = VisualBasicCompilation.CreateSubmission(
Dim compilation = VisualBasicCompilation.CreateScriptCompilation(
"sub",
references:={MscorlibRef},
syntaxTree:=Parse(source, options:=TestOptions.Script))
......@@ -1346,7 +1346,7 @@ End Class
End Sub
End Class
"
Dim compilation = VisualBasicCompilation.CreateSubmission(
Dim compilation = VisualBasicCompilation.CreateScriptCompilation(
"Sub",
references:={MscorlibRef},
syntaxTree:=Parse(source, options:=TestOptions.Script))
......@@ -1416,10 +1416,10 @@ End Class
<Fact>
Public Sub ReferenceManagerReuse_WithPreviousSubmission()
Dim s1 = VisualBasicCompilation.CreateSubmission("s1")
Dim s2 = VisualBasicCompilation.CreateSubmission("s2")
Dim s1 = VisualBasicCompilation.CreateScriptCompilation("s1")
Dim s2 = VisualBasicCompilation.CreateScriptCompilation("s2")
Dim s3 = s2.WithPreviousSubmission(s1)
Dim s3 = s2.WithScriptCompilationInfo(s2.ScriptCompilationInfo.WithPreviousScriptCompilation(s1))
Assert.True(s2.ReferenceManagerEquals(s3))
End Sub
......@@ -1720,35 +1720,35 @@ End Namespace
Dim ptr = GetType(Integer).MakePointerType()
Dim byRefType = GetType(Integer).MakeByRefType()
Assert.Throws(Of ArgumentException)(Function() VisualBasicCompilation.CreateSubmission("a", returnType:=genericParameter))
Assert.Throws(Of ArgumentException)(Function() VisualBasicCompilation.CreateSubmission("a", returnType:=open))
Assert.Throws(Of ArgumentException)(Function() VisualBasicCompilation.CreateSubmission("a", returnType:=GetType(Void)))
Assert.Throws(Of ArgumentException)(Function() VisualBasicCompilation.CreateSubmission("a", returnType:=byRefType))
Assert.Throws(Of ArgumentException)(Function() VisualBasicCompilation.CreateSubmission("a", hostObjectType:=genericParameter))
Assert.Throws(Of ArgumentException)(Function() VisualBasicCompilation.CreateSubmission("a", hostObjectType:=open))
Assert.Throws(Of ArgumentException)(Function() VisualBasicCompilation.CreateSubmission("a", hostObjectType:=GetType(Void)))
Assert.Throws(Of ArgumentException)(Function() VisualBasicCompilation.CreateSubmission("a", hostObjectType:=GetType(Integer)))
Assert.Throws(Of ArgumentException)(Function() VisualBasicCompilation.CreateSubmission("a", hostObjectType:=ptr))
Assert.Throws(Of ArgumentException)(Function() VisualBasicCompilation.CreateSubmission("a", hostObjectType:=byRefType))
Assert.Throws(Of ArgumentException)(Function() VisualBasicCompilation.CreateScriptCompilation("a", returnType:=genericParameter))
Assert.Throws(Of ArgumentException)(Function() VisualBasicCompilation.CreateScriptCompilation("a", returnType:=open))
Assert.Throws(Of ArgumentException)(Function() VisualBasicCompilation.CreateScriptCompilation("a", returnType:=GetType(Void)))
Assert.Throws(Of ArgumentException)(Function() VisualBasicCompilation.CreateScriptCompilation("a", returnType:=byRefType))
Assert.Throws(Of ArgumentException)(Function() VisualBasicCompilation.CreateScriptCompilation("a", globalsType:=genericParameter))
Assert.Throws(Of ArgumentException)(Function() VisualBasicCompilation.CreateScriptCompilation("a", globalsType:=open))
Assert.Throws(Of ArgumentException)(Function() VisualBasicCompilation.CreateScriptCompilation("a", globalsType:=GetType(Void)))
Assert.Throws(Of ArgumentException)(Function() VisualBasicCompilation.CreateScriptCompilation("a", globalsType:=GetType(Integer)))
Assert.Throws(Of ArgumentException)(Function() VisualBasicCompilation.CreateScriptCompilation("a", globalsType:=ptr))
Assert.Throws(Of ArgumentException)(Function() VisualBasicCompilation.CreateScriptCompilation("a", globalsType:=byRefType))
Dim s0 = VisualBasicCompilation.CreateSubmission("a0", hostObjectType:=GetType(List(Of Integer)))
Assert.Throws(Of ArgumentException)(Function() VisualBasicCompilation.CreateSubmission("a1", previousSubmission:=s0, hostObjectType:=GetType(List(Of Boolean))))
Dim s0 = VisualBasicCompilation.CreateScriptCompilation("a0", globalsType:=GetType(List(Of Integer)))
Assert.Throws(Of ArgumentException)(Function() VisualBasicCompilation.CreateScriptCompilation("a1", previousScriptCompilation:=s0, globalsType:=GetType(List(Of Boolean))))
' invalid options
Assert.Throws(Of ArgumentException)(Function() VisualBasicCompilation.CreateSubmission("a", options:=TestOptions.ReleaseExe))
Assert.Throws(Of ArgumentException)(Function() VisualBasicCompilation.CreateSubmission("a", options:=TestOptions.ReleaseDll.WithOutputKind(OutputKind.NetModule)))
Assert.Throws(Of ArgumentException)(Function() VisualBasicCompilation.CreateSubmission("a", options:=TestOptions.ReleaseDll.WithOutputKind(OutputKind.WindowsRuntimeMetadata)))
Assert.Throws(Of ArgumentException)(Function() VisualBasicCompilation.CreateSubmission("a", options:=TestOptions.ReleaseDll.WithOutputKind(OutputKind.WindowsRuntimeApplication)))
Assert.Throws(Of ArgumentException)(Function() VisualBasicCompilation.CreateSubmission("a", options:=TestOptions.ReleaseDll.WithOutputKind(OutputKind.WindowsApplication)))
Assert.Throws(Of ArgumentException)(Function() VisualBasicCompilation.CreateSubmission("a", options:=TestOptions.ReleaseDll.WithCryptoKeyContainer("foo")))
Assert.Throws(Of ArgumentException)(Function() VisualBasicCompilation.CreateSubmission("a", options:=TestOptions.ReleaseDll.WithCryptoKeyFile("foo.snk")))
Assert.Throws(Of ArgumentException)(Function() VisualBasicCompilation.CreateSubmission("a", options:=TestOptions.ReleaseDll.WithDelaySign(True)))
Assert.Throws(Of ArgumentException)(Function() VisualBasicCompilation.CreateSubmission("a", options:=TestOptions.ReleaseDll.WithDelaySign(False)))
Assert.Throws(Of ArgumentException)(Function() VisualBasicCompilation.CreateScriptCompilation("a", options:=TestOptions.ReleaseExe))
Assert.Throws(Of ArgumentException)(Function() VisualBasicCompilation.CreateScriptCompilation("a", options:=TestOptions.ReleaseDll.WithOutputKind(OutputKind.NetModule)))
Assert.Throws(Of ArgumentException)(Function() VisualBasicCompilation.CreateScriptCompilation("a", options:=TestOptions.ReleaseDll.WithOutputKind(OutputKind.WindowsRuntimeMetadata)))
Assert.Throws(Of ArgumentException)(Function() VisualBasicCompilation.CreateScriptCompilation("a", options:=TestOptions.ReleaseDll.WithOutputKind(OutputKind.WindowsRuntimeApplication)))
Assert.Throws(Of ArgumentException)(Function() VisualBasicCompilation.CreateScriptCompilation("a", options:=TestOptions.ReleaseDll.WithOutputKind(OutputKind.WindowsApplication)))
Assert.Throws(Of ArgumentException)(Function() VisualBasicCompilation.CreateScriptCompilation("a", options:=TestOptions.ReleaseDll.WithCryptoKeyContainer("foo")))
Assert.Throws(Of ArgumentException)(Function() VisualBasicCompilation.CreateScriptCompilation("a", options:=TestOptions.ReleaseDll.WithCryptoKeyFile("foo.snk")))
Assert.Throws(Of ArgumentException)(Function() VisualBasicCompilation.CreateScriptCompilation("a", options:=TestOptions.ReleaseDll.WithDelaySign(True)))
Assert.Throws(Of ArgumentException)(Function() VisualBasicCompilation.CreateScriptCompilation("a", options:=TestOptions.ReleaseDll.WithDelaySign(False)))
End Sub
<Fact>
Public Sub SubmissionResultType()
Dim submission = VisualBasicCompilation.CreateSubmission("sub")
Dim submission = VisualBasicCompilation.CreateScriptCompilation("sub")
Dim hasValue As Boolean
Assert.Equal(SpecialType.System_Void, submission.GetSubmissionResultType(hasValue).SpecialType)
Assert.False(hasValue)
......@@ -1788,7 +1788,7 @@ End Sub
Private Shared Sub TestSubmissionResult(s As VisualBasicCompilation, expectedType As Func(Of TypeSymbol, Boolean), expectedHasValue As Boolean)
Dim hasValue As Boolean
Dim type = s.GetSubmissionResultType(hasValue)
Assert.True(expectedType(type), "unexpected type")
Assert.True(expectedType(DirectCast(type, TypeSymbol)), "unexpected type")
Assert.Equal(expectedHasValue, hasValue)
End Sub
......
......@@ -299,7 +299,7 @@ Imports System
<Fact>
Public Sub UnusedImportInteractive()
Dim tree = Parse("Imports System", options:=TestOptions.Script)
Dim compilation = VisualBasicCompilation.CreateSubmission("sub1", tree, {MscorlibRef_v4_0_30316_17626})
Dim compilation = VisualBasicCompilation.CreateScriptCompilation("sub1", tree, {MscorlibRef_v4_0_30316_17626})
compilation.AssertNoDiagnostics(suppressInfos:=False)
End Sub
......
......@@ -45,7 +45,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic.UnitTests.Semantics
Dim arbitraryTree = VisualBasicSyntaxTree.Create(SyntaxFactory.Attribute(SyntaxFactory.IdentifierName("Wooh")))
Dim parsedTree = VisualBasicSyntaxTree.ParseText("Class TheClass _ End Class")
Assert.Throws(Of ArgumentException)(Function() VisualBasicCompilation.Create("Grrr", syntaxTrees:={arbitraryTree}))
Assert.Throws(Of ArgumentException)(Function() VisualBasicCompilation.CreateSubmission("Wah").AddSyntaxTrees(arbitraryTree))
Assert.Throws(Of ArgumentException)(Function() VisualBasicCompilation.CreateScriptCompilation("Wah").AddSyntaxTrees(arbitraryTree))
Assert.Throws(Of ArgumentException)(Sub() VisualBasicCompilation.Create("Bah", syntaxTrees:={parsedTree}).ReplaceSyntaxTree(parsedTree, arbitraryTree))
'FIXME: Assert.Throws(Of ArgumentException)(Function() VisualBasicCompilation.Create("Woo").GetSemanticModel(tree))
End Sub
......
......@@ -2469,17 +2469,17 @@ End Function
Dim o As New Object()
? o.G().F()"
Dim s0 = VisualBasicCompilation.CreateSubmission(
Dim s0 = VisualBasicCompilation.CreateScriptCompilation(
"s0.dll",
syntaxTree:=Parse(source0, TestOptions.Script),
references:=references)
s0.VerifyDiagnostics()
Assert.True(s0.SourceAssembly.MightContainExtensionMethods)
Dim s1 = VisualBasicCompilation.CreateSubmission(
Dim s1 = VisualBasicCompilation.CreateScriptCompilation(
"s1.dll",
syntaxTree:=Parse(source1, TestOptions.Script),
previousSubmission:=s0,
previousScriptCompilation:=s0,
references:=references)
s1.VerifyDiagnostics()
Assert.True(s1.SourceAssembly.MightContainExtensionMethods)
......
......@@ -23698,7 +23698,7 @@ Friend MustOverride ReadOnly Property P
Friend MustOverride Function F() As Object
Friend MustOverride ReadOnly Property P
]]>
Dim submission = VisualBasicCompilation.CreateSubmission(
Dim submission = VisualBasicCompilation.CreateScriptCompilation(
"s0.dll",
syntaxTree:=Parse(source.Value, TestOptions.Script),
references:={MscorlibRef, SystemCoreRef})
......
......@@ -891,7 +891,7 @@ Namespace Microsoft.CodeAnalysis.Editor.UnitTests.FindReferences
End Sub
<WorkItem(2544, "https://github.com/dotnet/roslyn/issues/2544")>
<WpfFact(Skip:="2544"), Trait(Traits.Feature, Traits.Features.FindReferences)>
<WpfFact, Trait(Traits.Feature, Traits.Features.FindReferences)>
Public Sub TestInaccessibleMemberOverrideCS()
Dim workspace =
<Workspace>
......
......@@ -462,18 +462,9 @@ private async Task<EvaluationState> ExecuteAsync(Task<EvaluationState> lastTask,
private void DisplaySubmissionResult(ScriptState<object> state)
{
bool hasValue;
var resultType = state.Script.GetCompilation().GetSubmissionResultType(out hasValue);
if (hasValue)
if (state.Script.HasReturnValue())
{
if (resultType != null && resultType.SpecialType == SpecialType.System_Void)
{
Console.Out.WriteLine(_replServiceProvider.ObjectFormatter.VoidDisplayString);
}
else
{
_globals.Print(state.ReturnValue);
}
_globals.Print(state.ReturnValue);
}
}
......@@ -761,14 +752,10 @@ private Script<object> TryCompile(Script previousScript, string code, string pat
script = _replServiceProvider.CreateScript<object>(code, scriptOptions, _globals.GetType(), _assemblyLoader);
}
// force build so exception is thrown now if errors are found.
try
{
script.Build();
}
catch (CompilationErrorException e)
var diagnostics = script.Build();
if (diagnostics.HasAnyErrors())
{
DisplayInteractiveErrors(e.Diagnostics, Console.Error);
DisplayInteractiveErrors(diagnostics, Console.Error);
return null;
}
......
......@@ -996,7 +996,7 @@ public void SubmissionResult_PrintingVoid()
Execute(@"System.Console.WriteLine(2)");
var output = ReadOutputToEnd();
Assert.Equal("2\r\n<void>\r\n", output);
Assert.Equal("2\r\n", output);
Execute(@"
void foo() { }
......@@ -1004,7 +1004,7 @@ public void SubmissionResult_PrintingVoid()
");
output = ReadOutputToEnd();
Assert.Equal("<void>\r\n", output);
Assert.Equal("", output);
}
#endregion
......
......@@ -28,10 +28,10 @@ private CSharpScriptCompiler()
public override Compilation CreateSubmission(Script script)
{
Compilation previousSubmission = null;
CSharpCompilation previousSubmission = null;
if (script.Previous != null)
{
previousSubmission = script.Previous.GetCompilation();
previousSubmission = (CSharpCompilation)script.Previous.GetCompilation();
}
var diagnostics = DiagnosticBag.GetInstance();
......@@ -45,7 +45,7 @@ public override Compilation CreateSubmission(Script script)
string assemblyName, submissionTypeName;
script.Builder.GenerateSubmissionId(out assemblyName, out submissionTypeName);
var compilation = CSharpCompilation.CreateSubmission(
var compilation = CSharpCompilation.CreateScriptCompilation(
assemblyName,
tree,
references,
......
......@@ -86,6 +86,27 @@ public void Await()
> ", runner.Console.Out.ToString());
}
[Fact]
public void Void()
{
var runner = CreateRunner(input:
@"Print(1);
Print(2)
");
runner.RunInteractive();
AssertEx.AssertEqualToleratingWhitespaceDifferences(
$@"Microsoft (R) Visual C# Interactive Compiler version {CompilerVersion}
Copyright (C) Microsoft Corporation. All rights reserved.
Type ""#help"" for more information.
> Print(1);
1
> Print(2)
2
> ", runner.Console.Out.ToString());
}
[Fact]
public void Exception()
{
......
......@@ -199,9 +199,7 @@ private void RunInteractiveLoop(ScriptOptions options, string initialScriptCodeO
if (initialScriptCodeOpt != null)
{
var script = Script.CreateInitialScript<object>(_scriptCompiler, initialScriptCodeOpt, options, globals.GetType(), assemblyLoaderOpt: null);
Compilation compilation;
TryBuildAndRun(script, globals, ref state, out compilation, cancellationToken);
TryBuildAndRun(script, globals, ref state, cancellationToken);
}
while (true)
......@@ -259,42 +257,24 @@ private void RunInteractiveLoop(ScriptOptions options, string initialScriptCodeO
newScript = state.Script.ContinueWith(code, options);
}
Compilation newCompilation;
if (!TryBuildAndRun(newScript, globals, ref state, out newCompilation, cancellationToken))
if (!TryBuildAndRun(newScript, globals, ref state, cancellationToken))
{
continue;
}
bool hasValue;
ITypeSymbol resultType = newCompilation.GetSubmissionResultType(out hasValue);
if (hasValue)
if (newScript.HasReturnValue())
{
if (resultType != null && resultType.SpecialType == SpecialType.System_Void)
{
_console.Out.WriteLine(_objectFormatter.VoidDisplayString);
}
else
{
globals.Print(state.ReturnValue);
}
globals.Print(state.ReturnValue);
}
}
}
private bool TryBuildAndRun(Script<object> newScript, object globals, ref ScriptState<object> state, out Compilation newCompilation, CancellationToken cancellationToken)
private bool TryBuildAndRun(Script<object> newScript, object globals, ref ScriptState<object> state, CancellationToken cancellationToken)
{
newCompilation = newScript.GetCompilation();
try
{
newScript.Build(cancellationToken);
// display warnings:
DisplayDiagnostics(newCompilation.GetDiagnostics(cancellationToken).Where(d => d.Severity == DiagnosticSeverity.Warning));
}
catch (CompilationErrorException e)
var diagnostics = newScript.Build(cancellationToken);
DisplayDiagnostics(diagnostics);
if (diagnostics.HasAnyErrors())
{
DisplayDiagnostics(e.Diagnostics.Where(d => d.Severity == DiagnosticSeverity.Error || d.Severity == DiagnosticSeverity.Warning));
return false;
}
......
......@@ -33,7 +33,7 @@ Microsoft.CodeAnalysis.Scripting.Hosting.ShadowCopy
Microsoft.CodeAnalysis.Scripting.Hosting.ShadowCopy.FullPath.get -> string
Microsoft.CodeAnalysis.Scripting.Hosting.ShadowCopy.OriginalPath.get -> string
Microsoft.CodeAnalysis.Scripting.Script
Microsoft.CodeAnalysis.Scripting.Script.Build(System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) -> void
Microsoft.CodeAnalysis.Scripting.Script.Build(System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) -> System.Collections.Immutable.ImmutableArray<Microsoft.CodeAnalysis.Diagnostic>
Microsoft.CodeAnalysis.Scripting.Script.Code.get -> string
Microsoft.CodeAnalysis.Scripting.Script.ContinueWith(string code, Microsoft.CodeAnalysis.Scripting.ScriptOptions options = null) -> Microsoft.CodeAnalysis.Scripting.Script<object>
Microsoft.CodeAnalysis.Scripting.Script.ContinueWith<TResult>(string code, Microsoft.CodeAnalysis.Scripting.ScriptOptions options = null) -> Microsoft.CodeAnalysis.Scripting.Script<TResult>
......
......@@ -165,10 +165,10 @@ public Compilation GetCompilation()
/// Forces the script through the build step.
/// If not called directly, the build step will occur on the first call to Run.
/// </summary>
public void Build(CancellationToken cancellationToken = default(CancellationToken)) =>
public ImmutableArray<Diagnostic> Build(CancellationToken cancellationToken = default(CancellationToken)) =>
CommonBuild(cancellationToken);
internal abstract void CommonBuild(CancellationToken cancellationToken);
internal abstract ImmutableArray<Diagnostic> CommonBuild(CancellationToken cancellationToken);
internal abstract Func<object[], Task> CommonGetExecutor(CancellationToken cancellationToken);
/// <summary>
......@@ -235,6 +235,26 @@ public Compilation GetCompilation()
references.Free();
}
}
// TODO: remove
internal bool HasReturnValue()
{
bool hasValue;
var resultType = GetCompilation().GetSubmissionResultType(out hasValue);
if (hasValue)
{
if (resultType != null && resultType.SpecialType == SpecialType.System_Void)
{
return false;
}
else
{
return true;
}
}
return false;
}
}
public sealed class Script<T> : Script
......@@ -268,12 +288,21 @@ public new Script<T> WithGlobalsType(Type globalsType)
internal override Script WithOptionsInternal(ScriptOptions options) => WithOptions(options);
internal override Script WithCodeInternal(string code) => WithCode(code);
internal override Script WithGlobalsTypeInternal(Type globalsType) => WithGlobalsType(globalsType);
/// <exception cref="CompilationErrorException">Compilation has errors.</exception>
internal override void CommonBuild(CancellationToken cancellationToken)
internal override ImmutableArray<Diagnostic> CommonBuild(CancellationToken cancellationToken)
{
GetPrecedingExecutors(cancellationToken);
GetExecutor(cancellationToken);
// TODO: avoid throwing exception, report all diagnostics https://github.com/dotnet/roslyn/issues/5949
try
{
GetPrecedingExecutors(cancellationToken);
GetExecutor(cancellationToken);
return ImmutableArray.CreateRange(GetCompilation().GetDiagnostics(cancellationToken).Where(d => d.Severity == DiagnosticSeverity.Warning));
}
catch (CompilationErrorException e)
{
return ImmutableArray.CreateRange(e.Diagnostics.Where(d => d.Severity == DiagnosticSeverity.Error || d.Severity == DiagnosticSeverity.Warning));
}
}
internal override Func<object[], Task> CommonGetExecutor(CancellationToken cancellationToken)
......
......@@ -110,8 +110,8 @@
<InternalsVisibleTo Include="Microsoft.CodeAnalysis.Scripting.VisualBasic" />
<InternalsVisibleTo Include="csi" />
<InternalsVisibleTo Include="vbi" />
<!-- TODO: remove, see https://github.com/dotnet/roslyn/issues/5661 -->
<InternalsVisibleTo Include="Microsoft.CodeAnalysis.InteractiveFeatures" />
<!-- TODO: remove, see https://github.com/dotnet/roslyn/issues/5661 -->
<InternalsVisibleTo Include="Microsoft.CodeAnalysis.InteractiveEditorFeatures" />
<InternalsVisibleTo Include="Microsoft.CodeAnalysis.CSharp.InteractiveEditorFeatures" />
<InternalsVisibleTo Include="Microsoft.CodeAnalysis.VisualBasic.InteractiveEditorFeatures" />
......
......@@ -46,9 +46,9 @@ Namespace Microsoft.CodeAnalysis.Scripting.VisualBasic
End Function
Public Overrides Function CreateSubmission(script As Script) As Compilation
Dim previousSubmission As Compilation = Nothing
Dim previousSubmission As VisualBasicCompilation = Nothing
If script.Previous IsNot Nothing Then
previousSubmission = script.Previous.GetCompilation()
previousSubmission = DirectCast(script.Previous.GetCompilation(), VisualBasicCompilation)
End If
Dim diagnostics = DiagnosticBag.GetInstance()
......@@ -67,7 +67,7 @@ Namespace Microsoft.CodeAnalysis.Scripting.VisualBasic
Dim globalImports = GetGlobalImportsForCompilation(script)
Dim submission = VisualBasicCompilation.CreateSubmission(
Dim submission = VisualBasicCompilation.CreateScriptCompilation(
assemblyName,
tree,
references,
......
......@@ -140,9 +140,10 @@ private static string DetectNameCollision(IEnumerable<ModuleData> modules)
internal static void EmitReferences(Compilation compilation, List<ModuleData> dependencies, DiagnosticBag diagnostics)
{
if (compilation.PreviousSubmission != null)
var previousSubmission = compilation.ScriptCompilationInfo?.PreviousScriptCompilation;
if (previousSubmission != null)
{
EmitDependentCompilation(compilation.PreviousSubmission, dependencies, diagnostics);
EmitDependentCompilation(previousSubmission, dependencies, diagnostics);
}
foreach (MetadataReference r in compilation.References)
......
......@@ -22,11 +22,11 @@ Compilation ICompilationFactoryService.CreateCompilation(string assemblyName, Co
Compilation ICompilationFactoryService.CreateSubmissionCompilation(string assemblyName, CompilationOptions options, Type hostObjectType)
{
return CSharpCompilation.CreateSubmission(
return CSharpCompilation.CreateScriptCompilation(
assemblyName,
options: (CSharpCompilationOptions)options,
previousSubmission: null,
hostObjectType: hostObjectType);
previousScriptCompilation: null,
globalsType: hostObjectType);
}
Compilation ICompilationFactoryService.GetCompilationFromCompilationReference(MetadataReference reference)
......
......@@ -238,9 +238,11 @@ private static async Task AddSubmissionDependentProjectsAsync(Solution solution,
// If we are referencing another project, store the link in the other direction
// so we walk across it later
var compilation = await project.GetCompilationAsync(cancellationToken).ConfigureAwait(false);
if (compilation.PreviousSubmission != null)
var previous = compilation.ScriptCompilationInfo.PreviousScriptCompilation;
if (previous != null)
{
var referencedProject = solution.GetProject(compilation.PreviousSubmission.Assembly, cancellationToken);
var referencedProject = solution.GetProject(previous.Assembly, cancellationToken);
List<ProjectId> referencingSubmissions = null;
if (!projectIdsToReferencingSubmissionIds.TryGetValue(referencedProject.Id, out referencingSubmissions))
......
......@@ -250,7 +250,7 @@ public CompilationTracker FreezePartialStateWithTree(Solution solution, Document
if (referencedProject.IsSubmission)
{
var compilation = solution.GetCompilationAsync(projectReference.ProjectId, cancellationToken).WaitAndGetResult(cancellationToken);
inProgressCompilation = inProgressCompilation.WithPreviousSubmission(compilation);
inProgressCompilation = inProgressCompilation.WithCompilationScriptInfo(inProgressCompilation.ScriptCompilationInfo.WithPreviousScriptCompilation(compilation));
}
else
{
......@@ -591,7 +591,9 @@ private Compilation CreateEmptyCompilation()
var previousSubmissionCompilation =
await solution.GetCompilationAsync(projectReference.ProjectId, cancellationToken).ConfigureAwait(false);
compilation = compilation.WithPreviousSubmission(previousSubmissionCompilation);
compilation = compilation.WithCompilationScriptInfo(
compilation.ScriptCompilationInfo.WithPreviousScriptCompilation(previousSubmissionCompilation));
}
else
{
......
......@@ -26,10 +26,12 @@ Namespace Microsoft.CodeAnalysis.VisualBasic
options As CompilationOptions,
hostObjectType As Type) As Compilation Implements ICompilationFactoryService.CreateSubmissionCompilation
Return VisualBasicCompilation.CreateSubmission(
assemblyName,
options:=DirectCast(options, VisualBasicCompilationOptions),
hostObjectType:=hostObjectType)
Throw New NotImplementedException()
' https://github.com/dotnet/roslyn/issues/5944
'Return VisualBasicCompilation.CreateScriptCompilation(
' assemblyName,
' options:=DirectCast(options, VisualBasicCompilationOptions),
' globalsType:=hostObjectType)
End Function
Private Function ICompilationFactoryService_GetCompilationFromCompilationReference(reference As MetadataReference) As Compilation Implements ICompilationFactoryService.GetCompilationFromCompilationReference
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册