Пример #1
0
        internal static SynthesizedEntryPointSymbol Create(
            SynthesizedInteractiveInitializerMethod initializerMethod,
            BindingDiagnosticBag diagnostics
            )
        {
            var containingType = initializerMethod.ContainingType;
            var compilation    = containingType.DeclaringCompilation;

            if (compilation.IsSubmission)
            {
                var systemObject = Binder.GetSpecialType(
                    compilation,
                    SpecialType.System_Object,
                    DummySyntax(),
                    diagnostics
                    );
                var submissionArrayType = compilation.CreateArrayTypeSymbol(systemObject);
                diagnostics.ReportUseSite(submissionArrayType, NoLocation.Singleton);
                return(new SubmissionEntryPoint(
                           containingType,
                           initializerMethod.ReturnTypeWithAnnotations,
                           submissionArrayType
                           ));
            }
            else
            {
                var systemVoid = Binder.GetSpecialType(
                    compilation,
                    SpecialType.System_Void,
                    DummySyntax(),
                    diagnostics
                    );
                return(new ScriptEntryPoint(containingType, TypeWithAnnotations.Create(systemVoid)));
            }
        }
Пример #2
0
 protected override void CheckBase(BindingDiagnosticBag diagnostics)
 {
     // check that System.Object is available.
     // Although submission semantically doesn't have a base class we need to emit one.
     diagnostics.ReportUseSite(
         this.DeclaringCompilation.GetSpecialType(SpecialType.System_Object),
         Locations[0]
         );
 }
Пример #3
0
        private static void ReportErrorOnSymbol(Symbol symbol, BindingDiagnosticBag diagnostics, ref bool hasError)
        {
            if ((object)symbol == null)
            {
                return;
            }

            hasError |= diagnostics.ReportUseSite(symbol, NoLocation.Singleton);
        }
Пример #4
0
        private void CheckConstraintTypeConstraints(BindingDiagnosticBag diagnostics)
        {
            var constraintTypes = this.ConstraintTypesNoUseSiteDiagnostics;

            if (constraintTypes.Length == 0)
            {
                return;
            }

            var args = new ConstraintsHelper.CheckConstraintsArgsBoxed(DeclaringCompilation, new TypeConversions(ContainingAssembly.CorLibrary), _locations[0], diagnostics);

            foreach (var constraintType in constraintTypes)
            {
                if (!diagnostics.ReportUseSite(constraintType.Type, args.Args.Location))
                {
                    constraintType.Type.CheckAllConstraints(args);
                }
            }
        }
Пример #5
0
        private static void CalculateReturnType(
            SourceMemberContainerTypeSymbol containingType,
            BindingDiagnosticBag diagnostics,
            out TypeSymbol resultType,
            out TypeSymbol returnType)
        {
            CSharpCompilation compilation = containingType.DeclaringCompilation;
            var submissionReturnTypeOpt   = compilation.ScriptCompilationInfo?.ReturnTypeOpt;
            var taskT = compilation.GetWellKnownType(WellKnownType.System_Threading_Tasks_Task_T);

            diagnostics.ReportUseSite(taskT, NoLocation.Singleton);

            // If no explicit return type is set on ScriptCompilationInfo, default to
            // System.Object from the target corlib. This allows cross compiling scripts
            // to run on a target corlib that may differ from the host compiler's corlib.
            // cf. https://github.com/dotnet/roslyn/issues/8506
            resultType = (object)submissionReturnTypeOpt == null
                ? compilation.GetSpecialType(SpecialType.System_Object)
                : compilation.GetTypeByReflectionType(submissionReturnTypeOpt, diagnostics);

            returnType = taskT.Construct(resultType);
        }